diff options
Diffstat (limited to 'kradio3/src/ringbuffer.cpp')
-rw-r--r-- | kradio3/src/ringbuffer.cpp | 173 |
1 files changed, 0 insertions, 173 deletions
diff --git a/kradio3/src/ringbuffer.cpp b/kradio3/src/ringbuffer.cpp deleted file mode 100644 index 7609768..0000000 --- a/kradio3/src/ringbuffer.cpp +++ /dev/null @@ -1,173 +0,0 @@ -/*************************************************************************** - ringbuffer.cpp - description - ------------------- - begin : Sun March 21 2004 - copyright : (C) 2004 by Martin Witte - email : witte@kawo1.rwth-aachen.de - ***************************************************************************/ - -/*************************************************************************** - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - ***************************************************************************/ - -#include "include/ringbuffer.h" -#include <string.h> - -RingBuffer::RingBuffer(size_t size) -{ - m_Buffer = new char [size]; - m_Size = size; - m_FillSize = 0; - m_Start = 0; -} - - -RingBuffer::~RingBuffer() -{ - delete[] m_Buffer; - m_Buffer = NULL; - m_Size = 0; -} - - -bool RingBuffer::resize(size_t new_size) -{ - if (new_size >= m_FillSize && new_size > 0) { - char *newBuffer = new char[new_size]; - size_t newFill = 0; - while (m_FillSize > 0) - newFill += takeData(newBuffer + newFill, m_FillSize); - - delete[] m_Buffer; - - m_FillSize = newFill; - m_Start = 0; - m_Buffer = newBuffer; - m_Size = new_size; - return true; - } - return false; -} - - -size_t RingBuffer::addData (const char *src, size_t size) -{ - size_t written = 0; - if (m_Start + m_FillSize < m_Size) { - size_t rest = m_Size - m_Start - m_FillSize; - if (rest > size) - rest = size; - memmove (m_Buffer + m_Start + m_FillSize, src, rest); - m_FillSize += rest; - written += rest; - size -= rest; - src += rest; - } - if (size > 0 && m_FillSize < m_Size) { - size_t rest = size; - if (rest > m_Size - m_FillSize) - rest = m_Size - m_FillSize; - memmove(m_Buffer + m_Start + m_FillSize - m_Size, src, rest); - m_FillSize += rest; - written += rest; - } - return written; -} - - -size_t RingBuffer::takeData(char *dst, size_t size) -{ - size_t read = 0; - while (m_FillSize > 0 && size > 0) { - size_t n = size; - if (n > m_FillSize) - n = m_FillSize; - if (n > m_Size - m_Start) - n = m_Size - m_Start; - memmove (dst, m_Buffer + m_Start, n); - m_FillSize -= n; - m_Start += n; - read += n; - size -= n; - if (m_Start >= m_Size) - m_Start -= m_Size; - - } - return read; -} - - -char *RingBuffer::getFreeSpace(size_t &size) -{ - if (m_FillSize == m_Size) { - size = 0; - return NULL; - } - - if (m_Start + m_FillSize >= m_Size) { - size = m_Size - m_FillSize; - return m_Buffer + m_Start + m_FillSize - m_Size; - } else { - size = m_Size - m_Start - m_FillSize; - return m_Buffer + m_Start + m_FillSize; - } -} - - -size_t RingBuffer::removeFreeSpace(size_t size) -{ - if (m_FillSize == m_Size) - return 0; - - if (m_Start + m_FillSize >= m_Size) { - if (size > m_Size - m_FillSize) - size = m_Size - m_FillSize; - m_FillSize += size; - return size; - } else { - if (m_Start + m_FillSize + size >= m_Size) - size = m_Size - m_Start - m_FillSize; - m_FillSize += size; - return size; - } -} - - -char *RingBuffer::getData(size_t &size) -{ - if (m_Start + m_FillSize >= m_Size) { - size = m_Size - m_Start; - } else { - size = m_FillSize; - } - return m_Buffer + m_Start; -} - - -size_t RingBuffer::removeData(size_t size) -{ - size_t n = 0; - if (size > m_FillSize) - size = m_FillSize; - if (m_Start + size >= m_Size) { - n = m_Size - m_Start; - m_Start = 0; - } else { - m_Start += size; - n = size; - } - m_FillSize -= n; - return n; -} - - -void RingBuffer::clear() -{ - m_Start = 0; - m_FillSize = 0; -} |