Line data Source code
1 : #include "fd_quic_pkt_meta.h" 2 : 3 : void * 4 : fd_quic_pkt_meta_tracker_init( fd_quic_pkt_meta_tracker_t * tracker, 5 : ulong total_meta_cnt, 6 631176 : fd_quic_pkt_meta_t * pool ) { 7 3155880 : for( ulong enc_level=0; enc_level<4; enc_level++ ) { 8 2524704 : void* mem = fd_quic_pkt_meta_treap_new( &tracker->sent_pkt_metas[enc_level], 9 2524704 : total_meta_cnt ); 10 2524704 : mem = fd_quic_pkt_meta_treap_join( mem ); 11 2524704 : if( FD_UNLIKELY( !mem ) ) return NULL; 12 2524704 : } 13 631176 : tracker->pool = pool; 14 : 15 631176 : return tracker; 16 631176 : } 17 : 18 : void 19 : fd_quic_pkt_meta_ds_init_pool( fd_quic_pkt_meta_t * pool, 20 3399 : ulong total_meta_cnt ) { 21 3399 : fd_quic_pkt_meta_treap_seed( pool, total_meta_cnt, (ulong)fd_tickcount() ); 22 3399 : } 23 : 24 : void 25 : fd_quic_pkt_meta_insert( fd_quic_pkt_meta_ds_t * ds, 26 : fd_quic_pkt_meta_t * pkt_meta, 27 17592822 : fd_quic_pkt_meta_t * pool ) { 28 17592822 : fd_quic_pkt_meta_treap_ele_insert( ds, pkt_meta, pool ); 29 17592822 : } 30 : 31 : 32 : ulong 33 : fd_quic_pkt_meta_remove_range( fd_quic_pkt_meta_ds_t * ds, 34 : fd_quic_pkt_meta_t * pool, 35 : ulong pkt_number_lo, 36 294484 : ulong pkt_number_hi ) { 37 : 38 294484 : fd_quic_pkt_meta_ds_fwd_iter_t l_iter = fd_quic_pkt_meta_ds_idx_ge( ds, pkt_number_lo, pool ); 39 294484 : fd_quic_pkt_meta_t * prev = NULL; 40 294484 : ulong cnt_removed = 0; 41 : 42 294484 : for( fd_quic_pkt_meta_ds_fwd_iter_t iter = l_iter; 43 17862942 : !fd_quic_pkt_meta_ds_fwd_iter_done( iter ); 44 17568524 : iter = fd_quic_pkt_meta_ds_fwd_iter_next( iter, pool ) ) { 45 17568524 : fd_quic_pkt_meta_t * e = fd_quic_pkt_meta_ds_fwd_iter_ele( iter, pool ); 46 17568524 : if( FD_UNLIKELY( e->key.pkt_num > pkt_number_hi ) ) break; 47 17568458 : if( FD_LIKELY( prev ) ) { 48 17274043 : fd_quic_pkt_meta_treap_ele_remove( ds, prev, pool ); 49 17274043 : fd_quic_pkt_meta_pool_ele_release( pool, prev ); 50 17274043 : cnt_removed++; 51 17274043 : } 52 17568458 : prev = e; 53 17568458 : } 54 294484 : if( FD_LIKELY( prev ) ) { 55 294415 : fd_quic_pkt_meta_treap_ele_remove( ds, prev, pool ); 56 294415 : fd_quic_pkt_meta_pool_ele_release( pool, prev ); 57 294415 : cnt_removed++; 58 294415 : } 59 294484 : return cnt_removed; 60 294484 : } 61 : 62 : void 63 : fd_quic_pkt_meta_remove( fd_quic_pkt_meta_ds_t * ds, 64 : fd_quic_pkt_meta_t * pool, 65 15 : fd_quic_pkt_meta_t * pkt_meta ) { 66 15 : fd_quic_pkt_meta_treap_ele_remove( ds, pkt_meta, pool ); 67 15 : fd_quic_pkt_meta_pool_ele_release( pool, pkt_meta ); 68 15 : } 69 : 70 : fd_quic_pkt_meta_t * 71 : fd_quic_pkt_meta_min( fd_quic_pkt_meta_ds_t * ds, 72 71675429 : fd_quic_pkt_meta_t * pool ) { 73 : 74 71675429 : fd_quic_pkt_meta_ds_fwd_iter_t iter = fd_quic_pkt_meta_ds_fwd_iter_init( ds, pool ); 75 71675429 : if( FD_UNLIKELY( fd_quic_pkt_meta_ds_fwd_iter_done( iter ) ) ) return NULL; 76 17262764 : return fd_quic_pkt_meta_ds_fwd_iter_ele( iter, pool ); 77 71675429 : } 78 : 79 : void 80 : fd_quic_pkt_meta_ds_clear( fd_quic_pkt_meta_tracker_t * tracker, 81 105804 : uint enc_level ) { 82 105804 : ulong ele_max = fd_quic_pkt_meta_treap_ele_max( &tracker->sent_pkt_metas[enc_level] ); 83 105804 : fd_quic_pkt_meta_treap_new( &tracker->sent_pkt_metas[enc_level], ele_max ); 84 105804 : }