--- /dev/null
+// Distributed under the MIT license. Copyright (c) 2010, Ivan Vashchaev
+
+
+#ifndef BLOCK_ALLOCATOR_H
+#define BLOCK_ALLOCATOR_H
+
+namespace mc_json{
+class block_allocator
+{
+private:
+ struct block
+ {
+ size_t size;
+ size_t used;
+ char *buffer;
+ block *next;
+ };
+
+ block *m_head;
+ size_t m_blocksize;
+
+ block_allocator(const block_allocator &);
+ block_allocator &operator=(block_allocator &);
+
+public:
+ block_allocator(size_t blocksize);
+ ~block_allocator();
+
+ // exchange contents with rhs
+ void swap(block_allocator &rhs);
+
+ // allocate memory
+ void *malloc(size_t size);
+
+ // free all allocated blocks
+ void free();
+};
+}
+
+#endif