ncbistl.hpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:9k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: ncbistl.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2003/10/29 15:05:31  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.33
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef CORELIB___NCBISTL__HPP
  10. #define CORELIB___NCBISTL__HPP
  11. /*  $Id: ncbistl.hpp,v 1000.0 2003/10/29 15:05:31 gouriano Exp $
  12.  * ===========================================================================
  13.  *
  14.  *                            PUBLIC DOMAIN NOTICE
  15.  *               National Center for Biotechnology Information
  16.  *
  17.  *  This software/database is a "United States Government Work" under the
  18.  *  terms of the United States Copyright Act.  It was written as part of
  19.  *  the author's official duties as a United States Government employee and
  20.  *  thus cannot be copyrighted.  This software/database is freely available
  21.  *  to the public for use. The National Library of Medicine and the U.S.
  22.  *  Government have not placed any restriction on its use or reproduction.
  23.  *
  24.  *  Although all reasonable efforts have been taken to ensure the accuracy
  25.  *  and reliability of the software and data, the NLM and the U.S.
  26.  *  Government do not and cannot warrant the performance or results that
  27.  *  may be obtained by using this software or data. The NLM and the U.S.
  28.  *  Government disclaim all warranties, express or implied, including
  29.  *  warranties of performance, merchantability or fitness for any particular
  30.  *  purpose.
  31.  *
  32.  *  Please cite the author in any work or product based on this material.
  33.  *
  34.  * ===========================================================================
  35.  *
  36.  * Author:  Denis Vakatov
  37.  *
  38.  *
  39.  */
  40. /// @file ncbistl.hpp
  41. /// The NCBI C++/STL use hints.
  42. #include <ncbiconf.h>
  43. #include <corelib/mswin_export.h>
  44. // Get rid of some warnings in MSVC++ 6.00
  45. #if (_MSC_VER >= 1200)
  46. // too long identificator name in the debug info;  truncated
  47. #  pragma warning(disable: 4786)
  48. // too long decorated name;  truncated
  49. #  pragma warning(disable: 4503)
  50. // default copy constructor cannot be generated
  51. #  pragma warning(disable: 4511)
  52. // default assignment operator cannot be generated
  53. #  pragma warning(disable: 4512)
  54. // synonymous name used
  55. #  pragma warning(disable: 4097)
  56. // inherits ... via dominance
  57. #  pragma warning(disable: 4250)
  58. // 'this' : used in base member initializer list
  59. #  pragma warning(disable: 4355)
  60. // identifier was truncated to '255' characters in the browser information
  61. #  pragma warning(disable: 4786)
  62. #endif /* _MSC_VER >= 1200 */
  63. /** @addtogroup STL
  64.  *
  65.  * @{
  66.  */
  67. /// Define a new scope.
  68. #define BEGIN_SCOPE(ns) namespace ns {
  69. /// End the previously defined scope.
  70. #define END_SCOPE(ns) }
  71. /// Use the specified namespace.
  72. #define USING_SCOPE(ns) using namespace ns
  73. // Using STD and NCBI namespaces
  74. /// Define the std namespace.
  75. #define NCBI_NS_STD  std
  76. /// Use the std namespace.
  77. #define NCBI_USING_NAMESPACE_STD using namespace NCBI_NS_STD
  78. /// Define the name for the NCBI namespace.
  79. #define NCBI_NS_NCBI ncbi
  80. /// Define ncbi namespace.
  81. ///
  82. /// Place at beginning of file for NCBI related code.
  83. #define BEGIN_NCBI_SCOPE BEGIN_SCOPE(NCBI_NS_NCBI)
  84. /// End previously defined NCBI scope.
  85. #define END_NCBI_SCOPE   END_SCOPE(NCBI_NS_NCBI)
  86. /// For using NCBI namespace code.
  87. #define USING_NCBI_SCOPE USING_SCOPE(NCBI_NS_NCBI)
  88. /// Magic spell ;-) needed for some weird compilers... very empiric.
  89. namespace NCBI_NS_STD  { /* the fake one */ }
  90. /// Magic spell ;-) needed for some weird compilers... very empiric.
  91. namespace NCBI_NS_NCBI { /* the fake one, +"std" */ NCBI_USING_NAMESPACE_STD; }
  92. /// Magic spell ;-) needed for some weird compilers... very empiric.
  93. namespace NCBI_NS_NCBI { /* the fake one */ }
  94. #if !defined(NCBI_NAME2)
  95. /// Name concatenation macro with two names.
  96. #  define NCBI_NAME2(Name1, Name2) Name1##Name2
  97. #endif
  98. #if !defined(NCBI_NAME3)
  99. /// Name concatenation macro with three names.
  100. #  define NCBI_NAME3(Name1, Name2, Name3) Name1##Name2##Name3
  101. #endif
  102. #if !defined(NCBI_EAT_SEMICOLON)
  103. #  define NCBI_EAT_SEMICOLON(UniqueName) 
  104. typedef int NCBI_NAME2(T_EAT_SEMICOLON_,UniqueName)
  105. #endif
  106. #if defined(NCBI_OS_MSWIN) && !defined(for)
  107. /// Fix nonstandard 'for' statement behaviour on MSVC.
  108. # define for if(0);else for
  109. #endif
  110. #ifdef NCBI_COMPILER_ICC
  111. /// ICC may fail to generate code preceded by "template<>".
  112. #define EMPTY_TEMPLATE
  113. #else
  114. #define EMPTY_TEMPLATE template<>
  115. #endif
  116. #ifdef NCBI_COMPILER_WORKSHOP
  117. # if NCBI_COMPILER_VERSION < 530
  118. /// Advance iterator to end and then break out of loop.
  119. ///
  120. /// Sun WorkShop < 5.3 fails to call destructors for objects created in
  121. /// for-loop initializers; this macro prevents trouble with iterators
  122. /// that contain CRefs by advancing them to the end, avoiding
  123. /// "deletion of referenced CObject" errors.
  124. #  define BREAK(it) while (it) { ++(it); }  break
  125. # else
  126. #  define BREAK(it) break
  127. # endif
  128. #else
  129. # define BREAK(it) break
  130. #endif
  131. /* @} */
  132. /*
  133.  * ===========================================================================
  134.  * $Log: ncbistl.hpp,v $
  135.  * Revision 1000.0  2003/10/29 15:05:31  gouriano
  136.  * PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.33
  137.  *
  138.  * Revision 1.33  2003/10/27 13:09:02  siyan
  139.  * Added CORELIB___ prefix to #ifndef, #define macro names.
  140.  *
  141.  * Revision 1.32  2003/08/24 14:17:36  siyan
  142.  * Documentation changes.
  143.  *
  144.  * Revision 1.31  2003/04/14 11:34:27  siyan
  145.  * Fixed STL group name
  146.  *
  147.  * Revision 1.30  2003/04/01 14:20:37  siyan
  148.  * Added doxygen support
  149.  *
  150.  * Revision 1.29  2003/01/07 21:34:05  lavr
  151.  * mswin_export.hpp -> mswin_export.h
  152.  *
  153.  * Revision 1.28  2002/12/18 22:53:21  dicuccio
  154.  * Added export specifier for building DLLs in windows.  Added global list of
  155.  * all such specifiers in mswin_exports.hpp, included through ncbistl.hpp
  156.  *
  157.  * Revision 1.27  2002/04/18 18:51:07  ucko
  158.  * WorkShop 5.3 fixed the problem with for-loop initializers;
  159.  * conditionalize the special definition of BREAK accordingly.
  160.  *
  161.  * Revision 1.26  2002/04/11 20:39:19  ivanov
  162.  * CVS log moved to end of the file
  163.  *
  164.  * Revision 1.25  2001/12/14 17:41:58  vakatov
  165.  * [MSVC++] Added pragma to get rid of warning:
  166.  *   "identifier was truncated to '255' characters in the browser information"
  167.  *
  168.  * Revision 1.24  2001/10/12 19:32:54  ucko
  169.  * move BREAK to a central location; move CBioseq::GetTitle to object manager
  170.  *
  171.  * Revision 1.23  2001/09/18 17:42:53  grichenk
  172.  * Disabled warning 4355
  173.  *
  174.  * Revision 1.22  2001/08/31 20:05:42  ucko
  175.  * Fix ICC build.
  176.  * 
  177.  * Revision 1.21  2001/05/21 21:46:17  vakatov
  178.  * SIZE_TYPE, NPOS -- moved from <ncbistl.hpp> to <ncbistr.hpp> and
  179.  * made non-macros (to avoid possible name clashes)
  180.  *
  181.  * Revision 1.20  2000/12/23 05:46:05  vakatov
  182.  * [MSVC++]  disable warning C4250
  183.  *
  184.  * Revision 1.19  2000/11/09 18:14:37  vasilche
  185.  * Fixed nonstandard behaviour of 'for' statement on MS VC.
  186.  *
  187.  * Revision 1.18  2000/07/03 18:41:16  vasilche
  188.  * Added prefix to NCBI_EAT_SEMICOLON generated typedef to avoid possible
  189.  * name conflict.
  190.  *
  191.  * Revision 1.17  2000/06/01 15:08:33  vakatov
  192.  * + USING_SCOPE(ns)
  193.  *
  194.  * Revision 1.16  2000/04/18 19:24:33  vasilche
  195.  * Added BEGIN_SCOPE and END_SCOPE macros to allow source brawser gather names
  196.  * from namespaces.
  197.  *
  198.  * Revision 1.15  2000/04/06 16:07:54  vasilche
  199.  * Added NCBI_EAT_SEMICOLON macro to allow tailing semicolon without warning.
  200.  *
  201.  * Revision 1.14  1999/12/28 18:55:25  vasilche
  202.  * Reduced size of compiled object files:
  203.  * 1. avoid inline or implicit virtual methods (especially destructors).
  204.  * 2. avoid std::string's methods usage in inline methods.
  205.  * 3. avoid string literals ("xxx") in inline methods.
  206.  *
  207.  * Revision 1.13  1999/10/12 21:46:31  vakatov
  208.  * Assume all supported compilers are namespace-capable and have "std::"
  209.  *
  210.  * Revision 1.12  1999/05/13 16:43:29  vakatov
  211.  * Added Mac(#NCBI_OS_MAC) to the list of supported platforms
  212.  * Also, use #NCBI_OS to specify a string representation of the
  213.  * current platform("UNIX", "WINDOWS", or "MAC")
  214.  *
  215.  * Revision 1.11  1999/05/10 14:26:07  vakatov
  216.  * Fixes to compile and link with the "egcs" C++ compiler under Linux
  217.  *
  218.  * Revision 1.10  1999/04/14 19:41:19  vakatov
  219.  * [MSVC++] Added pragma's to get rid of some warnings
  220.  *
  221.  * Revision 1.9  1998/12/03 15:47:50  vakatov
  222.  * Scope fixes for #NPOS and #SIZE_TYPE;  redesigned the std:: and ncbi::
  223.  * scope usage policy definitions(also, added #NCBI_NS_STD and #NCBI_NS_NCBI)
  224.  *
  225.  * Revision 1.8  1998/12/01 01:18:42  vakatov
  226.  * [HAVE_NAMESPACE]  Added an empty fake "ncbi" namespace -- MSVC++ 6.0
  227.  * compiler starts to recognize "std::" scope only after passing through at
  228.  * least one "namespace ncbi {}" statement(?!)
  229.  *
  230.  * Revision 1.7  1998/11/13 00:13:51  vakatov
  231.  * Decide whether it NCBI_OS_UNIX or NCBI_OS_MSWIN
  232.  *
  233.  * Revision 1.6  1998/11/10 01:13:40  vakatov
  234.  * Moved "NCBI_USING_NAMESPACE_STD:" to the first(fake) definition of
  235.  * namespace "ncbi" -- no need to "using ..." it in every new "ncbi"
  236.  * scope definition...
  237.  *
  238.  * Revision 1.5  1998/11/06 22:42:39  vakatov
  239.  * Introduced BEGIN_, END_ and USING_ NCBI_SCOPE macros to put NCBI C++
  240.  * API to namespace "ncbi::" and to use it by default, respectively
  241.  * Introduced THROWS_NONE and THROWS(x) macros for the exception
  242.  * specifications
  243.  * Other fixes and rearrangements throughout the most of "corelib" code
  244.  * ==========================================================================
  245.  */
  246. #endif /* NCBISTL__HPP */