| #include "redfish_to_uhm_trie.hpp" | |
| #include <memory> | |
| #include <string> | |
| #include <string_view> | |
| #include <vector> | |
| #include "absl/strings/str_split.h" | |
| #include "redfish_to_uhm_mapping.pb.h" | |
| #include "redfish_to_uhm_mapping_value.hpp" | |
| #include "redfish_to_uhm_trie_node.hpp" | |
| namespace devpath_plugin { | |
| namespace { | |
| std::vector<std::string> SplitPath(std::string_view path) { | |
| std::vector<std::string> segments; | |
| for (std::string_view segment : absl::StrSplit(path, '/')) { | |
| if (!segment.empty()) { | |
| segments.push_back(std::string(segment)); | |
| } | |
| } | |
| return segments; | |
| } | |
| } // namespace | |
| void RedfishToUhmTrie::Insert( | |
| const ::devpath_plugin::Key& key, | |
| const std::shared_ptr<const RedfishToUhmMappingValue>& value) { | |
| std::vector<std::string> segments = SplitPath(key.redfish_url_pattern()); | |
| RedfishToUhmTrieNode* current = &root_; | |
| for (const std::string& segment : segments) { | |
| current = current->GetOrCreateChild(segment); | |
| } | |
| current->SetValue(value); | |
| } | |
| std::shared_ptr<const RedfishToUhmMappingValue> | |
| RedfishToUhmTrie::GetMappingFromUrl(const ::devpath_plugin::Key& key) const { | |
| std::vector<std::string> segments = SplitPath(key.redfish_url_pattern()); | |
| const RedfishToUhmTrieNode* current = &root_; | |
| for (const std::string& segment : segments) { | |
| current = current->GetChild(segment); | |
| if (current == nullptr) { | |
| return nullptr; | |
| } | |
| } | |
| return current->GetValue(); | |
| } | |
| } // namespace devpath_plugin |