/***************************************************************************
 *
 * _config.h - Compiler and C library configuration definitions
 *
 * This is an internal header file used to implement the C++ Standard
 * Library. It should never be #included directly by a program.
 *
 * $Id$
 *
 ***************************************************************************
 * 
 * Licensed to the Apache Software  Foundation (ASF) under one or more
 * contributor  license agreements.  See  the NOTICE  file distributed
 * with  this  work  for  additional information  regarding  copyright
 * ownership.   The ASF  licenses this  file to  you 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.
 *
 * Copyright 1994-2006 Rogue Wave Software.
 * 
 **************************************************************************/

#ifndef _RWSTD_RW_CONFIG_H_INCLUDED
#define _RWSTD_RW_CONFIG_H_INCLUDED

// include generated configuration header
#include <config.h>

/*** library version numbers and ids **************************************/

#define _RWSTD_VER 0x04020000
//                    | | | |
//                   MMmmuupp
//                    | | | |
//                    | | | +--- pp = patch release number
//                    | | +----- uu = micro release number
//                    | +------- mm = minor release number
//                    +--------- MM = major release number

// library version string (patch number included only if non-zero)
#define _RWSTD_VER_STR   "4.2.0"

// library version numbers
#define _RWSTD_VER_MAJOR ((_RWSTD_VER >> 24) & 0xff)
#define _RWSTD_VER_MINOR ((_RWSTD_VER >> 16) & 0xff)
#define _RWSTD_VER_MICRO ((_RWSTD_VER >>  8) & 0xff)
#define _RWSTD_VER_PATCH (_RWSTD_VER & 0xff)

// Two libraries are Source Compatible if they have the same major
// release number. Libraries whose major release numbers differ may
// or may not be source compatible.
// Two libraries are Binary Compatible (symbol-wise and functionally)
// if have the same major and minor release numbers. Libraries whose
// major and minor release numbers differ may or may not be binary
// compatible.

/**************************************************************************
 * OVERRIDES FOR CONFIGURATION MACROS                                     *
 **************************************************************************/

#if defined (_RWSTD_NO_EXTENSIONS) && !defined (_RWSTD_STRICT_ANSI)
#  define _RWSTD_STRICT_ANSI
#endif   // _RWSTD_NO_EXTENSIONS && !_RWSTD_STRICT_ANSI


// -D _REENTRANT or any one of the other thread safety macros
// used in the conditional below turns on thread safety features
#if    defined (_REENTRANT)             \
    || defined (_THREAD_SAFE)           \
    || defined (_RWSTD_MULTI_THREAD)    \
    || defined (_RWSTD_DCE_THREADS)     \
    || defined (_RWSTD_SOLARIS_THREADS) \
    || defined (_RWSTD_POSIX_THREADS)
#  ifndef _RWSTD_REENTRANT
#    define _RWSTD_REENTRANT
#  endif   // _RWSTD_REENTRANT
#endif

/**************************************************************************
 * ARCHITECTURE-SPECIFIC OVERRIDES                                        *
 **************************************************************************/

/*** Alpha ****************************************************************/

#if defined (__alpha__) || defined (__alpha)

   // this applies to both Tru64 UNIX and Linux on Alpha
#  undef _RWSTD_IS_IEC559

#  ifdef _IEEE_FP
     // IEEE 754/IEC 559 conforming environment enabled
     // using the Compaq C++ -ieee compiler command line
     // option or with gcc -mieee
#    define _RWSTD_IS_IEC559   true
#  else
     // OSF1 (Tru64 UNIX) Compaq C++ without -ieee
#    define _RWSTD_IS_IEC559   false
#  endif

#endif   // Alpha

/*** Itanium (IA64) *******************************************************/

#if defined (__ia64__) || defined (__ia64)
#endif   // IA64

/*** MIPS *****************************************************************/

#if defined (__mips__) || defined (__mips)
#endif   // MIPS

/*** PA-RISC **************************************************************/

#if defined (__parisc__) || defined (__parsisc)
#endif   // PA RISC

/*** PowerPC **************************************************************/

#if defined (__powerpc__) || defined (__powerpc)
#endif   // PowerPC

/*** SPARC ****************************************************************/

#if defined (__sparc__) || defined (__sparc)
#endif   // SPARC

/**************************************************************************
 * COMPILER-SPECIFIC OVERRIDES                                            * 
 **************************************************************************/

/*** Apogee C++ ***********************************************************/

// Apogee C++ uses an EDG front end but doesn't define __EDG__

#ifdef __APOGEE__
#endif   // __APOGEE__

/*** IBM VAC++ ************************************************************/

#if defined (__IBMCPP__)
#  include "_config-xlc.h"
#endif   // __IBMCPP___

