// -*- C++ -*-
/***************************************************************************
 *
 * iosfwd - forward declarations for the iostreams
 *
 * $Id: iosfwd 590052 2007-10-30 12:44:14Z faridz $
 *
 ***************************************************************************
 *
 * Licensed to the Apache Software  Foundation (ASF) under one or more
 * contributor  license agreements.  See  the NOTICE  file distributed
 * with  this  work  for  additional information  regarding  copyright
 * ownership.   The ASF  licenses this  file to  you 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.
 *
 * Copyright 1994-2006 Rogue Wave Software.
 * 
 **************************************************************************/

#ifndef _RWSTD_IOSFWD_INCLUDED
#define _RWSTD_IOSFWD_INCLUDED

#include <rw/_iosfwd.h>
#include <rw/_mbstate.h>   // for _RWSTD_MBSTATE_T


_RWSTD_NAMESPACE (std) { 


template <class _TypeT>
class allocator;


#ifndef _RWSTD_RW_BASIC_IOS_H_INCLUDED

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

typedef basic_ios<char> ios;

#  ifndef _RWSTD_NO_WCHAR_T

typedef basic_ios<wchar_t> wios;

#  endif   // _RWSTD_NO_WCHAR_T
#endif   // _RWSTD_RW_BASIC_IOS_H_INCLUDED


#ifndef _RWSTD_STREAMBUF_INCLUDED

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

typedef basic_streambuf<char> streambuf;

#  ifndef _RWSTD_NO_WCHAR_T

typedef basic_streambuf<wchar_t> wstreambuf;

#  endif   // _RWSTD_NO_WCHAR_T
#endif   // _RWSTD_STREAMBUF_INCLUDED


#ifndef _RWSTD_ISTREAM_INCLUDED

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

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


typedef basic_istream<char>  istream;
typedef basic_iostream<char> iostream;

#  ifndef _RWSTD_NO_WCHAR_T

typedef basic_istream<wchar_t>  wistream;
typedef basic_iostream<wchar_t> wiostream;

#  endif   // _RWSTD_NO_WCHAR_T
#endif   // _RWSTD_ISTREAM_INCLUDED


#ifndef _RWSTD_OSTREAM_INCLUDED

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

typedef basic_ostream<char, char_traits<char> > ostream;

#  ifndef _RWSTD_NO_WCHAR_T

typedef basic_ostream<wchar_t, char_traits<wchar_t> > wostream;

#  endif   // _RWSTD_NO_WCHAR_T
#endif   // _RWSTD_OSTREAM_INCLUDED


#ifndef _RWSTD_SSTREAM_INCLUDED

_EXPORT
template <class _CharT,
          class _Traits = char_traits<_CharT>,
          class _Allocator = allocator<_CharT> > 
class basic_stringbuf;

template <class _CharT,
          class _Traits = char_traits<_CharT>,
          class _Allocator = allocator<_CharT>  > 
class basic_istringstream;

template <class _CharT,
          class _Traits = char_traits<_CharT>,
          class _Allocator = allocator<_CharT> > 
class basic_ostringstream;

template <class _CharT,
          class _Traits = char_traits<_CharT>,
          class _Allocator = allocator<_CharT>  > 
class basic_stringstream;

typedef basic_stringbuf<char>     stringbuf;
typedef basic_istringstream<char> istringstream;
typedef basic_ostringstream<char> ostringstream;
typedef basic_stringstream<char>  stringstream;

#  ifndef _RWSTD_NO_WCHAR_T

typedef basic_stringbuf<wchar_t>     wstringbuf;
typedef basic_istringstream<wchar_t> wistringstream;
typedef basic_ostringstream<wchar_t> wostringstream;
typedef basic_stringstream<wchar_t>  wstringstream;

#  endif   // _RWSTD_NO_WCHAR_T
#endif   // _RWSTD_SSTREAM_INCLUDED


#ifndef _RWSTD_FSTREAM_INCLUDED

_EXPORT
template <class _CharT, class _Traits = char_traits<_CharT> >
class basic_filebuf;

template <class _CharT, class _Traits = char_traits<_CharT> >
class basic_ifstream;

template <class _CharT, class _Traits = char_traits<_CharT> >
class basic_ofstream;

template <class _CharT, class _Traits = char_traits<_CharT> >
class basic_fstream;

typedef basic_filebuf<char>  filebuf;
typedef basic_ifstream<char> ifstream;
typedef basic_ofstream<char> ofstream;
typedef basic_fstream<char>  fstream;

#  ifndef _RWSTD_NO_WCHAR_T

typedef basic_filebuf<wchar_t>  wfilebuf;
typedef basic_ifstream<wchar_t> wifstream;
typedef basic_ofstream<wchar_t> wofstream;
typedef basic_fstream<wchar_t>  wfstream;

#  endif   // _RWSTD_NO_WCHAR_T
#endif   // _RWSTD_FSTREAM_INCLUDED


#ifndef _RWSTD_RW_IOITER_H_INCLUDED

template <class _CharT, class _Traits = char_traits<_CharT> > 
struct ostreambuf_iterator;

template <class _CharT, class _Traits = char_traits<_CharT> > 
struct istreambuf_iterator;

#endif   // _RWSTD_RW_IOITER_H_INCLUDED


// 27.2, p8
template <class _StateT>
class fpos;

// 27.2, p9 - identical to std::fpos<char_traits<char>::state_type>
//            and std::fpos<char_traits<wchar_t>::state_type>, respectively
typedef fpos<_RWSTD_MBSTATE_T> streampos;
typedef fpos<_RWSTD_MBSTATE_T> wstreampos;

}   // namespace std


#endif   // _RWSTD_IOSFWD_INCLUDED
