open62541pp 0.22.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/string_utils.hpp" // allocNativeString
7#include "open62541pp/detail/types_handling.hpp" // copyArray
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, std::enable_if_t<std::is_enum_v<T>, int> = 0>
19[[nodiscard]] auto makeNative(T value) noexcept {
20 return static_cast<std::underlying_type_t<T>>(value);
21}
22
23template <typename T, typename U = std::remove_cv_t<std::remove_reference_t<T>>>
24[[nodiscard]] auto makeNative(T&& value
25) -> std::enable_if_t<IsWrapper<U>::value, typename U::NativeType> {
26 using NativeType = typename U::NativeType;
27 NativeType native{};
28 asWrapper<U>(native) = std::forward<T>(value);
29 return native;
30}
31
32template <typename T>
33[[nodiscard]] auto* makeNativeArray(Span<const T> array) {
34 if constexpr (IsWrapper<T>::value) {
35 return copyArray(asNative(array.data()), array.size(), getDataType<T>());
36 } else {
37 return copyArray(array.data(), array.size(), getDataType<T>());
38 }
39}
40
41} // 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