/*
 * Copyright 2013 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#ifndef SkTTCFHeader_DEFINED
#define SkTTCFHeader_DEFINED

#include "SkOTTableTypes.h"

#pragma pack(push, 1)

struct SkTTCFHeader {
    SK_SFNT_ULONG ttcTag;
    static const SK_OT_CHAR TAG0 = 't';
    static const SK_OT_CHAR TAG1 = 't';
    static const SK_OT_CHAR TAG2 = 'c';
    static const SK_OT_CHAR TAG3 = 'f';
    static const SK_OT_ULONG TAG = SkOTTableTAG<SkTTCFHeader>::value;

    SK_OT_Fixed version;
    static const SK_OT_Fixed version_1 = SkTEndian_SwapBE32(1 << 16);
    static const SK_OT_Fixed version_2 = SkTEndian_SwapBE32(2 << 16);

    SK_OT_ULONG numOffsets;
    //SK_OT_ULONG offset[numOffsets]

    struct Version2Ext {
        SK_OT_ULONG dsigType;
        struct dsigType_None {
            static const SK_OT_CHAR TAG0 = 0;
            static const SK_OT_CHAR TAG1 = 0;
            static const SK_OT_CHAR TAG2 = 0;
            static const SK_OT_CHAR TAG3 = 0;
            static const SK_OT_ULONG TAG = SkOTTableTAG<dsigType_None>::value;
        };
        struct dsigType_Format1 {
            static const SK_OT_CHAR TAG0 = 'D';
            static const SK_OT_CHAR TAG1 = 'S';
            static const SK_OT_CHAR TAG2 = 'I';
            static const SK_OT_CHAR TAG3 = 'G';
            static const SK_OT_ULONG TAG = SkOTTableTAG<dsigType_Format1>::value;
        };
        SK_OT_ULONG dsigLength; //Length of DSIG table (in bytes).
        SK_OT_ULONG dsigOffset; //Offset of DSIG table from the beginning of file (in bytes).
    };// version2ext (if version == version_2)
};

#pragma pack(pop)


SK_COMPILE_ASSERT(sizeof(SkTTCFHeader) == 12, sizeof_SkTTCFHeader_not_12);

#endif
