home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Internet 2000 May / MICD_2000_05.iso / CBuilder5 / INSTALL / DATA1.CAB / Program_Built_Files / Include / stdcomp.h < prev    next >
C/C++ Source or Header  |  2000-02-01  |  43KB  |  1,457 lines

  1. #ifndef __STD_RWCOMPILER_H__
  2. #define __STD_RWCOMPILER_H__ 1
  3.  
  4. #ifndef __cplusplus
  5. #error Must use C++ for STDCOMP.H
  6. #endif
  7.  
  8. /***************************************************************************
  9.  *
  10.  * Compiler and system related foibles and directives
  11.  *
  12.  ***************************************************************************
  13.  *
  14.  * Copyright (c) 1994-1999 Rogue Wave Software, Inc.  All Rights Reserved.
  15.  *
  16.  * This computer software is owned by Rogue Wave Software, Inc. and is
  17.  * protected by U.S. copyright laws and other laws and by international
  18.  * treaties.  This computer software is furnished by Rogue Wave Software,
  19.  * Inc. pursuant to a written license agreement and may be used, copied,
  20.  * transmitted, and stored only in accordance with the terms of such
  21.  * license and with the inclusion of the above copyright notice.  This
  22.  * computer software or any other copies thereof may not be provided or
  23.  * otherwise made available to any other person.
  24.  *
  25.  * U.S. Government Restricted Rights.  This computer software is provided
  26.  * with Restricted Rights.  Use, duplication, or disclosure by the
  27.  * Government is subject to restrictions as set forth in subparagraph (c)
  28.  * (1) (ii) of The Rights in Technical Data and Computer Software clause
  29.  * at DFARS 252.227-7013 or subparagraphs (c) (1) and (2) of the
  30.  * Commercial Computer Software û Restricted Rights at 48 CFR 52.227-19,
  31.  * as applicable.  Manufacturer is Rogue Wave Software, Inc., 5500
  32.  * Flatiron Parkway, Boulder, Colorado 80301 USA.
  33.  *
  34.  **************************************************************************/
  35.  
  36. /****************************************************************
  37.  ****************************************************************
  38.  *                                *
  39.  *        U S E R   T U N A B L E   S E C T I O N        *
  40.  *                                *
  41.  ****************************************************************
  42.  ****************************************************************/
  43. // Library version number
  44. // 
  45. #define _RWSTD_VER 0x020101
  46. //                   AABBCC
  47. //                    | | |
  48. //                    | | +-- CC = Maintenance number
  49. //                    | +---- BB = Minor Release number
  50. //                    +------ AA = Major Release number
  51. //
  52. // Note that former version numbers were of the form: 0xAABC
  53. // i.e., they showed only one digit each for Minor and Maintenance.
  54. // e.g.  "0x0203" would be "0x020003" in the new, extended scheme.
  55.  
  56. /*
  57.  * This section has various preprocessor constants that can
  58.  * be set to reflect the properties of your compiler.  For most
  59.  * compilers (particularly, MS-DOS compilers) there is no need
  60.  * to do anything --- most settings can be autodetected.
  61.  *
  62.  * For many Unix compilers you may have to tune the settings below.
  63.  * This is most easily done by running the "config" shell script
  64.  * which will try various test programs to discover the properties
  65.  * of your compiler.
  66.  *
  67.  *       THIS IS FAR EASIER THAN SETTING THESE BY HAND!
  68.  */
  69.  
  70. /*
  71.  *                   AT&T "CFRONT" USERS
  72.  */
  73. /* 
  74.  * Most compilers have a built in "manifest constant".
  75.  * For the following compilers you must supply one by uncommenting
  76.  * an appropriate line:
  77.  *
  78.  *   AT&T cfront V2.X:       __ATT2__
  79.  *   AT&T cfront V3.0:       __ATT3__
  80.  */
  81.  
  82. /* #define __ATT2__ 1 */
  83. /* #define __ATT3__ 1 */
  84.  
  85. /**
  86.  **                     *** ALL USERS ***
  87.  **/
  88. #define _RWSTD_NOMSG    0x00
  89. #define _RWSTD_CATGETS  0x01
  90. #define _RWSTD_GETTEXT  0x02
  91. #define _RWSTD_DGETTEXT 0x03
  92.  
  93. /*
  94.  * Set _RWSTD_MESSAGE to the type of messaging facility you want:
  95.  *   _RWSTD_NOMSG     No messaging facility
  96.  *   _RWSTD_CATGETS  Use catgets()
  97.  *   _RWSTD_GETTEXT  Use gettext()
  98.  *   _RWSTD_DGETTEXT Use dgettext()
  99.  */
  100.  
  101. #define _RWSTD_MESSAGE _RWSTD_NOMSG
  102. #if !defined( __TURBOC__) && !defined(_MSC_VER) && !defined(_OS2)
  103.  
  104. /******************** OPTIONAL LIBRARY FEATURES********************/
  105. /*  turned off by default                                         */
  106.  
  107. /* Uncomment the following if you wish for bounds checking to be  
  108.  * performed for operator[] for deque and vector
  109.  */
  110.  
  111. /* #define _RWSTD_BOUNDS_CHECKING 1 */
  112.  
  113. /* Uncomment the following if you wish to use localized error messages
  114.  */
  115.  
  116. /* #define _RWSTD_LOCALIZED_ERRORS 1 */
  117. /******************** COMPILER WORD SIZES, ETC ********************/
  118.  
  119. /*
  120.  * Uncomment the following and set to the number of decimal digits
  121.  * of precision for type double.
  122.  * If you do nothing, the default will be 16.
  123.  */
  124.  
  125. /* #define _RWSTD_DEFAULT_PRECISION 16 */
  126. /*************** COMPILER QUIRKS AND LIMITATIONS ******************/
  127.  
  128. /*
  129.  * Uncomment the following if your compiler does not support
  130.  * exceptions.
  131.  */
  132.  
  133. /* #define _RWSTD_NO_EXCEPTIONS 1 */
  134.  
  135. /*
  136.  * Uncomment the following if your compiler does not support
  137.  * exceptions specifications.
  138.  */
  139.  
  140. /* #define _RWSTD_NO_EX_SPEC 1 */
  141. /*
  142.  * Uncomment the following if your compiler does not support
  143.  * throwing of exceptions from a shared library.
  144.  */
  145.  
  146. /* #define _RWSTD_NO_THROW_WITH_SHARED 1 */
  147.  
  148. /*************************** TEMPLATES **********************************/
  149.  
  150. /*
  151.  * Uncomment the following if your compiler does not instantiates only those
  152.  * functions, member functions, classes or member classes that are
  153.  * required; i.e. your compiler instantiates things that your program
  154.  * doesn't actually use.
  155.  */
  156.  
  157. /* #define _RWSTD_NO_STRICT_TEMPLATE_INSTANTIATE 1 */
  158.  
  159. /*
  160.  * Uncomment the following if your compiler does not allow an unused
  161.  * T *operator-> in a template<class T> when T is of non-class type.
  162.  */
  163.  
  164. /* #define _RWSTD_NO_NONCLASS_ARROW_RETURN 1 */
  165.  
  166. /*
  167.  * Uncomment the following if your compiler does not support the new syntax
  168.  * for functions that are templatized only on the return type, e.g.
  169.  *     template<class T> T func (void);  // Declare the function template
  170.  *     int my_int = func<int>();         // Call the function
  171.  */
  172.  
  173. /* #define _RWSTD_NO_TEMPLATE_ON_RETURN_TYPE 1 */
  174.  
  175. /*
  176.  * Uncomment the following if your compiler does template
  177.  * instantiation at compile time.
  178.  */
  179.  
  180. /* #define _RWSTD_COMPILE_INSTANTIATE 1 */
  181. /*************************** STRINGS ****************************/
  182.  
  183. /*
  184.  * Uncomment the following if your sprintf() does not
  185.  * return the size of the buffer as an int, as ANSI C requires.
  186.  */
  187.  
  188. /* #define _RWSTD_NO_ANSI_SPRINTF 1 */
  189. /*
  190.  * Uncomment the following if your compiler does not have the
  191.  * ANSI C function memmove().
  192.  */
  193.  
  194. /* #define _RWSTD_NO_MEMMOVE 1 */
  195.  
  196. /*
  197.  * Uncomment the following if your compiler's stdio.h does not define
  198.  * an fpos_t type.
  199.  */
  200.  
  201. /* #define _RWSTD_NO_FPOS_T 1 */
  202.  
  203. /*
  204.  * Uncomment the following if your compiler's stdlib.h does not provide
  205.  * an ldiv function.
  206.  */
  207.  
  208. /* #define _RWSTD_NO_LDIV 1 */
  209.  
  210. /*
  211.  * Uncomment the following if your compiler's <typeinfo> header does not
  212.  * define a bad_cast exception type.
  213.  */
  214.  
  215. /* #define _RWSTD_NO_BAD_CAST 1 */
  216.  
  217. /****************** INTERNATIONALIZATION ************************/
  218.  
  219. /*
  220.  * Uncomment the following if your compiler does not support
  221.  * wide characters strings (e.g., functions wslen(), etc.).
  222.  */
  223.  
  224. /* #define _RWSTD_NO_WSTR 1 */
  225.  
  226. /*
  227.  * Uncomment the following if your compiler's support for
  228.  * wide character strings does not include support for any
  229.  * of the following: wctomb(), mbtowc(), iswspace(), wmemset(), 
  230.  * wmemchr() and wcsstr().
  231.  */
  232.  
  233. /* #define _RWSTD_NOT_ALL_WSTR_CFUNCTIONS 1 */
  234.  
  235. /*
  236.  * Uncomment the following your compiler does not define type wint_t
  237.  * in either wchar.h or wctype.h.
  238.  */
  239.  
  240. /* #define _RWSTD_NO_WINT_TYPE 1 */
  241.  
  242. /*
  243.  * Uncomment the following if your compiler does not provide wide
  244.  * character functions swscanf and swprintf.
  245.  */
  246.  
  247. /* #define _RWSTD_NO_SWPRINTF 1 */
  248.  
  249. /*
  250.  * Uncomment the following if your compiler cannot distinguish wchar_t from
  251.  * other integer types in template argument lists.
  252.  */
  253.  
  254. /* #define _RWSTD_NO_OVERLOAD_WCHAR 1 */
  255. /*
  256.  * Uncomment the following if your compiler does not support
  257.  * the ANSI C locale facility fully, or if it does not support
  258.  * it at all (in particular, uncomment if setlocale(), strxform(),
  259.  * or strcoll() are not present or don't work).
  260.  */
  261.  
  262. /* #define _RWSTD_NO_LOCALE 1 */
  263.  
  264.  
  265. /*
  266.  * Uncomment the following if your compiler does not have
  267.  * the %C directive to strftime().
  268.  */
  269.  
  270. /* #define _RWSTD_NO_STRFTIME_CAPC 1 */
  271. /************************** TIME ********************************/
  272.  
  273. /*
  274.  * Uncomment the following if your compiler does not have global
  275.  * variables "_daylight", "_timezone", and "_tzname", or corresponding
  276.  * variables without a leading underscore (generally
  277.  * this is true only for pure Berkeley systems).
  278.  */
  279.  
  280. /* #define _RWSTD_NO_GLOBAL_TZ 1 */
  281. /*
  282.  * Uncomment the following if your system supplies a global variable
  283.  * named "daylight" instead of the nominally more correct "_daylight".
  284.  */
  285.  
  286. /* #define _RWSTD_NO_LEADING_UNDERSCORE 1 */
  287. /*
  288.  * If your system does not have global variables "daylight" and
  289.  * "timezone" (see directive immediately above) and does not have
  290.  * the Berkeley function gettimeofday() either, then uncomment
  291.  * the following:
  292.  */
  293.  
  294. /* #define _RWSTD_NO_GETTIMEOFDAY 1 */
  295. /*
  296.  * If the struct tm defined in your <time.h> has extra member data
  297.  * "tm_zone" and "tm_gmtoff" (this is true for SunOs 4.X), then you
  298.  * should uncomment the following:
  299.  */
  300.  
  301. /* #define _RWSTD_STRUCT_TM_TZ 1 */
  302. /* Uncomment the following if you have a Solaris platform that
  303.  * supports threads.  (We choose this if you have it, in
  304.  * preference to other thread packages. You may prefer a
  305.  * different package.)
  306.  */
  307.  
  308. /* #define _RWSTD_SOLARIS_THREADS 1 */
  309.  
  310. /* Uncomment the following if you have a threads package which
  311.  * meets an early Posix draft, and you don't have Solaris threads.
  312.  */
  313.  
  314. /* #define _RWSTD_POSIX_THREADS 1 */
  315.  
  316. /* As above, if you have threads which meet
  317.  * the Posix Draft 10 threads description. If you define this,
  318.  * then you must also define RW_POSIX_THREADS
  319.  */
  320.  
  321. /* #define _RWSTD_POSIX_D10_THREADS 1 */
  322.  
  323. /* Uncomment the following if pthread_mutexattr_default is
  324.  * provided by your threads package. The posix standard (draft 10)
  325.  * does not require a pthreads package to provide this value.
  326.  */
  327.  
  328. /* #define _RWSTD_MUTEXATTR_DEFAULT 1 */
  329.  
  330. /* Uncomment the following if you have no threads, or your package doesn't
  331.  * meet our expectations for header and function names.
  332.  */
  333.  
  334. /* #define _RWSTD_NO_THREADS 1 */
  335. /************************** STANDARD LIBRARY ****************************/
  336.  
  337. /*
  338.  * Uncomment the following if your compiler does not support the bool type.
  339.  * This means that bool is not a unique type.
  340.  */
  341.  
  342. /* #define _RWSTD_NO_BOOL 1 */
  343.  
  344. /*
  345.  * Uncomment the following if your compiler does not support simple
  346.  * default templates. e.g:
  347.  * template<class T = int> ...
  348.  */
  349.  
  350. /* #define _RWSTD_NO_SIMPLE_DEFAULT_TEMPLATES 1 */
  351.  
  352. /*
  353.  * Uncomment the following if your compiler does not support complex
  354.  * default templates. e.g:
  355.  * template<class T = foo<T> > ...
  356.  */
  357.  
  358. /* #define _RWSTD_NO_COMPLEX_DEFAULT_TEMPLATES 1 */
  359.  
  360. /*
  361.  * Uncomment the following if your compiler doesn't support ~T() 
  362.  * where T is a builtin.
  363.  */
  364.  
  365. /* #define _RWSTD_NO_DESTROY_BUILTIN 1 */
  366.  
  367. /*
  368.  * Uncomment the following if your compiler doesn't support ~T()
  369.  * where T is a non-builtin.
  370.  */
  371.  
  372. /* #define _RWSTD_NO_DESTROY_NONBUILTIN 1 */
  373.  
  374. /*
  375.  * If your compiler does not support complicated exceptions, such as
  376.  * throwing a domain_error exception, then uncomment the following:
  377.  */
  378.  
  379. /* #define _RWSTD_NO_COMPLICATED_EXCEPTIONS 1 */
  380.  
  381. /*
  382.  * Uncomment the following if your compiler cannot handle nested
  383.  * templates, or if you have to define the body of a class within
  384.  * the template (mostly sun compilers!)
  385.  */
  386.  
  387. /* #define _RWSTD_NO_NESTING_TEMPLATES 1 */
  388.  
  389. /*
  390.  * If your compiler does not support long double operators in iostreams, then
  391.  * uncomment the following:
  392.  */
  393.  
  394. /* #define _RWSTD_NO_STREAM_LONG_DOUBLE 1 */
  395.  
  396. /*
  397.  * Uncomment the following if your compiler does not support the
  398.  * _MUTABLE keyword
  399.  */
  400.  
  401. /* #define _RWSTD_NO_MUTABLE 1 */
  402.  
  403. /*
  404.  * If your compiler does not support namespaces, uncomment the following
  405.  */
  406.  
  407. /* #define _RWSTD_NO_NAMESPACE 1 */
  408.  
  409. /*
  410.  * Uncomment the following if your compiler does not support
  411.  * member template functions:
  412.  * template<class T> class C {
  413.  *  template<class F> void foo();
  414.  * };
  415.  */
  416.  
  417. /* #define _RWSTD_NO_MEMBER_TEMPLATES 1 */
  418. /*
  419.  * Uncomment the following if your compiler does not support
  420.  * member template classes:
  421.  * class C {
  422.  *  template <class F> class N {};
  423.  * };
  424.  */
  425.  
  426. /* #define _RWSTD_NO_MEM_CLASS_TEMPLATES 1 */
  427.  
  428. /*
  429.  * Uncomment the following if your compiler does not support declaring a
  430.  * template function to be a friend:
  431.  *   class C {
  432.  *     template <class T> friend void foo (T);
  433.  *   };
  434.  */
  435.  
  436. /* #define _RWSTD_NO_FRIEND_TEMPLATES 1 */
  437.  
  438. /*
  439.  * If nontype-args are not allowed in function declarations, then uncomment
  440.  * the following.  template<int i> void foo(char f[10][i])
  441.  */
  442.  
  443. /* #define _RWSTD_NO_NONTYPE_ARGS 1 */
  444.  
  445. /*
  446.  * If simple static initialization of const member variables is not allowed,
  447.  * uncomment the following
  448.  */
  449.  
  450. /* #define _RWSTD_NO_STI_SIMPLE 1 */
  451.  
  452. /*
  453.  * If simple static initialization of const member variables in a
  454.  * template is not allowed, then uncomment the following
  455.  */
  456.  
  457. /* #define _RWSTD_NO_STI_TEMPLATE 1 */
  458.  
  459. /*
  460.  * If FLT_ROUNDS is a constant and not a variable,
  461.  * uncomment the following
  462.  */
  463.  
  464. /* #define _RWSTD_FLT_ROUNDS_IS_CONSTANT 1 */
  465.  
  466. /*
  467.  * If nested static template variables cannot be defined outside the
  468.  * class, uncomment this.
  469. */
  470.  
  471. /* #define _RWSTD_NO_STATIC_DEF 1 */
  472.  
  473. /*
  474.  * If static template variable definitions do not require initializers,
  475.  * uncomment this.
  476.  */
  477.  
  478. /* #define _RWSTD_NO_STATIC_DEF2 1 */
  479. /*
  480.  * If templatized static data members do not work correctly, uncomment this.
  481.  */
  482.  
  483. /* #define _RWSTD_NO_STATIC_DEF3 1 */
  484. /*
  485.  * Are long mangled names handled correctly by your compiler/linker?
  486.  * If not, uncomment the following
  487.  */
  488.  
  489. /* #define _RWSTD_NO_LONG_NAME 1 */
  490.  
  491. /*
  492.  * Are complicated typedefs handled by your compiler?
  493.  * If not, uncomment the following
  494.  */
  495.  
  496. /* #define _RWSTD_NO_COMPLICATED_TYPEDEF 1 */
  497.  
  498. /*
  499.  * Are embedded typedefs supported?
  500.  * If not, uncomment the following
  501. */
  502.  
  503. /* #define _RWSTD_NO_EMBEDDED_TYPEDEF 1 */
  504.  
  505. /*
  506.  * If your compiler does not support template template classes, then
  507.  * uncomment the following:
  508.  * template<class T, template<class U> allocator>
  509.  */
  510.  
  511. /* #define _RWSTD_NO_TEMPLATE_TEMPLATE 1 */
  512.  
  513. /*
  514.  * If your compiler does not have a wchar_t type, uncomment
  515.  * the following
  516.  */
  517.  
  518. /* #define _RWSTD_NO_WIDE_CHAR 1 */
  519.  
  520. /*
  521.  * If your compiler does not have a wchar.h header file, uncomment
  522.  * the following
  523.  */
  524.  
  525. /* #define _RWSTD_NO_WCHAR_H 1 */
  526.  
  527. /*
  528.  * If your compiler does not handle typedef scoping correctly,
  529.  * then uncomment the following.
  530.  */
  531.  
  532. /* #define _RWSTD_NO_TYPEDEF_OVERLOAD 1 */
  533.  
  534. /*
  535.  * If your compiler does not function match on template base classes
  536.  * correctly, then uncomment the following.
  537.  */
  538.  
  539. /* #define _RWSTD_NO_BASE_CLASS_MATCH 1 */
  540.  
  541. /*
  542.  * If your compiler does not handle forward specializations
  543.  * correctly, then uncomment the following.
  544.  */
  545.  
  546. /* #define _RWSTD_NO_FORWARD_SPECIALIZATIONS 1 */
  547.  
  548. /*
  549.  * If your compiler does not handle template types as return types 
  550.  * uncomment the following.
  551.  */
  552.  
  553. /* #define _RWSTD_NO_RET_TEMPLATE 1 */
  554.  
  555. /*
  556.  * If your compiler does not understand explicit constructors, uncomment
  557.  * the following.
  558.  */
  559.  
  560. /* #define _RWSTD_NO_EXPLICIT 1 */
  561.  
  562. /*
  563.  * If your compiler does not understand explicit argument qualification, 
  564.  * uncomment the following.
  565.  */
  566.  
  567. /* #define _RWSTD_NO_EXPLICIT_ARG 1 */
  568. /*
  569.  * If your compiler does not understand the typename keyword, uncomment
  570.  * the following.
  571.  */
  572.  
  573. /* #define _RWSTD_NO_TYPENAME 1 */
  574.  
  575. /*
  576.  * Does your compiler instantiate typedefs of itself correctly?  
  577.  * If not, uncomment the following
  578.  */
  579.  
  580. /* #define _RWSTD_NO_TYPEDEF_INST 1 */
  581.  
  582. /*
  583.  * Does your compiler instantiate templates with const types correctly?  
  584.  * If not, uncomment the following
  585.  */
  586.  
  587. /* #define _RWSTD_NO_CONST_INST 1 */
  588.  
  589. /*
  590.  * Does your compiler assume trait typedefs are int? If not, uncomment
  591.  * the following
  592.  */
  593.  
  594. /* #define _RWSTD_NO_INT_TYPEDEF 1 */
  595.  
  596. /*
  597.  * Does your compiler give an ambiguity error on allocate()? If so, uncomment
  598.  * the following
  599.  */
  600.  
  601. /* #define _RWSTD_NO_ARG_MATCH 1 */
  602.  
  603. /*
  604.  * Does your compiler supply the new C++-style C headers?  If not,
  605.  * uncomment the following
  606.  */
  607.  
  608. /* #define _RWSTD_NO_NEW_HEADER 1 */
  609. /*
  610.  * does your compiler provide a placement new definition?  If no,
  611.  * uncomment the following
  612.  */
  613.  
  614. /* #define _RWSTD_NO_NEW_DECL 1 */
  615.  
  616. /*
  617.  * does your compiler inherit typedefs in templates correctly?  If no,
  618.  * uncomment the following
  619.  */
  620.  
  621. /* #define _RWSTD_NO_INHERITED_TYPEDEFS 1 */
  622.  
  623. /*
  624.  * Does your compiler have difficulty with constructors in a return
  625.  * statement?  If so then uncomment the following.
  626.  */
  627.  
  628. /* #define _RWSTD_NO_CTOR_RETURN 1 */
  629.  
  630. /*
  631.  * Does your compiler have difficulty with unDEFINED friends?  If so
  632.  * then uncomment the following.
  633.  */
  634.  
  635. /* #define _RWSTD_NO_UNDEFINED_FRIEND 1 */
  636.  
  637. /*
  638.  * Does your compiler have trouble with structures that lack a default
  639.  * constructor even when their instantiation is indirect?  If so
  640.  * then uncomment the following.
  641.  */
  642.  
  643. /* #define _RWSTD_NO_MEMBER_WO_DEF_CTOR 1 */
  644.  
  645. /* 
  646.  * Does your compiler allow un-initialized static members?  If not
  647.  * then uncomment the following.
  648.  */
  649.  
  650. /* #define _RWSTD_NO_UNINITIALIZED_STATIC_DEF 1 */
  651.  
  652. /*
  653.  * Does your compiler allow member types as template parameters?  If not
  654.  * then uncomment the following.
  655.  */
  656.  
  657. /* #define _RWSTD_NO_MEMBER_TYPE_TPARAM 1 */
  658.  
  659. /*
  660.  * Does your compiler dis-allow the use of 'static' in the out of line
  661.  * initialization of a static const member?  If so then uncomment the
  662.  * following.
  663.  */
  664.  
  665. /* #define _RWSTD_NO_STATIC_MEM_DEF 1 */
  666.  
  667. /*
  668.  * Does your compiler not allow default constructor syntax on built in
  669.  * types. (e.g. int i = int();).  If so then uncomment the following.
  670.  */
  671.  
  672. /* #define _RWSTD_NO_BUILTIN_CTOR 1 */
  673.  
  674. /* Does your compiler not allow defaults for parameters in function
  675.  * templates when the function parameter is a template parameter type.
  676.  * If so then uncomment the following.
  677.  */
  678.  
  679. /* #define _RWSTD_NO_DEFAULT_FOR_TPARAM 1 */
  680.  
  681. /* Does your compiler not allow name injection.  For instance, does it 
  682.  * allow member function specializations to be declared but not defined,
  683.  * so that the template versions of these functions will be used.
  684.  * If not, then uncomment the following.
  685.  */
  686.  
  687. /* #define _RWSTD_NO_NAME_INJECTION 1 */
  688.  
  689. /* Does your compiler have problems overloading on function template
  690.  * arguments that are partial specializations?  
  691.  * If so, then uncomment the following.
  692.  */
  693.  
  694. /* #define _RWSTD_NO_PART_SPEC_OVERLOAD 1 */
  695.  
  696. /* Does your compiler vendor supply wctype.h?
  697.  * If not, then uncomment the following.
  698.  */
  699.  
  700. /* #define _RWSTD_NO_WCTYPE_H 1 */
  701.  
  702. /* Can your compiler handle explicit instantiations?
  703.  * If not, then uncomment the following.
  704.  */
  705.  
  706. /* #define _RWSTD_NO_EXPLICIT_INSTANTIATION 1 */
  707.  
  708. /* Can your compiler handle explicit instantiations of
  709.  * function templates?
  710.  * If not, then uncomment the following.
  711.  */
  712.  
  713. /* #define _RWSTD_NO_EXPLICIT_FUNC_INSTANTIATION 1 */
  714.  
  715. /* If your compiler requires the non-standard
  716.  * include file <ieeefp.h>, then uncomment the
  717.  * following.
  718.  */
  719.  
  720. /*  #define _RWSTD_REQUIRES_IEEEFP 1 */
  721.  
  722. /* If your compiler typedefs long double to 
  723.  * double, then uncomment the following.
  724.  */
  725.  
  726. /*  #define _RWSTD_NO_LONGDOUBLE 1 */
  727.  
  728. /* If your compiler does not support static_cast<>,
  729.    then uncomment the following.
  730. */
  731.  
  732. /*  #define _RWSTD_NO_STATIC_CAST 1 */
  733.  
  734. /* If your compiler doesn't support default values for const template
  735.  * reference arguements, then uncomment the following.
  736.  */
  737.  
  738. /*  #define  _RWSTD_NO_INIT_CONST_TEMPLATE_REF_ARG  1 */
  739.  
  740. /*  If your compiler does not support using a template argument as a
  741.  *  default parameter, then uncomment the following.
  742.  */
  743.  
  744. /*  #define _RWSTD_NO_DEFAULT_TEMPLATE_ARGS 1 */
  745.  
  746. /* If your compiler does not support wide string null being
  747.  * defined as L"" but will work correctly when defined as L"\0",
  748.  * then uncomment the following.
  749.  */ 
  750. /*  #define _RWSTD_WIDE_STRING_NULL_PROBLEM 1 */
  751.  
  752. /* If your compiler does not support partial specialisation
  753.  * of template function, then uncomment the following.
  754.  */ 
  755.  
  756. /*  #define _RWSTD_NO_FUNC_PARTIAL_SPEC 1 */
  757. /* If your compiler does not support partial specialisation
  758.  * of template classes with default parameters, then uncomment
  759.  * the following.
  760.  */
  761.  
  762. /*  #define _RWSTD_NO_CLASS_PARTIAL_SPEC 1 */
  763.  
  764. /* If your compiler does not support overload of template function,
  765.  * then uncomment the following.
  766.  */
  767.  
  768. /*  #define _RWSTD_NO_OVERLOAD_OF_TEMPLATE_FUNCTION 1 */
  769.  
  770. /* If your compiler has difficulties with multi dimensional arrays of
  771.  * container classes, then uncomment the following.
  772.  */
  773.  
  774. /*  #define _RWSTD_NO_MULTI_DIM_ARRAY 1 */
  775.  
  776. /* If your compiler does not provide a catopen/catgets style message
  777.  * catalog defined in header <nl_types.h>, then uncomment the following.
  778.  */
  779.  
  780. /*  #define _RWSTD_NO_CATOPEN_CATGETS 1 */
  781. /* If the exception handler functions are located in namespace std,
  782.  * then uncomment the following.
  783.  */
  784.  
  785. /*  #define _RWSTD_EXCEPTION_HANDLER_IN_STD 1 */
  786.  
  787. /* If your compiler has the class bad_alloc defined in new.h then
  788.  * uncomment the following.
  789.  */
  790.  
  791. /*  #define _RWSTD_BAD_ALLOC_DEFINED 1 */
  792.  
  793. /* If your compiler has the exception classes already defined 
  794.  * then uncomment the following.
  795.  */
  796.  
  797. /*  #define _RWSTD_EXCEPTION_PREDEFINED 1 */
  798.  
  799. /* If your compiler has the class exception in its own exception
  800.  * file then uncomment the following.
  801.  */
  802.  
  803. /*  #define _RWSTD_EXCEPTION_DEFINED 1 */
  804.  
  805. /* If your compiler has the class bad_exception in its own exception
  806.  * file then uncomment the following.
  807.  */
  808.  
  809. /*  #define _RWSTD_BAD_EXCEPTION_DEFINED 1 */
  810.  
  811. /* If your compiler will not accept opterator::new[]
  812.  * then uncomment the following.
  813.  */
  814.  
  815. /*  #define _RWSTD_NO_NEW_BRACKETS 1 */
  816.  
  817. /* If your compiler try to instantiate member function when
  818.  * creating variable of a class.
  819.  */
  820.  
  821. /*  #define _RWSTD_NO_ONLY_NEEDED_INSTANTIATION 1 */
  822.  
  823. /* If your 'C' library does not provide overloads for the pow function
  824.  * (i.e. pow(float,float), and pow(long double, long double) if appropriate),
  825.  * then uncommment the following.
  826.  */
  827.  
  828. /*  #define _RWSTD_NO_OVERLOAD_C_POW 1 */
  829.  
  830. /* If your compiler does not have an mbstate_t type then uncomment
  831.  * the following.
  832.  */
  833.  
  834. /*  #define _RWSTD_NO_MBSTATE_T 1 */
  835.  
  836. /* If your compiler does not support the new template specialization
  837.  * syntax then umcomment the following
  838.  */
  839.  
  840. /* #define _RWSTD_NO_NEW_TEMPLATE_SYNTAX 1 */
  841.  
  842. /* If your compiler does not a have a throw specification on operator new
  843.  * then uncomment the following.
  844.  */
  845.  
  846. /*  #define _RWSTD_NO_THROW_SPEC_ON_NEW 1 */
  847.  
  848. /* 
  849.  * Uncomment this for EDG 2.36
  850.  */
  851.  
  852. /*  #define __NO_EDG_EXCEPTION_CLASSES=1 */
  853.  
  854. /* 
  855.  * If you don't want to use RW extensions (to file streams) please 
  856.  * uncomment this. See documentation for a detailed description about
  857.  * the class wise extensions added to the library.
  858.  */
  859.  
  860. /* #define _RWSTD_NO_EXTENSION 1 */
  861.  
  862. /*************************************************************************
  863. **************************************************************************
  864. **                                    **
  865. **        From here on, it's pretty much boilerplate        **
  866. **        and rarely requires any tuning.                **
  867. **                                    **
  868. **************************************************************************
  869. **************************************************************************/
  870.  
  871. /************************ Cfront derivatives ******************************/
  872.  
  873. /* Any of these defines a cfront style compiler: */
  874. #if defined(__ATT1__) || defined(__ATT2__) || defined(__ATT3__)
  875. #  define __ATT__ 1
  876. #endif
  877.  
  878. #endif // !(__TURBOC__) && !(_MSC_VER) &&!(__OS2__)
  879.  
  880. #define STARTWRAP
  881. #define ENDWRAP
  882.  
  883. /********************** Borland's Turbo C++ **************************/
  884.  
  885. #if defined(__TURBOC__)
  886.  
  887. #define _RWSTD_NO_LONG_HEADER_NAME          1
  888.  
  889. #  if defined(__MSDOS__) && defined(_Windows)
  890. #    define __WIN16__ 1
  891. #  endif
  892.  
  893. /* 
  894.  * For Borland, the __export keyword in a function declaration must 
  895.  * come after the return type: 
  896.  */
  897. #  define RWSTD_TRAILING_RWEXPORT 1
  898.    /*
  899.     * Turbo and Borland won't inline code that contains loops or that
  900.     * generates temporaries requiring destructors or that has an exception
  901.     * specification:
  902.     */
  903. #  define _RWSTD_NO_TRICKY_INLINES           1
  904.  
  905.    /* Turbo C++ V1.00 forgets the segment address when passing
  906.       a class as a far reference if the class has not been defined. */
  907. #  if __TURBOC__ <= 0x0295
  908. #    define _RWSTD_UNDEFINED_REFERENCE_BUG    1
  909. #  endif
  910.  
  911. /*
  912.  *   Borland 5.0 - 5.02:
  913.  *   implements namespaces, bool and _MUTABLE
  914.  */
  915. #  if __TURBOC__ < 0x469
  916.  
  917. #     error Only Borland C++ versions 5.0 and better are supported.
  918.  
  919. #  else
  920.  
  921. /*     if error then #define RWBC5_INCLUDE to full path of the compiler's
  922.  *     INCLUDE directory.
  923. */ 
  924. #      if 0 // Weird include macro not needed.
  925. #      ifndef RWBC5_INCLUDE
  926. #        error #define RWBC5_INCLUDE to full path
  927. #      endif
  928. #      define _RWSTD_BC5_HEADER(x) <RWBC5_INCLUDE/x>
  929. #      endif // 0
  930. # if (__TURBOC__ == 0x520)
  931. // Borland 5.02 & Borland C++Builder 1.0
  932.  
  933. #      define _RWSTD_BC5_ENUM_BUG                    1
  934. #      define _RWSTD_NO_BAD_CAST                     1
  935. #      define _RWSTD_NO_CATOPEN_CATGETS              1
  936. #      define _RWSTD_NO_COMPLICATED_TYPEDEF          1
  937. #      define _RWSTD_NO_CONST_INST                   1
  938. #      define _RWSTD_NO_EXPLICIT_ARG                    1
  939. #      define _RWSTD_NO_FRIEND_TEMPLATES             1
  940. #      define _RWSTD_NO_INSTANTIATE                  1
  941. #      define _RWSTD_NO_LOCALE                       1
  942. #      define _RWSTD_NO_LONG_NAME                    1
  943. #      define _RWSTD_NO_NAMESPACE                    1
  944. #      define _RWSTD_NO_MEMBER_TEMPLATES             1
  945. #      define _RWSTD_NO_MEM_CLASS_TEMPLATES          1
  946. #      define _RWSTD_NO_NESTING_TEMPLATES            1
  947. #      define _RWSTD_NO_NEW_HEADER                   1
  948. #      define _RWSTD_NO_NONCLASS_ARROW_RETURN        1
  949. #      define _RWSTD_NO_NONTYPE_ARGS                 1
  950. #      define _RWSTD_NO_PART_SPEC_OVERLOAD           1
  951. #      define _RWSTD_NO_SIMPLE_DEFAULT_TEMPLATES     1
  952. #      define _RWSTD_NO_STATIC_DEF3                  1
  953. #      define _RWSTD_NO_SWPRINTF                     1
  954. #      define _RWSTD_NO_TEMPLATE_ON_RETURN_TYPE      1
  955. #      define _RWSTD_NO_TEMPLATE_TEMPLATE            1
  956. #      define _RWSTD_NO_TYPENAME                     1
  957. #      define _RWSTD_NO_WINT_TYPE                    1
  958. #      define _RWSTD_FLT_ROUNDS_IS_CONSTANT          1
  959. #      define _RWSTD_NO_STI_SIMPLE                   1
  960. #      ifdef __WIN16__
  961. #        define _RWSTD_NO_MEMBER_WO_DEF_CTOR         1
  962. #      endif
  963. #      define _RWSTD_EXPLICIT_SCOPE_DESTROY          1
  964. #      define _RWSTD_NO_WCTYPE_H                     1
  965. #      define _RWSTD_NO_WCHAR_H                      1
  966. #      define _RWSTD_NO_CLASS_PARTIAL_SPEC           1
  967. #      define _RWSTD_NO_FUNC_PARTIAL_SPEC            1
  968. #      define _RWSTD_NO_SIGNED_CHAR_IN_STREAMS       1
  969. #      define _RWSTD_NO_OVERLOAD_OF_TEMPLATE_FUNCTION 1
  970. #      define _RWSTD_NO_ONLY_NEEDED_INSTANTIATION    1
  971. #      define _RWSTD_NO_OVERLOAD_C_POW               1
  972. #      define _RWSTD_NO_NEW_TEMPLATE_SYNTAX          1
  973. #      define _RWSTD_NO_MBSTATE_T                    1
  974. #      define _RWSTD_NO_WSTR                         1
  975. #    endif
  976.  
  977. // Borland 5.2
  978. #    if (__TURBOC__ >= 0x520) && ( __TURBOC__ <= 0x530 )
  979.  
  980. #      define _RWSTD_BC5_ENUM_BUG                    1
  981. #      define _RWSTD_NO_STI_SIMPLE                   1
  982. #      define _RWSTD_NO_STI_TEMPLATE                 1
  983. #      define _RWSTD_NO_TEMPLATE_ON_RETURN_TYPE      1
  984. #      define _RWSTD_NO_NEW_TEMPLATE_SYNTAX          1
  985.  
  986. //     Enable iostream support for extra-long integer type.
  987. #      define _RWSTD_LONG_LONG                       __int64
  988. #      define _RWSTD_LONG_LONG_PRINTF_PREFIX         "L"
  989.  
  990. #    endif // Borland 5.2
  991.  
  992. #    if ( __TURBOC__ >= 0x550 )
  993. //   Borland C++ Builder 5.0 (BCB)
  994. #ifdef __MT__
  995. #      define _RWSTD_MULTI_THREAD                       1
  996. #endif // __MT__
  997. #      define _RWSTD_FLT_ROUNDS_IS_CONSTANT             1
  998. #      define _RWSTD_EXCEPTION_HANDLER_IN_STD        1 // It's in except.h
  999. #      define _RWSTD_NO_CATOPEN_CATGETS              1
  1000. #      define _RWSTD_NO_MBSTATE_T                    1
  1001. #      define _RWSTD_NO_OVERLOAD_C_POW               1
  1002. #      define _RWSTD_NO_NEW_BRACKETS                 1
  1003. #      define _RWSTD_NO_TEMPLATE_REPOSITORY          1
  1004. #      define _RWSTD_NO_THROW_SPEC_NULL              1
  1005.  
  1006. //     Enable iostream support for extra-long integer type.
  1007. #ifndef __STDC__
  1008. #      define _RWSTD_LONG_LONG                       __int64
  1009. #      define _RWSTD_LONG_LONG_PRINTF_PREFIX         "L"
  1010. #endif // __STDC__
  1011.  
  1012. #      define _RWSTD_NO_UNDEFINED_FRIEND             1
  1013.  
  1014. #    endif // Borland 0x550
  1015.  
  1016. #  endif  // Borland > 4.5
  1017. #endif    /* __TURBOC__ */
  1018.  
  1019. /************************ Microsoft C/C++ *****************************/
  1020.  
  1021. #if defined(_MSC_VER) && !defined(__BORLANDC__)
  1022.  
  1023. // Disable MSVC's min and max macros
  1024. #  ifndef NOMINMAX
  1025. #    define NOMINMAX                1
  1026. #  endif
  1027.  
  1028. #  define _RWSTD_MSC_BACKEND       1
  1029.  
  1030. /* MSVC version 2.1 */
  1031. #  if _MSC_VER < 1100
  1032.  
  1033. #     error Only Visual C++ versions 6.0 and better are supported.
  1034.  
  1035. // MSVC 6.0
  1036. #  else 
  1037. #      define _RWSTD_NO_NEW_HEADER                   1
  1038. #      define _RWSTD_NO_TYPENAME                     1
  1039. #      define _RWSTD_NO_CLASS_PARTIAL_SPEC           1
  1040. #      define _RWSTD_NO_COMPLICATED_TYPEDEF          1
  1041. #      define _RWSTD_NO_EXPLICIT_INSTANTIATION       1
  1042. #      define _RWSTD_NO_INSTANTIATE                  1
  1043. #      define _RWSTD_NO_NEW_BRACKETS                 1
  1044. #      define _RWSTD_NO_TEMPLATE_ON_RETURN_TYPE      1
  1045. #      define _RWSTD_NO_BAD_CAST                     1 
  1046. #      define _RWSTD_EXCEPTION_HANDLER_IN_STD        1
  1047. #      define _RWSTD_NO_FRIEND_TEMPLATES             1 
  1048.  
  1049. //     Enable iostream support for extra-long integer type.
  1050. #      define _RWSTD_LONG_LONG                       __int64
  1051. #      define _RWSTD_LONG_LONG_PRINTF_PREFIX         "L"
  1052.    
  1053. // Disable MSVC's "Same type qualifier used more than once" warning
  1054. #pragma warning ( disable : 4114)
  1055.  
  1056. #  endif /* MSVC versions */
  1057.  
  1058. #  if defined(_MSDOS) && !defined(WIN32) && !defined(_WIN32)
  1059. #    define __MSDOS__   1
  1060. #    if defined(_WINDOWS)
  1061. #      define __WIN16__ 1
  1062. #    endif
  1063. #  endif
  1064. #  if defined(WIN32) || defined(_WIN32)
  1065. #    define __WIN32__
  1066. #    define _RWSTD_TOLOWER_SIGN_EXTENDS_RESULT_BUG 1
  1067. #  else
  1068. #    define _RWSTD_NO_WSTR 1
  1069. #  endif
  1070.  
  1071. #  ifdef _RWBUILDDLL
  1072. #    define __DLL__ 1
  1073. #  endif
  1074.  
  1075. #endif // _MSC_VER
  1076. /********************** IBM C/Set++   *********************************/
  1077.  
  1078. #ifdef __IBMCPP__
  1079. #  ifdef __MULTI__
  1080. #    define _RWSTD_MULTI_THREAD 1
  1081. #  endif //__MULTI__
  1082.  
  1083. /********************** IBM Visual Age *******************************/
  1084. #ifdef __OS2__ // 
  1085. #  define _RWSTD_NO_STRICT_TEMPLATE_INSTANTIATE 1
  1086. #  define _RWSTD_NO_FPOS_T                    1
  1087. #  define _RWSTD_NO_LDIV                      1
  1088. #  define _RWSTD_NO_WCTYPE_H                  1
  1089. #  define _RWSTD_NO_SWPRINTF                  1
  1090. #  define _RWSTD_NO_BOOL                      1
  1091. #  define _RWSTD_NO_SIMPLE_DEFAULT_TEMPLATES  1
  1092. #  define _RWSTD_NO_COMPLEX_DEFAULT_TEMPLATES 1
  1093. #  define _RWSTD_NO_MUTABLE                   1
  1094. #  define _RWSTD_NO_NAMESPACE                 1
  1095. #  define _RWSTD_NO_MEMBER_TEMPLATES          1
  1096. #  define _RWSTD_NO_TYPENAME                  1
  1097. #  define _RWSTD_NO_MEM_CLASS_TEMPLATES       1
  1098. #  define _RWSTD_NO_STI_SIMPLE                1
  1099. #  define _RWSTD_NO_LONG_NAME                 1
  1100. #  define _RWSTD_NO_TEMPLATE_TEMPLATE         1
  1101. #  define _RWSTD_NO_STATIC_CAST               1
  1102. #  define _RWSTD_NO_EXPLICIT_ARG              1
  1103. #  define _RWSTD_NO_NEW_HEADER                1
  1104. #  define _RWSTD_NO_EXPLICIT                  1
  1105. #  define _RWSTD_NO_INIT_CONST_TEMPLATE_REF_ARG  1
  1106. #  define _RWSTD_NO_EXPLICIT_INSTANTIATION    1
  1107. #  define _RWSTD_NO_NONCLASS_ARROW_RETURN     1
  1108. #  define _RWSTD_COMPILE_INSTANTIATE          1
  1109. #  define _RWSTD_NO_LONG_HEADER_NAME          1
  1110. #  define _RWSTD_NO_PART_SPEC_OVERLOAD        1
  1111. #  define _RWSTD_NO_TEMPLATE_SPECIALIZATION   1
  1112. #  define _RWSTD_NO_STATIC_DEF3               1
  1113. #  define _RWSTD_WIDE_STRING_NULL_PROBLEM     1
  1114. #  define _RWSTD_NO_DESTROY_BUILTIN        1
  1115. #endif //OS2
  1116. #endif //IBMCPP
  1117.  
  1118. #ifndef RW_NEVER_ENTER_DEFAULT_HEADER_BLOCK
  1119. #endif /* RW_NEVER_ENTER_DEFAULT_HEADER_BLOCK */
  1120. /********************** DECCXX ***************************************/
  1121.  
  1122. #if defined (__DECCXX)
  1123. #ifdef _RWSTD_EXCEPTION_PREDEFINED
  1124. #undef _RWSTD_EXCEPTION_PREDEFINED
  1125. #endif
  1126. #ifdef _RWSTD_EXCEPTION_DEFINED
  1127. #undef _RWSTD_EXCEPTION_DEFINED
  1128. #endif
  1129. #ifdef _RWSTD_BAD_ALLOC_DEFINED
  1130. #undef _RWSTD_BAD_ALLOC_DEFINED
  1131. #endif
  1132. #define _RWSTD_NO_MBSTATE_COMPARE 1
  1133. #endif // __DECCXX
  1134.  
  1135. /********************** Miscellaneous *********************************/
  1136.  
  1137. /* No Pi for these compilers: */
  1138. #if defined(_RWSTD_MSC_BACKEND) || defined(__OREGON__) || defined(__HIGHC__) || defined(applec) || defined(CII) || defined(__WATCOMC__)
  1139. #  ifndef M_PI
  1140. #    define M_PI 3.14159265358979323846
  1141. #  endif
  1142. #endif
  1143.  
  1144. /*
  1145.  * Only Sun defines strftime("%C", ...)
  1146.  */
  1147. #if !defined(_RWSTD_NO_STRFTIME_CAPC) && !defined(sun)
  1148. #define _RWSTD_NO_STRFTIME_CAPC 1
  1149. #endif
  1150.  
  1151. #if defined(__SUNPRO_CC)&&(__SUNPRO_CC>=0x420)
  1152. #define _RWSTD_NO_TEMPLATE_STATIC_ID 1
  1153. #define _RWSTD_NO_MBSTATE_COMPARE
  1154. #define _RWSTD_EXCEPTION_DEFINED
  1155. #endif
  1156.  
  1157. /********************** Environment *********************************/
  1158. /*
  1159.  * This is the section for setting things which depend on the properties
  1160.  * of the operating systems rather than specific compilers.  It follows
  1161.  * the compiler section so we have the chance to rationalize the different
  1162.  * preprocessor constants (e.g. _MSDOS vs. __MSDOS__,  _M_I86LM vs. __LARGE__)
  1163.  */
  1164.  
  1165. #ifndef _RWSTD_DEFAULT_PRECISION
  1166. #   define _RWSTD_DEFAULT_PRECISION 16    /* Assume standard IEEE format */
  1167. #endif
  1168.  
  1169. #if defined(__cplusplus)&&(__cplusplus >= 199707L) && defined(__STDCPP__) && (__STDCPP__ == 1)
  1170. #define _HPACC_ 1
  1171. #undef _RWSTD_NO_NEW_HEADER
  1172. #if defined(__cplusplus)&&(__cplusplus >= 199711L)
  1173. #ifndef _RWSTD_BAD_ALLOC_DEFINED
  1174. #define _RWSTD_BAD_ALLOC_DEFINED
  1175. #endif
  1176. #ifndef _RWSTD_NO_CLASS_PARTIAL_SPEC
  1177. #define _RWSTD_NO_CLASS_PARTIAL_SPEC
  1178. #endif
  1179. #ifndef _RWSTD_NO_TEMPLATE_ON_RETURN_TYPE
  1180. #define _RWSTD_NO_TEMPLATE_ON_RETURN_TYPE
  1181. #endif
  1182. #ifndef _RWSTD_NO_MEMBER_TEMPLATES
  1183. #define _RWSTD_NO_MEMBER_TEMPLATES
  1184. #endif
  1185. #endif
  1186. #endif
  1187.  
  1188. /*
  1189.  * Most (but not all) non-unix systems convert new line to carriage
  1190.  * return / line feed on output:
  1191.  */
  1192. #if defined(__MSDOS__) || defined(__OS2__) || defined(__WIN32__) || defined(__NT__) || defined(__WINDOWS__)
  1193. #  define _RWSTD_CRLF_CONVENTION 1
  1194. #endif
  1195.  
  1196. /*
  1197. ** Miscellaneous workarounds.
  1198. */
  1199.  
  1200. #ifdef _RWSTD_NO_BOOL
  1201. # ifdef _RWSTD_MSVC_BOOL_WARNING
  1202. #  pragma warning ( disable : 4237 )
  1203. # endif
  1204. typedef int     bool;
  1205. # ifndef true
  1206. #  define true    1
  1207. # endif
  1208. # ifndef false
  1209. #  define false   0
  1210. # endif
  1211. #endif // _RWSTD_NO_BOOL
  1212.  
  1213. #ifndef _RWSTD_NO_TYPENAME
  1214. #define _TYPENAME typename
  1215. #else
  1216. #define _TYPENAME
  1217. #endif
  1218.  
  1219. #ifndef _RWSTD_NO_EXPLICIT
  1220. #define _EXPLICIT explicit
  1221. #else
  1222. #define _EXPLICIT 
  1223. #endif
  1224.  
  1225. #ifndef _RWSTD_NO_MUTABLE
  1226. #define _MUTABLE mutable
  1227. #else
  1228. #define _MUTABLE
  1229. #endif
  1230.  
  1231. #ifndef _RWSTD_NO_TRICKY_INLINES
  1232. #define _RWSTD_TRICKY_INLINE inline
  1233. #else
  1234. #define _RWSTD_TRICKY_INLINE
  1235. #endif
  1236.  
  1237. #ifdef _RWSTD_NO_MEMBER_WO_DEF_CTOR
  1238. #define _RWSTD_NO_CONST_INST 1
  1239. #endif
  1240.  
  1241. #if defined(_RWSTD_NO_STI_SIMPLE) && !defined(_RWSTD_NO_STI_TEMPLATE)
  1242. #define _RWSTD_NO_STI_TEMPLATE
  1243. #endif
  1244.  
  1245. #ifdef _RWSTD_NO_EXPLICIT_INSTANTIATION   
  1246. #    define _RWSTD_NO_EXPLICIT_FUNC_INSTANTIATION    1
  1247. #endif
  1248.  
  1249. #ifdef _RWSTD_NO_WIDE_CHAR
  1250. #  define _RWSTD_NO_OVERLOAD_WCHAR 1
  1251. #  define _RWSTD_NO_WSTR 1
  1252. #endif
  1253. //
  1254. // Macro for forming or omitting default template arguments in constructors
  1255. //
  1256.  
  1257. #ifndef _RWSTD_NO_DEFAULT_TEMPLATE_ARGS
  1258. #  define _RWSTD_DEFAULT_ARG(n) = n
  1259. #else
  1260. #  define _RWSTD_DEFAULT_ARG(n) 
  1261. #endif
  1262.  
  1263. //
  1264. // Macro for forming or ommitting default template parameters.
  1265. //
  1266. #ifndef _RWSTD_NO_SIMPLE_DEFAULT_TEMPLATES
  1267. #  define _RWSTD_SIMPLE_DEFAULT(a)  = a
  1268. #  ifndef _RWSTD_NO_COMPLEX_DEFAULT_TEMPLATES
  1269. #    define _RWSTD_COMPLEX_DEFAULT(a)  = a
  1270. #  else
  1271. #    define _RWSTD_COMPLEX_DEFAULT(a)
  1272. #  endif
  1273. #else
  1274. #  ifndef _RWSTD_NO_COMPLEX_DEFAULT_TEMPLATES
  1275. #    define _RWSTD_NO_COMPLEX_DEFAULT_TEMPLATES
  1276. #  endif
  1277. #  define _RWSTD_SIMPLE_DEFAULT(a)
  1278. #  define _RWSTD_COMPLEX_DEFAULT(a)
  1279. #  ifndef _RWSTD_NO_DEFAULT_TEMPLATES
  1280. #    define _RWSTD_NO_DEFAULT_TEMPLATES
  1281. #  endif
  1282. #endif
  1283.  
  1284. //
  1285. // Macros for adding 'std' or '__rwstd' to names
  1286. //
  1287. #ifndef _RWSTD_NO_NAMESPACE
  1288. #  if defined(_MSC_VER) && !defined(__BORLANDC__)
  1289. #    define _RW_STD ::std
  1290. #    define __RWSTD ::__rwstd
  1291. #  else
  1292. #    define _RW_STD std
  1293. #    define __RWSTD __rwstd
  1294. #  endif
  1295. #else
  1296. #  define _RW_STD 
  1297. #  define __RWSTD 
  1298. # endif
  1299.  
  1300. //
  1301. // Macro for casting, using either the "old" method
  1302. // or the new C++ cast system
  1303. //
  1304.  
  1305. #ifdef _RWSTD_NO_STATIC_CAST
  1306. #  define _RWSTD_STATIC_CAST(x,y) (x)y
  1307. #  define _RWSTD_REINTERPRET_CAST(x,y) (x)y
  1308. #  define _RWSTD_CONST_CAST(x,y) (x)y
  1309. #  define _RWSTD_REINTERPRET_CONST_CAST(x,y,z) x(z)
  1310. #else
  1311. #  define _RWSTD_STATIC_CAST(x,y) static_cast< x >(y)
  1312. #  define _RWSTD_REINTERPRET_CAST(x,y) reinterpret_cast< x >(y)
  1313. #  define _RWSTD_CONST_CAST(x,y) const_cast< x >(y)
  1314. #  define _RWSTD_REINTERPRET_CONST_CAST(x,y,z) reinterpret_cast< x >(const_cast< y >(z))
  1315. #endif
  1316.  
  1317. //  
  1318. // Macro for the new template specialization syntax
  1319. //
  1320. #ifdef _RWSTD_NO_NEW_TEMPLATE_SYNTAX
  1321. #  define _RWSTD_TEMPLATE 
  1322. #else
  1323. #  define _RWSTD_TEMPLATE template<>
  1324. #endif
  1325.  
  1326. //
  1327. // If compiler supports member and default templates then it support
  1328. // the _RWSTD_ALLLOCATOR
  1329. //
  1330. #if !defined(_RWSTD_NO_MEMBER_TEMPLATES) && !defined(_RWSTD_NO_SIMPLE_DEFAULT_TEMPLATES) && !defined(_RWSTD_NO_MEM_CLASS_TEMPLATES)
  1331. #define _RWSTD_ALLOCATOR
  1332. #endif
  1333.  
  1334. #ifdef _HPACC_
  1335. #ifdef _RWSTD_ALLOCATOR
  1336. #undef _RWSTD_ALLOCATOR
  1337. #endif
  1338. #endif
  1339.  
  1340. //
  1341. // Define typedef macro
  1342. //
  1343. #ifdef _RWSTD_NO_EMBEDDED_TYPEDEF
  1344. #  define _RWSTD_ALLOC_SIZE_TYPE        Allocator::size_type
  1345. #  define _RWSTD_ALLOC_DIFF_TYPE        Allocator::difference_type
  1346. #else
  1347. #  define _RWSTD_ALLOC_SIZE_TYPE        allocator_type::size_type
  1348. #  define _RWSTD_ALLOC_DIFF_TYPE        allocator_type::difference_type
  1349. #endif
  1350.  
  1351. #define _RWSTD_MB_CUR_MAX 16  //???  Need to find absolute maximum for this
  1352.  
  1353. #include <compnent.h>
  1354.  
  1355. //
  1356. // Define a generic macro for throw.  To be used as in the following:
  1357. //
  1358. //    _RWSTD_THROW(i < j && j < k, out_of_range, "j is out of range!");
  1359. //
  1360. //                ^ predicate     ^ exception   ^ message
  1361. //
  1362. // literally, if (predicate) throw exception(message)
  1363. //
  1364. #ifdef _RWSTD_NO_EXCEPTIONS
  1365. //
  1366. // If we don't have exceptions, then we'll use assert.
  1367. // We don't allow them to turn off the assert() in which such
  1368. // a thrown exception would result.
  1369. //
  1370.  
  1371. #ifdef  NDEBUG
  1372. #define __RW_NDEBUG
  1373. #undef  NDEBUG
  1374. #endif
  1375. #ifndef _RWSTD_NO_NEW_HEADER
  1376. #include <cassert>
  1377. #else
  1378. #include <assert.h>
  1379. #endif
  1380. #define _RWSTD_THROW_NO_MSG(PRED,EXC)  assert(!(PRED))
  1381. #define _RWSTD_THROW(PRED,EXC,MESG) assert(!(PRED))
  1382. //
  1383. // We must also turn off expansion of assert() if that's what the user expects.
  1384. //
  1385. #ifdef  __RW_NDEBUG
  1386. #define NDEBUG
  1387. #undef  __RW_NDEBUG
  1388. #endif
  1389. #else /*!_RWSTD_NO_EXCEPTIONS*/
  1390. //
  1391. // We must check to see if we can use <stdexcept> or just a string.
  1392. //
  1393. #ifdef _RW_STD_EXCEPT
  1394. #define _RWSTD_THROW_NO_MSG(PRED,EXC) if (PRED) throw EXC()
  1395. #define _RWSTD_THROW(PRED,EXC,MESG) if (PRED) throw EXC(MESG)  
  1396. #else
  1397. #define _RWSTD_THROW(PRED,EXC,MESG) if (PRED) throw (MESG)  
  1398. #endif
  1399. #endif /*_RWSTD_NO_EXCEPTIONS*/
  1400.  
  1401. //
  1402. // Define two generic throw specification macros.  One to illustrate
  1403. // the exceptions that a function can throw and the other to indicate
  1404. // that a function doesn't throw any exceptions.
  1405. //
  1406. //   _RWSTD_THROW_SPEC(ExceptionList)
  1407. //
  1408. //   _RWSTD_THROW_SPEC_NULL
  1409. //
  1410. // Owing to the face that the first macro must be able to take a
  1411. // variable number of arguments, we must simulate this by always
  1412. // passing the exceptions in parentheses; i.e.
  1413. //
  1414. //  void f () _RWSTD_THROW_SPEC((out_of_range));
  1415. //  void g () _RWSTD_THROW_SPEC((domain_error, invalid_argument));
  1416. //  void h () _RWSTD_THROW_SPEC((out_of_range, invalid_argument, length_error));
  1417. //
  1418.  
  1419. #if defined(_RWSTD_NO_EXCEPTIONS) || defined(_RWSTD_NO_EX_SPEC)
  1420. #define _RWSTD_THROW_SPEC(EXCEPTIONS) /**/
  1421. #define _RWSTD_THROW_SPEC_NULL        /**/
  1422. #else
  1423. #ifdef _RW_STD_EXCEPT
  1424. //
  1425. // _RWSTD_THROW will use the exceptions in <stdexcept>
  1426. //
  1427. #define _RWSTD_THROW_SPEC(ExceptionList) throw ExceptionList
  1428. #define _RWSTD_THROW_SPEC_NULL           throw()
  1429. #else
  1430. //
  1431. // _RWSTD_THROW will only throw const char *
  1432. //
  1433. #define _RWSTD_THROW_SPEC(ExceptionList) throw(const char *)
  1434. #define _RWSTD_THROW_SPEC_NULL           throw()
  1435. #endif
  1436. #endif /*_RWSTD_NO_EXCEPTIONS||_RWSTD_NO_EX_SPEC*/
  1437.  
  1438. #ifndef _RWSTD_NO_TRICKY_INLINES
  1439. #define _RWSTD_INLINE_NO_THROW _RWSTD_THROW_SPEC_NULL
  1440. #else
  1441. #define _RWSTD_INLINE_NO_THROW
  1442. #endif
  1443.  
  1444. #if defined (__BORLANDC__) && defined(_RWSTD_NO_THROW_SPEC_NULL)
  1445. #  undef  _RWSTD_THROW_SPEC_NULL
  1446. #  define _RWSTD_THROW_SPEC_NULL        /**/
  1447. #endif
  1448.  
  1449. //
  1450. // Macro for path to the ANSI 'C' headers
  1451. // Must be set specifically for each platform when the
  1452. // C++ wrappers for 'C' headers are used.
  1453. //
  1454. #define _RWSTD_ANSIC(x) </usr/include/x>
  1455.  
  1456. #endif /*__RWSTDCOMPILER_H__*/
  1457.