basictypes.h revision 116680a4aac90f2aa7413d9095a592090648e557
15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// found in the LICENSE file.
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// This file contains definitions of our old basic integral types
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// ((u)int{8,16,32,64}) and further includes. I recommend that you use the C99
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// standard types instead, and include <stdint.h>/<stddef.h>/etc. as needed.
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Note that the macros and macro-like constructs that were formerly defined in
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// this file are now available separately in base/macros.h.
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef BASE_BASICTYPES_H_
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define BASE_BASICTYPES_H_
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include <limits.h>  // So we can set the bounds of our types.
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include <stddef.h>  // For size_t.
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include <stdint.h>  // For intptr_t.
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "base/macros.h"
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "base/port.h"  // Types that only need exist on certain systems.
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// DEPRECATED: Please use (u)int{8,16,32,64}_t instead (and include <stdint.h>).
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)typedef int8_t int8;
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)typedef uint8_t uint8;
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)typedef int16_t int16;
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)typedef int32_t int32;
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)typedef uint16_t uint16;
2753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)typedef uint32_t uint32;
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)// TODO(vtl): Figure what's up with the 64-bit types. Can we just define them as
305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// |int64_t|/|uint64_t|?
315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// The NSPR system headers define 64-bit as |long| when possible, except on
325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Mac OS X.  In order to not have typedef mismatches, we do the same on LP64.
335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)//
345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// On Mac OS X, |long long| is used for 64-bit types for compatibility with
355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// <inttypes.h> format macros even in the LP64 model.
365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#if defined(__LP64__) && !defined(OS_MACOSX) && !defined(OS_OPENBSD)
375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)typedef long int64;
385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)typedef unsigned long uint64;
395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#else
405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)typedef long long int64;
415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)typedef unsigned long long uint64;
425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif
435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// DEPRECATED: Please use std::numeric_limits (from <limits>) instead.
455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)const uint8  kuint8max  =  0xFF;
465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)const uint16 kuint16max =  0xFFFF;
47const uint32 kuint32max =  0xFFFFFFFF;
48const uint64 kuint64max =  0xFFFFFFFFFFFFFFFFULL;
49const  int8  kint8min   = -0x7F - 1;
50const  int8  kint8max   =  0x7F;
51const  int16 kint16min  = -0x7FFF - 1;
52const  int16 kint16max  =  0x7FFF;
53const  int32 kint32min  = -0x7FFFFFFF - 1;
54const  int32 kint32max  =  0x7FFFFFFF;
55const  int64 kint64min  = -0x7FFFFFFFFFFFFFFFLL - 1;
56const  int64 kint64max  =  0x7FFFFFFFFFFFFFFFLL;
57
58#endif  // BASE_BASICTYPES_H_
59