- \r
- auto n = find<Namespace>(p.namespaces, [&](Namespace n) { return n.name == namespacePrefixes[0]; });\r
- \r
- if (!n.has_value())\r
- return nullopt;\r
-\r
- std::vector<Namespace> namespaces = { n.value() };\r
- \r
- for (int i = 1; i < namespacePrefixes.size(); i++)\r
- {\r
- n = find<Namespace>(n.value().namespaces, [&](Namespace n) { return n.name == namespacePrefixes[i]; });\r
-\r
- if (!n.has_value())\r
- return nullopt;\r
-\r
- namespaces.push_back(n.value());\r
- }\r
-\r
- for (int i = namespaces.size()-1; i >= 0; i--)\r
- {\r
- auto f = find<Struct>(namespaces[i].structs, [&](Struct f) { return f.name == name; });\r
- if (f.has_value())\r
- return f.value();\r
- }\r
-\r
- return find<Struct>(n.value().structs, [&](Struct s) { return s.name == name; });\r