Line data Source code
1 : #include "fd_types_reflect_private.h" 2 : 3 : fd_types_vt_t fd_types_map[ 1<<FD_TYPES_MAP_LG_SLOT_CNT ]; 4 : 5 : fd_types_vt_t const * 6 : fd_types_vt_by_name( char const * name, 7 0 : ulong name_len ) { 8 0 : FD_ONCE_BEGIN { 9 0 : fd_types_vt_t * map = fd_types_map_join( fd_types_map_new( fd_types_map ) ); 10 0 : for( fd_types_vt_t const * v = fd_types_vt_list; v->name; v++ ) { 11 0 : fd_types_vt_t * entry = fd_types_map_insert( map, v->key ); 12 0 : if( FD_UNLIKELY( !entry ) ) FD_LOG_ERR(( "FD_TYPES_MAP_LG_SLOT_CNT is too small" )); 13 0 : *entry = *v; 14 0 : } 15 0 : } 16 0 : FD_ONCE_END; 17 : 18 0 : if( FD_UNLIKELY( !name_len || name_len>USHORT_MAX ) ) return NULL; 19 0 : fd_types_vt_key_t key = { .name=name, .name_len=(ushort)name_len }; 20 0 : return fd_types_map_query( fd_types_map, key, NULL ); 21 0 : } 22 :