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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: ncbistre.hpp,v $
  4.  * PRODUCTION Revision 1000.4  2004/06/01 19:08:14  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.40
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef CORELIB___NCBISTRE__HPP
  10. #define CORELIB___NCBISTRE__HPP
  11. /*  $Id: ncbistre.hpp,v 1000.4 2004/06/01 19:08:14 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 ncbistre.hpp
  41. /// NCBI C++ stream class wrappers for triggering between "new" and
  42. /// "old" C++ stream libraries.
  43. #include <corelib/ncbistl.hpp>
  44. /// Determine which iostream library to use, include appropriate
  45. /// headers, and #define specific preprocessor variables.
  46. /// The default is the new(template-based, std::) one.
  47. #if !defined(HAVE_IOSTREAM)  &&  !defined(NCBI_USE_OLD_IOSTREAM)
  48. #  define NCBI_USE_OLD_IOSTREAM
  49. #endif
  50. #if defined(HAVE_IOSTREAM_H)  &&  defined(NCBI_USE_OLD_IOSTREAM)
  51. #  include <iostream.h>
  52. #  include <fstream.h>
  53. #  if defined(HAVE_STRSTREA_H)
  54. #    include <strstrea.h>
  55. #  else
  56. #    include <strstream.h>
  57. #  endif
  58. #  include <iomanip.h>
  59. #  define IO_PREFIX
  60. #  define IOS_BASE      ::ios
  61. #  define IOS_PREFIX    ::ios
  62. #  define PUBSYNC       sync
  63. #  define PUBSEEKPOS    seekpos
  64. #  define PUBSEEKOFF    seekoff
  65. #elif defined(HAVE_IOSTREAM)
  66. #  if defined(NCBI_USE_OLD_IOSTREAM)
  67. #    undef NCBI_USE_OLD_IOSTREAM
  68. #  endif
  69. #  if defined(NCBI_COMPILER_GCC)
  70. #    if NCBI_COMPILER_VERSION < 300
  71. #      define NO_PUBSYNC
  72. #    elif NCBI_COMPILER_VERSION >= 310
  73. // Don't bug us about including <strstream>.
  74. #      define _CPP_BACKWARD_BACKWARD_WARNING_H 1
  75. #      define _BACKWARD_BACKWARD_WARNING_H 1
  76. #    endif
  77. #  endif
  78. #  include <iostream>
  79. #  include <fstream>
  80. #  include <strstream>
  81. #  include <iomanip>
  82. #  if defined(HAVE_NO_STD)
  83. #    define IO_PREFIX
  84. #  else
  85. #    define IO_PREFIX   NCBI_NS_STD
  86. #  endif
  87. #  if defined HAVE_NO_IOS_BASE
  88. #    define IOS_BASE    IO_PREFIX::ios
  89. #  else
  90. #    define IOS_BASE    IO_PREFIX::ios_base
  91. #  endif
  92. #  define IOS_PREFIX    IO_PREFIX::ios
  93. #  ifdef NO_PUBSYNC
  94. #    define PUBSYNC     sync
  95. #    define PUBSEEKOFF  seekoff
  96. #    define PUBSEEKPOS  seekpos
  97. #  else
  98. #    define PUBSYNC     pubsync
  99. #    define PUBSEEKOFF  pubseekoff
  100. #    define PUBSEEKPOS  pubseekpos
  101. #  endif
  102. #else
  103. #  error "Neither <iostream> nor <iostream.h> can be found!"
  104. #endif
  105. // obsolete
  106. #define SEEKOFF         PUBSEEKOFF
  107. #include <string>
  108. // (BEGIN_NCBI_SCOPE must be followed by END_NCBI_SCOPE later in this file)
  109. BEGIN_NCBI_SCOPE
  110. /** @addtogroup Stream
  111.  *
  112.  * @{
  113.  */
  114. // I/O classes
  115. /// Portable alias for streampos.
  116. typedef IO_PREFIX::streampos     CNcbiStreampos;
  117. /// Portable alias for streamoff.
  118. typedef IO_PREFIX::streamoff     CNcbiStreamoff;
  119. /// Portable alias for ios.
  120. typedef IO_PREFIX::ios           CNcbiIos;
  121. /// Portable alias for streambuf.
  122. typedef IO_PREFIX::streambuf     CNcbiStreambuf;
  123. /// Portable alias for istream.
  124. typedef IO_PREFIX::istream       CNcbiIstream;
  125. /// Portable alias for ostream.
  126. typedef IO_PREFIX::ostream       CNcbiOstream;
  127. /// Portable alias for iostream.
  128. typedef IO_PREFIX::iostream      CNcbiIostream;
  129. /// Portable alias for strstreambuf.
  130. typedef IO_PREFIX::strstreambuf  CNcbiStrstreambuf;
  131. /// Portable alias for istrstream.
  132. typedef IO_PREFIX::istrstream    CNcbiIstrstream;
  133. /// Portable alias for ostrstream.
  134. typedef IO_PREFIX::ostrstream    CNcbiOstrstream;
  135. /// Portable alias for strstream.
  136. typedef IO_PREFIX::strstream     CNcbiStrstream;
  137. /// Portable alias for filebuf.
  138. typedef IO_PREFIX::filebuf       CNcbiFilebuf;
  139. #ifdef NCBI_COMPILER_MSVC
  140. #  if _MSC_VER >= 1200  &&  _MSC_VER < 1300
  141. class CNcbiIfstream : public IO_PREFIX::ifstream
  142. {
  143. public:
  144.     CNcbiIfstream() : m_Fp(0)
  145.     {
  146.     }
  147.     explicit CNcbiIfstream(const char* s,
  148.                            IOS_BASE::openmode mode = IOS_BASE::in)
  149.     {
  150.         fastopen(s, mode);
  151.     }
  152.     void fastopen(const char* s, IOS_BASE::openmode mode = IOS_BASE::in)
  153.     {
  154.         if (is_open()  ||  !(m_Fp = __Fiopen(s, mode | in)))
  155.             setstate(failbit);
  156.         else
  157.             (void) new (rdbuf()) basic_filebuf<char, char_traits<char> >(m_Fp);
  158.     }
  159.     virtual ~CNcbiIfstream(void)
  160.     {
  161.         if (m_Fp)
  162.             fclose(m_Fp);
  163.     }
  164. private:
  165.     FILE* m_Fp;
  166. };
  167. #  else
  168. /// Portable alias for ifstream.
  169. typedef IO_PREFIX::ifstream      CNcbiIfstream;
  170. #  endif
  171. #else
  172. /// Portable alias for ifstream.
  173. typedef IO_PREFIX::ifstream      CNcbiIfstream;
  174. #endif
  175. #ifdef NCBI_COMPILER_MSVC
  176. #  if _MSC_VER >= 1200  &&  _MSC_VER < 1300
  177. class CNcbiOfstream : public IO_PREFIX::ofstream
  178. {
  179. public:
  180.     CNcbiOfstream() : m_Fp(0)
  181.     {
  182.     }
  183.     explicit CNcbiOfstream(const char* s,
  184.                            IOS_BASE::openmode mode = IOS_BASE::out)
  185.     {
  186.         fastopen(s, mode);
  187.     }
  188.     void fastopen(const char* s, IOS_BASE::openmode mode = IOS_BASE::out)
  189.     {
  190.         if (is_open()  ||  !(m_Fp = __Fiopen(s, mode | out)))
  191.             setstate(failbit);
  192.         else
  193.             (void) new (rdbuf()) basic_filebuf<char, char_traits<char> >(m_Fp);
  194.     }
  195.     virtual ~CNcbiOfstream(void)
  196.     {
  197.         if (m_Fp)
  198.             fclose(m_Fp);
  199.     }
  200. private:
  201.     FILE* m_Fp;
  202. };
  203. #  else
  204. /// Portable alias for ofstream.
  205. typedef IO_PREFIX::ofstream      CNcbiOfstream;
  206. #  endif
  207. #else
  208. /// Portable alias for ofstream.
  209. typedef IO_PREFIX::ofstream      CNcbiOfstream;
  210. #endif
  211. #ifdef NCBI_COMPILER_MSVC
  212. #  if _MSC_VER >= 1200  &&  _MSC_VER < 1300
  213. class CNcbiFstream : public IO_PREFIX::fstream
  214. {
  215. public:
  216.     CNcbiFstream() : m_Fp(0)
  217.     {
  218.     }
  219.     explicit CNcbiFstream(const char* s,
  220.                           IOS_BASE::openmode
  221.                           mode = IOS_BASE::in | IOS_BASE::out)
  222.     {
  223.         fastopen(s, mode);
  224.     }
  225.     void fastopen(const char* s, IOS_BASE::openmode
  226.                   mode = IOS_BASE::in | IOS_BASE::out)
  227.     {
  228.         if (is_open()  ||  !(m_Fp = __Fiopen(s, mode)))
  229.             setstate(failbit);
  230.         else
  231.             (void) new (rdbuf()) basic_filebuf<char, char_traits<char> >(m_Fp);
  232.     }
  233.     virtual ~CNcbiFstream(void)
  234.     {
  235.         if (m_Fp)
  236.             fclose(m_Fp);
  237.     }
  238. private:
  239.     FILE* m_Fp;
  240. };
  241. #  else
  242. /// Portable alias for fstream.
  243. typedef IO_PREFIX::fstream       CNcbiFstream;
  244. #  endif
  245. #else
  246. /// Portable alias for fstream.
  247. typedef IO_PREFIX::fstream       CNcbiFstream;
  248. #endif
  249. // Standard I/O streams
  250. #define NcbiCin                  IO_PREFIX::cin
  251. #define NcbiCout                 IO_PREFIX::cout
  252. #define NcbiCerr                 IO_PREFIX::cerr
  253. #define NcbiClog                 IO_PREFIX::clog
  254. // I/O manipulators
  255. #define NcbiEndl                 IO_PREFIX::endl
  256. #define NcbiEnds                 IO_PREFIX::ends
  257. #define NcbiFlush                IO_PREFIX::flush
  258. #define NcbiDec                  IO_PREFIX::dec
  259. #define NcbiHex                  IO_PREFIX::hex
  260. #define NcbiOct                  IO_PREFIX::oct
  261. #define NcbiWs                   IO_PREFIX::ws
  262. #define NcbiSetbase              IO_PREFIX::setbase
  263. #define NcbiResetiosflags        IO_PREFIX::resetiosflags
  264. #define NcbiSetiosflags          IO_PREFIX::setiosflags
  265. #define NcbiSetfill              IO_PREFIX::setfill
  266. #define NcbiSetprecision         IO_PREFIX::setprecision
  267. #define NcbiSetw                 IO_PREFIX::setw
  268. // I/O state
  269. #define NcbiGoodbit              IOS_PREFIX::goodbit
  270. #define NcbiEofbit               IOS_PREFIX::eofbit
  271. #define NcbiFailbit              IOS_PREFIX::failbit
  272. #define NcbiBadbit               IOS_PREFIX::badbit
  273. #define NcbiHardfail             IOS_PREFIX::hardfail
  274. // Platform-specific EndOfLine
  275. NCBI_XNCBI_EXPORT
  276. extern const char* Endl(void);
  277. // Read from "is" to "str" up to the delimiter symbol "delim"(or EOF)
  278. NCBI_XNCBI_EXPORT
  279. extern CNcbiIstream& NcbiGetline(CNcbiIstream& is, string& str, char delim);
  280. // Read from "is" to "str" the next line 
  281. // (taking into account platform specifics of End-of-Line)
  282. NCBI_XNCBI_EXPORT
  283. extern CNcbiIstream& NcbiGetlineEOL(CNcbiIstream& is, string& str);
  284. // "char_traits" may not be defined(e.g. EGCS egcs-2.91.66)
  285. #if defined(HAVE_NO_CHAR_TRAITS)
  286. #  define CT_INT_TYPE      int
  287. #  define CT_CHAR_TYPE     char
  288. #  define CT_POS_TYPE      CNcbiStreampos
  289. #  define CT_OFF_TYPE      CNcbiStreamoff
  290. #  define CT_EOF           EOF
  291. inline CT_INT_TYPE  ct_not_eof(CT_INT_TYPE i) {
  292.     return i == CT_EOF ? 0 : i;
  293. }
  294. #  define CT_NOT_EOF       ct_not_eof
  295. inline CT_INT_TYPE  ct_to_int_type(CT_CHAR_TYPE c) {
  296.     return (unsigned char)c;
  297. }
  298. #  define CT_TO_INT_TYPE   ct_to_int_type
  299. inline CT_CHAR_TYPE ct_to_char_type(CT_INT_TYPE i) {
  300.     return (unsigned char)i;
  301. }
  302. #  define CT_TO_CHAR_TYPE  ct_to_char_type
  303. inline bool ct_eq_int_type(CT_INT_TYPE i1, CT_INT_TYPE i2) {
  304.     return i1 == i2;
  305. }
  306. #  define CT_EQ_INT_TYPE   ct_eq_int_type
  307. #else  /* HAVE_NO_CHAR_TRAITS */
  308. #  define CT_INT_TYPE      NCBI_NS_STD::char_traits<char>::int_type
  309. #  define CT_CHAR_TYPE     NCBI_NS_STD::char_traits<char>::char_type
  310. #  define CT_POS_TYPE      NCBI_NS_STD::char_traits<char>::pos_type
  311. #  define CT_OFF_TYPE      NCBI_NS_STD::char_traits<char>::off_type
  312. #  define CT_EOF           NCBI_NS_STD::char_traits<char>::eof()
  313. #  define CT_NOT_EOF       NCBI_NS_STD::char_traits<char>::not_eof
  314. #  define CT_TO_INT_TYPE   NCBI_NS_STD::char_traits<char>::to_int_type
  315. #  define CT_TO_CHAR_TYPE  NCBI_NS_STD::char_traits<char>::to_char_type
  316. #  define CT_EQ_INT_TYPE   NCBI_NS_STD::char_traits<char>::eq_int_type
  317. #endif /* HAVE_NO_CHAR_TRAITS */
  318. // CNcbiOstrstreamToString class helps to convert CNcbiOstream buffer to string
  319. // Sample usage:
  320. /*
  321. string GetString(void)
  322. {
  323.     CNcbiOstrstream buffer;
  324.     buffer << "some text";
  325.     return CNcbiOstrstreamToString(buffer);
  326. }
  327. */
  328. // Note: there is no requirements to put '' char at the end of buffer
  329. class NCBI_XNCBI_EXPORT CNcbiOstrstreamToString
  330. {
  331.     CNcbiOstrstreamToString(const CNcbiOstrstreamToString&);
  332.     CNcbiOstrstreamToString& operator= (const CNcbiOstrstreamToString&);
  333. public:
  334.     CNcbiOstrstreamToString(CNcbiOstrstream& out)
  335.         : m_Out(out)
  336.         {
  337.         }
  338.     operator string(void) const;
  339. private:
  340.     CNcbiOstrstream& m_Out;
  341. };
  342. // utility class for automatic conversion of strings to uppercase letters
  343. // sample usage:
  344. //    out << "Original:  "" << str << ""n";
  345. //    out << "Uppercase: "" << Upcase(str) << ""n";
  346. // utility class for automatic conversion of strings to lowercase letters
  347. // sample usage:
  348. //    out << "Original:  "" << str << ""n";
  349. //    out << "Lowercase: "" << Locase(str) << ""n";
  350. class NCBI_XNCBI_EXPORT CUpcaseStringConverter
  351. {
  352. public:
  353.     CUpcaseStringConverter(const string& s) : m_String(s) { }
  354.     const string& m_String;
  355. };
  356. class NCBI_XNCBI_EXPORT CUpcaseCharPtrConverter
  357. {
  358. public:
  359.     CUpcaseCharPtrConverter(const char* s) : m_String(s) { }
  360.     const char* m_String;
  361. };
  362. class NCBI_XNCBI_EXPORT CLocaseStringConverter
  363. {
  364. public:
  365.     CLocaseStringConverter(const string& s) : m_String(s) { }
  366.     const string& m_String;
  367. };
  368. class NCBI_XNCBI_EXPORT CLocaseCharPtrConverter
  369. {
  370. public:
  371.     CLocaseCharPtrConverter(const char* s) : m_String(s) { }
  372.     const char* m_String;
  373. };
  374. class NCBI_XNCBI_EXPORT CPrintableStringConverter
  375. {
  376. public:
  377.     CPrintableStringConverter(const string& s) : m_String(s) { }
  378.     const string& m_String;
  379. };
  380. class NCBI_XNCBI_EXPORT CPrintableCharPtrConverter
  381. {
  382. public:
  383.     CPrintableCharPtrConverter(const char* s) : m_String(s) { }
  384.     const char* m_String;
  385. };
  386. /* @} */
  387. inline
  388. char Upcase(char c)
  389. {
  390.     return static_cast<char>(toupper(c));
  391. }
  392. inline
  393. CUpcaseStringConverter Upcase(const string& s)
  394. {
  395.     return CUpcaseStringConverter(s);
  396. }
  397. inline
  398. CUpcaseCharPtrConverter Upcase(const char* s)
  399. {
  400.     return CUpcaseCharPtrConverter(s);
  401. }
  402. inline
  403. char Locase(char c)
  404. {
  405.     return static_cast<char>(tolower(c));
  406. }
  407. inline
  408. CLocaseStringConverter Locase(const string& s)
  409. {
  410.     return CLocaseStringConverter(s);
  411. }
  412. inline
  413. CLocaseCharPtrConverter Locase(const char* s)
  414. {
  415.     return CLocaseCharPtrConverter(s);
  416. }
  417. extern string Printable(char c);
  418. inline
  419. CPrintableStringConverter Printable(const string& s)
  420. {
  421.     return CPrintableStringConverter(s);
  422. }
  423. inline
  424. CPrintableCharPtrConverter Printable(const char* s)
  425. {
  426.     return CPrintableCharPtrConverter(s);
  427. }
  428. NCBI_XNCBI_EXPORT
  429. CNcbiOstream& operator<<(CNcbiOstream& out, CUpcaseStringConverter s);
  430. NCBI_XNCBI_EXPORT
  431. CNcbiOstream& operator<<(CNcbiOstream& out, CUpcaseCharPtrConverter s);
  432. NCBI_XNCBI_EXPORT
  433. CNcbiOstream& operator<<(CNcbiOstream& out, CLocaseStringConverter s);
  434. NCBI_XNCBI_EXPORT
  435. CNcbiOstream& operator<<(CNcbiOstream& out, CLocaseCharPtrConverter s);
  436. NCBI_XNCBI_EXPORT
  437. CNcbiOstream& operator<<(CNcbiOstream& out, CPrintableStringConverter s);
  438. NCBI_XNCBI_EXPORT
  439. CNcbiOstream& operator<<(CNcbiOstream& out, CPrintableCharPtrConverter s);
  440. #ifdef NCBI_OS_MSWIN
  441. NCBI_XNCBI_EXPORT
  442. CNcbiOstream& operator<<(CNcbiOstream& out, __int64 val);
  443. #endif
  444. END_NCBI_SCOPE
  445. // Provide formatted I/O of standard C++ "string" by "old-fashioned" IOSTREAMs
  446. // NOTE:  these must have been inside the _NCBI_SCOPE and without the
  447. //        "ncbi::" and "std::" prefixes, but there is some bug in SunPro 5.0...
  448. #if defined(NCBI_USE_OLD_IOSTREAM)
  449. extern NCBI_NS_NCBI::CNcbiOstream& operator<<(NCBI_NS_NCBI::CNcbiOstream& os,
  450.                                               const NCBI_NS_STD::string& str);
  451. extern NCBI_NS_NCBI::CNcbiIstream& operator>>(NCBI_NS_NCBI::CNcbiIstream& is,
  452.                                               NCBI_NS_STD::string& str);
  453. #endif
  454. /*
  455.  * ===========================================================================
  456.  * $Log: ncbistre.hpp,v $
  457.  * Revision 1000.4  2004/06/01 19:08:14  gouriano
  458.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.40
  459.  *
  460.  * Revision 1.40  2004/04/26 14:45:08  ucko
  461.  * Continue to suppress warnings about strstream in GCC 3.4.0, which uses
  462.  * a slightly different include guard.
  463.  *
  464.  * Revision 1.39  2003/11/26 15:21:08  lavr
  465.  * Do ad-hoc fstream fix conditionally for MSVC 6 only
  466.  *
  467.  * Revision 1.38  2003/11/18 11:57:46  siyan
  468.  * Changed so @addtogroup does not cross namespace boundary
  469.  *
  470.  * Revision 1.37  2003/11/05 13:41:14  lavr
  471.  * Enforce direction in CNcbiIfstream and CNcbiOfstream for MSVC
  472.  *
  473.  * Revision 1.36  2003/10/20 15:27:17  lavr
  474.  * Implementations of CNcbiFstreams that forcedly turn on stream
  475.  * buffering in MSVC (caution: very kludgy and ad hoc solution)
  476.  *
  477.  * Revision 1.35  2003/08/24 14:32:43  siyan
  478.  * Added CORELIB___ prefix to the inclusion macros.
  479.  *
  480.  * Revision 1.34  2003/08/24 02:18:40  siyan
  481.  * Documentation changes.
  482.  *
  483.  * Revision 1.33  2003/08/19 15:41:30  dicuccio
  484.  * Added conditionally compiled prototype for operator<<(ostream&, __int64)
  485.  *
  486.  * Revision 1.32  2003/04/01 19:18:29  siyan
  487.  * Added doxygen support
  488.  *
  489.  * Revision 1.31  2002/12/18 22:53:21  dicuccio
  490.  * Added export specifier for building DLLs in windows.  Added global list of
  491.  * all such specifiers in mswin_exports.hpp, included through ncbistl.hpp
  492.  *
  493.  * Revision 1.30  2002/10/17 22:06:37  vakatov
  494.  * + Endl() -- platform-specific EndOfLine
  495.  *
  496.  * Revision 1.29  2002/08/16 17:53:54  lavr
  497.  * PUBSYNC, PUBSEEK* macros; SEEKOFF obsoleted; some formatting done
  498.  *
  499.  * Revision 1.28  2002/08/01 18:42:48  ivanov
  500.  * + NcbiGetlineEOL() -- moved from ncbireg and renamed
  501.  *
  502.  * Revision 1.27  2002/05/22 17:58:20  ucko
  503.  * Suppress GCC 3.1 warnings about <strstream>.
  504.  *
  505.  * Revision 1.26  2002/04/11 20:39:19  ivanov
  506.  * CVS log moved to end of the file
  507.  *
  508.  * Revision 1.25  2001/08/15 20:53:00  juran
  509.  * Heed warnings.
  510.  *
  511.  * Revision 1.24  2001/05/17 14:54:27  lavr
  512.  * Typos corrected
  513.  *
  514.  * Revision 1.23  2001/03/26 20:26:57  vakatov
  515.  * Added "Printable" symbol conversions (by A.Grichenko)
  516.  *
  517.  * Revision 1.22  2001/03/26 18:35:38  lavr
  518.  * CT_* macros aligned in a pretty way
  519.  *
  520.  * Revision 1.21  2001/03/24 00:32:59  lavr
  521.  * Macros added: CT_TO_INT_TYPE, CT_TO_CHAR_TYPE, CT_EQ_INT_TYPE
  522.  *
  523.  * Revision 1.20  2000/12/15 15:36:30  vasilche
  524.  * Added header corelib/ncbistr.hpp for all string utility functions.
  525.  * Optimized string utility functions.
  526.  * Added assignment operator to CRef<> and CConstRef<>.
  527.  * Add Upcase() and Locase() methods for automatic conversion.
  528.  *
  529.  * Revision 1.19  2000/12/12 14:39:46  vasilche
  530.  * Added class Locase for printing strings to ostream with automatic conversion
  531.  *
  532.  * Revision 1.18  2000/12/12 14:20:14  vasilche
  533.  * Added operator bool to CArgValue.
  534.  * Added standard typedef element_type to CRef<> and CConstRef<>.
  535.  * Macro iterate() now calls method end() only once and uses temporary variable
  536.  * Various NStr::Compare() methods made faster.
  537.  * Added class Upcase for printing strings to ostream with automatic conversion
  538.  *
  539.  * Revision 1.17  1999/12/28 18:55:25  vasilche
  540.  * Reduced size of compiled object files:
  541.  * 1. avoid inline or implicit virtual methods (especially destructors).
  542.  * 2. avoid std::string's methods usage in inline methods.
  543.  * 3. avoid string literals ("xxx") in inline methods.
  544.  *
  545.  * Revision 1.16  1999/11/09 20:57:03  vasilche
  546.  * Fixed exception with conversion empty strstream to string.
  547.  *
  548.  * Revision 1.15  1999/10/21 15:44:18  vasilche
  549.  * Added helper class CNcbiOstreamToString to convert CNcbiOstrstream buffer
  550.  * to string.
  551.  *
  552.  * Revision 1.14  1999/06/08 21:34:35  vakatov
  553.  * #HAVE_NO_CHAR_TRAITS::  handle the case of missing "std::char_traits::"
  554.  *
  555.  * Revision 1.13  1999/05/10 14:26:07  vakatov
  556.  * Fixes to compile and link with the "egcs" C++ compiler under Linux
  557.  *
  558.  * Revision 1.12  1999/05/06 23:02:38  vakatov
  559.  * Use the new(template-based, std::) stream library by default
  560.  *
  561.  * Revision 1.11  1998/12/28 17:56:29  vakatov
  562.  * New CVS and development tree structure for the NCBI C++ projects
  563.  *
  564.  * Revision 1.10  1998/12/03 18:56:12  vakatov
  565.  * minor fixes
  566.  *
  567.  * Revision 1.9  1998/12/03 16:38:32  vakatov
  568.  * Added aux. function "Getline()" to read from "istream" to a "string"
  569.  * Adopted standard I/O "string" <--> "istream" for old-fashioned streams
  570.  *
  571.  * Revision 1.8  1998/11/26 00:27:05  vakatov
  572.  * Added <iomanip[.h]> and relevant #define's NcbiXXX
  573.  *
  574.  * Revision 1.7  1998/11/06 22:42:39  vakatov
  575.  * Introduced BEGIN_, END_ and USING_ NCBI_SCOPE macros to put NCBI C++
  576.  * API to namespace "ncbi::" and to use it by default, respectively
  577.  * Introduced THROWS_NONE and THROWS(x) macros for the exception
  578.  * specifications
  579.  * Other fixes and rearrangements throughout the most of "corelib" code
  580.  *
  581.  * ==========================================================================
  582.  */
  583. #endif /* NCBISTRE__HPP */