1 // Distributed under the MIT license. Copyright (c) 2010, Ivan Vashchaev
\r
5 #include "block_allocator.h"
\r
7 block_allocator::block_allocator(size_t blocksize): m_head(0), m_blocksize(blocksize)
\r
11 block_allocator::~block_allocator()
\r
15 block *temp = m_head->next;
\r
21 void block_allocator::swap(block_allocator &rhs)
\r
23 std::swap(m_blocksize, rhs.m_blocksize);
\r
24 std::swap(m_head, rhs.m_head);
\r
27 void *block_allocator::malloc(size_t size)
\r
29 if ((m_head && m_head->used + size > m_head->size) || !m_head)
\r
31 // calc needed size for allocation
\r
32 size_t alloc_size = std::max(sizeof(block) + size, m_blocksize);
\r
35 char *buffer = (char *)::malloc(alloc_size);
\r
36 block *b = reinterpret_cast<block *>(buffer);
\r
37 b->size = alloc_size;
\r
38 b->used = sizeof(block);
\r
44 void *ptr = m_head->buffer + m_head->used;
\r
45 m_head->used += size;
\r
49 void block_allocator::free()
\r
51 block_allocator(0).swap(*this);
\r