17710150b67d1feb1b3f8f4ab19d60105a26b8112bungeman@google.com/*
27710150b67d1feb1b3f8f4ab19d60105a26b8112bungeman@google.com * Copyright 2012 Google Inc.
37710150b67d1feb1b3f8f4ab19d60105a26b8112bungeman@google.com *
47710150b67d1feb1b3f8f4ab19d60105a26b8112bungeman@google.com * Use of this source code is governed by a BSD-style license that can be
57710150b67d1feb1b3f8f4ab19d60105a26b8112bungeman@google.com * found in the LICENSE file.
67710150b67d1feb1b3f8f4ab19d60105a26b8112bungeman@google.com */
77710150b67d1feb1b3f8f4ab19d60105a26b8112bungeman@google.com
87710150b67d1feb1b3f8f4ab19d60105a26b8112bungeman@google.com#ifndef SkOTTableTypes_DEFINED
97710150b67d1feb1b3f8f4ab19d60105a26b8112bungeman@google.com#define SkOTTableTypes_DEFINED
107710150b67d1feb1b3f8f4ab19d60105a26b8112bungeman@google.com
117710150b67d1feb1b3f8f4ab19d60105a26b8112bungeman@google.com#include "SkTypes.h"
127710150b67d1feb1b3f8f4ab19d60105a26b8112bungeman@google.com#include "SkEndian.h"
137710150b67d1feb1b3f8f4ab19d60105a26b8112bungeman@google.com
147710150b67d1feb1b3f8f4ab19d60105a26b8112bungeman@google.com//All SK_OT_ prefixed types should be considered as big endian.
157710150b67d1feb1b3f8f4ab19d60105a26b8112bungeman@google.comtypedef uint8_t SK_OT_BYTE;
167710150b67d1feb1b3f8f4ab19d60105a26b8112bungeman@google.com#if CHAR_BIT == 8
177710150b67d1feb1b3f8f4ab19d60105a26b8112bungeman@google.comtypedef signed char SK_OT_CHAR; //easier to debug
187710150b67d1feb1b3f8f4ab19d60105a26b8112bungeman@google.com#else
197710150b67d1feb1b3f8f4ab19d60105a26b8112bungeman@google.comtypedef int8_t SK_OT_CHAR;
207710150b67d1feb1b3f8f4ab19d60105a26b8112bungeman@google.com#endif
21aaab6e34d88096b45a4a334d5c704c689c151a83bungeman@google.comtypedef uint16_t SK_OT_SHORT;
227710150b67d1feb1b3f8f4ab19d60105a26b8112bungeman@google.comtypedef uint16_t SK_OT_USHORT;
237710150b67d1feb1b3f8f4ab19d60105a26b8112bungeman@google.comtypedef uint32_t SK_OT_ULONG;
24aaab6e34d88096b45a4a334d5c704c689c151a83bungeman@google.comtypedef uint32_t SK_OT_LONG;
25aaab6e34d88096b45a4a334d5c704c689c151a83bungeman@google.com//16.16 Signed fixed point representation.
267710150b67d1feb1b3f8f4ab19d60105a26b8112bungeman@google.comtypedef int32_t SK_OT_Fixed;
27aaab6e34d88096b45a4a334d5c704c689c151a83bungeman@google.com//2.14 Signed fixed point representation.
28aaab6e34d88096b45a4a334d5c704c689c151a83bungeman@google.comtypedef uint16_t SK_OT_F2DOT14;
297710150b67d1feb1b3f8f4ab19d60105a26b8112bungeman@google.com//F units are the units of measurement in em space.
30aaab6e34d88096b45a4a334d5c704c689c151a83bungeman@google.comtypedef uint16_t SK_OT_FWORD;
317710150b67d1feb1b3f8f4ab19d60105a26b8112bungeman@google.comtypedef uint16_t SK_OT_UFWORD;
327710150b67d1feb1b3f8f4ab19d60105a26b8112bungeman@google.com//Number of seconds since 12:00 midnight, January 1, 1904.
337710150b67d1feb1b3f8f4ab19d60105a26b8112bungeman@google.comtypedef uint64_t SK_OT_LONGDATETIME;
347710150b67d1feb1b3f8f4ab19d60105a26b8112bungeman@google.com
357710150b67d1feb1b3f8f4ab19d60105a26b8112bungeman@google.com#define SK_OT_BYTE_BITFIELD SK_UINT8_BITFIELD
367710150b67d1feb1b3f8f4ab19d60105a26b8112bungeman@google.com
37a5a2dd09a06ea70800f9649de41a975a118a9426bungeman@google.comtemplate<typename T> class SkOTTableTAG {
38a5a2dd09a06ea70800f9649de41a975a118a9426bungeman@google.compublic:
39a5a2dd09a06ea70800f9649de41a975a118a9426bungeman@google.com    /**
40a5a2dd09a06ea70800f9649de41a975a118a9426bungeman@google.com     * SkOTTableTAG<T>::value is the big endian value of an OpenType table tag.
41a5a2dd09a06ea70800f9649de41a975a118a9426bungeman@google.com     * It may be directly compared with raw big endian table data.
42a5a2dd09a06ea70800f9649de41a975a118a9426bungeman@google.com     */
43a5a2dd09a06ea70800f9649de41a975a118a9426bungeman@google.com    static const SK_OT_ULONG value = SkTEndian_SwapBE32(
44a5a2dd09a06ea70800f9649de41a975a118a9426bungeman@google.com        SkSetFourByteTag(T::TAG0, T::TAG1, T::TAG2, T::TAG3)
45a5a2dd09a06ea70800f9649de41a975a118a9426bungeman@google.com    );
46a5a2dd09a06ea70800f9649de41a975a118a9426bungeman@google.com};
47a5a2dd09a06ea70800f9649de41a975a118a9426bungeman@google.com
487710150b67d1feb1b3f8f4ab19d60105a26b8112bungeman@google.com#endif
49