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