use different type for pointer arithmetic
authorDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Sat, 5 Jul 2008 12:55:11 +0000 (14:55 +0200)
committerDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Sat, 5 Jul 2008 12:55:11 +0000 (14:55 +0200)
add method to discard everything before the current position

GrowingBuffer.cpp
GrowingBuffer.h

index 492f244..602084c 100644 (file)
@@ -4,6 +4,7 @@
 
 #include <stdlib.h>
 #include <string.h>
+#include <stddef.h>
 #include "GrowingBuffer.h"
 
 GrowingBuffer::GrowingBuffer(size_t initialSize) {
@@ -37,7 +38,7 @@ void GrowingBuffer::seek(size_t position) {
 
 void* GrowingBuffer::read(void* buffer, size_t length) {
        size_t bytesToCopy = (length > (limit - position)) ? (limit - position) : length;
-       memcpy(buffer, (char*) data + position, bytesToCopy);
+       memcpy(buffer, (ptrdiff_t*) data + position, bytesToCopy);
        position += bytesToCopy;
        return buffer;
 }
@@ -53,7 +54,13 @@ void GrowingBuffer::write(const void* buffer, size_t length) {
                free(data);
                data = newData;
        }
-       memcpy((char*) data + position, buffer, length);
+       memcpy((ptrdiff_t*) data + position, buffer, length);
+}
+
+void GrowingBuffer::cut() {
+       memcpy(data, (ptrdiff_t*) data + position, position);
+       limit = position;
+       position = 0;
 }
 
 void GrowingBuffer::truncate() {
index 894267d..3efa30d 100644 (file)
@@ -37,6 +37,7 @@ public:
        void seek(size_t position);
        void* read(void* buffer, size_t length);
        void write(const void* buffer, size_t length);
+       void cut();
        void truncate();
        void clear();
        void resize(double factor = 1.0);