Home | History | Annotate | Download | only in base
      1 /*
      2  *  Copyright 2012 The WebRTC Project Authors. All rights reserved.
      3  *
      4  *  Use of this source code is governed by a BSD-style license
      5  *  that can be found in the LICENSE file in the root of the source
      6  *  tree. An additional intellectual property rights grant can be found
      7  *  in the file PATENTS.  All contributing project authors may
      8  *  be found in the AUTHORS file in the root of the source tree.
      9  */
     10 
     11 // This file overrides the inclusion of webrtc/base/basictypes.h to remove
     12 // collisions with Chromium's base/basictypes.h.   We then add back a few
     13 // items that Chromium's version doesn't provide, but libjingle expects.
     14 
     15 #ifndef OVERRIDES_WEBRTC_BASE_BASICTYPES_H__
     16 #define OVERRIDES_WEBRTC_BASE_BASICTYPES_H__
     17 
     18 #include "base/basictypes.h"
     19 #include "build/build_config.h"
     20 
     21 #ifndef INT_TYPES_DEFINED
     22 #define INT_TYPES_DEFINED
     23 
     24 #ifdef COMPILER_MSVC
     25 #if _MSC_VER >= 1600
     26 #include <stdint.h>
     27 #else
     28 typedef unsigned __int64 uint64;
     29 typedef __int64 int64;
     30 #endif
     31 #ifndef INT64_C
     32 #define INT64_C(x) x ## I64
     33 #endif
     34 #ifndef UINT64_C
     35 #define UINT64_C(x) x ## UI64
     36 #endif
     37 #define INT64_F "I64"
     38 #else  // COMPILER_MSVC
     39 #ifndef INT64_C
     40 #define INT64_C(x) x ## LL
     41 #endif
     42 #ifndef UINT64_C
     43 #define UINT64_C(x) x ## ULL
     44 #endif
     45 #ifndef INT64_F
     46 #define INT64_F "ll"
     47 #endif
     48 #endif  // COMPILER_MSVC
     49 #endif  // INT_TYPES_DEFINED
     50 
     51 // Detect compiler is for x86 or x64.
     52 #if defined(__x86_64__) || defined(_M_X64) || \
     53     defined(__i386__) || defined(_M_IX86)
     54 #define CPU_X86 1
     55 #endif
     56 // Detect compiler is for arm.
     57 #if defined(__arm__) || defined(_M_ARM)
     58 #define CPU_ARM 1
     59 #endif
     60 #if defined(CPU_X86) && defined(CPU_ARM)
     61 #error CPU_X86 and CPU_ARM both defined.
     62 #endif
     63 #if !defined(ARCH_CPU_BIG_ENDIAN) && !defined(ARCH_CPU_LITTLE_ENDIAN)
     64 // x86, arm or GCC provided __BYTE_ORDER__ macros
     65 #if CPU_X86 || CPU_ARM ||  \
     66   (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
     67 #define ARCH_CPU_LITTLE_ENDIAN
     68 #elif defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
     69 #define ARCH_CPU_BIG_ENDIAN
     70 #else
     71 #error ARCH_CPU_BIG_ENDIAN or ARCH_CPU_LITTLE_ENDIAN should be defined.
     72 #endif
     73 #endif
     74 #if defined(ARCH_CPU_BIG_ENDIAN) && defined(ARCH_CPU_LITTLE_ENDIAN)
     75 #error ARCH_CPU_BIG_ENDIAN and ARCH_CPU_LITTLE_ENDIAN both defined.
     76 #endif
     77 
     78 #if defined(WEBRTC_WIN)
     79 typedef int socklen_t;
     80 #endif
     81 
     82 namespace rtc {
     83 template<class T> inline T _min(T a, T b) { return (a > b) ? b : a; }
     84 template<class T> inline T _max(T a, T b) { return (a < b) ? b : a; }
     85 
     86 // For wait functions that take a number of milliseconds, kForever indicates
     87 // unlimited time.
     88 const int kForever = -1;
     89 }
     90 
     91 #if defined(WEBRTC_WIN)
     92 #if _MSC_VER < 1700
     93   #define alignof(t) __alignof(t)
     94 #endif
     95 #else  // !WEBRTC_WIN
     96 #define alignof(t) __alignof__(t)
     97 #endif  // !WEBRTC_WIN
     98 #define RTC_IS_ALIGNED(p, a) (0==(reinterpret_cast<uintptr_t>(p) & ((a)-1)))
     99 #define ALIGNP(p, t) \
    100   (reinterpret_cast<uint8*>(((reinterpret_cast<uintptr_t>(p) + \
    101   ((t)-1)) & ~((t)-1))))
    102 
    103 // LIBJINGLE_DEFINE_STATIC_LOCAL() is a libjingle's copy
    104 // of CR_DEFINE_STATIC_LOCAL().
    105 #define LIBJINGLE_DEFINE_STATIC_LOCAL(type, name, arguments) \
    106   CR_DEFINE_STATIC_LOCAL(type, name, arguments)
    107 
    108 #endif // OVERRIDES_WEBRTC_BASE_BASICTYPES_H__
    109