RTP Audio System  2.0.0
ringbuffer.h
Go to the documentation of this file.
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
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines