Line data Source code
1 : #ifndef HEADER_fd_src_flamenco_accdb_fd_accdb_user_h 2 : #define HEADER_fd_src_flamenco_accdb_fd_accdb_user_h 3 : 4 : #include "fd_accdb_base.h" 5 : #include "fd_accdb_ref.h" 6 : 7 : /* FD_ACCDB_DEPTH_MAX specifies the max non-rooted fork depth. */ 8 : 9 17844 : #define FD_ACCDB_DEPTH_MAX (128UL) 10 : 11 1188 : #define FD_ACCDB_FLAG_CREATE (1) 12 603 : #define FD_ACCDB_FLAG_TRUNCATE (2) 13 : 14 : /* fd_accdb_user_vt_t specifies the interface (vtable) for the account 15 : DB client. */ 16 : 17 : struct fd_accdb_user_vt { 18 : 19 : void 20 : (* fini)( fd_accdb_user_t * accdb ); 21 : 22 : fd_accdb_peek_t * 23 : (* peek)( fd_accdb_user_t * accdb, 24 : fd_accdb_peek_t * peek, 25 : fd_funk_txn_xid_t const * xid, 26 : void const * address ); 27 : 28 : fd_accdb_ro_t * 29 : (* open_ro)( fd_accdb_user_t * accdb, 30 : fd_accdb_ro_t * ro, 31 : fd_funk_txn_xid_t const * xid, 32 : void const * address ); 33 : 34 : void 35 : (* close_ro)( fd_accdb_user_t * accdb, 36 : fd_accdb_ro_t * ro ); 37 : 38 : fd_accdb_rw_t * 39 : (* open_rw)( fd_accdb_user_t * accdb, 40 : fd_accdb_rw_t * rw, 41 : fd_funk_txn_xid_t const * xid, 42 : void const * address, 43 : ulong data_max, 44 : int flags ); 45 : 46 : void 47 : (* close_rw)( fd_accdb_user_t * accdb, 48 : fd_accdb_rw_t * write ); 49 : 50 : }; 51 : 52 : typedef struct fd_accdb_user_vt fd_accdb_user_vt_t; 53 : 54 : struct fd_accdb_user_base { 55 : fd_accdb_user_vt_t const * vt; 56 : uint accdb_type; 57 : 58 : ulong rw_active; 59 : ulong ro_active; 60 : ulong created_cnt; 61 : }; 62 : 63 : typedef struct fd_accdb_user_base fd_accdb_user_base_t; 64 : 65 : struct fd_accdb_user { 66 : fd_accdb_user_base_t base; 67 : 68 : uchar impl[ 4096 ] __attribute__((aligned(64))); 69 : }; 70 : 71 : FD_PROTOTYPES_BEGIN 72 : 73 : static inline ulong 74 0 : fd_accdb_user_align( void ) { 75 0 : return alignof(fd_accdb_user_t); 76 0 : } 77 : 78 : static inline ulong 79 0 : fd_accdb_user_footprint( void ) { 80 0 : return sizeof(fd_accdb_user_t); 81 0 : } 82 : 83 : static inline void 84 8889 : fd_accdb_user_fini( fd_accdb_user_t * accdb ) { 85 8889 : accdb->base.vt->fini( accdb ); 86 8889 : accdb->base.accdb_type = 0; 87 8889 : } 88 : 89 : FD_PROTOTYPES_END 90 : 91 : #endif /* HEADER_fd_src_flamenco_accdb_fd_accdb_user_h */