XSD defines the following types that are mapped to a C binary type structure:
hexBinary
base64Binary
The type of structure used depends on whether or not a length facet is applied to the type. If a length facet is not used, or the length is a very large value (> 32K), a built-in type containing a pointer to a dynamic memory buffer is used to hold the binary data. The definition of this type in osSysTypes.his as follows:
typedef struct OSDynOctStr { OSUINT32 numocts; const OSOCTET* data; } OSDynOctStr;
The numoctsmember holds the length of the binary string and the datamember holds the actual data.
For C++, a built-in class definition is used that extends this structure:
class OSDynOctStrClass : public OSRTBaseType { protected: OSUINT32 numocts; const OSOCTET* data; public: ... } ;
This class provides methods for getting and setting the data values as well as initialization through constructors and other utility methods.
If a length facet is used that restricts the size of the binary string to a value less than 32K, a custom type is generated that contains a static array to hold the data. The general form of this type is as follows:
typedef struct TypeName { OSUINT32 numocts; OSOCTET data[length]; } TypeName;
In this case, TypeNamewould be the name of the type defined in the XSD specification and length would be the value of the length facet.
In the case of C++, a class is generated:
class TypeName : public OSRTBaseType { OSUINT32 numocts; OSOCTET data[length]; ... } ;
The general mappings for each case are as follows: