template<typename TField, typename... TOptions>
class comms::field::Optional< TField, TOptions >
Adaptor class to any other field, that makes the field optional.
When field is optional, it may either exist or not. The behaviour of length(), read() and write() operations depends on the current field's mode.
- Template Parameters
-
TField | Proper type of the field that needs to be optional. |
TOptions | Zero or more options that modify/refine default behaviour of the field.
Supported options are:
|
|
template<typename T , typename TIter > |
static T | readData (TIter &iter) |
| Read data from input buffer. More...
|
|
template<typename T , std::size_t TSize, typename TIter > |
static T | readData (TIter &iter) |
| Read partial data from input buffer. More...
|
|
template<typename T , typename TIter > |
static void | writeData (T value, TIter &iter) |
| Write data into the output buffer. More...
|
|
template<std::size_t TSize, typename T , typename TIter > |
static void | writeData (T value, TIter &iter) |
| Write partial data into the output buffer. More...
|
|
|
(Note that these are not member functions.)
|
template<typename T > |
constexpr bool | isOptional () |
| Compile time check function of whether a provided type is any variant of comms::field::Optional. More...
|
|
template<typename TField , typename... TOptions> |
bool | operator!= (const Optional< TField, TOptions... > &field1, const Optional< TField, TOptions... > &field2) noexcept |
| Non-equality comparison operator. More...
|
|
template<typename TField , typename... TOptions> |
bool | operator< (const Optional< TField, TOptions... > &field1, const Optional< TField, TOptions... > &field2) noexcept |
| Equivalence comparison operator. More...
|
|
template<typename TField , typename... TOptions> |
bool | operator<= (const Optional< TField, TOptions... > &field1, const Optional< TField, TOptions... > &field2) noexcept |
| Equivalence comparison operator. More...
|
|
template<typename TField , typename... TOptions> |
bool | operator== (const Optional< TField, TOptions... > &field1, const Optional< TField, TOptions... > &field2) noexcept |
| Equality comparison operator. More...
|
|
template<typename TField , typename... TOptions> |
bool | operator> (const Optional< TField, TOptions... > &field1, const Optional< TField, TOptions... > &field2) noexcept |
| Equivalence comparison operator. More...
|
|
template<typename TField , typename... TOptions> |
bool | operator>= (const Optional< TField, TOptions... > &field1, const Optional< TField, TOptions... > &field2) noexcept |
| Equivalence comparison operator. More...
|
|
template<typename TField , typename... TOptions> |
const Optional< TField, TOptions... > & | toFieldBase (const Optional< TField, TOptions... > &field) |
| Upcast type of the field definition to its parent comms::field::Optional type in order to have access to its internal types.
|
|
template<typename TField , typename... TOptions> |
Optional< TField, TOptions... > & | toFieldBase (Optional< TField, TOptions... > &field) |
| Upcast type of the field definition to its parent comms::field::Optional type in order to have access to its internal types.
|
|
template<typename TField , typename... TOptions>
template<typename TIter >
Read field value from input data sequence.
If field is marked as missing (mode is OptionalMode::Missing), function returns comms::ErrorStatus::Success without advancing iterator.
If field is marked as existing (mode is OptionalMode::Exists) the read() member function of the wrapped field object is invoked.
If field is marked to be tentative (mode is OptionalMode::Tentative), the call redirected to wrapped field's read() member function if value of the "len" parameter is greater than 0, i.e. there are still bytes available for reading, and field itself is marked as existing.
Otherwise, field is marked as missing and comms::ErrorStatus::Success is returned.
- Parameters
-
[in,out] | iter | Iterator to read the data. |
[in] | len | Number of bytes available for reading. |
- Returns
- Status of read operation.
- Postcondition
- Iterator is advanced.
template<typename... TOptions>
template<typename T , typename TIter >
Read data from input buffer.
Use this function to read data from the intput buffer maintained by the caller. The endianness of the data will be as specified in options of the class.
- Template Parameters
-
T | Return type |
TIter | Type of input iterator |
- Parameters
-
[in,out] | iter | Input iterator. |
- Returns
- The integral type value.
- Precondition
- TSize <= sizeof(T)
-
The iterator must be valid and can be successfully dereferenced and incremented at least sizeof(T) times.
- Postcondition
- The iterator is advanced.
- Note
- Thread safety: Safe for distinct stream buffers, unsafe otherwise.
template<typename... TOptions>
template<typename T , std::size_t TSize, typename TIter >
Read partial data from input buffer.
Use this function to read data from the intput buffer maintained by the caller. The endianness of the data will be as specified in options of the class.
- Template Parameters
-
T | Return type |
TSize | number of bytes to read |
TIter | Type of input iterator |
- Parameters
-
[in,out] | iter | Input iterator. |
- Returns
- The integral type value.
- Precondition
- TSize <= sizeof(T)
-
The iterator must be valid and can be successfully dereferenced and incremented at least TSize times.
- Postcondition
- The internal pointer of the stream buffer is advanced.
- Note
- Thread safety: Safe for distinct stream buffers, unsafe otherwise.
template<typename TField , typename... TOptions>
template<typename TIter >
Read field value from input data sequence without error check and status report.
Similar to read(), but doesn't perform any correctness checks and doesn't report any failures.
- Parameters
-
[in,out] | iter | Iterator to read the data. |
- Postcondition
- Iterator is advanced.
template<typename... TOptions>
template<typename T , typename TIter >
static void comms::Field< TOptions >::writeData |
( |
T |
value, |
|
|
TIter & |
iter |
|
) |
| |
|
staticprotectedinherited |
Write data into the output buffer.
Use this function to write data to the the buffer maintained by the caller. The endianness of the data will be as specified in the options provided to the class.
- Template Parameters
-
T | Type of the value to write. Must be integral. |
Type | of output iterator |
- Parameters
-
[in] | value | Integral type value to be written. |
[in,out] | iter | Output iterator. |
- Precondition
- The iterator must be valid and can be successfully dereferenced and incremented at least sizeof(T) times.
- Postcondition
- The iterator is advanced.
- Note
- Thread safety: Safe for distinct buffers, unsafe otherwise.
template<typename... TOptions>
template<std::size_t TSize, typename T , typename TIter >
static void comms::Field< TOptions >::writeData |
( |
T |
value, |
|
|
TIter & |
iter |
|
) |
| |
|
staticprotectedinherited |
Write partial data into the output buffer.
Use this function to write partial data to the buffer maintained by the caller. The endianness of the data will be as specified the class options.
- Template Parameters
-
TSize | Length of the value in bytes known in compile time. |
T | Type of the value to write. Must be integral. |
TIter | Type of output iterator |
- Parameters
-
[in] | value | Integral type value to be written. |
[in,out] | iter | Output iterator. |
- Precondition
- TSize <= sizeof(T)
-
The iterator must be valid and can be successfully dereferenced and incremented at least TSize times.
- Postcondition
- The iterator is advanced.
- Note
- Thread safety: Safe for distinct buffers, unsafe otherwise.
template<typename TField , typename... TOptions>
template<typename TIter >
Write current field value to output data sequence without error check and status report.
Similar to write(), but doesn't perform any correctness checks and doesn't report any failures.
- Parameters
-
[in,out] | iter | Iterator to write the data. |
- Postcondition
- Iterator is advanced.