mirror of
https://github.com/Ed94/gencpp.git
synced 2024-12-22 15:54:45 -08:00
Finished refactoring tests, compiles, but does not generate
This commit is contained in:
parent
8f4a94545c
commit
947b4e3615
@ -3323,7 +3323,7 @@ namespace gen
|
|||||||
|
|
||||||
CodeEnum def_enum( StrC name
|
CodeEnum def_enum( StrC name
|
||||||
, Code body, CodeType type
|
, Code body, CodeType type
|
||||||
, EnumT specifier, Code attributes
|
, EnumT specifier, CodeAttributes attributes
|
||||||
, ModuleFlag mflags )
|
, ModuleFlag mflags )
|
||||||
{
|
{
|
||||||
using namespace ECode;
|
using namespace ECode;
|
||||||
|
@ -2701,31 +2701,6 @@ namespace gen
|
|||||||
|
|
||||||
AST* ast;
|
AST* ast;
|
||||||
|
|
||||||
// operator AST_Body*();
|
|
||||||
// operator AST_Attributes*();
|
|
||||||
// operator AST_Comment*();
|
|
||||||
// operator AST_Class*();
|
|
||||||
// operator AST_Enum*();
|
|
||||||
// operator AST_Exec*();
|
|
||||||
// operator AST_Extern*();
|
|
||||||
// operator AST_Include*();
|
|
||||||
// operator AST_Friend*();
|
|
||||||
// operator AST_Fn*();
|
|
||||||
// operator AST_Module*();
|
|
||||||
// operator AST_Namespace*();
|
|
||||||
// operator AST_Operator*();
|
|
||||||
// operator AST_OpCast*();
|
|
||||||
// operator AST_Param*();
|
|
||||||
// operator AST_Specifier*();
|
|
||||||
// operator AST_Struct*();
|
|
||||||
// operator AST_Template*();
|
|
||||||
// operator AST_Type*();
|
|
||||||
// operator AST_Typedef*();
|
|
||||||
// operator AST_Union*();
|
|
||||||
// operator AST_Using*();
|
|
||||||
// operator AST_UsingNamespace*();
|
|
||||||
// operator AST_Var*();
|
|
||||||
|
|
||||||
#ifdef GEN_ENFORCE_STRONG_CODE_TYPES
|
#ifdef GEN_ENFORCE_STRONG_CODE_TYPES
|
||||||
# define operator explicit operator
|
# define operator explicit operator
|
||||||
#endif
|
#endif
|
||||||
@ -2785,7 +2760,7 @@ namespace gen
|
|||||||
template< class Type >
|
template< class Type >
|
||||||
Type cast()
|
Type cast()
|
||||||
{
|
{
|
||||||
return (Type) { this };
|
return (Type)(Code){ this };
|
||||||
}
|
}
|
||||||
|
|
||||||
operator Code();
|
operator Code();
|
||||||
@ -2827,51 +2802,6 @@ namespace gen
|
|||||||
)
|
)
|
||||||
/ sizeof(SpecifierT);
|
/ sizeof(SpecifierT);
|
||||||
|
|
||||||
#if 0
|
|
||||||
union {
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
Code Attributes; // Class, Enum, Function, Struct, Typedef, Union, Using, Variable
|
|
||||||
Code Specs; // Function, Operator, Type symbol, Variable
|
|
||||||
union {
|
|
||||||
Code ParentType; // Class, Struct
|
|
||||||
Code ReturnType; // Function, Operator
|
|
||||||
Code UnderlyingType; // Enum, Typedef
|
|
||||||
Code ValueType; // Parameter, Variable
|
|
||||||
};
|
|
||||||
Code Params; // Function, Operator, Template
|
|
||||||
union {
|
|
||||||
Code ArrExpr; // Type Symbol
|
|
||||||
Code Body; // Class, Enum, Function, Namespace, Struct, Union
|
|
||||||
Code Declaration; // Friend, Template
|
|
||||||
Code Value; // Parameter, Variable
|
|
||||||
};
|
|
||||||
};
|
|
||||||
StringCached Content; // Attributes, Comment, Execution, Include
|
|
||||||
SpecifierT ArrSpecs[AST::ArrSpecs_Cap]; // Specifiers
|
|
||||||
};
|
|
||||||
union {
|
|
||||||
// Entry Node
|
|
||||||
struct {
|
|
||||||
Code Prev;
|
|
||||||
Code Next;
|
|
||||||
};
|
|
||||||
// Body Node
|
|
||||||
struct {
|
|
||||||
Code Front;
|
|
||||||
Code Back;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
Code Parent;
|
|
||||||
StringCached Name;
|
|
||||||
CodeT Type;
|
|
||||||
ModuleFlag ModuleFlags;
|
|
||||||
union {
|
|
||||||
OperatorT Op;
|
|
||||||
AccessSpec ParentAccess;
|
|
||||||
u32 NumEntries;
|
|
||||||
};
|
|
||||||
#else
|
|
||||||
union {
|
union {
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
@ -2915,7 +2845,6 @@ namespace gen
|
|||||||
AccessSpec ParentAccess;
|
AccessSpec ParentAccess;
|
||||||
u32 NumEntries;
|
u32 NumEntries;
|
||||||
};
|
};
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
|
|
||||||
void assign( AST* field, AST* other )
|
void assign( AST* field, AST* other )
|
||||||
@ -3717,7 +3646,7 @@ namespace gen
|
|||||||
, CodeAttributes attributes = NoCode
|
, CodeAttributes attributes = NoCode
|
||||||
, ModuleFlag mflags = ModuleFlag::None );
|
, ModuleFlag mflags = ModuleFlag::None );
|
||||||
|
|
||||||
CodeEnum def_enum( StrC
|
CodeEnum def_enum( StrC name
|
||||||
, Code body = NoCode, CodeType type = NoCode
|
, Code body = NoCode, CodeType type = NoCode
|
||||||
, EnumT specifier = EnumRegular, CodeAttributes attributes = NoCode
|
, EnumT specifier = EnumRegular, CodeAttributes attributes = NoCode
|
||||||
, ModuleFlag mflags = ModuleFlag::None );
|
, ModuleFlag mflags = ModuleFlag::None );
|
||||||
@ -3740,9 +3669,9 @@ namespace gen
|
|||||||
, CodeSpecifier specifiers = NoCode, CodeAttributes attributes = NoCode
|
, CodeSpecifier specifiers = NoCode, CodeAttributes attributes = NoCode
|
||||||
, ModuleFlag mflags = ModuleFlag::None );
|
, ModuleFlag mflags = ModuleFlag::None );
|
||||||
|
|
||||||
CodeOpCast def_operator_cast( Code type, Code body = NoCode );
|
CodeOpCast def_operator_cast( CodeType type, Code body = NoCode );
|
||||||
|
|
||||||
CodeParam def_param ( Code type, StrC name, Code value = NoCode );
|
CodeParam def_param ( CodeType type, StrC name, Code value = NoCode );
|
||||||
CodeSpecifier def_specifier( SpecifierT specifier );
|
CodeSpecifier def_specifier( SpecifierT specifier );
|
||||||
|
|
||||||
CodeStruct def_struct( StrC name
|
CodeStruct def_struct( StrC name
|
||||||
@ -4101,17 +4030,17 @@ namespace gen
|
|||||||
|
|
||||||
Code& AST::entry( u32 idx )
|
Code& AST::entry( u32 idx )
|
||||||
{
|
{
|
||||||
AST* current = Front;
|
AST** current = & Front;
|
||||||
while ( idx >= 0 && current != nullptr )
|
while ( idx >= 0 && current != nullptr )
|
||||||
{
|
{
|
||||||
if ( idx == 0 )
|
if ( idx == 0 )
|
||||||
return * rcast( Code*, & current);
|
return * rcast( Code*, current);
|
||||||
|
|
||||||
current = current->Next;
|
current = & ( * current )->Next;
|
||||||
idx--;
|
idx--;
|
||||||
}
|
}
|
||||||
|
|
||||||
return * rcast( Code*, & current);
|
return * rcast( Code*, current);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AST::has_entries()
|
bool AST::has_entries()
|
||||||
@ -4207,18 +4136,6 @@ namespace gen
|
|||||||
return (AST*) ast != other.ast; \
|
return (AST*) ast != other.ast; \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Typename::operator AST*() \
|
|
||||||
// { \
|
|
||||||
// return (AST*) ast; \
|
|
||||||
// }
|
|
||||||
|
|
||||||
// Typename& Typename::operator =( AST* other ) \
|
|
||||||
// { \
|
|
||||||
// ast = rcast( decltype(ast), other); \
|
|
||||||
// return * this; \
|
|
||||||
// } \
|
|
||||||
|
|
||||||
Define_CodeImpl( Code );
|
Define_CodeImpl( Code );
|
||||||
Define_CodeImpl( CodeBody);
|
Define_CodeImpl( CodeBody);
|
||||||
Define_CodeImpl( CodeAttributes );
|
Define_CodeImpl( CodeAttributes );
|
||||||
|
@ -30,7 +30,7 @@ Code gen_SOA( CodeStruct struct_def, s32 num_entries = 0 )
|
|||||||
{
|
{
|
||||||
if ( struct_mem->Type == ECode::Variable )
|
if ( struct_mem->Type == ECode::Variable )
|
||||||
{
|
{
|
||||||
CodeType var_type = struct_mem->cast<CodeVar>()->ValueType;
|
CodeType var_type = struct_mem.cast<CodeVar>()->ValueType;
|
||||||
StrC num_entries_str = to_StrC( str_fmt_buf( "%d", num_entries ) );
|
StrC num_entries_str = to_StrC( str_fmt_buf( "%d", num_entries ) );
|
||||||
|
|
||||||
CodeVar entry_arr = { nullptr };
|
CodeVar entry_arr = { nullptr };
|
||||||
|
@ -71,9 +71,9 @@ Code gen__buffer( StrC type, sw type_size )
|
|||||||
init = def_function( name(init), params, t_buffer_type, body, spec_static_member );
|
init = def_function( name(init), params, t_buffer_type, body, spec_static_member );
|
||||||
}
|
}
|
||||||
|
|
||||||
Code init_copy;
|
CodeFn init_copy;
|
||||||
{
|
{
|
||||||
Code params = def_params( args(
|
CodeParam params = def_params( args(
|
||||||
def_param( t_allocator_info, name(allocator))
|
def_param( t_allocator_info, name(allocator))
|
||||||
, def_param( t_buffer_type, name(other))
|
, def_param( t_buffer_type, name(other))
|
||||||
));
|
));
|
||||||
@ -96,7 +96,7 @@ Code gen__buffer( StrC type, sw type_size )
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Code append = def_function( name(append), def_param( t_type, name(value)), t_void
|
CodeFn append = def_function( name(append), def_param( t_type, name(value)), t_void
|
||||||
, def_execution( code(
|
, def_execution( code(
|
||||||
Header& header = get_header();
|
Header& header = get_header();
|
||||||
Data[ header.Num ] = value;
|
Data[ header.Num ] = value;
|
||||||
@ -104,9 +104,9 @@ Code gen__buffer( StrC type, sw type_size )
|
|||||||
))
|
))
|
||||||
);
|
);
|
||||||
|
|
||||||
Code appendv;
|
CodeFn appendv;
|
||||||
{
|
{
|
||||||
Code params = def_params( args(
|
CodeParam params = def_params( args(
|
||||||
def_param( t_type_ptr, name( values))
|
def_param( t_type_ptr, name( values))
|
||||||
, def_param( t_sw, name( num))
|
, def_param( t_sw, name( num))
|
||||||
));
|
));
|
||||||
@ -124,40 +124,40 @@ Code gen__buffer( StrC type, sw type_size )
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Code clear = def_function( name(clear), __, t_void
|
CodeFn clear = def_function( name(clear), __, t_void
|
||||||
, def_execution( code(
|
, def_execution( code(
|
||||||
Header& header = get_header();
|
Header& header = get_header();
|
||||||
header.Num = 0;
|
header.Num = 0;
|
||||||
))
|
))
|
||||||
);
|
);
|
||||||
|
|
||||||
Code end = def_function( name(end), __, t_type_ref
|
CodeFn end = def_function( name(end), __, t_type_ref
|
||||||
, def_execution( code(
|
, def_execution( code(
|
||||||
Header& header = get_header();
|
Header& header = get_header();
|
||||||
return Data[ header.Num - 1 ];
|
return Data[ header.Num - 1 ];
|
||||||
))
|
))
|
||||||
);
|
);
|
||||||
|
|
||||||
Code free = def_function( name(free), __, t_void
|
CodeFn free = def_function( name(free), __, t_void
|
||||||
, def_execution( code(
|
, def_execution( code(
|
||||||
Header& header = get_header();
|
Header& header = get_header();
|
||||||
zpl::free( header.Backing, & header );
|
zpl::free( header.Backing, & header );
|
||||||
))
|
))
|
||||||
);
|
);
|
||||||
|
|
||||||
Code get_header = def_function( name(get_header), __, t_header_ref
|
CodeFn get_header = def_function( name(get_header), __, t_header_ref
|
||||||
, def_execution( code(
|
, def_execution( code(
|
||||||
return * ( rcast( Header*, Data ) - 1 );
|
return * ( rcast( Header*, Data ) - 1 );
|
||||||
))
|
))
|
||||||
);
|
);
|
||||||
|
|
||||||
Code num = def_function( name(num), __, t_sw
|
CodeFn num = def_function( name(num), __, t_sw
|
||||||
, def_execution( code(
|
, def_execution( code(
|
||||||
return get_header().Num;
|
return get_header().Num;
|
||||||
))
|
))
|
||||||
);
|
);
|
||||||
|
|
||||||
Code pop = def_function( name(pop), __, t_type
|
CodeFn pop = def_function( name(pop), __, t_type
|
||||||
, def_execution( code(
|
, def_execution( code(
|
||||||
Header& header = get_header();
|
Header& header = get_header();
|
||||||
header.Num--;
|
header.Num--;
|
||||||
@ -165,7 +165,7 @@ Code gen__buffer( StrC type, sw type_size )
|
|||||||
))
|
))
|
||||||
);
|
);
|
||||||
|
|
||||||
Code wipe = def_function( name(wipe), __, t_void
|
CodeFn wipe = def_function( name(wipe), __, t_void
|
||||||
, def_execution( code(
|
, def_execution( code(
|
||||||
Header& header = get_header();
|
Header& header = get_header();
|
||||||
header.Num = 0;
|
header.Num = 0;
|
||||||
@ -173,7 +173,7 @@ Code gen__buffer( StrC type, sw type_size )
|
|||||||
))
|
))
|
||||||
);
|
);
|
||||||
|
|
||||||
Code op_type_ptr = def_operator_cast( t_type_ptr, def_execution( code(
|
CodeOpCast op_type_ptr = def_operator_cast( t_type_ptr, def_execution( code(
|
||||||
return Data;
|
return Data;
|
||||||
)));
|
)));
|
||||||
|
|
||||||
|
@ -8,11 +8,11 @@ using namespace gen;
|
|||||||
|
|
||||||
Code gen__hashtable_base()
|
Code gen__hashtable_base()
|
||||||
{
|
{
|
||||||
Code hashIndex = def_variable( t_sw, name(HashIndex) );
|
CodeVar hashIndex = def_variable( t_sw, name(HashIndex) );
|
||||||
Code entry_prev = def_variable( t_sw, name(PrevIndex) );
|
CodeVar entry_prev = def_variable( t_sw, name(PrevIndex) );
|
||||||
Code entry_index = def_variable( t_sw, name(EntryIndex) );
|
CodeVar entry_index = def_variable( t_sw, name(EntryIndex) );
|
||||||
|
|
||||||
Code find_result = def_struct( name(HashTable_FindResult), def_struct_body( 3
|
CodeStruct find_result = def_struct( name(HashTable_FindResult), def_struct_body( 3
|
||||||
, hashIndex
|
, hashIndex
|
||||||
, entry_prev
|
, entry_prev
|
||||||
, entry_index
|
, entry_index
|
||||||
@ -23,9 +23,9 @@ Code gen__hashtable_base()
|
|||||||
|
|
||||||
Code gen__hashtable( StrC type )
|
Code gen__hashtable( StrC type )
|
||||||
{
|
{
|
||||||
static Code t_allocator_info = def_type( name(AllocatorInfo) );
|
static CodeType t_allocator_info = def_type( name(AllocatorInfo) );
|
||||||
|
|
||||||
Code t_find_result = def_type( name(HashTable_FindResult) );
|
CodeType t_find_result = def_type( name(HashTable_FindResult) );
|
||||||
|
|
||||||
StringCached name;
|
StringCached name;
|
||||||
{
|
{
|
||||||
@ -35,14 +35,15 @@ Code gen__hashtable( StrC type )
|
|||||||
name = get_cached_string({ len, name_str });
|
name = get_cached_string({ len, name_str });
|
||||||
}
|
}
|
||||||
|
|
||||||
Code t_ht_type = def_type( name );
|
CodeType t_ht_type = def_type( name );
|
||||||
|
|
||||||
Code t_type = def_type( type );
|
CodeType t_type = def_type( type );
|
||||||
Code t_type_ptr = def_type( type, __, spec_ptr );
|
CodeType t_type_ptr = def_type( type, __, spec_ptr );
|
||||||
Code t_type_ref = def_type( type, __, spec_ref );
|
CodeType t_type_ref = def_type( type, __, spec_ref );
|
||||||
|
|
||||||
// Hash table depends on array container for its entry structure.
|
// Hash table depends on array container for its entry structure.
|
||||||
Code t_ht_entry, ht_entry, array_ht_entry, t_array_ht_entry;
|
CodeType t_ht_entry, t_array_ht_entry;
|
||||||
|
CodeStruct ht_entry, array_ht_entry;
|
||||||
{
|
{
|
||||||
char const* name_str = str_fmt_buf( "HashTable_%s_Entry", type.Ptr );
|
char const* name_str = str_fmt_buf( "HashTable_%s_Entry", type.Ptr );
|
||||||
s32 len = str_len( name_str );
|
s32 len = str_len( name_str );
|
||||||
@ -60,19 +61,19 @@ Code gen__hashtable( StrC type )
|
|||||||
t_array_ht_entry = def_type( array_ht_entry->Name );
|
t_array_ht_entry = def_type( array_ht_entry->Name );
|
||||||
}
|
}
|
||||||
|
|
||||||
Code hashtable = {0};
|
CodeStruct hashtable = {0};
|
||||||
{
|
{
|
||||||
Code using_entry = def_using( name(Entry), t_ht_entry );
|
CodeUsing using_entry = def_using( name(Entry), t_ht_entry );
|
||||||
Code using_array_entry = def_using( name(Array_Entry), t_array_ht_entry );
|
CodeUsing using_array_entry = def_using( name(Array_Entry), t_array_ht_entry );
|
||||||
Code using_find_result = def_using( name(FindResult), t_find_result );
|
CodeUsing using_find_result = def_using( name(FindResult), t_find_result );
|
||||||
|
|
||||||
Code t_array_sw = def_type( name(Array_sw) );
|
CodeType t_array_sw = def_type( name(Array_sw) );
|
||||||
Code t_array_entry = def_type( name(Array_Entry) );
|
CodeType t_array_entry = def_type( name(Array_Entry) );
|
||||||
|
|
||||||
Code hashes = def_variable( t_array_sw, name(Hashes) );
|
CodeVar hashes = def_variable( t_array_sw, name(Hashes) );
|
||||||
Code entries = def_variable( t_array_entry, name(Entries));
|
CodeVar entries = def_variable( t_array_entry, name(Entries));
|
||||||
|
|
||||||
Code init;
|
CodeFn init;
|
||||||
{
|
{
|
||||||
char const* tmpl = stringize(
|
char const* tmpl = stringize(
|
||||||
<type> result = { 0 };
|
<type> result = { 0 };
|
||||||
@ -88,7 +89,7 @@ Code gen__hashtable( StrC type )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Code init_reserve;
|
CodeFn init_reserve;
|
||||||
{
|
{
|
||||||
char const* tmpl = stringize(
|
char const* tmpl = stringize(
|
||||||
<type> result = { { nullptr }, { nullptr } };
|
<type> result = { { nullptr }, { nullptr } };
|
||||||
@ -102,12 +103,12 @@ Code gen__hashtable( StrC type )
|
|||||||
);
|
);
|
||||||
Code body = def_execution( token_fmt( "type", (StrC)name, tmpl ) );
|
Code body = def_execution( token_fmt( "type", (StrC)name, tmpl ) );
|
||||||
|
|
||||||
Code params = def_params( args( def_param( t_allocator_info, name(allocator)), def_param( t_sw, name(num))));
|
CodeParam params = def_params( args( def_param( t_allocator_info, name(allocator)), def_param( t_sw, name(num))));
|
||||||
|
|
||||||
init_reserve = def_function( name(init_reserve), params, t_ht_type, body, spec_static_member );
|
init_reserve = def_function( name(init_reserve), params, t_ht_type, body, spec_static_member );
|
||||||
}
|
}
|
||||||
|
|
||||||
Code clear = def_function( name(clear), __, t_void
|
CodeFn clear = def_function( name(clear), __, t_void
|
||||||
, def_execution( code(
|
, def_execution( code(
|
||||||
for ( s32 idx = 0; idx < Hashes.num(); idx++ )
|
for ( s32 idx = 0; idx < Hashes.num(); idx++ )
|
||||||
Hashes[ idx ] = -1;
|
Hashes[ idx ] = -1;
|
||||||
@ -116,7 +117,7 @@ Code gen__hashtable( StrC type )
|
|||||||
))
|
))
|
||||||
);
|
);
|
||||||
|
|
||||||
Code destroy = def_function( name(destroy), __, t_void
|
CodeFn destroy = def_function( name(destroy), __, t_void
|
||||||
, def_execution( code(
|
, def_execution( code(
|
||||||
if ( Hashes && Hashes.get_header()->Capacity )
|
if ( Hashes && Hashes.get_header()->Capacity )
|
||||||
Hashes.free();
|
Hashes.free();
|
||||||
@ -125,7 +126,7 @@ Code gen__hashtable( StrC type )
|
|||||||
))
|
))
|
||||||
);
|
);
|
||||||
|
|
||||||
Code get = def_function( name(get), def_param( t_u64, name(key)), t_type_ptr
|
CodeFn get = def_function( name(get), def_param( t_u64, name(key)), t_type_ptr
|
||||||
, def_execution( code(
|
, def_execution( code(
|
||||||
sw idx = find( key ).EntryIndex;
|
sw idx = find( key ).EntryIndex;
|
||||||
if ( idx >= 0 )
|
if ( idx >= 0 )
|
||||||
@ -135,19 +136,19 @@ Code gen__hashtable( StrC type )
|
|||||||
))
|
))
|
||||||
);
|
);
|
||||||
|
|
||||||
Code using_map_proc;
|
CodeUsing using_map_proc;
|
||||||
{
|
{
|
||||||
char const* tmpl = stringize(
|
char const* tmpl = stringize(
|
||||||
void (*) ( u64 key, <type> value )
|
void (*) ( u64 key, <type> value )
|
||||||
);
|
);
|
||||||
Code value = untyped_str( token_fmt( "type", (StrC)t_type->to_string(), tmpl ) );
|
CodeType value = def_type( token_fmt( "type", (StrC)t_type.to_string(), tmpl ) );
|
||||||
|
|
||||||
using_map_proc = def_using ( name(MapProc), value);
|
using_map_proc = def_using ( name(MapProc), value);
|
||||||
}
|
}
|
||||||
|
|
||||||
Code map;
|
CodeFn map;
|
||||||
{
|
{
|
||||||
Code t_map_proc = def_type( name(MapProc) );
|
CodeType t_map_proc = def_type( name(MapProc) );
|
||||||
|
|
||||||
Code body = def_execution( code(
|
Code body = def_execution( code(
|
||||||
ZPL_ASSERT_NOT_NULL( map_proc );
|
ZPL_ASSERT_NOT_NULL( map_proc );
|
||||||
@ -161,19 +162,19 @@ Code gen__hashtable( StrC type )
|
|||||||
map = def_function( name(map), def_param( t_map_proc, name(map_proc) ), t_void, body );
|
map = def_function( name(map), def_param( t_map_proc, name(map_proc) ), t_void, body );
|
||||||
}
|
}
|
||||||
|
|
||||||
Code using_map_mut_proc;
|
CodeUsing using_map_mut_proc;
|
||||||
{
|
{
|
||||||
char const* tmpl = stringize(
|
char const* tmpl = stringize(
|
||||||
void (*) ( u64 key, <type> value )
|
void (*) ( u64 key, <type> value )
|
||||||
);
|
);
|
||||||
Code value = untyped_str( token_fmt( "type", (StrC)t_type_ptr->to_string(), tmpl ) );
|
CodeType value = def_type( token_fmt( "type", (StrC)t_type_ptr.to_string(), tmpl ) );
|
||||||
|
|
||||||
using_map_mut_proc = def_using ( name(MapMutProc), value);
|
using_map_mut_proc = def_using ( name(MapMutProc), value);
|
||||||
}
|
}
|
||||||
|
|
||||||
Code map_mut;
|
CodeFn map_mut;
|
||||||
{
|
{
|
||||||
Code t_map_mut_proc = def_type( name(MapMutProc));
|
CodeType t_map_mut_proc = def_type( name(MapMutProc));
|
||||||
|
|
||||||
Code body = def_execution( code(
|
Code body = def_execution( code(
|
||||||
ZPL_ASSERT_NOT_NULL( map_proc );
|
ZPL_ASSERT_NOT_NULL( map_proc );
|
||||||
@ -187,14 +188,14 @@ Code gen__hashtable( StrC type )
|
|||||||
map_mut = def_function( name(map_mut), def_param( t_map_mut_proc, name(map_proc)), t_void, body );
|
map_mut = def_function( name(map_mut), def_param( t_map_mut_proc, name(map_proc)), t_void, body );
|
||||||
}
|
}
|
||||||
|
|
||||||
Code grow = def_function( name(grow), __, t_void
|
CodeFn grow = def_function( name(grow), __, t_void
|
||||||
, def_execution( code(
|
, def_execution( code(
|
||||||
sw new_num = array_grow_formula( Entries.num() );
|
sw new_num = array_grow_formula( Entries.num() );
|
||||||
rehash( new_num );
|
rehash( new_num );
|
||||||
))
|
))
|
||||||
);
|
);
|
||||||
|
|
||||||
Code rehash;
|
CodeFn rehash;
|
||||||
{
|
{
|
||||||
char const* tmpl = stringize(
|
char const* tmpl = stringize(
|
||||||
sw idx;
|
sw idx;
|
||||||
@ -238,7 +239,7 @@ Code gen__hashtable( StrC type )
|
|||||||
rehash = def_function( name(rehash), def_param( t_sw, name(new_num)), t_void, body );
|
rehash = def_function( name(rehash), def_param( t_sw, name(new_num)), t_void, body );
|
||||||
}
|
}
|
||||||
|
|
||||||
Code rehash_fast;
|
CodeFn rehash_fast;
|
||||||
{
|
{
|
||||||
char const* tmpl = stringize(
|
char const* tmpl = stringize(
|
||||||
sw idx;
|
sw idx;
|
||||||
@ -261,7 +262,7 @@ Code gen__hashtable( StrC type )
|
|||||||
rehash_fast = def_function( name(rehash_fast), __, t_void, body );
|
rehash_fast = def_function( name(rehash_fast), __, t_void, body );
|
||||||
}
|
}
|
||||||
|
|
||||||
Code remove = def_function( name(remove), def_param( t_u64, name(key)), t_void
|
CodeFn remove = def_function( name(remove), def_param( t_u64, name(key)), t_void
|
||||||
, def_execution( code(
|
, def_execution( code(
|
||||||
FindResult find_result = find( key);
|
FindResult find_result = find( key);
|
||||||
|
|
||||||
@ -273,15 +274,15 @@ Code gen__hashtable( StrC type )
|
|||||||
))
|
))
|
||||||
);
|
);
|
||||||
|
|
||||||
Code remove_entry = def_function( name(remove_entry), def_param( t_sw, name(idx)), t_void
|
CodeFn remove_entry = def_function( name(remove_entry), def_param( t_sw, name(idx)), t_void
|
||||||
, def_execution( code(
|
, def_execution( code(
|
||||||
Entries.remove_at( idx );
|
Entries.remove_at( idx );
|
||||||
))
|
))
|
||||||
);
|
);
|
||||||
|
|
||||||
Code set;
|
CodeFn set;
|
||||||
{
|
{
|
||||||
Code params = def_params( args(
|
CodeParam params = def_params( args(
|
||||||
def_param( t_u64, name(key))
|
def_param( t_u64, name(key))
|
||||||
, def_param( t_type, name(value))
|
, def_param( t_type, name(value))
|
||||||
));
|
));
|
||||||
@ -322,7 +323,7 @@ Code gen__hashtable( StrC type )
|
|||||||
set = def_function( name(set), params, t_void, body );
|
set = def_function( name(set), params, t_void, body );
|
||||||
}
|
}
|
||||||
|
|
||||||
Code slot = def_function( name(slot), def_param( t_u64, name(key)), t_sw
|
CodeFn slot = def_function( name(slot), def_param( t_u64, name(key)), t_sw
|
||||||
, def_execution( code(
|
, def_execution( code(
|
||||||
for ( sw idx = 0; idx < Hashes.num(); ++idx )
|
for ( sw idx = 0; idx < Hashes.num(); ++idx )
|
||||||
if ( Hashes[ idx ] == key )
|
if ( Hashes[ idx ] == key )
|
||||||
@ -332,7 +333,7 @@ Code gen__hashtable( StrC type )
|
|||||||
))
|
))
|
||||||
);
|
);
|
||||||
|
|
||||||
Code add_entry = def_function( name(add_entry), def_param( t_u64, name(key)), t_sw
|
CodeFn add_entry = def_function( name(add_entry), def_param( t_u64, name(key)), t_sw
|
||||||
, def_execution( code(
|
, def_execution( code(
|
||||||
sw idx;
|
sw idx;
|
||||||
Entry entry = { key, -1 };
|
Entry entry = { key, -1 };
|
||||||
@ -343,7 +344,7 @@ Code gen__hashtable( StrC type )
|
|||||||
))
|
))
|
||||||
);
|
);
|
||||||
|
|
||||||
Code find = def_function( name(find), def_param( t_u64, name(key)), t_find_result
|
CodeFn find = def_function( name(find), def_param( t_u64, name(key)), t_find_result
|
||||||
, def_execution( code(
|
, def_execution( code(
|
||||||
FindResult result = { -1, -1, -1 };
|
FindResult result = { -1, -1, -1 };
|
||||||
|
|
||||||
@ -366,7 +367,7 @@ Code gen__hashtable( StrC type )
|
|||||||
))
|
))
|
||||||
);
|
);
|
||||||
|
|
||||||
Code full = def_function( name(full), __, t_b32
|
CodeFn full = def_function( name(full), __, t_b32
|
||||||
, def_execution( code(
|
, def_execution( code(
|
||||||
return 0.75f * Hashes.num() < Entries.num();
|
return 0.75f * Hashes.num() < Entries.num();
|
||||||
))
|
))
|
||||||
|
@ -8,7 +8,7 @@ using namespace gen;
|
|||||||
|
|
||||||
Code gen__ring( StrC type )
|
Code gen__ring( StrC type )
|
||||||
{
|
{
|
||||||
static Code t_allocator_info = def_type( name(AllocatorInfo) );
|
static CodeType t_allocator_info = def_type( name(AllocatorInfo) );
|
||||||
|
|
||||||
String name;
|
String name;
|
||||||
{
|
{
|
||||||
@ -18,14 +18,14 @@ Code gen__ring( StrC type )
|
|||||||
name = get_cached_string({ name_len, name_str });
|
name = get_cached_string({ name_len, name_str });
|
||||||
};
|
};
|
||||||
|
|
||||||
Code t_ring_type = def_type( name );
|
CodeType t_ring_type = def_type( name );
|
||||||
Code t_ring_type_ptr = def_type( name, __, spec_ptr );
|
CodeType t_ring_type_ptr = def_type( name, __, spec_ptr );
|
||||||
|
|
||||||
Code t_type = def_type( type );
|
CodeType t_type = def_type( type );
|
||||||
Code t_type_ptr = def_type( type, __, spec_ptr );
|
CodeType t_type_ptr = def_type( type, __, spec_ptr );
|
||||||
Code t_type_ref = def_type( type, __, spec_ref );
|
CodeType t_type_ref = def_type( type, __, spec_ref );
|
||||||
|
|
||||||
Code t_buffer_type;
|
CodeType t_buffer_type;
|
||||||
{
|
{
|
||||||
char const* name_str = str_fmt_buf( "Buffer_%s\0", type.Ptr );
|
char const* name_str = str_fmt_buf( "Buffer_%s\0", type.Ptr );
|
||||||
s32 len = str_len( name_str );
|
s32 len = str_len( name_str );
|
||||||
@ -33,19 +33,19 @@ Code gen__ring( StrC type )
|
|||||||
t_buffer_type = def_type( { len, name_str } );
|
t_buffer_type = def_type( { len, name_str } );
|
||||||
}
|
}
|
||||||
|
|
||||||
Code ring = {0};
|
CodeStruct ring = {0};
|
||||||
{
|
{
|
||||||
Code using_type = def_using( name(Type), t_type );
|
CodeUsing using_type = def_using( name(Type), t_type );
|
||||||
|
|
||||||
Code backing = def_variable( t_allocator_info, name(Backing) );
|
CodeVar backing = def_variable( t_allocator_info, name(Backing) );
|
||||||
Code capacity = def_variable( t_uw, name(Capacity) );
|
CodeVar capacity = def_variable( t_uw, name(Capacity) );
|
||||||
Code head = def_variable( t_uw, name(Head) );
|
CodeVar head = def_variable( t_uw, name(Head) );
|
||||||
Code tail = def_variable( t_uw, name(Tail) );
|
CodeVar tail = def_variable( t_uw, name(Tail) );
|
||||||
Code buffer = def_variable( t_buffer_type, name(Buffer) );
|
CodeVar buffer = def_variable( t_buffer_type, name(Buffer) );
|
||||||
|
|
||||||
Code init;
|
CodeFn init;
|
||||||
{
|
{
|
||||||
Code params = def_params( args(
|
CodeParam params = def_params( args(
|
||||||
def_param( t_allocator_info, name(allocator) )
|
def_param( t_allocator_info, name(allocator) )
|
||||||
, def_param( t_uw, name(max_size) )
|
, def_param( t_uw, name(max_size) )
|
||||||
));
|
));
|
||||||
@ -69,7 +69,7 @@ Code gen__ring( StrC type )
|
|||||||
init = def_function( name(init), params, t_ring_type, body, spec_static_member );
|
init = def_function( name(init), params, t_ring_type, body, spec_static_member );
|
||||||
}
|
}
|
||||||
|
|
||||||
Code append = def_function( name(append), def_param( t_type, name(value)), t_void
|
CodeFn append = def_function( name(append), def_param( t_type, name(value)), t_void
|
||||||
, def_execution( code(
|
, def_execution( code(
|
||||||
Buffer[ Head ] = value;
|
Buffer[ Head ] = value;
|
||||||
Head = ( Head + 1 ) % Capacity;
|
Head = ( Head + 1 ) % Capacity;
|
||||||
@ -79,9 +79,9 @@ Code gen__ring( StrC type )
|
|||||||
))
|
))
|
||||||
);
|
);
|
||||||
|
|
||||||
Code appendv;
|
CodeFn appendv;
|
||||||
{
|
{
|
||||||
Code params = def_params( 2
|
CodeParam params = def_params( 2
|
||||||
, def_param( t_type_ptr, name(values))
|
, def_param( t_type_ptr, name(values))
|
||||||
, def_param( t_sw, name(num))
|
, def_param( t_sw, name(num))
|
||||||
);
|
);
|
||||||
@ -94,25 +94,25 @@ Code gen__ring( StrC type )
|
|||||||
appendv = def_function( name(append), params, t_void, body, spec_inline );
|
appendv = def_function( name(append), params, t_void, body, spec_inline );
|
||||||
}
|
}
|
||||||
|
|
||||||
Code empty = def_function( name(empty), __, t_bool
|
CodeFn empty = def_function( name(empty), __, t_bool
|
||||||
, def_execution( code(
|
, def_execution( code(
|
||||||
return Head == Tail;
|
return Head == Tail;
|
||||||
))
|
))
|
||||||
);
|
);
|
||||||
|
|
||||||
Code free = def_function( name(free), __, t_void
|
CodeFn free = def_function( name(free), __, t_void
|
||||||
, def_execution( code(
|
, def_execution( code(
|
||||||
Buffer.free();
|
Buffer.free();
|
||||||
))
|
))
|
||||||
);
|
);
|
||||||
|
|
||||||
Code full = def_function( name(full), __, t_bool
|
CodeFn full = def_function( name(full), __, t_bool
|
||||||
, def_execution( code(
|
, def_execution( code(
|
||||||
return (Head + 1) % Capacity == Tail;
|
return (Head + 1) % Capacity == Tail;
|
||||||
))
|
))
|
||||||
);
|
);
|
||||||
|
|
||||||
Code get = def_function( name(get), __, t_type_ref
|
CodeFn get = def_function( name(get), __, t_type_ref
|
||||||
, def_execution( code(
|
, def_execution( code(
|
||||||
Type& data = Buffer[ Tail ];
|
Type& data = Buffer[ Tail ];
|
||||||
Tail = ( Tail + 1 ) % Capacity;
|
Tail = ( Tail + 1 ) % Capacity;
|
||||||
@ -121,7 +121,7 @@ Code gen__ring( StrC type )
|
|||||||
))
|
))
|
||||||
);
|
);
|
||||||
|
|
||||||
Code wipe = def_function( name(wipe), __, t_void
|
CodeFn wipe = def_function( name(wipe), __, t_void
|
||||||
, def_execution( code(
|
, def_execution( code(
|
||||||
Head = 0;
|
Head = 0;
|
||||||
Tail = 0;
|
Tail = 0;
|
||||||
|
@ -190,7 +190,7 @@ u32 gen_sanity_upfront()
|
|||||||
|
|
||||||
// Operator cast
|
// Operator cast
|
||||||
{
|
{
|
||||||
Code t_u8_ptr = def_type( name(u8), __, spec_ptr );
|
CodeType t_u8_ptr = def_type( name(u8), __, spec_ptr );
|
||||||
|
|
||||||
Code op_ptr = def_operator_cast( t_u8_ptr, __ );
|
Code op_ptr = def_operator_cast( t_u8_ptr, __ );
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ includes = include_directories(
|
|||||||
# get_sources = files('./get_sources.ps1')
|
# get_sources = files('./get_sources.ps1')
|
||||||
# sources = files(run_command('powershell', get_sources, check: true).stdout().strip().split('\n'))
|
# sources = files(run_command('powershell', get_sources, check: true).stdout().strip().split('\n'))
|
||||||
|
|
||||||
sources = [ '../test.cpp' ]
|
sources = [ '../test.Upfront.cpp' ]
|
||||||
|
|
||||||
if get_option('buildtype').startswith('debug')
|
if get_option('buildtype').startswith('debug')
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@ int gen_main()
|
|||||||
Memory::setup();
|
Memory::setup();
|
||||||
gen::init();
|
gen::init();
|
||||||
|
|
||||||
gen_sanity();
|
gen_sanity_upfront();
|
||||||
|
|
||||||
gen_array( u8 );
|
gen_array( u8 );
|
||||||
gen_array( sw );
|
gen_array( sw );
|
||||||
|
Loading…
Reference in New Issue
Block a user