/*
 * Copyright (c) 1997-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.
 *
 */

#ifndef _STLP_STRING

#ifndef _STLP_OUTERMOST_HEADER_ID
#  define _STLP_OUTERMOST_HEADER_ID 0x68
#  include <stl/_prolog.h>
#  define _STLP_STRING
#endif

#if (_STLP_OUTERMOST_HEADER_ID == 0x68)
#  ifndef _STLP_INTERNAL_STRING_H
#    include <stl/_string.h>
#  endif

#  ifndef _STLP_STRING_HASH_H
#    include <stl/_string_hash.h>
#  endif

#  if !defined (_STLP_USE_NO_IOSTREAMS) && !defined (_STLP_STRING_IO_H)
#    include <stl/_string_io.h>
#  endif
#endif

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

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

#endif /* _STLP_STRING */

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

