/*
 * Copyright (c) 1999
 * Silicon Graphics Computer Systems, Inc.
 *
 * Copyright (c) 1999
 * Boris Fomitchev
 *
 * This material is provided "as is", with absolutely no warranty expressed
 * or implied. Any use is at your own risk.
 *
 * Permission to use or copy this software for any purpose is hereby granted
 * without fee, provided the above notices are retained on all copies.
 * Permission to modify the code and to distribute modified code is granted,
 * provided the above notices are retained, and a notice that the code was
 * modified is included with the above copyright notice.
 *
 */
// This header defines classes basic_stringbuf, basic_istringstream,
// basic_ostringstream, and basic_stringstream.  These classes
// represent streamsbufs and streams whose sources or destinations are
// C++ strings.

#ifndef _STLP_SSTREAM

#ifndef _STLP_OUTERMOST_HEADER_ID
#  define _STLP_OUTERMOST_HEADER_ID 0x1059
#  include <stl/_prolog.h>
#  define _STLP_SSTREAM
#endif

#if (_STLP_OUTERMOST_HEADER_ID == 0x1059) && \
   !(defined (_STLP_NO_IOSTREAMS) && defined (_STLP_IMPORT_VENDOR_STD))
#  include <stl/_ioserr.h>

#  ifndef _STLP_INTERNAL_SSTREAM
#    include <stl/_sstream.h>
#  endif
#endif

#if (_STLP_OUTERMOST_HEADER_ID != 0x1059) || defined (_STLP_IMPORT_VENDOR_STD)
#  if defined (_STLP_HAS_INCLUDE_NEXT)
#    include_next <sstream>
#  else
#    include _STLP_NATIVE_HEADER(sstream)
#  endif
#endif

#if (_STLP_OUTERMOST_HEADER_ID == 0x1059)
#  include <stl/_epilog.h>
#  undef _STLP_OUTERMOST_HEADER_ID
#endif

#endif /* _STLP_SSTREAM */

// Local Variables:
// mode:C++
// End:
