123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- #include "SpillBuffer.h"
- #include <stdlib.h>
- #include <string.h>
- #ifndef min
- #define min(a,b) ((a<b)?(a):(b))
- #endif
- SpillBuffer::SpillBuffer()
- {
- spillBufferUsed=0;
- spillBufferSize=0;
- spillBuffer=0;
- }
- SpillBuffer::~SpillBuffer()
- {
- free(spillBuffer);
- }
- void SpillBuffer::reset()
- {
- free(spillBuffer);
- spillBuffer=0;
- spillBufferUsed=0;
- spillBufferSize=0;
- }
- bool SpillBuffer::reserve(size_t bytes)
- {
- size_t old_spillBufferSize = spillBufferSize;
- spillBufferSize=bytes;
- char *new_spillBuffer = (char *)realloc(spillBuffer, spillBufferSize*2);
- if (new_spillBuffer) spillBuffer = new_spillBuffer;
- else
- {
- new_spillBuffer = (char *)calloc(spillBufferSize*2, sizeof(char));
- if (new_spillBuffer)
- {
- memcpy(new_spillBuffer, spillBuffer, old_spillBufferSize * 2);
- free(spillBuffer);
- spillBuffer = new_spillBuffer;
- }
- else
- {
- spillBufferSize = old_spillBufferSize;
- return false;
- }
- }
- if (!spillBuffer) return false;
- clear();
- return true;
- }
- void SpillBuffer::clear()
- {
- spillBufferUsed=0;
- }
- size_t SpillBuffer::write(const void *buffer, size_t bytes)
- {
- size_t avail = spillBufferSize - spillBufferUsed;
- bytes = min(avail, bytes);
- memcpy(spillBuffer + spillBufferUsed, buffer, bytes);
- spillBufferUsed+=bytes;
- return bytes;
- }
- bool SpillBuffer::get(void **buffer, size_t *len)
- {
- *buffer = spillBuffer;
- *len = spillBufferUsed;
- spillBufferUsed = 0;
- return true;
- }
- bool SpillBuffer::full() const
- {
- return spillBufferUsed == spillBufferSize;
- }
- bool SpillBuffer::empty() const
- {
- return spillBufferUsed == 0;
- }
- void SpillBuffer::remove(size_t len)
- {
- if (len > spillBufferUsed)
- len=spillBufferUsed;
- if (len)
- {
- memmove(spillBuffer, spillBuffer + len, spillBufferUsed - len);
- }
- }
- size_t SpillBuffer::remaining() const
- {
- return spillBufferSize - spillBufferUsed;
- }
- size_t SpillBuffer::length() const
- {
- return spillBufferSize;
- }
|