// Copyright (c) 2002 David Muse
// See the COPYING file for more information.
#ifndef RUDIMENTS_VARIABLEBUFFER_H
#define RUDIMENTS_VARIABLEBUFFER_H
#include <rudiments/private/variablebufferincludes.h>
// The variablebuffer class can be used to store raw data of arbitrary length.
class variablebuffer {
public:
variablebuffer(size_t initialsize, size_t increment);
variablebuffer(unsigned char *initialcontents,
size_t initialsize, size_t increment);
// Creates a new buffer of size "initialsize"
// which will grow in chunks of size "increment".
// The position at which the first write or append
// will occur is initialized to 0.
virtual ~variablebuffer();
void setPosition(size_t pos);
// Sets the position at which the next read or write
// will occur to "pos". If the position is set beyond
// the end of the buffer, the buffer will grow but the
// data between the current end of the buffer and the
// new position will be undefined.
// The write() and append() methods return a pointer to the
// variablebuffer instance. This enables chaining:
//
// sb->write(data1)->write(data2)->write(data3);
// or
// sb->append(data1)->append(data2)->append(data3);
variablebuffer *write(const unsigned char *data, size_t size);
// Writes "data" to the variablebuffer at the current
// position. If necessary, the buffer will grow to
// accommodate the new data.
variablebuffer *append(const unsigned char *data, size_t size);
// Appends "data" to the variablebuffer. The buffer
// will grow to accommodate the new data.
ssize_t read(unsigned char *data, size_t size);
// Reads "size" bytes from the variablebuffer at the
// current position into "data". Also increments the
// current position by "size" bytes.
void clear();
// Empties the variablebuffer.
unsigned char *getBuffer();
// Returns the current data stored in the
// variablebuffer.
size_t getSize();
// Returns the current amount of data stored
// in the variablebuffer.
size_t getPosition();
// Returns the position in the buffer at which
// the next write will occur.
size_t getEnd();
// Returns the position in the buffer at which
// the next append will occur.
size_t getActualSize();
// Returns the actual size of the buffer which
// may be larger than the value returned by
// getSize() since the buffer grows in chunks.
#include <rudiments/private/variablebuffer.h>
};
#endif