15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2009 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef BASE_FORMAT_MACROS_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define BASE_FORMAT_MACROS_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file defines the format macros for some integer types. 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// To print a 64-bit value in a portable way: 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// int64_t value; 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// printf("xyz:%" PRId64, value); 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The "d" in the macro corresponds to %d; you can also use PRIu64 etc. 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// For wide strings, prepend "Wide" to the macro: 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// int64_t value; 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// StringPrintf(L"xyz: %" WidePRId64, value); 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// To print a size_t value in a portable way: 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// size_t size; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// printf("xyz: %" PRIuS, size); 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The "u" in the macro corresponds to %u, and S is for "size". 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "build/build_config.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_POSIX) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if (defined(_INTTYPES_H) || defined(_INTTYPES_H_)) && !defined(PRId64) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#error "inttypes.h has already been included before this header file, but " 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#error "without __STDC_FORMAT_MACROS defined." 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(__STDC_FORMAT_MACROS) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define __STDC_FORMAT_MACROS 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <inttypes.h> 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// GCC will concatenate wide and narrow strings correctly, so nothing needs to 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// be done here. 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define WidePRId64 PRId64 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define WidePRIu64 PRIu64 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define WidePRIx64 PRIx64 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(PRIuS) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PRIuS "zu" 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// The size of NSInteger and NSUInteger varies between 32-bit and 64-bit 50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// architectures and Apple does not provides standard format macros and 51a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// recommends casting. This has many drawbacks, so instead define macros 52a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// for formatting those types. 53a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if defined(OS_MACOSX) 54a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if defined(ARCH_CPU_64_BITS) 55a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if !defined(PRIdNS) 56a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#define PRIdNS "ld" 57a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif 58a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if !defined(PRIuNS) 59a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#define PRIuNS "lu" 60a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif 61a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if !defined(PRIxNS) 62a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#define PRIxNS "lx" 63a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif 64a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#else // defined(ARCH_CPU_64_BITS) 65a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if !defined(PRIdNS) 66a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#define PRIdNS "d" 67a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif 68a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if !defined(PRIuNS) 69a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#define PRIuNS "u" 70a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif 71a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if !defined(PRIxNS) 72a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#define PRIxNS "x" 73a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif 74a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif 75a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif // defined(OS_MACOSX) 76a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else // OS_WIN 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(PRId64) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PRId64 "I64d" 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(PRIu64) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PRIu64 "I64u" 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(PRIx64) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PRIx64 "I64x" 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define WidePRId64 L"I64d" 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define WidePRIu64 L"I64u" 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define WidePRIx64 L"I64x" 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(PRIuS) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PRIuS "Iu" 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // BASE_FORMAT_MACROS_H_ 102