added possibility to take a Space struct in Models: Models::Add(const std::wstring & name, pt::Space & space);

This commit is contained in:
Tomasz Sowa 2021-06-23 06:53:43 +02:00
parent eda276356f
commit 526d57b72e
3 changed files with 57 additions and 33 deletions

View File

@ -1256,12 +1256,7 @@ void Generator<StreamType>::CallSpace(morm::ModelWrapper & model_wrapper, pt::Sp
for(size_t i=field_index ; i < fields.size() + 1 ; ++i)
{
bool is_last_field = (i == fields.size());
if( i == 0 )
field = find_helper.fun_name;
else
field = &fields[i - 1];
field = (i == 0) ? find_helper.fun_name : &fields[i - 1];
if( space->is_object() )
{
@ -1498,18 +1493,28 @@ void Generator<StreamType>::CallModelWrapper(FindHelper & find_helper, std::vect
}
else
{
// all fields items are models or models containers
// all fields items are models or models containers or last one is Space
// this is usualy in [for...] or [if ...] statements
if( stack_tab[stack_index-1].is_for )
if( space )
{
// helper.model_wrapper is always set
helper.model_wrapper->increment_iterator();
helper.model_wrapper->clear_childs();
last_res = helper.model_wrapper->is_iterator_correct();
CallSpace(*helper.model_wrapper, *space, find_helper, fields, helper.field_index, parameters, out_stream);
}
else
{
last_res = !helper.model_wrapper->is_container_empty();
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();
}
else
{
last_res = !helper.model_wrapper->is_container_empty();
}
// add support for "dump" parameter
}
}
}

View File

@ -75,18 +75,33 @@ void Models::Clear()
void Models::Add(const std::wstring & name, morm::Model & model)
{
morm::ModelWrapper * models_base = new morm::ModelWrapperModel(&model);
models_map[name] = models_base;
morm::ModelWrapper * model_wrapper = new morm::ModelWrapperModel(&model);
models_map[name] = model_wrapper;
}
void Models::Add(const std::wstring & name, morm::Model * model)
{
morm::ModelWrapper * models_base = new morm::ModelWrapperModel(model);
models_map[name] = models_base;
morm::ModelWrapper * model_wrapper = new morm::ModelWrapperModel(model);
models_map[name] = model_wrapper;
}
void Models::Add(const std::wstring & name, pt::Space & space)
{
morm::ModelWrapper * model_wrapper = new morm::ModelWrapperSpace(&space);
models_map[name] = model_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::ModelWrapper * Models::Find(const std::wstring & name)
{
auto iterator = models_map.find(name);

View File

@ -42,6 +42,7 @@
#include "modelwrapper.h"
#include "funinfo.h"
#include "space/space.h"
namespace Ezc
@ -58,60 +59,63 @@ public:
void Add(const std::wstring & name, morm::Model & model);
void Add(const std::wstring & name, morm::Model * model);
void Add(const std::wstring & name, pt::Space & space);
void Add(const std::wstring & name, pt::Space * space);
template<typename VectorType>
void Add(const std::wstring & name, std::vector<VectorType> & container)
{
morm::ModelWrapper * models_base = new morm::ModelWrapperVector<VectorType>(&container);
models_map[name] = models_base;
morm::ModelWrapper * model_wrapper = new morm::ModelWrapperVector<VectorType>(&container);
models_map[name] = model_wrapper;
}
template<typename VectorType>
void Add(const std::wstring & name, std::vector<VectorType> * container)
{
morm::ModelWrapper * models_base = new morm::ModelWrapperVector<VectorType>(container);
models_map[name] = models_base;
morm::ModelWrapper * model_wrapper = new morm::ModelWrapperVector<VectorType>(container);
models_map[name] = model_wrapper;
}
template<typename VectorType>
void Add(const std::wstring & name, std::vector<VectorType*> & container)
{
morm::ModelWrapper * models_base = new morm::ModelWrapperVectorPointer<VectorType>(&container);
models_map[name] = models_base;
morm::ModelWrapper * model_wrapper = new morm::ModelWrapperVectorPointer<VectorType>(&container);
models_map[name] = model_wrapper;
}
template<typename VectorType>
void Add(const std::wstring & name, std::vector<VectorType*> * container)
{
morm::ModelWrapper * models_base = new morm::ModelWrapperVectorPointer<VectorType>(container);
models_map[name] = models_base;
morm::ModelWrapper * model_wrapper = new morm::ModelWrapperVectorPointer<VectorType>(container);
models_map[name] = model_wrapper;
}
template<typename ListType>
void Add(const std::wstring & name, std::list<ListType> & container)
{
morm::ModelWrapper * models_base = new morm::ModelWrapperList<ListType>(&container);
models_map[name] = models_base;
morm::ModelWrapper * model_wrapper = new morm::ModelWrapperList<ListType>(&container);
models_map[name] = model_wrapper;
}
template<typename ListType>
void Add(const std::wstring & name, std::list<ListType> * container)
{
morm::ModelWrapper * models_base = new morm::ModelWrapperList<ListType>(container);
models_map[name] = models_base;
morm::ModelWrapper * model_wrapper = new morm::ModelWrapperList<ListType>(container);
models_map[name] = model_wrapper;
}
template<typename ListType>
void Add(const std::wstring & name, std::list<ListType*> & container)
{
morm::ModelWrapper * models_base = new morm::ModelWrapperListPointer<ListType>(&container);
models_map[name] = models_base;
morm::ModelWrapper * model_wrapper = new morm::ModelWrapperListPointer<ListType>(&container);
models_map[name] = model_wrapper;
}
template<typename ListType>
void Add(const std::wstring & name, std::list<ListType*> * container)
{
morm::ModelWrapper * models_base = new morm::ModelWrapperListPointer<ListType>(container);
models_map[name] = models_base;
morm::ModelWrapper * model_wrapper = new morm::ModelWrapperListPointer<ListType>(container);
models_map[name] = model_wrapper;
}
morm::ModelWrapper * Find(const std::wstring & name);