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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: namespace.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2003/10/29 17:36:55  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.4
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef NAMESPACE__HPP
  10. #define NAMESPACE__HPP
  11. /*  $Id: namespace.hpp,v 1000.0 2003/10/29 17:36:55 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: Eugene Vasilchenko
  37. *
  38. * File Description:
  39. *   !!! PUT YOUR DESCRIPTION HERE !!!
  40. *
  41. * ---------------------------------------------------------------------------
  42. * $Log: namespace.hpp,v $
  43. * Revision 1000.0  2003/10/29 17:36:55  gouriano
  44. * PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.4
  45. *
  46. * Revision 1.4  2000/08/25 15:58:47  vasilche
  47. * Renamed directory tool -> datatool.
  48. *
  49. * Revision 1.3  2000/04/28 16:58:08  vasilche
  50. * Added classes CByteSource and CByteSourceReader for generic reading.
  51. * Added delayed reading of choice variants.
  52. *
  53. * Revision 1.2  2000/04/12 15:36:41  vasilche
  54. * Added -on <namespace> argument to datatool.
  55. * Removed unnecessary namespace specifications in generated files.
  56. *
  57. * Revision 1.1  2000/04/07 19:26:10  vasilche
  58. * Added namespace support to datatool.
  59. * By default with argument -oR datatool will generate objects in namespace
  60. * NCBI_NS_NCBI::objects (aka ncbi::objects).
  61. * Datatool's classes also moved to NCBI namespace.
  62. *
  63. * ===========================================================================
  64. */
  65. #include <corelib/ncbistd.hpp>
  66. #include <vector>
  67. BEGIN_NCBI_SCOPE
  68. class CNamespace
  69. {
  70. public:
  71.     typedef vector<string> TNamespaces;
  72.     CNamespace(void);
  73.     CNamespace(const string& s);
  74.     void Set(const CNamespace& ns, CNcbiOstream& out, bool mainHeader = true);
  75.     string GetNamespaceRef(const CNamespace& ns) const;
  76.     void Reset(void)
  77.         {
  78.             m_Namespaces.clear();
  79.         }
  80.     void Reset(CNcbiOstream& out)
  81.         {
  82.             CloseAllAbove(0, out);
  83.         }
  84.     CNcbiOstream& PrintFullName(CNcbiOstream& out) const;
  85.     operator string(void) const
  86.         {
  87.             string s;
  88.             ToStringTo(s);
  89.             return s;
  90.         }
  91.     string ToString(void) const
  92.         {
  93.             string s;
  94.             ToStringTo(s);
  95.             return s;
  96.         }
  97.     bool operator==(const CNamespace& ns) const
  98.         {
  99.             size_t myLevel = GetNamespaceLevel();
  100.             return ns.GetNamespaceLevel() == myLevel &&
  101.                 EqualLevels(ns) == myLevel;
  102.         }
  103.     static const CNamespace KEmptyNamespace;
  104.     static const CNamespace KNCBINamespace;
  105.     static const CNamespace KSTDNamespace;
  106.     static const string KNCBINamespaceName;
  107.     static const string KSTDNamespaceName;
  108.     static const string KNCBINamespaceDefine;
  109.     static const string KSTDNamespaceDefine;
  110.     bool IsEmpty(void) const
  111.         {
  112.             return m_Namespaces.empty();
  113.         }
  114.     bool InNCBI(void) const
  115.         {
  116.             return m_Namespaces.size() > 0 &&
  117.                 m_Namespaces[0] == KNCBINamespaceName;
  118.         }
  119.     bool InSTD(void) const
  120.         {
  121.             return m_Namespaces.size() > 0 &&
  122.                 m_Namespaces[0] == KSTDNamespaceName;
  123.         }
  124.     bool IsNCBI(void) const
  125.         {
  126.             return m_Namespaces.size() == 1 &&
  127.                 m_Namespaces[0] == KNCBINamespaceName;
  128.         }
  129.     bool IsSTD(void) const
  130.         {
  131.             return m_Namespaces.size() == 1 &&
  132.                 m_Namespaces[0] == KSTDNamespaceName;
  133.         }
  134.     operator bool(void) const
  135.         {
  136.             return !IsEmpty();
  137.         }
  138.     operator bool(void)
  139.         {
  140.             return !IsEmpty();
  141.         }
  142.     bool operator!(void) const
  143.         {
  144.             return IsEmpty();
  145.         }
  146. protected:
  147.     const TNamespaces& GetNamespaces(void) const
  148.         {
  149.             return m_Namespaces;
  150.         }
  151.     size_t GetNamespaceLevel(void) const
  152.         {
  153.             return m_Namespaces.size();
  154.         }
  155.     void Open(const string& s, CNcbiOstream& out, bool mainHeader = true);
  156.     void Close(CNcbiOstream& out);
  157.     void CloseAllAbove(size_t level, CNcbiOstream& out);
  158.     size_t EqualLevels(const CNamespace& ns) const;
  159.     void ToStringTo(string& s) const;
  160.     TNamespaces m_Namespaces;
  161. };
  162. inline
  163. CNcbiOstream& operator<<(CNcbiOstream& out, const CNamespace& ns)
  164. {
  165.     return ns.PrintFullName(out);
  166. }
  167. //#include <serial/datatool/namespace.inl>
  168. END_NCBI_SCOPE
  169. #endif  /* NAMESPACE__HPP */