rapidyaml 0.15.2
parse and emit YAML, and do it fast
Loading...
Searching...
No Matches
GlobalAllocatorExample Struct Reference

Public Member Functions

void * allocate (size_t len)
void free (void *mem, size_t len)
ryml::Callbacks callbacks ()
 ~GlobalAllocatorExample ()
void check_and_reset ()

Static Public Member Functions

static void * s_allocate (size_t len, void *, void *this_)
static void s_free (void *mem, size_t len, void *this_)

Public Attributes

std::vector< char > memory_pool = std::vector<char>(10u * 1024u)
size_t num_allocs = 0
size_t alloc_size = 0
size_t corr_size = 0
size_t num_deallocs = 0
size_t dealloc_size = 0

Detailed Description

Definition at line 6759 of file quickstart.cpp.

Constructor & Destructor Documentation

◆ ~GlobalAllocatorExample()

GlobalAllocatorExample::~GlobalAllocatorExample ( )
inline

Definition at line 6814 of file quickstart.cpp.

6815 {
6817 }

Member Function Documentation

◆ allocate()

void * GlobalAllocatorExample::allocate ( size_t len)
inline

Definition at line 6765 of file quickstart.cpp.

6766 {
6767 void *ptr = &memory_pool[alloc_size];
6768 alloc_size += len;
6769 ++num_allocs;
6770 // ensure the ptr is aligned
6771 uintptr_t uptr = (uintptr_t)ptr;
6772 const uintptr_t align = alignof(max_align_t);
6773 if (uptr % align)
6774 {
6775 uintptr_t prev = uptr - (uptr % align);
6776 uintptr_t next = prev + align;
6777 uintptr_t corr = next - uptr;
6778 ptr = (void*)(((char*)ptr) + corr);
6779 corr_size += corr;
6780 }
6781 C4_CHECK_MSG(alloc_size + corr_size <= memory_pool.size(),
6782 "out of memory! requested=%zu+%zu available=%zu\n",
6784 return ptr;
6785 }
std::vector< char > memory_pool

◆ free()

void GlobalAllocatorExample::free ( void * mem,
size_t len )
inline

Definition at line 6787 of file quickstart.cpp.

6788 {
6789 CHECK((char*)mem >= &memory_pool.front() && (char*)mem < &memory_pool.back());
6790 CHECK((char*)mem+len >= &memory_pool.front() && (char*)mem+len <= &memory_pool.back());
6791 dealloc_size += len;
6792 ++num_deallocs;
6793 // no need to free here
6794 }
#define CHECK(predicate)
a testing assertion, used only in this quickstart

◆ callbacks()

ryml::Callbacks GlobalAllocatorExample::callbacks ( )
inline

Definition at line 6797 of file quickstart.cpp.

6798 {
6799 ryml::Callbacks cb = {};
6800 return cb.set_user_data(this)
6803 }
static void s_free(void *mem, size_t len, void *this_)
static void * s_allocate(size_t len, void *, void *this_)
Callbacks & set_free(pfn_free free=nullptr)
Set or reset the free callback.
Definition common.cpp:159
Callbacks & set_allocate(pfn_allocate allocate=nullptr)
Set or reset the allocate callback.
Definition common.cpp:150
Callbacks & set_user_data(void *user_data)
Set the user data.
Definition common.cpp:144

Referenced by sample_global_allocator().

◆ s_allocate()

void * GlobalAllocatorExample::s_allocate ( size_t len,
void * ,
void * this_ )
inlinestatic

Definition at line 6804 of file quickstart.cpp.

6805 {
6806 return ((GlobalAllocatorExample*)this_)->allocate(len);
6807 }

Referenced by callbacks(), and sample_global_allocator().

◆ s_free()

void GlobalAllocatorExample::s_free ( void * mem,
size_t len,
void * this_ )
inlinestatic

Definition at line 6808 of file quickstart.cpp.

6809 {
6810 ((GlobalAllocatorExample*)this_)->free(mem, len);
6811 }

Referenced by callbacks(), and sample_global_allocator().

◆ check_and_reset()

void GlobalAllocatorExample::check_and_reset ( )
inline

Definition at line 6818 of file quickstart.cpp.

6819 {
6820 std::cout << "size: alloc=" << alloc_size << " dealloc=" << dealloc_size << std::endl;
6821 std::cout << "count: #allocs=" << num_allocs << " #deallocs=" << num_deallocs << std::endl;
6823 CHECK(alloc_size >= dealloc_size); // failure here means a double free
6824 CHECK(alloc_size == dealloc_size); // failure here means a leak
6825 num_allocs = 0;
6826 num_deallocs = 0;
6827 alloc_size = 0;
6828 dealloc_size = 0;
6829 }

Referenced by ~GlobalAllocatorExample(), and sample_global_allocator().

Member Data Documentation

◆ memory_pool

std::vector<char> GlobalAllocatorExample::memory_pool = std::vector<char>(10u * 1024u)

Definition at line 6761 of file quickstart.cpp.

Referenced by allocate(), and free().

◆ num_allocs

size_t GlobalAllocatorExample::num_allocs = 0

Definition at line 6762 of file quickstart.cpp.

Referenced by allocate(), check_and_reset(), and sample_global_allocator().

◆ alloc_size

size_t GlobalAllocatorExample::alloc_size = 0

Definition at line 6762 of file quickstart.cpp.

Referenced by allocate(), check_and_reset(), and sample_global_allocator().

◆ corr_size

size_t GlobalAllocatorExample::corr_size = 0

Definition at line 6762 of file quickstart.cpp.

Referenced by allocate().

◆ num_deallocs

size_t GlobalAllocatorExample::num_deallocs = 0

Definition at line 6763 of file quickstart.cpp.

Referenced by check_and_reset(), and free().

◆ dealloc_size

size_t GlobalAllocatorExample::dealloc_size = 0

Definition at line 6763 of file quickstart.cpp.

Referenced by check_and_reset(), and free().


The documentation for this struct was generated from the following file:
  • /home/docs/checkouts/readthedocs.org/user_builds/rapidyaml/checkouts/latest/samples/quickstart.cpp