4 #include <unordered_map>
54 using DATA_T = std::variant<BOOL_T, INT_T, UINT_T, FLOAT_T, OPAQUE_T, OBJ_LINK_T, STRING_T, EXECUTE_T>;
119 std::vector<ID_T>
instIds()
const;
193 bool add(
const T &value);
228 bool isDataTypeValid()
const;
230 bool isInstanceIdPossible(
ID_T resInstId)
const;
231 bool isTypeIdCompatible(
TYPE_ID type)
const;
232 std::vector<ResInst>::iterator getInstIter(
ID_T resInstId)
const;
240 mutable std::vector<ResInst> _instances;
247 bool Resource::isDataTypeValid()
const {
248 TYPE_ID typeID = dataTypeToID<T>();
256 WPP_LOGW(
TAG_WPP_RES,
"Resource[%d], invalid data value or instance id is not possible", _id);
261 auto instIter = getInstIter(resInstId);
262 instIter->data = value;
264 _instances.push_back({resInstId, value});
274 WPP_LOGW(
TAG_WPP_RES,
"Resource[%d], invalid data value or instance id is not possible", _id);
279 auto instIter = getInstIter(resInstId);
280 instIter->data = std::move(value);
282 ResInst newInst = {resInstId, std::move(value)};
283 _instances.push_back(std::move(newInst));
292 if (!isDataTypeValid<T>() || !
isExist(resInstId)) {
301 auto instIter = getInstIter(resInstId);
302 return std::get<T>(instIter->data);
321 _instances.push_back({resInstId, value});
342 ResInst newInst = {resInstId, std::move(value)};
343 _instances.push_back(std::move(newInst));
350 if (!isDataTypeValid<T>())
return false;
351 if (!isDataVerifierValid(_dataVerifier))
return true;
353 if constexpr (std::is_same<T, BOOL_T>::value) {
354 return std::get<VERIFY_BOOL_T>(_dataVerifier)(data);
355 }
else if constexpr (std::is_same<T, INT_T>::value) {
356 return std::get<VERIFY_INT_T>(_dataVerifier)(data);
357 }
else if constexpr (std::is_same<T, UINT_T>::value) {
358 return std::get<VERIFY_UINT_T>(_dataVerifier)(data);
359 }
else if constexpr (std::is_same<T, FLOAT_T>::value) {
360 return std::get<VERIFY_FLOAT_T>(_dataVerifier)(data);
361 }
else if constexpr (std::is_same<T, OPAQUE_T>::value) {
362 return std::get<VERIFY_OPAQUE_T>(_dataVerifier)(data);
363 }
else if constexpr (std::is_same<T, OBJ_LINK_T>::value) {
364 return std::get<VERIFY_OBJ_LINK_T>(_dataVerifier)(data);
365 }
else if constexpr (std::is_same<T, STRING_T>::value) {
366 return std::get<VERIFY_STRING_T>(_dataVerifier)(data);
367 }
else if constexpr (std::is_same<T, EXECUTE_T>::value) {
368 return std::get<VERIFY_EXECUTE_T>(_dataVerifier)(data);
#define WPP_LOGE(TAG, FMT,...)
#define WPP_LOGW(TAG, FMT,...)
#define SINGLE_INSTANCE_ID
The Resource class in the wpp namespace is a comprehensive and flexible class designed to handle diff...
bool clear()
Remove all instances.
bool isExist(ID_T resInstId) const
Check if the instance ID is exist.
std::variant< BOOL_T, INT_T, UINT_T, FLOAT_T, OPAQUE_T, OBJ_LINK_T, STRING_T, EXECUTE_T > DATA_T
Universal type for data.
Resource & operator=(const Resource &other)
bool remove(ID_T resInstId)
Remove resource instance if resource is MULTIPLE and instance exists, if the resource is SINGLE remov...
bool add(const T &value)
Add new instance with data value by copy for the MULTIPLE resource.
bool set(const T &value, ID_T resInstId=SINGLE_INSTANCE_ID)
Set data value by copy for the resource (instance)
std::variant< VERIFY_INT_T, VERIFY_UINT_T, VERIFY_FLOAT_T, VERIFY_OPAQUE_T, VERIFY_BOOL_T, VERIFY_OBJ_LINK_T, VERIFY_STRING_T, VERIFY_EXECUTE_T > DATA_VERIFIER_T
Universal type for data validation functions.
const ItemOp & getOperation() const
size_t instCount() const
Get the number of resource instances.
ID_T newInstId() const
Find first available instance ID that is not used.
std::vector< ID_T > instIds() const
Returns vector with available ids of resource instances.
bool isDataValueValid(const T &data) const
Check if the data type and value are valid.
bool setDataVerifier(const DATA_VERIFIER_T &verifier)
Set data verifier for the resource.
const T & get(ID_T resInstId=SINGLE_INSTANCE_ID)
TYPE_ID getTypeId() const
The WppConnection class represents a connection interface for the Wpp library.
std::function< bool(const EXECUTE_T &)> VERIFY_EXECUTE_T
std::function< bool(const BOOL_T &)> VERIFY_BOOL_T
std::function< bool(const STRING_T &)> VERIFY_STRING_T
std::function< bool(const INT_T &)> VERIFY_INT_T
Data validation function types.
std::function< bool(const OBJ_LINK_T &)> VERIFY_OBJ_LINK_T
std::function< bool(const UINT_T &)> VERIFY_UINT_T
std::function< bool(const FLOAT_T &)> VERIFY_FLOAT_T
std::function< bool(const OPAQUE_T &)> VERIFY_OPAQUE_T
TYPE_ID
Wpp data types ID.
The ItemOp struct represents the operations that can be performed on a instance/resource.
Type for resource instance.