147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org/*
247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *  Copyright 2012 The WebRTC Project Authors. All rights reserved.
347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *
447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *  Use of this source code is governed by a BSD-style license
547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *  that can be found in the LICENSE file in the root of the source
647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *  tree. An additional intellectual property rights grant can be found
747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *  in the file PATENTS.  All contributing project authors may
847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *  be found in the AUTHORS file in the root of the source tree.
947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org */
1047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
1147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// This file overrides the inclusion of webrtc/base/basictypes.h to remove
1247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// collisions with Chromium's base/basictypes.h.   We then add back a few
1347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// items that Chromium's version doesn't provide, but libjingle expects.
1447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
1547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#ifndef OVERRIDES_WEBRTC_BASE_BASICTYPES_H__
1647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#define OVERRIDES_WEBRTC_BASE_BASICTYPES_H__
1747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
1847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include "base/basictypes.h"
1947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include "build/build_config.h"
2047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
2147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#ifndef INT_TYPES_DEFINED
2247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#define INT_TYPES_DEFINED
2347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
2447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#ifdef COMPILER_MSVC
2547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#if _MSC_VER >= 1600
2647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include <stdint.h>
2747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#else
2847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgtypedef unsigned __int64 uint64;
2947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgtypedef __int64 int64;
3047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#endif
3147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#ifndef INT64_C
3247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#define INT64_C(x) x ## I64
3347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#endif
3447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#ifndef UINT64_C
3547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#define UINT64_C(x) x ## UI64
3647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#endif
3747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#define INT64_F "I64"
3847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#else  // COMPILER_MSVC
3947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#ifndef INT64_C
4047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#define INT64_C(x) x ## LL
4147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#endif
4247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#ifndef UINT64_C
4347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#define UINT64_C(x) x ## ULL
4447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#endif
4547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#ifndef INT64_F
4647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#define INT64_F "ll"
4747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#endif
4847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#endif  // COMPILER_MSVC
4947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#endif  // INT_TYPES_DEFINED
5047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
5147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// Detect compiler is for x86 or x64.
5247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#if defined(__x86_64__) || defined(_M_X64) || \
5347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    defined(__i386__) || defined(_M_IX86)
5447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#define CPU_X86 1
5547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#endif
5647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// Detect compiler is for arm.
5747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#if defined(__arm__) || defined(_M_ARM)
5847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#define CPU_ARM 1
5947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#endif
6047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#if defined(CPU_X86) && defined(CPU_ARM)
6147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#error CPU_X86 and CPU_ARM both defined.
6247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#endif
6347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#if !defined(ARCH_CPU_BIG_ENDIAN) && !defined(ARCH_CPU_LITTLE_ENDIAN)
6447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// x86, arm or GCC provided __BYTE_ORDER__ macros
6547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#if CPU_X86 || CPU_ARM ||  \
6647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
6747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#define ARCH_CPU_LITTLE_ENDIAN
6847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#elif defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
6947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#define ARCH_CPU_BIG_ENDIAN
7047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#else
7147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#error ARCH_CPU_BIG_ENDIAN or ARCH_CPU_LITTLE_ENDIAN should be defined.
7247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#endif
7347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#endif
7447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#if defined(ARCH_CPU_BIG_ENDIAN) && defined(ARCH_CPU_LITTLE_ENDIAN)
7547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#error ARCH_CPU_BIG_ENDIAN and ARCH_CPU_LITTLE_ENDIAN both defined.
7647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#endif
7747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
7847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#if defined(WEBRTC_WIN)
7947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgtypedef int socklen_t;
8047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#endif
8147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
8247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgnamespace rtc {
8347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgtemplate<class T> inline T _min(T a, T b) { return (a > b) ? b : a; }
8447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgtemplate<class T> inline T _max(T a, T b) { return (a < b) ? b : a; }
8547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
8647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// For wait functions that take a number of milliseconds, kForever indicates
8747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// unlimited time.
8847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgconst int kForever = -1;
8947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}
9047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
9147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#if defined(WEBRTC_WIN)
9247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#if _MSC_VER < 1700
9347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  #define alignof(t) __alignof(t)
9447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#endif
9547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#else  // !WEBRTC_WIN
9647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#define alignof(t) __alignof__(t)
9747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#endif  // !WEBRTC_WIN
98f85a9afbbb9b91c7712bc6fe5775b57f47e642c6henrike@webrtc.org#define RTC_IS_ALIGNED(p, a) (0==(reinterpret_cast<uintptr_t>(p) & ((a)-1)))
9947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#define ALIGNP(p, t) \
10047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  (reinterpret_cast<uint8*>(((reinterpret_cast<uintptr_t>(p) + \
10147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  ((t)-1)) & ~((t)-1))))
10247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
10347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// LIBJINGLE_DEFINE_STATIC_LOCAL() is a libjingle's copy
10447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// of CR_DEFINE_STATIC_LOCAL().
10547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#define LIBJINGLE_DEFINE_STATIC_LOCAL(type, name, arguments) \
10647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  CR_DEFINE_STATIC_LOCAL(type, name, arguments)
10747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
10847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#endif // OVERRIDES_WEBRTC_BASE_BASICTYPES_H__
109