1/* 2 * Copyright 2012 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8#ifndef SkOTTableTypes_DEFINED 9#define SkOTTableTypes_DEFINED 10 11#include "SkTypes.h" 12#include "SkEndian.h" 13 14//All SK_OT_ prefixed types should be considered as big endian. 15typedef uint8_t SK_OT_BYTE; 16#if CHAR_BIT == 8 17typedef signed char SK_OT_CHAR; //easier to debug 18#else 19typedef int8_t SK_OT_CHAR; 20#endif 21typedef uint16_t SK_OT_SHORT; 22typedef uint16_t SK_OT_USHORT; 23typedef uint32_t SK_OT_ULONG; 24typedef uint32_t SK_OT_LONG; 25//16.16 Signed fixed point representation. 26typedef int32_t SK_OT_Fixed; 27//2.14 Signed fixed point representation. 28typedef uint16_t SK_OT_F2DOT14; 29//F units are the units of measurement in em space. 30typedef uint16_t SK_OT_FWORD; 31typedef uint16_t SK_OT_UFWORD; 32//Number of seconds since 12:00 midnight, January 1, 1904. 33typedef uint64_t SK_OT_LONGDATETIME; 34 35#define SK_OT_BYTE_BITFIELD SK_UINT8_BITFIELD 36 37template<typename T> class SkOTTableTAG { 38public: 39 /** 40 * SkOTTableTAG<T>::value is the big endian value of an OpenType table tag. 41 * It may be directly compared with raw big endian table data. 42 */ 43 static const SK_OT_ULONG value = SkTEndian_SwapBE32( 44 SkSetFourByteTag(T::TAG0, T::TAG1, T::TAG2, T::TAG3) 45 ); 46}; 47 48#endif 49