changed the way how we iterate through Models, instead of ModelWrapper now we have Wrapper which has pointers to: model, model container, space or date
This commit is contained in:
parent
acb42f453c
commit
849b3e9ecc
304
src/generator.h
304
src/generator.h
|
@ -152,7 +152,8 @@ private:
|
|||
Var * variable;
|
||||
|
||||
#ifdef EZC_HAS_MORM_LIBRARY
|
||||
morm::ModelWrapper * model_wrapper;
|
||||
morm::Wrapper * wrapper;
|
||||
size_t field_index;
|
||||
#endif
|
||||
|
||||
FindHelper()
|
||||
|
@ -165,32 +166,13 @@ private:
|
|||
item_block = nullptr;
|
||||
variable = nullptr;
|
||||
|
||||
#ifdef EZC_HAS_MORM_LIBRARY
|
||||
model_wrapper = nullptr;
|
||||
#endif
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
#ifdef EZC_HAS_MORM_LIBRARY
|
||||
|
||||
struct CallModelHelper
|
||||
{
|
||||
size_t field_index;
|
||||
morm::ModelWrapper * model_wrapper;
|
||||
morm::Model * model;
|
||||
|
||||
|
||||
CallModelHelper()
|
||||
{
|
||||
wrapper = nullptr;
|
||||
field_index = 0;
|
||||
model_wrapper = nullptr;
|
||||
model = nullptr;
|
||||
#endif
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
struct BlockStack
|
||||
{
|
||||
|
@ -331,23 +313,26 @@ private:
|
|||
|
||||
void CallObject(BaseObj<StreamType> & base_obj, int method_index, FunInfo<StreamType> & info);
|
||||
|
||||
void PrintDate(pt::Date * date, std::vector<Var> parameters, StreamType & out_stream);
|
||||
bool PrintDatePart(pt::Date * date, const std::wstring & field, std::vector<Var> parameters, StreamType & out_stream);
|
||||
|
||||
void CallSpaceObjectForLastField(std::vector<Var> & parameters, StreamType & out_stream, pt::Space * space);
|
||||
|
||||
pt::Space * CallSpaceObjectForMiddleField(std::wstring & root_space_name, std::vector<std::wstring> & fields, size_t field_index, pt::Space * space);
|
||||
|
||||
void CallSpaceTableForLastField(morm::ModelWrapper & model_wrapper, std::vector<Var> & parameters, StreamType & out_stream,
|
||||
void CallSpaceTableForLastField(morm::SpaceWrapper & space_wrapper, std::vector<Var> & parameters, StreamType & out_stream,
|
||||
pt::Space * space, size_t model_wrapper_space_table_index);
|
||||
|
||||
pt::Space * CallSpaceTableForMiddleField(morm::ModelWrapper & model_wrapper, std::wstring & root_space_name, std::vector<std::wstring> & fields,
|
||||
pt::Space * CallSpaceTableForMiddleField(morm::SpaceWrapper & space_wrapper, std::wstring & root_space_name, std::vector<std::wstring> & fields,
|
||||
size_t field_index, pt::Space * space, size_t model_wrapper_space_table_index);
|
||||
|
||||
void CallSpace(morm::ModelWrapper & model_wrapper, pt::Space & root_space, FindHelper & find_helper, std::vector<std::wstring> & fields,
|
||||
size_t root_field_index, std::vector<Var> & parameters, StreamType & out_stream);
|
||||
void CallSpace(FindHelper & find_helper, std::vector<std::wstring> & fields, std::vector<Var> & parameters, StreamType & out_stream);
|
||||
|
||||
#ifdef EZC_HAS_MORM_LIBRARY
|
||||
bool CallModel(morm::Model & model, const std::wstring & field, std::vector<Var> parameters, StreamType & out_stream, const StreamType & in_stream);
|
||||
CallModelHelper FindLastModelWrapper(morm::ModelWrapper & models_base, std::vector<std::wstring> & fields);
|
||||
void CallModelWrapper(FindHelper & find_helper, std::vector<std::wstring> & fields, std::vector<Var> parameters, StreamType & out_stream, const StreamType & in_stream);
|
||||
bool CallModelField(morm::Model & model, const std::wstring & field, std::vector<Var> parameters, StreamType & out_stream, const StreamType & in_stream);
|
||||
void CallModel(morm::Model & model, FindHelper & find_helper, std::vector<std::wstring> & fields, std::vector<Var> parameters, StreamType & out_stream, const StreamType & in_stream);
|
||||
void FindLastModelWrapper(FindHelper & find_helper, std::vector<std::wstring> & fields);
|
||||
void CallWrapper(FindHelper & find_helper, std::vector<std::wstring> & fields, std::vector<Var> parameters, StreamType & out_stream, const StreamType & in_stream);
|
||||
#endif
|
||||
|
||||
void CallObject(BaseObj<StreamType> & base_obj,
|
||||
|
@ -386,6 +371,7 @@ private:
|
|||
bool IsCurrentParam(std::vector<Var> & parameters);
|
||||
|
||||
void DumpSpaceIfNeeded(std::vector<Var> & parameters, StreamType & out_stream, pt::Space * space);
|
||||
void DumpModelIfNeeded(morm::Model & model, std::vector<Var> & parameters, StreamType & out_stream);
|
||||
|
||||
|
||||
void CopyTmpStreamToOutputStreams(Item::Function & fun, StreamType & ezc_out_tmp_stream, StreamType & previous_stream);
|
||||
|
@ -1031,11 +1017,11 @@ bool Generator<StreamType>::FindInModels(FindHelper & find_helper)
|
|||
{
|
||||
if( pmodels )
|
||||
{
|
||||
morm::ModelWrapper * m = pmodels->Find(*find_helper.fun_name);
|
||||
morm::Wrapper * m = pmodels->Find(*find_helper.fun_name);
|
||||
|
||||
if( m )
|
||||
{
|
||||
find_helper.model_wrapper = m;
|
||||
find_helper.wrapper = m;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -1278,6 +1264,71 @@ void Generator<StreamType>::DumpSpaceIfNeeded(std::vector<Var> & parameters, Str
|
|||
}
|
||||
|
||||
|
||||
template<class StreamType>
|
||||
void Generator<StreamType>::DumpModelIfNeeded(morm::Model & model, std::vector<Var> & parameters, StreamType & out_stream)
|
||||
{
|
||||
bool dump_space = ShouldMakeSpaceDump(parameters);
|
||||
bool dump_json = ShouldMakeJsonDump(parameters);
|
||||
|
||||
if( dump_space || dump_json )
|
||||
{
|
||||
//bool pretty = IsPrettyPrint(parameters);
|
||||
|
||||
if( dump_space )
|
||||
{
|
||||
// not implemented yet
|
||||
}
|
||||
else
|
||||
if( dump_json )
|
||||
{
|
||||
// IMPLEMENT ME
|
||||
// depends on the model_connector (flat connector)
|
||||
// need to be made in a different way
|
||||
pt::TextStream temp_str;
|
||||
model.to_text(temp_str, false, false);
|
||||
out_stream << temp_str;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
template<class StreamType>
|
||||
void Generator<StreamType>::PrintDate(pt::Date * date, std::vector<Var> parameters, StreamType & out_stream)
|
||||
{
|
||||
// IMPROVEME
|
||||
// check for different formats depending on parameters
|
||||
|
||||
date->Serialize(out_stream);
|
||||
}
|
||||
|
||||
|
||||
template<class StreamType>
|
||||
bool Generator<StreamType>::PrintDatePart(pt::Date * date, const std::wstring & field, std::vector<Var> parameters, StreamType & out_stream)
|
||||
{
|
||||
if( field == L"year" )
|
||||
out_stream << date->year;
|
||||
else
|
||||
if( field == L"month" )
|
||||
out_stream << date->month;
|
||||
else
|
||||
if( field == L"day" )
|
||||
out_stream << date->day;
|
||||
else
|
||||
if( field == L"hour" )
|
||||
out_stream << date->hour;
|
||||
else
|
||||
if( field == L"min" )
|
||||
out_stream << date->min;
|
||||
else
|
||||
if( field == L"sec" )
|
||||
out_stream << date->sec;
|
||||
else
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
template<class StreamType>
|
||||
void Generator<StreamType>::CallSpaceObjectForLastField(std::vector<Var> & parameters, StreamType & out_stream, pt::Space * space)
|
||||
|
@ -1304,7 +1355,7 @@ pt::Space * Generator<StreamType>::CallSpaceObjectForMiddleField(std::wstring &
|
|||
|
||||
|
||||
template<class StreamType>
|
||||
void Generator<StreamType>::CallSpaceTableForLastField(morm::ModelWrapper & model_wrapper, std::vector<Var> & parameters, StreamType & out_stream,
|
||||
void Generator<StreamType>::CallSpaceTableForLastField(morm::SpaceWrapper & space_wrapper, std::vector<Var> & parameters, StreamType & out_stream,
|
||||
pt::Space * space, size_t model_wrapper_space_table_index)
|
||||
{
|
||||
pt::Space::TableType * table = space->get_table();
|
||||
|
@ -1312,8 +1363,8 @@ void Generator<StreamType>::CallSpaceTableForLastField(morm::ModelWrapper & mode
|
|||
if( stack_tab[stack_index-1].is_for )
|
||||
{
|
||||
// we are in [for...]statement, increment iterator and check the range
|
||||
model_wrapper.increment_iterator(model_wrapper_space_table_index, table->size());
|
||||
size_t iterator_value = model_wrapper.get_space_iterator_value(model_wrapper_space_table_index);
|
||||
space_wrapper.increment_iterator(model_wrapper_space_table_index, table->size());
|
||||
size_t iterator_value = space_wrapper.get_space_iterator_value(model_wrapper_space_table_index);
|
||||
last_res = (iterator_value < table->size());
|
||||
}
|
||||
else
|
||||
|
@ -1326,7 +1377,7 @@ void Generator<StreamType>::CallSpaceTableForLastField(morm::ModelWrapper & mode
|
|||
|
||||
if( IsCurrentParam(parameters) )
|
||||
{
|
||||
size_t iterator_value = model_wrapper.get_space_iterator_value(model_wrapper_space_table_index);
|
||||
size_t iterator_value = space_wrapper.get_space_iterator_value(model_wrapper_space_table_index);
|
||||
|
||||
if( iterator_value < table->size() )
|
||||
{
|
||||
|
@ -1337,13 +1388,13 @@ void Generator<StreamType>::CallSpaceTableForLastField(morm::ModelWrapper & mode
|
|||
}
|
||||
|
||||
template<class StreamType>
|
||||
pt::Space * Generator<StreamType>::CallSpaceTableForMiddleField(morm::ModelWrapper & model_wrapper, std::wstring & root_space_name, std::vector<std::wstring> & fields,
|
||||
pt::Space * Generator<StreamType>::CallSpaceTableForMiddleField(morm::SpaceWrapper & space_wrapper, std::wstring & root_space_name, std::vector<std::wstring> & fields,
|
||||
size_t field_index, pt::Space * space, size_t model_wrapper_space_table_index)
|
||||
{
|
||||
pt::Space::TableType * table = space->get_table();
|
||||
|
||||
// check the current iterator, if it is correct then select the item from the table
|
||||
size_t iterator_value = model_wrapper.get_space_iterator_value(model_wrapper_space_table_index);
|
||||
size_t iterator_value = space_wrapper.get_space_iterator_value(model_wrapper_space_table_index);
|
||||
|
||||
if( iterator_value < table->size() )
|
||||
{
|
||||
|
@ -1359,14 +1410,13 @@ pt::Space * Generator<StreamType>::CallSpaceTableForMiddleField(morm::ModelWrapp
|
|||
}
|
||||
|
||||
|
||||
|
||||
template<class StreamType>
|
||||
void Generator<StreamType>::CallSpace(morm::ModelWrapper & model_wrapper, pt::Space & root_space, FindHelper & find_helper, std::vector<std::wstring> & fields,
|
||||
size_t root_field_index, std::vector<Var> & parameters, StreamType & out_stream)
|
||||
void Generator<StreamType>::CallSpace(FindHelper & find_helper, std::vector<std::wstring> & fields, std::vector<Var> & parameters, StreamType & out_stream)
|
||||
{
|
||||
pt::Space * space = &root_space;
|
||||
morm::SpaceWrapper * space_wrapper = find_helper.wrapper->space_wrapper;
|
||||
pt::Space * space = space_wrapper->get_space();
|
||||
last_res = false;
|
||||
size_t field_index = root_field_index;
|
||||
size_t field_index = find_helper.field_index;
|
||||
|
||||
/*
|
||||
*
|
||||
|
@ -1395,18 +1445,18 @@ void Generator<StreamType>::CallSpace(morm::ModelWrapper & model_wrapper, pt::Sp
|
|||
else
|
||||
if( space->is_table() )
|
||||
{
|
||||
size_t model_wrapper_space_table_index = field_index - root_field_index;
|
||||
size_t model_wrapper_space_table_index = field_index - find_helper.field_index;
|
||||
|
||||
if( model_wrapper_space_table_index < model_wrapper.space_indices_table_size() )
|
||||
if( model_wrapper_space_table_index < space_wrapper->space_indices_table_size() )
|
||||
{
|
||||
if( is_last_field )
|
||||
{
|
||||
CallSpaceTableForLastField(model_wrapper, parameters, out_stream, space, model_wrapper_space_table_index);
|
||||
CallSpaceTableForLastField(*space_wrapper, parameters, out_stream, space, model_wrapper_space_table_index);
|
||||
field_index += 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
space = CallSpaceTableForMiddleField(model_wrapper, *find_helper.fun_name, fields, field_index, space, model_wrapper_space_table_index);
|
||||
space = CallSpaceTableForMiddleField(*space_wrapper, *find_helper.fun_name, fields, field_index, space, model_wrapper_space_table_index);
|
||||
// don't increment field_index
|
||||
}
|
||||
}
|
||||
|
@ -1437,7 +1487,7 @@ void Generator<StreamType>::CallSpace(morm::ModelWrapper & model_wrapper, pt::Sp
|
|||
#ifdef EZC_HAS_MORM_LIBRARY
|
||||
|
||||
template<class StreamType>
|
||||
bool Generator<StreamType>::CallModel(morm::Model & model, const std::wstring & field, std::vector<Var> parameters, StreamType & out_stream, const StreamType & in_stream)
|
||||
bool Generator<StreamType>::CallModelField(morm::Model & model, const std::wstring & field, std::vector<Var> parameters, StreamType & out_stream, const StreamType & in_stream)
|
||||
{
|
||||
/*
|
||||
* if 'field' is a POD type then 'str' will be used in get_raw_value()
|
||||
|
@ -1471,124 +1521,152 @@ bool Generator<StreamType>::CallModel(morm::Model & model, const std::wstring &
|
|||
}
|
||||
|
||||
|
||||
template<class StreamType>
|
||||
void Generator<StreamType>::CallModel(morm::Model & model, FindHelper & find_helper, std::vector<std::wstring> & fields,
|
||||
std::vector<Var> parameters, StreamType & out_stream, const StreamType & in_stream)
|
||||
{
|
||||
if( find_helper.field_index == fields.size() )
|
||||
{
|
||||
// all fields items are models or models containers
|
||||
DumpModelIfNeeded(model, parameters, out_stream);
|
||||
}
|
||||
else
|
||||
if( find_helper.field_index + 1 == fields.size() )
|
||||
{
|
||||
// last field is not a model nor a models container
|
||||
if( !CallModelField(model, fields[find_helper.field_index], parameters, out_stream, in_stream) )
|
||||
{
|
||||
CreateMsg(L"cannot find ", *find_helper.fun_name, fields, L", unknown property ", fields[find_helper.field_index].c_str(), L" of a model object");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
CreateMsg(L"cannot find ", *find_helper.fun_name, fields, L", ", fields[find_helper.field_index].c_str(), L" is not a model nor a model container nor a space");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
template<class StreamType>
|
||||
typename Generator<StreamType>::CallModelHelper Generator<StreamType>::FindLastModelWrapper(morm::ModelWrapper & models_base, std::vector<std::wstring> & fields)
|
||||
void Generator<StreamType>::FindLastModelWrapper(FindHelper & find_helper, std::vector<std::wstring> & fields)
|
||||
{
|
||||
CallModelHelper helper;
|
||||
helper.field_index = 0;
|
||||
helper.model_wrapper = &models_base;
|
||||
helper.model = nullptr;
|
||||
|
||||
for(; helper.field_index < fields.size() && !helper.model_wrapper->get_space() ; ++helper.field_index)
|
||||
for(find_helper.field_index = 0 ; find_helper.field_index < fields.size() && find_helper.wrapper->has_model_object() ; ++find_helper.field_index)
|
||||
{
|
||||
std::wstring & field = fields[helper.field_index];
|
||||
morm::ModelWrapper * child_model_wrapper = helper.model_wrapper->find_child(field);
|
||||
std::wstring & field = fields[find_helper.field_index];
|
||||
morm::Wrapper * child_wrapper = find_helper.wrapper->find_child(field);
|
||||
|
||||
if( !child_model_wrapper )
|
||||
if( !child_wrapper )
|
||||
{
|
||||
helper.model = helper.model_wrapper->get_model();
|
||||
// this can return null for lists/vectors in a case when the iterator is not pointing to a valid item
|
||||
morm::Model * model = nullptr;
|
||||
|
||||
if( helper.model )
|
||||
if( find_helper.wrapper->model )
|
||||
{
|
||||
child_model_wrapper = helper.model->get_model_wrapper(nullptr, field.c_str(), false);
|
||||
model = find_helper.wrapper->model;
|
||||
}
|
||||
else
|
||||
if( find_helper.wrapper->model_container_wrapper )
|
||||
{
|
||||
model = find_helper.wrapper->model_container_wrapper->get_model();
|
||||
// this can return null for lists/vectors in a case when the iterator is not pointing to a valid item
|
||||
}
|
||||
|
||||
if( child_model_wrapper )
|
||||
if( model )
|
||||
{
|
||||
morm::Wrapper new_wrapper = model->get_wrapper(nullptr, field.c_str());
|
||||
|
||||
if( new_wrapper.has_object() )
|
||||
{
|
||||
helper.model_wrapper->add_child(field, child_model_wrapper);
|
||||
child_wrapper = find_helper.wrapper->add_child(field, new_wrapper);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if( !child_model_wrapper )
|
||||
if( !child_wrapper )
|
||||
break;
|
||||
|
||||
helper.model_wrapper = child_model_wrapper;
|
||||
helper.model = nullptr;
|
||||
find_helper.wrapper = child_wrapper;
|
||||
}
|
||||
|
||||
return helper;
|
||||
}
|
||||
|
||||
|
||||
template<class StreamType>
|
||||
void Generator<StreamType>::CallModelWrapper(FindHelper & find_helper, std::vector<std::wstring> & fields,
|
||||
void Generator<StreamType>::CallWrapper(FindHelper & find_helper, std::vector<std::wstring> & fields,
|
||||
std::vector<Var> parameters, StreamType & out_stream, const StreamType & in_stream)
|
||||
{
|
||||
last_res = false;
|
||||
CallModelHelper helper = FindLastModelWrapper(*find_helper.model_wrapper, fields);
|
||||
FindLastModelWrapper(find_helper, fields);
|
||||
|
||||
// if:
|
||||
// helper.field_index == fields.size() - all fields items are models or models containers
|
||||
// helper.field_index == fields.size()-1 - last field is not a model nor a models container
|
||||
// helper.field_index < fields.size()-1 - incorrect
|
||||
// helper.field_index == fields.size() - all fields items are either models, models containers, space or a date
|
||||
// helper.field_index == fields.size()-1 - only the last field is not known
|
||||
// helper.field_index < fields.size()-1 - there are more not known fields
|
||||
|
||||
//morm::Model * model = helper.model_wrapper->get_model();
|
||||
pt::Space * space = helper.model_wrapper->get_space();
|
||||
bool all_fields_known = (find_helper.field_index == fields.size());
|
||||
bool last_field_not_known = (find_helper.field_index + 1 == fields.size());
|
||||
|
||||
if( helper.field_index + 1 < fields.size() )
|
||||
if( find_helper.wrapper->space_wrapper )
|
||||
{
|
||||
if( space )
|
||||
CallSpace(find_helper, fields, parameters, out_stream);
|
||||
}
|
||||
|
||||
if( find_helper.wrapper->date )
|
||||
{
|
||||
if( all_fields_known )
|
||||
{
|
||||
CallSpace(*helper.model_wrapper, *space, find_helper, fields, helper.field_index, parameters, out_stream);
|
||||
PrintDate(find_helper.wrapper->date, parameters, out_stream);
|
||||
}
|
||||
else
|
||||
if( last_field_not_known )
|
||||
{
|
||||
CreateMsg(L"cannot find ", *find_helper.fun_name, fields, L", ", fields[helper.field_index].c_str(), L" is not a model nor a model container nor a space");
|
||||
last_res = false;
|
||||
}
|
||||
}
|
||||
else
|
||||
if( helper.field_index + 1 == fields.size() )
|
||||
{
|
||||
// last field is not a model nor a models container
|
||||
|
||||
if( helper.model )
|
||||
{
|
||||
if( !CallModel(*helper.model, fields[helper.field_index], parameters, out_stream, in_stream) )
|
||||
// last field is not a model nor a models container
|
||||
if( !PrintDatePart(find_helper.wrapper->date, fields[find_helper.field_index], parameters, out_stream) )
|
||||
{
|
||||
CreateMsg(L"cannot find ", *find_helper.fun_name, fields, L", unknown ", fields[helper.field_index].c_str());
|
||||
CreateMsg(L"cannot find ", *find_helper.fun_name, fields, L", unknown property ", fields[find_helper.field_index].c_str(), L" of date object");
|
||||
}
|
||||
}
|
||||
else
|
||||
if( space )
|
||||
{
|
||||
CallSpace(*helper.model_wrapper, *space, find_helper, fields, helper.field_index, parameters, out_stream);
|
||||
}
|
||||
else
|
||||
{
|
||||
last_res = false;
|
||||
CreateMsg(L"model ", *find_helper.fun_name, fields, L" is not initialized, have you forgotten to use [for ...] statement?"); // a different msg if we are using Space?
|
||||
CreateMsg(L"cannot find ", *find_helper.fun_name, fields, L", ", fields[find_helper.field_index].c_str(), L" is not a model nor a model container nor a space");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// all fields items are models or models containers or last one is Space
|
||||
// this is usualy in [for...] or [if ...] statements
|
||||
|
||||
if( space )
|
||||
if( find_helper.wrapper->model )
|
||||
{
|
||||
CallModel(*find_helper.wrapper->model, find_helper, fields, parameters, out_stream, in_stream);
|
||||
}
|
||||
|
||||
if( find_helper.wrapper->model_container_wrapper )
|
||||
{
|
||||
morm::Model * model = find_helper.wrapper->model_container_wrapper->get_model();
|
||||
|
||||
if( model )
|
||||
{
|
||||
CallSpace(*helper.model_wrapper, *space, find_helper, fields, helper.field_index, parameters, out_stream);
|
||||
CallModel(*model, find_helper, fields, parameters, out_stream, in_stream);
|
||||
}
|
||||
else
|
||||
{
|
||||
if( last_field_not_known )
|
||||
{
|
||||
CreateMsg(L"model ", *find_helper.fun_name, fields, L" is not initialized, have you forgotten to use [for ...] statement?");
|
||||
}
|
||||
}
|
||||
|
||||
if( all_fields_known )
|
||||
{
|
||||
if( stack_tab[stack_index-1].is_for )
|
||||
{
|
||||
// helper.model_wrapper is always set
|
||||
helper.model_wrapper->increment_iterator();
|
||||
helper.model_wrapper->clear_childs();
|
||||
last_res = helper.model_wrapper->is_iterator_correct();
|
||||
find_helper.wrapper->model_container_wrapper->increment_iterator();
|
||||
find_helper.wrapper->clear_childs();
|
||||
last_res = find_helper.wrapper->model_container_wrapper->is_iterator_correct();
|
||||
}
|
||||
else
|
||||
{
|
||||
last_res = !helper.model_wrapper->is_container_empty();
|
||||
last_res = !find_helper.wrapper->model_container_wrapper->is_container_empty();
|
||||
}
|
||||
|
||||
// add support for "dump" parameter
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
@ -1714,8 +1792,8 @@ std::vector<Var> parameters;
|
|||
}
|
||||
|
||||
#ifdef EZC_HAS_MORM_LIBRARY
|
||||
if( find_helper.model_wrapper )
|
||||
CallModelWrapper(find_helper, item_fun.fields, parameters, out_stream, in_stream);
|
||||
if( find_helper.wrapper )
|
||||
CallWrapper(find_helper, item_fun.fields, parameters, out_stream, in_stream);
|
||||
else
|
||||
#endif
|
||||
if( find_helper.base_obj )
|
||||
|
|
|
@ -59,15 +59,6 @@ Models::~Models()
|
|||
|
||||
void Models::Clear()
|
||||
{
|
||||
for(auto & map_item : models_map)
|
||||
{
|
||||
if( map_item.second->should_be_auto_removed() )
|
||||
{
|
||||
delete map_item.second;
|
||||
map_item.second = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
models_map.clear();
|
||||
}
|
||||
|
||||
|
@ -75,40 +66,59 @@ void Models::Clear()
|
|||
|
||||
void Models::Add(const std::wstring & name, morm::Model & model)
|
||||
{
|
||||
morm::ModelWrapper * model_wrapper = new morm::ModelWrapperModel(&model);
|
||||
models_map[name] = model_wrapper;
|
||||
morm::Wrapper wrapper;
|
||||
wrapper.model = &model;
|
||||
models_map[name] = wrapper;
|
||||
}
|
||||
|
||||
|
||||
void Models::Add(const std::wstring & name, morm::Model * model)
|
||||
{
|
||||
morm::ModelWrapper * model_wrapper = new morm::ModelWrapperModel(model);
|
||||
models_map[name] = model_wrapper;
|
||||
morm::Wrapper wrapper;
|
||||
wrapper.model = model;
|
||||
models_map[name] = wrapper;
|
||||
}
|
||||
|
||||
|
||||
void Models::Add(const std::wstring & name, pt::Space & space)
|
||||
{
|
||||
morm::ModelWrapper * model_wrapper = new morm::ModelWrapperSpace(&space);
|
||||
models_map[name] = model_wrapper;
|
||||
morm::Wrapper wrapper;
|
||||
wrapper.space_wrapper = new morm::SpaceWrapper(&space);
|
||||
models_map[name] = wrapper;
|
||||
}
|
||||
|
||||
|
||||
void Models::Add(const std::wstring & name, pt::Space * space)
|
||||
{
|
||||
morm::ModelWrapper * model_wrapper = new morm::ModelWrapperSpace(space);
|
||||
models_map[name] = model_wrapper;
|
||||
morm::Wrapper wrapper;
|
||||
wrapper.space_wrapper = new morm::SpaceWrapper(space);
|
||||
models_map[name] = wrapper;
|
||||
}
|
||||
|
||||
|
||||
void Models::Add(const std::wstring & name, pt::Date & date)
|
||||
{
|
||||
morm::Wrapper wrapper;
|
||||
wrapper.date = &date;
|
||||
models_map[name] = wrapper;
|
||||
}
|
||||
|
||||
morm::ModelWrapper * Models::Find(const std::wstring & name)
|
||||
|
||||
void Models::Add(const std::wstring & name, pt::Date * date)
|
||||
{
|
||||
morm::Wrapper wrapper;
|
||||
wrapper.date = date;
|
||||
models_map[name] = wrapper;
|
||||
}
|
||||
|
||||
|
||||
morm::Wrapper * Models::Find(const std::wstring & name)
|
||||
{
|
||||
auto iterator = models_map.find(name);
|
||||
|
||||
if( iterator != models_map.end() )
|
||||
{
|
||||
return iterator->second;
|
||||
return &iterator->second;
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
|
|
49
src/models.h
49
src/models.h
|
@ -40,7 +40,7 @@
|
|||
|
||||
#ifdef EZC_HAS_MORM_LIBRARY
|
||||
|
||||
#include "modelwrapper.h"
|
||||
#include "wrapper.h"
|
||||
#include "funinfo.h"
|
||||
#include "space/space.h"
|
||||
|
||||
|
@ -62,69 +62,80 @@ public:
|
|||
void Add(const std::wstring & name, pt::Space & space);
|
||||
void Add(const std::wstring & name, pt::Space * space);
|
||||
|
||||
void Add(const std::wstring & name, pt::Date & space);
|
||||
void Add(const std::wstring & name, pt::Date * space);
|
||||
|
||||
template<typename VectorType>
|
||||
void Add(const std::wstring & name, std::vector<VectorType> & container)
|
||||
{
|
||||
morm::ModelWrapper * model_wrapper = new morm::ModelWrapperVector<VectorType>(&container);
|
||||
models_map[name] = model_wrapper;
|
||||
morm::Wrapper wrapper;
|
||||
wrapper.model_container_wrapper = new morm::ModelWrapperVector<VectorType>(&container);
|
||||
models_map[name] = wrapper;
|
||||
}
|
||||
|
||||
template<typename VectorType>
|
||||
void Add(const std::wstring & name, std::vector<VectorType> * container)
|
||||
{
|
||||
morm::ModelWrapper * model_wrapper = new morm::ModelWrapperVector<VectorType>(container);
|
||||
models_map[name] = model_wrapper;
|
||||
morm::Wrapper wrapper;
|
||||
wrapper.model_container_wrapper = new morm::ModelWrapperVector<VectorType>(container);
|
||||
models_map[name] = wrapper;
|
||||
}
|
||||
|
||||
template<typename VectorType>
|
||||
void Add(const std::wstring & name, std::vector<VectorType*> & container)
|
||||
{
|
||||
morm::ModelWrapper * model_wrapper = new morm::ModelWrapperVectorPointer<VectorType>(&container);
|
||||
models_map[name] = model_wrapper;
|
||||
morm::Wrapper wrapper;
|
||||
wrapper.model_container_wrapper = new morm::ModelWrapperVectorPointer<VectorType>(&container);
|
||||
models_map[name] = wrapper;
|
||||
}
|
||||
|
||||
template<typename VectorType>
|
||||
void Add(const std::wstring & name, std::vector<VectorType*> * container)
|
||||
{
|
||||
morm::ModelWrapper * model_wrapper = new morm::ModelWrapperVectorPointer<VectorType>(container);
|
||||
models_map[name] = model_wrapper;
|
||||
morm::Wrapper wrapper;
|
||||
wrapper.model_container_wrapper = new morm::ModelWrapperVectorPointer<VectorType>(container);
|
||||
models_map[name] = wrapper;
|
||||
}
|
||||
|
||||
template<typename ListType>
|
||||
void Add(const std::wstring & name, std::list<ListType> & container)
|
||||
{
|
||||
morm::ModelWrapper * model_wrapper = new morm::ModelWrapperList<ListType>(&container);
|
||||
models_map[name] = model_wrapper;
|
||||
morm::Wrapper wrapper;
|
||||
wrapper.model_container_wrapper = new morm::ModelWrapperList<ListType>(&container);
|
||||
models_map[name] = wrapper;
|
||||
}
|
||||
|
||||
template<typename ListType>
|
||||
void Add(const std::wstring & name, std::list<ListType> * container)
|
||||
{
|
||||
morm::ModelWrapper * model_wrapper = new morm::ModelWrapperList<ListType>(container);
|
||||
models_map[name] = model_wrapper;
|
||||
morm::Wrapper wrapper;
|
||||
wrapper.model_container_wrapper = new morm::ModelWrapperList<ListType>(container);
|
||||
models_map[name] = wrapper;
|
||||
}
|
||||
|
||||
template<typename ListType>
|
||||
void Add(const std::wstring & name, std::list<ListType*> & container)
|
||||
{
|
||||
morm::ModelWrapper * model_wrapper = new morm::ModelWrapperListPointer<ListType>(&container);
|
||||
models_map[name] = model_wrapper;
|
||||
morm::Wrapper wrapper;
|
||||
wrapper.model_container_wrapper = new morm::ModelWrapperListPointer<ListType>(&container);
|
||||
models_map[name] = wrapper;
|
||||
}
|
||||
|
||||
template<typename ListType>
|
||||
void Add(const std::wstring & name, std::list<ListType*> * container)
|
||||
{
|
||||
morm::ModelWrapper * model_wrapper = new morm::ModelWrapperListPointer<ListType>(container);
|
||||
models_map[name] = model_wrapper;
|
||||
morm::Wrapper wrapper;
|
||||
wrapper.model_container_wrapper = new morm::ModelWrapperListPointer<ListType>(container);
|
||||
models_map[name] = wrapper;
|
||||
}
|
||||
|
||||
morm::ModelWrapper * Find(const std::wstring & name);
|
||||
morm::Wrapper * Find(const std::wstring & name);
|
||||
void Clear();
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
std::map<std::wstring, morm::ModelWrapper*> models_map;
|
||||
std::map<std::wstring, morm::Wrapper> models_map;
|
||||
|
||||
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue