9 #ifndef TEST_GEOMETRY_NAMESELECTOR_H
10 #define TEST_GEOMETRY_NAMESELECTOR_H 1
13 #include <initializer_list>
52 using NameList = std::initializer_list<Name_t>;
60 template <
typename LIST>
77 template <
typename LIST>
97 template <
typename... NAMES>
114 template <
typename LIST>
115 void Define(std::string set_name, LIST
const& items);
127 template <
typename... NAMES>
206 template <
typename LIST>
210 template <
typename... NAMES>
281 template <
typename LIST>
290 template <
typename LIST>
294 for (
Name_t item: items) ProcessItem(name_set, item);
302 void NameSelector::AddFirstName<>(KnownNames_t& name_set, Name_t
name);
305 template <
typename... NAMES>
309 AddFirstName(name_set, name);
310 AddFirstName(name_set, other_names...);
316 #endif // TEST_GEOMETRY_NAMESELECTOR_H
void Define(std::string set_name, LIST const &items)
Defines a set.
static Name_t const ClearAllName
name instructing to delete all names
std::set< Name_t > Names_t
list of names
bool DoCheckQueryRegistry(std::ostream *out=nullptr) const
static Response_t ParseMode(Name_t &item, Response_t default_answer=rsAccepted)
Strips the mode specifier from item and returns the insertion mode.
Definitions_t::const_iterator FindDefinition(Name_t &item) const
Strips set specifier and returns iterator to the definition, or end()
std::map< Name_t, NameResponse_t > KnownNames_t
Information about known names.
void AddToDefinition(std::string set_name, NAMES...names)
Parses a list of names and add them to the specified definition.
Response_t DefaultResponse() const
Returns the default answer for names that are not registered.
Names_t RejectedNames() const
Returns a list of names that were rejected.
void BuildNameSet(KnownNames_t &name_set, LIST const &items) const
Fills name_set with a list of items.
bool Accepted(Name_t name) const
Returns whether the name is accepted as good.
void ParseNames(NAMES...names)
Parses a list of names and adds them to the selector.
void PrintConfiguration(std::ostream &) const
Prints the configuration into a stream.
bool operator()(Name_t name) const
Returns whether the name is accepted as good (alias for accept())
Response_t LookupResponse(Name_t name) const
Returns the response for the specified name (does not register query)
void AddFirstName(KnownNames_t &name_set, Name_t name, NAMES...other_names)
Parses the first of the provided names, and recurs.
NameSelector(LIST const &items, Response_t default_answer=rsDefault)
Constructor: Parse()s the specified items.
void ParseName(Name_t name)
Parses a name and adds it to the selector.
A data structure containing how to react to a name.
Definitions_t definitions
a set of definitions
bool Rejected(Name_t name) const
Returns whether the name is rejected as bad.
Names_t AcceptedNames() const
Returns a list of names that were accepted.
void ProcessItem(KnownNames_t &name_set, Name_t item) const
Fills name_set with an item.
NameSelector(Response_t default_answer=rsDefault)
Constructor: an empty selector with a default answer for unknown names.
Response_t
Possible responses.
std::initializer_list< Name_t > NameList
std::map< Name_t, KnownNames_t > Definitions_t
Type of list of definitions.
void Parse(LIST const &items)
Parses the names in the list and adds them to the selector.
std::map< Name_t, size_t > QueryRegistry_t
Type of query counters.
bool CheckQueryRegistry() const
Checks that no known element with valid response was left unqueried.
void ClearQueryRegistry()
Reests the query registry.
KnownNames_t known_names
list of known names, with category
static const std::vector< std::string > names
Response_t response
the response
static Name_t const DefaultName
name representing the default
Names_t QueriedWithStatus(Response_t answer) const
Returns the list of queried names whose response is answer.
void Clear()
Erases all the names in the selector (default answer is unchanged)
void ClearNameSet(KnownNames_t &name_set) const
Erases all the names in the selector (default answer is unchanged)
QueryRegistry_t query_registry
record of all the queries
throw art::Exception (art::errors::Configuration)
bool CheckQueryRegistry(std::ostream &out) const
void InsertItem(KnownNames_t &name_set, Name_t item, Response_t response) const
Adds an item to the name set, working in specified mode.
std::string Name_t
type representing a name
void SetDefaultResponse(Response_t default_answer)
Sets the default answer for names that are not registered.
Response_t Query(Name_t name) const
Returns the response for the specified name (does not throw)