start adding support for Ezc library - Ezc::Generator is able to get variable value and call a static function

This commit is contained in:
2021-05-31 18:40:28 +02:00
parent 284cbc5c66
commit 515e806a50
8 changed files with 321 additions and 11 deletions

View File

@@ -42,6 +42,10 @@
#include "morm_types.h"
#include "modelenv.h"
#include "ft.h"
#include "convert/text.h"
// put some macro
#include "funinfo.h"
namespace morm
@@ -117,13 +121,70 @@ public:
put_field_value_or_null(field_value, field_type, model_env);
}
}
else
if( work_mode == MORM_WORK_MODE_GET_SPECIFIC_FIELD_VALUE )
{
if( model_env && model_env->flat_field_name && pt::is_equal(model_env->flat_field_name, field_name) )
{
put_field_value_or_null(field_value, field_type, model_env);
}
}
field_after();
}
}
template<typename FunInfoStreamType>
void field(const wchar_t * field_name, void (*fun)(Ezc::FunInfo<FunInfoStreamType> &), const FT & field_type, ModelEnv * model_env)
{
if( out_stream && can_field_be_generated(field_type) )
{
field_before();
if( work_mode == MORM_WORK_MODE_MODEL_FIELDS )
{
put_field_name_and_table_if_needed(field_name, field_type, model_env);
}
else
if( work_mode == MORM_WORK_MODE_MODEL_VALUES )
{
put_field_value(fun, field_type, model_env);
}
else
if( work_mode == MORM_WORK_MODE_MODEL_FIELDS_VALUES )
{
if( model_env && model_env->set_field_name_helper )
{
if( (size_t)model_env->field_index < model_env->set_field_name_helper->size() )
{
put_field_name_and_table_if_needed((*model_env->set_field_name_helper)[model_env->field_index], field_type, model_env);
put_name_value_separator();
put_field_value(fun, field_type, model_env);
}
model_env->field_index += 1;
}
else
{
put_field_name_and_table_if_needed(field_name, field_type, model_env);
put_name_value_separator();
put_field_value(fun, field_type, model_env);
}
}
else
if( work_mode == MORM_WORK_MODE_GET_SPECIFIC_FIELD_VALUE )
{
if( model_env && model_env->flat_field_name && pt::is_equal(model_env->flat_field_name, field_name) )
{
put_field_value(fun, field_type, model_env);
}
}
field_after();
}
}
template<typename FieldValue>
@@ -142,6 +203,23 @@ public:
}
}
// not finished yet
template<typename FunInfoStreamType>
void put_field_value(void (*fun)(Ezc::FunInfo<FunInfoStreamType>&), const FT & field_type, ModelEnv * model_env)
{
if( model_env && model_env->ezc_fun_info && model_env->ezc_fun_info_typeinfo )
{
if( typeid(Ezc::FunInfo<FunInfoStreamType>) == *model_env->ezc_fun_info_typeinfo )
{
fun(*reinterpret_cast<Ezc::FunInfo<FunInfoStreamType>*>(model_env->ezc_fun_info));
}
//put_field_value(info.out, field_type);
}
}
template<typename FieldValue>
void field_in(pt::TextStream & stream, const wchar_t * field_name, const std::set<FieldValue> & container, ModelEnv * model_env)
{