X-Git-Url: https://git.ucc.asn.au/?p=ipdf%2Fcode.git;a=blobdiff_plain;f=src%2Fbufferbuilder.h;fp=src%2Fbufferbuilder.h;h=385369cdadb12dfb204a29473301fa3411dd44ae;hp=0000000000000000000000000000000000000000;hb=280f0d7d34b9bd377fb49580b69aebcbd60cc440;hpb=017e88152602dcdedaa917776e949bdfa235a159 diff --git a/src/bufferbuilder.h b/src/bufferbuilder.h new file mode 100644 index 0000000..385369c --- /dev/null +++ b/src/bufferbuilder.h @@ -0,0 +1,25 @@ +#ifndef _BUFFERBUILDER_H +#define _BUFFERBUILDER_H + +namespace IPDF +{ + /* + * Utility to add stuff to a buffer. + */ + template + class BufferBuilder + { + public: + BufferBuilder(void *data, size_t size) : m_bufferData((T*)data), m_bufferSize(size), m_bufferOffset(0) {}; + // Append an item to the buffer, returning its index. + size_t Add(const T& item) {m_bufferData[m_bufferOffset] = item; m_bufferOffset++; return m_bufferOffset-1;} + bool Free(size_t num = 1) const {return ((m_bufferOffset + num) * sizeof(T)) < m_bufferSize;} + private: + T *m_bufferData; + size_t m_bufferSize; // In bytes, 'cause why make things easy? + size_t m_bufferOffset; // In elements, 'cause why make things consistant? + }; + +} + +#endif // _SCREEN_H