123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577 |
- // *******************************************************************************
- // GenDC.h
- // GenDC structures and defines header.
- // Version 1.1.0.00
- //
- //-----------------------------------------------------------------------------
- // Copyright (c) 2018 by Matrox Electronic Systems Ltd.
- // Section: GenDC
- // Project: GenICam
- // Author: Stephane Maurice
- // $Header$ GenDC.H
- //
- // License: This file is published under the license of the EMVA GenICam Standard Group.
- // A text file describing the legal terms is included in your installation as 'GenICam_license.pdf'.
- // If for some reason you are missing this file please contact the EMVA or visit the website
- // (http://www.genicam.org) for a full copy.
- //
- // THIS SOFTWARE IS PROVIDED BY THE EMVA GENICAM STANDARD GROUP "AS IS"
- // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- // THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE EMVA GENICAM STANDARD GROUP
- // OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
- // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- // POSSIBILITY OF SUCH DAMAGE.
- //-----------------------------------------------------------------------------
- #pragma once
- // Prevent multiple GenDC.H inclusion.
- #ifndef GenDCH
- #define GenDCH
- // Headers:
- #ifndef _STDINT
- #include <stdint.h>
- #endif
- #ifndef PFNC_H
- #include "PFNC.h"
- #endif
- #include <stddef.h> // size_t
- // GenDC standard values:
- // -----------------------------------
- // -----------------------------------
- #define GDC_SIGNATURE 0x43444E47 // "GNDC" Signature (not null terminated)
- #define GDC_VERSION_MAJOR 0x01
- #define GDC_VERSION_MINOR 0x00
- #define GDC_VERSION_SUBMINOR 0x00
- // Header Types
- #define GDC_HEADER_TYPE_MASK 0xF000
- #define GDC_GENERIC_HEADER 0x0000
- #define GDC_CONTAINER_HEADER 0x1000
- #define GDC_COMPONENT_HEADER 0x2000
- #define GDC_PART_HEADER 0x4000 // 0x4000-0x4FFF reserved for sub Part Headers type.
- #define GDC_FLOW_TABLE_HEADER 0x7000
- // Component Types (from SFNC)
- #define GDC_UNDEFINED_COMPONENT 0x00
- #define GDC_INTENSITY 0x01
- #define GDC_INFRARED 0x02
- #define GDC_ULTRAVIOLET 0x03
- #define GDC_RANGE 0x04
- #define GDC_REFLECTANCE 0x05
- #define GDC_CONFIDENCE 0x06
- #define GDC_DISPARITY 0x07
- #define GDC_SCATTER 0x08
- #define GDC_MULTISPECTRAL 0x09
- #define GDC_EXTENDED_COMPONENT 0x8000
- #define GDC_METADATA GDC_EXTENDED_COMPONENT+0x0001
- #define GDC_CUSTOM_COMPONENT GDC_EXTENDED_COMPONENT+0x7F00 // + 0x0-0xFE valid
- #define GDC_RESERVED_COMPONENT GDC_EXTENDED_COMPONENT+0x7FFF
- // Part types
- #define GDC_GENERIC_PART_TYPE_MASK GDC_PART_HEADER+0x0F00
- #define GDC_GENERIC_PART_METADATA GDC_PART_HEADER+0x0000
- #define GDC_GENERIC_PART_1D GDC_PART_HEADER+0x0100
- #define GDC_GENERIC_PART_2D GDC_PART_HEADER+0x0200
- #define GDC_GENERIC_PART_CUSTOM GDC_PART_HEADER+0x0F00
- #define GDC_METADATA_GENICAM_CHUNK GDC_GENERIC_PART_METADATA+0
- #define GDC_METADATA_GENICAM_XML GDC_GENERIC_PART_METADATA+1
- #define GDC_METADATA_CUSTOM(x) GDC_GENERIC_PART_METADATA+0xF0+x // + 0x0-0xF valid
- #define GDC_1D GDC_GENERIC_PART_1D+0x00
- #define GDC_1D_CUSTOM(x) GDC_GENERIC_PART_1D+0xF0+x // + 0x0-0xF valid
- #define GDC_2D GDC_GENERIC_PART_2D+0x00
- #define GDC_2D_JPEG GDC_GENERIC_PART_2D+0x01
- #define GDC_2D_JPEG2000 GDC_GENERIC_PART_2D+0x02
- #define GDC_2D_H264 GDC_GENERIC_PART_2D+0x03
- #define GDC_2D_CUSTOM(x) GDC_GENERIC_PART_2D+0xF0+x // + 0x0-0xF valid
- #define GDC_CUSTOM(x) GDC_GENERIC_PART_CUSTOM+x // + 0x0-0xFE valid
- // GenDC objects forward declarations:
- // -----------------------------------
- // -----------------------------------
- struct GenDCContainerHeader;
- struct GenDCComponentHeader;
- struct GenDCPartHeader;
- // GenDC types definitions.
- // ------------------------
- // ------------------------
- // Pack all the structures.
- #pragma pack(push, 1)
- // GenDC Container typedef and enumerations.
- enum GenDCSignature : uint32_t { Signature_GNDC = GDC_SIGNATURE };
- typedef uint8_t GenDCVersionField;
- enum GenDCVersionValue : GenDCVersionField { VersionMajorCurrent = GDC_VERSION_MAJOR,
- VersionMinorCurrent = GDC_VERSION_MINOR,
- VersionSubMinorCurrent = GDC_VERSION_SUBMINOR
- }; // Ex: Version 01.01.00
- enum GenDCReservedValue { ReservedDefaultValue = 0x00 };
- typedef uint16_t GenDCHeaderTypeShared;
- enum GenDCHeaderType : GenDCHeaderTypeShared { TypeHeaderMask = GDC_HEADER_TYPE_MASK,
- TypeGeneric = GDC_GENERIC_HEADER,
- TypeContainer = GDC_CONTAINER_HEADER,
- TypeComponent = GDC_COMPONENT_HEADER,
- TypePart = GDC_PART_HEADER,
- TypeFlowTable = GDC_FLOW_TABLE_HEADER
- };
- typedef uint32_t GenDCHeaderSize;
- typedef uint16_t GenDCHeaderFlags;
- union GenDCContainerFlagsGroup;
- typedef uint64_t GenDCContainerId;
- typedef uint64_t GenDCDataSize;
- typedef int64_t GenDCOffset;
- typedef uint32_t GenDCDescriptorSize;
- typedef GenDCContainerHeader GenDCDescriptor;
- typedef uint32_t GenDCContainerSectionFlag;
- typedef uint32_t GenDCComponentCount;
- typedef uint8_t GenDCContainerBuffer;
- typedef uint64_t GenDCContainerBufferSize;
- typedef uint8_t GenDCData;
- typedef uint8_t GenDCDataU8;
- typedef uint16_t GenDCDataU16;
- typedef uint32_t GenDCDataU32;
- typedef uint64_t GenDCDataU64;
- typedef void GenDCDataVoid;
- typedef struct uint24_t /* 3 bytes pixel. Ex: RGB8. */
- {
- // Storage for the RGB or BGR 8 bit values
- uint8_t PixelValue[3];
- // Default copy constructor.
- uint24_t(const uint24_t &GenDCDataU24Source)
- {
- for (int j = 0; j < 3; j++)
- PixelValue[j] = GenDCDataU24Source.PixelValue[j];
- };
- // Default conversion.
- operator uint32_t() const
- {
- uint32_t PixelValue32;
- for (int j = 0; j < 3; j++)
- ((uint8_t*)(&PixelValue32))[j] = PixelValue[j];
- return (PixelValue32);
- };
- } uint24_t;
- typedef uint24_t GenDCDataU24;
- // GenDC Component typedef and enumerations.
- typedef uint16_t GenDCGroupId;
- typedef uint16_t GenDCSourceId;
- typedef uint16_t GenDCRegionId;
- typedef uint32_t GenDCRegionOffset;
- typedef int64_t GenDCTimestamp;
- typedef uint64_t GenDCComponentTypeId;
- typedef PfncFormat GenDCFormat;
- typedef uint16_t GenDCPartCount;
- enum GenDCComponentType : GenDCComponentTypeId
- {
- TypeUndefined = GDC_UNDEFINED_COMPONENT, TypeIntensity = GDC_INTENSITY,
- TypeInfrared = GDC_INFRARED, TypeUltraviolet = GDC_ULTRAVIOLET,
- TypeRange = GDC_RANGE, TypeReflectance = GDC_REFLECTANCE,
- TypeConfidence = GDC_CONFIDENCE, TypeDisparity = GDC_DISPARITY,
- TypeScatter = GDC_SCATTER, TypeMultispectral = GDC_MULTISPECTRAL,
- TypeExtended = GDC_EXTENDED_COMPONENT, TypeMetadata = GDC_METADATA,
- TypeCustomComponent = GDC_CUSTOM_COMPONENT, TypeReservedComponent = GDC_RESERVED_COMPONENT
- };
- // GenDC Part typedef and enumerations.
- typedef uint64_t GenDCSize1D;
- typedef int64_t GenDCSize1DSigned;
- typedef uint32_t GenDCSize2D;
- typedef GenDCSize1D GenDCSize;
- typedef uint16_t GenDCPadding;
- typedef uint64_t GenDCDataSize;
- typedef uint16_t GenDCFlowId;
- typedef uint32_t GenDCFlowCount;
- typedef GenDCOffset GenDCFlowOffset;
- enum GenDCGenericPartType : GenDCHeaderTypeShared
- {
- TypeGenericPart = GDC_PART_HEADER, TypeGenericMetadata = GDC_GENERIC_PART_METADATA,
- TypeGenericPart1D = GDC_GENERIC_PART_1D, TypeGenericPart2D = GDC_GENERIC_PART_2D,
- TypeGenericCustom = GDC_GENERIC_PART_CUSTOM, TypeGenericPartMask = GDC_GENERIC_PART_TYPE_MASK,
- };
- enum GenDCPartType : GenDCHeaderTypeShared
- {
- TypeMetadataGenICamChunk = GDC_METADATA_GENICAM_CHUNK, TypeMetadataGenICamXML = GDC_METADATA_GENICAM_XML,
- TypeMetadataCustom = GDC_METADATA_CUSTOM(0), Type1D = GDC_1D,
- Type1DCustom = GDC_1D_CUSTOM(0), Type2D = GDC_2D,
- TypeJPEG = GDC_2D_JPEG, TypeJPEG2000 = GDC_2D_JPEG2000,
- TypeH264 = GDC_2D_H264,
- Type2DCustom = GDC_2D_CUSTOM(0)
- };
- // General utility types and enumerations.
- typedef uint8_t GenDCReserved8;
- typedef uint16_t GenDCReserved16;
- typedef uint32_t GenDCReserved32;
- typedef uint64_t GenDCReserved64;
- typedef const char* GenDCErrorMessage;
- enum GenDCPredefinedValue32 : GenDCComponentCount { GenDCAllComponents = 0xFFFFFFFF, GenDCAllFlows = 0xFFFFFFFF };
- enum GenDCPredefinedValue16 : GenDCPartCount { GenDCAllParts = 0xFFFF };
- enum GenDCPredefinedValue64 : uint64_t { GenDCAllData = 0x8FFFFFFFFFFFFFFF, GenDCCenter = 0x8FFFFFFFFFFFFFFE };
- enum GenDCPredefinedComponentValue : GenDCComponentCount { GenDCInvalidComponentIndex = 0xFFFFFFFF };
- enum GenDCPredefinedPartValue : GenDCPartCount { GenDCInvalidPartIndex = 0xFFFF };
- // Typedef to avoid warning for 32 or 64 bit compilation.
- #ifndef WIN32
- typedef GenDCDataSize GenDCAllocationDataSize;
- #else
- typedef unsigned GenDCAllocationDataSize;
- #endif
- //GenDC headers structures:
- //-----------------------------------------
- //-----------------------------------------
- // Container's Flags bit fields structure.
- // ---------------------------------------
- union GenDCContainerFlagsGroup // Container's Flags.
- {
- GenDCHeaderFlags Value;
- struct
- {
- GenDCHeaderFlags TimestampPTP : 1;
- GenDCHeaderFlags ComponentInvalid : 1;
- GenDCHeaderFlags Reserved : 14;
- } Field;
- };
- // Container's VariableFields flags bit fields structure.
- // ------------------------------------------------------
- union GenDCContainerVariableFieldsGroup // Container's Flags.
- {
- GenDCHeaderFlags Value;
- struct
- {
- GenDCHeaderFlags DataSize : 1;
- GenDCHeaderFlags SizeX : 1;
- GenDCHeaderFlags SizeY : 1;
- GenDCHeaderFlags RegionOffset : 1;
- GenDCHeaderFlags Format : 1;
- GenDCHeaderFlags Timestamp : 1;
- GenDCHeaderFlags ComponentCount : 1;
- GenDCHeaderFlags ComponentInvalid: 1;
- GenDCHeaderFlags Reserved : 8;
- } Field;
- };
- // GenDC Container header base.
- //-----------------------------
- struct GenDCContainerHeaderBase
- {
- GenDCSignature Signature;
- GenDCVersionField VersionMajor;
- GenDCVersionField VersionMinor;
- GenDCVersionField VersionSubMinor;
- GenDCReserved8 Reserved;
- GenDCHeaderType HeaderType;
- GenDCContainerFlagsGroup Flags;
- GenDCHeaderSize HeaderSize;
- GenDCContainerId Id;
- GenDCContainerVariableFieldsGroup VariableFields;
- GenDCReserved16 Reserved16;
- GenDCReserved32 Reserved32;
- GenDCDataSize DataSize;
- GenDCOffset DataOffset;
- GenDCDescriptorSize DescriptorSize;
- GenDCComponentCount ComponentCount;
- // GenDCOffset ComponentOffsets[ComponentCount]; field not included in base class.
- };
- // GenDC Container header (including a Component PartOffset array member).
- //------------------------------------------------------------------------
- #define GDC_CONTAINER_COMPONENT_COUNT_MIN 1
- struct GenDCContainerHeader : GenDCContainerHeaderBase
- {
- // GenDCOffset ComponentOffsets[ComponentCount]; minimal Component Offset(s) included.
- // This allow to use Container.ComponentOffsets[ComponentIndex].
- // Note: sizeof(GenDCContainerHeader) must not be used if ComponentCount > 1.
- // Note: Only GenDCContaineHeader reference (GenDCContainerHeader &) can be used as destination to operator =
- // since the default copy constructor will not copy all the ComponentOffset members;
- // Use only GenDCContaineHeader &Container = AnotherGenDCContaineHeader.
- GenDCOffset ComponentOffsets[GDC_CONTAINER_COMPONENT_COUNT_MIN];
- // Default constructor for "ContainerHeader &".
- // GenDCContainerHeader() {;};
- // Deleted default copy constructor since it will not copy all the ComponentOffsets[] members.
- // It would also not point to the real Container header memory Offset.
- // Use a reference instead (Ex: GenDCContainerHeader& MyContainer = ...;) or a pointer.
- // GenDCContainerHeader(GenDCContainerHeader &) = delete;
- };
- // Component's Flags bit fields structure.
- // ---------------------------------------
- union GenDCComponentFlagsGroup // Component's Flags.
- {
- GenDCHeaderFlags Value;
- struct
- {
- GenDCHeaderFlags Invalid : 1;
- GenDCHeaderFlags Unallocated : 15;
- } Field;
- };
- // GenDC Component header base.
- // ----------------------------
- struct GenDCComponentHeaderBase
- {
- GenDCHeaderType HeaderType;
- GenDCComponentFlagsGroup Flags;
- GenDCHeaderSize HeaderSize;
- GenDCReserved16 Reserved;
- GenDCGroupId GroupId;
- GenDCSourceId SourceId;
- GenDCRegionId RegionId;
- GenDCRegionOffset RegionOffsetX;
- GenDCRegionOffset RegionOffsetY;
- GenDCTimestamp Timestamp;
- GenDCComponentTypeId TypeId;
- GenDCFormat Format;
- GenDCReserved16 Reserved2;
- GenDCPartCount PartCount;
- // GenDCOffset PartOffsets[PartCount]; // This field is not included in base class.
- };
- // GenDC Component header (including a PartOffset[] array member).
- //-----------------------------------------------------------------
- #define GDC_COMPONENT_PART_COUNT_MIN 1
- struct GenDCComponentHeader : GenDCComponentHeaderBase
- {
- // GenDCOffset PartOffsets[PartCount]; minimal Component Offset(s) included.
- // This allow to use Component.PartOffsets[ComponentIndex].
- // Note: sizeof(GenDCComponent Header) must not be used if ComponentCount > 1.
- // Note: Only GenDCComponent header reference (GenDCPart Header &) can be used as destination to operator =
- // since the default copy constructor will not copy all the PartOffsets members;
- // Use only GenDCComponentHeader &Component = AnotherGenDCComponentHeader.
- GenDCOffset PartOffsets[GDC_COMPONENT_PART_COUNT_MIN];
- // Default constructor for "ComponentHeader &".
- GenDCComponentHeader() { ; };
- // Deleted default copy constructor since it will not copy all the Parts header members.
- // It would also not point to the real Component header memory Offset.
- // Use a reference instead (Ex: GenDCCoponenHeader& MyComponent = ...;) or a pointer.
- GenDCComponentHeader(GenDCComponentHeader &) = delete;
- };
- // Part's Flags bit fields structure.
- // ---------------------------------------
- union GenDCPartFlagsGroup // Part's Flags.
- {
- GenDCHeaderFlags Value;
- struct
- {
- GenDCHeaderFlags Unallocated : 16;
- } Field;
- };
- // GenDC Part header common fields.
- // --------------------------------
- struct GenDCPartHeaderBase
- {
- GenDCPartType HeaderType;
- GenDCPartFlagsGroup Flags;
- GenDCHeaderSize HeaderSize;
- GenDCFormat Format;
- GenDCReserved16 Reserved;
- GenDCFlowId FlowId;
- GenDCFlowOffset FlowOffset;
- GenDCDataSize DataSize;
- GenDCOffset DataOffset;
- };
- // GenDC generic standard Part header.
- //------------------------------------
- struct GenDCPartHeader : public GenDCPartHeaderBase // Add no field compared to base class.
- {
- // Default constructor for "PartHeader &".
- GenDCPartHeader() { ; };
- // Deleted default copy constructor since it will not copy all Part type specific members.
- // It would also not point to the real Part header memory Offset.
- // Use a reference instead (Ex: GenDCPartHeader& MyPart = ...;) or a pointer.
- GenDCPartHeader(GenDCPartHeader &) = delete;
- };
- // GenDC 2D Part header base
- //---------------------------
- struct GenDCPartHeader2DBase : public GenDCPartHeader
- {
- GenDCSize2D SizeX;
- GenDCSize2D SizeY;
- GenDCPadding PaddingX;
- GenDCPadding PaddingY;
- GenDCReserved32 InfoReserved;
- };
- // GenDC 2D uncompressed Part header
- //-----------------------------------
- #define GDC_1D_2D_IMAGE_INFO_RESERVED_COUNT 1
- struct GenDCPartHeader2D : public GenDCPartHeader2DBase
- {
- };
- // GenDC 2D JPEG and JPEG200 standard Type specific info.
- //-------------------------------------------------------
- struct GenDCInfoTypeSpecificJPEG
- {
- };
- // GenDC 2D JPEG standard Part header.
- //------------------------------------
- struct GenDCPartHeaderJPEG : public GenDCPartHeader2DBase
- {
- };
- // GenDC 2D JPEG2000 standard Part header.
- //----------------------------------------
- struct GenDCPartHeaderJPEG2000 : public GenDCPartHeader2DBase
- {
- };
- // Part Info field interpretation structure for H.264.
- struct GenDCInfoTypeSpecificH264
- {
- uint8_t Reserved;
- uint8_t ProfileIDC;
- union H264Flags
- {
- uint8_t CS_set0_flag : 1;
- uint8_t CS_set1_flag : 1;
- uint8_t CS_set2_flag : 1;
- uint8_t CS_set3_flag : 1;
- uint8_t PM : 2;
- uint8_t RF : 2;
- } Flags;
- uint8_t LevelIDC;
- uint16_t SpropInterleavingDepth;
- uint16_t SpropMaxDonDiff;
- uint32_t SpropDeintBufReq;
- uint32_t SpropInitBufTime;
- };
- // GenDC 2D H.264 compressed Part header.
- // --------------------------------------
- struct GenDCPartHeaderH264 : public GenDCPartHeader2DBase
- {
- GenDCInfoTypeSpecificH264 InfoTypeSpecific;
- };
- // GenDC 1D uncompressed Part header.
- // ----------------------------------
- struct GenDCPartHeader1DBase : GenDCPartHeader
- {
- GenDCSize1D SizeX;
- GenDCPadding PaddingX;
- GenDCReserved16 PaddingReserved;
- GenDCReserved32 InfoReserved;
- uint64_t InfoTypeSpecific;
- };
- // GenDC 1D uncompressed Part header.
- // ----------------------------------
- struct GenDCPartHeader1D : GenDCPartHeader1DBase
- {
- };
- // GenDC GenICam Chunk Metadata Part header.
- // -----------------------------------------
- struct GenDCPartHeaderGenICamChunk : GenDCPartHeader1DBase
- {
- // For GenICam Chunk metadata Part, InfoTypeSpecific[] should contain the GenICam chunk_layout_id.
- };
- // GenDC GenICam XML Metadata Part header.
- // ---------------------------------------
- struct GenDCPartHeaderGenICamXML: GenDCPartHeader1DBase
- {
- // For GenICam XML metadata Part, InfoTypeSpecific[] should contain the GenICam XML_layout_id.
- };
- // GenDC Container Descriptor Template declaration.
- // Assuming that all the Components and their 2D Parts are all symmetrical.
- template<size_t _ComponentCount, size_t _PartCount>
- struct ContainerDescriptorTemplate2D : GenDCContainerHeaderBase
- {
- // Container header base fields followed by the ComponentOffset.
- GenDCOffset ComponentOffsets[_ComponentCount];
- // Including a Component header base followed by the PartOffset.
- struct : GenDCComponentHeaderBase
- {
- GenDCOffset PartOffsets[_PartCount];
- // Including Part headers.
- struct : GenDCPartHeader2D
- {
- } Parts[_PartCount];
- } Components[_ComponentCount];
- };
- // GenDC Container Descriptor for a single 2D Component declaration.
- // Assuming 1 Components and 1 2D Part.
- struct ContainerDescriptorSingleComponent2D : GenDCContainerHeaderBase
- {
- // Container header base fields followed by a single ComponentOffset.
- GenDCOffset ComponentOffsets[1];
- // Including a Component header base followed by a single PartOffset.
- struct : GenDCComponentHeaderBase
- {
- GenDCOffset PartOffsets[1];
- // Including a Part header.
- struct : GenDCPartHeader2D
- {
- } Part;
- } Component;
- };
- // Flow table base header.
- // -------------------------
- struct GenDCFlowTableHeader
- {
- GenDCHeaderType HeaderType;
- GenDCHeaderFlags Flags;
- GenDCHeaderSize HeaderSize;
- GenDCVersionField VersionMajor;
- GenDCVersionField VersionMinor;
- GenDCReserved16 Reserved;
- GenDCFlowCount FlowCount;
- };
- // Flow table with one entry (Note: sizeof(GenDCFlowTable) invalid).
- // -------------------------
- struct GenDCFlowTable : GenDCFlowTableHeader
- {
- uint64_t FlowSize[1]; // Stub array field for easy access using FlowTable.FlowSize[n].
- };
- // Flow table template.
- // -------------------------
- template<GenDCPartCount _FlowCount>
- struct GenDCFlowTableTemplate : GenDCFlowTableHeader
- {
- uint64_t FlowSize[_FlowCount];
- };
- // Restore packing.
- #pragma pack(pop)
- #endif // #ifndef GenDCH
|