got rid of reference_wrappers
This commit is contained in:
parent
53d9641e98
commit
93d6673226
2 changed files with 16 additions and 14 deletions
|
@ -151,7 +151,7 @@ namespace NVL
|
|||
{
|
||||
Object this_object;
|
||||
Context this_context = parent_context;
|
||||
this_context.Scope_Hierarchy.push_back(this_object);
|
||||
this_context.Scope_Hierarchy.push_back(&this_object);
|
||||
|
||||
skip_ws(nvl);
|
||||
|
||||
|
@ -247,11 +247,13 @@ namespace NVL
|
|||
this_object.Is_Symbol = is_symbol;
|
||||
|
||||
if (is_parent_call)
|
||||
(std::get<std::reference_wrapper<Call>>(parent_context.Scope_Hierarchy.back())).get().Objects.push_back(this_object);
|
||||
else if ((std::get<std::reference_wrapper<Object>>(parent_context.Scope_Hierarchy.back())).get().Value.index() == 4) // 4 for list, indicates that parent is an object that is already a vector of objects
|
||||
std::get<std::vector<Object>>((std::get<std::reference_wrapper<Object>>(parent_context.Scope_Hierarchy.back())).get().Value).push_back(this_object);
|
||||
std::get<Call*>(parent_context.Scope_Hierarchy.back())->Objects.push_back(this_object);
|
||||
else if (std::get<Object*>(parent_context.Scope_Hierarchy.back())->Value.index() == 4) // 4 for list, indicates that parent is an object that is already a vector of objects
|
||||
std::get<std::vector<Object>>(
|
||||
std::get<Object*>(parent_context.Scope_Hierarchy.back())->Value
|
||||
).push_back(this_object);
|
||||
else // parent is not yet vector, initialize as (change from nil to) vector
|
||||
(std::get<std::reference_wrapper<Object>>(parent_context.Scope_Hierarchy.back())).get().Value = std::vector<Object> { this_object };
|
||||
std::get<Object*>(parent_context.Scope_Hierarchy.back())->Value = std::vector<Object> { this_object };
|
||||
}
|
||||
|
||||
void parse_Call(Context parent_context, std::ifstream& nvl)
|
||||
|
@ -259,7 +261,7 @@ namespace NVL
|
|||
Call this_call;
|
||||
|
||||
Context this_context = parent_context;
|
||||
this_context.Scope_Hierarchy.push_back(this_call);
|
||||
this_context.Scope_Hierarchy.push_back(&this_call);
|
||||
|
||||
// parse the symbol (first obj in call)
|
||||
parse_Object<true, true>(this_context, nvl);
|
||||
|
@ -270,14 +272,14 @@ namespace NVL
|
|||
parse_Object<true, false>(this_context, nvl);
|
||||
}
|
||||
|
||||
(std::get<std::reference_wrapper<Sequence>>(parent_context.Scope_Hierarchy.back())).get().Calls.push_back(this_call);
|
||||
std::get<Sequence*>(parent_context.Scope_Hierarchy.back())->Calls.push_back(this_call);
|
||||
}
|
||||
|
||||
void parse_Sequence(Context parent_context, std::ifstream& nvl)
|
||||
{
|
||||
Sequence this_sequence;
|
||||
Context this_context = parent_context;
|
||||
this_context.Scope_Hierarchy.push_back(this_sequence);
|
||||
this_context.Scope_Hierarchy.push_back(&this_sequence);
|
||||
|
||||
skip_ws(nvl);
|
||||
|
||||
|
@ -306,7 +308,7 @@ namespace NVL
|
|||
|
||||
nvl.get(c); // get }
|
||||
|
||||
std::get<std::reference_wrapper<Tree>>(parent_context.Scope_Hierarchy.back()).get().Sequences.push_back(this_sequence);
|
||||
std::get<Tree*>(parent_context.Scope_Hierarchy.back())->Sequences.push_back(this_sequence);
|
||||
}
|
||||
|
||||
void parse_NVL(Tree& root, std::string path)
|
||||
|
@ -316,7 +318,7 @@ namespace NVL
|
|||
|
||||
if (nvl.is_open()) {
|
||||
Context current_context;
|
||||
current_context.Scope_Hierarchy.push_back(root);
|
||||
current_context.Scope_Hierarchy.push_back(&root);
|
||||
|
||||
while (!nvl.eof()) {
|
||||
// parse_Sequence() already takes care of comments before a sequence
|
||||
|
|
|
@ -56,10 +56,10 @@ namespace NVL
|
|||
|
||||
struct Context {
|
||||
std::vector<std::variant<
|
||||
std::reference_wrapper<Tree>,
|
||||
std::reference_wrapper<Sequence>,
|
||||
std::reference_wrapper<Call>,
|
||||
std::reference_wrapper<Object>
|
||||
Tree*,
|
||||
Sequence*,
|
||||
Call*,
|
||||
Object*
|
||||
>> Scope_Hierarchy;
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue