rapidyaml  0.7.0
parse and emit YAML, and do it fast
sample::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 4728 of file quickstart.cpp.

Constructor & Destructor Documentation

◆ ~GlobalAllocatorExample()

sample::GlobalAllocatorExample::~GlobalAllocatorExample ( )
inline

Definition at line 4780 of file quickstart.cpp.

4781  {
4782  check_and_reset();
4783  }

References check_and_reset().

Member Function Documentation

◆ allocate()

void* sample::GlobalAllocatorExample::allocate ( size_t  len)
inline

Definition at line 4734 of file quickstart.cpp.

4735  {
4736  void *ptr = &memory_pool[alloc_size];
4737  alloc_size += len;
4738  ++num_allocs;
4739  // ensure the ptr is aligned
4740  uintptr_t uptr = (uintptr_t)ptr;
4741  const uintptr_t align = alignof(max_align_t);
4742  if (uptr % align)
4743  {
4744  uintptr_t prev = uptr - (uptr % align);
4745  uintptr_t next = prev + align;
4746  uintptr_t corr = next - uptr;
4747  ptr = (void*)(((char*)ptr) + corr);
4748  corr_size += corr;
4749  }
4750  C4_CHECK_MSG(alloc_size + corr_size <= memory_pool.size(),
4751  "out of memory! requested=%zu+%zu available=%zu\n",
4752  alloc_size, corr_size, memory_pool.size());
4753  return ptr;
4754  }
std::vector< char > memory_pool

References alloc_size, corr_size, memory_pool, and num_allocs.

◆ free()

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

Definition at line 4756 of file quickstart.cpp.

4757  {
4758  CHECK((char*)mem >= &memory_pool.front() && (char*)mem < &memory_pool.back());
4759  CHECK((char*)mem+len >= &memory_pool.front() && (char*)mem+len <= &memory_pool.back());
4760  dealloc_size += len;
4761  ++num_deallocs;
4762  // no need to free here
4763  }
#define CHECK(predicate)
Definition: quickstart.cpp:229

References CHECK, dealloc_size, memory_pool, and num_deallocs.

◆ callbacks()

ryml::Callbacks sample::GlobalAllocatorExample::callbacks ( )
inline

Definition at line 4766 of file quickstart.cpp.

4767  {
4769  }
a c-style callbacks class.
Definition: common.hpp:375
static void * s_allocate(size_t len, void *, void *this_)
static void s_free(void *mem, size_t len, void *this_)

References s_allocate(), and s_free().

Referenced by sample::sample_global_allocator().

◆ s_allocate()

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

Definition at line 4770 of file quickstart.cpp.

4771  {
4772  return ((GlobalAllocatorExample*)this_)->allocate(len);
4773  }

Referenced by callbacks(), and sample::sample_global_allocator().

◆ s_free()

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

Definition at line 4774 of file quickstart.cpp.

4775  {
4776  return ((GlobalAllocatorExample*)this_)->free(mem, len);
4777  }

Referenced by callbacks(), and sample::sample_global_allocator().

◆ check_and_reset()

void sample::GlobalAllocatorExample::check_and_reset ( )
inline

Definition at line 4784 of file quickstart.cpp.

4785  {
4786  std::cout << "size: alloc=" << alloc_size << " dealloc=" << dealloc_size << std::endl;
4787  std::cout << "count: #allocs=" << num_allocs << " #deallocs=" << num_deallocs << std::endl;
4789  CHECK(alloc_size >= dealloc_size); // failure here means a double free
4790  CHECK(alloc_size == dealloc_size); // failure here means a leak
4791  num_allocs = 0;
4792  num_deallocs = 0;
4793  alloc_size = 0;
4794  dealloc_size = 0;
4795  }

References alloc_size, CHECK, dealloc_size, num_allocs, and num_deallocs.

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

Member Data Documentation

◆ memory_pool

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

Definition at line 4730 of file quickstart.cpp.

Referenced by allocate(), and free().

◆ num_allocs

size_t sample::GlobalAllocatorExample::num_allocs = 0

Definition at line 4731 of file quickstart.cpp.

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

◆ alloc_size

size_t sample::GlobalAllocatorExample::alloc_size = 0

Definition at line 4731 of file quickstart.cpp.

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

◆ corr_size

size_t sample::GlobalAllocatorExample::corr_size = 0

Definition at line 4731 of file quickstart.cpp.

Referenced by allocate().

◆ num_deallocs

size_t sample::GlobalAllocatorExample::num_deallocs = 0

Definition at line 4732 of file quickstart.cpp.

Referenced by check_and_reset(), and free().

◆ dealloc_size

size_t sample::GlobalAllocatorExample::dealloc_size = 0

Definition at line 4732 of file quickstart.cpp.

Referenced by check_and_reset(), and free().


The documentation for this struct was generated from the following file: