I forget to add modified files to previous commit

(added support for Space tables, removed Models class)
This commit is contained in:
Tomasz Sowa 2021-11-22 15:44:37 +01:00
parent c2c12d55d0
commit 943026a3ac
5 changed files with 230 additions and 104 deletions

View File

@ -25,7 +25,6 @@ cache.o: ../../pikotools/src/textstream/types.h
cache.o: ../../pikotools/src/membuffer/membuffer.h cache.o: ../../pikotools/src/membuffer/membuffer.h
cache.o: ../../pikotools/src/textstream/types.h objects.h blocks.h cache.o: ../../pikotools/src/textstream/types.h objects.h blocks.h
item.o: item.h item.o: item.h
models.o: models.h
pattern.o: pattern.h item.h cache.h functions.h pattern.o: pattern.h item.h cache.h functions.h
pattern.o: ../../pikotools/src/utf8/utf8.h pattern.o: ../../pikotools/src/utf8/utf8.h
pattern.o: ../../pikotools/src/textstream/stream.h pattern.o: ../../pikotools/src/textstream/stream.h

View File

@ -1 +1 @@
o = blocks.o cache.o item.o models.o pattern.o patternparser.o var.o o = blocks.o cache.o item.o pattern.o patternparser.o var.o

View File

@ -48,7 +48,6 @@
#include "objects.h" #include "objects.h"
#include "outstreams.h" #include "outstreams.h"
#include "expressionparser.h" #include "expressionparser.h"
#include "models.h"
#include "log/log.h" #include "log/log.h"
#include "utf8/utf8.h" #include "utf8/utf8.h"
#include "vars.h" #include "vars.h"
@ -84,7 +83,7 @@ public:
void SetLogger(pt::Log & logger); void SetLogger(pt::Log & logger);
#ifdef EZC_HAS_MORM_LIBRARY #ifdef EZC_HAS_MORM_LIBRARY
void SetModels(Models & models); //void SetModels(Models & models);
#endif #endif
void SetMax(size_t max_items_, size_t max_for_items_); void SetMax(size_t max_items_, size_t max_for_items_);
@ -235,7 +234,7 @@ private:
#ifdef EZC_HAS_MORM_LIBRARY #ifdef EZC_HAS_MORM_LIBRARY
Models * pmodels; //Models * pmodels;
#endif #endif
Vars<StreamType> * pvars; Vars<StreamType> * pvars;
@ -469,7 +468,7 @@ Generator<StreamType, is_pikotools_stream, is_autoescape_stream>::Generator() :
plog = nullptr; plog = nullptr;
#ifdef EZC_HAS_MORM_LIBRARY #ifdef EZC_HAS_MORM_LIBRARY
pmodels = nullptr; //pmodels = nullptr;
#endif #endif
max_items = 50000; max_items = 50000;
@ -506,7 +505,7 @@ Generator<StreamType, is_pikotools_stream, is_autoescape_stream>::operator=(cons
plog = n.plog; plog = n.plog;
#ifdef EZC_HAS_MORM_LIBRARY #ifdef EZC_HAS_MORM_LIBRARY
pmodels = n.pmodels; //pmodels = n.pmodels;
#endif #endif
max_items = n.max_items; max_items = n.max_items;
@ -576,11 +575,11 @@ void Generator<StreamType, is_pikotools_stream, is_autoescape_stream>::SetLogger
#ifdef EZC_HAS_MORM_LIBRARY #ifdef EZC_HAS_MORM_LIBRARY
template<class StreamType, bool is_pikotools_stream, bool is_autoescape_stream> //template<class StreamType, bool is_pikotools_stream, bool is_autoescape_stream>
void Generator<StreamType, is_pikotools_stream, is_autoescape_stream>::SetModels(Models & models) //void Generator<StreamType, is_pikotools_stream, is_autoescape_stream>::SetModels(Models & models)
{ //{
pmodels = &models; // pmodels = &models;
} //}
#endif #endif
@ -1340,24 +1339,19 @@ void Generator<StreamType, is_pikotools_stream, is_autoescape_stream>::CallSpace
morm::SpaceWrapper & space_wrapper, pt::Space & space, FindHelper & find_helper, size_t model_wrapper_space_table_index) morm::SpaceWrapper & space_wrapper, pt::Space & space, FindHelper & find_helper, size_t model_wrapper_space_table_index)
{ {
pt::Space::TableType * table = space.get_table(); pt::Space::TableType * table = space.get_table();
find_helper.result->set(space_wrapper);
if( is_generating_for ) if( is_generating_for )
{ {
// we are in [for...]statement, increment iterator and check the range // we are in [for...]statement, increment iterator and check the range
space_wrapper.increment_iterator(model_wrapper_space_table_index, table->size()); space_wrapper.increment_iterator(model_wrapper_space_table_index, table->size());
space_wrapper.invalidate_iterators(model_wrapper_space_table_index + 1); space_wrapper.invalidate_iterators(model_wrapper_space_table_index + 1);
//size_t iterator_value = space_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);
space_wrapper.get_space_iterator_value(model_wrapper_space_table_index); bool for_status = (iterator_value < table->size());
//last_res = (iterator_value < table->size()); space_wrapper.set_last_for_loop_status(for_status);
}
else
{
// we are not in [for..], it can be for example [if...], return true if the table is not empty
// if we are in [if-def...] - then last_res is set later in MakeTextIfDef(Item & item) when Call() method returns
//last_res = !table->empty();
} }
if( !IsTestingFunctionExistence() ) if( !IsTestingFunctionExistence() && find_helper.is_last_field() )
{ {
DumpSpaceIfNeeded(space, find_helper); DumpSpaceIfNeeded(space, find_helper);
@ -1432,33 +1426,19 @@ bool Generator<StreamType, is_pikotools_stream, is_autoescape_stream>::CallSpace
{ {
pt::Space * space = space_wrapper.get_space(); pt::Space * space = space_wrapper.get_space();
size_t model_wrapper_space_table_index = 0; size_t model_wrapper_space_table_index = 0;
// bool status = false; space_wrapper.set_last_for_loop_status(false);
/* while( find_helper.field_index < find_helper.fields.size() )
*
* we are iterating through such objects:
* [root_space, fields[field_index], fields[field_index+1], fields[field_index+2], fields[field_index+3] ...]
* the first item is the root_space with a find_helper.fun_name name
*
*/
while( (find_helper.field_index < find_helper.fields.size() + 1) && space )
{ {
if( space->is_object() ) if( space->is_object() )
{ {
if( find_helper.field_index < find_helper.fields.size() ) const std::wstring & next_field = find_helper.fields[find_helper.field_index];
{ pt::Space * next_space = space->get_space(next_field);
const std::wstring & next_field = find_helper.fields[find_helper.field_index];
pt::Space * next_space = space->get_space(next_field);
if( next_space ) if( next_space )
{ {
find_helper.field_index += 1; find_helper.field_index += 1;
space = next_space; space = next_space;
}
else
{
break;
}
} }
else else
{ {
@ -1470,76 +1450,53 @@ bool Generator<StreamType, is_pikotools_stream, is_autoescape_stream>::CallSpace
{ {
if( model_wrapper_space_table_index < space_wrapper.space_indices_table_size() ) if( model_wrapper_space_table_index < space_wrapper.space_indices_table_size() )
{ {
if( find_helper.is_last_field() ) space = CallSpaceTableForMiddleField(space_wrapper, *space, find_helper, model_wrapper_space_table_index);
if( !space )
{ {
CallSpaceTableForLastField(space_wrapper, *space, find_helper, model_wrapper_space_table_index); // a [for ...] was not used beforehand
find_helper.field_index += 1; return false;
// status = true;
} }
else
// increment field_index only if next_field is 'this' and space is not an object
if( !space->is_object() )
{ {
space = CallSpaceTableForMiddleField(space_wrapper, *space, find_helper, model_wrapper_space_table_index); std::wstring & next_field = find_helper.fields[find_helper.field_index];
// increment field_index only if next_field is 'this' and space is not an object
if( space && !space->is_object() ) if( next_field == L"this" )
{ {
std::wstring & next_field = find_helper.fields[find_helper.field_index]; find_helper.field_index += 1;
if( next_field == L"this" )
{
find_helper.field_index += 1;
}
} }
} }
} }
else else
{ {
CreateMsg(L"", find_helper.name, find_helper.fields, find_helper.field_index, L" exceeded the maximum number of fields for a space object"); CreateMsg(L"", find_helper.name, find_helper.fields, find_helper.field_index, L" exceeded the maximum number of fields for a space object");
space = nullptr; return false;
} }
} }
else else
{ {
// PrintLastSpaceField(*space, find_helper);
// status = true;
// // increment field_index here?
break; break;
// if( is_last_field )
// {
// if( !IsTestingFunctionExistence() )
// {
// PrintLastSpaceField(space, result, parameters);
// }
//
// field_index += 1;
// }
// else
// {
// if( !IsTestingFunctionExistence() )
// {
// CreateMsg(L"", name, fields, field_index, L" of a space is not an object nor a table");
// }
//
// space = nullptr;
// }
} }
model_wrapper_space_table_index += 1; model_wrapper_space_table_index += 1;
} }
if( space ) if( space->is_table() )
{
CallSpaceTableForLastField(space_wrapper, *space, find_helper, model_wrapper_space_table_index);
}
else
if( !IsTestingFunctionExistence() )
{ {
PrintLastSpaceField(*space, find_helper); PrintLastSpaceField(*space, find_helper);
if( !IsTestingFunctionExistence() ) if( find_helper.is_last_field() )
{
DumpSpaceIfNeeded(*space, find_helper); DumpSpaceIfNeeded(*space, find_helper);
}
} }
return true; return true;
//return status;
} }
@ -1882,7 +1839,7 @@ void Generator<StreamType, is_pikotools_stream, is_autoescape_stream>::FindVaria
template<class StreamType, bool is_pikotools_stream, bool is_autoescape_stream> template<class StreamType, bool is_pikotools_stream, bool is_autoescape_stream>
void Generator<StreamType, is_pikotools_stream, is_autoescape_stream>::EvaluateVariable(FindHelper & find_helper) void Generator<StreamType, is_pikotools_stream, is_autoescape_stream>::EvaluateVariable(FindHelper & find_helper)
{ {
bool was_child_found = false; Var<StreamType> * result_child = nullptr;
find_helper.found = false; find_helper.found = false;
find_helper.current_var = nullptr; find_helper.current_var = nullptr;
const std::wstring & name = find_helper.current_name(); const std::wstring & name = find_helper.current_name();
@ -1890,8 +1847,8 @@ void Generator<StreamType, is_pikotools_stream, is_autoescape_stream>::EvaluateV
if( find_helper.previous_var ) if( find_helper.previous_var )
{ {
find_helper.current_var = find_helper.previous_var->find_child(name); find_helper.current_var = find_helper.previous_var->find_child(name);
result_child = find_helper.current_var;
find_helper.found = (find_helper.current_var != nullptr); find_helper.found = (find_helper.current_var != nullptr);
was_child_found = (find_helper.current_var != nullptr);
if( find_helper.current_var ) if( find_helper.current_var )
*find_helper.result = *find_helper.current_var; *find_helper.result = *find_helper.current_var;
@ -1955,7 +1912,7 @@ void Generator<StreamType, is_pikotools_stream, is_autoescape_stream>::EvaluateV
} }
} }
if( find_helper.previous_var && !was_child_found ) if( find_helper.previous_var && !result_child )
{ {
// may only model_container_wrapper and space_wrapper here? // may only model_container_wrapper and space_wrapper here?
if( find_helper.result->type == Var<StreamType>::TYPE_MODEL || if( find_helper.result->type == Var<StreamType>::TYPE_MODEL ||
@ -1963,13 +1920,16 @@ void Generator<StreamType, is_pikotools_stream, is_autoescape_stream>::EvaluateV
find_helper.result->type == Var<StreamType>::TYPE_SPACE_WRAPPER || find_helper.result->type == Var<StreamType>::TYPE_SPACE_WRAPPER ||
find_helper.result->type == Var<StreamType>::TYPE_FUNCTION ) find_helper.result->type == Var<StreamType>::TYPE_FUNCTION )
{ {
Var<StreamType> * previous = find_helper.previous_var->add_child(name, *find_helper.result); result_child = find_helper.previous_var->add_child(name, *find_helper.result);
}
}
if( find_helper.result->type == Var<StreamType>::TYPE_SPACE_WRAPPER && find_helper.result->space_wrapper ) if( result_child )
{ {
find_helper.result->clear(); if( result_child->type == Var<StreamType>::TYPE_SPACE_WRAPPER && result_child->space_wrapper )
find_helper.found = CallSpace(*previous->space_wrapper, find_helper); {
} find_helper.result->clear();
find_helper.found = CallSpace(*result_child->space_wrapper, find_helper);
} }
} }
@ -2722,19 +2682,16 @@ void Generator<StreamType, is_pikotools_stream, is_autoescape_stream>::MakeTextF
break; break;
} }
else else
// if( result.type == Var<StreamType>::Type::TYPE_SPACE_WRAPPER ) if( result.type == Var<StreamType>::Type::TYPE_SPACE_WRAPPER )
// { {
// if( !result.space_wrapper->is_iterator_correct() ) if( !result.space_wrapper->get_last_for_loop_status() )
// break; break;
// } }
// else else
{ {
break; break;
} }
// if( !result.to_bool() )
// break;
if( !item.item_tab.empty() ) if( !item.item_tab.empty() )
MakeText( *item.item_tab[0] ); // should be only one item MakeText( *item.item_tab[0] ); // should be only one item
} }

View File

@ -152,6 +152,13 @@ public:
template<typename ModelType> template<typename ModelType>
void set(std::list<ModelType> & model_container); void set(std::list<ModelType> & model_container);
template<typename ModelType>
void set(std::vector<ModelType*> & model_container);
template<typename ModelType>
void set(std::list<ModelType*> & model_container);
void set(morm::SpaceWrapper & space_wrapper);
bool is_equal(const char * str) const; bool is_equal(const char * str) const;
bool is_equal(const wchar_t * str) const; bool is_equal(const wchar_t * str) const;
@ -394,10 +401,15 @@ bool Var<StreamType>::to_bool() const
return space_local.to_bool(); return space_local.to_bool();
case TYPE_STREAM: case TYPE_STREAM:
return !stream.empty();
case TYPE_FUNCTION: case TYPE_FUNCTION:
case TYPE_DATE: case TYPE_DATE:
case TYPE_MODEL: case TYPE_MODEL:
break;
case TYPE_SPACE_WRAPPER: case TYPE_SPACE_WRAPPER:
return space_wrapper->get_space()->to_bool();
break; break;
case TYPE_MODEL_CONTAINER_WRAPPER: case TYPE_MODEL_CONTAINER_WRAPPER:
@ -414,6 +426,7 @@ bool Var<StreamType>::to_bool() const
template<typename StreamType> template<typename StreamType>
void Var<StreamType>::set(const char * str) void Var<StreamType>::set(const char * str)
{ {
clear();
type = TYPE_SPACE_LOCAL; type = TYPE_SPACE_LOCAL;
space_local.set(str); space_local.set(str);
} }
@ -422,6 +435,7 @@ void Var<StreamType>::set(const char * str)
template<typename StreamType> template<typename StreamType>
void Var<StreamType>::set(const wchar_t * str) void Var<StreamType>::set(const wchar_t * str)
{ {
clear();
type = TYPE_SPACE_LOCAL; type = TYPE_SPACE_LOCAL;
space_local.set(str); space_local.set(str);
} }
@ -430,6 +444,7 @@ void Var<StreamType>::set(const wchar_t * str)
template<typename StreamType> template<typename StreamType>
void Var<StreamType>::set(const std::string & str) void Var<StreamType>::set(const std::string & str)
{ {
clear();
type = TYPE_SPACE_LOCAL; type = TYPE_SPACE_LOCAL;
space_local.set(str); space_local.set(str);
} }
@ -438,6 +453,7 @@ void Var<StreamType>::set(const std::string & str)
template<typename StreamType> template<typename StreamType>
void Var<StreamType>::set(const std::wstring & str) void Var<StreamType>::set(const std::wstring & str)
{ {
clear();
type = TYPE_SPACE_LOCAL; type = TYPE_SPACE_LOCAL;
space_local.set(str); space_local.set(str);
} }
@ -446,6 +462,7 @@ void Var<StreamType>::set(const std::wstring & str)
template<typename StreamType> template<typename StreamType>
void Var<StreamType>::set(char val) void Var<StreamType>::set(char val)
{ {
clear();
type = TYPE_SPACE_LOCAL; type = TYPE_SPACE_LOCAL;
space_local.set(str); space_local.set(str);
} }
@ -453,6 +470,7 @@ void Var<StreamType>::set(char val)
template<typename StreamType> template<typename StreamType>
void Var<StreamType>::set(unsigned char val) void Var<StreamType>::set(unsigned char val)
{ {
clear();
type = TYPE_SPACE_LOCAL; type = TYPE_SPACE_LOCAL;
space_local.set(str); space_local.set(str);
} }
@ -460,6 +478,7 @@ void Var<StreamType>::set(unsigned char val)
template<typename StreamType> template<typename StreamType>
void Var<StreamType>::set(wchar_t val) void Var<StreamType>::set(wchar_t val)
{ {
clear();
type = TYPE_SPACE_LOCAL; type = TYPE_SPACE_LOCAL;
space_local.set(str); space_local.set(str);
} }
@ -469,6 +488,7 @@ void Var<StreamType>::set(wchar_t val)
template<typename StreamType> template<typename StreamType>
void Var<StreamType>::set(bool val) void Var<StreamType>::set(bool val)
{ {
clear();
type = TYPE_SPACE_LOCAL; type = TYPE_SPACE_LOCAL;
space_local.set(val); space_local.set(val);
} }
@ -478,6 +498,7 @@ void Var<StreamType>::set(bool val)
template<typename StreamType> template<typename StreamType>
void Var<StreamType>::set(short val) void Var<StreamType>::set(short val)
{ {
clear();
type = TYPE_SPACE_LOCAL; type = TYPE_SPACE_LOCAL;
space_local.set(val); space_local.set(val);
} }
@ -485,6 +506,7 @@ void Var<StreamType>::set(short val)
template<typename StreamType> template<typename StreamType>
void Var<StreamType>::set(int val) void Var<StreamType>::set(int val)
{ {
clear();
type = TYPE_SPACE_LOCAL; type = TYPE_SPACE_LOCAL;
space_local.set(val); space_local.set(val);
} }
@ -492,6 +514,7 @@ void Var<StreamType>::set(int val)
template<typename StreamType> template<typename StreamType>
void Var<StreamType>::set(long val) void Var<StreamType>::set(long val)
{ {
clear();
type = TYPE_SPACE_LOCAL; type = TYPE_SPACE_LOCAL;
space_local.set(val); space_local.set(val);
} }
@ -499,6 +522,7 @@ void Var<StreamType>::set(long val)
template<typename StreamType> template<typename StreamType>
void Var<StreamType>::set(long long val) void Var<StreamType>::set(long long val)
{ {
clear();
type = TYPE_SPACE_LOCAL; type = TYPE_SPACE_LOCAL;
space_local.set(val); space_local.set(val);
} }
@ -506,6 +530,7 @@ void Var<StreamType>::set(long long val)
template<typename StreamType> template<typename StreamType>
void Var<StreamType>::set(unsigned short val) void Var<StreamType>::set(unsigned short val)
{ {
clear();
type = TYPE_SPACE_LOCAL; type = TYPE_SPACE_LOCAL;
space_local.set(val); space_local.set(val);
} }
@ -513,6 +538,7 @@ void Var<StreamType>::set(unsigned short val)
template<typename StreamType> template<typename StreamType>
void Var<StreamType>::set(unsigned int val) void Var<StreamType>::set(unsigned int val)
{ {
clear();
type = TYPE_SPACE_LOCAL; type = TYPE_SPACE_LOCAL;
space_local.set(val); space_local.set(val);
} }
@ -520,6 +546,7 @@ void Var<StreamType>::set(unsigned int val)
template<typename StreamType> template<typename StreamType>
void Var<StreamType>::set(unsigned long val) void Var<StreamType>::set(unsigned long val)
{ {
clear();
type = TYPE_SPACE_LOCAL; type = TYPE_SPACE_LOCAL;
space_local.set(val); space_local.set(val);
} }
@ -527,6 +554,7 @@ void Var<StreamType>::set(unsigned long val)
template<typename StreamType> template<typename StreamType>
void Var<StreamType>::set(unsigned long long val) void Var<StreamType>::set(unsigned long long val)
{ {
clear();
type = TYPE_SPACE_LOCAL; type = TYPE_SPACE_LOCAL;
space_local.set(val); space_local.set(val);
} }
@ -535,6 +563,7 @@ void Var<StreamType>::set(unsigned long long val)
template<typename StreamType> template<typename StreamType>
void Var<StreamType>::set(float val) void Var<StreamType>::set(float val)
{ {
clear();
type = TYPE_SPACE_LOCAL; type = TYPE_SPACE_LOCAL;
space_local.set(val); space_local.set(val);
} }
@ -543,6 +572,7 @@ void Var<StreamType>::set(float val)
template<typename StreamType> template<typename StreamType>
void Var<StreamType>::set(double val) void Var<StreamType>::set(double val)
{ {
clear();
type = TYPE_SPACE_LOCAL; type = TYPE_SPACE_LOCAL;
space_local.set(val); space_local.set(val);
} }
@ -551,6 +581,7 @@ void Var<StreamType>::set(double val)
template<typename StreamType> template<typename StreamType>
void Var<StreamType>::set(long double val) void Var<StreamType>::set(long double val)
{ {
clear();
type = TYPE_SPACE_LOCAL; type = TYPE_SPACE_LOCAL;
space_local.set(val); space_local.set(val);
} }
@ -559,6 +590,7 @@ void Var<StreamType>::set(long double val)
template<typename StreamType> template<typename StreamType>
void Var<StreamType>::set(const pt::Stream & str) void Var<StreamType>::set(const pt::Stream & str)
{ {
clear();
type = TYPE_STREAM; type = TYPE_STREAM;
stream.clear(); stream.clear();
stream << str; stream << str;
@ -569,6 +601,7 @@ void Var<StreamType>::set(const pt::Stream & str)
template<typename StreamType> template<typename StreamType>
void Var<StreamType>::set(UserFunction user_function) void Var<StreamType>::set(UserFunction user_function)
{ {
clear();
type = TYPE_FUNCTION; type = TYPE_FUNCTION;
this->user_function = user_function; this->user_function = user_function;
} }
@ -577,6 +610,7 @@ void Var<StreamType>::set(UserFunction user_function)
template<typename StreamType> template<typename StreamType>
void Var<StreamType>::set(const pt::Date & date) void Var<StreamType>::set(const pt::Date & date)
{ {
clear();
type = TYPE_DATE; type = TYPE_DATE;
this->date = &date; this->date = &date;
} }
@ -585,6 +619,7 @@ void Var<StreamType>::set(const pt::Date & date)
template<typename StreamType> template<typename StreamType>
void Var<StreamType>::set(morm::Model & model) void Var<StreamType>::set(morm::Model & model)
{ {
clear();
type = TYPE_MODEL; type = TYPE_MODEL;
this->model = &model; this->model = &model;
} }
@ -593,8 +628,10 @@ void Var<StreamType>::set(morm::Model & model)
template<typename StreamType> template<typename StreamType>
void Var<StreamType>::set(morm::ModelContainerWrapper & model_container_wrapper) void Var<StreamType>::set(morm::ModelContainerWrapper & model_container_wrapper)
{ {
clear();
type = TYPE_MODEL_CONTAINER_WRAPPER; type = TYPE_MODEL_CONTAINER_WRAPPER;
this->model_container_wrapper = &model_container_wrapper; this->model_container_wrapper = &model_container_wrapper;
this->model_container_wrapper->increment_reference_counter();
} }
@ -602,6 +639,7 @@ template<typename StreamType>
template<typename ModelType> template<typename ModelType>
void Var<StreamType>::set(std::vector<ModelType> & model_container) void Var<StreamType>::set(std::vector<ModelType> & model_container)
{ {
clear();
type = TYPE_MODEL_CONTAINER_WRAPPER; type = TYPE_MODEL_CONTAINER_WRAPPER;
this->model_container_wrapper = new morm::ModelWrapperVector<ModelType>(&model_container); this->model_container_wrapper = new morm::ModelWrapperVector<ModelType>(&model_container);
} }
@ -611,11 +649,43 @@ template<typename StreamType>
template<typename ModelType> template<typename ModelType>
void Var<StreamType>::set(std::list<ModelType> & model_container) void Var<StreamType>::set(std::list<ModelType> & model_container)
{ {
clear();
type = TYPE_MODEL_CONTAINER_WRAPPER; type = TYPE_MODEL_CONTAINER_WRAPPER;
this->model_container_wrapper = new morm::ModelWrapperList<ModelType>(&model_container); this->model_container_wrapper = new morm::ModelWrapperList<ModelType>(&model_container);
} }
template<typename StreamType>
template<typename ModelType>
void Var<StreamType>::set(std::vector<ModelType*> & model_container)
{
clear();
type = TYPE_MODEL_CONTAINER_WRAPPER;
this->model_container_wrapper = new morm::ModelWrapperVectorPointer<ModelType>(&model_container);
}
template<typename StreamType>
template<typename ModelType>
void Var<StreamType>::set(std::list<ModelType*> & model_container)
{
clear();
type = TYPE_MODEL_CONTAINER_WRAPPER;
this->model_container_wrapper = new morm::ModelWrapperListPointer<ModelType>(&model_container);
}
template<typename StreamType>
void Var<StreamType>::set(morm::SpaceWrapper & space_wrapper)
{
clear();
type = TYPE_SPACE_WRAPPER;
this->space_wrapper = &space_wrapper;
this->space_wrapper->increment_reference_counter();
}
template<typename StreamType> template<typename StreamType>

View File

@ -102,6 +102,33 @@ public:
template<typename ModelType> template<typename ModelType>
Var<StreamType> & add(const std::wstring & name, std::list<ModelType> & model_container); Var<StreamType> & add(const std::wstring & name, std::list<ModelType> & model_container);
template<typename ModelType>
Var<StreamType> & add(const char * name, std::vector<ModelType*> & model_container);
template<typename ModelType>
Var<StreamType> & add(const wchar_t * name, std::vector<ModelType*> & model_container);
template<typename ModelType>
Var<StreamType> & add(const std::string & name, std::vector<ModelType*> & model_container);
template<typename ModelType>
Var<StreamType> & add(const std::wstring & name, std::vector<ModelType*> & model_container);
template<typename ModelType>
Var<StreamType> & add(const char * name, std::list<ModelType*> & model_container);
template<typename ModelType>
Var<StreamType> & add(const wchar_t * name, std::list<ModelType*> & model_container);
template<typename ModelType>
Var<StreamType> & add(const std::string & name, std::list<ModelType*> & model_container);
template<typename ModelType>
Var<StreamType> & add(const std::wstring & name, std::list<ModelType*> & model_container);
Var<StreamType> * find(const char * name) const; Var<StreamType> * find(const char * name) const;
Var<StreamType> * find(const wchar_t * name) const; Var<StreamType> * find(const wchar_t * name) const;
Var<StreamType> * find(const std::string & name) const; Var<StreamType> * find(const std::string & name) const;
@ -337,6 +364,79 @@ Var<StreamType> & Vars<StreamType>::add(const std::wstring & name, std::list<Mod
} }
template<typename StreamType>
template<typename ModelType>
Var<StreamType> & Vars<StreamType>::add(const char * name, std::vector<ModelType*> & model_container)
{
Var<StreamType> & var = add(name);
var.set(model_container);
return var;
}
template<typename StreamType>
template<typename ModelType>
Var<StreamType> & Vars<StreamType>::add(const wchar_t * name, std::vector<ModelType*> & model_container)
{
Var<StreamType> & var = add(name);
var.set(model_container);
return var;
}
template<typename StreamType>
template<typename ModelType>
Var<StreamType> & Vars<StreamType>::add(const std::string & name, std::vector<ModelType*> & model_container)
{
Var<StreamType> & var = add(name);
var.set(model_container);
return var;
}
template<typename StreamType>
template<typename ModelType>
Var<StreamType> & Vars<StreamType>::add(const std::wstring & name, std::vector<ModelType*> & model_container)
{
Var<StreamType> & var = add(name);
var.set(model_container);
return var;
}
template<typename StreamType>
template<typename ModelType>
Var<StreamType> & Vars<StreamType>::add(const char * name, std::list<ModelType*> & model_container)
{
Var<StreamType> & var = add(name);
var.set(model_container);
return var;
}
template<typename StreamType>
template<typename ModelType>
Var<StreamType> & Vars<StreamType>::add(const wchar_t * name, std::list<ModelType*> & model_container)
{
Var<StreamType> & var = add(name);
var.set(model_container);
return var;
}
template<typename StreamType>
template<typename ModelType>
Var<StreamType> & Vars<StreamType>::add(const std::string & name, std::list<ModelType*> & model_container)
{
Var<StreamType> & var = add(name);
var.set(model_container);
return var;
}
template<typename StreamType>
template<typename ModelType>
Var<StreamType> & Vars<StreamType>::add(const std::wstring & name, std::list<ModelType*> & model_container)
{
Var<StreamType> & var = add(name);
var.set(model_container);
return var;
}