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