1dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania/* -*- c++ -*- */ 2dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania/* 3dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania * Copyright (C) 2010 The Android Open Source Project 4dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania * All rights reserved. 5dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania * 6dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania * Redistribution and use in source and binary forms, with or without 7dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania * modification, are permitted provided that the following conditions 8dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania * are met: 9dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania * * Redistributions of source code must retain the above copyright 10dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania * notice, this list of conditions and the following disclaimer. 11dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania * * Redistributions in binary form must reproduce the above copyright 12dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania * notice, this list of conditions and the following disclaimer in 13dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania * the documentation and/or other materials provided with the 14dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania * distribution. 15dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania * 16dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 19dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 20dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 21dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 22dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 23dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 24dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 25dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 26dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania * SUCH DAMAGE. 28dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania */ 29dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania 30dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania#ifndef ANDROID_ASTL_LIMITS__ 31dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania#define ANDROID_ASTL_LIMITS__ 32dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania 335abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Catania#include <limits.h> 34dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania// GNU C++ compiler? 35dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania#ifndef __GNUG__ 36dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania#error "__GNUG__ is not defined" 37dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania#endif 38dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania 39dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania#ifdef _T 40dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania#error "_T is defined" 41dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania#endif 42dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania 43dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania// This is very incomplete partial implementation of the standard 44dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania// <limits>. Only partial support for float and double is provided. 45dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania 465abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Catanianamespace { 475abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Catania// Template to return the number of decimal digits in a number 485abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Catania// representation based on the number of bits and sign. 495abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Catania// e.g digits10<int,64,true>::value == 19 505abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Cataniatemplate<typename T, T bits, bool is_signed> struct digits10 { 515abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Catania static const int value = 0; 525abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Catania}; 535abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Catania 545abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Catania// Specialization that can be used to initialize static constant at 555abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Catania// compile time. 565abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Cataniatemplate<> struct digits10<int, 8, false> { static const int value = 3; }; 575abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Cataniatemplate<> struct digits10<int, 8, true> { static const int value = 3; }; 585abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Cataniatemplate<> struct digits10<int, 16, false> { static const int value = 5; }; 595abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Cataniatemplate<> struct digits10<int, 16, true> { static const int value = 5; }; 605abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Cataniatemplate<> struct digits10<int, 32, false> { static const int value = 10; }; 615abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Cataniatemplate<> struct digits10<int, 32, true> { static const int value = 10; }; 625abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Cataniatemplate<> struct digits10<int, 64, false> { static const int value = 20; }; 635abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Cataniatemplate<> struct digits10<int, 64, true> { static const int value = 19; }; 645abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Catania} 655abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Catania 66dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catanianamespace std { 67dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania 68dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Cataniastruct __numeric_limits_base 69dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania{ 70dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania // True for all fundamental types. 71dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania static const bool is_specialized = false; 72dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania 73dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania // True if the type is signed. 74dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania static const bool is_signed = false; 75dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania 76dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania // True if the type is integer. 77dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania static const bool is_integer = false; 78dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania 79dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania // The number of radix digits that be represented without change. For 80dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania // integer types, the number of non-sign bits in the representation; for 81dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania // floating-point types, the number of radix digits in the mantissa. 82dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania // Equivalent to FLT_MANT_DIG, DBL_MANT_DIG. 83dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania static const int digits = 0; 84dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania 85dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania // The number of base 10 digits that can be represented without change. 86dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania // Equivalent to FLT_DIG, DBL_DIG, LDBL_MANT_DIG. 87dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania static const int digits10 = 0; 88dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania}; 89dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania 90dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania 91dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania// Properties of fundamental types. 92dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania// Only a subset of the properties is supported. 93dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Cataniatemplate<typename _T> 94dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Cataniastruct numeric_limits : public __numeric_limits_base 95dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania{ 96dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania // The minimum finite value. 97dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania static _T min() { return static_cast<_T>(0); } 98dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania 99dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania // The maximum finite value. 100dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania static _T max() { return static_cast<_T>(0); } 101dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania}; 102dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania 103dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania// Specializations for some fundamental types. 104dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania 105dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania// numeric_limits<float> 106dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Cataniatemplate<> 107dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Cataniastruct numeric_limits<float> 108dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania{ 109dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania static const bool is_specialized = true; 110dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania 111dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania static float min() { return __FLT_MIN__; } 112dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania static float max() { return __FLT_MAX__; } 113dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania 114dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania static const bool is_signed = true; 115dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania static const bool is_integer = false; 116dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania 117dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania static const int digits = __FLT_MANT_DIG__; 118dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania static const int digits10 = __FLT_DIG__; 119dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania}; 120dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania 121dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania// numeric_limits<double> 122dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Cataniatemplate<> 123dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Cataniastruct numeric_limits<double> 124dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania{ 125dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania static const bool is_specialized = true; 126dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania 127dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania static double min() { return __DBL_MIN__; } 128dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania static double max() { return __DBL_MAX__; } 129dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania 130dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania static const bool is_signed = true; 131dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania static const bool is_integer = false; 132dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania 133dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania static const int digits = __DBL_MANT_DIG__; 134dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania static const int digits10 = __DBL_DIG__; 135dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania}; 136dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania 137fe47cee745a2b91cd9a2b98f7a82c9ad9fec726fNicolas Catania// numeric_limits<int> 138fe47cee745a2b91cd9a2b98f7a82c9ad9fec726fNicolas Cataniatemplate<> 139fe47cee745a2b91cd9a2b98f7a82c9ad9fec726fNicolas Cataniastruct numeric_limits<int> 140fe47cee745a2b91cd9a2b98f7a82c9ad9fec726fNicolas Catania{ 141fe47cee745a2b91cd9a2b98f7a82c9ad9fec726fNicolas Catania static const bool is_specialized = true; 142fe47cee745a2b91cd9a2b98f7a82c9ad9fec726fNicolas Catania 143fe47cee745a2b91cd9a2b98f7a82c9ad9fec726fNicolas Catania static int min() { return INT_MIN; } 144fe47cee745a2b91cd9a2b98f7a82c9ad9fec726fNicolas Catania static int max() { return INT_MAX; } 145fe47cee745a2b91cd9a2b98f7a82c9ad9fec726fNicolas Catania 146fe47cee745a2b91cd9a2b98f7a82c9ad9fec726fNicolas Catania static const bool is_signed = true; 147fe47cee745a2b91cd9a2b98f7a82c9ad9fec726fNicolas Catania static const bool is_integer = true; 148fe47cee745a2b91cd9a2b98f7a82c9ad9fec726fNicolas Catania 149fe47cee745a2b91cd9a2b98f7a82c9ad9fec726fNicolas Catania static const int digits = static_cast<int>(sizeof(int) * CHAR_BIT); 150fe47cee745a2b91cd9a2b98f7a82c9ad9fec726fNicolas Catania static const int digits10 = digits10<int, digits, is_signed>::value; 151fe47cee745a2b91cd9a2b98f7a82c9ad9fec726fNicolas Catania}; 152fe47cee745a2b91cd9a2b98f7a82c9ad9fec726fNicolas Catania 153fe47cee745a2b91cd9a2b98f7a82c9ad9fec726fNicolas Catania// numeric_limits<unsigned int> 154fe47cee745a2b91cd9a2b98f7a82c9ad9fec726fNicolas Cataniatemplate<> 155fe47cee745a2b91cd9a2b98f7a82c9ad9fec726fNicolas Cataniastruct numeric_limits<unsigned int> 156fe47cee745a2b91cd9a2b98f7a82c9ad9fec726fNicolas Catania{ 157fe47cee745a2b91cd9a2b98f7a82c9ad9fec726fNicolas Catania static const bool is_specialized = true; 158fe47cee745a2b91cd9a2b98f7a82c9ad9fec726fNicolas Catania 159fe47cee745a2b91cd9a2b98f7a82c9ad9fec726fNicolas Catania static unsigned int min() { return 0; } 160fe47cee745a2b91cd9a2b98f7a82c9ad9fec726fNicolas Catania static unsigned int max() { return UINT_MAX; } 161fe47cee745a2b91cd9a2b98f7a82c9ad9fec726fNicolas Catania 162fe47cee745a2b91cd9a2b98f7a82c9ad9fec726fNicolas Catania static const bool is_signed = false; 163fe47cee745a2b91cd9a2b98f7a82c9ad9fec726fNicolas Catania static const bool is_integer = true; 164fe47cee745a2b91cd9a2b98f7a82c9ad9fec726fNicolas Catania 165fe47cee745a2b91cd9a2b98f7a82c9ad9fec726fNicolas Catania static const int digits = static_cast<int>(sizeof(unsigned int) * CHAR_BIT); 166fe47cee745a2b91cd9a2b98f7a82c9ad9fec726fNicolas Catania static const int digits10 = digits10<int, digits, is_signed>::value; 167fe47cee745a2b91cd9a2b98f7a82c9ad9fec726fNicolas Catania}; 168fe47cee745a2b91cd9a2b98f7a82c9ad9fec726fNicolas Catania 1695abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Catania// numeric_limits<long> 1705abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Cataniatemplate<> 1715abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Cataniastruct numeric_limits<long> 1725abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Catania{ 1735abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Catania static const bool is_specialized = true; 1745abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Catania 1755abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Catania static long min() { return LONG_MIN; } 1765abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Catania static long max() { return LONG_MAX; } 1775abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Catania 1785abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Catania static const bool is_signed = true; 1795abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Catania static const bool is_integer = true; 1805abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Catania 1815abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Catania static const int digits = LONG_BIT; 1825abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Catania static const int digits10 = digits10<int, digits, is_signed>::value; 1835abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Catania}; 1845abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Catania 185328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Catania// numeric_limits<unsigned long> 186328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Cataniatemplate<> 187328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Cataniastruct numeric_limits<unsigned long> 188328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Catania{ 189328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Catania static const bool is_specialized = true; 190328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Catania 191328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Catania static unsigned long min() { return 0; } 192328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Catania static unsigned long max() { return ULONG_MAX; } 193328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Catania 194328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Catania static const bool is_signed = true; 195328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Catania static const bool is_integer = true; 196328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Catania 197328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Catania static const int digits = LONG_BIT; 198328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Catania static const int digits10 = digits10<int, digits, is_signed>::value; 199328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Catania}; 200328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Catania 2015abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Catania// numeric_limits<long long> 2025abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Cataniatemplate<> 2035abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Cataniastruct numeric_limits<long long> 2045abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Catania{ 2055abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Catania static const bool is_specialized = true; 2065abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Catania 2075abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Catania static long long min() { return LLONG_MIN; } 2085abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Catania static long long max() { return LLONG_MAX; } 2095abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Catania 2105abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Catania static const bool is_signed = true; 2115abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Catania static const bool is_integer = true; 2125abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Catania 213fe47cee745a2b91cd9a2b98f7a82c9ad9fec726fNicolas Catania static const int digits = static_cast<int>(sizeof(long long) * CHAR_BIT); 2145abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Catania static const int digits10 = digits10<int, digits, is_signed>::value; 2155abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Catania}; 2165abe6dfaae971d3c0d1c8e3349b0d2b2ae83cc97Nicolas Catania 217328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Catania// numeric_limits<unsigned long long> 218328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Cataniatemplate<> 219328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Cataniastruct numeric_limits<unsigned long long> 220328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Catania{ 221328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Catania static const bool is_specialized = true; 222328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Catania 223328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Catania static unsigned long long min() { return 0; } 224328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Catania static unsigned long long max() { return ULLONG_MAX; } 225328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Catania 226328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Catania static const bool is_signed = true; 227328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Catania static const bool is_integer = true; 228328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Catania 229328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Catania static const int digits = static_cast<int>(sizeof(unsigned long long) * CHAR_BIT); 230328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Catania static const int digits10 = digits10<int, digits, is_signed>::value; 231328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Catania}; 232328cfeefa59a829fd8ae83ff1955c530a25b43ffNicolas Catania 233dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania} // namespace std 234dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania 235dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania 236dfec9fcb74ce3381af05f54e6ebc2667a6bfb6b8Nicolas Catania#endif 237