1/* 2 * libjingle 3 * Copyright 2011, Google Inc. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are met: 7 * 8 * 1. Redistributions of source code must retain the above copyright notice, 9 * this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright notice, 11 * this list of conditions and the following disclaimer in the documentation 12 * and/or other materials provided with the distribution. 13 * 3. The name of the author may not be used to endorse or promote products 14 * derived from this software without specific prior written permission. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 19 * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 20 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 21 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 22 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 23 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 24 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 25 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 */ 27 28#ifndef TALK_BASE_BASICTYPES_H__ 29#define TALK_BASE_BASICTYPES_H__ 30 31#ifndef WIN32 32#include <stdint.h> // for uintptr_t 33#endif 34 35#ifdef HAVE_CONFIG_H 36#include "config.h" 37#endif 38 39#include "talk/base/constructormagic.h" 40 41#ifndef INT_TYPES_DEFINED 42#define INT_TYPES_DEFINED 43#ifdef COMPILER_MSVC 44typedef __int64 int64; 45#else 46typedef long long int64; 47#endif /* COMPILER_MSVC */ 48typedef int int32; 49typedef short int16; 50typedef char int8; 51 52#ifdef COMPILER_MSVC 53typedef unsigned __int64 uint64; 54typedef __int64 int64; 55#ifndef INT64_C 56#define INT64_C(x) x ## I64 57#endif 58#ifndef UINT64_C 59#define UINT64_C(x) x ## UI64 60#endif 61#define INT64_F "I64" 62#else 63typedef unsigned long long uint64; 64typedef long long int64; 65#ifndef INT64_C 66#define INT64_C(x) x ## LL 67#endif 68#ifndef UINT64_C 69#define UINT64_C(x) x ## ULL 70#endif 71#define INT64_F "ll" 72#endif /* COMPILER_MSVC */ 73typedef unsigned int uint32; 74typedef unsigned short uint16; 75typedef unsigned char uint8; 76#endif // INT_TYPES_DEFINED 77 78#ifdef WIN32 79typedef int socklen_t; 80#endif 81 82namespace talk_base { 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// Detect compiler is for x86 or x64. 92#if defined(__x86_64__) || defined(_M_X64) || \ 93 defined(__i386__) || defined(_M_IX86) 94#define CPU_X86 1 95#endif 96 97#ifdef WIN32 98#define alignof(t) __alignof(t) 99#else // !WIN32 100#define alignof(t) __alignof__(t) 101#endif // !WIN32 102#define IS_ALIGNED(p, a) (0==(reinterpret_cast<uintptr_t>(p) & ((a)-1))) 103#define ALIGNP(p, t) \ 104 (reinterpret_cast<uint8*>(((reinterpret_cast<uintptr_t>(p) + \ 105 ((t)-1)) & ~((t)-1)))) 106 107#ifndef UNUSED 108#define UNUSED(x) Unused(static_cast<const void *>(&x)) 109#define UNUSED2(x,y) Unused(static_cast<const void *>(&x)); Unused(static_cast<const void *>(&y)) 110#define UNUSED3(x,y,z) Unused(static_cast<const void *>(&x)); Unused(static_cast<const void *>(&y)); Unused(static_cast<const void *>(&z)) 111#define UNUSED4(x,y,z,a) Unused(static_cast<const void *>(&x)); Unused(static_cast<const void *>(&y)); Unused(static_cast<const void *>(&z)); Unused(static_cast<const void *>(&a)) 112#define UNUSED5(x,y,z,a,b) Unused(static_cast<const void *>(&x)); Unused(static_cast<const void *>(&y)); Unused(static_cast<const void *>(&z)); Unused(static_cast<const void *>(&a)); Unused(static_cast<const void *>(&b)) 113inline void Unused(const void *) { } 114#endif // UNUSED 115 116#if defined(__GNUC__) 117#define GCC_ATTR(x) __attribute__ ((x)) 118#else // !__GNUC__ 119#define GCC_ATTR(x) 120#endif // !__GNUC__ 121 122#endif // TALK_BASE_BASICTYPES_H__ 123