NCBI C++ ToolKit
Classes | Public Member Functions | Static Public Member Functions | Static Public Attributes | Private Member Functions | Private Attributes | Static Private Attributes | List of all members
rapidjson::MemoryPoolAllocator< BaseAllocator > Class Template Reference

Search Toolkit Book for rapidjson::MemoryPoolAllocator

Default memory allocator used by the parser and DOM. More...

#include <misc/jsonwrapp/rapidjson11/allocators.h>

+ Collaboration diagram for rapidjson::MemoryPoolAllocator< BaseAllocator >:

Classes

struct  ChunkHeader
 Chunk header for perpending to each chunk. More...
 

Public Member Functions

 MemoryPoolAllocator (size_t chunkSize=kDefaultChunkCapacity, BaseAllocator *baseAllocator=0)
 Constructor with chunkSize. More...
 
 MemoryPoolAllocator (void *buffer, size_t size, size_t chunkSize=kDefaultChunkCapacity, BaseAllocator *baseAllocator=0)
 Constructor with user-supplied buffer. More...
 
 ~MemoryPoolAllocator ()
 Destructor. More...
 
void Clear ()
 Deallocates all memory chunks, excluding the user-supplied buffer. More...
 
size_t Capacity () const
 Computes the total capacity of allocated memory chunks. More...
 
size_t Size () const
 Computes the memory blocks allocated. More...
 
void * Malloc (size_t size)
 Allocates a memory block. (concept Allocator) More...
 
void * Realloc (void *originalPtr, size_t originalSize, size_t newSize)
 Resizes a memory block (concept Allocator) More...
 

Static Public Member Functions

static void Free (void *ptr)
 Frees a memory block (concept Allocator) More...
 

Static Public Attributes

static const bool kNeedFree = false
 Tell users that no need to call Free() with this allocator. (concept Allocator) More...
 

Private Member Functions

 MemoryPoolAllocator (const MemoryPoolAllocator &rhs)
 Copy constructor is not permitted. More...
 
MemoryPoolAllocatoroperator= (const MemoryPoolAllocator &rhs)
 Copy assignment operator is not permitted. More...
 
bool AddChunk (size_t capacity)
 Creates a new chunk. More...
 

Private Attributes

ChunkHeaderchunkHead_
 Head of the chunk linked-list. Only the head chunk serves allocation. More...
 
size_t chunk_capacity_
 The minimum capacity of chunk when they are allocated. More...
 
void * userBuffer_
 User supplied buffer. More...
 
BaseAllocator * baseAllocator_
 base allocator for allocating memory chunks. More...
 
BaseAllocator * ownBaseAllocator_
 base allocator created by this object. More...
 

Static Private Attributes

static const int kDefaultChunkCapacity = 64 * 1024
 Default chunk capacity. More...
 

Detailed Description

template<typename BaseAllocator = CrtAllocator>
class rapidjson::MemoryPoolAllocator< BaseAllocator >

Default memory allocator used by the parser and DOM.

This allocator allocate memory blocks from pre-allocated memory chunks.

It does not free memory blocks. And Realloc() only allocate new memory.

The memory chunks are allocated by BaseAllocator, which is CrtAllocator by default.

User may also supply a buffer as the first chunk.

If the user-buffer is full then additional chunks are allocated by BaseAllocator.

The user-buffer is not deallocated by this allocator.

Template Parameters
BaseAllocatorthe allocator type for allocating memory chunks. Default is CrtAllocator.
Note
implements Allocator concept

Definition at line 102 of file allocators.h.

Constructor & Destructor Documentation

◆ MemoryPoolAllocator() [1/3]

template<typename BaseAllocator = CrtAllocator>
rapidjson::MemoryPoolAllocator< BaseAllocator >::MemoryPoolAllocator ( size_t  chunkSize = kDefaultChunkCapacity,
BaseAllocator *  baseAllocator = 0 
)
inline

Constructor with chunkSize.

Parameters
chunkSizeThe size of memory chunk. The default is kDefaultChunkSize.
baseAllocatorThe allocator for allocating memory chunks.

Definition at line 110 of file allocators.h.

◆ MemoryPoolAllocator() [2/3]

template<typename BaseAllocator = CrtAllocator>
rapidjson::MemoryPoolAllocator< BaseAllocator >::MemoryPoolAllocator ( void *  buffer,
size_t  size,
size_t  chunkSize = kDefaultChunkCapacity,
BaseAllocator *  baseAllocator = 0 
)
inline

Constructor with user-supplied buffer.

The user buffer will be used firstly. When it is full, memory pool allocates new chunk with chunk size.

The user buffer will not be deallocated when this allocator is destructed.

Parameters
bufferUser supplied buffer.
sizeSize of the buffer in bytes. It must at least larger than sizeof(ChunkHeader).
chunkSizeThe size of memory chunk. The default is kDefaultChunkSize.
baseAllocatorThe allocator for allocating memory chunks.

Definition at line 125 of file allocators.h.

References buffer, rapidjson::MemoryPoolAllocator< BaseAllocator >::ChunkHeader::capacity, RAPIDJSON_ASSERT, and ncbi::grid::netcache::search::fields::size.

◆ ~MemoryPoolAllocator()

template<typename BaseAllocator = CrtAllocator>
rapidjson::MemoryPoolAllocator< BaseAllocator >::~MemoryPoolAllocator ( )
inline

Destructor.

This deallocates all memory chunks, excluding the user-supplied buffer.

