#ifndef BUFFER_H_ #define BUFFER_H_ #include template class Buffer { private: Set* set; SetFragment* currentFragment; size_t fragmentSize; Buffer(const Buffer&); Buffer& operator=(const Buffer&); public: Buffer(Set& set, size_t fragmentSize) : set(&set), currentFragment(NULL), fragmentSize(fragmentSize) {} ~Buffer() { flush(); } void flush() { if(currentFragment) { currentFragment->flush(); currentFragment = NULL; } } void append(const Data& data) { if(!currentFragment) currentFragment = set->newFragment(); currentFragment->append(data); if(currentFragment->size() * sizeof(Data) >= fragmentSize) flush(); } }; #endif