/*** Compaq C++ ***********************************************************/

// Compaq C++ uses an EDG front end and #defines __EDG__

#ifdef __DECCXX
#  include "_config-deccxx.h"
#endif // __DECCXX

/*** EDG eccp (this is the vanilla EDG front end) *************************/

// NOTE: the __EDG__ macro is #defined by most EDG-based compilers

#if    defined (__EDG__)                \
    && !defined (__DECCXX)              \
    && !defined (__HP_aCC)              \
    && !defined (__INTEL_COMPILER)      \
    && !defined (_SGI_COMPILER_VERSION)
   // FIXME: make this more robust by detecting the EDG eccp demo
   // during library configuration (and avoid relying on compiler
   // specific macros)
#  include "_config-eccp.h"
#endif   // __EDG__

/*** GCC ******************************************************************/

#ifdef __GNUG__
#  include "_config-gcc.h"
#else   // if !defined (__GNUG__)
#  define _RWSTD_GNUC_ATTRIBUTE(ignore)
#endif   // __GNUG__

/*** HP aCC ***************************************************************/

#ifdef __HP_aCC
#  include "_config-acc.h"
#endif   // __HP_aCC

/*** Intel C++ ************************************************************/

#if defined (__INTEL_COMPILER)
#  include "_config-icc.h"
#endif   // __INTEL_COMPILER

/*** SGI MIPSpro **********************************************************/

// SGI MIPSpro uses an EDG front end; it may or may not #define __EDG__
// (starting with MIPSpro 7.4 the preprocessor does #define the macro
// along with _SGI_COMPILER_VERSION)

#ifdef _RWSTD_OS_IRIX64
   // if _SGI_COMPILER_VERSION is not #defined, assume MIPSpro
   // unless __GNUG__ is #defined
#  if defined (_SGI_COMPILER_VERSION) || !defined (__GNUG__)
#    include "_config-mipspro.h"
#  endif   // _SGI_COMPILER_VERSION || !__GNUG__
#endif   // _RWSTD_OS_IRIX64

/*** MSVC *****************************************************************/

#if defined (_MSC_VER) && !defined (__INTEL_COMPILER)
#  include "_config-msvc.h"
#endif   // _MSC_VER && !__INTEL_COMPILER

/*** Siemens CDS++ ********************************************************/

#ifdef SNI
#  define _RWSTD_NO_PTR_VALUE_TEMPLATE_OVERLOAD
#  if __STDC__ == 1
#    ifndef _RWSTD_STRICT_ANSI
#      define _RWSTD_STRICT_ANSI
#    endif
#  endif

#  if defined __SNI_THREAD_SUPPORT
#    define _RWSTD_NO_MBRTOWC
#    define _RWSTD_NO_WCRTOMB
#  endif
#endif   // SNI

/*** SunPro aka Sun C++ ***************************************************/

#ifdef __SUNPRO_CC
#  include "_config-sunpro.h"
#endif   // __SUNPRO_CC

/**************************************************************************
 * OPERATING SYSTEM-SPECIFIC OVERRIDES                                    * 
 **************************************************************************/

/*** OS2 ******************************************************************/

#ifdef __OS2__
#  define _RWSTD_NO_STATIC_MUTEX_INIT
#endif   // __OS2__

/*** Win{32,64} ***********************************************************/

#if defined (_WIN32) || defined (_WIN64)
#  define _RWSTD_NO_STATIC_MUTEX_INIT
#  define _RWSTD_PATH_SEP '\\'
#endif   // _WIN32

#ifndef _RWSTD_PATH_SEP
#  define _RWSTD_PATH_SEP      '/'
#endif   // _RWSTD_PATH_SEP

/*** Non-10646 platforms **************************************************/

#if !defined (_RWSTD_OS_LINUX) && !defined (_WIN32)
   // Linux glibc and Windows use ISO 10646 (Unicode)
   // as the internal wchar_t encoding in all locales
#  ifndef _RWSTD_NO_ISO_10646_WCHAR_T
#    define _RWSTD_NO_ISO_10646_WCHAR_T
#  endif   // _RWSTD_NO_ISO_10646_WCHAR_T
#endif   // !Linux && !Windoze

/********************** Threads *******************************************/

#ifdef _RWSTD_REENTRANT
#  if    !defined (_RWSTD_DCE_THREADS)   \
      && !defined (_RWSTD_DEC_THREADS)   \
      && !defined (_RWSTD_POSIX_THREADS) \
      && !defined (_RWSTD_SOLARIS_THREADS)

   // default to POSIX threads except on Win32 or Win64

#    if !defined (_WIN32) && !defined (_WIN64)
#      define _RWSTD_POSIX_THREADS
#    endif   // _WIN{32,64}
#  endif   // _RWSTD_*_THREADS
#endif   // _RWSTD_REENTRANT

