open62541pp 0.19.0
C++ wrapper of open62541
Loading...
Searching...
No Matches
Classes | Public Member Functions | Static Public Member Functions | Friends | List of all members
opcua::DataTypeBuilder< T, Tag, U > Class Template Reference

#include <datatype.hpp>

Detailed Description

template<typename T, typename Tag = detail::TagDataTypeAny, typename U = struct DeferT>
class opcua::DataTypeBuilder< T, Tag, U >

Builder to create DataType definitions of custom types.

The attributes memSize, padding, pointerFree, isArray and isOptional are automatically deduced from the types itself.

Definition at line 251 of file datatype.hpp.

Public Member Functions

template<auto U::* field>
auto & addField (std::string_view fieldName, const UA_DataType &fieldType)
 
template<auto U::* field>
auto & addField (std::string_view fieldName)
 
template<typename TMember >
auto & addField (std::string_view fieldName, size_t offset, const UA_DataType &fieldType)
 
template<typename TMember >
auto & addField (std::string_view fieldName, size_t offset)
 
template<size_t U::* fieldSize, auto U::* fieldArray>
auto & addField (std::string_view fieldName, const UA_DataType &fieldType)
 
template<size_t U::* fieldSize, auto U::* fieldArray>
auto & addField (std::string_view fieldName)
 
template<typename TArray >
auto & addField (std::string_view fieldName, size_t offsetSize, size_t offsetArray, const UA_DataType &fieldType)
 
template<typename TArray >
auto & addField (std::string_view fieldName, size_t offsetSize, size_t offsetArray)
 
template<auto U::* memberUnion, typename TField >
auto & addUnionField (std::string_view fieldName, const UA_DataType &fieldType)
 
template<auto U::* memberUnion, typename TField >
auto & addUnionField (std::string_view fieldName)
 
DataType build ()
 

Static Public Member Functions

static auto createEnum (std::string_view typeName, NodeId typeId, NodeId binaryEncodingId)
 
static auto createStructure (std::string_view typeName, NodeId typeId, NodeId binaryEncodingId)
 
static auto createUnion (std::string_view typeName, NodeId typeId, NodeId binaryEncodingId)
 

Friends

template<typename , typename , typename >
class DataTypeBuilder
 

Member Function Documentation

◆ addField() [1/8]

template<typename T , typename Tag = detail::TagDataTypeAny, typename U = struct DeferT>
template<auto U::* field>
auto & opcua::DataTypeBuilder< T, Tag, U >::addField ( std::string_view  fieldName)
inline

Add a structure field (derive DataType from field).

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Definition at line 297 of file datatype.hpp.

◆ addField() [2/8]

template<typename T , typename Tag = detail::TagDataTypeAny, typename U = struct DeferT>
template<size_t U::* fieldSize, auto U::* fieldArray>
auto & opcua::DataTypeBuilder< T, Tag, U >::addField ( std::string_view  fieldName)
inline

Add a structure array field (derive DataType from fieldArray).

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Definition at line 346 of file datatype.hpp.

◆ addField() [3/8]

template<typename T , typename Tag = detail::TagDataTypeAny, typename U = struct DeferT>
template<auto U::* field>
auto & opcua::DataTypeBuilder< T, Tag, U >::addField ( std::string_view  fieldName,
const UA_DataType fieldType 
)
inline

Add a structure field.

The offset is derived from the member pointer.

Template Parameters
fieldMember pointer, e.g. &S::value
Parameters
fieldNameHuman-readable field name
fieldTypeMember data type

Definition at line 287 of file datatype.hpp.

◆ addField() [4/8]

template<typename T , typename Tag = detail::TagDataTypeAny, typename U = struct DeferT>
template<size_t U::* fieldSize, auto U::* fieldArray>
auto & opcua::DataTypeBuilder< T, Tag, U >::addField ( std::string_view  fieldName,
const UA_DataType fieldType 
)
inline

Add a structure array field.

Arrays must consists of two fields: its size (of type size_t) and the pointer to the data. No padding allowed between the size field and the array field. The offset is derived from the member pointer.

Template Parameters
fieldSizeMember pointer to the size field, e.g. &S::length
fieldArrayMember pointer to the array field, e.g. &S::data
Parameters
fieldNameHuman-readable field name
fieldTypeMember data type

Definition at line 331 of file datatype.hpp.

◆ addField() [5/8]

template<typename T , typename Tag = detail::TagDataTypeAny, typename U = struct DeferT>
template<typename TMember >
auto & opcua::DataTypeBuilder< T, Tag, U >::addField ( std::string_view  fieldName,
size_t  offset 
)
inline

Add a structure field with a manual offset (derive DataType from TMember).

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Definition at line 316 of file datatype.hpp.

