WIP: add a Val struct as an input/output when calling a function

This commit is contained in:
2025-01-03 17:32:59 +01:00
parent 345e1870e3
commit dc2ee61a23
5 changed files with 251 additions and 189 deletions

View File

@@ -194,6 +194,11 @@ private:
return (field_index + 1 == fields.size()); return (field_index + 1 == fields.size());
} }
bool is_last_field()
{
return (field_index + 1) == fields.size();
}
//std::wstring * fun_name; //std::wstring * fun_name;
//BaseObj * base_obj; //BaseObj * base_obj;
@@ -375,13 +380,14 @@ private:
bool CallDate(FindHelper & find_helper); bool CallDate(FindHelper & find_helper);
void PrintLastSpaceField(FindHelper & find_helper, pt::Space * space); void PrintLastSpaceField(FindHelper & find_helper, pt::Space * space);
void CallSpaceObjectForLastField(FindHelper & find_helper, pt::Space * space);
pt::Space * CallSpaceObjectForMiddleField(FindHelper & find_helper, pt::Space * space);
void CallSpaceTableForLastField(FindHelper & find_helper, morm::SpaceWrapper & space_wrapper, pt::Space * CallSpaceObject(FindHelper & find_helper, pt::Space * space);
pt::Space * space, size_t model_wrapper_space_table_index);
pt::Space * CallSpaceTableForMiddleField(FindHelper & find_helper, morm::SpaceWrapper & space_wrapper, pt::Space * space, size_t model_wrapper_space_table_index); void CallSpaceTableForLastField(FindHelper & find_helper, pt::Space * space);
pt::Space * CallSpaceTableForMiddleField(FindHelper & find_helper, pt::Space * space);
pt::Space * CallSpaceTable(FindHelper & find_helper, pt::Space * space);
pt::Space * CallSpacePODtype(FindHelper & find_helper, pt::Space * space);
bool CallSpace(FindHelper & find_helper); bool CallSpace(FindHelper & find_helper);
@@ -460,6 +466,7 @@ private:
void MakeTextIf(Item & item); void MakeTextIf(Item & item);
void MakeTextIfDef(Item & item); void MakeTextIfDef(Item & item);
void MakeTextIfNotDef(Item & item); void MakeTextIfNotDef(Item & item);
bool MakeTextForEvaluate(Item & item, Val & result);
void MakeTextFor(Item & item); void MakeTextFor(Item & item);
void MakeItemText(Item & item); void MakeItemText(Item & item);
void MakeTextContainer(Item & item); void MakeTextContainer(Item & item);
@@ -1524,53 +1531,44 @@ bool Generator::CallDate(FindHelper & find_helper)
} }
pt::Space * Generator::CallSpaceObject(FindHelper & find_helper, pt::Space * space)
void Generator::CallSpaceObjectForLastField(FindHelper & find_helper, pt::Space * space)
{ {
std::wstring & field = find_helper.fields[find_helper.field_index];
space = space->get_space(field);
if( find_helper.is_last_field() )
{
if( IsTestingFunctionExistence() ) if( IsTestingFunctionExistence() )
{ {
find_helper.result.set(true); find_helper.result.set(true);
//last_res = true;
} }
else else
{ {
find_helper.result.set_pointer_to(space, false);
DumpSpaceIfNeeded(find_helper, space); DumpSpaceIfNeeded(find_helper, space);
//last_res = space->object_size() > 0; //last_res = space->object_size() > 0;
} }
} }
else
{
pt::Space * Generator::CallSpaceObjectForMiddleField(FindHelper & find_helper, pt::Space * space)
{
std::wstring & next_field = find_helper.fields[find_helper.field_index];
space = space->get_space(next_field);
if( !space && !IsTestingFunctionExistence() ) if( !space && !IsTestingFunctionExistence() )
{ {
CreateMsg(L"cannot find a Space field: ", find_helper.fun_name, find_helper.fields, find_helper.field_index + 1); CreateMsg(L"cannot find a Space field: ", find_helper.fun_name, find_helper.fields, find_helper.field_index + 1);
} }
}
return space; return space;
} }
void Generator::CallSpaceTableForLastField(FindHelper & find_helper, pt::Space * space)
void Generator::CallSpaceTableForLastField(
FindHelper & find_helper, morm::SpaceWrapper & space_wrapper, pt::Space * space, size_t model_wrapper_space_table_index)
{ {
pt::Space::TableType * table = space->get_table(); pt::Space::TableType * table = space->get_table();
if( is_generating_for ) if( is_generating_for )
{ {
// we are in [for...]statement, increment iterator and check the range
space_wrapper.increment_iterator(model_wrapper_space_table_index, table->size());
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);
//last_res = (iterator_value < table->size());
} }
else else
{ {
@@ -1578,11 +1576,11 @@ void Generator::CallSpaceTableForLastField(
if( IsTestingFunctionExistence() ) if( IsTestingFunctionExistence() )
{ {
find_helper.result.set(true); find_helper.result.set(true);
//last_res = true;
} }
else else
{ {
//last_res = !table->empty(); //last_res = !table->empty();
find_helper.result.set_pointer_to(space, false);
} }
} }
@@ -1590,26 +1588,32 @@ void Generator::CallSpaceTableForLastField(
{ {
DumpSpaceIfNeeded(find_helper, space); DumpSpaceIfNeeded(find_helper, space);
morm::SpaceWrapper * space_wrapper = find_helper.currentval->space_wrapper;
if( space_wrapper )
{
if( HasParam(find_helper.parameters, L"index") ) if( HasParam(find_helper.parameters, L"index") )
{ {
find_helper.out_stream << space_wrapper.get_space_iterator_value(model_wrapper_space_table_index); find_helper.out_stream << space_wrapper->get_space_iterator_value(find_helper.currentval->space_table_index);
} }
if( HasParam(find_helper.parameters, L"index-one") ) if( HasParam(find_helper.parameters, L"index-one") )
{ {
find_helper.out_stream << (space_wrapper.get_space_iterator_value(model_wrapper_space_table_index) + 1); find_helper.out_stream << (space_wrapper->get_space_iterator_value(find_helper.currentval->space_table_index) + 1);
}
} }
} }
} }
pt::Space * Generator::CallSpaceTableForMiddleField(FindHelper & find_helper, morm::SpaceWrapper & space_wrapper, pt::Space * space, size_t model_wrapper_space_table_index) pt::Space * Generator::CallSpaceTableForMiddleField(FindHelper & find_helper, pt::Space * space)
{ {
morm::SpaceWrapper * space_wrapper = find_helper.currentval->space_wrapper;
pt::Space::TableType * table = space->get_table(); pt::Space::TableType * table = space->get_table();
// check the current iterator, if it is correct then select the item from the table // check the current iterator, if it is correct then select the item from the table
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(find_helper.currentval->space_table_index);
if( iterator_value < table->size() ) if( iterator_value < table->size() )
{ {
@@ -1627,6 +1631,74 @@ pt::Space * Generator::CallSpaceTableForMiddleField(FindHelper & find_helper, mo
} }
pt::Space * Generator::CallSpaceTable(FindHelper & find_helper, pt::Space * space)
{
morm::SpaceWrapper * space_wrapper = find_helper.currentval->space_wrapper;
if( find_helper.currentval->space_table_index < space_wrapper->space_indices_table_size() )
{
if( find_helper.is_last_field() )
{
CallSpaceTableForLastField(find_helper, space);
find_helper.field_index += 1;
}
else
{
space = CallSpaceTableForMiddleField(find_helper, space);
// increment field_index only if next_field is 'this' and space is not an object
if( space && !space->is_object() )
{
std::wstring & next_field = find_helper.fields[find_helper.field_index];
if( next_field == L"this" )
{
find_helper.field_index += 1;
}
}
}
}
else
{
CreateMsg(L"", find_helper.fun_name, find_helper.fields, find_helper.field_index, L" exceeded the maximum number of fields for a Space object");
space = nullptr;
}
return space;
}
pt::Space * Generator::CallSpacePODtype(FindHelper & find_helper, pt::Space * space)
{
if( find_helper.is_last_field() )
{
if( IsTestingFunctionExistence() )
{
find_helper.result.set(true);
//last_res = true;
}
else
{
//PrintLastSpaceField(find_helper, space);
//last_res = space->to_bool();
find_helper.result.set_pointer_to(space, false);
}
find_helper.field_index += 1;
}
else
{
if( !IsTestingFunctionExistence() )
{
CreateMsg(L"", find_helper.fun_name, find_helper.fields, find_helper.field_index, L" of a space is not an object nor a table");
}
space = nullptr;
}
return space;
}
void Generator::PrintLastSpaceField(FindHelper & find_helper, pt::Space * space) void Generator::PrintLastSpaceField(FindHelper & find_helper, pt::Space * space)
{ {
@@ -1645,100 +1717,39 @@ void Generator::PrintLastSpaceField(FindHelper & find_helper, pt::Space * space)
} }
bool Generator::CallSpace(FindHelper & find_helper) bool Generator::CallSpace(FindHelper & find_helper)
{ {
morm::SpaceWrapper * space_wrapper = reinterpret_cast<morm::SpaceWrapper*>(find_helper.currentval->pointer); pt::Space * space = reinterpret_cast<pt::Space*>(find_helper.currentval->pointer);
pt::Space * space = space_wrapper->get_space();
//last_res = false;
size_t field_index = find_helper.field_index;
size_t model_wrapper_space_table_index = 0;
/* while( (find_helper.field_index < find_helper.fields.size()) && space )
*
* 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( (field_index < find_helper.fields.size() + 1) && space )
{ {
bool is_last_field = (field_index == find_helper.fields.size());
if( space->is_object() ) if( space->is_object() )
{ {
if( is_last_field ) space = CallSpaceObject(find_helper, space);
{ find_helper.field_index += 1;
CallSpaceObjectForLastField(find_helper, space);
}
else
{
space = CallSpaceObjectForMiddleField(find_helper, space);
}
field_index += 1;
} }
else else
if( space->is_table() ) if( space->is_table() )
{ {
if( model_wrapper_space_table_index < space_wrapper->space_indices_table_size() ) space = CallSpaceTable(find_helper, space);
{ find_helper.currentval->space_table_index += 1;
if( is_last_field )
{
CallSpaceTableForLastField(find_helper, *space_wrapper, space, model_wrapper_space_table_index);
field_index += 1;
} }
else else
{ {
space = CallSpaceTableForMiddleField(find_helper, *space_wrapper, space, model_wrapper_space_table_index); space = CallSpacePODtype(find_helper, space);
// increment field_index only if next_field is 'this' and space is not an object
if( space && !space->is_object() )
{
std::wstring & next_field = find_helper.fields[field_index];
if( next_field == L"this" )
{
field_index += 1;
}
}
}
}
else
{
CreateMsg(L"", find_helper.fun_name, find_helper.fields, field_index, L" exceeded the maximum number of fields for a space object");
space = nullptr;
}
}
else
{
if( is_last_field )
{
if( IsTestingFunctionExistence() )
{
//last_res = true;
}
else
{
PrintLastSpaceField(find_helper, space);
//last_res = space->to_bool();
}
field_index += 1;
}
else
{
if( !IsTestingFunctionExistence() )
{
CreateMsg(L"", find_helper.fun_name, find_helper.fields, field_index, L" of a space is not an object nor a table");
}
space = nullptr;
} }
} }
model_wrapper_space_table_index += 1; if( space )
{
find_helper.result.set_pointer_to(space, false);
if( find_helper.currentval->space_wrapper )
{
find_helper.result.space_wrapper = find_helper.currentval->space_wrapper;
find_helper.result.space_wrapper->increment_reference_counter();
find_helper.result.space_table_index = find_helper.currentval->space_table_index;
}
} }
return space != nullptr; return space != nullptr;
@@ -1746,6 +1757,7 @@ bool Generator::CallSpace(FindHelper & find_helper)
#ifdef EZC_HAS_MORM_LIBRARY #ifdef EZC_HAS_MORM_LIBRARY
@@ -1905,18 +1917,20 @@ bool Generator::CallModelContainerWrapper(FindHelper & find_helper)
if( find_helper.all_fields_known() ) if( find_helper.all_fields_known() )
{ {
find_helper.result.set_pointer_to(model_container_wrapper);
if( is_generating_for ) if( is_generating_for )
{ {
model_container_wrapper->increment_iterator(); // model_container_wrapper->increment_iterator();
find_helper.currentval->clear_childs(); // find_helper.currentval->clear_childs();
find_helper.result.set(model_container_wrapper->is_iterator_correct()); // find_helper.result.set(model_container_wrapper->is_iterator_correct());
//last_res = find_helper.wrapper->model_container_wrapper->is_iterator_correct(); //last_res = find_helper.wrapper->model_container_wrapper->is_iterator_correct();
} }
else else
{ {
// for [if-def...] last_res will be set later // for [if-def...] last_res will be set later
//last_res = !find_helper.wrapper->model_container_wrapper->is_container_empty(); //last_res = !find_helper.wrapper->model_container_wrapper->is_container_empty();
find_helper.result.set(model_container_wrapper->is_container_empty()); //find_helper.result.set(model_container_wrapper->is_container_empty());
} }
} }
@@ -2066,7 +2080,7 @@ bool Generator::ReduceFields(FindHelper & find_helper)
bool Generator::CallValue(FindHelper & find_helper) bool Generator::CallValue(FindHelper & find_helper)
{ {
if( find_helper.baseval->pointer && find_helper.currentval->pointer ) if( find_helper.currentval->pointer )
{ {
#ifdef EZC_HAS_MORM_LIBRARY #ifdef EZC_HAS_MORM_LIBRARY
if( find_helper.currentval->type == Val::TYPE_MODEL ) if( find_helper.currentval->type == Val::TYPE_MODEL )
@@ -2082,7 +2096,7 @@ bool Generator::CallValue(FindHelper & find_helper)
//return CallWrapper(find_helper); //return CallWrapper(find_helper);
return CallDate(find_helper); return CallDate(find_helper);
else else
if( find_helper.currentval->type == Val::TYPE_SPACE_WRAPPER ) if( find_helper.currentval->type == Val::TYPE_SPACE )
return CallSpace(find_helper); return CallSpace(find_helper);
//return CallWrapper(find_helper); //return CallWrapper(find_helper);
else else
@@ -2101,8 +2115,15 @@ bool Generator::CallValue(FindHelper & find_helper)
// else // else
// if( find_helper.variable ) // if( find_helper.variable )
// return CallVariable(item_fun, *find_helper.variable, parameters, result, out_stream, in_stream); // return CallVariable(item_fun, *find_helper.variable, parameters, result, out_stream, in_stream);
if( find_helper.currentval->has_pod_type() ) }
return CallPodType(find_helper);
// if( find_helper.currentval->has_pod_type() )
// return CallPodType(find_helper);
if( find_helper.currentval->type == Val::TYPE_SPACE_LOCAL )
{
find_helper.result = *find_helper.currentval; // IMPROVEME this makes a copy
return true;
} }
return false; return false;
@@ -2673,7 +2694,7 @@ void Generator::MakeTextIf(Item & item)
return; return;
} }
MakeTextIf_go(item, result.to_bool(false)); MakeTextIf_go(item, result.to_bool());
} }
@@ -2717,6 +2738,55 @@ void Generator::MakeTextIfNotDef(Item & item)
} }
bool Generator::MakeTextForEvaluate(Item & item, Val & result)
{
bool status = false;
if( result.type == Val::TYPE_MODEL_CONTAINER_WRAPPER && result.pointer )
{
morm::ModelContainerWrapper * model_container_wrapper = reinterpret_cast<morm::ModelContainerWrapper*>(result.pointer);
model_container_wrapper->increment_iterator();
//find_helper.currentval->clear_childs();
//find_helper.result.set(model_container_wrapper->is_iterator_correct());
result.clear_childs(); // is it ok?
status = model_container_wrapper->is_iterator_correct();
}
else
if( result.type == Val::TYPE_SPACE && result.pointer )
{
if( result.space_wrapper )
{
pt::Space * space = reinterpret_cast<pt::Space*>(result.pointer);
if( space->is_table() )
{
pt::Space::TableType * table = space->get_table();
result.space_wrapper->increment_iterator(result.space_table_index, table->size());
result.space_wrapper->invalidate_iterators(result.space_table_index + 1);
size_t iterator_value = result.space_wrapper->get_space_iterator_value(result.space_table_index);
status = (iterator_value < table->size());
}
else
{
// log some error
}
}
else
{
//CreateMsg();
// log some error
}
}
else
{
status = result.to_bool();
}
return status;
}
void Generator::MakeTextFor(Item & item) void Generator::MakeTextFor(Item & item)
{ {
@@ -2735,6 +2805,7 @@ void Generator::MakeTextFor(Item & item)
// is_generating_for will be changed by next call to MakeText() // is_generating_for will be changed by next call to MakeText()
// so we should set it in each iterations // so we should set it in each iterations
is_generating_for = true; is_generating_for = true;
result.clear();
if( program_mode ) if( program_mode )
{ {
@@ -2746,7 +2817,7 @@ void Generator::MakeTextFor(Item & item)
return; return;
} }
if( !result.to_bool(true) ) if( !MakeTextForEvaluate(item, result) )
break; break;
if( !item.item_tab.empty() ) if( !item.item_tab.empty() )
@@ -2755,7 +2826,6 @@ void Generator::MakeTextFor(Item & item)
} }
void Generator::MakeTextDefine(Item & item, Val & val) void Generator::MakeTextDefine(Item & item, Val & val)
{ {
/* /*

View File

@@ -109,6 +109,14 @@ void Models::Add(const std::wstring & name, pt::Date * date)
} }
void Models::Add(const std::wstring & name, const std::wstring & value)
{
Val val;
val.set(value);
models_map[name] = val;
}
Val * Models::Find(const std::wstring & name) Val * Models::Find(const std::wstring & name)
{ {
auto iterator = models_map.find(name); auto iterator = models_map.find(name);

View File

@@ -63,6 +63,8 @@ public:
void Add(const std::wstring & name, pt::Date & space); void Add(const std::wstring & name, pt::Date & space);
void Add(const std::wstring & name, pt::Date * space); void Add(const std::wstring & name, pt::Date * space);
void Add(const std::wstring & name, const std::wstring & value);
template<typename VectorType> template<typename VectorType>
void Add(const std::wstring & name, std::vector<VectorType> & container) void Add(const std::wstring & name, std::vector<VectorType> & container)
{ {

View File

@@ -79,6 +79,17 @@ void Val::copy(const Val & val)
type = val.type; type = val.type;
pointer = val.pointer; pointer = val.pointer;
if( type == Type::TYPE_SPACE )
{
space_wrapper = val.space_wrapper;
space_table_index = val.space_table_index;
}
if( type == Type::TYPE_SPACE_LOCAL )
{
space_local = val.space_local;
}
// user_function = val.user_function; // user_function = val.user_function;
// model = val.model; // model = val.model;
// model_container_wrapper = val.model_container_wrapper; // model_container_wrapper = val.model_container_wrapper;
@@ -110,9 +121,8 @@ void Val::increment_model_container_wrapper_ref()
void Val::increment_space_wrapper_ref() void Val::increment_space_wrapper_ref()
{ {
if( type == Type::TYPE_SPACE_WRAPPER && pointer ) if( type == Type::TYPE_SPACE && space_wrapper )
{ {
morm::SpaceWrapper * space_wrapper = reinterpret_cast<morm::SpaceWrapper*>(pointer);
space_wrapper->increment_reference_counter(); space_wrapper->increment_reference_counter();
} }
} }
@@ -143,6 +153,9 @@ void Val::initialize_empty()
type = TYPE_VOID; type = TYPE_VOID;
pointer = nullptr; pointer = nullptr;
space_wrapper = nullptr;
space_table_index = 0;
// user_function = nullptr; // user_function = nullptr;
// model = nullptr; // model = nullptr;
// model_container_wrapper = nullptr; // model_container_wrapper = nullptr;
@@ -181,14 +194,14 @@ void Val::clear_model_container_wrapper()
void Val::clear_space_wrapper() void Val::clear_space_wrapper()
{ {
if( type == Type::TYPE_SPACE_WRAPPER && pointer ) if( type == Type::TYPE_SPACE && space_wrapper )
{ {
morm::SpaceWrapper * space_wrapper = reinterpret_cast<morm::SpaceWrapper*>(pointer);
space_wrapper->decrement_reference_counter(); space_wrapper->decrement_reference_counter();
if( space_wrapper->get_reference_counter() == 0 && space_wrapper->should_be_auto_removed() ) if( space_wrapper->get_reference_counter() == 0 && space_wrapper->should_be_auto_removed() )
{ {
delete space_wrapper; delete space_wrapper;
space_wrapper = nullptr;
} }
} }
} }
@@ -249,7 +262,7 @@ bool Val::has_pod_type()
} }
bool Val::to_bool(bool is_loop_context) const bool Val::to_bool() const
{ {
switch(type) switch(type)
{ {
@@ -268,14 +281,11 @@ bool Val::to_bool(bool is_loop_context) const
case TYPE_ITEM_BLOCK: case TYPE_ITEM_BLOCK:
break; break;
case TYPE_SPACE_WRAPPER:
return to_bool_space_wrapper();
case TYPE_SPACE: case TYPE_SPACE:
return to_bool_space(); return to_bool_space();
case TYPE_MODEL_CONTAINER_WRAPPER: case TYPE_MODEL_CONTAINER_WRAPPER:
return to_bool_model_container_wrapper(is_loop_context); return to_bool_model_container_wrapper();
case TYPE_OUTPUT_STREAM: case TYPE_OUTPUT_STREAM:
return output_stream->size() != output_stream_original_size; return output_stream->size() != output_stream_original_size;
@@ -299,25 +309,10 @@ bool Val::to_bool_space() const
} }
bool Val::to_bool_space_wrapper() const bool Val::to_bool_model_container_wrapper() const
{
morm::SpaceWrapper * space_wrapper = reinterpret_cast<morm::SpaceWrapper*>(pointer);
return space_wrapper->get_space()->to_bool();
}
bool Val::to_bool_model_container_wrapper(bool is_loop_context) const
{ {
morm::ModelContainerWrapper * model_container_wrapper = reinterpret_cast<morm::ModelContainerWrapper*>(pointer); morm::ModelContainerWrapper * model_container_wrapper = reinterpret_cast<morm::ModelContainerWrapper*>(pointer);
if( is_loop_context )
{
return model_container_wrapper->is_iterator_correct();
}
else
{
return !model_container_wrapper->is_container_empty(); return !model_container_wrapper->is_container_empty();
}
} }
@@ -493,25 +488,22 @@ void Val::set_pointer_to(morm::ModelContainerWrapper * model_container_wrapper)
void Val::set_pointer_to(morm::SpaceWrapper * space_wrapper) void Val::set_pointer_to(morm::SpaceWrapper * space_wrapper)
{ {
clear(); clear();
type = TYPE_SPACE_WRAPPER; type = TYPE_SPACE;
this->pointer = space_wrapper; this->pointer = space_wrapper->get_space();
space_wrapper->increment_reference_counter(); this->space_wrapper = space_wrapper;
this->space_wrapper->increment_reference_counter();
} }
void Val::set_pointer_to(pt::Space * space, bool create_wrapper) void Val::set_pointer_to(pt::Space * space, bool create_wrapper)
{ {
clear(); clear();
type = TYPE_SPACE;
this->pointer = space;
if( create_wrapper ) if( create_wrapper )
{ {
type = TYPE_SPACE_WRAPPER; space_wrapper = new morm::SpaceWrapper(space);
this->pointer = new morm::SpaceWrapper(space);
}
else
{
type = TYPE_SPACE;
this->pointer = &space;
} }
} }
@@ -949,10 +941,6 @@ void Val::serialize_to(pt::Stream & str)
serialize_model_container_wrapper_to(str); serialize_model_container_wrapper_to(str);
break; break;
case TYPE_SPACE_WRAPPER:
serialize_space_wrapper_to(str);
break;
case TYPE_SPACE: case TYPE_SPACE:
serialize_space_to(str); serialize_space_to(str);
break; break;
@@ -999,13 +987,6 @@ void Val::serialize_model_container_wrapper_to(pt::Stream & str)
} }
void Val::serialize_space_wrapper_to(pt::Stream & str)
{
morm::SpaceWrapper * space_wrapper = reinterpret_cast<morm::SpaceWrapper*>(pointer);
space_wrapper->get_space()->serialize_to_string(str);
}
void Val::serialize_space_to(pt::Stream & str) void Val::serialize_space_to(pt::Stream & str)
{ {
pt::Space * space = reinterpret_cast<pt::Space*>(pointer); pt::Space * space = reinterpret_cast<pt::Space*>(pointer);

View File

@@ -75,7 +75,6 @@ public:
TYPE_DATE, TYPE_DATE,
TYPE_MODEL, TYPE_MODEL,
TYPE_MODEL_CONTAINER_WRAPPER, TYPE_MODEL_CONTAINER_WRAPPER,
TYPE_SPACE_WRAPPER,
TYPE_SPACE, TYPE_SPACE,
TYPE_OUTPUT_STREAM, TYPE_OUTPUT_STREAM,
TYPE_ITEM_BLOCK, TYPE_ITEM_BLOCK,
@@ -114,7 +113,7 @@ public:
void clear_childs(); void clear_childs();
bool to_bool(bool is_loop_context = false) const; bool to_bool() const;
void set(const char * str); void set(const char * str);
@@ -220,9 +219,13 @@ public:
Type type; Type type;
pt::Space space_local; pt::Space space_local;
void * pointer; void * pointer;
// used when pointer is pointing to a pt::Space
// but can be null
morm::SpaceWrapper * space_wrapper;
size_t space_table_index;
// UserFunction user_function; // UserFunction user_function;
// // Wrapper // // Wrapper
@@ -273,14 +276,12 @@ private:
bool to_bool_stream() const; bool to_bool_stream() const;
bool to_bool_space() const; bool to_bool_space() const;
bool to_bool_space_wrapper() const; bool to_bool_model_container_wrapper() const;
bool to_bool_model_container_wrapper(bool is_loop_context) const;
void serialize_stream_to(pt::Stream & str); void serialize_stream_to(pt::Stream & str);
void serialize_date_to(pt::Stream & str); void serialize_date_to(pt::Stream & str);
void serialize_model_to(pt::Stream & str); void serialize_model_to(pt::Stream & str);
void serialize_model_container_wrapper_to(pt::Stream & str); void serialize_model_container_wrapper_to(pt::Stream & str);
void serialize_space_wrapper_to(pt::Stream & str);
void serialize_space_to(pt::Stream & str); void serialize_space_to(pt::Stream & str);