Arduino MIDI Library  Version 4.3.1
midi_RingBuffer.hpp
Go to the documentation of this file.
1 
28 #pragma once
29 
31 
32 template<typename DataType, int Size>
34  : mWriteHead(mData)
35  , mReadHead(mData)
36 {
37  memset(mData, DataType(0), Size * sizeof(DataType));
38 }
39 
40 template<typename DataType, int Size>
42 {
43 }
44 
45 // -----------------------------------------------------------------------------
46 
47 template<typename DataType, int Size>
49 {
50  if (mReadHead == mWriteHead)
51  {
52  return 0;
53  }
54  else if (mWriteHead > mReadHead)
55  {
56  return int(mWriteHead - mReadHead);
57  }
58  else
59  {
60  return int(mWriteHead - mData) + Size - int(mReadHead - mData);
61  }
62 }
63 
64 template<typename DataType, int Size>
66 {
67  return mReadHead == mWriteHead;
68 }
69 
70 // -----------------------------------------------------------------------------
71 
72 template<typename DataType, int Size>
73 void RingBuffer<DataType, Size>::write(DataType inData)
74 {
75  *mWriteHead++ = inData;
76  if (mWriteHead >= mData + Size)
77  {
78  mWriteHead = mData;
79  }
80 }
81 
82 template<typename DataType, int Size>
83 void RingBuffer<DataType, Size>::write(const DataType* inData, int inSize)
84 {
85  for (int i = 0; i < inSize; ++i)
86  {
87  write(inData[i]);
88  }
89 }
90 
91 template<typename DataType, int Size>
93 {
94  memset(mData, DataType(0), Size * sizeof(DataType));
95  mReadHead = mData;
96  mWriteHead = mData;
97 }
98 
99 // -----------------------------------------------------------------------------
100 
101 template<typename DataType, int Size>
103 {
104  const DataType data = *mReadHead++;
105  if (mReadHead >= mData + Size)
106  {
107  mReadHead = mData;
108  }
109  return data;
110 }
111 
112 template<typename DataType, int Size>
113 void RingBuffer<DataType, Size>::read(DataType* outData, int inSize)
114 {
115  for (int i = 0; i < inSize; ++i)
116  {
117  outData[i] = read();
118  }
119 }
120 
bool isEmpty() const
#define BEGIN_MIDI_NAMESPACE
#define END_MIDI_NAMESPACE
int getLength() const
DataType read()
void write(DataType inData)