#! /bin/sh # mknumeric_limits: generates # - part of bits/std_limits.h completed by gen-num-limits.cc # - src/limitsMEMBERS.cc that contains the definition of various # static data members of specialization of class template numeric_limits # echo "running mknumeric_limits" BUILD_DIR=$1 if [ ! -d "$BUILD_DIR" ]; then echo "build directory $BUILD_DIR not found, exiting." exit 1 fi if [ ! -d "$BUILD_DIR/include" ]; then mkdir "$BUILD_DIR/include" fi if [ ! -d "$BUILD_DIR/include/bits" ]; then mkdir "$BUILD_DIR/include/bits" fi if [ ! -d "$BUILD_DIR/src" ]; then mkdir "$BUILD_DIR/src" fi OUT_H="$BUILD_DIR/include/bits/std_limits.h" OUT_C="$BUILD_DIR/src/limitsMEMBERS.cc" if [ -f $OUT_C ]; then rm -f $OUT_H $OUT_C $OUT_H-t $OUT_C-t fi SRC_DIR=$2 if [ ! -d "$SRC_DIR" ]; then echo "source directory $SRC_DIR not found, exiting." exit 1 fi XCOMPILE=$3 if [ $XCOMPILE -eq 1 ]; then echo "using default values for cross compiles" cp $SRC_DIR/include/bits/limits_generic.h $OUT_H cp $SRC_DIR/src/limits_generic.cc $OUT_C exit 0; fi CC=${CC="$BUILD_DIR/../../gcc/xgcc -B$BUILD_DIR/../../gcc/"} # We output to a temporary file, so that we don't appear to have # succeeded unless we actually do. cat < $OUT_H-t // The template and inlines for the -*- C++ -*- numeric_limits classes. // Copyright (C) 1999, 2000 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the // terms of the GNU General Public License as published by the // Free Software Foundation; either version 2, or (at your option) // any later version. // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License along // with this library; see the file COPYING. If not, write to the Free // Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, // USA. // As a special exception, you may use this file as part of a free software // library without restriction. Specifically, if other files instantiate // templates or use macros or inline functions from this file, or you compile // this file and link it with other files to produce an executable, this // file does not by itself cause the resulting executable to be covered by // the GNU General Public License. This exception does not however // invalidate any other reasons why the executable file might be covered by // the GNU General Public License. // Note: this is not a conforming implementation. // Written by Gabriel Dos Reis // // THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT! // // // ISO 14882:1998 // 18.2.1 // #ifndef _CPP_NUMERIC_LIMITS #define _CPP_NUMERIC_LIMITS 1 #include #include namespace std { enum float_round_style { round_indeterminate = -1, round_toward_zero = 0, round_to_nearest = 1, round_toward_infinity = 2, round_toward_neg_infinity = 3 }; enum float_denorm_style { denorm_indeterminate = -1, denorm_absent = 0, denorm_present = 1 }; template struct numeric_limits { static const bool is_specialized = false; static _Tp min() throw() { return static_cast<_Tp>(0); } static _Tp max() throw() { return static_cast<_Tp>(0); } static const int digits = 0; static const int digits10 = 0; static const bool is_signed = false; static const bool is_integer = false; static const bool is_exact = false; static const int radix = 0; static _Tp epsilon() throw() { return static_cast<_Tp>(0); } static _Tp round_error() throw() { return static_cast<_Tp>(0); } static const int min_exponent = 0; static const int min_exponent10 = 0; static const int max_exponent = 0; static const int max_exponent10 = 0; static const bool has_infinity = false; static const bool has_quiet_NaN = false; static const bool has_signaling_NaN = false; static const float_denorm_style has_denorm = denorm_absent; static const bool has_denorm_loss = false; static _Tp infinity() throw() { return static_cast<_Tp>(0); } static _Tp quiet_NaN() throw() { return static_cast<_Tp>(0); } static _Tp signaling_NaN() throw() { return static_cast<_Tp>(0); } static _Tp denorm_min() throw() { return static_cast<_Tp>(0); } static const bool is_iec559 = false; static const bool is_bounded = false; static const bool is_modulo = false; static const bool traps = false; static const bool tinyness_before = false; static const float_round_style round_style = round_toward_zero; }; template const bool numeric_limits<_Tp>::is_specialized; template const int numeric_limits<_Tp>::digits; template const int numeric_limits<_Tp>::digits10; template const bool numeric_limits<_Tp>::is_signed; template const bool numeric_limits<_Tp>::is_integer; template const bool numeric_limits<_Tp>::is_exact; template const int numeric_limits<_Tp>::radix; template const int numeric_limits<_Tp>::min_exponent; template const int numeric_limits<_Tp>::min_exponent10; template const int numeric_limits<_Tp>::max_exponent; template const int numeric_limits<_Tp>::max_exponent10; template const bool numeric_limits<_Tp>::has_infinity; template const bool numeric_limits<_Tp>::has_quiet_NaN; template const bool numeric_limits<_Tp>::has_signaling_NaN; template const float_denorm_style numeric_limits<_Tp>::has_denorm; template const bool numeric_limits<_Tp>::has_denorm_loss; template const bool numeric_limits<_Tp>::is_iec559; template const bool numeric_limits<_Tp>::is_bounded; template const bool numeric_limits<_Tp>::is_modulo; template const bool numeric_limits<_Tp>::traps; template const bool numeric_limits<_Tp>::tinyness_before; template const float_round_style numeric_limits<_Tp>::round_style; template _Tp __limits_infinity(); template _Tp __limits_quiet_NaN(); template _Tp __limits_signaling_NaN(); template _Tp __limits_denorm_min(); EOF # Must turn off exceptions, because the C++ exception handling support # routines have not been built yet. echo "$CC -I. $CPPFLAGS -I$BUILD_DIR/include -DHAVE_CONFIG_H -fno-exceptions \ -o $BUILD_DIR/src/gen-num-limits $SRC_DIR/src/gen-num-limits.cc" { $CC -I. $CPPFLAGS -I$BUILD_DIR/include -DHAVE_CONFIG_H -fno-exceptions \ -o "$BUILD_DIR/src/gen-num-limits" "$SRC_DIR/src/gen-num-limits.cc" } || { echo "gen-num-limits failed to build, exiting." exit 1 } "$BUILD_DIR/src/gen-num-limits" >> $OUT_H-t || { echo "gen-num-limits failed to execute, exiting." exit 1 } cat <> $OUT_H-t } // namespace std #endif // _CPP_NUMERIC_LIMITS EOF trait_name=numeric_limits cat < $OUT_C-t // Static data members of -*- C++ -*- numeric_limits classes // Copyright (C) 1999, 2000 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the // terms of the GNU General Public License as published by the // Free Software Foundation; either version 2, or (at your option) // any later version. // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License along // with this library; see the file COPYING. If not, write to the Free // Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, // USA. // As a special exception, you may use this file as part of a free software // library without restriction. Specifically, if other files instantiate // templates or use macros or inline functions from this file, or you compile // this file and link it with other files to produce an executable, this // file does not by itself cause the resulting executable to be covered by // the GNU General Public License. This exception does not however // invalidate any other reasons why the executable file might be covered by // the GNU General Public License. // Written by Gabriel Dos Reis // // ISO C++ 14882:1998 // 18.2.1 // #include namespace std { EOF for type_name in bool char 'signed char' 'unsigned char' \ short 'unsigned short' int 'unsigned int' \ long 'unsigned long' 'long long' 'unsigned long long' \ float double 'long double' do grep "<$type_name>" $OUT_H-t >/dev/null 2>&1 || continue cat <> $OUT_C-t const bool $trait_name<$type_name>::is_specialized; const int $trait_name<$type_name>::digits; const int $trait_name<$type_name>::digits10; const bool $trait_name<$type_name>::is_signed; const bool $trait_name<$type_name>::is_integer; const bool $trait_name<$type_name>::is_exact; const int $trait_name<$type_name>::radix; const int $trait_name<$type_name>::min_exponent; const int $trait_name<$type_name>::min_exponent10; const int $trait_name<$type_name>::max_exponent; const int $trait_name<$type_name>::max_exponent10; const bool $trait_name<$type_name>::has_infinity; const bool $trait_name<$type_name>::has_quiet_NaN; const bool $trait_name<$type_name>::has_signaling_NaN; const float_denorm_style $trait_name<$type_name>::has_denorm; const bool $trait_name<$type_name>::has_denorm_loss; const bool $trait_name<$type_name>::is_iec559; const bool $trait_name<$type_name>::is_bounded; const bool $trait_name<$type_name>::is_modulo; const bool $trait_name<$type_name>::traps; const bool $trait_name<$type_name>::tinyness_before; const float_round_style $trait_name<$type_name>::round_style; EOF done cat <> $OUT_C-t } // namespace std EOF mv $OUT_C-t $OUT_C mv $OUT_H-t $OUT_H