From e3a1b775fd47105311890cdfd331b592de84363e Mon Sep 17 00:00:00 2001 From: Alexander Bock Date: Thu, 7 Jul 2016 13:49:57 +0200 Subject: [PATCH] Correctly rollback the previous rollback --- include/openspace/util/syncbuffer.h | 5 ++++- src/util/syncbuffer.cpp | 17 ++++++++++++----- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/include/openspace/util/syncbuffer.h b/include/openspace/util/syncbuffer.h index 7f97952687..a743478a81 100644 --- a/include/openspace/util/syncbuffer.h +++ b/include/openspace/util/syncbuffer.h @@ -28,6 +28,7 @@ #include #include +#include #include #include @@ -43,6 +44,8 @@ public: SyncBuffer(size_t n); + ~SyncBuffer(); + void encode(const std::string& s) { const size_t size = sizeof(char) * s.size() + sizeof(int32_t); ghoul_assert(_encodeOffset + size < _n, ""); @@ -107,7 +110,7 @@ private: size_t _encodeOffset; size_t _decodeOffset; std::vector _dataStream; - sgct::SharedVector _synchronizationBuffer; + std::unique_ptr> _synchronizationBuffer; }; } // namespace openspace diff --git a/src/util/syncbuffer.cpp b/src/util/syncbuffer.cpp index 555cf875d4..664dd098b0 100644 --- a/src/util/syncbuffer.cpp +++ b/src/util/syncbuffer.cpp @@ -32,22 +32,29 @@ SyncBuffer::SyncBuffer(size_t n) : _n(n) , _encodeOffset(0) , _decodeOffset(0) + , _synchronizationBuffer(new sgct::SharedVector()) { _dataStream.resize(_n); } +SyncBuffer::~SyncBuffer() { + // The destructor is defined here, so that the otherwise default inlined destructor is + // not created (which would make it impossible to use a forward declaration with + // unique_ptr +} + void SyncBuffer::write() { - _synchronizationBuffer.setVal(_dataStream); - sgct::SharedData::instance()->writeVector(&_synchronizationBuffer); + _synchronizationBuffer->setVal(_dataStream); + sgct::SharedData::instance()->writeVector(_synchronizationBuffer.get()); _encodeOffset = 0; _decodeOffset = 0; } void SyncBuffer::read() { - sgct::SharedData::instance()->readVector(&_synchronizationBuffer); - _dataStream = std::move(_synchronizationBuffer.getVal()); + sgct::SharedData::instance()->readVector(_synchronizationBuffer.get()); + _dataStream = std::move(_synchronizationBuffer->getVal()); _encodeOffset = 0; _decodeOffset = 0; } -} // namespace openspace \ No newline at end of file +} // namespace openspace