diff --git a/4coder_API/types.h b/4coder_API/types.h index 78267994..78210465 100644 --- a/4coder_API/types.h +++ b/4coder_API/types.h @@ -691,15 +691,18 @@ STRUCT Query_Bar{ static int32_t CoreVariableIndex_ERROR = -1; -ENUM(int32_t, Lifetime_Type){ - LifetimeType_View = 0, - LifetimeType_Buffer = 1, +ENUM(int32_t, Lifetime_Handle_Type){ + LifetimeHandleType_Overlapped = 0, + LifetimeHandleType_Buffer = 1, + LifetimeHandleType_View = 2, }; STRUCT Lifetime_Handle{ - Lifetime_Type type; - View_ID view_id; - Buffer_ID buffer_id; + Lifetime_Handle_Type type; + union{ + View_ID view_id; + Buffer_ID buffer_id; + }; }; ENUM(int16_t, UI_Item_Type){ diff --git a/4coder_default_framework.cpp b/4coder_default_framework.cpp index 81835268..2ece4ef9 100644 --- a/4coder_default_framework.cpp +++ b/4coder_default_framework.cpp @@ -247,10 +247,10 @@ default_4coder_initialize(Application_Links *app, int32_t override_font_size, bo load_folder_of_themes_into_live_set(app, &global_part, "themes"); load_config_and_apply(app, &global_part, &global_config, override_font_size, override_hinting); - view_rewrite_loc = create_core_variable(app, LifetimeType_View, "DEFAULT.rewrite" , (uint64_t)0); - view_next_rewrite_loc = create_core_variable(app, LifetimeType_View, "DEFAULT.next_rewrite", (uint64_t)0); - view_paste_index_loc = create_core_variable(app, LifetimeType_View, "DEFAULT.paste_index" , (uint64_t)0); - view_is_passive_loc = create_core_variable(app, LifetimeType_View, "DEFAULT.is_passive" , (uint64_t)false); + view_rewrite_loc = create_core_variable(app, "DEFAULT.rewrite" , (uint64_t)0); + view_next_rewrite_loc = create_core_variable(app, "DEFAULT.next_rewrite", (uint64_t)0); + view_paste_index_loc = create_core_variable(app, "DEFAULT.paste_index" , (uint64_t)0); + view_is_passive_loc = create_core_variable(app, "DEFAULT.is_passive" , (uint64_t)false); } static void diff --git a/4coder_generated/app_functions.h b/4coder_generated/app_functions.h index 438442da..a080a579 100644 --- a/4coder_generated/app_functions.h +++ b/4coder_generated/app_functions.h @@ -55,7 +55,7 @@ struct Application_Links; #define VIEW_END_UI_MODE_SIG(n) int32_t n(Application_Links *app, View_Summary *view) #define VIEW_SET_UI_SIG(n) bool32 n(Application_Links *app, View_Summary *view, UI_Control *control) #define VIEW_GET_UI_COPY_SIG(n) UI_Control n(Application_Links *app, View_Summary *view, struct Partition *part) -#define CREATE_CORE_VARIABLE_SIG(n) int32_t n(Application_Links *app, Lifetime_Type type, char *null_terminated_name, uint64_t default_value) +#define CREATE_CORE_VARIABLE_SIG(n) int32_t n(Application_Links *app, char *null_terminated_name, uint64_t default_value) #define CORE_VARIABLE_SET_SIG(n) bool32 n(Application_Links *app, Lifetime_Handle handle, int32_t location, uint64_t value) #define CORE_VARIABLE_GET_SIG(n) bool32 n(Application_Links *app, Lifetime_Handle handle, int32_t location, uint64_t *value_out) #define GET_USER_INPUT_SIG(n) User_Input n(Application_Links *app, Input_Type_Flag get_type, Input_Type_Flag abort_type) @@ -558,7 +558,7 @@ static inline int32_t view_start_ui_mode(Application_Links *app, View_Summary *v static inline int32_t view_end_ui_mode(Application_Links *app, View_Summary *view){return(app->view_end_ui_mode(app, view));} static inline bool32 view_set_ui(Application_Links *app, View_Summary *view, UI_Control *control){return(app->view_set_ui(app, view, control));} static inline UI_Control view_get_ui_copy(Application_Links *app, View_Summary *view, struct Partition *part){return(app->view_get_ui_copy(app, view, part));} -static inline int32_t create_core_variable(Application_Links *app, Lifetime_Type type, char *null_terminated_name, uint64_t default_value){return(app->create_core_variable(app, type, null_terminated_name, default_value));} +static inline int32_t create_core_variable(Application_Links *app, char *null_terminated_name, uint64_t default_value){return(app->create_core_variable(app, null_terminated_name, default_value));} static inline bool32 core_variable_set(Application_Links *app, Lifetime_Handle handle, int32_t location, uint64_t value){return(app->core_variable_set(app, handle, location, value));} static inline bool32 core_variable_get(Application_Links *app, Lifetime_Handle handle, int32_t location, uint64_t *value_out){return(app->core_variable_get(app, handle, location, value_out));} static inline User_Input get_user_input(Application_Links *app, Input_Type_Flag get_type, Input_Type_Flag abort_type){return(app->get_user_input(app, get_type, abort_type));} @@ -657,7 +657,7 @@ static inline int32_t view_start_ui_mode(Application_Links *app, View_Summary *v static inline int32_t view_end_ui_mode(Application_Links *app, View_Summary *view){return(app->view_end_ui_mode_(app, view));} static inline bool32 view_set_ui(Application_Links *app, View_Summary *view, UI_Control *control){return(app->view_set_ui_(app, view, control));} static inline UI_Control view_get_ui_copy(Application_Links *app, View_Summary *view, struct Partition *part){return(app->view_get_ui_copy_(app, view, part));} -static inline int32_t create_core_variable(Application_Links *app, Lifetime_Type type, char *null_terminated_name, uint64_t default_value){return(app->create_core_variable_(app, type, null_terminated_name, default_value));} +static inline int32_t create_core_variable(Application_Links *app, char *null_terminated_name, uint64_t default_value){return(app->create_core_variable_(app, null_terminated_name, default_value));} static inline bool32 core_variable_set(Application_Links *app, Lifetime_Handle handle, int32_t location, uint64_t value){return(app->core_variable_set_(app, handle, location, value));} static inline bool32 core_variable_get(Application_Links *app, Lifetime_Handle handle, int32_t location, uint64_t *value_out){return(app->core_variable_get_(app, handle, location, value_out));} static inline User_Input get_user_input(Application_Links *app, Input_Type_Flag get_type, Input_Type_Flag abort_type){return(app->get_user_input_(app, get_type, abort_type));} diff --git a/4ed.cpp b/4ed.cpp index 372f80d9..d5a0a229 100644 --- a/4ed.cpp +++ b/4ed.cpp @@ -1072,16 +1072,14 @@ App_Init_Sig(app_init){ { setup_command_table(); - Assert(models->config_api.get_bindings != 0); i32 wanted_size = models->config_api.get_bindings(models->app_links.memory, models->app_links.memory_size); Assert(wanted_size <= models->app_links.memory_size); interpret_binding_buffer(models, models->app_links.memory, wanted_size); - memset(models->app_links.memory, 0, wanted_size); } - dynamic_variables_init(&models->view_variable_layout); + dynamic_variables_init(&models->variable_layout); // NOTE(allen): file setup working_set_init(&models->working_set, partition, &vars->models.mem.general); diff --git a/4ed_api_implementation.cpp b/4ed_api_implementation.cpp index 28820d46..6e2beb05 100644 --- a/4ed_api_implementation.cpp +++ b/4ed_api_implementation.cpp @@ -1202,7 +1202,7 @@ Buffer_Get_Lifetime_Handle(Application_Links *app, Buffer_ID buffer_id) Editing_File *file = imp_get_file(cmd, buffer_id); Lifetime_Handle lifetime = {0}; if (file != 0){ - lifetime.type = LifetimeType_Buffer; + lifetime.type = LifetimeHandleType_Buffer; lifetime.buffer_id = buffer_id; } return(lifetime); @@ -1946,7 +1946,7 @@ View_Get_Lifetime_Handle(Application_Links *app, View_ID view_id) View *view = imp_get_view(cmd, view_id); Lifetime_Handle lifetime = {0}; if (view != 0){ - lifetime.type = LifetimeType_View; + lifetime.type = LifetimeHandleType_View; lifetime.view_id = view_id; } return(lifetime); @@ -2355,26 +2355,24 @@ View_Get_UI_Copy(Application_Links *app, View_Summary *view, struct Partition *p return(result); } +API_EXPORT Lifetime_Handle +Get_Overlapped_Lifetime_Handle(Application_Links *app, Lifetime_Handle *member_handles, int32_t member_count) +{ + Command_Data *cmd = (Command_Data*)app->cmd_context; + Lifetime_Handle result = {0}; + + return(result); +} + API_EXPORT int32_t -Create_Core_Variable(Application_Links *app, Lifetime_Type type, char *null_terminated_name, uint64_t default_value) +Create_Core_Variable(Application_Links *app, char *null_terminated_name, uint64_t default_value) { Command_Data *cmd = (Command_Data*)app->cmd_context; Models *models = cmd->models; String name = make_string_slowly(null_terminated_name); General_Memory *general = &models->mem.general; - switch (type){ - case LifetimeType_View: - { - Dynamic_Variable_Layout *layout = &models->view_variable_layout; - return(dynamic_variables_lookup_or_create(general, layout, name, default_value)); - }break; - case LifetimeType_Buffer: - { - Dynamic_Variable_Layout *layout = &models->buffer_variable_layout; - return(dynamic_variables_lookup_or_create(general, layout, name, default_value)); - }break; - } - return(CoreVariableIndex_ERROR); + Dynamic_Variable_Layout *layout = &models->variable_layout; + return(dynamic_variables_lookup_or_create(general, layout, name, default_value)); } internal bool32 @@ -2382,27 +2380,30 @@ get_dynamic_variable(Command_Data *cmd, Lifetime_Handle handle, int32_t location, uint64_t **ptr_out){ Models *models = cmd->models; General_Memory *general = &models->mem.general; - Dynamic_Variable_Layout *layout = 0; + Dynamic_Variable_Layout *layout = &models->variable_layout; Dynamic_Variable_Block *block = 0; switch (handle.type){ - case LifetimeType_View: + case LifetimeHandleType_Overlapped: { - View *vptr = imp_get_view(cmd, handle.view_id); - if (vptr != 0){ - layout = &models->view_variable_layout; - block = &vptr->transient.dynamic_vars; - } + NotImplemented; }break; - case LifetimeType_Buffer: + case LifetimeHandleType_Buffer: { Editing_File *file = imp_get_file(cmd, handle.buffer_id); if (file != 0){ - layout = &models->buffer_variable_layout; block = &file->dynamic_vars; } }break; + + case LifetimeHandleType_View: + { + View *vptr = imp_get_view(cmd, handle.view_id); + if (vptr != 0){ + block = &vptr->transient.dynamic_vars; + } + }break; } bool32 result = false; diff --git a/4ed_app_models.h b/4ed_app_models.h index 1771c725..469101a5 100644 --- a/4ed_app_models.h +++ b/4ed_app_models.h @@ -67,8 +67,7 @@ struct Models{ Live_Views live_set; Parse_Context_Memory parse_context_memory; - Dynamic_Variable_Layout buffer_variable_layout; - Dynamic_Variable_Layout view_variable_layout; + Dynamic_Variable_Layout variable_layout; Editing_File *message_buffer; Editing_File *scratch_buffer; diff --git a/4ed_dynamic_variables.cpp b/4ed_dynamic_variables.cpp index c1166630..94070f27 100644 --- a/4ed_dynamic_variables.cpp +++ b/4ed_dynamic_variables.cpp @@ -98,5 +98,9 @@ dynamic_variables_get_ptr(General_Memory *general, return(result); } +//////////////////////////////// + +// TODO(allen): // TODO(allen): // TODO(allen): + // BOTTOM diff --git a/4ed_dynamic_variables.h b/4ed_dynamic_variables.h index 3de8b14c..df1b1ebc 100644 --- a/4ed_dynamic_variables.h +++ b/4ed_dynamic_variables.h @@ -31,6 +31,36 @@ struct Dynamic_Variable_Block{ i32 max; }; +//////////////////////////////// + +union Lifetime_Object{ + struct{ + Object *next; + Object *prev; + }; + struct{ + struct Key **keys; + i32 count; + i32 max; + }; +}; + +union Lifetime_Key{ + struct{ + Key *next; + Key *prev; + }; + struct{ + struct Object **keys; + i32 count; + i32 max; + }; +}; + +struct Lifetime_Allocator{ + // TODO(allen): // TODO(allen): // TODO(allen): // TODO(allen): +}; + #endif // BOTTOM