RTP Audio System
2.0.0
|
00001 // ########################################################################## 00002 // #### #### 00003 // #### RTP Audio Server Project #### 00004 // #### ============================ #### 00005 // #### #### 00006 // #### Ring Buffer Implementation #### 00007 // #### #### 00008 // #### Copyright (C) 1999-2012 by Thomas Dreibholz #### 00009 // #### #### 00010 // #### Contact: #### 00011 // #### EMail: dreibh@iem.uni-due.de #### 00012 // #### WWW: https://www.nntb.no/~dreibh/rtpaudio #### 00013 // #### #### 00014 // #### ---------------------------------------------------------------- #### 00015 // #### #### 00016 // #### This program is free software: you can redistribute it and/or #### 00017 // #### modify it under the terms of the GNU General Public License as #### 00018 // #### published by the Free Software Foundation, either version 3 of #### 00019 // #### the License, or (at your option) any later version. #### 00020 // #### #### 00021 // #### This program is distributed in the hope that it will be useful, #### 00022 // #### but WITHOUT ANY WARRANTY; without even the implied warranty of #### 00023 // #### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #### 00024 // #### GNU General Public License for more details. #### 00025 // #### #### 00026 // #### You should have received a copy of the GNU General Public #### 00027 // #### License along with this program. If not, see #### 00028 // #### <http://www.gnu.org/licenses/>. #### 00029 // #### #### 00030 // ########################################################################## 00031 // $Id: ringbuffer.h 1323 2011-12-23 21:14:00Z dreibh $ 00032 00033 00034 #ifndef RINGBUFFER_H 00035 #define RINGBUFFER_H 00036 00037 00038 #include "tdsystem.h" 00039 #include "condition.h" 00040 00041 00042 00050 class RingBuffer : public Condition 00051 { 00052 // ====== Constructor/Destructor ========================================= 00053 public: 00057 RingBuffer(); 00058 00062 ~RingBuffer(); 00063 00064 00065 // ====== Initialization ================================================= 00072 bool init(const cardinal bytes); 00073 00074 00075 // ====== Buffer maintenance ============================================= 00079 void flush(); 00080 00086 inline size_t bytesReadable(); 00087 00093 inline size_t bytesWritable(); 00094 00095 00096 // ====== Read/write ===================================================== 00104 ssize_t read(char* data, 00105 const size_t length); 00106 00114 ssize_t write(const char* data, 00115 const size_t length); 00116 00117 00118 // ====== Private data =================================================== 00119 private: 00120 char* Buffer; 00121 size_t BufferSize; 00122 size_t WriteStart; 00123 size_t WriteEnd; 00124 size_t BytesStored; 00125 }; 00126 00127 00128 #include "ringbuffer.icc" 00129 00130 00131 #endif