libpsynth 0.2.1
/home/raskolnikov/dev/psynth/trunk/src/psynth/sound/dynamic_ring_buffer.hpp
Go to the documentation of this file.
00001 
00011 #ifndef PSYNTH_SOUND_DYNAMIC_RING_BUFFER_H_
00012 #define PSYNTH_SOUND_DYNAMIC_RING_BUFFER_H_
00013 
00014 #include <psynth/sound/ring_buffer.hpp>
00015 
00016 #include <psynth/sound/dynamic_buffer.hpp>
00017 #include <psynth/sound/dynamic_ring_buffer_range.hpp>
00018 
00019 namespace psynth
00020 {
00021 namespace sound
00022 {
00023 
00024 template <class DBuffer>
00025 class dynamic_ring_buffer : public ring_buffer_base<
00026     DBuffer, dynamic_ring_buffer_range>
00027 {
00028     typedef ring_buffer_base<DBuffer, dynamic_ring_buffer_range> parent_type;
00029 
00030 public:
00031     typedef typename parent_type::range_base       range;
00032     typedef typename parent_type::const_range_base const_range;
00033 
00039     explicit dynamic_ring_buffer ()
00040         : parent_type ()
00041     {}
00042     
00043     explicit dynamic_ring_buffer (const DBuffer& buf) 
00044         : parent_type (buf)
00045     {}
00046 
00047     template <typename F2, bool IP2, typename Alloc2>
00048     explicit dynamic_ring_buffer (const buffer<F2, IP2, Alloc2>& buf)
00049         : parent_type (buf)
00050     {}
00051     
00052     dynamic_ring_buffer& operator= (const dynamic_ring_buffer& buf)
00053     {
00054         parent_type::operator= (buf);
00055         return *this;
00056     }
00057 
00058     template <class DBuffer2>
00059     dynamic_ring_buffer& operator= (const dynamic_ring_buffer<DBuffer2>& buf)
00060     {
00061         parent_type::operator= (buf);
00062         return *this;
00063     }
00064 
00065 private:
00066     template <typename B> friend
00067     const typename dynamic_ring_buffer<B>::range&
00068     range (dynamic_ring_buffer<B>& buf);
00069     
00070     template <typename B> friend
00071     const typename dynamic_ring_buffer<B>::const_range
00072     const_range (const dynamic_ring_buffer<B>& buf);
00073 };
00074 
00075 
00076 /*
00077  *
00078  *  @todo BufferConcept ?
00079  *
00080  */
00081 template <typename B>
00082 const typename dynamic_ring_buffer<B>::range&
00083 range (dynamic_ring_buffer<B>& buf)
00084 {
00085     return buf._range;
00086 }
00087 
00088 template <typename B>
00089 const typename dynamic_ring_buffer<B>::const_range
00090 const_range (const dynamic_ring_buffer<B>& buf)
00091 {
00092     return buf._range;
00093 }
00094 
00095 
00096 } /* namespace sound */
00097 } /* namespace psynth */
00098 
00099 #endif /* PSYNTH_SOUND_DYNAMIC_RING_BUFFER_H_ */