51namespace ngen{
namespace serialization{
56using IdPredicate = std::function<bool(
const std::string&
id)>;
63 return [t = std::move(target)](
const std::string& id) {
72 return [p = std::move(prefix)](
const std::string& id) {
73 const auto d =
id.find_first_of(
":.");
74 const auto head = (d == std::string::npos) ?
id :
id.substr(0, d);
83 return [s = std::move(segment)](
const std::string& id) {
84 std::size_t start = 0;
85 while (start <=
id.size()) {
86 const auto d =
id.find_first_of(
":.", start);
87 const auto end = (d == std::string::npos) ?
id.size() : d;
88 if (
id.compare(start, end - start, s) == 0)
return true;
89 if (d == std::string::npos)
break;
100 return [n, v = std::move(value)](
const std::string& id) {
101 std::size_t start = 0;
103 while (start <=
id.size()) {
104 const auto d =
id.find_first_of(
":.", start);
105 const auto end = (d == std::string::npos) ?
id.size() : d;
107 return id.compare(start, end - start, v) == 0;
109 if (d == std::string::npos)
return false;
120 return [p = std::move(prefix)](
const std::string& id) {
121 return id.size() >= p.size() &&
122 id.compare(0, p.size(), p) == 0;
131 return [p = std::move(preds)](
const std::string& id) {
132 for (
const auto& f : p)
if (!f(
id))
return false;
139 return [p = std::move(preds)](
const std::string& id) {
140 for (
const auto& f : p)
if (f(
id))
return true;
147 return [inner = std::move(p)](
const std::string& id) {
IdPredicate starts_with(std::string prefix)
Match: the id begins with the substring prefix.
Definition id_predicates.hpp:119
IdPredicate at_position(std::size_t n, std::string value)
Match: the n'th (zero-indexed) :/.
Definition id_predicates.hpp:99
IdPredicate primary_prefix(std::string prefix)
Match: the first :/.
Definition id_predicates.hpp:71
std::function< bool(const std::string &id)> IdPredicate
Eligibility predicate over a SerializationRecord's id string.
Definition id_predicates.hpp:56
IdPredicate any_of(std::vector< IdPredicate > preds)
Any sub-predicate true.
Definition id_predicates.hpp:138
IdPredicate all_of(std::vector< IdPredicate > preds)
All sub-predicates must be true.
Definition id_predicates.hpp:130
IdPredicate not_fn(IdPredicate p)
Inverse of p.
Definition id_predicates.hpp:146
IdPredicate contains_segment(std::string segment)
Match: segment appears as any :/.
Definition id_predicates.hpp:82
IdPredicate exact_id(std::string target)
Match: the id equals target exactly.
Definition id_predicates.hpp:62
Definition DomainLayer.hpp:13