From 98a6f05107d68bd80d5e9913d78750d636bb6760 Mon Sep 17 00:00:00 2001 From: "Mike D. Lowis" Date: Fri, 22 Jun 2012 14:13:07 -0400 Subject: [PATCH] Added buffer interface class --- source/buffer/ibuffer.cpp | 46 +++++++++++++++++++++++++++++++++++++++ source/buffer/ibuffer.h | 20 +++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 source/buffer/ibuffer.cpp create mode 100644 source/buffer/ibuffer.h 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 -- 2.52.0