Definition at line 139 of file allocators.h.

References RAPIDJSON_DELETE.

◆ MemoryPoolAllocator() [3/3]

template<typename BaseAllocator = CrtAllocator>
rapidjson::MemoryPoolAllocator< BaseAllocator >::MemoryPoolAllocator ( const MemoryPoolAllocator< BaseAllocator > &  rhs)
private

Copy constructor is not permitted.

Member Function Documentation

◆ AddChunk()

template<typename BaseAllocator = CrtAllocator>
bool rapidjson::MemoryPoolAllocator< BaseAllocator >::AddChunk ( size_t  capacity)
inlineprivate

Creates a new chunk.

Parameters
capacityCapacity of the chunk in bytes.
Returns
true if success.

Definition at line 237 of file allocators.h.

References RAPIDJSON_ALIGN, and RAPIDJSON_NEW.

◆ Capacity()

template<typename BaseAllocator = CrtAllocator>
size_t rapidjson::MemoryPoolAllocator< BaseAllocator >::Capacity ( ) const
inline

Computes the total capacity of allocated memory chunks.

Returns
total capacity in bytes.

Definition at line 158 of file allocators.h.

References rapidjson::MemoryPoolAllocator< BaseAllocator >::ChunkHeader::next.

◆ Clear()

template<typename BaseAllocator = CrtAllocator>
void rapidjson::MemoryPoolAllocator< BaseAllocator >::Clear ( void  )
inline

Deallocates all memory chunks, excluding the user-supplied buffer.

Definition at line 145 of file allocators.h.

References next().

◆ Free()

template<typename BaseAllocator = CrtAllocator>
static void rapidjson::MemoryPoolAllocator< BaseAllocator >::Free ( void *  ptr)
inlinestatic

Frees a memory block (concept Allocator)

Definition at line 225 of file allocators.h.

◆ Malloc()

template<typename BaseAllocator = CrtAllocator>
void* rapidjson::MemoryPoolAllocator< BaseAllocator >::Malloc ( size_t  size)
inline

Allocates a memory block. (concept Allocator)

Definition at line 176 of file allocators.h.

References buffer, NULL, RAPIDJSON_ALIGN, and ncbi::grid::netcache::search::fields::size.

◆ operator=()

template<typename BaseAllocator = CrtAllocator>
MemoryPoolAllocator& rapidjson::MemoryPoolAllocator< BaseAllocator >::operator= ( const MemoryPoolAllocator< BaseAllocator > &  rhs)
private

Copy assignment operator is not permitted.

◆ Realloc()

template<typename BaseAllocator = CrtAllocator>
void* rapidjson::MemoryPoolAllocator< BaseAllocator >::Realloc ( void *  originalPtr,
size_t  originalSize,
size_t  newSize 
)
inline

Resizes a memory block (concept Allocator)

Definition at line 191 of file allocators.h.

References Malloc, NULL, and RAPIDJSON_ALIGN.

◆ Size()

template<typename BaseAllocator = CrtAllocator>
size_t rapidjson::MemoryPoolAllocator< BaseAllocator >::Size ( void  ) const
inline

Computes the memory blocks allocated.

Returns
total used bytes.

Definition at line 168 of file allocators.h.

References rapidjson::MemoryPoolAllocator< BaseAllocator >::ChunkHeader::next, and ncbi::grid::netcache::search::fields::size.

Member Data Documentation

◆ baseAllocator_

template<typename BaseAllocator = CrtAllocator>
BaseAllocator* rapidjson::MemoryPoolAllocator< BaseAllocator >::baseAllocator_
private

base allocator for allocating memory chunks.

Definition at line 265 of file allocators.h.

◆ chunk_capacity_

template<typename BaseAllocator = CrtAllocator>
size_t rapidjson::MemoryPoolAllocator< BaseAllocator >::chunk_capacity_
private

The minimum capacity of chunk when they are allocated.

Definition at line 263 of file allocators.h.

◆ chunkHead_

template<typename BaseAllocator = CrtAllocator>
ChunkHeader* rapidjson::MemoryPoolAllocator< BaseAllocator >::chunkHead_
private

Head of the chunk linked-list. Only the head chunk serves allocation.

Definition at line 262 of file allocators.h.

◆ kDefaultChunkCapacity

template<typename BaseAllocator = CrtAllocator>
const int rapidjson::MemoryPoolAllocator< BaseAllocator >::kDefaultChunkCapacity = 64 * 1024
staticprivate

Default chunk capacity.

Definition at line 251 of file allocators.h.

◆ kNeedFree

template<typename BaseAllocator = CrtAllocator>
const bool rapidjson::MemoryPoolAllocator< BaseAllocator >::kNeedFree = false
static

Tell users that no need to call Free() with this allocator. (concept Allocator)

Definition at line 104 of file allocators.h.

◆ ownBaseAllocator_

template<typename BaseAllocator = CrtAllocator>
BaseAllocator* rapidjson::MemoryPoolAllocator< BaseAllocator >::ownBaseAllocator_
private

base allocator created by this object.

Definition at line 266 of file allocators.h.

◆ userBuffer_

template<typename BaseAllocator = CrtAllocator>
void* rapidjson::MemoryPoolAllocator< BaseAllocator >::userBuffer_
private

User supplied buffer.

Definition at line 264 of file allocators.h.


The documentation for this class was generated from the following file:
Modified on Fri Sep 20 14:57:12 2024 by modify_doxy.py rev. 669887