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:
Tomasz Sowa 2021-07-01 23:21:20 +02:00
parent acb42f453c
commit 849b3e9ecc
3 changed files with 250 additions and 151 deletions

View File

@ -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 )

View File

@ -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;

View File

@ -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;
};