some concept about serializing space from a model

This commit is contained in:
Tomasz Sowa 2021-06-21 23:13:04 +02:00
parent e442ee4720
commit 7d390eb312
1 changed files with 51 additions and 6 deletions

View File

@ -179,6 +179,7 @@ private:
size_t field_index;
morm::ModelWrapper * model_wrapper;
morm::Model * model;
pt::Space * space;
CallModelHelper()
@ -186,6 +187,7 @@ private:
field_index = 0;
model_wrapper = nullptr;
model = nullptr;
space = nullptr;
}
};
@ -331,10 +333,14 @@ private:
void CallObject(BaseObj<StreamType> & base_obj, int method_index, FunInfo<StreamType> & info);
void CallSpace(pt::Space & space, FindHelper & find_helper, std::vector<std::wstring> & fields, size_t field_index,
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);
void CallModelWrapper(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,
@ -1203,6 +1209,27 @@ bool Generator<StreamType>::ShouldEscapeValue(std::vector<Var> parameters)
}
template<class StreamType>
void Generator<StreamType>::CallSpace(pt::Space & space, FindHelper & find_helper, std::vector<std::wstring> & fields, size_t field_index,
std::vector<Var> & parameters, StreamType & out_stream)
{
pt::Space * child = &space;
for(size_t i=field_index ; i + 1 < fields.size() && child ; ++i)
{
std::wstring & field = fields[i];
child = child->get_object_field(field);
}
if( child )
{
const std::wstring & str = child->to_wstr();
out_stream << str;
}
}
#ifdef EZC_HAS_MORM_LIBRARY
@ -1249,6 +1276,7 @@ typename Generator<StreamType>::CallModelHelper Generator<StreamType>::FindLastM
helper.field_index = 0;
helper.model_wrapper = &models_base;
helper.model = nullptr;
helper.space = nullptr;
for(; helper.field_index < fields.size() ; ++helper.field_index)
{
@ -1262,7 +1290,16 @@ typename Generator<StreamType>::CallModelHelper Generator<StreamType>::FindLastM
if( helper.model )
{
child_models_base = helper.model->get_model_wrapper(nullptr, field.c_str(), false);
//child_models_base = helper.model->get_model_wrapper(nullptr, field.c_str(), false);
morm::ModelHelper model_helper = helper.model->get_model_helper(nullptr, field.c_str(), false);
child_models_base = model_helper.model_wrapper;
if( !child_models_base )
{
helper.space = model_helper.space;
}
if( child_models_base )
{
@ -1284,7 +1321,7 @@ typename Generator<StreamType>::CallModelHelper Generator<StreamType>::FindLastM
template<class StreamType>
void Generator<StreamType>::CallModelWrapper(FindHelper & find_helper, std::vector<std::wstring> & fields,
std::vector<Var> parameters, StreamType & out_stream, const StreamType & in_stream)
std::vector<Var> & parameters, StreamType & out_stream, const StreamType & in_stream)
{
last_res = false;
CallModelHelper helper = FindLastModelWrapper(*find_helper.model_wrapper, fields);
@ -1296,9 +1333,17 @@ void Generator<StreamType>::CallModelWrapper(FindHelper & find_helper, std::vect
if( helper.field_index + 1 < fields.size() )
{
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");
last_res = false;
return;
if( helper.space )
{
CallSpace(*helper.space, find_helper, fields, helper.field_index + 1, parameters, out_stream);
return;
}
else
{
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");
last_res = false;
return;
}
}
if( helper.field_index + 1 == fields.size() )