blob: 3882ebcc75f9165706e29b5f2378f26fbaec1e4d [file]
// 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_