#pragma once //A buffer is a linear, finite sequence of elements of a specific primitive type. Aside from its content, //the essential properties of a buffer are its capacity, limit, and position: // //A buffer's capacity is the number of elements it contains. The capacity of a buffer is never negative and never changes. // //A buffer's limit is the index of the first element that should not be read or written. //A buffer's limit is never negative and is never greater than its capacity. // //A buffer's position is the index of the next element to be read or written. //A buffer's position is never negative and is never greater than its limit. class Buffer { protected: const unsigned int m_capacity; unsigned int m_position; unsigned int m_limit; unsigned int m_mark; bool hasBackingArray; public: Buffer( unsigned int capacity ); virtual ~Buffer() {} Buffer *clear(); Buffer *limit(unsigned int newLimit); unsigned int limit(); Buffer *position( unsigned int newPosition ); unsigned int position(); unsigned int remaining(); virtual Buffer *flip() = 0; };