⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 _numeric.h

📁 realview22.rar
💻 H
📖 第 1 页 / 共 2 页
字号:
/***************************************************************************
 *
 * _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 + -