Tezzeret  1
Tezzeret
GmCharRingBuffer.hpp
1 #ifndef GMCHARRINGBUFFER_HPP_
2 #define GMCHARRINGBUFFER_HPP_
3 
4 namespace Geometrics
5 {
6 
7  #define GM_CHAR_RING_BUFFER_OK 0
8  #define GM_CHAR_RING_BUFFER_NO_BUFFER 1
9  #define GM_CHAR_RING_BUFFER_INVALID_INDEX 2
10  #define GM_CHAR_RING_BUFFER_NO_ROOM 3
11  #define GM_CHAR_RING_BUFFER_FAILURE 4
12  #define GM_CHAR_RING_BUFFER_OVERRUN_OVERWROTE 5
13  #define GM_CHAR_RING_BUFFER_OVERRUN_NO_WRITE 6
14  #define GM_CHAR_RING_BUFFER_EMPTY 7
15  #define GM_CHAR_RING_BUFFER_NULL_DESTINATION 8
16  #define GM_CHAR_RING_BUFFER_NO_BYTES 9
17 
18 
19  // Initially, this is FIFO only.
20  // This class has no concurrency control. That must occur
21  // in the clients of this class.
22  // Would be nice to add priority, so that for purposes
23  // such as task switching,
24  // we could put higher-priority items in the buffer.
26  {
27  public:
28  GmCharRingBuffer (int64_t iBufferSize,
29  void *buffer);
30  ~GmCharRingBuffer ();
31 
32  int Read (void *dest,
33  int64_t count);
34  int Write (void *source,
35  int64_t count);
36  int64_t BufferSize () { return mBufferSize; }
37  bool IsFull ();
38  int SetEmpty ();
39  bool HasData () { return (mHead != mTail); }
40  bool IsEmpty () { return (mHead == mTail); }
41 
42  int ReadAt (void* dest,
43  int64_t index,
44  int64_t size);
45  int EraseNext (int64_t sizeToErase);
46  int64_t NextWritePosition ();
47  int64_t BytesAvailable ();
48  int64_t BytesAvailableAt (int64_t index);
49  int64_t FreeSpace ();
50  int SeekRead (int64_t nextRead);
51 
52  public:
53  int64_t mHead,
54  mTail,
55  mBufferSize;
56  void *mBuffer;
57  };
58 
59 
60 
61 
62 }
63 #endif /* GMCHARRINGBUFFER_HPP_ */
Definition: GmCharRingBuffer.hpp:26
GmApp/GmLoggingApp.hpp>
Definition: Analogs.hpp:47