#ifndef BSA_RING_BUFFER_H #define BSA_RING_BUFFER_H #include #include #include #include // Ring-buffer WITHOUT range checking! // Size is a power of 2. template class RingBuffer { private: std::vector buf_; unsigned h_; unsigned t_; unsigned c_; unsigned m_; RingBuffer & operator=(const RingBuffer&); RingBuffer(const RingBuffer &orig); static const unsigned MAX_LD_SZ = 16; public: typedef T value_type; typedef T &reference; typedef const T &const_reference; typedef size_t size_type; RingBuffer(unsigned ldSz) : h_( 0 ), t_( 0 ), c_( (1< MAX_LD_SZ ) throw std::range_error("RingBuffer: requested size too large"); buf_.reserve((1< MAX_LD_SZ ) throw std::range_error("RingBuffer: requested size too large"); for ( i = 0; i < (unsigned)(1<