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