An implementation of a circular array allowing direct write and read.
Diff: CircularArray.cpp
- Revision:
- 0:28766f5a758e
- Child:
- 1:5036a532fe62
diff -r 000000000000 -r 28766f5a758e CircularArray.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CircularArray.cpp Tue Feb 11 18:41:26 2014 +0000 @@ -0,0 +1,103 @@ +#include "CircularArray.h" +#include <cstring> + +template <typename T> CircularArray<T>::CircularArray(unsigned int capacity) +{ + data = new T[capacity]; + m_capacity=capacity + m_full=false; + m_empty=true; + w=0; + r=0; +} +template <typename T>CircularArray<T>::~CircularArray() +{ + delete data[]; +} +template <typename T> T * CircularArray<T>::getWritePointer() +{ + return data+w; +} + +template <typename T> T * CircularArray<T>::getReadPointer(T * buffer,unsigned int num) +{ + if(buffer==0 || num <=readable()) + { + return data+r; + } + else + { + memcpy(buffer,data+r,readable()); + memcpy(buffer+readable(),data,num-readable()); + return buffer; + } +} + + +template <typename T> void CircularArray<T>::writeElements(unsigned int num) +{ + w=(w+num)%m_capacity; + m_full=r==w; +} +template <typename T> void CircularArray<T>::readElements(unsigned int num) +{ + r=(r+num)%m_capacity; + m_empty=r==w; + +} +template <typename T> unsigned int CircularArray<T>::fillCapacity() +{ + if(w>r || m_empty) + { + return m_capacity-w; + } + else + { + return r-w; + } +} +template <typename T> unsigned int CircularArray<T>::freeSpace() +{ + if(w>r || m_empty) + { + return fillCapacity()+r; + } + else + { + return fillCapacity(); + } + +} +template <typename T> unsigned int CircularArray<T>::readable() +{ + if(w<r || m_full) + { + return m_capacity-r; + } + else + { + return w-r; + } + +} +template <typename T> unsigned int CircularArray<T>::size() +{ + if(w<r || m_full) + { + return readable()+w; + } + else + { + return readable(); + } + +} +template <typename T> bool CircularArray<T>::full() +{ + return m_full; + +} +template <typename T> bool CircularArray<T>::empty() +{ + return m_empty; +} \ No newline at end of file