📄 _numeric.h
字号:
/***************************************************************************
*
* _numeric.h - Definitions of the numeric facets
*
* This is an internal header file used to implement the C++ Standard
* Library. It should never be #included directly by a program.
*
* $Id: _numeric.h,v 1.2 2002/12/09 16:32:37 vkorstan Exp $
*
***************************************************************************
*
* Copyright (c) 1994-2001 Rogue Wave Software, Inc. All Rights Reserved.
*
* This computer software is owned by Rogue Wave Software, Inc. and is
* protected by U.S. copyright laws and other laws and by international
* treaties. This computer software is furnished by Rogue Wave Software,
* Inc. pursuant to a written license agreement and may be used, copied,
* transmitted, and stored only in accordance with the terms of such
* license and with the inclusion of the above copyright notice. This
* computer software or any other copies thereof may not be provided or
* otherwise made available to any other person.
*
* U.S. Government Restricted Rights. This computer software is provided
* with Restricted Rights. Use, duplication, or disclosure by the
* Government is subject to restrictions as set forth in subparagraph (c)
* (1) (ii) of The Rights in Technical Data and Computer Software clause
* at DFARS 252.227-7013 or subparagraphs (c) (1) and (2) of the
* Commercial Computer Software--Restricted Rights at 48 CFR 52.227-19,
* as applicable. Manufacturer is Rogue Wave Software, Inc., 5500
* Flatiron Parkway, Boulder, Colorado 80301 USA.
*
**************************************************************************/
#ifndef _RWSTD_NUMERIC_H_INCLUDED
#define _RWSTD_NUMERIC_H_INCLUDED
#include <limits>
#include <rw/_ioiter.h>
#include <rw/_iosbase.h>
#include <rw/_locale.h>
#include <rw/_punct.h>
#include <rw/_defs.h>
_RWSTD_NAMESPACE_BEGIN (__rw)
template <class _CharT, class _InputIterator, class _TypeT>
inline _InputIterator
__rw_num_do_get (_CharT,
_InputIterator __begin,
_InputIterator __end,
_STD::ios_base &__flags,
_STD::ios_base::iostate &__err,
_TypeT &__val)
{
__rw_digit_reader<_CharT, _InputIterator>
__reader (__begin, __end, __flags);
_TypeT __tmp = __reader._C_parse (__reader._C_get_digits (_TypeT ()),
_TypeT ());
if (__reader._C_error)
__err = _STD::ios_base::failbit;
else {
__err = _STD::ios_base::goodbit;
__val = __tmp;
}
if (__reader.eof ())
__err |= _STD::ios_base::eofbit;
return __begin;
}
_RWSTD_NAMESPACE_END // __rw
_RWSTD_NAMESPACE_BEGIN (std)
// 22.2.2.1
template <class _CharT,
class _InputIterator _RWSTD_COMPLEX_DEFAULT (istreambuf_iterator<_CharT>) >
class num_get: public locale::facet
{
public:
typedef _CharT char_type;
typedef _InputIterator iter_type;
static locale::id id;
_EXPLICIT num_get (size_t __refs = 0)
: locale::facet (__refs, locale::numeric) { }
#ifndef _RWSTD_NO_BOOL
iter_type get (iter_type __begin, iter_type __end, ios_base &__flags,
ios_base::iostate &__err, bool& __val) const {
_RWSTD_ASSERT_RANGE (__begin, __end);
return do_get (__begin, __end, __flags, __err, __val);
}
#endif // _RWSTD_NO_BOOL
iter_type get (iter_type __begin, iter_type __end, ios_base &__flags,
ios_base::iostate &__err, unsigned short& __val) const {
_RWSTD_ASSERT_RANGE (__begin, __end);
return do_get (__begin, __end, __flags, __err, __val);
}
// extension
iter_type get (iter_type __begin, iter_type __end, ios_base &__flags,
ios_base::iostate &__err, short& __val) const {
_RWSTD_ASSERT_RANGE (__begin, __end);
return _RW::__rw_num_do_get (_CharT (), __begin, __end, __flags,
__err, __val);
}
// extension
iter_type get (iter_type __begin, iter_type __end, ios_base &__flags,
ios_base::iostate &__err, int& __val) const {
_RWSTD_ASSERT_RANGE (__begin, __end);
return _RW::__rw_num_do_get (_CharT (), __begin, __end, __flags,
__err, __val);
}
iter_type get (iter_type __begin, iter_type __end, ios_base &__flags,
ios_base::iostate &__err, unsigned int& __val) const {
_RWSTD_ASSERT_RANGE (__begin, __end);
return do_get (__begin, __end, __flags, __err, __val);
}
iter_type get (iter_type __begin, iter_type __end, ios_base &__flags,
ios_base::iostate &__err, long& __val) const {
_RWSTD_ASSERT_RANGE (__begin, __end);
return do_get (__begin, __end, __flags, __err, __val);
}
iter_type get (iter_type __begin, iter_type __end, ios_base &__flags,
ios_base::iostate &__err, unsigned long& __val) const {
_RWSTD_ASSERT_RANGE (__begin, __end);
return do_get (__begin, __end, __flags, __err, __val);
}
iter_type get (iter_type __begin, iter_type __end, ios_base &__flags,
ios_base::iostate &__err, float& __val) const {
_RWSTD_ASSERT_RANGE (__begin, __end);
return do_get (__begin, __end, __flags, __err, __val);
}
iter_type get (iter_type __begin, iter_type __end, ios_base &__flags,
ios_base::iostate &__err, double& __val) const {
_RWSTD_ASSERT_RANGE (__begin, __end);
return do_get (__begin, __end, __flags, __err, __val);
}
iter_type get (iter_type __begin, iter_type __end, ios_base &__flags,
ios_base::iostate &__err, long double& __val) const {
_RWSTD_ASSERT_RANGE (__begin, __end);
return do_get (__begin, __end, __flags, __err, __val);
}
iter_type get (iter_type __begin, iter_type __end, ios_base &__flags,
ios_base::iostate &__err, void*& __val) const {
_RWSTD_ASSERT_RANGE (__begin, __end);
return do_get (__begin, __end, __flags, __err, __val);
}
#ifdef _RWSTD_LONG_LONG
// extension
iter_type get (iter_type __begin, iter_type __end, ios_base &__flags,
ios_base::iostate &__err, _RWSTD_LONG_LONG& __val) const {
_RWSTD_ASSERT_RANGE (__begin, __end);
return do_get (__begin, __end, __flags, __err, __val);
}
// extension
iter_type get (iter_type __begin, iter_type __end, ios_base &__flags,
ios_base::iostate &__err,
unsigned _RWSTD_LONG_LONG& __val) const {
_RWSTD_ASSERT_RANGE (__begin, __end);
return do_get (__begin, __end, __flags, __err, __val);
}
#endif // _RWSTD_LONG_LONG
// Implementation:
enum { _C_facet_cat = locale::numeric, _C_ok_implicit = 1 };
protected:
#ifndef _RWSTD_NO_BOOL
virtual iter_type do_get (iter_type, iter_type, ios_base&,
ios_base::iostate&, bool&) const;
#endif // _RWSTD_NO_BOOL
virtual iter_type do_get (iter_type __begin, iter_type __end,
ios_base &__flags, ios_base::iostate &__err,
unsigned short &__val) const {
return _RW::__rw_num_do_get (char_type (), __begin, __end,
__flags, __err, __val);
}
virtual iter_type do_get (iter_type __begin, iter_type __end,
ios_base &__flags, ios_base::iostate &__err,
unsigned int &__val) const {
return _RW::__rw_num_do_get (char_type (), __begin, __end,
__flags, __err, __val);
}
virtual iter_type do_get (iter_type __begin, iter_type __end,
ios_base &__flags, ios_base::iostate &__err,
long &__val) const {
return _RW::__rw_num_do_get (char_type (), __begin, __end,
__flags, __err, __val);
}
virtual iter_type do_get (iter_type __begin, iter_type __end,
ios_base &__flags, ios_base::iostate &__err,
unsigned long &__val) const {
return _RW::__rw_num_do_get (char_type (), __begin, __end,
__flags, __err, __val);
}
virtual iter_type do_get (iter_type __begin, iter_type __end,
ios_base &__flags, ios_base::iostate &__err,
float &__val) const {
return _RW::__rw_num_do_get (char_type (), __begin, __end,
__flags, __err, __val);
}
virtual iter_type do_get (iter_type __begin, iter_type __end,
ios_base &__flags, ios_base::iostate &__err,
double &__val) const {
return _RW::__rw_num_do_get (char_type (),
__begin, __end,
__flags, __err, __val);
}
virtual iter_type do_get (iter_type __begin, iter_type __end,
ios_base &__flags, ios_base::iostate &__err,
long double &__val) const {
return _RW::__rw_num_do_get (char_type (),
__begin, __end,
__flags, __err, __val);
}
virtual iter_type do_get (iter_type __begin, iter_type __end,
ios_base &__flags, ios_base::iostate &__err,
void* &__val) const {
return _RW::__rw_num_do_get (char_type (),
__begin, __end,
__flags, __err, __val);
}
#ifdef _RWSTD_LONG_LONG
// extension
virtual iter_type do_get (iter_type __begin, iter_type __end,
ios_base &__flags, ios_base::iostate &__err,
_RWSTD_LONG_LONG &__val) const {
return _RW::__rw_num_do_get (char_type (), __begin, __end,
__flags, __err, __val);
}
// extension
virtual iter_type do_get (iter_type __begin, iter_type __end,
ios_base &__flags, ios_base::iostate &__err,
unsigned _RWSTD_LONG_LONG &__val) const {
return _RW::__rw_num_do_get (char_type (), __begin, __end,
__flags, __err, __val);
}
#endif // _RWSTD_LONG_LONG
private:
#ifdef _RWSTD_NO_MEMBER_TEMPLATES
locale::id &_C_get_id () const {
return id;
}
#endif // _RWSTD_NO_MEMBER_TEMPLATES
};
_RWSTD_INSTANTIATE_3 (class _RWSTD_EXPORT
num_get<char,
istreambuf_iterator<char, char_traits<char> > >);
#ifndef _RWSTD_NO_WCHAR_T
_RWSTD_INSTANTIATE_3 (class _RWSTD_EXPORT
num_get<wchar_t,
istreambuf_iterator<wchar_t, char_traits<wchar_t> > >);
#endif // _RWSTD_NO_WCHAR_T
// 22.2.2.2
template <class _CharT,
class _OutputIterator _RWSTD_COMPLEX_DEFAULT (ostreambuf_iterator<_CharT>)>
class num_put: public locale::facet
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -