Files
qt6-migration-pipeline/external/rti_connext_dds-7.7.0/include/ndds/xcdr/xcdr_stream.h
T
torstenandCopilot 342ffd3e5c Update submodule to latest BUILD_RTI fixes
- HandlerMinelayerData: BUILD_RTI Guards für RTI-Abhängigkeiten
- svcTabCommon: Export-Header-Fix via Fallback-Target
- TrainingAreaBase: Stub-Header für BUILD_RTI=OFF
- ddsfts: Include-Pfad und Dependency-Fixes
- BUILD_RTI=OFF Compilation vollständig unterstützt

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Entire-Checkpoint: 01M0JNZA586SACX1PRZ2DJAE5S
2026-08-21 19:30:20 +02:00

777 lines
25 KiB
C

/*
(c) Copyright, Real-Time Innovations, 2014-2017.
All rights reserved.
No duplications, whole or partial, manual or electronic, may be made
without express written permission. Any such copies, or
revisions thereof, must display this notice unaltered.
This code contains trade secrets of Real-Time Innovations, Inc.
============================================================================= */
#ifndef xcdr_stream_h
#define xcdr_stream_h
#include "xcdr/xcdr_dll.h"
#include "xcdr/xcdr_infrastructure.h"
#ifdef __cplusplus
extern "C" {
#endif
/* The maximum size of a CDR stream
*
* We subtract 1024 because the core does some operations
* on the returned result that may end up adding some additional bytes
*
*/
#define RTI_XCDR_MAX_SERIALIZED_SIZE (RTIXCdrLong_MAX-1024)
/*
* The maximum size of a CDR stream that is sufficiently aligned
*/
#define RTI_XCDR_MAX_ALIGNED_SERIALIZED_SIZE \
RTIOsapiAlignment_alignUInt64Up( \
RTI_XCDR_MAX_SERIALIZED_SIZE - MIG_RTPS_SUBMESSAGE_ALIGNMENT, \
MIG_RTPS_SUBMESSAGE_ALIGNMENT)
typedef RTIXCdrUnsignedShort RTIXCdrEncapsulationId;
#define RTI_XCDR_ENCAPSULATION_ID_CDR_BE 0x0000
#define RTI_XCDR_ENCAPSULATION_ID_CDR_LE 0x0001
#define RTI_XCDR_ENCAPSULATION_ID_PL_CDR_BE 0x0002
#define RTI_XCDR_ENCAPSULATION_ID_PL_CDR_LE 0x0003
#define RTI_XCDR_ENCAPSULATION_ID_CDR2_BE 0x0006
#define RTI_XCDR_ENCAPSULATION_ID_CDR2_LE 0x0007
#define RTI_XCDR_ENCAPSULATION_ID_D_CDR2_BE 0x0008
#define RTI_XCDR_ENCAPSULATION_ID_D_CDR2_LE 0x0009
#define RTI_XCDR_ENCAPSULATION_ID_PL_CDR2_BE 0x000a
#define RTI_XCDR_ENCAPSULATION_ID_PL_CDR2_LE 0x000b
#define RTI_XCDR_ENCAPSULATION_ID_CDR_BE_STR "CDR_BE"
#define RTI_XCDR_ENCAPSULATION_ID_CDR_LE_STR "CDR_LE"
#define RTI_XCDR_ENCAPSULATION_ID_PL_CDR_BE_STR "PL_CDR_BE"
#define RTI_XCDR_ENCAPSULATION_ID_PL_CDR_LE_STR "PL_CDR_LE"
#define RTI_XCDR_ENCAPSULATION_ID_CDR2_BE_STR "CDR2_BE"
#define RTI_XCDR_ENCAPSULATION_ID_CDR2_LE_STR "CDR2_LE"
#define RTI_XCDR_ENCAPSULATION_ID_D_CDR2_BE_STR "D_CDR2_BE"
#define RTI_XCDR_ENCAPSULATION_ID_D_CDR2_LE_STR "D_CDR2_LE"
#define RTI_XCDR_ENCAPSULATION_ID_PL_CDR2_BE_STR "PL_CDR2_BE"
#define RTI_XCDR_ENCAPSULATION_ID_PL_CDR2_LE_STR "PL_CDR2_LE"
#ifdef RTI_ENDIAN_LITTLE
#define RTI_XCDR_ENCAPSULATION_ID_CDR_NATIVE_ENDIAN RTI_XCDR_ENCAPSULATION_ID_CDR_LE
#define RTI_XCDR_ENCAPSULATION_ID_PL_CDR_NATIVE_ENDIAN RTI_XCDR_ENCAPSULATION_ID_PL_CDR_LE
#define RTI_XCDR_ENCAPSULATION_ID_CDR2_NATIVE_ENDIAN RTI_XCDR_ENCAPSULATION_ID_CDR2_LE
#define RTI_XCDR_ENCAPSULATION_ID_D_CDR2_NATIVE_ENDIAN RTI_XCDR_ENCAPSULATION_ID_D_CDR2_LE
#define RTI_XCDR_ENCAPSULATION_ID_PL_CDR2_NATIVE_ENDIAN RTI_XCDR_ENCAPSULATION_ID_PL_CDR2_LE
#else
#define RTI_XCDR_ENCAPSULATION_ID_CDR_NATIVE_ENDIAN RTI_XCDR_ENCAPSULATION_ID_CDR_BE
#define RTI_XCDR_ENCAPSULATION_ID_PL_CDR_NATIVE_ENDIAN RTI_XCDR_ENCAPSULATION_ID_PL_CDR_BE
#define RTI_XCDR_ENCAPSULATION_ID_CDR2_NATIVE_ENDIAN RTI_XCDR_ENCAPSULATION_ID_CDR2_BE
#define RTI_XCDR_ENCAPSULATION_ID_D_CDR2_NATIVE_ENDIAN RTI_XCDR_ENCAPSULATION_ID_D_CDR2_BE
#define RTI_XCDR_ENCAPSULATION_ID_PL_CDR2_NATIVE_ENDIAN RTI_XCDR_ENCAPSULATION_ID_PL_CDR2_BE
#endif
/*
* Represents two bytes of options assigned in RTPS for each representation.
* We are currently using 3 bits of this 2 bytes for a compression feature to
* compress the user data and 2 bits are used to indicate how many bytes of
* padding are at the end of the RTPS submessage.
*/
typedef RTIXCdrUnsignedShort RTIXCdrEncapsulationOptions;
#define RTI_XCDR_ENCAPSULATION_OPTIONS_NONE 0x0000
#define RTI_XCDR_ENCAPSULATION_HEADER_SIZE 4
#define RTI_XCDR_MAX_SERIALIZED_SIZE_NO_ENCAPSULATION \
(RTI_XCDR_MAX_SERIALIZED_SIZE - RTI_XCDR_ENCAPSULATION_HEADER_SIZE)
#define RTI_XCDR_ENCAPSULATION_ID_SIZE 2
#define RTI_XCDR_ENCAPSULATION_OPTIONS_SIZE 2
/*
* Size of the DHEADER for XCDR v2 encapsulation. This header is used in mutable
* and appendable types.
*/
#define RTI_XCDR_V2_PARAMETER_HEADER_SIZE 4
/*
* Compression header size only applicable for user data compression.
* This header holds the size of the uncompressed sample providing to the reader
* the information to allocate enouth memory to hold the uncompressed sample.
* At this moment this is an extension from RTI.
*/
#define RTI_XCDR_COMPRESSION_HEADER_SIZE 4
#define RTI_XCDR_MAX_ALIGNMENT 8
#define RTI_XCDR_MAX_XCDR2_ALIGNMENT 4
struct RTIXCdrStreamState;
/* The current number of CDR types, CDR1 and CDR2 */
#define RTI_XCDR_TK_NUM_CDR_TYPES 2
/*
* The number of entries in the RTIXCdr_TCKind_g_primitiveSizes array so that
* we can index into the array to get a primitive type's size without calling a
* function and having to do a switch
*/
#define RTI_XCDR_TK_NUM_PRIMITIVE_SIZES 25
extern RTIXCdrDllVariable const RTIXCdrUnsignedLong
RTIXCdr_TCKind_g_primitiveSizes[RTI_XCDR_TK_NUM_PRIMITIVE_SIZES];
/*
* The sizes of primitive kinds in CDR, NOT in a language binding
* 1st dimension: v1 or v2
* 2nd dimension: memberKind
*/
extern RTIXCdrDllVariable const RTIXCdrUnsignedLong
RTIXCdr_TCKind_g_primitiveCdrSizes[RTI_XCDR_TK_NUM_CDR_TYPES]
[RTI_XCDR_TK_NUM_PRIMITIVE_SIZES];
/*
* The alignments of primitive kinds in CDR, NOT in a language binding
* 1st dimension: v1 or v2
* 2nd dimension: memberKind
*/
extern RTIXCdrDllVariable const RTIXCdrAlignment
RTIXCdr_TCKind_g_primitiveCdrAlignments
[RTI_XCDR_TK_NUM_CDR_TYPES][RTI_XCDR_TK_NUM_PRIMITIVE_SIZES];
extern RTIXCdrDllExport
RTIXCdrBoolean RTIXCdrEncapsulationId_isCdr(
RTIXCdrEncapsulationId encapsulationId);
extern RTIXCdrDllExport
RTIXCdrBoolean RTIXCdrEncapsulationId_isCdrV2(
RTIXCdrEncapsulationId encapsulationId);
extern RTIXCdrDllExport
RTIXCdrBoolean RTIXCdrEncapsulationId_isLittleEndianCdr(
RTIXCdrEncapsulationId encapsulationId);
extern RTIXCdrDllExport
RTIXCdrBoolean RTIXCdrEncapsulationId_isBigEndianCdr(
RTIXCdrEncapsulationId encapsulationId);
/*
* Returns the encapsulation Id that corresponds to the plain (non-PL) CDR
* version 2 with the native endianness
*/
extern RTIXCdrDllExport
RTIXCdrEncapsulationId RTIXCdrEncapsulationId_getNativePlainCdr2(void);
/*
* Returns the encapsulation Id that corresponds to the PL CDR
* version 2 with the native endianness
*/
extern RTIXCdrDllExport
RTIXCdrEncapsulationId RTIXCdrEncapsulationId_getNativePlCdr2(void);
typedef RTIXCdrOctet RTIXCdrEndian;
struct RTIXCdrStream;
extern RTIXCdrDllExport
void RTIXCdrStream_init(struct RTIXCdrStream *me);
extern RTIXCdrDllExport
void RTIXCdrStream_initWithBuffer(
struct RTIXCdrStream *me,
char *buffer,
RTIXCdrUnsignedLong bufferLength);
extern RTIXCdrDllExport
void RTIXCdrStream_set(
struct RTIXCdrStream *me,
char *buffer,
RTIXCdrUnsignedLong bufferLength);
extern RTIXCdrDllExport
RTIXCdrEncapsulationId RTIXCdrStream_getEncapsulationId(
struct RTIXCdrStream *me);
extern RTIXCdrDllExport
void RTIXCdrStream_setEncapsulationId(
struct RTIXCdrStream *me,
RTIXCdrEncapsulationId encapsulationId);
extern RTIXCdrDllExport
void RTIXCdrStream_setEncapsulationOptions(
struct RTIXCdrStream *me,
RTIXCdrEncapsulationId encapsulationId);
extern RTIXCdrDllExport
RTIXCdrBoolean RTIXCdrStream_serializeAndSetCdrEncapsulation(
struct RTIXCdrStream *me,
RTIXCdrEncapsulationId encapsulationId);
/**
* @brief Serializes the encapsulation header by using the encapsulation
* ID contained in encapsulationHeader.
*
* This function serializes the default encapsulation options with value 0.
*
* @param me The stream in which to serialize the encapsulation header.
* @param encapsulationHeader The buffer containing the encapsulation ID in
* the first 2 bytes in network byte order.
*
* @return RTIXCdrBoolean RTI_XCDR_TRUE if success, RTI_XCDR_FALSE otherwise.
*/
extern RTIXCdrDllExport
RTIXCdrBoolean RTIXCdrStream_serializeAndSetCdrEncapsulationFromHeader(
struct RTIXCdrStream *me,
const char *encapsulationHeader);
extern RTIXCdrDllExport
RTIXCdrBoolean RTIXCdrStream_serializeAndSetCdrEncapsulationWithEndianness(
struct RTIXCdrStream *me,
RTIXCdrEncapsulationId encapsulationId,
RTIXCdrBoolean littleEndian);
extern RTIXCdrDllExport
RTIXCdrBoolean RTIXCdrStream_deserializeAndSetCdrEncapsulation(
struct RTIXCdrStream *me);
/**
* @brief Sets the current position offset to the stream.
*
* @param me[in,out] The stream in which to set the current position offset.
* @param offset[in] The offset to set.
*/
extern RTIXCdrDllExport
void RTIXCdrStream_setCurrentPositionOffset(
struct RTIXCdrStream *me,
RTIXCdrUnsignedLong offset);
extern RTIXCdrDllExport
char * RTIXCdrStream_resetAlignment(struct RTIXCdrStream *me);
extern RTIXCdrDllExport
void RTIXCdrStream_restoreAlignment(struct RTIXCdrStream *me, char *position);
extern RTIXCdrDllExport
char * RTIXCdrStream_getCurrentPosition(struct RTIXCdrStream *me);
extern RTIXCdrDllExport
void RTIXCdrStream_setCurrentPosition(
struct RTIXCdrStream *me,
char *position);
extern RTIXCdrDllExport
void RTIXCdrStream_increaseCurrentPosition(
struct RTIXCdrStream *me,
RTIXCdrUnsignedLong count);
extern RTIXCdrDllExport
char *RTIXCdrStream_getBuffer(struct RTIXCdrStream *me);
extern RTIXCdrDllExport
RTIXCdrBoolean RTIXCdrStream_serializeCdrEncapsulationDefault(
struct RTIXCdrStream *me);
extern RTIXCdrDllExport
RTIXCdrUnsignedLong RTIXCdrStream_getRemainder(struct RTIXCdrStream *me);
extern RTIXCdrDllExport
void RTIXCdrStream_initFromStream(
struct RTIXCdrStream *me,
struct RTIXCdrStream *srcStream);
/*i
* @brief Utility functions to set the compression ID to the encapsulation
* options.
* @note RTI_EXTENSION
*/
extern RTIXCdrDllExport
void RTIXCdrStream_setEncapsulationOptionsCompressionId(
struct RTIXCdrStream *me,
RTIXCdrCompressionId compressionId);
/*i
* @brief Utility functions to get the compression ID directly from the
* encapsulation options.
* @note RTI_EXTENSION
*/
extern RTIXCdrDllExport
RTIXCdrCompressionId RTIXCdrStream_getEncapsulationOptionsCompressionId(
struct RTIXCdrStream* me);
/**
* @brief Pack the given parameters into the options (unsigned short type).
*
* If compression is not being used (compressionId == 0):
*
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | |0 0|0 0 0|SP |
* +---------------+---------------+
*
* Otherwise:
*
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | |SP | ID |CP |
* +---------------+---------------+
*
* CP: Compression padding
* ID: Compression ID
* SP: Serialized data padding
*
* @param options \n Out. Options.
* @param compressionId \n In. Compression plugin class ID.
* @param serializedDataNumPaddingBytes \n In. Number of padding bytes for the
* serialized data.
* @param compressionNumPaddingBytes \n In. Number of padding bytes for the
* compressed data.
*/
extern RTIXCdrDllExport
void RTIXCdrEncapsulationOptions_pack(
RTIXCdrEncapsulationOptions *options,
RTIXCdrOctet serializedDataNumPaddingBytes,
RTIXCdrCompressionId compressionId,
RTIXCdrOctet compressionNumPaddingBytes);
/**
* @brief Unpack the given options (unsigned short type) into the given \
* parameters.
*
* @param options \n In. Options.
* @param serializedDataNumPaddingBytes \n Out. Number of padding bytes for the
* serialized data.
* @param compressionId \n Out. Compression plugin class ID.
* @param compressionNumPaddingBytes \n Out. Number of padding bytes for the
* compressed data.
*/
extern RTIXCdrDllExport
void RTIXCdrEncapsulationOptions_unpack(
RTIXCdrEncapsulationOptions options,
RTIXCdrOctet *serializedDataNumPaddingBytes,
RTIXCdrCompressionId *compressionId,
RTIXCdrOctet *compressionNumPaddingBytes);
/**
* @brief Packs the given parameters into the stream's options and sets
* the encapsulation options in the stream.
*
* @param me \n Out. The stream in which to set the encapsulation options.
* @param serializedDataNumPaddingBytes \n In. Number of padding bytes for the
* serialized data.
* @param compressionId \n In. Compression plugin class ID.
* @param compressionNumPaddingBytes \n In. Number of padding bytes for the
* compressed data.
*/
extern RTIXCdrDllExport
void RTIXCdrStream_packEncapsulationOptions(
struct RTIXCdrStream *me,
RTIXCdrOctet serializedDataNumPaddingBytes,
RTIXCdrCompressionId compressionId,
RTIXCdrOctet compressionNumPaddingBytes);
/**
* @brief Unpacks the encapsulation options from the stream into the given
* parameters.
*
* @param me \n In. The stream from which to get the encapsulation options.
* @param serializedDataNumPaddingBytes \n Out. Number of padding bytes for the
* serialized data.
* @param compressionId \n Out. Compression plugin class ID.
* @param compressionNumPaddingBytes \n Out. Number of padding bytes for the
* compressed data.
*/
extern RTIXCdrDllExport
void RTIXCdrStream_unpackEncapsulationOptions(
const struct RTIXCdrStream *me,
RTIXCdrOctet *serializedDataNumPaddingBytes,
RTIXCdrCompressionId *compressionId,
RTIXCdrOctet *compressionNumPaddingBytes);
/*i
* @brief Utility function to convert an encapsulationId into a string
* representation
*/
extern RTIXCdrDllExport
const char * RTIXCdrEncapsulationId_toStr(RTIXCdrEncapsulationId encapsulationId);
/*
* Primitive-type serialization
*/
extern RTIXCdrDllExport
void RTIXCdrStream_serializeWcharFast(
struct RTIXCdrStream *me,
const RTIXCdrWchar *in,
RTIXCdrBoolean v1);
extern RTIXCdrDllExport
void RTIXCdrStream_deserializeWcharFast(
struct RTIXCdrStream *me,
const RTIXCdrWchar *in,
RTIXCdrBoolean v1);
extern RTIXCdrDllExport
RTIXCdrBoolean RTIXCdrStream_serialize1ByteFast(
struct RTIXCdrStream *me,
const RTIXCdr1Byte *in);
extern RTIXCdrDllExport
RTIXCdrBoolean RTIXCdrStream_deserialize1ByteFast(
struct RTIXCdrStream *me,
RTIXCdr1Byte *in);
extern RTIXCdrDllExport
RTIXCdrBoolean RTIXCdrStream_serialize2ByteFast(
struct RTIXCdrStream *me,
const RTIXCdr2Byte *in);
extern RTIXCdrDllExport
RTIXCdrBoolean RTIXCdrStream_deserialize2ByteFast(
struct RTIXCdrStream *me,
RTIXCdr2Byte *in);
extern RTIXCdrDllExport
RTIXCdrBoolean RTIXCdrStream_serialize4ByteFast(
struct RTIXCdrStream *me,
const RTIXCdr4Byte *in);
extern RTIXCdrDllExport
RTIXCdrBoolean RTIXCdrStream_deserialize4ByteFast(
struct RTIXCdrStream *me,
RTIXCdr4Byte *in);
extern RTIXCdrDllExport
RTIXCdrBoolean RTIXCdrStream_serialize8ByteFast(
struct RTIXCdrStream *me,
const RTIXCdr8Byte *in);
extern RTIXCdrDllExport
RTIXCdrBoolean RTIXCdrStream_deserialize8ByteFast(
struct RTIXCdrStream *me,
RTIXCdr8Byte *in);
extern RTIXCdrDllExport
RTIXCdrBoolean RTIXCdrStream_serialize16ByteFast(
struct RTIXCdrStream *me,
const RTIXCdr8Byte *in);
extern RTIXCdrDllExport
RTIXCdrBoolean RTIXCdrStream_deserialize16ByteFast(
struct RTIXCdrStream *me,
RTIXCdr8Byte *in);
extern RTIXCdrDllExport
RTIXCdrBoolean RTIXCdrStream_deserializeNByte(
struct RTIXCdrStream *me,
RTIXCdr1Byte *in,
RTIXCdrAlignment alignment,
RTIXCdrUnsignedLong count);
extern RTIXCdrDllExport
RTIXCdrBoolean RTIXCdrStream_serializeNByte(
struct RTIXCdrStream *me,
const RTIXCdr1Byte *in,
RTIXCdrAlignment alignment,
RTIXCdrUnsignedLong count);
extern RTIXCdrDllExport
RTIXCdrBoolean RTIXCdrStream_align(
struct RTIXCdrStream *me,
RTIXCdrAlignment alignment);
/**
* @brief Aligns the stream to the submessage alignment and sets the
* padding bits in the encapsulation options.
*
* @param me[in,out] The stream to align.
* @param paddingBytes[out] The added padding bytes.
* @param serializePadding[in] If RTI_XCDR_TRUE, the padding bytes are
* serialized into the stream as part of the encapsulation options.
* If RTI_XCDR_FALSE, the padding bytes are not serialized into the stream.
*
* @return RTIXCdrBoolean RTI_XCDR_TRUE if success, RTI_XCDR_FALSE otherwise.
*/
extern RTIXCdrDllExport
RTIXCdrBoolean RTIXCdrStream_finish(
struct RTIXCdrStream *me,
RTIXCdrOctet *paddingBytes,
RTIXCdrBoolean serializePadding);
/**
* @brief Helper function to check if the stream is aligned to the alignment
* we provide.
*
* @param me
* @param alignment
* @return RTIXCdrBoolean true if it is aligned, false otherwise.
*/
extern RTIXCdrDllExport
RTIXCdrBoolean RTIXCdrStream_isAligned(
struct RTIXCdrStream *me,
RTIXCdrAlignment alignment);
extern RTIXCdrDllExport
void RTIXCdrStream_serializeWchar(
struct RTIXCdrStream *me,
RTIXCdrBoolean* result,
const RTIXCdrWchar *in,
RTIXCdrBoolean v1);
extern RTIXCdrDllExport
void RTIXCdrStream_deserializeWchar(
struct RTIXCdrStream *me,
RTIXCdrBoolean* result,
const RTIXCdrWchar *in,
RTIXCdrBoolean v1);
extern RTIXCdrDllExport
RTIXCdrBoolean RTIXCdrStream_serialize1Byte(
struct RTIXCdrStream *me,
const RTIXCdr1Byte *in);
extern RTIXCdrDllExport
RTIXCdrBoolean RTIXCdrStream_serialize2Byte(
struct RTIXCdrStream *me,
const RTIXCdr2Byte *in,
RTIXCdrBoolean align);
extern RTIXCdrDllExport
RTIXCdrBoolean RTIXCdrStream_serialize4Byte(
struct RTIXCdrStream *me,
const RTIXCdr4Byte *in,
RTIXCdrBoolean align);
extern RTIXCdrDllExport
RTIXCdrBoolean RTIXCdrStream_serialize8Byte(
struct RTIXCdrStream *me,
const RTIXCdr8Byte *in,
RTIXCdrBoolean align,
RTIXCdrAlignment alignment);
extern RTIXCdrDllExport
RTIXCdrBoolean RTIXCdrStream_serializePrimitiveArray(
struct RTIXCdrStream *me,
const void *in,
RTIXCdrBoolean align,
RTIXCdrAlignment alignment,
RTIXCdrUnsignedLong elementSize,
RTIXCdrUnsignedLong length);
extern RTIXCdrDllExport
RTIXCdrBoolean RTIXCdrStream_serializePrimitiveSequence(
struct RTIXCdrStream *me,
const void *in,
RTIXCdrUnsignedLong length,
RTIXCdrUnsignedLong maximumLength,
RTIXCdrAlignment alignment,
RTIXCdrUnsignedLong elementSize);
extern RTIXCdrDllExport
RTIXCdrBoolean RTIXCdrStream_deserialize1Byte(
struct RTIXCdrStream *me,
RTIXCdr1Byte *in);
extern RTIXCdrDllExport
RTIXCdrBoolean RTIXCdrStream_deserialize2Byte(
struct RTIXCdrStream *me,
RTIXCdr2Byte *in,
RTIXCdrBoolean align);
extern RTIXCdrDllExport
RTIXCdrBoolean RTIXCdrStream_deserialize4Byte(
struct RTIXCdrStream *me,
RTIXCdr4Byte *in,
RTIXCdrBoolean align);
extern RTIXCdrDllExport
RTIXCdrBoolean RTIXCdrStream_deserialize8Byte(
struct RTIXCdrStream *me,
RTIXCdr8Byte *in,
RTIXCdrBoolean align,
RTIXCdrAlignment alignment);
extern RTIXCdrDllExport
RTIXCdrBoolean RTIXCdrStream_deserialize16Byte(
struct RTIXCdrStream *me,
RTIXCdr16Byte *in,
RTIXCdrBoolean align,
RTIXCdrAlignment alignment);
extern RTIXCdrDllExport
RTIXCdrBoolean RTIXCdrStream_deserializePrimitiveArray(
struct RTIXCdrStream *me,
void *out,
RTIXCdrBoolean align,
RTIXCdrAlignment alignment,
RTIXCdrUnsignedLong elementSize,
RTIXCdrUnsignedLong length);
extern RTIXCdrDllExport
RTIXCdrBoolean RTIXCdrStream_deserializePrimitiveSequence(
struct RTIXCdrStream *me,
void *out,
RTIXCdrUnsignedLong *length,
RTIXCdrUnsignedLong maximumLength,
RTIXCdrAlignment alignment,
RTIXCdrUnsignedLong elementSize);
extern RTIXCdrDllExport
RTIXCdrBoolean RTIXCdrStream_skipPrimitiveArray(
struct RTIXCdrStream *me,
RTIXCdrBoolean align,
RTIXCdrAlignment alignment,
RTIXCdrUnsignedLong elementSize,
RTIXCdrUnsignedLong length);
extern RTIXCdrDllExport
RTIXCdrBoolean RTIXCdrStream_skipPrimitiveSequence (
struct RTIXCdrStream *me,
RTIXCdrUnsignedLong *length,
RTIXCdrAlignment alignment,
RTIXCdrUnsignedLong elementSize);
extern RTIXCdrDllExport
RTIXCdrBoolean RTIXCdrStream_skipNByte(
struct RTIXCdrStream *me,
RTIXCdrAlignment alignment,
RTIXCdrUnsignedLong count);
/* Align and does not check size */
extern RTIXCdrDllExport
void RTIXCdrStream_alignFast(
struct RTIXCdrStream *me,
RTIXCdrAlignment alignment);
extern RTIXCdrDllExport
void RTIXCdrStream_skipNByteNoCheckSize(
struct RTIXCdrStream *me,
RTIXCdrAlignment alignment,
RTIXCdrUnsignedLong count);
extern RTIXCdrDllExport
RTIXCdrUnsignedLong RTIXCdrStream_getRelativeCurrentPositionOffset(
struct RTIXCdrStream *me);
extern RTIXCdrDllExport
RTIXCdrBoolean RTIXCdrStream_serializeUnsignedShortToBigEndianFast(
struct RTIXCdrStream *me,
const RTIXCdr2Byte *in);
extern RTIXCdrDllExport
RTIXCdrBoolean RTIXCdrStream_deserializeUnsignedShortFromBigEndianFast(
struct RTIXCdrStream *me,
RTIXCdr2Byte *in);
extern RTIXCdrDllExport
RTIXCdrBoolean RTIXCdrStream_skipWString(
struct RTIXCdrStream *me);
extern RTIXCdrDllExport
RTIXCdrBoolean RTIXCdrStream_skipWStringArray(
struct RTIXCdrStream *me,
RTIXCdrUnsignedLong length);
extern RTIXCdrDllExport
RTIXCdrBoolean RTIXCdrStream_skipWStringSequence(
struct RTIXCdrStream *me,
RTIXCdrUnsignedLong *numberOfElements);
extern RTIXCdrDllExport
RTIXCdrBoolean RTIXCdrStream_serializeDHeaderLength(
struct RTIXCdrStream *stream,
char *dHeaderPosition);
extern RTIXCdrDllExport
char * RTIXCdrStream_serializeDHeader(
struct RTIXCdrStream *stream);
/**
* \brief Deserializes a DHEADER and returns its size.
*
* \param corruptedHeader \Out. When there is an error this variable is set
* to RTI_XCDR_TRUE if the error is caused by an corrupted and invalid length
* in the DHEADER. The other reason why this method can fail is because we run
* out of space in the stream to deserialize the header. This last error maybe
* OK from a deserialization point of view because it may indicate that we just
* run out of space while deserializing a base type.
*
* \return RTI_XCDR_TRUE if success. Otherwise, RTI_XCDR_FALSE. If the reason
* for failure is that the header length is invalid (e.g, it has been tampered)
* invalidDHeader is set to RTI_XCDR_TRUE.
*/
extern RTIXCdrDllExport
RTIXCdrBoolean RTIXCdrStream_deserializeDHeader(
struct RTIXCdrStream *stream,
RTIXCdrBoolean *corruptedHeader,
RTIXCdrUnsignedLong *size,
char **dheaderPosition,
struct RTIXCdrStreamState *state);
/**
* @brief Deserializes a DHEADER and skips the number of bytes stored in it.
*
* \param corruptedHeader \Out. When there is an error this variable is set
* to RTI_XCDR_TRUE if the error is caused by an corrupted and invalid length
* in the DHEADER. The other reason why this method can fail is because we run
* out of space in the stream to deserialize the header. This last error maybe
* OK from a skip point of view because it may indicate that we just
* run out of space while skipping a base type.
*
* \return RTI_XCDR_TRUE if success. Otherwise, RTI_XCDR_FALSE. If the reason
* for failure is that the header length is invalid (e.g, it has been tampered)
* invalidDHeader is set to RTI_XCDR_TRUE.
*/
extern RTIXCdrDllExport
RTIXCdrBoolean RTIXCdrStream_skipDHeader(
struct RTIXCdrStream *stream,
RTIXCdrBoolean *corruptedHeader);
/* \brief Serializes a V2 mutable member HEADER
*
* The function returns the position that will contain the member length when
* LC is 4. Otherwise, the function returns NULL.
*
* The user has to call RTIXCdrStream_finishV2ParameterHeader only when the
* returned position is different than NULL.
*/
extern RTIXCdrDllExport
char * RTIXCdrStream_serializeV2ParameterHeader(
struct RTIXCdrStream *me,
RTIXCdrBoolean *failure,
RTIXCdrUnsignedLong parameterId,
RTIXCdrBoolean mustUnderstand,
RTIXCdrUnsignedLong LC);
extern RTIXCdrDllExport
void RTIXCdrStream_finishV2ParameterHeader(
struct RTIXCdrStream *me,
char *lengthPosition);
extern RTIXCdrDllExport
void RTIXCdrStream_popState(
struct RTIXCdrStream *me,
const struct RTIXCdrStreamState *state);
extern RTIXCdrDllExport
RTIXCdrEncapsulationId RTIXCdrEncapsulation_getAppendableCdrEncapsulationId(
RTIXCdrEncapsulationId plainCdrEncapsulationId);
extern RTIXCdrDllExport
RTIXCdrBoolean RTIXCdrStream_findV2MutableSampleMember(
struct RTIXCdrStream *stream,
RTIXCdrUnsignedLong searchMemberId,
RTIXCdrUnsignedLong *sizeOut);
#define RTI_XCDR_ENDIAN_BIG (0)
#define RTI_XCDR_ENDIAN_LITTLE (1)
#ifdef __cplusplus
} /* extern "C" */
#endif
#include "xcdr/xcdr_stream_impl.h"
#endif /* xcdr_stream_h */