ifw-core 6.0.0
Loading...
Searching...
No Matches
variantConverter.hpp
Go to the documentation of this file.
1
8#ifndef CORE_PROTOCOL_OPEN62541_VARIANT_CONVERTER_H_
9#define CORE_PROTOCOL_OPEN62541_VARIANT_CONVERTER_H_
10
11#include <string>
12#include <thread>
13#include <atomic>
14#include <chrono>
15#include <iostream>
16
17#include <boost/variant.hpp>
18
19#ifdef UA_ENABLE_AMALGAMATION
20# include <open62541.h>
21#else
22# include <open62541/types.h>
23#endif
24
27
28
39template<typename CType, typename UaType, const int TypeIndex>
41public:
42 static void ToUaVariant(const protocol::base::Variant src, UA_Variant& dst) {
43 UaType value = boost::get<CType>(src);
44 UA_Variant_setScalarCopy(&dst, &value,
45 &UA_TYPES[TypeIndex]);
46 }
47
48 static void FromUaVariant(const UA_Variant src, protocol::base::Variant& dst) {
49 if (src.type == &UA_TYPES[TypeIndex]) {
50 UaType value;
51 value = *(UaType*)(src.data);
52 dst = boost::get<CType>(value);
53 }
54 }
55};
56
57// Template specialization for converting strings
58template<>
59class VariantScalarConverter<std::string,UA_String,UA_TYPES_STRING> {
60public:
61 static void ToUaVariant(const protocol::base::Variant src, UA_Variant& dst) {
62 UA_String value =
63 UA_STRING_ALLOC(boost::get<std::string>(src).c_str());
64 UA_Variant_setScalarCopy(&dst, &value,
65 &UA_TYPES[UA_TYPES_STRING]);
66 }
67
68 static void FromUaVariant(const UA_Variant src, protocol::base::Variant& dst) {
69 if (src.type == &UA_TYPES[UA_TYPES_STRING]) {
70 UA_String value;
71 value = *(UA_String*)(src.data);
72 dst = boost::get<std::string>(
73 std::string((const char*)value.data, value.length));
74 }
75 }
76};
77
78
79
80} // namespace
81
82#endif // CORE_PROTOCOL_OPEN62541_VARIANT_CONVERTER_H_
static void FromUaVariant(const UA_Variant src, protocol::base::Variant &dst)
Definition variantConverter.hpp:68
static void ToUaVariant(const protocol::base::Variant src, UA_Variant &dst)
Definition variantConverter.hpp:61
Converts a variant holding a scalar value.
Definition variantConverter.hpp:40
static void ToUaVariant(const protocol::base::Variant src, UA_Variant &dst)
Definition variantConverter.hpp:42
static void FromUaVariant(const UA_Variant src, protocol::base::Variant &dst)
Definition variantConverter.hpp:48
boost::variant< bool, int, unsigned int, short, double, std::string, unsigned short, float, int8_t, uint8_t > Variant
Definition iComm.hpp:24
taskPoll class header file.
Definition iDataChangeHandler.hpp:28