LCOV - code coverage report
Current view: top level - util/valloc - fd_valloc.h (source / functions) Hit Total Coverage
Test: cov.lcov Lines: 9 21 42.9 %
Date: 2024-11-13 11:58:15 Functions: 21 3762 0.6 %

          Line data    Source code
       1             : #ifndef HEADER_fd_src_util_valloc_fd_valloc_h
       2             : #define HEADER_fd_src_util_valloc_fd_valloc_h
       3             : 
       4             : #include "../fd_util_base.h"
       5             : 
       6             : /* APIs to abstract memory allocators. */
       7             : 
       8             : typedef void * (* fd_valloc_malloc_fn_t)( void * allocator, ulong align, ulong sz );
       9             : typedef void   (* fd_valloc_free_fn_t  )( void * allocator, void * ptr );
      10             : 
      11             : struct fd_valloc_vtable {
      12             :   fd_valloc_malloc_fn_t malloc;
      13             :   fd_valloc_free_fn_t   free;
      14             : };
      15             : 
      16             : typedef struct fd_valloc_vtable fd_valloc_vtable_t;
      17             : 
      18             : struct fd_valloc {
      19             :   void *                     self;
      20             :   fd_valloc_vtable_t const * vt;
      21             : };
      22             : 
      23             : typedef struct fd_valloc fd_valloc_t;
      24             : 
      25             : FD_PROTOTYPES_BEGIN
      26             : 
      27             : extern const fd_valloc_vtable_t fd_libc_vtable;
      28             : #if FD_HAS_HOSTED
      29             : extern const fd_valloc_vtable_t fd_backtracing_vtable;
      30             : #endif
      31             : 
      32             : static inline FD_FN_CONST fd_valloc_t
      33           0 : fd_libc_alloc_virtual( void ) {
      34           0 :   fd_valloc_t valloc = { NULL, &fd_libc_vtable };
      35           0 :   return valloc;
      36           0 : }
      37             : 
      38             : static inline FD_FN_CONST fd_valloc_t
      39           0 : fd_null_alloc_virtual( void ) {
      40           0 :   fd_valloc_t valloc = { NULL, NULL };
      41           0 :   return valloc;
      42           0 : }
      43             : 
      44             : static inline FD_FN_CONST int
      45      410946 : fd_is_null_alloc_virtual( fd_valloc_t valloc ) {
      46      410946 :   return (int)(valloc.vt == NULL);
      47      410946 : }
      48             : 
      49             : #if FD_HAS_HOSTED
      50             : /* The backtracing valloc is a debugging tool for tracking memory leaks in 
      51             :    applications using vallocs. It can be used in combination with
      52             :    contrib/tool/leak-detector.py to find potential memory leaks. */
      53             : static inline FD_FN_CONST fd_valloc_t
      54           0 : fd_backtracing_alloc_virtual( fd_valloc_t * inner_valloc ) {
      55           0 :   fd_valloc_t valloc = { inner_valloc, &fd_backtracing_vtable };
      56           0 :   return valloc;
      57           0 : }
      58             : #endif
      59             : 
      60             : static inline void *
      61             : fd_valloc_malloc( fd_valloc_t valloc,
      62             :                   ulong       align,
      63      731718 :                   ulong       sz ) {
      64      731718 :   return valloc.vt->malloc( valloc.self, align, sz );
      65      731718 : }
      66             : 
      67             : static inline void
      68             : fd_valloc_free( fd_valloc_t valloc,
      69     1566141 :                 void *      ptr ) {
      70     1566141 :   valloc.vt->free( valloc.self, ptr );
      71     1566141 : }
      72             : 
      73             : FD_PROTOTYPES_END
      74             : 
      75             : #endif /* HEADER_fd_src_util_valloc_fd_valloc_h */

Generated by: LCOV version 1.14