X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=GrowingBuffer.cpp;h=a260a3dd1638cc21c740acc1a87a202e58a2358b;hb=ed98647f198caeb878432a326963b43add0a735a;hp=b5dea96c24910a9d35b868b4aebbb2d0b7fba082;hpb=403ab22b5e05c4d1cdfd3b6c5993bd0240c8d4d8;p=ecparse.git diff --git a/GrowingBuffer.cpp b/GrowingBuffer.cpp index b5dea96..a260a3d 100644 --- a/GrowingBuffer.cpp +++ b/GrowingBuffer.cpp @@ -2,22 +2,26 @@ * © 2008 by David ‘Bombe’ Roden */ +#include #include #include #include #include "GrowingBuffer.h" +#include "GlobalSettings.h" GrowingBuffer::GrowingBuffer(size_t initialSize) { - this->data = malloc(1024); - this->size = 1024; + this->data = malloc(initialSize); + this->size = initialSize; this->limit = 0; this->position = 0; + GlobalSettings::isVerbose() && fprintf(stderr, "[%s:%d] created new GrowingBuffer with a size of %d.\n", __FILE__, __LINE__, initialSize); } GrowingBuffer::~GrowingBuffer() { if (this->data) { free(this->data); } + GlobalSettings::isVerbose() && fprintf(stderr, "[%s:%d] destroyed GrowingBuffer.\n", __FILE__, __LINE__); } size_t GrowingBuffer::getPosition() { @@ -34,11 +38,14 @@ size_t GrowingBuffer::getSize() { void GrowingBuffer::seek(size_t position) { this->position = (position > limit) ? limit : position; + GlobalSettings::isVerbose() && fprintf(stderr, "[%s:%d] setting position to %d.\n", __FILE__, __LINE__, position); } void* GrowingBuffer::read(void* buffer, size_t length) { size_t bytesToCopy = (length > (limit - position)) ? (limit - position) : length; + GlobalSettings::isVerbose() && fprintf(stderr, "[%s:%d] copying %d bytes (%d requested) into buffer.\n", __FILE__, __LINE__, bytesToCopy, length); memcpy(buffer, (ptrdiff_t*) data + position, bytesToCopy); + GlobalSettings::isVerbose() && fprintf(stderr, "[%s:%d] advancing position from %d to %d.\n", __FILE__, __LINE__, position, position + bytesToCopy); position += bytesToCopy; return buffer; } @@ -49,26 +56,31 @@ void GrowingBuffer::write(const void* buffer, size_t length) { do { newSize *= 2; } while (length > (newSize - limit)); + GlobalSettings::isVerbose() && fprintf(stderr, "[%s:%d] resizing buffer from %d to %d bytes to fit in %d bytes.\n", __FILE__, __LINE__, size, newSize, length); void* newData = malloc(newSize); memcpy(newData, data, position); free(data); data = newData; } + GlobalSettings::isVerbose() && fprintf(stderr, "[%s:%d] writing %d bytes to buffer at position %d.\n", __FILE__, __LINE__, length, limit); memcpy((ptrdiff_t*) data + limit, buffer, length); limit += length; } void GrowingBuffer::cut() { + GlobalSettings::isVerbose() && fprintf(stderr, "[%s:%d] discarding %d bytes.\n", __FILE__, __LINE__, position); memcpy(data, (ptrdiff_t*) data + position, position); limit = position; position = 0; } void GrowingBuffer::truncate() { + GlobalSettings::isVerbose() && fprintf(stderr, "[%s:%d] truncating %d bytes at position %d.\n", __FILE__, __LINE__, (limit - position), position); limit = position; } void GrowingBuffer::clear() { + GlobalSettings::isVerbose() && fprintf(stderr, "[%s:%d] clearing buffer, discarding %d bytes.\n", __FILE__, __LINE__, limit); position = 0; limit = 0; } @@ -78,6 +90,7 @@ void GrowingBuffer::resize(double factor) { factor = 1.0; } if (size != (limit * factor)) { + GlobalSettings::isVerbose() && fprintf(stderr, "[%s:%d] resizing buffer from %d to %d bytes.\n", __FILE__, __LINE__, size, (size_t) (limit * factor)); void* newData = malloc((size_t) (limit * factor)); memcpy(newData, data, limit); free(data);