locale_facets.h (num_get<>): Return advanced iterator for _M_extract_float and _M_extract_int
2002-01-10 David Seymour <seymour_dj@yahoo.com> * include/bits/locale_facets.h (num_get<>): Return advanced iterator for _M_extract_float and _M_extract_int * include/bits/locale_facets.tcc (num_get<>::_M_extract_float) (num_get<>::_M_extract_int): Likewise, all callers changed * testsuite/22_locale/num_get_members_char.cc: Testcase From-SVN: r48764
This commit is contained in:
parent
40571d6783
commit
631ba05e3d
|
@ -1,3 +1,11 @@
|
||||||
|
2002-01-10 David Seymour <seymour_dj@yahoo.com>
|
||||||
|
|
||||||
|
* include/bits/locale_facets.h (num_get<>): Return advanced iterator
|
||||||
|
for _M_extract_float and _M_extract_int
|
||||||
|
* include/bits/locale_facets.tcc (num_get<>::_M_extract_float)
|
||||||
|
(num_get<>::_M_extract_int): Likewise, all callers changed
|
||||||
|
* testsuite/22_locale/num_get_members_char.cc: Testcase
|
||||||
|
|
||||||
2002-01-09 Paolo Carlini <pcarlini@unitus.it>
|
2002-01-09 Paolo Carlini <pcarlini@unitus.it>
|
||||||
|
|
||||||
* libsupc++/exception (bad_exception): Add comment.
|
* libsupc++/exception (bad_exception): Add comment.
|
||||||
|
|
|
@ -641,11 +641,11 @@ namespace std
|
||||||
protected:
|
protected:
|
||||||
virtual ~num_get() { }
|
virtual ~num_get() { }
|
||||||
|
|
||||||
void
|
iter_type
|
||||||
_M_extract_float(iter_type, iter_type, ios_base&, ios_base::iostate&,
|
_M_extract_float(iter_type, iter_type, ios_base&, ios_base::iostate&,
|
||||||
string& __xtrc) const;
|
string& __xtrc) const;
|
||||||
|
|
||||||
void
|
iter_type
|
||||||
_M_extract_int(iter_type, iter_type, ios_base&, ios_base::iostate&,
|
_M_extract_int(iter_type, iter_type, ios_base&, ios_base::iostate&,
|
||||||
char* __xtrc, int __max, int& __base) const;
|
char* __xtrc, int __max, int& __base) const;
|
||||||
|
|
||||||
|
|
|
@ -88,7 +88,7 @@ namespace std
|
||||||
|
|
||||||
|
|
||||||
template<typename _CharT, typename _InIter>
|
template<typename _CharT, typename _InIter>
|
||||||
void
|
_InIter
|
||||||
num_get<_CharT, _InIter>::
|
num_get<_CharT, _InIter>::
|
||||||
_M_extract_float(_InIter __beg, _InIter __end, ios_base& __io,
|
_M_extract_float(_InIter __beg, _InIter __end, ios_base& __io,
|
||||||
ios_base::iostate& __err, string& __xtrc) const
|
ios_base::iostate& __err, string& __xtrc) const
|
||||||
|
@ -213,10 +213,11 @@ namespace std
|
||||||
__xtrc += char();
|
__xtrc += char();
|
||||||
if (__beg == __end)
|
if (__beg == __end)
|
||||||
__err |= ios_base::eofbit;
|
__err |= ios_base::eofbit;
|
||||||
|
return __beg;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename _CharT, typename _InIter>
|
template<typename _CharT, typename _InIter>
|
||||||
void
|
_InIter
|
||||||
num_get<_CharT, _InIter>::
|
num_get<_CharT, _InIter>::
|
||||||
_M_extract_int(_InIter __beg, _InIter __end, ios_base& __io,
|
_M_extract_int(_InIter __beg, _InIter __end, ios_base& __io,
|
||||||
ios_base::iostate& __err, char* __xtrc, int __max,
|
ios_base::iostate& __err, char* __xtrc, int __max,
|
||||||
|
@ -369,6 +370,7 @@ namespace std
|
||||||
__xtrc[__pos] = char();
|
__xtrc[__pos] = char();
|
||||||
if (__beg == __end)
|
if (__beg == __end)
|
||||||
__err |= ios_base::eofbit;
|
__err |= ios_base::eofbit;
|
||||||
|
return __beg;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _GLIBCPP_RESOLVE_LIB_DEFECTS
|
#ifdef _GLIBCPP_RESOLVE_LIB_DEFECTS
|
||||||
|
@ -394,8 +396,8 @@ namespace std
|
||||||
// that can be represented without change" so we have to add 1 to it
|
// that can be represented without change" so we have to add 1 to it
|
||||||
// in order to obtain the max number of digits. The same for the
|
// in order to obtain the max number of digits. The same for the
|
||||||
// other do_get for integral types below.
|
// other do_get for integral types below.
|
||||||
_M_extract_int(__beg, __end, __io, __err, __xtrc,
|
__beg = _M_extract_int(__beg, __end, __io, __err, __xtrc,
|
||||||
numeric_limits<bool>::digits10 + 1, __base);
|
numeric_limits<bool>::digits10 + 1, __base);
|
||||||
|
|
||||||
// Stage 2: convert and store results.
|
// Stage 2: convert and store results.
|
||||||
char* __sanity;
|
char* __sanity;
|
||||||
|
@ -459,8 +461,8 @@ namespace std
|
||||||
// integral types.
|
// integral types.
|
||||||
char __xtrc[32];
|
char __xtrc[32];
|
||||||
int __base;
|
int __base;
|
||||||
_M_extract_int(__beg, __end, __io, __err, __xtrc,
|
__beg = _M_extract_int(__beg, __end, __io, __err, __xtrc,
|
||||||
numeric_limits<long>::digits10 + 1, __base);
|
numeric_limits<long>::digits10 + 1, __base);
|
||||||
|
|
||||||
// Stage 2: convert and store results.
|
// Stage 2: convert and store results.
|
||||||
char* __sanity;
|
char* __sanity;
|
||||||
|
@ -485,8 +487,9 @@ namespace std
|
||||||
// integral types.
|
// integral types.
|
||||||
char __xtrc[32];
|
char __xtrc[32];
|
||||||
int __base;
|
int __base;
|
||||||
_M_extract_int(__beg, __end, __io, __err, __xtrc,
|
__beg = _M_extract_int(__beg, __end, __io, __err, __xtrc,
|
||||||
numeric_limits<unsigned short>::digits10 + 1, __base);
|
numeric_limits<unsigned short>::digits10 + 1,
|
||||||
|
__base);
|
||||||
|
|
||||||
// Stage 2: convert and store results.
|
// Stage 2: convert and store results.
|
||||||
char* __sanity;
|
char* __sanity;
|
||||||
|
@ -512,8 +515,9 @@ namespace std
|
||||||
// integral types.
|
// integral types.
|
||||||
char __xtrc[32];
|
char __xtrc[32];
|
||||||
int __base;
|
int __base;
|
||||||
_M_extract_int(__beg, __end, __io, __err, __xtrc,
|
__beg = _M_extract_int(__beg, __end, __io, __err, __xtrc,
|
||||||
numeric_limits<unsigned int>::digits10 + 1, __base);
|
numeric_limits<unsigned int>::digits10 + 1,
|
||||||
|
__base);
|
||||||
|
|
||||||
// Stage 2: convert and store results.
|
// Stage 2: convert and store results.
|
||||||
char* __sanity;
|
char* __sanity;
|
||||||
|
@ -539,8 +543,9 @@ namespace std
|
||||||
// integral types.
|
// integral types.
|
||||||
char __xtrc[32];
|
char __xtrc[32];
|
||||||
int __base;
|
int __base;
|
||||||
_M_extract_int(__beg, __end, __io, __err, __xtrc,
|
__beg = _M_extract_int(__beg, __end, __io, __err, __xtrc,
|
||||||
numeric_limits<unsigned long>::digits10 + 1, __base);
|
numeric_limits<unsigned long>::digits10 + 1,
|
||||||
|
__base);
|
||||||
|
|
||||||
// Stage 2: convert and store results.
|
// Stage 2: convert and store results.
|
||||||
char* __sanity;
|
char* __sanity;
|
||||||
|
@ -566,8 +571,8 @@ namespace std
|
||||||
// integral types.
|
// integral types.
|
||||||
char __xtrc[32];
|
char __xtrc[32];
|
||||||
int __base;
|
int __base;
|
||||||
_M_extract_int(__beg, __end, __io, __err, __xtrc,
|
__beg = _M_extract_int(__beg, __end, __io, __err, __xtrc,
|
||||||
numeric_limits<long long>::digits10 + 1, __base);
|
numeric_limits<long long>::digits10 + 1, __base);
|
||||||
|
|
||||||
// Stage 2: convert and store results.
|
// Stage 2: convert and store results.
|
||||||
char* __sanity;
|
char* __sanity;
|
||||||
|
@ -592,8 +597,9 @@ namespace std
|
||||||
// integral types.
|
// integral types.
|
||||||
char __xtrc[32];
|
char __xtrc[32];
|
||||||
int __base;
|
int __base;
|
||||||
_M_extract_int(__beg, __end, __io, __err, __xtrc,
|
__beg = _M_extract_int(__beg, __end, __io, __err, __xtrc,
|
||||||
numeric_limits<unsigned long long>::digits10 + 1, __base);
|
numeric_limits<unsigned long long>::digits10 + 1,
|
||||||
|
__base);
|
||||||
|
|
||||||
// Stage 2: convert and store results.
|
// Stage 2: convert and store results.
|
||||||
char* __sanity;
|
char* __sanity;
|
||||||
|
@ -617,7 +623,7 @@ namespace std
|
||||||
// Stage 1: extract and determine the conversion specifier.
|
// Stage 1: extract and determine the conversion specifier.
|
||||||
string __xtrc;
|
string __xtrc;
|
||||||
__xtrc.reserve(32);
|
__xtrc.reserve(32);
|
||||||
_M_extract_float(__beg, __end, __io, __err, __xtrc);
|
__beg = _M_extract_float(__beg, __end, __io, __err, __xtrc);
|
||||||
|
|
||||||
// Stage 2: convert and store results.
|
// Stage 2: convert and store results.
|
||||||
char* __sanity;
|
char* __sanity;
|
||||||
|
@ -644,7 +650,7 @@ namespace std
|
||||||
// Stage 1: extract and determine the conversion specifier.
|
// Stage 1: extract and determine the conversion specifier.
|
||||||
string __xtrc;
|
string __xtrc;
|
||||||
__xtrc.reserve(32);
|
__xtrc.reserve(32);
|
||||||
_M_extract_float(__beg, __end, __io, __err, __xtrc);
|
__beg = _M_extract_float(__beg, __end, __io, __err, __xtrc);
|
||||||
|
|
||||||
// Stage 2: convert and store results.
|
// Stage 2: convert and store results.
|
||||||
char* __sanity;
|
char* __sanity;
|
||||||
|
@ -667,7 +673,7 @@ namespace std
|
||||||
// Stage 1: extract and determine the conversion specifier.
|
// Stage 1: extract and determine the conversion specifier.
|
||||||
string __xtrc;
|
string __xtrc;
|
||||||
__xtrc.reserve(32);
|
__xtrc.reserve(32);
|
||||||
_M_extract_float(__beg, __end, __io, __err, __xtrc);
|
__beg = _M_extract_float(__beg, __end, __io, __err, __xtrc);
|
||||||
|
|
||||||
#if defined(_GLIBCPP_USE_C99) && !defined(__hpux)
|
#if defined(_GLIBCPP_USE_C99) && !defined(__hpux)
|
||||||
// Stage 2: convert and store results.
|
// Stage 2: convert and store results.
|
||||||
|
@ -721,8 +727,9 @@ namespace std
|
||||||
// integral types.
|
// integral types.
|
||||||
char __xtrc[32];
|
char __xtrc[32];
|
||||||
int __base;
|
int __base;
|
||||||
_M_extract_int(__beg, __end, __io, __err, __xtrc,
|
__beg = _M_extract_int(__beg, __end, __io, __err, __xtrc,
|
||||||
numeric_limits<unsigned long>::digits10 + 1, __base);
|
numeric_limits<unsigned long>::digits10 + 1,
|
||||||
|
__base);
|
||||||
|
|
||||||
// Stage 2: convert and store results.
|
// Stage 2: convert and store results.
|
||||||
char* __sanity;
|
char* __sanity;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// 2001-11-21 Benjamin Kosnik <bkoz@redhat.com>
|
// 2001-11-21 Benjamin Kosnik <bkoz@redhat.com>
|
||||||
|
|
||||||
// Copyright (C) 2001 Free Software Foundation
|
// Copyright (C) 2001-2002 Free Software Foundation
|
||||||
//
|
//
|
||||||
// This file is part of the GNU ISO C++ Library. This library is free
|
// 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
|
// software; you can redistribute it and/or modify it under the
|
||||||
|
@ -235,10 +235,39 @@ void test01()
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 2002-01-10 David Seymour <seymour_dj@yahoo.com>
|
||||||
|
void test02()
|
||||||
|
{
|
||||||
|
using namespace std;
|
||||||
|
bool test = true;
|
||||||
|
|
||||||
|
// Num_get works with other iterators besides streambuf output iterators
|
||||||
|
typedef string::const_iterator iter_type;
|
||||||
|
typedef num_get<char, iter_type> num_get_type;
|
||||||
|
const ios_base::iostate goodbit = ios_base::goodbit;
|
||||||
|
const ios_base::iostate eofbit = ios_base::eofbit;
|
||||||
|
ios_base::iostate err = ios_base::goodbit;
|
||||||
|
const locale loc_c = locale::classic();
|
||||||
|
|
||||||
|
long i = 0;
|
||||||
|
const string str = "20000106 Elizabeth Durack";
|
||||||
|
istringstream iss; // need an ios, add my num_get facet
|
||||||
|
iss.imbue(locale(loc_c, new num_get_type));
|
||||||
|
|
||||||
|
// Iterator advanced, state, output.
|
||||||
|
const num_get_type& ng = use_facet<num_get_type>(iss.getloc());
|
||||||
|
iter_type end = ng.get(str.begin(), str.end(), iss, err, i);
|
||||||
|
string rem(end, str.end());
|
||||||
|
|
||||||
|
VERIFY( err == goodbit );
|
||||||
|
VERIFY( i == 20000106);
|
||||||
|
VERIFY( rem == " Elizabeth Durack" );
|
||||||
|
}
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
test01();
|
test01();
|
||||||
|
test02();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue