lintel 0.2.0
Loading...
Searching...
No Matches
Property.h
Go to the documentation of this file.
1#ifndef PROPERTY_H
2#define PROPERTY_H
3
4#include <chrono>
5#include <memory>
6#include <string>
7#include <type_traits>
8
13
14namespace lintel {
15class PropertyService;
16
18template<class T> class Property : public PropertyBase
19{
20private:
22
24 static constexpr std::string_view getTypeName()
25 {
26 if constexpr (std::is_same_v<T, int8_t>)
27 return "int8_t";
28 else if constexpr (std::is_same_v<T, int16_t>)
29 return "int16_t";
30 else if constexpr (std::is_same_v<T, int32_t>)
31 return "int32_t";
32 else if constexpr (std::is_same_v<T, int64_t>)
33 return "int64_t";
34 else if constexpr (std::is_same_v<T, uint8_t>)
35 return "uint8_t";
36 else if constexpr (std::is_same_v<T, uint16_t>)
37 return "uint16_t";
38 else if constexpr (std::is_same_v<T, uint32_t>)
39 return "uint32_t";
40 else if constexpr (std::is_same_v<T, uint64_t>)
41 return "uint64_t";
42 else if constexpr (std::is_same_v<T, std::string>)
43 return "std::string";
44 else if constexpr (std::is_same_v<T, std::chrono::milliseconds>)
45 return "std::chrono::milliseconds";
46 else if constexpr (std::is_same_v<T, std::chrono::seconds>)
47 return "std::chrono::seconds";
48 else if constexpr (std::is_same_v<T, std::chrono::minutes>)
49 return "std::chrono::minutes";
50 else
51 return type_name<T>();
52 }
53
54public:
62 Property(const std::string &name,
63 const std::string &instanceName,
64 const std::string &className,
65 const std::string &processName,
66 T value,
67 const std::string &description,
68 bool runtimeChange)
69 : PropertyBase(name, instanceName, className, processName, description, runtimeChange), m_storage(std::move(value))
70 {}
71
72 Property() : PropertyBase("", "", "", "", "", false), m_storage() {}
73
74 [[nodiscard]] std::string getType() const override { return std::string(getTypeName()); }
75
77 T getValue() { return m_storage.load(); }
78
80 [[nodiscard]] static constexpr bool isLockFree() { return PropertyValueStorage<T>::isLockFree(); }
81
83 std::string toString() override { return StringifyService<T>::serializeToString(m_storage.load()); }
84
86 void setValue(const T &value) { m_storage.store(value); }
87
89 void setValueString(const std::string &value) override
90 {
92 }
93
94 friend class PropertyService;
95};
96
97}// namespace lintel
98#endif// PROPERTY_H
Definition PropertyBase.h:13
Definition PropertyService.h:31
Definition PropertyValueStorage.h:33
static constexpr bool isLockFree()
Definition PropertyValueStorage.h:58
T load() const
Definition PropertyValueStorage.h:44
void store(const T &value)
Definition PropertyValueStorage.h:51
Definition Property.h:19
void setValueString(const std::string &value) override
Definition Property.h:89
std::string getType() const override
Definition Property.h:74
static constexpr bool isLockFree()
Definition Property.h:80
std::string toString() override
Definition Property.h:83
T getValue()
Definition Property.h:77
Property(const std::string &name, const std::string &instanceName, const std::string &className, const std::string &processName, T value, const std::string &description, bool runtimeChange)
Definition Property.h:62
void setValue(const T &value)
Definition Property.h:86
Property()
Definition Property.h:72
Definition StringifyService.h:13
static std::string serializeToString(const T &value)
Definition StringifyService.h:19
Definition BaseFeature.h:6
constexpr std::string_view type_name()
Definition TypeName.h:9