From: Mike D. Lowis Date: Fri, 22 Jun 2012 18:13:07 +0000 (-0400) Subject: Added buffer interface class X-Git-Url: https://git.mdlowis.com/?a=commitdiff_plain;h=98a6f05107d68bd80d5e9913d78750d636bb6760;p=archive%2Fparse-utils.git Added buffer interface class --- diff --git a/source/buffer/ibuffer.cpp b/source/buffer/ibuffer.cpp new file mode 100644 index 0000000..c03943f --- /dev/null +++ b/source/buffer/ibuffer.cpp @@ -0,0 +1,46 @@ +#include "ibuffer.h" + +IBuffer::IBuffer() +{ +} + +IBuffer::~IBuffer() +{ +} + +void IBuffer::consume(void) +{ + advance(); + if((location() == size()) && !isMarked()) + { + seek(0); + clear(); + } + sync(1); +} + +void IBuffer::sync(unsigned int i) +{ + unsigned int next_index = location() + i - 1; + unsigned int max_index = (size() - 1); + + if( size() == 0 ) + { + fill(i); + } + else if( next_index >= max_index ) + { + fill( next_index - max_index); + } +} + +void IBuffer::fill(unsigned int n) +{ + unsigned int i = 0; + for (i = 0; i < n; i++) + { + load(); + } +} + + diff --git a/source/buffer/ibuffer.h b/source/buffer/ibuffer.h new file mode 100644 index 0000000..31feabe --- /dev/null +++ b/source/buffer/ibuffer.h @@ -0,0 +1,20 @@ +#ifndef IBUFFER_H +#define IBUFFER_H + +#include +#include "imarker.h" + +class IBuffer : public IMarker +{ + public: + IBuffer(); + virtual ~IBuffer(); + void consume(void); + void sync(unsigned int i); + void fill(unsigned int n); + virtual unsigned int size() = 0; + virtual void clear() = 0; + virtual void load() = 0; +}; + +#endif