Home | History | Annotate | Download | only in port
      1 /*
      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 
     44 #include <stddef.h>
     45 #include <vector>
     46 #include <set>
     47 
     48 namespace sfntly {
     49 
     50 typedef uint8_t   byte_t;
     51 typedef uint16_t  word_t;
     52 typedef uint32_t  dword_t;
     53 typedef uint64_t  qword_t;
     54 
     55 typedef std::vector<byte_t> ByteVector;
     56 typedef std::vector<int32_t> IntegerList;
     57 typedef 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.
     68 template<typename To, typename From>
     69 inline To implicit_cast(From const &f) {
     70   return f;
     71 }
     72 
     73 template<typename To, typename From>     // use like this: down_cast<T*>(foo);
     74 inline 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_
    103