Chrysalis - Pattern
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"
8
9namespace Chrysalis {
10 template<typename T>
11 requires std::derived_from<T, BaseNamedElement>
14 public:
15 [[nodiscard]] virtual bool has(const std::string& name) const {
16 return names_.contains(name);
17 }
18 void add(T* item) override {
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
virtual void add(T *item)
Definition AssociativeContainer.h:18
Definition NamedElementsContainer.h:12
virtual bool has(const std::string &name) const
Definition NamedElementsContainer.h:15
virtual T * get(const std::string &name) const
Definition NamedElementsContainer.h:23
void add(T *item) override
Definition NamedElementsContainer.h:18
Definition Argument.h:9
#define SERIALIZE_DERIVED_FROM(Base,...)
Definition serialization.h:71