4coder/4ed_dynamic_variables.h

114 lines
2.1 KiB
C

/*
* Mr. 4th Dimention - Allen Webster
*
* 22.06.2018
*
* Dynamic variable system
*
*/
// TOP
#if !defined(FRED_DYNAMIC_VARIABLES_H)
#define FRED_DYNAMIC_VARIABLES_H
struct Dynamic_Variable_Slot{
Dynamic_Variable_Slot *next;
Dynamic_Variable_Slot *prev;
String name;
u64 default_value;
i32 location;
};
struct Dynamic_Variable_Layout{
Dynamic_Variable_Slot sentinel;
i32 location_counter;
};
struct Dynamic_Variable_Block{
u64 *val_array;
i32 count;
i32 max;
};
////////////////////////////////
global_const i32 lifetime_key_reference_per_node = 32;
struct Lifetime_Key_Ref_Node{
Lifetime_Key_Ref_Node *next;
Lifetime_Key_Ref_Node *prev;
struct Lifetime_Key *keys[lifetime_key_reference_per_node];
};
struct Lifetime_Object{
union{
struct{
Lifetime_Object *next;
Lifetime_Object *prev;
};
struct{
Lifetime_Key_Ref_Node *key_node_first;
Lifetime_Key_Ref_Node *key_node_last;
i32 key_count;
i32 user_type;
void *user_back_ptr;
};
};
};
struct Lifetime_Key{
union{
struct{
Lifetime_Key *next;
Lifetime_Key *prev;
};
struct{
struct Lifetime_Object **members;
i32 count;
Dynamic_Variable_Block dynamic_vars;
};
};
};
global_const u64 LifetimeKeyHash_Empty = 0&(~bit_63);
global_const u64 LifetimeKeyHash_Deleted = max_u64&(~bit_63);
struct Lifetime_Key_Table{
void *mem_ptr;
u64 *hashes;
Lifetime_Key **keys;
u32 count;
u32 max;
};
struct Lifetime_Key_Ref_Node_List{
Lifetime_Key_Ref_Node *first;
Lifetime_Key_Ref_Node *last;
i32 count;
};
struct Lifetime_Object_List{
Lifetime_Object *first;
Lifetime_Object *last;
i32 count;
};
struct Lifetime_Key_List{
Lifetime_Key *first;
Lifetime_Key *last;
i32 count;
};
struct Lifetime_Allocator{
Lifetime_Key_Ref_Node_List free_key_references;
Lifetime_Object_List free_objects;
Lifetime_Key_List free_keys;
Lifetime_Key_Table key_table;
};
#endif
// BOTTOM