#ifdef _RWSTD_DCE_THREADS
#  define _RWSTD_NO_STATIC_MUTEX_INIT
#endif   // _RWSTD_DCE_THREADS

/********************** Miscellaneous *************************************/

// g++ cannot inline functions that take a variable number of arguments
// or functions that contain static (local) variables
#if !defined (__GNUG__) || __GNUG__ > 2 || __GNUG_MINOR__ > 96
#  define _INLINE_VARARGS      inline
#  if !defined (__HP_aCC) || __HP_aCC > 012100
     // working around a known aCC 1.21 bug
#    define _INLINE_WITH_STATICS inline
#  endif   // !__HP_aCC || __HP_aCC > 012100
#endif   // !__GNUG__ || __GNUG__ > 2 || __GNUG_MINOR__ > 96

#if    defined (_RWSTD_NO_COLLAPSE_TEMPLATE_STATICS)   \
    || defined (_RWSTD_NO_STATIC_TEMPLATE_MEMBER_INIT)
   // static mutex initialization depends on the compiler's (and the
   // linker's in gcc's case) ability to correctly handle explicitly
   // initialized static members of class templates
#  ifndef _RWSTD_NO_STATIC_MUTEX_INIT
#    define _RWSTD_NO_STATIC_MUTEX_INIT
#  endif
#endif   // NO_COLLAPSE_TEMPLATE_STATICS || NO_STATIC_TEMPLATE_MEMBER_INIT

/********************** Environment ***************************************/

// pa-risc2 atomic ops related
#if defined(_PA_RISC2_0) && defined(__HP_aCC)
#  define _RWSTD_STRING_REF_OFFSET             _RWSTD_INT_MAX
#endif


#if defined (_RWSTD_NO_WCHAR_T) && !defined (_RWSTD_NO_NATIVE_WCHAR_T)
#  define _RWSTD_NO_NATIVE_WCHAR_T
#endif


#ifndef _RWSTD_NO_STL_SPECIALIZATION
// #ifdef _RWSTD_NO_CLASS_PARTIAL_SPEC
// disable partial specialization for void* of STL sequences
#  define _RWSTD_NO_STL_SPECIALIZATION
// #endif   // _RWSTD_NO_CLASS_PARTIAL_SPEC
#endif   // _RWSTD_NO_STL_SPECIALIZATION

// 
// Macro for path to the ANSI 'C' headers 
// Must be set specifically for each platform when the
// C++ wrappers for 'C' headers are used.
//
#define _RWSTD_ANSIC(x) </usr/include/x>

// the default long double printf format prefix is "L" (unless #defined above)
#ifndef _RWSTD_LDBL_PRINTF_PREFIX
#  define _RWSTD_LDBL_PRINTF_PREFIX   "L"
#endif   // _RWSTD_LDBL_PRINTF_PREFIX

// the default long double scanf format prefix is "L" (unless #defined above)
#ifndef _RWSTD_LDBL_SCANF_PREFIX
#  define _RWSTD_LDBL_SCANF_PREFIX   "L"
#endif   // _RWSTD_LDBL_SCANF_PREFIX

// the default expansion of dllimport is empty (unless #defined above)
#ifndef _RWSTD_DLLIMPORT
#  define _RWSTD_DLLIMPORT   /* empty */
#endif   // _RWSTD_DLLIMPORT

// the default name of a libc symbol is itself (unless #defined above)
#ifndef _RWSTD_LIBC_SYM
#  define _RWSTD_LIBC_SYM(name)   name
#endif   // _RWSTD_LIBC_SYM

/********************** Library Option Dependencies ***********************/

/*
 * The following macro sets the default size of file stream internal buffers
 */

#ifndef _RWSTD_DEFAULT_BUFSIZE         // specified on command line?
#  define _RWSTD_DEFAULT_BUFSIZE   512
#endif

#ifndef _RWSTD_NO_LONG_LONG
   // Win32/64 #defines _RWSTD_LONG_LONG to __int64
#  ifndef _RWSTD_LONG_LONG
#    define _RWSTD_LONG_LONG long long
#  endif   // _RWSTD_LONG_LONG
#endif   // _RWSTD_NO_LONG_LONG


// disable all extensions in strict ANSI mode
#ifdef _RWSTD_STRICT_ANSI
   // long long is not in ANSI C++ yet (although it is in ANSI C99)
#  undef  _RWSTD_LONG_LONG
#  define _RWSTD_NO_EXT_FILEBUF
#  define _RWSTD_NO_EXT_VECTOR_BOOL_REF_OPS
#  define _RWSTD_NO_EXT_LOCALE
#  define _RWSTD_NO_EXT_DEEP_STRING_COPY
   // no support for exceptions derived from ios_base::failure
