From 526d57b72e1410db78041efba76e5adc7c414af3 Mon Sep 17 00:00:00 2001 From: Tomasz Sowa Date: Wed, 23 Jun 2021 06:53:43 +0200 Subject: [PATCH] added possibility to take a Space struct in Models: Models::Add(const std::wstring & name, pt::Space & space); --- src/generator.h | 31 ++++++++++++++++++------------- src/models.cpp | 23 +++++++++++++++++++---- src/models.h | 36 ++++++++++++++++++++---------------- 3 files changed, 57 insertions(+), 33 deletions(-) diff --git a/src/generator.h b/src/generator.h index 276f5de..bad4940 100644 --- a/src/generator.h +++ b/src/generator.h @@ -1256,12 +1256,7 @@ void Generator::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::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 } } } diff --git a/src/models.cpp b/src/models.cpp index 151726e..a2fb8b4 100644 --- a/src/models.cpp +++ b/src/models.cpp @@ -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); diff --git a/src/models.h b/src/models.h index e492837..61204d9 100644 --- a/src/models.h +++ b/src/models.h @@ -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 void Add(const std::wstring & name, std::vector & container) { - morm::ModelWrapper * models_base = new morm::ModelWrapperVector(&container); - models_map[name] = models_base; + morm::ModelWrapper * model_wrapper = new morm::ModelWrapperVector(&container); + models_map[name] = model_wrapper; } template void Add(const std::wstring & name, std::vector * container) { - morm::ModelWrapper * models_base = new morm::ModelWrapperVector(container); - models_map[name] = models_base; + morm::ModelWrapper * model_wrapper = new morm::ModelWrapperVector(container); + models_map[name] = model_wrapper; } template void Add(const std::wstring & name, std::vector & container) { - morm::ModelWrapper * models_base = new morm::ModelWrapperVectorPointer(&container); - models_map[name] = models_base; + morm::ModelWrapper * model_wrapper = new morm::ModelWrapperVectorPointer(&container); + models_map[name] = model_wrapper; } template void Add(const std::wstring & name, std::vector * container) { - morm::ModelWrapper * models_base = new morm::ModelWrapperVectorPointer(container); - models_map[name] = models_base; + morm::ModelWrapper * model_wrapper = new morm::ModelWrapperVectorPointer(container); + models_map[name] = model_wrapper; } template void Add(const std::wstring & name, std::list & container) { - morm::ModelWrapper * models_base = new morm::ModelWrapperList(&container); - models_map[name] = models_base; + morm::ModelWrapper * model_wrapper = new morm::ModelWrapperList(&container); + models_map[name] = model_wrapper; } template void Add(const std::wstring & name, std::list * container) { - morm::ModelWrapper * models_base = new morm::ModelWrapperList(container); - models_map[name] = models_base; + morm::ModelWrapper * model_wrapper = new morm::ModelWrapperList(container); + models_map[name] = model_wrapper; } template void Add(const std::wstring & name, std::list & container) { - morm::ModelWrapper * models_base = new morm::ModelWrapperListPointer(&container); - models_map[name] = models_base; + morm::ModelWrapper * model_wrapper = new morm::ModelWrapperListPointer(&container); + models_map[name] = model_wrapper; } template void Add(const std::wstring & name, std::list * container) { - morm::ModelWrapper * models_base = new morm::ModelWrapperListPointer(container); - models_map[name] = models_base; + morm::ModelWrapper * model_wrapper = new morm::ModelWrapperListPointer(container); + models_map[name] = model_wrapper; } morm::ModelWrapper * Find(const std::wstring & name);