| // Copyright 2026 Google LLC | |
| // | |
| // Licensed under the Apache License, Version 2.0 (the "License"); | |
| // you may not use this file except in compliance with the License. | |
| // You may obtain a copy of the License at | |
| // | |
| // https://www.apache.org/licenses/LICENSE-2.0 | |
| // | |
| // Unless required by applicable law or agreed to in writing, software | |
| // distributed under the License is distributed on an "AS IS" BASIS, | |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| // See the License for the specific language governing permissions and | |
| // limitations under the License. | |
| // | |
| #ifndef THIRD_PARTY_CREDENTIO_FORMATS_BMFF_XPATH_H_ | |
| #define THIRD_PARTY_CREDENTIO_FORMATS_BMFF_XPATH_H_ | |
| #include <optional> | |
| #include <string> | |
| #include "absl/strings/string_view.h" | |
| namespace credentio { | |
| // An XPath represents a path from the root to a BMFF box, with the formatted | |
| // string according to https://www.w3.org/TR/xpath-10/. | |
| class XPath { | |
| public: | |
| // Constructs an XPath with a parent and a name. | |
| XPath(const XPath* parent, std::string name) : parent_(parent), name_(name) {} | |
| // Constructs an XPath with a parent, a name, and a position. | |
| XPath(const XPath* parent, std::string name, int position) | |
| : parent_(parent), name_(name), position_(position) {} | |
| // Sets the position of the element for this path. | |
| void SetPosition(int position) { position_ = position; } | |
| // Returns the string representation of this full path. | |
| std::string ToString() const; | |
| private: | |
| // The parent of this path. | |
| const XPath* parent_; | |
| // The name of the element pointed by this path. | |
| std::string name_; | |
| // The position of the element for this path. The position represents that | |
| // this path is the Nth child with tag name in its parent. | |
| std::optional<int> position_ = std::nullopt; | |
| }; | |
| // A util class to match a XPath. | |
| class XPathMatcher { | |
| public: | |
| explicit XPathMatcher(absl::string_view pattern) : pattern_(pattern) {} | |
| bool Matches(absl::string_view path) const; | |
| private: | |
| std::string pattern_; | |
| }; | |
| } // namespace credentio | |
| #endif // THIRD_PARTY_CREDENTIO_FORMATS_BMFF_XPATH_H_ |