2023-04-05 00:03:56 -07:00
|
|
|
#include "gen.h"
|
|
|
|
|
|
|
|
#define Table( Type_ ) Table_##Type_
|
|
|
|
|
|
|
|
typedef u64(*)(void*) HashingFn;
|
|
|
|
|
|
|
|
#if gen_time
|
2023-04-09 11:51:37 -07:00
|
|
|
# define gen_table( Type_, HashingFn_ ) gen_request_table( #Type_, sizeof(Type_), HashingFn_ )
|
2023-04-05 00:03:56 -07:00
|
|
|
|
|
|
|
u64 table_default_hash_fn( void* address )
|
|
|
|
{
|
|
|
|
return crc32( address, 4 );
|
|
|
|
}
|
|
|
|
|
|
|
|
Code gen_table_code( char const* type_str, sw type_size, HashingFn hash_fn )
|
|
|
|
{
|
|
|
|
Code table;
|
|
|
|
|
|
|
|
return table;
|
|
|
|
}
|
|
|
|
|
|
|
|
struct TableRequest
|
|
|
|
{
|
|
|
|
char const* Type;
|
|
|
|
sw Size;
|
|
|
|
HashingFn HashFn;
|
|
|
|
};
|
|
|
|
|
|
|
|
array(TableRequest) TableRequests;
|
|
|
|
|
|
|
|
void gen_request_table( const char* type_str, sw type_size, HashingFn hash_fn )
|
|
|
|
{
|
|
|
|
TableRequest request = { type_str, type_size, hash_fn };
|
|
|
|
|
|
|
|
array_append( TableRequests, request );
|
|
|
|
}
|
|
|
|
|
|
|
|
u32 gen_table_file()
|
|
|
|
{
|
|
|
|
gen_table( u32 );
|
|
|
|
gen_table( char const* );
|
|
|
|
|
|
|
|
array(Code) array_asts;
|
|
|
|
array_init( array_asts, g_allocator );
|
|
|
|
|
|
|
|
sw left = array_count( TableRequests );
|
|
|
|
sw index = 0;
|
|
|
|
while( left -- )
|
|
|
|
{
|
|
|
|
ArrayRequest request = TableRequests[index];
|
|
|
|
|
|
|
|
Code result = gen_table_code( request.Name, request.Size, request.HashFn );
|
|
|
|
|
|
|
|
array_append( array_asts, result );
|
|
|
|
}
|
|
|
|
|
|
|
|
Builder
|
|
|
|
arraygen;
|
|
|
|
arraygen.open( "table.gen.h" );
|
|
|
|
|
|
|
|
left = array_count( array_asts );
|
|
|
|
index = 0;
|
|
|
|
|
|
|
|
while( left-- )
|
|
|
|
{
|
|
|
|
Code code = array_asts[index];
|
|
|
|
|
|
|
|
arraygen.print( code );
|
|
|
|
}
|
|
|
|
|
|
|
|
arraygen.write();
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef gen_time
|
|
|
|
# include "table.gen.h"
|
|
|
|
#endif
|
|
|
|
|