X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Flib%2Fgscpaux%2Fblock_allocator.cpp;h=5d0fbdce22e59fed5a074d90a923c05ba25bc255;hb=e981e864b812c938d3df8b555b6bb98bb89273e7;hp=a8fa13c114c5bb8a1750fa410341483f89349372;hpb=44ea17511358ebc75952066580e31cba8b38ddb8;p=com%2Fgs-lite.git diff --git a/src/lib/gscpaux/block_allocator.cpp b/src/lib/gscpaux/block_allocator.cpp index a8fa13c..5d0fbdc 100644 --- a/src/lib/gscpaux/block_allocator.cpp +++ b/src/lib/gscpaux/block_allocator.cpp @@ -1,52 +1,52 @@ -// Distributed under the MIT license. Copyright (c) 2010, Ivan Vashchaev - -#include -#include -#include "block_allocator.h" - -block_allocator::block_allocator(size_t blocksize): m_head(0), m_blocksize(blocksize) -{ -} - -block_allocator::~block_allocator() -{ - while (m_head) - { - block *temp = m_head->next; - ::free(m_head); - m_head = temp; - } -} - -void block_allocator::swap(block_allocator &rhs) -{ - std::swap(m_blocksize, rhs.m_blocksize); - std::swap(m_head, rhs.m_head); -} - -void *block_allocator::malloc(size_t size) -{ - if ((m_head && m_head->used + size > m_head->size) || !m_head) - { - // calc needed size for allocation - size_t alloc_size = std::max(sizeof(block) + size, m_blocksize); - - // create new block - char *buffer = (char *)::malloc(alloc_size); - block *b = reinterpret_cast(buffer); - b->size = alloc_size; - b->used = sizeof(block); - b->buffer = buffer; - b->next = m_head; - m_head = b; - } - - void *ptr = m_head->buffer + m_head->used; - m_head->used += size; - return ptr; -} - -void block_allocator::free() -{ - block_allocator(0).swap(*this); -} +// Distributed under the MIT license. Copyright (c) 2010, Ivan Vashchaev + +#include +#include +#include "block_allocator.h" + +block_allocator::block_allocator(size_t blocksize): m_head(0), m_blocksize(blocksize) +{ +} + +block_allocator::~block_allocator() +{ + while (m_head) + { + block *temp = m_head->next; + ::free(m_head); + m_head = temp; + } +} + +void block_allocator::swap(block_allocator &rhs) +{ + std::swap(m_blocksize, rhs.m_blocksize); + std::swap(m_head, rhs.m_head); +} + +void *block_allocator::malloc(size_t size) +{ + if ((m_head && m_head->used + size > m_head->size) || !m_head) + { + // calc needed size for allocation + size_t alloc_size = std::max(sizeof(block) + size, m_blocksize); + + // create new block + char *buffer = (char *)::malloc(alloc_size); + block *b = reinterpret_cast(buffer); + b->size = alloc_size; + b->used = sizeof(block); + b->buffer = buffer; + b->next = m_head; + m_head = b; + } + + void *ptr = m_head->buffer + m_head->used; + m_head->used += size; + return ptr; +} + +void block_allocator::free() +{ + block_allocator(0).swap(*this); +}