| /* |
| * Copyright (C) 2018 CESNET, https://photonics.cesnet.cz/ |
| * Copyright (C) 2018 FIT CVUT, https://fit.cvut.cz/ |
| * |
| * Written by Václav Kubernát <kubervac@fit.cvut.cz> |
| * |
| */ |
| #pragma once |
| |
| #include "completion.hpp" |
| #include "data_query.hpp" |
| #include "schema.hpp" |
| struct ParserContext { |
| ParserContext(const Schema& schema, const std::shared_ptr<const DataQuery> dataQuery, const dataPath_& curDir); |
| schemaPath_ currentSchemaPath(); |
| dataPath_ currentDataPath(); |
| void clearPath(); |
| void pushPathFragment(const dataNode_& node); |
| void pushPathFragment(const schemaNode_& node); |
| void resetPath(); |
| |
| const Schema& m_schema; |
| const dataPath_ m_curPathOrig; |
| const std::shared_ptr<const DataQuery> m_dataquery; |
| boost::optional<std::string> m_curModule; |
| std::string m_errorMsg; |
| std::string m_tmpListName; |
| bool m_topLevelModulePresent = false; |
| |
| struct { |
| schemaPath_ m_location; |
| ModuleNodePair m_node; |
| } m_tmpListKeyLeafPath; |
| std::map<std::string, leaf_data_> m_tmpListKeys; |
| bool m_errorHandled = false; |
| bool m_completing = false; |
| |
| std::set<Completion> m_suggestions; |
| // Iterator pointing to where suggestions were created |
| boost::optional<std::string::const_iterator> m_completionIterator; |
| |
| private: |
| boost::variant<dataPath_, schemaPath_> m_curPath; |
| }; |