| #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_ |