• Main Page
  • Related Pages
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

RealmGrowBuffer.h

Go to the documentation of this file.
00001 #ifndef __REALM_GROW_BUFFER__
00002 #define __REALM_GROW_BUFFER__
00003 
00004 namespace realm {
00005 
00006 class GrowBuffer {
00007 public:
00008     GrowBuffer(size_t capacity)
00009         : m_capacity(capacity),
00010         m_buf(capacity, '\0'),
00011         m_index(0)
00012     {}
00013 
00014     GrowBuffer()
00015         : m_capacity(0),
00016         m_buf(),
00017         m_index(0)
00018     {}
00019 
00020     void clear() {
00021         if (m_buf.size() > m_capacity)
00022             m_buf.resize(m_capacity);
00023         m_index = 0;
00024     }
00025 
00026     char* data() {
00027         return &m_buf[0];
00028     }
00029 
00030     size_t size() {
00031         return m_index;
00032     }
00033 
00034     size_t free() {
00035         return m_buf.size() - m_index;
00036     }
00037 
00038     char* prepare(size_t capacity) {
00039         if (free() < capacity)
00040             m_buf.resize(m_buf.size() + (capacity - free()));
00041         return &m_buf[m_index];
00042     }
00043 
00044     void commit(size_t capacity) {
00045         if (m_index + capacity > m_buf.size())
00046             return; // TODO: throw exception
00047         m_index += capacity;
00048     }
00049 
00050 private:
00051     size_t          m_capacity;
00052     std::string     m_buf;
00053     size_t          m_index;
00054 };
00055 
00056 }
00057 
00058 #endif /* __REALM_GROW_BUFFER__ */

Generated on Sun Feb 14 2021 for AbiWord by  doxygen 1.7.1