2#include <ossia/detail/hash.hpp>
3#include <ossia/detail/optional.hpp>
4#include <ossia/detail/regex_fwd.hpp>
5#include <ossia/network/base/address_scope.hpp>
6#include <ossia/network/base/name_validation.hpp>
43 : address{std::move(s)}
53 operator std::string()
const {
return address; }
57std::ostream& operator<<(std::ostream& s,
const path_element& p);
62 explicit device(std::string s)
71 static std::string instance_regex()
74 =
"(\\.[" + std::string(ossia::net::name_characters_no_instance()) +
"]+)?";
92 any_between(std::initializer_list<std::string> args)
95 const auto N = args.size();
100 auto it = args.begin();
103 for(std::size_t i = 1; i < N; i++)
135inline path_element operator/(
const path_element& lhs,
const any_instance& rhs)
137 return path_element{lhs.address +
"\\/" + rhs.address};
140inline path_element operator/(
const path_element& lhs,
const any_node&)
143 lhs.address +
"\\/[" + std::string(ossia::net::name_characters()) +
"]*"};
146inline path_element operator/(
const path_element& lhs,
const any_path&)
149 lhs.address +
"(\\/[" + std::string(ossia::net::name_characters()) +
"]*)+"};
152inline path_element operator/(
const any_path&,
const path_element& rhs)
154 const std::string sub = std::string(ossia::net::name_characters());
155 std::string sub2 =
"^([";
157 sub2 +=
"]*:)(\\/?[";
161 return path_element{std::move(sub2)};
164inline path_element operator/(
const path_element& lhs,
const stop& rhs)
166 return path_element{lhs.address +
"$"};
209struct OSSIA_EXPORT path
213 ossia::net::address_scope scope;
218 using child_function = smallfun::function<
219 void(std::vector<ossia::net::node_base*>&), 32 +
sizeof(
void*)>;
220 std::vector<child_function> child_functions;
222 friend bool operator==(
const path& lhs,
const path& rhs)
224 return lhs.pattern == rhs.pattern;
226 friend bool operator!=(
const path& lhs,
const path& rhs)
228 return lhs.pattern != rhs.pattern;
233OSSIA_EXPORT
bool is_pattern(std::string_view address);
238OSSIA_EXPORT std::optional<path> make_path(std::string_view address);
248OSSIA_EXPORT
void apply(
const path& p, std::vector<ossia::net::node_base*>& nodes);
258OSSIA_EXPORT std::string substitute_characters(
const std::string& path);
261OSSIA_EXPORT
bool match(std::string_view address,
const regex_path::path_element& e);
269struct hash<
ossia::traversal::path>
271 std::size_t operator()(
const ossia::traversal::path& p)
const
273 return ossia::hash<std::string>{}(p.pattern);
The node_base class.
Definition node.hpp:48
Utilities to construct regexes to validate paths.
Utilities to construct classes that will perform an action for nodes matching a path.
Can match nodes that are instances : foo:/bar, foo:/bar.1, etc.
Definition path.hpp:70
Can match any node : foo:/bar, foo:/baz.1234, etc.
Definition path.hpp:117
Can match any subpath : foo:/bar/baz, foo:/bar/bo.12/baz, etc.
Definition path.hpp:122
Represents a device in a path, e.g. "foo:".
Definition path.hpp:61
Base class for our paths.
Definition path.hpp:40
Matches the end of a parameter.
Definition path.hpp:127