/*=========================================================================

  Program:   KWSys - Kitware System Library
  Module:    $RCSfile: kwsys_ios_iostream.h.in,v $

  Copyright (c) Kitware, Inc., Insight Consortium.  All rights reserved.
  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.

     This software is distributed WITHOUT ANY WARRANTY; without even
     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
     PURPOSE.  See the above copyright notices for more information.

=========================================================================*/
#ifndef @KWSYS_NAMESPACE@_ios_iostream
#define @KWSYS_NAMESPACE@_ios_iostream

#include <@KWSYS_NAMESPACE@/Configure.hxx>

#ifdef _MSC_VER
# pragma warning (push, 1)
# pragma warning (disable: 4702)
# pragma warning (disable: 4995) /* Old streams are deprecated.  */
#endif

#if @KWSYS_NAMESPACE@_IOS_USE_ANSI
# include <iostream>
#else
# include <iostream.h>
#endif

// The HP implementation of iostream defines cin, cout, cerr, and clog
// as macros in order to do thread-private streams.
// See /opt/aCC/include/iostream/iostream.h for details.
// This block redefines the macros in a safe way that is also compatible
// with the HP definitions and the using declarations below.

#if !@KWSYS_NAMESPACE@_IOS_USE_SSTREAM
# if defined(__HP_aCC) && (defined(HP_THREAD_SAFE) || defined(_THREAD_SAFE))
#  if defined(cin) && !defined(@KWSYS_NAMESPACE@_IOS_HP_HACK_CIN)
#   define @KWSYS_NAMESPACE@_IOS_HP_HACK_CIN
#   undef cin
#   define cin __tcin.ref()
#  endif
#  if defined(cout) && !defined(@KWSYS_NAMESPACE@_IOS_HP_HACK_COUT)
#   define @KWSYS_NAMESPACE@_IOS_HP_HACK_COUT
#   undef cout
#   define cout __tcout.ref()
#  endif
#  if defined(cerr) && !defined(@KWSYS_NAMESPACE@_IOS_HP_HACK_CERR)
#   define @KWSYS_NAMESPACE@_IOS_HP_HACK_CERR
#   undef cerr
#   define cerr __tcerr.ref()
#  endif
#  if defined(clog) && !defined(@KWSYS_NAMESPACE@_IOS_HP_HACK_CLOG)
#   define @KWSYS_NAMESPACE@_IOS_HP_HACK_CLOG
#   undef clog
#   define clog __tclog.ref()
#  endif
# endif
#endif

// If using our own sstream emulation code, put the standard
// streams in the same namespace.
#if !@KWSYS_NAMESPACE@_IOS_USE_SSTREAM
namespace @KWSYS_NAMESPACE@_ios
{
  typedef int streamsize;
  typedef int streamoff;
  using @KWSYS_NAMESPACE@_ios_namespace::ostream;
  using @KWSYS_NAMESPACE@_ios_namespace::istream;
  using @KWSYS_NAMESPACE@_ios_namespace::ios;
  using @KWSYS_NAMESPACE@_ios_namespace::endl;
  using @KWSYS_NAMESPACE@_ios_namespace::flush;
# if defined(@KWSYS_NAMESPACE@_IOS_HP_HACK_CIN)
  using @KWSYS_NAMESPACE@_ios_namespace::__tcin;
# else
  using @KWSYS_NAMESPACE@_ios_namespace::cin;
# endif
# if defined(@KWSYS_NAMESPACE@_IOS_HP_HACK_COUT)
  using @KWSYS_NAMESPACE@_ios_namespace::__tcout;
# else
  using @KWSYS_NAMESPACE@_ios_namespace::cout;
# endif
# if defined(@KWSYS_NAMESPACE@_IOS_HP_HACK_CERR)
  using @KWSYS_NAMESPACE@_ios_namespace::__tcerr;
# else
  using @KWSYS_NAMESPACE@_ios_namespace::cerr;
# endif
# if defined(@KWSYS_NAMESPACE@_IOS_HP_HACK_CLOG)
  using @KWSYS_NAMESPACE@_ios_namespace::__tclog;
# else
  using @KWSYS_NAMESPACE@_ios_namespace::clog;
# endif
}
#endif

#ifdef _MSC_VER
# pragma warning(pop)
#endif

#endif
