/*
 * 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_CLIMITS
# define _STLP_CLIMITS

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

#if defined (__SUNPRO_CC) && ((__SUNPRO_CC == 0x500) && (__SUNPRO_CC_COMPAT > 4))
#  include </usr/include/limits.h>
#elif defined (_STLP_USE_NEW_C_HEADERS)
#  if defined (_STLP_HAS_INCLUDE_NEXT)
#    include_next <climits>
#  else
#    include _STLP_NATIVE_CPP_C_HEADER(climits)
#  endif
#else
#  if defined (__BORLANDC__)
#    if defined (_STLP_HAS_INCLUDE_NEXT)
#      include_next <limits.h>
#    else
#      include _STLP_NATIVE_C_HEADER(limits.h)
#    endif
#  else
#    include <limits.h>
#  endif
#endif

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

#endif /* _STLP_CLIMITS */

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