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

an example for a per-tree memory allocator More...

Public Member Functions

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

Public Attributes

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

Detailed Description

an example for a per-tree memory allocator

Definition at line 6897 of file quickstart.cpp.

Constructor & Destructor Documentation

◆ ~PerTreeMemoryExample()

PerTreeMemoryExample::~PerTreeMemoryExample ( )
inline

Definition at line 6939 of file quickstart.cpp.

6940 {
6942 }

Member Function Documentation

◆ callbacks()

ryml::Callbacks PerTreeMemoryExample::callbacks ( ) const
inline

Definition at line 6903 of file quickstart.cpp.

6904 {
6905 // Above we used static functions to bridge to our methods.
6906 // To show a different approach, we employ lambdas here.
6907 // Note that there can be no captures in the lambdas
6908 // because these are C-style function pointers.
6909 ryml::Callbacks cb;
6910 cb.m_user_data = (void*) this;
6911 cb.m_allocate = [](size_t len, void *, void *data){ return ((PerTreeMemoryExample*) data)->allocate(len); };
6912 cb.m_free = [](void *mem, size_t len, void *data){ return ((PerTreeMemoryExample*) data)->free(mem, len); };
6913 return cb;
6914 }
void * m_user_data
data to be forwarded in every call to a callback
Definition common.hpp:375
pfn_allocate m_allocate
a pointer to an allocate handler function
Definition common.hpp:376
pfn_free m_free
a pointer to a free handler function
Definition common.hpp:377

Referenced by sample_per_tree_allocator().

◆ allocate()

void * PerTreeMemoryExample::allocate ( size_t len)
inline

Definition at line 6916 of file quickstart.cpp.

6917 {
6918 void *ptr = &memory_pool[alloc_size];
6919 alloc_size += len;
6920 ++num_allocs;
6921 if C4_UNLIKELY(alloc_size > memory_pool.size())
6922 {
6923 std::cerr << "out of memory! requested=" << alloc_size << " vs " << memory_pool.size() << " available" << std::endl; // LCOV_EXCL_LINE
6924 std::abort(); // LCOV_EXCL_LINE
6925 }
6926 return ptr;
6927 }
std::vector< char > memory_pool

◆ free()

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

Definition at line 6929 of file quickstart.cpp.

6930 {
6931 CHECK((char*)mem >= &memory_pool.front() && (char*)mem < &memory_pool.back());
6932 CHECK((char*)mem+len >= &memory_pool.front() && (char*)mem+len <= &memory_pool.back());
6933 dealloc_size += len;
6934 ++num_deallocs;
6935 // no need to free here
6936 }
#define CHECK(predicate)
a testing assertion, used only in this quickstart

◆ check_and_reset()

void PerTreeMemoryExample::check_and_reset ( )
inline

Definition at line 6943 of file quickstart.cpp.

6944 {
6945 std::cout << "size: alloc=" << alloc_size << " dealloc=" << dealloc_size << std::endl;
6946 std::cout << "count: #allocs=" << num_allocs << " #deallocs=" << num_deallocs << std::endl;
6948 CHECK(alloc_size >= dealloc_size); // failure here means a double free
6949 CHECK(alloc_size == dealloc_size); // failure here means a leak
6950 num_allocs = 0;
6951 num_deallocs = 0;
6952 alloc_size = 0;
6953 dealloc_size = 0;
6954 }

Referenced by ~PerTreeMemoryExample().

Member Data Documentation

◆ memory_pool

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

Definition at line 6899 of file quickstart.cpp.

Referenced by allocate(), and free().

◆ num_allocs

size_t PerTreeMemoryExample::num_allocs = 0

Definition at line 6900 of file quickstart.cpp.

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

◆ alloc_size

size_t PerTreeMemoryExample::alloc_size = 0

Definition at line 6900 of file quickstart.cpp.

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

◆ num_deallocs

size_t PerTreeMemoryExample::num_deallocs = 0

Definition at line 6901 of file quickstart.cpp.

Referenced by check_and_reset(), and free().

◆ dealloc_size

size_t PerTreeMemoryExample::dealloc_size = 0

Definition at line 6901 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