rapidyaml  0.16.0
parseandemitYAML,anddoitfast
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 6843 of file quickstart.cpp.

Constructor & Destructor Documentation

GlobalAllocatorExample::~GlobalAllocatorExample ( )
inline

Definition at line 6898 of file quickstart.cpp.

6899  {
6900  check_and_reset();
6901  }

Member Function Documentation

void* GlobalAllocatorExample::allocate ( size_t  len)
inline

Definition at line 6849 of file quickstart.cpp.

6850  {
6851  void *ptr = &memory_pool[alloc_size];
6852  alloc_size += len;
6853  ++num_allocs;
6854  // ensure the ptr is aligned
6855  uintptr_t uptr = (uintptr_t)ptr;
6856  const uintptr_t align = alignof(max_align_t);
6857  if (uptr % align)
6858  {
6859  uintptr_t prev = uptr - (uptr % align);
6860  uintptr_t next = prev + align;
6861  uintptr_t corr = next - uptr;
6862  ptr = (void*)(((char*)ptr) + corr);
6863  corr_size += corr;
6864  }
6865  C4_CHECK_MSG(alloc_size + corr_size <= memory_pool.size(),
6866  "out of memory! requested=%zu+%zu available=%zu\n",
6867  alloc_size, corr_size, memory_pool.size());
6868  return ptr;
6869  }
std::vector< char > memory_pool
void GlobalAllocatorExample::free ( void *  mem,
size_t  len 
)
inline

Definition at line 6871 of file quickstart.cpp.

6872  {
6873  CHECK((char*)mem >= &memory_pool.front() && (char*)mem < &memory_pool.back());
6874  CHECK((char*)mem+len >= &memory_pool.front() && (char*)mem+len <= &memory_pool.back());
6875  dealloc_size += len;
6876  ++num_deallocs;
6877  // no need to free here
6878  }
#define CHECK(predicate)
a testing assertion, used only in this quickstart
Definition: quickstart.cpp:310
std::vector< char > memory_pool
ryml::Callbacks GlobalAllocatorExample::callbacks ( )
inline

Definition at line 6881 of file quickstart.cpp.

Referenced by sample_global_allocator().

6882  {
6883  ryml::Callbacks cb = {};
6884  return cb.set_user_data(this)
6887  }
Callbacks & set_allocate(pfn_allocate allocate=nullptr)
Set or reset the allocate callback.
Definition: common.cpp:150
Callbacks & set_free(pfn_free free=nullptr)
Set or reset the free callback.
Definition: common.cpp:159
A c-style callbacks class to customize behavior on errors or allocation.
Definition: common.hpp:373
Callbacks & set_user_data(void *user_data)
Set the user data.
Definition: common.cpp:144
static void * s_allocate(size_t len, void *, void *this_)
static void s_free(void *mem, size_t len, void *this_)
static void* GlobalAllocatorExample::s_allocate ( size_t  len,
void *  ,
void *  this_ 
)
inlinestatic

Definition at line 6888 of file quickstart.cpp.

Referenced by callbacks(), and sample_global_allocator().

6889  {
6890  return ((GlobalAllocatorExample*)this_)->allocate(len);
6891  }
static void GlobalAllocatorExample::s_free ( void *  mem,
size_t  len,
void *  this_ 
)
inlinestatic

Definition at line 6892 of file quickstart.cpp.

Referenced by callbacks(), and sample_global_allocator().

6893  {
6894  ((GlobalAllocatorExample*)this_)->free(mem, len);
6895  }
void GlobalAllocatorExample::check_and_reset ( )
inline

Definition at line 6902 of file quickstart.cpp.

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

6903  {
6904  std::cout << "size: alloc=" << alloc_size << " dealloc=" << dealloc_size << std::endl;
6905  std::cout << "count: #allocs=" << num_allocs << " #deallocs=" << num_deallocs << std::endl;
6907  CHECK(alloc_size >= dealloc_size); // failure here means a double free
6908  CHECK(alloc_size == dealloc_size); // failure here means a leak
6909  num_allocs = 0;
6910  num_deallocs = 0;
6911  alloc_size = 0;
6912  dealloc_size = 0;
6913  }
#define CHECK(predicate)
a testing assertion, used only in this quickstart
Definition: quickstart.cpp:310

Member Data Documentation

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

Definition at line 6845 of file quickstart.cpp.

size_t GlobalAllocatorExample::num_allocs = 0

Definition at line 6846 of file quickstart.cpp.

Referenced by allocate(), and sample_global_allocator().

size_t GlobalAllocatorExample::alloc_size = 0

Definition at line 6846 of file quickstart.cpp.

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

size_t GlobalAllocatorExample::corr_size = 0

Definition at line 6846 of file quickstart.cpp.

Referenced by allocate().

size_t GlobalAllocatorExample::num_deallocs = 0

Definition at line 6847 of file quickstart.cpp.

Referenced by free().

size_t GlobalAllocatorExample::dealloc_size = 0

Definition at line 6847 of file quickstart.cpp.

Referenced by check_and_reset(), and free().


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