PLCnext API Documentation 23.6.0.37
EnumDictionaryBase.hxx
1
2//
3// Copyright PHOENIX CONTACT Electronics GmbH
4//
6#pragma once
8#include <map>
9
10namespace Arp
11{
12
19template<class T>
21{
22protected: // usings
23 using Fields = std::map<T, const char*>;
24 using InitializerList = std::initializer_list<typename Fields::value_type>;
25 using U = typename std::underlying_type<T>::type;
26
27public: // construction/destruction
28 explicit EnumDictionaryBase(const InitializerList& fields);
29 EnumDictionaryBase(const char* invalidValueString, const InitializerList& fields);
30
31protected: // string conversion operations
36 bool TryGetEnumStringInternal(T value, const char*& pResult)const;
37
42 bool TryGetEnumValueInternal(const char* fieldName, T& value)const;
43
44protected: // fields
45 Fields fields;
46 String invalidValueString;
47
48protected: // static/const fields
49 static const T zeroValue = static_cast<T>(0);
50};
51
53// inline methods of class EnumDictionary<T>
54template<class T>
55EnumDictionaryBase<T>::EnumDictionaryBase(const InitializerList& fields)
56 : fields(fields)
57{
58}
59
60template<class T>
61EnumDictionaryBase<T>::EnumDictionaryBase(const char* invalidValueString, const InitializerList& fields)
62 : fields(fields)
63 , invalidValueString(invalidValueString)
64{
65}
66
67template<class T>
68inline bool EnumDictionaryBase<T>::TryGetEnumStringInternal(T value, const char*& pResult)const
69{
70 pResult = nullptr;
71 typename Fields::const_iterator i = this->fields.find(value);
72 if (i == this->fields.end())
73 {
74 return false;
75 }
76 // else
77 pResult = i->second;
78 return true;
79}
80
81template<class T>
82inline bool EnumDictionaryBase<T>::TryGetEnumValueInternal(const char* fieldName, T& value)const
83{
84 for (const auto& item : this->fields)
85 {
86 if (::strcmp(item.second, fieldName) == 0)
87 {
88 value = item.first;
89 return true;
90 }
91 }
92 // else not found
93 return false;
94}
95
96} // end of namespace Arp
97
The class implements an adapter for enums to define the string literals of the enum entries.
Definition: EnumDictionaryBase.hxx:21
bool TryGetEnumValueInternal(const char *fieldName, T &value) const
Tries to get the enum value of the specified string.
Definition: EnumDictionaryBase.hxx:82
bool TryGetEnumStringInternal(T value, const char *&pResult) const
Returns the string of the specified enum value or nullptr if the value could not be found.
Definition: EnumDictionaryBase.hxx:68
Root namespace for the PLCnext API