/***************************************************************************
 *
 * _bitmask.h - helper definitions for bitmask types
 *
 * This is an internal header file used to implement the C++ Standard
 * Library. It should never be #included directly by a program.
 *
 * $Id: //stdlib/dev/include/rw/_iosfwd.h#10 $
 *
 ***************************************************************************
 *
 * Copyright (c) 1994-2005 Quovadx,  Inc., acting through its  Rogue Wave
 * Software division. Licensed under the Apache License, Version 2.0 (the
 * "License");  you may  not use this file except  in compliance with the
 * License.    You    may   obtain   a   copy   of    the   License    at
 * http://www.apache.org/licenses/LICENSE-2.0.    Unless   required    by
 * applicable law  or agreed to  in writing,  software  distributed under
 * the License is distributed on an "AS IS" BASIS,  WITHOUT WARRANTIES OR
 * CONDITIONS OF  ANY KIND, either  express or implied.  See  the License
 * for the specific language governing permissions  and limitations under
 * the License.
 * 
 **************************************************************************/

#ifndef _RWSTD_IOSFWD_H_INCLUDED
#define _RWSTD_IOSFWD_H_INCLUDED


#include <rw/_bitmask.h>
#include <rw/_defs.h>


_RWSTD_NAMESPACE (std) {

template<class _CharT>
struct char_traits;

_RWSTD_SPECIALIZED_CLASS
struct char_traits<char>;

#ifndef _RWSTD_NO_WCHAR_T

_RWSTD_SPECIALIZED_CLASS
struct char_traits<wchar_t>;

#endif   // _RWSTD_NO_WCHAR_T


struct _RWSTD_EXPORT ios_base;

_EXPORT
template <class _CharT, class _Traits>
class basic_ios;

_EXPORT
template <class _CharT, class _Traits>
class basic_streambuf;

// 27.2, p4
_EXPORT
template <class _CharT, class _Traits>
class basic_istream;

// 27.2, p5
_EXPORT
template <class _CharT, class _Traits>
class basic_ostream;

// 27.2, p6
_EXPORT
template <class _CharT, class _Traits>
class basic_iostream;

template <class _CharT, class _Traits>
struct ostreambuf_iterator;

template <class _CharT, class _Traits>
struct istreambuf_iterator;

}   // namespace std


// used in money_get and num_get facets
#define _RWSTD_IOSTATE _RWSTD_BITMASK_ENUM (_RW::__rw_iostate)


_RWSTD_NAMESPACE (__rw) {

// for convenience
typedef _STD::istreambuf_iterator<char, _STD::char_traits<char> >
    __rw_istreambuf_iterator;

#ifndef _RWSTD_NO_WCHAR_T

typedef _STD::istreambuf_iterator<wchar_t, _STD::char_traits<wchar_t> >
    __rw_wistreambuf_iterator;

#endif   // _RWSTD_NO_WCHAR_T


enum __rw_fmtflags {
    __rw_boolalpha   = _RWSTD_IOS_BOOLALPHA,
    __rw_dec         = _RWSTD_IOS_DEC,
    __rw_fixed       = _RWSTD_IOS_FIXED,
    __rw_hex         = _RWSTD_IOS_HEX,
    __rw_internal    = _RWSTD_IOS_INTERNAL,
    __rw_left        = _RWSTD_IOS_LEFT,
    __rw_oct         = _RWSTD_IOS_OCT,
    __rw_right       = _RWSTD_IOS_RIGHT,
    __rw_scientific  = _RWSTD_IOS_SCIENTIFIC,
    __rw_showbase    = _RWSTD_IOS_SHOWBASE,
    __rw_showpoint   = _RWSTD_IOS_SHOWPOINT,
    __rw_showpos     = _RWSTD_IOS_SHOWPOS,
    __rw_skipws      = _RWSTD_IOS_SKIPWS,
    __rw_unitbuf     = _RWSTD_IOS_UNITBUF,
    __rw_uppercase   = _RWSTD_IOS_UPPERCASE,
    __rw_bin         = _RWSTD_IOS_BIN,
    __rw_basefield   = _RWSTD_IOS_BASEFIELD,
    __rw_adjustfield = _RWSTD_IOS_ADJUSTFIELD,
    __rw_floatfield  = _RWSTD_IOS_FLOATFIELD,
    __rw_nolock      = _RWSTD_IOS_NOLOCK,
    __rw_nolockbuf   = _RWSTD_IOS_NOLOCKBUF,
    __rw_sync_stdio  = _RWSTD_IOS_SYNC_STDIO
};

_RWSTD_DEFINE_BITMASK_OPERATORS (__rw_fmtflags);


enum __rw_iostate {
    __rw_goodbit = _RWSTD_IOS_GOODBIT,
    __rw_badbit  = _RWSTD_IOS_BADBIT,
    __rw_eofbit  = _RWSTD_IOS_EOFBIT,
    __rw_failbit = _RWSTD_IOS_FAILBIT,

    // for debugging
    __rw_bad_eof      = _RWSTD_IOS_BADBIT | _RWSTD_IOS_EOFBIT,
    __rw_bad_fail     = _RWSTD_IOS_BADBIT | _RWSTD_IOS_FAILBIT,
    __rw_bad_eof_fail =   _RWSTD_IOS_BADBIT | _RWSTD_IOS_EOFBIT
                        | _RWSTD_IOS_FAILBIT,
    __rw_eof_fail     = _RWSTD_IOS_EOFBIT | _RWSTD_IOS_FAILBIT,


    __rw_nothrow = _RWSTD_IOS_NOTHROW,
    __rw_rethrow = _RWSTD_IOS_RETHROW
};

_RWSTD_DEFINE_BITMASK_OPERATORS (__rw_iostate);


enum __rw_openmode {
    __rw_app       = _RWSTD_IOS_APP,
    __rw_binary    = _RWSTD_IOS_BINARY,
    __rw_in        = _RWSTD_IOS_IN,
    __rw_out       = _RWSTD_IOS_OUT,
    __rw_in_out    = _RWSTD_IOS_IN | _RWSTD_IOS_OUT,
    __rw_trunc     = _RWSTD_IOS_TRUNC,
    __rw_ate       = _RWSTD_IOS_ATE,
    __rw_nocreate  = _RWSTD_IOS_NOCREATE,
    __rw_noreplace = _RWSTD_IOS_NOREPLACE,
    __rw_stdio     = _RWSTD_IOS_STDIO,
    __rw_native    = _RWSTD_IOS_NATIVE
};

_RWSTD_DEFINE_BITMASK_OPERATORS (__rw_openmode);


enum __rw_seekdir {
    __rw_beg = _RWSTD_SEEK_SET,
    __rw_cur = _RWSTD_SEEK_CUR,
    __rw_end = _RWSTD_SEEK_END
};

}   // namespace __rw


#endif   // _RWSTD_IOSFWD_H_INCLUDED
