Binary String Types

XSD defines the following types that are mapped to a C binary type structure:

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: