LCOV - code coverage report
Current view: top level - flamenco/gossip - fd_bloom.h (source / functions) Hit Total Coverage
Test: cov.lcov Lines: 2 9 22.2 %
Date: 2025-09-19 04:41:14 Functions: 0 10 0.0 %

          Line data    Source code
       1             : #ifndef HEADER_fd_src_flamenco_gossip_fd_bloom_h
       2             : #define HEADER_fd_src_flamenco_gossip_fd_bloom_h
       3             : 
       4             : #include "../../util/rng/fd_rng.h"
       5             : 
       6             : #include <math.h>
       7             : 
       8        1830 : #define FD_BLOOM_ALIGN     (64UL)
       9             : #define FD_BLOOM_FOOTPRINT (128UL)
      10             : 
      11         909 : #define FD_BLOOM_MAGIC (0xF17EDA2CE8100800) /* FIREDANCE BLOOM V0 */
      12             : 
      13             : struct __attribute__((aligned(FD_BLOOM_ALIGN))) fd_bloom_private {
      14             :   ulong * keys;
      15             :   ulong   keys_len;
      16             : 
      17             :   ulong * bits;
      18             :   ulong   bits_len;
      19             : 
      20             :   ulong   hash_seed;
      21             :   fd_rng_t * rng;
      22             : 
      23             :   ulong   max_bits;
      24             :   double  false_positive_rate;
      25             : 
      26             :   ulong magic; /* ==FD_BLOOM_MAGIC */
      27             : };
      28             : 
      29             : typedef struct fd_bloom_private fd_bloom_t;
      30             : 
      31             : FD_PROTOTYPES_BEGIN
      32             : 
      33             : FD_FN_CONST ulong
      34             : fd_bloom_align( void );
      35             : 
      36             : FD_FN_CONST ulong
      37             : fd_bloom_footprint( double false_positive_rate,
      38             :                     ulong  max_bits );
      39             : 
      40             : void *
      41             : fd_bloom_new( void *     shmem,
      42             :               fd_rng_t * rng,
      43             :               double     false_positive_rate,
      44             :               ulong      max_bits );
      45             : 
      46             : fd_bloom_t *
      47             : fd_bloom_join( void * shbloom );
      48             : 
      49             : void
      50             : fd_bloom_initialize( fd_bloom_t * bloom,
      51             :                      ulong        num_items );
      52             : 
      53             : void
      54             : fd_bloom_insert( fd_bloom_t *  bloom,
      55             :                  uchar const * key,
      56             :                  ulong         key_sz );
      57             : 
      58             : int
      59             : fd_bloom_contains( fd_bloom_t *  bloom,
      60             :                    uchar const * key,
      61             :                    ulong         key_sz );
      62             : 
      63             : int
      64             : fd_bloom_init_inplace( ulong *      keys,
      65             :                        ulong *      bits,
      66             :                        ulong        keys_len,
      67             :                        ulong        bits_len,
      68             :                        ulong        hash_seed,
      69             :                        fd_rng_t *   rng,
      70             :                        double       false_positive_rate,
      71             :                        fd_bloom_t * out_bloom );
      72             : 
      73             : static inline double
      74             : fd_bloom_max_items( double max_bits,
      75             :                     double num_keys,
      76           0 :                     double false_positive_rate ) {
      77           0 :   return ceil( max_bits / ( -num_keys / log( 1.0 - exp( log( false_positive_rate ) / num_keys ) )));
      78           0 : }
      79             : 
      80             : static inline ulong
      81             : fd_bloom_num_bits( double num_items,
      82             :                    double false_positive_rate,
      83           0 :                    double max_bits ) {
      84           0 :   double num_bits = ceil( ((double)num_items * log( false_positive_rate )) / log( 1.0 / pow( 2.0, log( 2.0 ) )));
      85           0 :   return (ulong)fmax( 1.0, fmin( max_bits, num_bits ) );
      86           0 : }
      87             : 
      88             : FD_PROTOTYPES_END
      89             : 
      90             : #endif /* HEADER_fd_src_flamenco_gossip_fd_bloom_h */

Generated by: LCOV version 1.14