diff --git a/DataStructures/SharedMemoryVectorWrapper.h b/DataStructures/SharedMemoryVectorWrapper.h index 76dbc4786..6e44cb39c 100644 --- a/DataStructures/SharedMemoryVectorWrapper.h +++ b/DataStructures/SharedMemoryVectorWrapper.h @@ -21,10 +21,13 @@ or see http://www.gnu.org/licenses/agpl.txt. #ifndef SHARED_MEMORY_VECTOR_WRAPPER_H #define SHARED_MEMORY_VECTOR_WRAPPER_H +#include "../Util/SimpleLogger.h" + #include #include #include +#include #include #include @@ -60,17 +63,36 @@ private: boost::shared_ptr m_ptr; std::size_t m_size; - SharedMemoryWrapper() {}; public: - SharedMemoryWrapper(const DataT * ptr, std::size_t size) : + SharedMemoryWrapper() : + m_size(0) + { } + + SharedMemoryWrapper(DataT * ptr, std::size_t size) : m_ptr(ptr), m_size(size) { } + void swap(const SharedMemoryWrapper & other) { + std::swap( m_size, other.m_size); + std::swap( m_ptr , other.m_ptr ); + } + + // void SetData(const DataT * ptr, const std::size_t size) { + // BOOST_ASSERT_MSG( 0 == m_size, "vector not empty"); + // BOOST_ASSERT_MSG( 0 < size , "new vector empty"); + // m_ptr.reset(ptr); + // m_size = size; + // } + DataT & at(const std::size_t index) { return m_ptr[index]; } + const DataT & at(const std::size_t index) const { + return m_ptr[index]; + } + ShMemIterator begin() const { return ShMemIterator(m_ptr); } @@ -85,16 +107,21 @@ public: BOOST_ASSERT_MSG(index < m_size, "invalid size"); return m_ptr[index]; } + + const DataT & operator[](const int index) const { + BOOST_ASSERT_MSG(index < m_size, "invalid size"); + return m_ptr[index]; + } }; -template -class ShMemVector : public - boost::conditional< - SharedMemory, - SharedMemoryWrapper, - std::vector - >::type -{ }; +template +struct ShM { + typedef typename boost::conditional< + UseSharedMemory, + SharedMemoryWrapper, + std::vector + >::type vector; + }; #endif //SHARED_MEMORY_VECTOR_WRAPPER_H