mirror of
https://github.com/OpenSpace/OpenSpace.git
synced 2026-02-26 06:49:09 -06:00
Linux compile fix with template specialization
This commit is contained in:
@@ -35,7 +35,18 @@ public:
|
||||
|
||||
SyncBuffer(size_t n);
|
||||
|
||||
template<typename T>
|
||||
void encode(const std::string& s) {
|
||||
const size_t size = sizeof(char) * s.size() + sizeof(int32_t);
|
||||
assert(_encodeOffset + size < _n);
|
||||
|
||||
int32_t length = static_cast<int32_t>(s.length());
|
||||
memcpy(_dataStream.data() + _encodeOffset, reinterpret_cast<const char*>(&length), sizeof(int32_t));
|
||||
_encodeOffset += sizeof(int32_t);
|
||||
memcpy(_dataStream.data() + _encodeOffset, s.c_str(), length);
|
||||
_encodeOffset += length;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
void encode(const T& v) {
|
||||
const size_t size = sizeof(T);
|
||||
assert(_encodeOffset + size < _n);
|
||||
@@ -44,19 +55,20 @@ public:
|
||||
_encodeOffset += size;
|
||||
}
|
||||
|
||||
template<>
|
||||
void encode(const std::string& s) {
|
||||
const size_t size = sizeof(char) * s.size() + sizeof(int32_t);
|
||||
assert(_encodeOffset + size < _n);
|
||||
std::string decode() {
|
||||
int32_t length;
|
||||
memcpy(reinterpret_cast<char*>(&length), _dataStream.data() + _decodeOffset, sizeof(int32_t));
|
||||
char* tmp = new char[length + 1];
|
||||
_decodeOffset += sizeof(int32_t);
|
||||
memcpy(tmp, _dataStream.data() + _decodeOffset, length);
|
||||
_decodeOffset += length;
|
||||
tmp[length] = '\0';
|
||||
std::string ret(tmp);
|
||||
delete[] tmp;
|
||||
return ret;
|
||||
}
|
||||
|
||||
int32_t length = s.length();
|
||||
memcpy(_dataStream.data() + _encodeOffset, reinterpret_cast<const char*>(&length), sizeof(int32_t));
|
||||
_encodeOffset += sizeof(int32_t);
|
||||
memcpy(_dataStream.data() + _encodeOffset, s.c_str(), length);
|
||||
_encodeOffset += length;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
template <typename T>
|
||||
T decode() {
|
||||
const size_t size = sizeof(T);
|
||||
assert(_decodeOffset + size < _n);
|
||||
@@ -66,21 +78,11 @@ public:
|
||||
return value;
|
||||
}
|
||||
|
||||
template<>
|
||||
std::string decode() {
|
||||
int32_t length;
|
||||
memcpy(reinterpret_cast<char*>(&length), _dataStream.data() + _decodeOffset, sizeof(int32_t));
|
||||
char* tmp = new char[length + 1];
|
||||
_decodeOffset += sizeof(int32_t);
|
||||
memcpy(tmp, _dataStream.data() + _decodeOffset, length);
|
||||
_decodeOffset += length;
|
||||
tmp[length] = '\0';
|
||||
std::string ret(tmp);
|
||||
delete[] tmp;
|
||||
return ret;
|
||||
}
|
||||
void decode(std::string& s) {
|
||||
s = decode<std::string>();
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
template <typename T>
|
||||
void decode(T& value) {
|
||||
const size_t size = sizeof(T);
|
||||
assert(_decodeOffset + size < _n);
|
||||
@@ -88,12 +90,7 @@ public:
|
||||
_decodeOffset += size;
|
||||
}
|
||||
|
||||
template<>
|
||||
void decode(std::string &s) {
|
||||
s = decode<std::string>();
|
||||
}
|
||||
|
||||
void write();
|
||||
void write();
|
||||
|
||||
void read();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user