| #ifndef THIRD_PARTY_GBMCWEB_DEVPATH_PLUGIN_REDFISH_TO_UHM_TRIE_NODE_H_ | |
| #define THIRD_PARTY_GBMCWEB_DEVPATH_PLUGIN_REDFISH_TO_UHM_TRIE_NODE_H_ | |
| #include <memory> | |
| #include <string> | |
| #include <string_view> | |
| #include <vector> | |
| #include "absl/container/flat_hash_map.h" | |
| #include "redfish_to_uhm_mapping_value.hpp" | |
| #include "re2/re2.h" | |
| namespace devpath_plugin { | |
| class RedfishToUhmTrieNode { | |
| public: | |
| RedfishToUhmTrieNode() = default; | |
| RedfishToUhmTrieNode(const RedfishToUhmTrieNode&) = delete; | |
| RedfishToUhmTrieNode& operator=(const RedfishToUhmTrieNode&) = delete; | |
| RedfishToUhmTrieNode(RedfishToUhmTrieNode&&) = default; | |
| RedfishToUhmTrieNode& operator=(RedfishToUhmTrieNode&&) = default; | |
| // Retrieve/create a child node for insertion. Handles regex vs exact matching | |
| // internally. | |
| RedfishToUhmTrieNode* GetOrCreateChild(std::string_view segment); | |
| // Retrieve a matching child node for lookup. Falls back to satisfying regex | |
| // matching. | |
| const RedfishToUhmTrieNode* GetChild(std::string_view segment) const; | |
| void SetValue(const std::shared_ptr<const RedfishToUhmMappingValue>& value) { | |
| value_ = value; | |
| } | |
| std::shared_ptr<const RedfishToUhmMappingValue> GetValue() const { | |
| return value_; | |
| } | |
| private: | |
| struct RegexChild { | |
| std::string pattern; | |
| std::unique_ptr<RE2> regex; | |
| std::unique_ptr<RedfishToUhmTrieNode> node; | |
| }; | |
| // Internal helper methods for matching representation | |
| RedfishToUhmTrieNode* GetOrCreateExactChild(std::string_view segment); | |
| RedfishToUhmTrieNode* GetOrCreateRegexChild(std::string_view pattern); | |
| const RedfishToUhmTrieNode* GetExactChild(std::string_view segment) const; | |
| const RedfishToUhmTrieNode* GetRegexChild(std::string_view segment) const; | |
| absl::flat_hash_map<std::string, std::unique_ptr<RedfishToUhmTrieNode>> | |
| exact_children_; | |
| std::vector<RegexChild> regex_children_; | |
| std::shared_ptr<const RedfishToUhmMappingValue> value_; | |
| }; | |
| } // namespace devpath_plugin | |
| #endif // THIRD_PARTY_GBMCWEB_DEVPATH_PLUGIN_REDFISH_TO_UHM_TRIE_NODE_H_ |