// -*- C++ -*-
/***************************************************************************
 *
 * cfloat - C++ Standard library interface to the ANSI C header float.h
 *
 * $Id$
 *
 ***************************************************************************
 *
 * Copyright (c) 1994-2005 Quovadx,  Inc., acting through its  Rogue Wave
 * Software division. Licensed 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.
 * 
 **************************************************************************/

#include <rw/_defs.h>

#ifndef _RWSTD_NO_PURE_C_HEADERS
#  include <ansi/_cfloat.h>
#else

#ifndef _RWSTD_NO_DEPRECATED_C_HEADERS

#ifndef _RWSTD_NAMESPACE_STD_OPEN
#define _RWSTD_NAMESPACE_STD_OPEN 4

_RWSTD_NAMESPACE (std) { 

#endif   // _RWSTD_NAMESPACE_STD_OPEN


#include _RWSTD_ANSI_C_FLOAT_H


#if _RWSTD_NAMESPACE_STD_OPEN == 4
#  undef _RWSTD_NAMESPACE_STD_OPEN

}   // namespace std

#endif   // _RWSTD_NAMESPACE_STD_OPEN == 4

#else   // if defined (_RWSTD_NO_DEPRECATED_C_HEADERS)

#  ifndef _RWSTD_CFLOAT_INCLUDED
#  define _RWSTD_CFLOAT_INCLUDED

#include _RWSTD_ANSI_C_FLOAT_H

#  endif   // _RWSTD_CFLOAT_INCLUDED

#endif   // _RWSTD_NO_DEPRECATED_C_HEADERS

#  if defined (__EDG__) && defined (__linux__) && !defined (__INTEL_COMPILER)

     // avoid relying on dubious gcc extensions
#    undef LDBL_MIN
#    undef LDBL_MAX
#    define LDBL_MIN _RWSTD_LDBL_MIN
#    define LDBL_MAX _RWSTD_LDBL_MAX

#  endif   // __EDG__ && __linux__ && !__INTEL_COMPILER

#endif   // _RWSTD_NO_PURE_C_HEADERS
