+template<typename T>\r
+opt<T *> findPtr(const std::vector<T> & ts, std::function<bool(T)> f)\r
+{\r
+ for (int i = 0; i < ts.size(); i++)\r
+ if (f(ts[i]))\r
+ return &((T *)ts.data())[i];\r
+ return nullopt;\r
+}\r
+\r
+bool checkNamespace(std::shared_ptr<Context> ctx, const std::vector<std::string> & namespacePrefix)\r
+{\r
+ \r
+ bool prefixMatches = true;\r
+\r
+ auto nIt = ctx;\r
+ for (int i = namespacePrefix.size() - 1; i >= 0; i--)\r
+ {\r
+ const std::string & prefix = namespacePrefix[i];\r
+ if (nIt == nullptr || ! nIt->name.has_value() || nIt->name.value() != prefix)\r
+ {\r
+ prefixMatches = false;\r
+ break;\r
+ }\r
+ nIt = nIt->parent;\r
+ }\r
+\r
+ return prefixMatches;\r
+}\r
+\r
+\r
+\r