start adding support for Ezc library - Ezc::Generator is able to get variable value and call a static function
This commit is contained in:
@@ -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)
|
||||
{
|
||||
|
Reference in New Issue
Block a user