◆ addField() [6/8]

template<typename T , typename Tag , typename U >
template<typename TMember >
auto & opcua::DataTypeBuilder< T, Tag, U >::addField ( std::string_view  fieldName,
size_t  offset,
const UA_DataType fieldType 
)

Add a structure field with a manual offset.

Template Parameters
TMemberType of the member, e.g. opcua::String
Parameters
fieldNameHuman-readable field name
offsetOffset of the member in the structure
fieldTypeMember data type

Definition at line 470 of file datatype.hpp.

◆ addField() [7/8]

template<typename T , typename Tag = detail::TagDataTypeAny, typename U = struct DeferT>
template<typename TArray >
auto & opcua::DataTypeBuilder< T, Tag, U >::addField ( std::string_view  fieldName,
size_t  offsetSize,
size_t  offsetArray 
)
inline

Add a structure array field with a manual offset (derive DataType from TArray).

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Definition at line 371 of file datatype.hpp.

◆ addField() [8/8]

template<typename T , typename Tag , typename U >
template<typename TArray >
auto & opcua::DataTypeBuilder< T, Tag, U >::addField ( std::string_view  fieldName,
size_t  offsetSize,
size_t  offsetArray,
const UA_DataType fieldType 
)

Add a structure array field with a manual offset.

Template Parameters
TArrayType of the array field, e.g. opcua::String
Parameters
fieldNameHuman-readable field name
offsetSizeOffset of the size field in the structure
offsetArrayOffset of the array field in the structure
fieldTypeArray field data type

Definition at line 496 of file datatype.hpp.

◆ addUnionField() [1/2]

template<typename T , typename Tag = detail::TagDataTypeAny, typename U = struct DeferT>
template<auto U::* memberUnion, typename TField >
auto & opcua::DataTypeBuilder< T, Tag, U >::addUnionField ( std::string_view  fieldName)
inline

Add a union field (derive DataType from TField).

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Definition at line 392 of file datatype.hpp.

◆ addUnionField() [2/2]

template<typename T , typename Tag , typename U >
template<auto U::* memberUnion, typename TField >
auto & opcua::DataTypeBuilder< T, Tag, U >::addUnionField ( std::string_view  fieldName,
const UA_DataType fieldType 
)

Add a union field.

Template Parameters
memberUnionMember pointer to the union, e.g. &S::Uni
TFieldType of the union field
Parameters
fieldNameHuman-readable field name
fieldTypeData type of the union field

Definition at line 529 of file datatype.hpp.

◆ build()

template<typename T , typename Tag , typename U >
DataType opcua::DataTypeBuilder< T, Tag, U >::build ( )

Create the actual DataType.

Definition at line 556 of file datatype.hpp.

◆ createEnum()

template<typename T , typename Tag , typename U >
auto opcua::DataTypeBuilder< T, Tag, U >::createEnum ( std::string_view  typeName,
NodeId  typeId,
NodeId  binaryEncodingId 
)
static

Build a DataType definition for an enum.

Parameters
typeNameHuman-readable type name
typeIdNodeId of the type
binaryEncodingIdNodeId of data type when encoded as binary
Examples
custom_datatypes/custom_datatypes.hpp.

Definition at line 421 of file datatype.hpp.

◆ createStructure()

template<typename T , typename Tag , typename U >
auto opcua::DataTypeBuilder< T, Tag, U >::createStructure ( std::string_view  typeName,
NodeId  typeId,
NodeId  binaryEncodingId 
)
static

Build a DataType definition for a structure.

A structure may have optional fields (pointers).

Parameters
typeNameHuman-readable type name
typeIdNodeId of the type
binaryEncodingIdNodeId of data type when encoded as binary
Examples
custom_datatypes/custom_datatypes.hpp.

Definition at line 437 of file datatype.hpp.

◆ createUnion()

template<typename T , typename Tag , typename U >
auto opcua::DataTypeBuilder< T, Tag, U >::createUnion ( std::string_view  typeName,
NodeId  typeId,
NodeId  binaryEncodingId 
)
static

Build a DataType definition for an union.

Union type consist of a switch field and the actual union.

Parameters
typeNameHuman-readable type name
typeIdNodeId of the type
binaryEncodingIdNodeId of data type when encoded as binary
Examples
custom_datatypes/custom_datatypes.hpp.

Definition at line 453 of file datatype.hpp.

Friends And Related Symbol Documentation

◆ DataTypeBuilder

template<typename T , typename Tag = detail::TagDataTypeAny, typename U = struct DeferT>
template<typename , typename , typename >
friend class DataTypeBuilder
friend

Definition at line 403 of file datatype.hpp.