blob: 9f82a5aa5abb88b77693297eee3233263ac32641 [file] [log] [blame]
Selim Gurun30d4e1f2013-08-15 12:46:15 -07001/*
2 * Copyright 2011 Google Inc. All Rights Reserved.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef SFNTLY_CPP_SRC_SFNTLY_PORT_TYPE_H_
18#define SFNTLY_CPP_SRC_SFNTLY_PORT_TYPE_H_
19
20#include <assert.h>
21
22#if defined (_MSC_VER) && (_MSC_VER < 1600)
23 typedef unsigned char uint8_t;
24 typedef signed char int8_t;
25 typedef unsigned __int16 uint16_t;
26 typedef signed __int16 int16_t;
27 typedef unsigned __int32 uint32_t;
28 typedef signed __int32 int32_t;
29 typedef unsigned __int64 uint64_t;
30 typedef signed __int64 int64_t;
31 // Definitions to avoid ICU redefinition issue
32 #define U_HAVE_INT8_T 1
33 #define U_HAVE_UINT8_T 1
34 #define U_HAVE_INT16_T 1
35 #define U_HAVE_UINT16_T 1
36 #define U_HAVE_INT32_T 1
37 #define U_HAVE_UINT32_T 1
38 #define U_HAVE_INT64_T 1
39 #define U_HAVE_UINT64_T 1
40#else
41 #include <stdint.h>
42#endif
43
Colin Cross13a82432017-04-07 10:50:33 -070044#include <stddef.h>
Selim Gurun30d4e1f2013-08-15 12:46:15 -070045#include <vector>
46#include <set>
47
48namespace sfntly {
49
50typedef uint8_t byte_t;
51typedef uint16_t word_t;
52typedef uint32_t dword_t;
53typedef uint64_t qword_t;
54
55typedef std::vector<byte_t> ByteVector;
56typedef std::vector<int32_t> IntegerList;
57typedef std::set<int32_t> IntegerSet;
58
59// A macro to disallow the copy constructor and operator= functions.
60// This should be used in the private: declarations for a class.
61#define NO_COPY_AND_ASSIGN(TypeName) \
62 TypeName(const TypeName&); \
63 void operator=(const TypeName&)
64
65} // namespace sfntly
66
67// Make google3 happy since it prohibits RTTI.
68template<typename To, typename From>
69inline To implicit_cast(From const &f) {
70 return f;
71}
72
73template<typename To, typename From> // use like this: down_cast<T*>(foo);
74inline To down_cast(From* f) { // so we only accept pointers
75 // Ensures that To is a sub-type of From *. This test is here only
76 // for compile-time type checking, and has no overhead in an
77 // optimized build at run-time, as it will be optimized away
78 // completely.
79#if defined (_MSC_VER)
80 #pragma warning(push)
81 #pragma warning(disable:4127) // disable "conditional expression is constant"
82#endif
83 if (false) {
84 implicit_cast<From*, To>(0);
85 }
86#if defined (_MSC_VER)
87 #pragma warning(pop)
88#endif
89
90// The following code is the only place for RTTI. It is done so to allow
91// additional type checking when SFNTLY_TYPE_VERIFICATION is defined.
92#if defined (SFNTLY_TYPE_VERIFICATION)
93 assert(f == NULL || dynamic_cast<To>(f) != NULL);
94#endif
95 return static_cast<To>(f);
96}
97
98#if !defined(WIN32)
99 #define UNREFERENCED_PARAMETER(p) do { (void)p; } while (0)
100#endif
101
102#endif // SFNTLY_CPP_SRC_SFNTLY_PORT_TYPE_H_