WIP: add a Val struct as an input/output when calling a function

This commit is contained in:
2024-12-13 15:48:43 +01:00
parent 04144e81be
commit 0ceb2d9c75
4 changed files with 64 additions and 37 deletions

View File

@@ -111,13 +111,13 @@
ModelMember model_member = static_cast<ModelMember>(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<ModelMember>(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<typename FieldValue>
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<typename FieldValue>
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<Model, ContainerItemType>())
{
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<Model, ContainerItemType>())
{
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<Model, ContainerItemType>())
{
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<Model, ContainerItemType>())
{
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));
}
}
}