Chrysalis - Pattern
Toggle main menu visibility
Loading...
Searching...
No Matches
NamedElementsContainer.h
Go to the documentation of this file.
1
#ifndef CHRYSALIS_NAMEDELEMENTSCONTAINER_H
2
#define CHRYSALIS_NAMEDELEMENTSCONTAINER_H
3
4
#include <unordered_map>
5
6
#include "
BaseNamedElement.h
"
7
#include "
CompositiveContainer.h
"
8
9
namespace
Chrysalis
{
10
template
<
typename
T>
11
requires
std::derived_from<T, BaseNamedElement>
12
class
NamedElementsContainer
:
public
CompositiveContainer
<T> {
13
SERIALIZE_DERIVED_FROM
(
CompositiveContainer<T>
, names_)
14
public
:
15
[[nodiscard]]
virtual
bool
has
(
const
std::string& name)
const
{
16
return
names_.contains(name);
17
}
18
void
add
(T* item)
override
{
19
CompositiveContainer<T>::add
(item);
20
names_[item->getName()] = item;
21
if
(item->hasAlias()) names_[item->getAlias()] = item;
22
}
23
virtual
T*
get
(
const
std::string& name)
const
{
24
return
names_.at(name);
25
}
26
private
:
27
std::unordered_map<std::string, T*> names_;
28
};
29
}
30
31
#endif
//CHRYSALIS_NAMEDELEMENTSCONTAINER_H
BaseNamedElement.h
CompositiveContainer.h
Chrysalis::AssociativeContainer::add
virtual void add(T *item)
Definition
AssociativeContainer.h:18
Chrysalis::CompositiveContainer::CompositiveContainer
CompositiveContainer()=default
Chrysalis::NamedElementsContainer
Definition
NamedElementsContainer.h:12
Chrysalis::NamedElementsContainer::has
virtual bool has(const std::string &name) const
Definition
NamedElementsContainer.h:15
Chrysalis::NamedElementsContainer::get
virtual T * get(const std::string &name) const
Definition
NamedElementsContainer.h:23
Chrysalis::NamedElementsContainer::add
void add(T *item) override
Definition
NamedElementsContainer.h:18
Chrysalis
Definition
Argument.h:9
SERIALIZE_DERIVED_FROM
#define SERIALIZE_DERIVED_FROM(Base,...)
Definition
serialization.h:71
pattern
include
NamedElementsContainer.h
Generated by
1.17.0