#  define _RWSTD_NO_EXT_FAILURE
   // no support for writing out integral values in base 2
#  define _RWSTD_NO_EXT_BIN_IO
   // disable safe conversion of iostream objects only to bool
   // (and enable conversion to void*)
#  define _RWSTD_NO_EXT_IOS_SAFE_CONVERSION
   // std::setbase manipulator accepts only required bases (i.e.,
   // 0, 8, 10, 16, and 2 unless _RWSTD_NO_EXT_BIN_IO is also #defined)
#  define _RWSTD_NO_EXT_SETBASE
   // disable the str(const char*) overload in stringbuf and stringstreams
#  define _RWSTD_NO_EXT_STRINGBUF_STR
   // no support for member overloads on all fundamental types
#  define _RWSTD_NO_EXT_NUM_GET
#  define _RWSTD_NO_EXT_NUM_PUT
   // no support for extended member overloads
#  define _RWSTD_NO_EXT_TIME_GET
   // no support for optional mt-locking in iostreams
#  define _RWSTD_NO_EXT_REENTRANT_IO
   // allocator<const T> not possible
#  define _RWSTD_NO_EXT_CONST_ALLOCATOR
   // missing operator new or delete not defined
#  define _RWSTD_NO_EXT_OPERATOR_NEW
   // void std::count<>() not defined (except when necessary)
#  define _RWSTD_NO_EXT_VOID_COUNT
   // void std::distance() not defined
#  define _RWSTD_NO_EXT_VOID_DISTANCE

   // calling width(0) only when insertion succeeds
#  define _RWSTD_NO_EXT_KEEP_WIDTH_ON_FAILURE

   // deque::assign() clears container before assignment
   // rather than assigning over existing elements
#  define _RWSTD_NO_EXT_DEQUE_ASSIGN_IN_PLACE
   // deque::insert() creates a copy of the container
   // to insert into and on success swaps the copy
#  define _RWSTD_NO_EXT_DEQUE_INSERT_IN_PLACE

   // primary templates not defined
#  define _RWSTD_NO_EXT_CHAR_TRAITS_PRIMARY
#  define _RWSTD_NO_EXT_CODECVT_PRIMARY
#  define _RWSTD_NO_EXT_COLLATE_PRIMARY
#  define _RWSTD_NO_EXT_CTYPE_PRIMARY
   // random number generator used by algorithms such as random_shuffle
   // utilizes the entire range of size_t and will not generate the same
   // sequence of values between ILP32 and LP64 (or LLP64)
#  define _RWSTD_NO_EXT_PORTABLE_RANDOM_SEQUENCE

   // disable the implementation of LWG issue 559 (numeric_limits
   // limits specialized on cv-qualified scalar types)
#  define _RWSTD_NO_EXT_CV_QUALIFIED_LIMITS

// commented out macros not implemented yet
// #  define _RWSTD_NO_EXT_MONEYPUNCT_PRIMARY
// #  define _RWSTD_NO_EXT_NUMPUNCT_PRIMARY
// #  define _RWSTD_NO_EXT_TIME_GET_PRIMARY
// #  define _RWSTD_NO_EXT_TIME_PUT_PRIMARY
// #  define _RWSTD_NO_EXT_MESSAGES_PRIMARY

#endif   // _RWSTD_STRICT_ANSI

   // macros that are enabled in library source files
#ifdef _RWSTD_LIB_SRC
   // don't instantiate templates in library source code
   //  (but see _RWSTD_INSTANTIATE_TEMPLATES macro below) 
#  define _RWSTD_NO_TEMPLATE_DEFINITIONS
   // don't provide definitions of operator new in library 
#  define _RWSTD_NO_EXT_OPERATOR_NEW
#endif  // _RWSTD_LIB_SRC

#if _MSC_VER <= 1300
   // msvc60 expects a definition to be provided for all variants
   // of operator new/delete that are declared. This means that either
   // the operators must be defined - preventing redefinition in user code -
   // or that they must be undeclared - preventing them from being called
   // directly in user code. We have chosen the former option.
#  undef _RWSTD_NO_EXT_OPERATOR_NEW
#endif  // _MSC_VER

#ifdef _RWSTD_INSTANTIATE_TEMPLATES
   // instantiate templates (this macro is defined at the top of each
   // library source file (.cpp file) that explicitly instantiates class
   // or function templates using the _RWSTD_INSTANTIATE_N() macros
#  undef _RWSTD_NO_TEMPLATE_DEFINITIONS
#endif


#endif   // _RWSTD_RW_CONFIG_H_INCLUDED
