|
libpsynth 0.2.1
|
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_ */
1.7.4