NameSelectorOps.h
Go to the documentation of this file.
1#pragma once
2
3#include <string>
4#include <vector>
5
7{
8
9 template <class DerivedT>
11 {
12 public:
13 NameSelectorOps() = default;
14 virtual ~NameSelectorOps() = default;
15
16
17 virtual DerivedT& withName(const std::string& name) = 0;
18 virtual DerivedT& withNamesMatching(const std::string& regex) = 0;
19
20 virtual DerivedT&
21 withNames(const std::vector<std::string>& names)
22 {
24 }
25
26 template <class StringContainerT>
27 DerivedT&
28 withNames(const StringContainerT& names)
29 {
30 return withNames(names.begin(), names.end());
31 }
32
33 template <class IteratorT>
34 DerivedT&
35 withNames(IteratorT begin, IteratorT end)
36 {
37 for (auto it = begin; it != end; ++it)
38 {
39 this->withName(*it);
40 }
41 return dynamic_cast<DerivedT&>(*this);
42 }
43
44 virtual DerivedT&
45 withNamesStartingWith(const std::string& prefix)
46 {
47 return withNamesMatching(prefix + ".*");
48 }
49
50 virtual DerivedT&
51 withNamesEndingWith(const std::string& suffix)
52 {
53 return withNamesMatching(".*" + suffix);
54 }
55
56 virtual DerivedT&
57 withNamesContaining(const std::string& substring)
58 {
59 return withNamesMatching(".*" + substring + ".*");
60 }
61 };
62
63} // namespace armarx::armem::client::query::detail
virtual DerivedT & withNamesStartingWith(const std::string &prefix)
DerivedT & withNames(const StringContainerT &names)
virtual DerivedT & withNames(const std::vector< std::string > &names)
virtual DerivedT & withNamesContaining(const std::string &substring)
DerivedT & withNames(IteratorT begin, IteratorT end)
virtual DerivedT & withNamesEndingWith(const std::string &suffix)
virtual DerivedT & withNamesMatching(const std::string &regex)=0
virtual DerivedT & withName(const std::string &name)=0