Line data Source code
1 : #ifndef HEADER_fd_src_flamenco_runtime_fd_bank_hash_cmp_h 2 : #define HEADER_fd_src_flamenco_runtime_fd_bank_hash_cmp_h 3 : 4 : #include "../fd_flamenco_base.h" 5 : #include "fd_blockstore.h" 6 : 7 : struct fd_bank_hash_cmp_entry { 8 : ulong slot; 9 : uint hash; 10 : fd_hash_t ours; 11 : fd_hash_t theirs[8]; 12 : ulong stakes[8]; 13 : ulong cnt; 14 : int overflow; 15 : int rooted; 16 : }; 17 : typedef struct fd_bank_hash_cmp_entry fd_bank_hash_cmp_entry_t; 18 : #define MAP_NAME fd_bank_hash_cmp_map 19 0 : #define MAP_T fd_bank_hash_cmp_entry_t 20 0 : #define MAP_KEY slot 21 0 : #define MAP_LG_SLOT_CNT (16) /* 0.25 fill ratio */ 22 : #include "../../util/tmpl/fd_map.c" 23 : 24 : struct fd_bank_hash_cmp { 25 : fd_bank_hash_cmp_entry_t * map; 26 : ulong map_gaddr; 27 : ulong cnt; 28 : ulong watermark; /* */ 29 : ulong total_stake; 30 : volatile int lock; 31 : }; 32 : typedef struct fd_bank_hash_cmp fd_bank_hash_cmp_t; 33 : 34 : FD_PROTOTYPES_BEGIN 35 : 36 : static inline ulong 37 0 : fd_bank_hash_cmp_align( void ) { 38 0 : return 128UL; 39 0 : } 40 : 41 : FD_FN_CONST static inline ulong 42 0 : fd_bank_hash_cmp_footprint( void ) { 43 : /* clang-format off */ 44 0 : return FD_LAYOUT_FINI( FD_LAYOUT_APPEND( FD_LAYOUT_APPEND( FD_LAYOUT_INIT, 45 0 : fd_bank_hash_cmp_align(), sizeof(fd_bank_hash_cmp_t) ), 46 0 : fd_bank_hash_cmp_map_align(), fd_bank_hash_cmp_map_footprint() ), 47 0 : fd_bank_hash_cmp_align() ); 48 : /* clang-format on */ 49 0 : } 50 : 51 : void * 52 : fd_bank_hash_cmp_new( void * mem ); 53 : 54 : fd_bank_hash_cmp_t * 55 : fd_bank_hash_cmp_join( void * bank_hash_cmp ); 56 : 57 : void * 58 : fd_bank_hash_cmp_leave( fd_bank_hash_cmp_t const * bank_hash_cmp ); 59 : 60 : void * 61 : fd_bank_hash_cmp_delete( void * bank_hash_cmp ); 62 : 63 : void 64 : fd_bank_hash_cmp_lock( fd_bank_hash_cmp_t * bank_hash_cmp ); 65 : 66 : void 67 : fd_bank_hash_cmp_unlock( fd_bank_hash_cmp_t * bank_hash_cmp ); 68 : 69 : void 70 : fd_bank_hash_cmp_insert( fd_bank_hash_cmp_t * bank_hash_cmp, 71 : ulong slot, 72 : fd_hash_t const * hash, 73 : int ours, 74 : ulong stake ); 75 : 76 : /* Returns 1 on bank hash match (caller should move watermark forward), 77 : -1 on mismatch 78 : 0 if we weren't able to compare yet */ 79 : int 80 : fd_bank_hash_cmp_check( fd_bank_hash_cmp_t * bank_hash_cmp, ulong slot ); 81 : 82 : FD_PROTOTYPES_END 83 : 84 : #endif /* HEADER_fd_src_flamenco_runtime_fd_bank_hash_cmp_h */