19720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/*
29720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1999
39720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Silicon Graphics Computer Systems, Inc.
49720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
59720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1999
69720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Boris Fomitchev
79720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
89720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * This material is provided "as is", with absolutely no warranty expressed
99720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * or implied. Any use is at your own risk.
109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to use or copy this software for any purpose is hereby granted
129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * without fee, provided the above notices are retained on all copies.
139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to modify the code and to distribute modified code is granted,
149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * provided the above notices are retained, and a notice that the code was
159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * modified is included with the above copyright notice.
169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */
189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_NUM_GET_C
199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_NUM_GET_C
209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_NUM_GET_H
229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  include <stl/_num_get.h>
239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_LIMITS
269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  include <stl/_limits.h>
279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_BEGIN_NAMESPACE
309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_PRIV_NAMESPACE
329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC unsigned char _STLP_CALL __digit_val_table(unsigned);
349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLSPEC const char* _STLP_CALL __narrow_atoms();
359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
36e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// __do_get_integer, __do_get_float and its helper functions.
379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline bool _STLP_CALL __get_fdigit(char __c, const char*)
399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return __c >= '0' && __c <= '9'; }
409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline bool _STLP_CALL __get_fdigit_or_sep(char& __c, char __sep, const char *__digits) {
429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  if (__c == __sep) {
439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __c = ',' ;
449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return true ;
459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  else
479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return  __get_fdigit(__c, __digits);
489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline int _STLP_CALL
519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block__get_digit_from_table(unsigned __index)
529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return (__index > 127 ? 0xFF : __digit_val_table(__index)); }
539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter, class _CharT>
559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockint
56e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__get_base_or_zero(_InputIter& __in_ite, _InputIter& __end,
57e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                   ios_base::fmtflags __flags, const ctype<_CharT>& __c_type) {
589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _CharT __atoms[5];
599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __c_type.widen(__narrow_atoms(), __narrow_atoms() + 5, __atoms);
609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  bool __negative = false;
629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _CharT __c = *__in_ite;
639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  if (__c == __atoms[1] /* __xminus_char */ ) {
659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __negative = true;
669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    ++__in_ite;
679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  else if (__c == __atoms[0] /* __xplus_char */ )
699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    ++__in_ite;
709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  int __base;
729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  int __valid_zero = 0;
739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
74e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  ios_base::fmtflags __basefield = __flags & ios_base::basefield;
759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  switch (__basefield) {
779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  case ios_base::oct:
789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __base = 8;
799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    break;
809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  case ios_base::dec:
819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __base = 10;
829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    break;
839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  case ios_base::hex:
849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __base = 16;
859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    if (__in_ite != __end && *__in_ite == __atoms[2] /* __zero_char */ ) {
869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      ++__in_ite;
879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      if (__in_ite != __end &&
889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block          (*__in_ite == __atoms[3] /* __x_char */ || *__in_ite == __atoms[4] /* __X_char */ ))
899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        ++__in_ite;
909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      else
919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        __valid_zero = 1; // That zero is valid by itself.
929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    }
939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    break;
949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  default:
959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    if (__in_ite != __end && *__in_ite == __atoms[2] /* __zero_char */ ) {
969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      ++__in_ite;
979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      if (__in_ite != __end &&
989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block          (*__in_ite == __atoms[3] /* __x_char */ || *__in_ite == __atoms[4] /* __X_char */ )) {
999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        ++__in_ite;
1009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        __base = 16;
1019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      }
1029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      else
1039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        {
1049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block          __base = 8;
1059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block          __valid_zero = 1; // That zero is still valid by itself.
1069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        }
1079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    }
1089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    else
1099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      __base = 10;
1109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    break;
1119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
1129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  return (__base << 2) | ((int)__negative << 1) | __valid_zero;
1139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
1149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter, class _Integer, class _CharT>
1179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbool _STLP_CALL
1189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block__get_integer(_InputIter& __first, _InputIter& __last,
1199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block              int __base, _Integer& __val,
1209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block              int __got, bool __is_negative, _CharT __separator, const string& __grouping, const __true_type& /*_IsSigned*/) {
1219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  bool __ovflow = false;
1229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Integer __result = 0;
1239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  bool __is_group = !__grouping.empty();
1249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  char __group_sizes[64];
1259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  char __current_group_size = 0;
1269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  char* __group_sizes_end = __group_sizes;
1279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Integer __over_base = (numeric_limits<_Integer>::min)() / __STATIC_CAST(_Integer, __base);
1299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block   for ( ; __first != __last ; ++__first) {
1319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block     const _CharT __c = *__first;
1339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block     if (__is_group && __c == __separator) {
1359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block       *__group_sizes_end++ = __current_group_size;
1369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block       __current_group_size = 0;
1379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block       continue;
1389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block     }
1399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block     int __n = __get_digit_from_table(__c);
1419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block     if (__n >= __base)
1439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block       break;
1449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block     ++__got;
1469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block     ++__current_group_size;
1479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block     if (__result < __over_base)
1499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block       __ovflow = true;  // don't need to keep accumulating
1509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block     else {
1519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block       _Integer __next = __STATIC_CAST(_Integer, __base * __result - __n);
1529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block       if (__result != 0)
1539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block         __ovflow = __ovflow || __next >= __result;
1549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block       __result = __next;
1559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block     }
1569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block   }
1579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block   if (__is_group && __group_sizes_end != __group_sizes) {
1599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block     *__group_sizes_end++ = __current_group_size;
1609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block   }
1619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block   // fbp : added to not modify value if nothing was read
1639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block   if (__got > 0) {
1649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block       __val = __ovflow ? __is_negative ? (numeric_limits<_Integer>::min)()
1659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                        : (numeric_limits<_Integer>::max)()
1669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                        : __is_negative ? __result
1679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                        : __STATIC_CAST(_Integer, -__result);
1689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block   }
1699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // overflow is being treated as failure
1709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  return ((__got > 0) && !__ovflow) &&
1719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block          (__is_group == 0 ||
1729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block           __valid_grouping(__group_sizes, __group_sizes_end,
1739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                            __grouping.data(), __grouping.data()+ __grouping.size()));
1749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
1759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter, class _Integer, class _CharT>
1779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbool _STLP_CALL
1789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block__get_integer(_InputIter& __first, _InputIter& __last,
1799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block              int __base, _Integer& __val,
1809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block              int __got, bool __is_negative, _CharT __separator, const string& __grouping, const __false_type& /*_IsSigned*/) {
1819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  bool __ovflow = false;
1829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Integer __result = 0;
1839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  bool __is_group = !__grouping.empty();
1849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  char __group_sizes[64];
1859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  char __current_group_size = 0;
1869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  char* __group_sizes_end = __group_sizes;
1879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Integer  __over_base = (numeric_limits<_Integer>::max)() / __STATIC_CAST(_Integer, __base);
1899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  for ( ; __first != __last ; ++__first) {
1919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const _CharT __c = *__first;
1939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    if (__is_group && __c == __separator) {
1959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      *__group_sizes_end++ = __current_group_size;
1969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      __current_group_size = 0;
1979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      continue;
1989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    }
1999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    int __n = __get_digit_from_table(__c);
2019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    if (__n >= __base)
2039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      break;
2049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    ++__got;
2069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    ++__current_group_size;
2079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    if (__result > __over_base)
2099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      __ovflow = true;  //don't need to keep accumulating
2109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    else {
2119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _Integer __next = __STATIC_CAST(_Integer, __base * __result + __n);
2129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      if (__result != 0)
2139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        __ovflow = __ovflow || __next <= __result;
2149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        __result = __next;
2159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      }
2169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
2179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  if (__is_group && __group_sizes_end != __group_sizes) {
2199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      *__group_sizes_end++ = __current_group_size;
2209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
2219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // fbp : added to not modify value if nothing was read
2239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  if (__got > 0) {
2249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      __val = __ovflow ? (numeric_limits<_Integer>::max)()
2259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                       : (__is_negative ? __STATIC_CAST(_Integer, -__result)
2269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                        : __result);
2279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
2289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // overflow is being treated as failure
2309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  return ((__got > 0) && !__ovflow) &&
2319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block          (__is_group == 0 ||
2329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block           __valid_grouping(__group_sizes, __group_sizes_end,
2339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                            __grouping.data(), __grouping.data()+ __grouping.size()));
2349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
2359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter, class _Integer, class _CharT>
2389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbool _STLP_CALL
2399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block__get_decimal_integer(_InputIter& __first, _InputIter& __last, _Integer& __val, _CharT* /*dummy*/) {
2409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  string __grp;
241e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  //Here there is no grouping so separator is not important, we just pass the default character.
2429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  return __get_integer(__first, __last, 10, __val, 0, false, _CharT() /*separator*/, __grp, __false_type());
2439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
2449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter, class _Integer, class _CharT>
2469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_InputIter _STLP_CALL
2479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block__do_get_integer(_InputIter& __in_ite, _InputIter& __end, ios_base& __str,
248e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                 ios_base::iostate& __err, _Integer& __val, _CharT* /*__pc*/) {
249e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  locale __loc = __str.getloc();
250e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc);
251e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
2529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (__HP_aCC) && (__HP_aCC == 1)
2539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  bool _IsSigned = !((_Integer)(-1) > 0);
2549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else
2559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename __bool2type<numeric_limits<_Integer>::is_signed>::_Ret _IsSigned;
2569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
2579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
258e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  const int __base_or_zero = __get_base_or_zero(__in_ite, __end, __str.flags(), __ctype);
2599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  int  __got = __base_or_zero & 1;
2609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  bool __result;
2629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  if (__in_ite == __end) {      // We may have already read a 0.  If so,
2649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    if (__got > 0) {       // the result is 0 even if we're at eof.
2669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      __val = 0;
2679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      __result = true;
2689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    }
2699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    else
2709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      __result = false;
2719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
2729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  else {
273e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    const numpunct<_CharT>& __np = use_facet<numpunct<_CharT> >(__loc);
2749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const bool __negative = (__base_or_zero & 2) != 0;
2759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const int __base = __base_or_zero >> 2;
2769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (__HP_aCC) && (__HP_aCC == 1)
2789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    if (_IsSigned)
279e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      __result = __get_integer(__in_ite, __end, __base,  __val, __got, __negative, __np.thousands_sep(), __np.grouping(), __true_type() );
2809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    else
281e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      __result = __get_integer(__in_ite, __end, __base,  __val, __got, __negative, __np.thousands_sep(), __np.grouping(), __false_type() );
2829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else
283e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    __result = __get_integer(__in_ite, __end, __base,  __val, __got, __negative, __np.thousands_sep(), __np.grouping(), _IsSigned());
2849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif
2859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
2869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __err = __STATIC_CAST(ios_base::iostate, __result ? ios_base::goodbit : ios_base::failbit);
2889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  if (__in_ite == __end)
2909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __err |= ios_base::eofbit;
2919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  return __in_ite;
2929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
2939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// __read_float and its helper functions.
2959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter, class _CharT>
2969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_InputIter  _STLP_CALL
2979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block__copy_sign(_InputIter __first, _InputIter __last, __iostring& __v,
2989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block            _CharT __xplus, _CharT __xminus) {
2999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  if (__first != __last) {
3009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _CharT __c = *__first;
3019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    if (__c == __xplus)
3029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      ++__first;
3039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    else if (__c == __xminus) {
3049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      __v.push_back('-');
3059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      ++__first;
3069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    }
3079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
3089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  return __first;
3099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
3109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter, class _CharT>
3139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbool _STLP_CALL
3149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block__copy_digits(_InputIter& __first, _InputIter __last,
3159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block              __iostring& __v, const _CharT* __digits) {
3169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  bool __ok = false;
3179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  for ( ; __first != __last; ++__first) {
3199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _CharT __c = *__first;
3209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    if (__get_fdigit(__c, __digits)) {
3219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      __v.push_back((char)__c);
3229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      __ok = true;
3239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    }
3249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    else
3259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      break;
3269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
3279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  return __ok;
3289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
3299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter, class _CharT>
3319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbool _STLP_CALL
3329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block__copy_grouped_digits(_InputIter& __first, _InputIter __last,
3339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                      __iostring& __v, const _CharT * __digits,
3349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                      _CharT __sep, const string& __grouping,
3359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                      bool& __grouping_ok) {
3369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  bool __ok = false;
3379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  char __group_sizes[64];
3389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  char*__group_sizes_end = __group_sizes;
3399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  char __current_group_size = 0;
3409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  for ( ; __first != __last; ++__first) {
3429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _CharT __c = *__first;
3439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    bool __tmp = __get_fdigit_or_sep(__c, __sep, __digits);
3449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    if (__tmp) {
3459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      if (__c == ',') {
3469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        *__group_sizes_end++ = __current_group_size;
3479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        __current_group_size = 0;
3489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      }
3499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      else {
3509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        __ok = true;
3519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        __v.push_back((char)__c);
3529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        ++__current_group_size;
3539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      }
3549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    }
3559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    else
3569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      break;
3579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
3589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  if (__group_sizes_end != __group_sizes)
3609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    *__group_sizes_end++ = __current_group_size;
3619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __grouping_ok = __valid_grouping(__group_sizes, __group_sizes_end, __grouping.data(), __grouping.data() + __grouping.size());
3629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  return __ok;
3639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
3649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter, class _CharT>
3679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbool _STLP_CALL
368e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__read_float(__iostring& __buf, _InputIter& __in_ite, _InputIter& __end,
369e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott             const ctype<_CharT> &__ct, const numpunct<_CharT> &__numpunct) {
3709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // Create a string, copying characters of the form
3719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // [+-]? [0-9]* .? [0-9]* ([eE] [+-]? [0-9]+)?
3729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
373e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  string __grouping = __numpunct.grouping();
3749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  bool __digits_before_dot /* = false */;
3759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  bool __digits_after_dot = false;
3769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  bool __ok;
3779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  bool   __grouping_ok = true;
3799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _CharT __dot = __numpunct.decimal_point();
3819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _CharT __sep = __numpunct.thousands_sep();
3829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _CharT __digits[10];
3849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _CharT __xplus;
3859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _CharT __xminus;
3869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _CharT __pow_e;
3889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _CharT __pow_E;
3899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Initialize_get_float(__ct, __xplus, __xminus, __pow_e, __pow_E, __digits);
3919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // Get an optional sign
3939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __in_ite = __copy_sign(__in_ite, __end, __buf, __xplus, __xminus);
3949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // Get an optional string of digits.
3969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  if (!__grouping.empty())
3979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __digits_before_dot = __copy_grouped_digits(__in_ite, __end, __buf, __digits,
3989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                                __sep, __grouping, __grouping_ok);
3999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  else
4009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __digits_before_dot = __copy_digits(__in_ite, __end, __buf, __digits);
4019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // Get an optional decimal point, and an optional string of digits.
4039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  if (__in_ite != __end && *__in_ite == __dot) {
4049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __buf.push_back('.');
4059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    ++__in_ite;
4069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __digits_after_dot = __copy_digits(__in_ite, __end, __buf, __digits);
4079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
4089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // There have to be some digits, somewhere.
4109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __ok = __digits_before_dot || __digits_after_dot;
4119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // Get an optional exponent.
4139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  if (__ok && __in_ite != __end && (*__in_ite == __pow_e || *__in_ite == __pow_E)) {
4149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __buf.push_back('e');
4159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    ++__in_ite;
4169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __in_ite = __copy_sign(__in_ite, __end, __buf, __xplus, __xminus);
4179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __ok = __copy_digits(__in_ite, __end, __buf, __digits);
4189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    // If we have an exponent then the sign
4199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    // is optional but the digits aren't.
4209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
4219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  return __ok;
4239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
4249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
425e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class _InputIter, class _Float, class _CharT>
426e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_InputIter _STLP_CALL
427e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__do_get_float(_InputIter& __in_ite, _InputIter& __end, ios_base& __str,
428e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott               ios_base::iostate& __err, _Float& __val, _CharT* /*__pc*/) {
429e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  locale __loc = __str.getloc();
430e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  const ctype<_CharT> &__ctype = use_facet<ctype<_CharT> >(__loc);
431e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  const numpunct<_CharT> &__numpunct = use_facet<numpunct<_CharT> >(__loc);
432e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
433e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  __iostring __buf ;
434e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  bool __ok = __read_float(__buf, __in_ite, __end, __ctype, __numpunct);
435e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  if (__ok) {
436e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    __string_to_float(__buf, __val);
437e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    __err = ios_base::goodbit;
438e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
439e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  else {
440e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    __err = ios_base::failbit;
441e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
442e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  if (__in_ite == __end)
443e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    __err |= ios_base::eofbit;
444e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  return __in_ite;
445e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
446e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
447e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class _InputIter, class _CharT>
448e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_InputIter _STLP_CALL
449e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__do_get_alphabool(_InputIter& __in_ite, _InputIter& __end, ios_base& __str,
450e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                   ios_base::iostate& __err, bool& __x, _CharT* /*__pc*/) {
451e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  const numpunct<_CharT>& __np = use_facet<numpunct<_CharT> >(__str.getloc());
452e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  const basic_string<_CharT, char_traits<_CharT>, allocator<_CharT> > __truename  = __np.truename();
453e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  const basic_string<_CharT, char_traits<_CharT>, allocator<_CharT> > __falsename = __np.falsename();
454e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  bool __true_ok  = true;
455e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  bool __false_ok = true;
456e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
457e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  size_t __n = 0;
458e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  for ( ; __in_ite != __end; ++__in_ite) {
459e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _CharT __c = *__in_ite;
460e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    __true_ok  = __true_ok  && (__c == __truename[__n]);
461e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    __false_ok = __false_ok && (__c == __falsename[__n]);
462e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ++__n;
463e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
464e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    if ((!__true_ok && !__false_ok) ||
465e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott        (__true_ok  && __n >= __truename.size()) ||
466e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott        (__false_ok && __n >= __falsename.size())) {
467e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      ++__in_ite;
468e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      break;
469e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
470e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
471e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  if (__true_ok  && __n < __truename.size())  __true_ok  = false;
472e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  if (__false_ok && __n < __falsename.size()) __false_ok = false;
473e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
474e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  if (__true_ok || __false_ok) {
475e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    __err = ios_base::goodbit;
476e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    __x = __true_ok;
477e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
478e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  else
479e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    __err = ios_base::failbit;
480e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
481e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  if (__in_ite == __end)
482e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    __err |= ios_base::eofbit;
483e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
484e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  return __in_ite;
485e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
486e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
4879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_STD_NAMESPACE
4889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//
4909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// num_get<>, num_put<>
4919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//
4929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _InputIterator>
4949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocklocale::id num_get<_CharT, _InputIterator>::id;
4959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_NO_BOOL)
4979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _InputIter>
4989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_InputIter
4999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocknum_get<_CharT, _InputIter>::do_get(_InputIter __in_ite, _InputIter __end,
500e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                                    ios_base& __s, ios_base::iostate& __err, bool& __x) const {
5019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  if (__s.flags() & ios_base::boolalpha) {
502e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    return _STLP_PRIV __do_get_alphabool(__in_ite, __end, __s, __err, __x, (_CharT*)0);
5039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
5049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  else {
5059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    long __lx;
506e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _InputIter __tmp = _STLP_PRIV __do_get_integer(__in_ite, __end, __s, __err, __lx, (_CharT*)0 );
5079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    if (!(__err & ios_base::failbit)) {
5089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      if (__lx == 0)
5099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        __x = false;
5109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      else if (__lx == 1)
5119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        __x = true;
5129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      else
5139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        __err |= ios_base::failbit;
5149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    }
5159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return __tmp;
5169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
5179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
518e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
5199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_FIX_LIBRARY_ISSUES)
5219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _InputIter>
5229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_InputIter
5239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocknum_get<_CharT, _InputIter>::do_get(_InputIter __in_ite, _InputIter __end, ios_base& __str,
5249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                    ios_base::iostate& __err, short& __val) const
5259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return _STLP_PRIV __do_get_integer(__in_ite, __end, __str, __err, __val, (_CharT*)0 ); }
5269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _InputIter>
5289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_InputIter
5299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocknum_get<_CharT, _InputIter>::do_get(_InputIter __in_ite, _InputIter __end, ios_base& __str,
5309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                    ios_base::iostate& __err, int& __val) const
5319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return _STLP_PRIV __do_get_integer(__in_ite, __end, __str, __err, __val, (_CharT*)0 ); }
5329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
5349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _InputIter>
5369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_InputIter
5379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocknum_get<_CharT, _InputIter>::do_get(_InputIter __in_ite, _InputIter __end, ios_base& __str,
5389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                    ios_base::iostate& __err, long& __val) const
5399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return _STLP_PRIV __do_get_integer(__in_ite, __end, __str, __err, __val, (_CharT*)0 ); }
5409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _InputIter>
5429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_InputIter
5439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocknum_get<_CharT, _InputIter>::do_get(_InputIter __in_ite, _InputIter __end, ios_base& __str,
5449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                    ios_base::iostate& __err,
5459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                    unsigned short& __val) const
5469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return _STLP_PRIV __do_get_integer(__in_ite, __end, __str, __err, __val, (_CharT*)0 ); }
5479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _InputIter>
5499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_InputIter
5509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocknum_get<_CharT, _InputIter>::do_get(_InputIter __in_ite, _InputIter __end, ios_base& __str,
5519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                    ios_base::iostate& __err,
5529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                    unsigned int& __val) const
5539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return _STLP_PRIV __do_get_integer(__in_ite, __end, __str, __err, __val, (_CharT*)0 ); }
5549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _InputIter>
5569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_InputIter
5579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocknum_get<_CharT, _InputIter>::do_get(_InputIter __in_ite, _InputIter __end, ios_base& __str,
5589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                    ios_base::iostate& __err,
5599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                    unsigned long& __val) const
5609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return _STLP_PRIV __do_get_integer(__in_ite, __end, __str, __err, __val, (_CharT*)0 ); }
5619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _InputIter>
5639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_InputIter
5649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocknum_get<_CharT, _InputIter>::do_get(_InputIter __in_ite, _InputIter __end, ios_base& __str,
5659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                    ios_base::iostate& __err,
566e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                                    float& __val) const
567e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _STLP_PRIV __do_get_float(__in_ite, __end, __str, __err, __val, (_CharT*)0 ); }
5689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _InputIter>
5709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_InputIter
5719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocknum_get<_CharT, _InputIter>::do_get(_InputIter __in_ite, _InputIter __end, ios_base& __str,
5729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                    ios_base::iostate& __err,
573e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                                    double& __val) const
574e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _STLP_PRIV __do_get_float(__in_ite, __end, __str, __err, __val, (_CharT*)0 ); }
5759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_NO_LONG_DOUBLE)
5779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _InputIter>
5789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_InputIter
5799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocknum_get<_CharT, _InputIter>::do_get(_InputIter __in_ite, _InputIter __end, ios_base& __str,
5809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                    ios_base::iostate& __err,
581e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                                    long double& __val) const
582e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _STLP_PRIV __do_get_float(__in_ite, __end, __str, __err, __val, (_CharT*)0 ); }
583e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
5849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _InputIter>
5869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_InputIter
5879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocknum_get<_CharT, _InputIter>::do_get(_InputIter __in_ite, _InputIter __end, ios_base& __str,
588e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                                    ios_base::iostate& __err,
589e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                                    void*& __p) const {
5909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_LONG_LONG) && !defined (__MRC__)    //*ty 12/07/2001 - MrCpp can not cast from long long to void*
5919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  unsigned _STLP_LONG_LONG __val;
5929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else
5939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  unsigned long __val;
5949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
595e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  iter_type __tmp = _STLP_PRIV __do_get_integer(__in_ite, __end, __str, __err, __val, (_CharT*)0 );
596e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  if (!(__err & ios_base::failbit))
597e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    __p = __REINTERPRET_CAST(void*, __val);
598e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  return __tmp;
599e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
6009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_LONG_LONG)
6029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _InputIter>
6039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_InputIter
6049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocknum_get<_CharT, _InputIter>::do_get(_InputIter __in_ite, _InputIter __end, ios_base& __str,
6059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                    ios_base::iostate& __err,
606e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                                    _STLP_LONG_LONG& __val) const
607e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _STLP_PRIV __do_get_integer(__in_ite, __end, __str, __err, __val, (_CharT*)0 ); }
6089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _InputIter>
6109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_InputIter
6119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocknum_get<_CharT, _InputIter>::do_get(_InputIter __in_ite, _InputIter __end, ios_base& __str,
6129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                    ios_base::iostate& __err,
613e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                                    unsigned _STLP_LONG_LONG& __val) const
614e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _STLP_PRIV __do_get_integer(__in_ite, __end, __str, __err, __val, (_CharT*)0 ); }
615e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
6169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_END_NAMESPACE
6189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_NUMERIC_FACETS_C */
6209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Local Variables:
6229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// mode:C++
6239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// End:
624