open62541pp 0.19.0
C++ wrapper of open62541
Loading...
Searching...
No Matches
types_conversion.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <string_view>
4#include <type_traits>
5
6#include "open62541pp/detail/types_handling.hpp" // copyArray
8#include "open62541pp/detail/string_utils.hpp" // allocNativeString
9#include "open62541pp/typeregistry.hpp" // getDataType
10#include "open62541pp/wrapper.hpp" // asNative, asWrapper, IsWrapper
11
12namespace opcua::detail {
13
14[[nodiscard]] inline auto makeNative(std::string_view value) {
15 return detail::allocNativeString(value);
16}
17
18template <typename T>
19[[nodiscard]] auto makeNative(T value) noexcept
20 -> std::enable_if_t<std::is_enum_v<T>, std::underlying_type_t<T>> {
21 return static_cast<std::underlying_type_t<T>>(value);
22}
23
24template <typename T, typename U = std::remove_cv_t<std::remove_reference_t<T>>>
25[[nodiscard]] auto makeNative(T&& value)
26 -> std::enable_if_t<IsWrapper<U>::value, typename U::NativeType> {
27 using NativeType = typename U::NativeType;
28 NativeType native{};
29 asWrapper<U>(native) = std::forward<T>(value);
30 return native;
31}
32
33template <typename T>
34[[nodiscard]] auto* makeNativeArray(Span<const T> array) {
35 if constexpr (IsWrapper<T>::value) {
36 return copyArray(asNative(array.data()), array.size(), getDataType<T>());
37 } else {
38 return copyArray(array.data(), array.size(), getDataType<T>());
39 }
40}
41
42} // namespace opcua::detail
constexpr T::NativeType * asNative(T *wrapper) noexcept
Cast Wrapper object pointers to native object pointers.
Definition wrapper.hpp:342
static constexpr bool value
Definition wrapper.hpp:291