1 /***************************************************************** 2 | 3 | Neptune - Ring Buffer 4 | 5 | Copyright (c) 2002-2008, Axiomatic Systems, LLC. 6 | All rights reserved. 7 | 8 | Redistribution and use in source and binary forms, with or without 9 | modification, are permitted provided that the following conditions are met: 10 | * Redistributions of source code must retain the above copyright 11 | notice, this list of conditions and the following disclaimer. 12 | * Redistributions in binary form must reproduce the above copyright 13 | notice, this list of conditions and the following disclaimer in the 14 | documentation and/or other materials provided with the distribution. 15 | * Neither the name of Axiomatic Systems nor the 16 | names of its contributors may be used to endorse or promote products 17 | derived from this software without specific prior written permission. 18 | 19 | THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY 20 | EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 21 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 22 | DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY 23 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 24 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 25 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 26 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 28 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 | 30 ****************************************************************/ 31 32 #ifndef _NPT_RING_BUFFER_H_ 33 #define _NPT_RING_BUFFER_H_ 34 35 /*---------------------------------------------------------------------- 36 | includes 37 +---------------------------------------------------------------------*/ 38 #include "NptTypes.h" 39 #include "NptReferences.h" 40 41 /*---------------------------------------------------------------------- 42 | NPT_RingBuffer 43 +---------------------------------------------------------------------*/ 44 class NPT_RingBuffer 45 { 46 public: 47 // methods 48 NPT_RingBuffer(NPT_Size size); 49 NPT_RingBuffer(void* buffer, NPT_Size size); 50 virtual ~NPT_RingBuffer(); 51 NPT_Size GetSpace() const; 52 NPT_Size GetContiguousSpace() const; 53 NPT_Result Write(const void* buffer, NPT_Size byte_count); 54 NPT_Size GetAvailable() const; 55 NPT_Size GetContiguousAvailable() const; 56 NPT_Result Read(void* buffer, NPT_Size byte_count); 57 unsigned char ReadByte(); 58 unsigned char PeekByte(NPT_Position offset); 59 NPT_Result MoveIn(NPT_Position offset); 60 NPT_Result MoveOut(NPT_Position offset); 61 NPT_Result Flush(); 62 NPT_Result Close(); IsClosed()63 bool IsClosed() { return m_Closed; } 64 65 // accessors GetWritePointer()66 unsigned char* GetWritePointer() { return m_In; } GetReadPointer()67 unsigned char* GetReadPointer() { return m_Out;} 68 69 private: 70 // members 71 struct { 72 unsigned char* start; 73 unsigned char* end; 74 } m_Data; 75 unsigned char* m_In; 76 unsigned char* m_Out; 77 bool m_BufferIsLocal; 78 bool m_Closed; 79 }; 80 81 typedef NPT_Reference<NPT_RingBuffer> NPT_RingBufferReference; 82 83 #endif // _NPT_RING_BUFFER_H_ 84