3 # mknumeric_limits: generates
4 # - part of bits/std_limits.h completed by gen-num-limits.cc
5 # - src/limitsMEMBERS.cc that contains the definition of various
6 # static data members of specialization of class template numeric_limits
9 echo "running mknumeric_limits"
12 if [ ! -d "$BUILD_DIR" ]; then
13 echo "build directory $BUILD_DIR not found, exiting."
17 if [ ! -d "$BUILD_DIR/include" ]; then
18 mkdir
"$BUILD_DIR/include"
21 if [ ! -d "$BUILD_DIR/include/bits" ]; then
22 mkdir
"$BUILD_DIR/include/bits"
25 if [ ! -d "$BUILD_DIR/src" ]; then
26 mkdir
"$BUILD_DIR/src"
29 OUT_H
="$BUILD_DIR/include/bits/std_limits.h"
30 OUT_C
="$BUILD_DIR/src/limitsMEMBERS.cc"
32 if [ -f $OUT_C ]; then
33 rm -f $OUT_H $OUT_C $OUT_H-t $OUT_C-t
37 if [ ! -d "$SRC_DIR" ]; then
38 echo "source directory $SRC_DIR not found, exiting."
43 if [ $XCOMPILE -eq 1 ]; then
44 echo "using default values for cross compiles"
45 cp $SRC_DIR/include
/bits
/limits_generic.h
$OUT_H
46 cp $SRC_DIR/src
/limits_generic.cc
$OUT_C
50 CC
=${CC="$BUILD_DIR/../../gcc/xgcc -B$BUILD_DIR/../../gcc/"}
52 # We output to a temporary file, so that we don't appear to have
53 # succeeded unless we actually do.
55 // The template and inlines for the -*- C++ -*- numeric_limits classes.
57 // Copyright (C) 1999-2001 Free Software Foundation, Inc.
59 // This file is part of the GNU ISO C++ Library. This library is free
60 // software; you can redistribute it and/or modify it under the
61 // terms of the GNU General Public License as published by the
62 // Free Software Foundation; either version 2, or (at your option)
65 // This library is distributed in the hope that it will be useful,
66 // but WITHOUT ANY WARRANTY; without even the implied warranty of
67 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
68 // GNU General Public License for more details.
70 // You should have received a copy of the GNU General Public License along
71 // with this library; see the file COPYING. If not, write to the Free
72 // Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
75 // As a special exception, you may use this file as part of a free software
76 // library without restriction. Specifically, if other files instantiate
77 // templates or use macros or inline functions from this file, or you compile
78 // this file and link it with other files to produce an executable, this
79 // file does not by itself cause the resulting executable to be covered by
80 // the GNU General Public License. This exception does not however
81 // invalidate any other reasons why the executable file might be covered by
82 // the GNU General Public License.
84 // Note: this is not a conforming implementation.
85 // Written by Gabriel Dos Reis <Gabriel.Dos-Reis@cmla.ens-cachan.fr>
88 // THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT!
96 #ifndef _CPP_NUMERIC_LIMITS
97 #define _CPP_NUMERIC_LIMITS 1
99 #include <bits/c++config.h>
100 #include <bits/std_cfloat.h>
104 enum float_round_style
106 round_indeterminate = -1,
107 round_toward_zero = 0,
108 round_to_nearest = 1,
109 round_toward_infinity = 2,
110 round_toward_neg_infinity = 3
113 enum float_denorm_style
115 denorm_indeterminate = -1,
120 template<typename _Tp>
121 struct numeric_limits
123 static const bool is_specialized = false;
125 static _Tp min() throw() { return static_cast<_Tp>(0); }
126 static _Tp max() throw() { return static_cast<_Tp>(0); }
128 static const int digits = 0;
129 static const int digits10 = 0;
130 static const bool is_signed = false;
131 static const bool is_integer = false;
132 static const bool is_exact = false;
133 static const int radix = 0;
135 static _Tp epsilon() throw() { return static_cast<_Tp>(0); }
136 static _Tp round_error() throw() { return static_cast<_Tp>(0); }
138 static const int min_exponent = 0;
139 static const int min_exponent10 = 0;
140 static const int max_exponent = 0;
141 static const int max_exponent10 = 0;
143 static const bool has_infinity = false;
144 static const bool has_quiet_NaN = false;
145 static const bool has_signaling_NaN = false;
146 static const float_denorm_style has_denorm = denorm_absent;
147 static const bool has_denorm_loss = false;
149 static _Tp infinity() throw() { return static_cast<_Tp>(0); }
150 static _Tp quiet_NaN() throw() { return static_cast<_Tp>(0); }
151 static _Tp signaling_NaN() throw() { return static_cast<_Tp>(0); }
152 static _Tp denorm_min() throw() { return static_cast<_Tp>(0); }
154 static const bool is_iec559 = false;
155 static const bool is_bounded = false;
156 static const bool is_modulo = false;
158 static const bool traps = false;
159 static const bool tinyness_before = false;
160 static const float_round_style round_style = round_toward_zero;
163 template<typename _Tp>
165 numeric_limits<_Tp>::is_specialized;
167 template<typename _Tp>
169 numeric_limits<_Tp>::digits;
171 template<typename _Tp>
173 numeric_limits<_Tp>::digits10;
175 template<typename _Tp>
177 numeric_limits<_Tp>::is_signed;
179 template<typename _Tp>
181 numeric_limits<_Tp>::is_integer;
183 template<typename _Tp>
185 numeric_limits<_Tp>::is_exact;
187 template<typename _Tp>
189 numeric_limits<_Tp>::radix;
191 template<typename _Tp>
193 numeric_limits<_Tp>::min_exponent;
195 template<typename _Tp>
197 numeric_limits<_Tp>::min_exponent10;
199 template<typename _Tp>
201 numeric_limits<_Tp>::max_exponent;
203 template<typename _Tp>
205 numeric_limits<_Tp>::max_exponent10;
207 template<typename _Tp>
209 numeric_limits<_Tp>::has_infinity;
211 template<typename _Tp>
213 numeric_limits<_Tp>::has_quiet_NaN;
215 template<typename _Tp>
217 numeric_limits<_Tp>::has_signaling_NaN;
219 template<typename _Tp>
220 const float_denorm_style
221 numeric_limits<_Tp>::has_denorm;
223 template<typename _Tp>
225 numeric_limits<_Tp>::has_denorm_loss;
227 template<typename _Tp>
229 numeric_limits<_Tp>::is_iec559;
231 template<typename _Tp>
233 numeric_limits<_Tp>::is_bounded;
235 template<typename _Tp>
237 numeric_limits<_Tp>::is_modulo;
239 template<typename _Tp>
241 numeric_limits<_Tp>::traps;
243 template<typename _Tp>
245 numeric_limits<_Tp>::tinyness_before;
247 template<typename _Tp>
248 const float_round_style
249 numeric_limits<_Tp>::round_style;
251 template<typename _Tp> _Tp __limits_infinity();
252 template<typename _Tp> _Tp __limits_quiet_NaN();
253 template<typename _Tp> _Tp __limits_signaling_NaN();
254 template<typename _Tp> _Tp __limits_denorm_min();
258 # Must turn off exceptions, because the C++ exception handling support
259 # routines have not been built yet.
260 echo "$CC -I$BUILD_DIR -fno-exceptions \
261 -o $BUILD_DIR/src/gen-num-limits $SRC_DIR/src/gen-num-limits.cc"
263 { $CC -I$BUILD_DIR -fno-exceptions \
264 -o "$BUILD_DIR/src/gen-num-limits" "$SRC_DIR/src/gen-num-limits.cc"
266 echo "gen-num-limits failed to build, exiting."
270 "$BUILD_DIR/src/gen-num-limits" >> $OUT_H-t ||
{
271 echo "gen-num-limits failed to execute, exiting."
275 cat <<EOF >> $OUT_H-t
278 #endif // _CPP_NUMERIC_LIMITS
281 trait_name
=numeric_limits
284 // Static data members of -*- C++ -*- numeric_limits classes
286 // Copyright (C) 1999, 2000 Free Software Foundation, Inc.
288 // This file is part of the GNU ISO C++ Library. This library is free
289 // software; you can redistribute it and/or modify it under the
290 // terms of the GNU General Public License as published by the
291 // Free Software Foundation; either version 2, or (at your option)
292 // any later version.
294 // This library is distributed in the hope that it will be useful,
295 // but WITHOUT ANY WARRANTY; without even the implied warranty of
296 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
297 // GNU General Public License for more details.
299 // You should have received a copy of the GNU General Public License along
300 // with this library; see the file COPYING. If not, write to the Free
301 // Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
304 // As a special exception, you may use this file as part of a free software
305 // library without restriction. Specifically, if other files instantiate
306 // templates or use macros or inline functions from this file, or you compile
307 // this file and link it with other files to produce an executable, this
308 // file does not by itself cause the resulting executable to be covered by
309 // the GNU General Public License. This exception does not however
310 // invalidate any other reasons why the executable file might be covered by
311 // the GNU General Public License.
313 // Written by Gabriel Dos Reis <Gabriel.Dos-Reis@cmla.ens-cachan.fr>
316 // ISO C++ 14882:1998
320 #include <bits/std_limits.h>
324 for type_name
in bool char
'signed char' 'unsigned char' \
325 short
'unsigned short' int
'unsigned int' \
326 long
'unsigned long' 'long long' 'unsigned long long' \
327 float double
'long double'
329 grep "<$type_name>" $OUT_H-t >/dev
/null
2>&1 ||
continue
330 cat <<EOF >> $OUT_C-t
332 const bool $trait_name<$type_name>::is_specialized;
333 const int $trait_name<$type_name>::digits;
334 const int $trait_name<$type_name>::digits10;
335 const bool $trait_name<$type_name>::is_signed;
336 const bool $trait_name<$type_name>::is_integer;
337 const bool $trait_name<$type_name>::is_exact;
338 const int $trait_name<$type_name>::radix;
339 const int $trait_name<$type_name>::min_exponent;
340 const int $trait_name<$type_name>::min_exponent10;
341 const int $trait_name<$type_name>::max_exponent;
342 const int $trait_name<$type_name>::max_exponent10;
343 const bool $trait_name<$type_name>::has_infinity;
344 const bool $trait_name<$type_name>::has_quiet_NaN;
345 const bool $trait_name<$type_name>::has_signaling_NaN;
346 const float_denorm_style $trait_name<$type_name>::has_denorm;
347 const bool $trait_name<$type_name>::has_denorm_loss;
348 const bool $trait_name<$type_name>::is_iec559;
349 const bool $trait_name<$type_name>::is_bounded;
350 const bool $trait_name<$type_name>::is_modulo;
351 const bool $trait_name<$type_name>::traps;
352 const bool $trait_name<$type_name>::tinyness_before;
353 const float_round_style $trait_name<$type_name>::round_style;
358 cat <<EOF >> $OUT_C-t