#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include <stddef.h>
#include "GrowingBuffer.h"
#include "GlobalSettings.h"
return size;
}
+size_t GrowingBuffer::getRemaining() {
+ return limit - position;
+}
+
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] copying %d bytes (%d requested) into buffer from position %d.\n", __FILE__, __LINE__, bytesToCopy, length, position);
+ memcpy(buffer, (char*) 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;
} 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);
+ GlobalSettings::isVerbose() && fprintf(stderr, "[%s:%d] copying %d bytes into new buffer.\n", __FILE__, __LINE__, limit);
+ memcpy(newData, data, limit);
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);
+ memcpy((char*) 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;
+ GlobalSettings::isVerbose() && fprintf(stderr, "[%s:%d] discarding %d bytes, %d bytes remaining.\n", __FILE__, __LINE__, position, limit - position);
+ memcpy(data, (char*) data + position, position);
+ limit -= position;
position = 0;
}
}
}
+size_t GrowingBuffer::indexOf(char c, size_t start) {
+ void* foundIndex;
+
+ GlobalSettings::isVerbose() && fprintf(stderr, "[%s:%d] searching for (char) 0x%02x from %d to %d.\n", __FILE__, __LINE__, c, position + start, position + (limit - start));
+ foundIndex = memchr((char*) data + position + start, c, (limit - (position + start)));
+ if (foundIndex) {
+ GlobalSettings::isVerbose() && fprintf(stderr, "[%s:%d] found character at %d.\n", __FILE__, __LINE__, (char*) foundIndex - ((char*) data + position));
+ return (char*) foundIndex - ((char*) data - position);
+ }
+ return (size_t) -1;
+}
+