Further stl interface implementation

This commit is contained in:
Dennis Luxen 2013-09-23 18:01:30 +02:00
parent 248a239c7b
commit cce5d775de

View File

@ -21,10 +21,13 @@ or see http://www.gnu.org/licenses/agpl.txt.
#ifndef SHARED_MEMORY_VECTOR_WRAPPER_H #ifndef SHARED_MEMORY_VECTOR_WRAPPER_H
#define SHARED_MEMORY_VECTOR_WRAPPER_H #define SHARED_MEMORY_VECTOR_WRAPPER_H
#include "../Util/SimpleLogger.h"
#include <boost/assert.hpp> #include <boost/assert.hpp>
#include <boost/shared_ptr.hpp> #include <boost/shared_ptr.hpp>
#include <boost/type_traits.hpp> #include <boost/type_traits.hpp>
#include <algorithm>
#include <iterator> #include <iterator>
#include <vector> #include <vector>
@ -60,17 +63,36 @@ private:
boost::shared_ptr<DataT> m_ptr; boost::shared_ptr<DataT> m_ptr;
std::size_t m_size; std::size_t m_size;
SharedMemoryWrapper() {};
public: public:
SharedMemoryWrapper(const DataT * ptr, std::size_t size) : SharedMemoryWrapper() :
m_size(0)
{ }
SharedMemoryWrapper(DataT * ptr, std::size_t size) :
m_ptr(ptr), m_ptr(ptr),
m_size(size) m_size(size)
{ } { }
void swap(const SharedMemoryWrapper<DataT> & 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) { DataT & at(const std::size_t index) {
return m_ptr[index]; return m_ptr[index];
} }
const DataT & at(const std::size_t index) const {
return m_ptr[index];
}
ShMemIterator<DataT> begin() const { ShMemIterator<DataT> begin() const {
return ShMemIterator<DataT>(m_ptr); return ShMemIterator<DataT>(m_ptr);
} }
@ -85,16 +107,21 @@ public:
BOOST_ASSERT_MSG(index < m_size, "invalid size"); BOOST_ASSERT_MSG(index < m_size, "invalid size");
return m_ptr[index]; return m_ptr[index];
} }
const DataT & operator[](const int index) const {
BOOST_ASSERT_MSG(index < m_size, "invalid size");
return m_ptr[index];
}
}; };
template<typename DataT, bool SharedMemory = false> template<typename DataT, bool UseSharedMemory>
class ShMemVector : public struct ShM {
boost::conditional< typedef typename boost::conditional<
SharedMemory, UseSharedMemory,
SharedMemoryWrapper<DataT>, SharedMemoryWrapper<DataT>,
std::vector<DataT> std::vector<DataT>
>::type >::type vector;
{ }; };
#endif //SHARED_MEMORY_VECTOR_WRAPPER_H #endif //SHARED_MEMORY_VECTOR_WRAPPER_H