Ringbuffer class

Revision:
2:959aad917307
Parent:
1:fa4c2377a741
--- a/RingBuffer.cpp	Wed Jan 13 02:34:23 2016 +0000
+++ b/RingBuffer.cpp	Wed Jan 13 05:31:28 2016 +0000
@@ -1,7 +1,61 @@
 #include "RingBuffer.h"
 
+RingBuffer::RingBuffer(uint32_t NumberOfElements,uint32_t SizeOfElement)
+{
+    m_ElementSize = SizeOfElement;
+    m_size = NumberOfElements;
+    m_buf = new uint8_t[m_size*m_ElementSize];
+    m_latchingbuffer = new uint8_t[m_ElementSize];
+    clear();
+}
+RingBuffer::~RingBuffer()
+{
+    delete [] m_buf;
+    delete [] m_latchingbuffer;
+}
+void RingBuffer::clear(void)
+{
+    m_wloc = 0;
+    m_rloc = 0;
+    m_ActualCapacity = 0;
+    memset(m_buf, 0, m_size * m_ElementSize);   
+    memset(m_latchingbuffer, 0,  m_ElementSize); 
+    return;
+}
+void RingBuffer::put(void* data)
+{
+    uint8_t* srcData = (uint8_t*)data;
+    uint8_t* dstData = m_buf + (m_wloc*m_ElementSize);
+    
+    memcpy(dstData,srcData,m_ElementSize);
+    
+    m_wloc++;
+    m_wloc %= (m_size);
+    m_ActualCapacity++;       
+}
 
+int RingBuffer::get(void* data)
+{
+    uint8_t* SrcData =  m_buf + (m_rloc*m_ElementSize);
+    uint8_t* dstData = (uint8_t*)data;
+    memcpy(dstData,SrcData,m_ElementSize);
+    m_rloc++;
+    m_rloc %= (m_size);
+    m_ActualCapacity--;
+    return 1;
+}
 
+void RingBuffer::LatchBuffer(void* DstBuffer)
+{
+    uint8_t* src = (uint8_t*)DstBuffer;
+    do
+    {
+        get(src);
+        src++;
+    }
+    while(m_ActualCapacity > 0);
+}
+/*
 template <class T>
 RingBuffer<T>::RingBuffer(uint32_t size)
 {
@@ -103,4 +157,4 @@
 template class RingBuffer<int64_t>;
 template class RingBuffer<char>;
 template class RingBuffer<wchar_t>;
-
+*/