#pragma once
#ifndef ENTITYUPDATEBUFFER_H___
#define ENTITYUPDATEBUFFER_H___
// std includes
#include <vector>
// boost includes
#include <boost/thread/shared_mutex.hpp>
template <typename T>
class EntityUpdateBuffer
{
public:
typedef typename boost::shared_lock<boost::shared_mutex> read_lock;
typedef typename boost::unique_lock<boost::shared_mutex> write_lock;
EntityUpdateBuffer(void){}
~EntityUpdateBuffer(void){}
void push_back(const T& value);
const T& at(int index) const;
T& at(int index);
private:
std::vector<T> m_buffer;
boost::shared_mutex rw_mutex;
};
template <typename T>
void EntityUpdateBuffer<T>::push_back( const T& value )
{
// acquire lock
write_lock lock(rw_mutex);
m_buffer.push_back(value);
}
template <typename T>
const T& EntityUpdateBuffer<T>::at( int index ) const
{
// acquire lock
read_lock lock(rw_mutex);
return m_buffer.at(index);
}
template <typename T>
T& EntityUpdateBuffer<T>::at( int index )
{
// acquire lock
read_lock lock(rw_mutex);
return m_buffer.at(index);
}
#endif //ENTITYUPDATEBUFFER_H___