WIP: add a Val struct as an input/output when calling a function
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
73
src/model.h
73
src/model.h
@@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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;
|
||||
|
@@ -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
|
||||
|
||||
|
Reference in New Issue
Block a user