diff --git a/src/model.cpp b/src/model.cpp index bafbfc4..2586a79 100644 --- a/src/model.cpp +++ b/src/model.cpp @@ -282,11 +282,13 @@ Model * Model::get_model(const wchar_t * db_field_name, const wchar_t * flat_fie } -Wrapper Model::get_wrapper(const wchar_t * db_field_name, const wchar_t * flat_field_name) +#ifdef MORM_HAS_EZC_LIBRARY + +Ezc::Val Model::get_ezc_val(const wchar_t * db_field_name, const wchar_t * flat_field_name) { ModelEnv model_env_local; model_env = &model_env_local; - model_env->model_work_mode = MORM_MODEL_WORK_MODE_GET_MODEL_WRAPPER; + model_env->model_work_mode = MORM_MODEL_WORK_MODE_GET_EZC_VAL; model_env->db_field_name = db_field_name; model_env->flat_field_name = flat_field_name; model_env->model = this; @@ -302,10 +304,12 @@ Wrapper Model::get_wrapper(const wchar_t * db_field_name, const wchar_t * flat_f } model_env = nullptr; - return model_env_local.wrapper; + return model_env_local.ezc_val; } +#endif + bool Model::get_raw_value(const wchar_t * db_field_name, const wchar_t * flat_field_name, pt::Stream & stream, bool clear_stream) { @@ -1659,13 +1663,13 @@ void Model::field_model(const wchar_t * db_field_name, const wchar_t * flat_fiel } } - if( model_env->model_work_mode == MORM_MODEL_WORK_MODE_GET_MODEL_WRAPPER ) + if( model_env->model_work_mode == MORM_MODEL_WORK_MODE_GET_EZC_VAL ) { if( (is_empty_field(model_env->db_field_name) || is_the_same_field(db_field_name, model_env->db_field_name)) && (is_empty_field(model_env->flat_field_name) || is_the_same_field(flat_field_name, model_env->flat_field_name)) && - !model_env->wrapper.model ) + !model_env->ezc_val.pointer ) { - model_env->wrapper.model = &field_model; + model_env->ezc_val.set_pointer_to(&field_model); } } diff --git a/src/model.h b/src/model.h index eb8f180..1cc0749 100644 --- a/src/model.h +++ b/src/model.h @@ -111,13 +111,13 @@ ModelMember model_member = static_cast(method); \ field_member_ezc(db_field_name, flat_field_name, model_member, field_type); \ } \ - void field(const wchar_t * field_name, void (ClassName::*method)(morm::Wrapper &), const morm::FT & field_type = morm::FT::default_type) \ + void field(const wchar_t * field_name, void (ClassName::*method)(Ezc::Val &), const morm::FT & field_type = morm::FT::default_type) \ { \ field(field_name, field_name, method, field_type); \ } \ - void field(const wchar_t * db_field_name, const wchar_t * flat_field_name, void (ClassName::*method)(morm::Wrapper &), const morm::FT & field_type = morm::FT::default_type) \ + void field(const wchar_t * db_field_name, const wchar_t * flat_field_name, void (ClassName::*method)(Ezc::Val &), const morm::FT & field_type = morm::FT::default_type) \ { \ - typedef void (Model::*ModelMember)(morm::Wrapper &); \ + typedef void (Model::*ModelMember)(Ezc::Val &); \ ModelMember model_member = static_cast(method); \ field_member_ezc(db_field_name, flat_field_name, model_member, field_type); \ } @@ -258,7 +258,7 @@ public: Model * get_model(const wchar_t * db_field_name, const wchar_t * flat_field_name); - Wrapper get_wrapper(const wchar_t * db_field_name, const wchar_t * flat_field_name); + bool get_raw_value(const wchar_t * db_field_name, const wchar_t * flat_field_name, pt::Stream & stream, bool clear_stream = true); bool get_raw_value(const wchar_t * db_field_name, const wchar_t * flat_field_name, ModelData * model_data, pt::Stream & stream, bool clear_stream = true); @@ -267,6 +267,8 @@ public: #ifdef MORM_HAS_EZC_LIBRARY + Ezc::Val get_ezc_val(const wchar_t * db_field_name, const wchar_t * flat_field_name); + bool get_raw_value(const wchar_t * db_field_name, const wchar_t * flat_field_name, ModelData * model_data, Ezc::Env & fun_info, pt::Stream & stream, bool clear_stream = true) { @@ -806,6 +808,20 @@ protected: } +#ifdef MORM_HAS_EZC_LIBRARY + template + void field_generic_get_ezc_val(const wchar_t * db_field_name, const wchar_t * flat_field_name, FieldValue & field_value, const FT & field_type) + { + if( (is_empty_field(model_env->db_field_name) || is_the_same_field(db_field_name, model_env->db_field_name)) && + (is_empty_field(model_env->flat_field_name) || is_the_same_field(flat_field_name, model_env->flat_field_name)) ) + { + model_env->was_field_found = true; + model_env->ezc_val.set_pointer_to(&field_value); + } + } +#endif + + template void field_generic(const wchar_t * db_field_name, const wchar_t * flat_field_name, FieldValue & field_value, const FT & field_type) { @@ -850,6 +866,13 @@ protected: { field_generic_put_raw_value_to_stream(db_field_name, flat_field_name, field_value, field_type); } + + #ifdef MORM_HAS_EZC_LIBRARY + if( get_work_mode() == MORM_MODEL_WORK_MODE_GET_EZC_VAL ) + { + field_generic_get_ezc_val(db_field_name, flat_field_name, field_value, field_type); + } + #endif } } @@ -858,13 +881,13 @@ protected: { if( model_connector && model_env ) { - if( model_env->model_work_mode == MORM_MODEL_WORK_MODE_GET_MODEL_WRAPPER ) + if( model_env->model_work_mode == MORM_MODEL_WORK_MODE_GET_EZC_VAL ) { if( (is_empty_field(model_env->db_field_name) || is_the_same_field(db_field_name, model_env->db_field_name)) && (is_empty_field(model_env->flat_field_name) || is_the_same_field(flat_field_name, model_env->flat_field_name)) && - !model_env->wrapper.date ) + !model_env->ezc_val.pointer ) { - model_env->wrapper.date = &field_value; + model_env->ezc_val.set_pointer_to(&field_value); } } else @@ -879,13 +902,13 @@ protected: { if( model_connector && model_env ) { - if( model_env->model_work_mode == MORM_MODEL_WORK_MODE_GET_MODEL_WRAPPER ) + if( model_env->model_work_mode == MORM_MODEL_WORK_MODE_GET_EZC_VAL ) { if( (is_empty_field(model_env->db_field_name) || is_the_same_field(db_field_name, model_env->db_field_name)) && (is_empty_field(model_env->flat_field_name) || is_the_same_field(flat_field_name, model_env->flat_field_name)) && - !model_env->wrapper.space_wrapper ) + !model_env->ezc_val.pointer ) { - model_env->wrapper.space_wrapper = new SpaceWrapper(&field_value); + model_env->ezc_val.set_pointer_to(new SpaceWrapper(&field_value)); } } else @@ -1040,7 +1063,7 @@ protected: } - void field_member_ezc(const wchar_t * db_field_name, const wchar_t * flat_field_name, void (Model::*method)(Wrapper & wrapper), const FT & field_type) + void field_member_ezc(const wchar_t * db_field_name, const wchar_t * flat_field_name, void (Model::*method)(Ezc::Val & val), const FT & field_type) { if( model_connector && model_env && model_env->model ) { @@ -1054,12 +1077,12 @@ protected: } } - if( model_env->model_work_mode == MORM_MODEL_WORK_MODE_GET_MODEL_WRAPPER ) + if( model_env->model_work_mode == MORM_MODEL_WORK_MODE_GET_EZC_VAL ) { if( (is_empty_field(model_env->db_field_name) || is_the_same_field(db_field_name, model_env->db_field_name)) && (is_empty_field(model_env->flat_field_name) || is_the_same_field(flat_field_name, model_env->flat_field_name)) ) { - (model_env->model->*method)(model_env->wrapper); + (model_env->model->*method)(model_env->ezc_val); } } } @@ -1268,15 +1291,15 @@ protected: { ContainerItemType * item_type_null_pointer = nullptr; - if( model_env->model_work_mode == MORM_MODEL_WORK_MODE_GET_MODEL_WRAPPER ) + if( model_env->model_work_mode == MORM_MODEL_WORK_MODE_GET_EZC_VAL ) { if constexpr (std::is_base_of()) { if( (is_empty_field(model_env->db_field_name) || is_the_same_field(db_field_name, model_env->db_field_name)) && (is_empty_field(model_env->flat_field_name) || is_the_same_field(flat_field_name, model_env->flat_field_name)) && - !model_env->wrapper.model_container_wrapper ) + !model_env->ezc_val.pointer ) { - model_env->wrapper.model_container_wrapper = new ModelWrapperVector(&field_value); + model_env->ezc_val.set_pointer_to(new ModelWrapperVector(&field_value)); } } } @@ -1293,15 +1316,15 @@ protected: { ContainerItemType * item_type_null_pointer = nullptr; - if( model_env->model_work_mode == MORM_MODEL_WORK_MODE_GET_MODEL_WRAPPER ) + if( model_env->model_work_mode == MORM_MODEL_WORK_MODE_GET_EZC_VAL ) { if constexpr (std::is_base_of()) { if( (is_empty_field(model_env->db_field_name) || is_the_same_field(db_field_name, model_env->db_field_name)) && (is_empty_field(model_env->flat_field_name) || is_the_same_field(flat_field_name, model_env->flat_field_name)) && - !model_env->wrapper.model_container_wrapper ) + !model_env->ezc_val.pointer ) { - model_env->wrapper.model_container_wrapper = new ModelWrapperList(&field_value); + model_env->ezc_val.set_pointer_to(new ModelWrapperList(&field_value)); } } } @@ -1318,15 +1341,15 @@ protected: { ContainerItemType * item_type_null_pointer = nullptr; - if( model_env->model_work_mode == MORM_MODEL_WORK_MODE_GET_MODEL_WRAPPER ) + if( model_env->model_work_mode == MORM_MODEL_WORK_MODE_GET_EZC_VAL ) { if constexpr (std::is_base_of()) { if( (is_empty_field(model_env->db_field_name) || is_the_same_field(db_field_name, model_env->db_field_name)) && (is_empty_field(model_env->flat_field_name) || is_the_same_field(flat_field_name, model_env->flat_field_name)) && - !model_env->wrapper.model_container_wrapper ) + !model_env->ezc_val.pointer ) { - model_env->wrapper.model_container_wrapper = new ModelWrapperVectorPointer(&field_value); + model_env->ezc_val.set_pointer_to(new ModelWrapperVectorPointer(&field_value)); } } } @@ -1343,15 +1366,15 @@ protected: { ContainerItemType * item_type_null_pointer = nullptr; - if( model_env->model_work_mode == MORM_MODEL_WORK_MODE_GET_MODEL_WRAPPER ) + if( model_env->model_work_mode == MORM_MODEL_WORK_MODE_GET_EZC_VAL ) { if constexpr (std::is_base_of()) { if( (is_empty_field(model_env->db_field_name) || is_the_same_field(db_field_name, model_env->db_field_name)) && (is_empty_field(model_env->flat_field_name) || is_the_same_field(flat_field_name, model_env->flat_field_name)) && - !model_env->wrapper.model_container_wrapper ) + !model_env->ezc_val.pointer ) { - model_env->wrapper.model_container_wrapper = new ModelWrapperListPointer(&field_value); + model_env->ezc_val.set_pointer_to(new ModelWrapperListPointer(&field_value)); } } } diff --git a/src/modelenv.h b/src/modelenv.h index e0be74d..ddb223a 100644 --- a/src/modelenv.h +++ b/src/modelenv.h @@ -40,7 +40,7 @@ #include "finderhelper.h" #include "fieldvaluehelper.h" #include "morm_types.h" -#include "wrapper.h" +#include "val.h" #include "select.h" @@ -93,11 +93,11 @@ public: Model * child_model; pt::Stream * stream; bool was_field_found; // used only in MORM_MODEL_WORK_MODE_PUT_FIELD_RAW_VALUE_TO_STREAM - Wrapper wrapper; #ifdef MORM_HAS_EZC_LIBRARY - void * ezc_fun_info; + Ezc::Val ezc_val; + void * ezc_fun_info; // is still needed? //bool ezc_fun_result; const std::type_info * ezc_fun_info_typeinfo; #endif @@ -145,7 +145,6 @@ public: child_model = e.child_model; stream = e.stream; was_field_found = e.was_field_found; - wrapper = e.wrapper; status = e.status; has_autogenerated_select = e.has_autogenerated_select; select_flags = e.select_flags; @@ -156,6 +155,7 @@ public: add_postfix_percent = e.add_postfix_percent; #ifdef MORM_HAS_EZC_LIBRARY + ezc_val = e.ezc_val; ezc_fun_info = e.ezc_fun_info; //ezc_fun_result = e.ezc_fun_result; ezc_fun_info_typeinfo = e.ezc_fun_info_typeinfo; @@ -204,7 +204,6 @@ public: child_model = nullptr; stream = nullptr; was_field_found = false; - wrapper.clear(); status = true; has_autogenerated_select = false; select_flags = Select::default_type; @@ -215,6 +214,7 @@ public: add_postfix_percent = false; #ifdef MORM_HAS_EZC_LIBRARY + ezc_val.clear(); ezc_fun_info = nullptr; //ezc_fun_result = false; ezc_fun_info_typeinfo = nullptr; diff --git a/src/morm_types.h b/src/morm_types.h index 5e5482c..a1179d9 100644 --- a/src/morm_types.h +++ b/src/morm_types.h @@ -46,7 +46,7 @@ #define MORM_MODEL_WORK_MODE_ITERATE_PRIMARY_KEY_VALUES 8 #define MORM_MODEL_WORK_MODE_SET_FIELD_VALUE 9 #define MORM_MODEL_WORK_MODE_GET_FIELD_MODEL 10 -#define MORM_MODEL_WORK_MODE_GET_MODEL_WRAPPER 11 +#define MORM_MODEL_WORK_MODE_GET_EZC_VAL 11 #define MORM_MODEL_WORK_MODE_PUT_FIELD_RAW_VALUE_TO_STREAM 12 #define MORM_MODEL_WORK_MODE_PROPAGATE_SAVE_STATUS 13