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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: blocktype.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2003/10/29 17:33:56  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.13
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef BLOCKTYPE_HPP
  10. #define BLOCKTYPE_HPP
  11. /*  $Id: blocktype.hpp,v 1000.0 2003/10/29 17:33:56 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. *   Type description of compound types: SET, SEQUENCE and CHOICE
  40. *
  41. * ---------------------------------------------------------------------------
  42. * $Log: blocktype.hpp,v $
  43. * Revision 1000.0  2003/10/29 17:33:56  gouriano
  44. * PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.13
  45. *
  46. * Revision 1.13  2003/05/14 14:42:55  gouriano
  47. * added generation of XML schema
  48. *
  49. * Revision 1.12  2002/11/19 19:47:50  gouriano
  50. * added support of XML attributes of choice variants
  51. *
  52. * Revision 1.11  2002/11/14 21:07:11  gouriano
  53. * added support of XML attribute lists
  54. *
  55. * Revision 1.10  2002/10/15 13:53:08  gouriano
  56. * use "noprefix" flag
  57. *
  58. * Revision 1.9  2001/05/17 15:00:42  lavr
  59. * Typos corrected
  60. *
  61. * Revision 1.8  2000/11/29 17:42:29  vasilche
  62. * Added CComment class for storing/printing ASN.1/XML module comments.
  63. * Added srcutil.hpp file to reduce file dependency.
  64. *
  65. * Revision 1.7  2000/11/15 20:34:41  vasilche
  66. * Added user comments to ENUMERATED types.
  67. * Added storing of user comments to ASN.1 module definition.
  68. *
  69. * Revision 1.6  2000/11/14 21:41:12  vasilche
  70. * Added preserving of ASN.1 definition comments.
  71. *
  72. * Revision 1.5  2000/08/25 15:58:45  vasilche
  73. * Renamed directory tool -> datatool.
  74. *
  75. * Revision 1.4  2000/06/16 16:31:12  vasilche
  76. * Changed implementation of choices and classes info to allow use of the same classes in generated and user written classes.
  77. *
  78. * Revision 1.3  2000/05/24 20:08:30  vasilche
  79. * Implemented DTD generation.
  80. *
  81. * Revision 1.2  2000/04/07 19:26:07  vasilche
  82. * Added namespace support to datatool.
  83. * By default with argument -oR datatool will generate objects in namespace
  84. * NCBI_NS_NCBI::objects (aka ncbi::objects).
  85. * Datatool's classes also moved to NCBI namespace.
  86. *
  87. * Revision 1.1  2000/02/01 21:46:14  vasilche
  88. * Added CGeneratedChoiceTypeInfo for generated choice classes.
  89. * Removed CMemberInfo subclasses.
  90. * Added support for DEFAULT/OPTIONAL members.
  91. * Changed class generation.
  92. * Moved datatool headers to include/internal/serial/tool.
  93. *
  94. * Revision 1.5  1999/12/03 21:42:11  vasilche
  95. * Fixed conflict of enums in choices.
  96. *
  97. * Revision 1.4  1999/12/01 17:36:25  vasilche
  98. * Fixed CHOICE processing.
  99. *
  100. * Revision 1.3  1999/11/15 20:31:38  vasilche
  101. * Fixed error on GCC
  102. *
  103. * Revision 1.2  1999/11/15 19:36:13  vasilche
  104. * Fixed warnings on GCC
  105. *
  106. * ===========================================================================
  107. */
  108. #include <serial/datatool/type.hpp>
  109. #include <list>
  110. BEGIN_NCBI_SCOPE
  111. class CClassTypeInfo;
  112. class CDataMember {
  113. public:
  114.     CDataMember(const string& name, const AutoPtr<CDataType>& type);
  115.     ~CDataMember(void);
  116.     void PrintASN(CNcbiOstream& out, int indent, bool last) const;
  117.     void PrintDTD(CNcbiOstream& out) const;
  118.     void PrintXMLSchema(CNcbiOstream& out) const;
  119.     void PrintXMLSchemaElement(CNcbiOstream& out) const;
  120.     bool Check(void) const;
  121.     const string& GetName(void) const
  122.         {
  123.             return m_Name;
  124.         }
  125.     CDataType* GetType(void)
  126.         {
  127.             return m_Type.get();
  128.         }
  129.     const CDataType* GetType(void) const
  130.         {
  131.             return m_Type.get();
  132.         }
  133.     bool Optional(void) const
  134.         {
  135.             return m_Optional || m_Default;
  136.         }
  137.     bool NoPrefix(void) const
  138.         {
  139.             return m_NoPrefix;
  140.         }
  141.     bool Attlist(void) const
  142.         {
  143.             return m_Attlist;
  144.         }
  145.     bool Notag(void) const
  146.         {
  147.             return m_Notag;
  148.         }
  149.     bool SimpleType(void) const
  150.         {
  151.             return m_SimpleType;
  152.         }
  153.     const CDataValue* GetDefault(void) const
  154.         {
  155.             return m_Default.get();
  156.         }
  157.     void SetOptional(void);
  158.     void SetNoPrefix(void);
  159.     void SetAttlist(void);
  160.     void SetNotag(void);
  161.     void SetSimpleType(void);
  162.     void SetDefault(const AutoPtr<CDataValue>& value);
  163.     CComments& Comments(void)
  164.         {
  165.             return m_Comments;
  166.         }
  167. private:
  168.     string m_Name;
  169.     AutoPtr<CDataType> m_Type;
  170.     bool m_Optional;
  171.     bool m_NoPrefix;
  172.     bool m_Attlist;
  173.     bool m_Notag;
  174.     bool m_SimpleType;
  175.     AutoPtr<CDataValue> m_Default;
  176.     CComments m_Comments;
  177. };
  178. class CDataMemberContainerType : public CDataType {
  179.     typedef CDataType CParent;
  180. public:
  181.     typedef list< AutoPtr<CDataMember> > TMembers;
  182.     void PrintASN(CNcbiOstream& out, int indent) const;
  183.     void PrintDTDElement(CNcbiOstream& out) const;
  184.     void PrintDTDExtra(CNcbiOstream& out) const;
  185.     void PrintXMLSchemaElement(CNcbiOstream& out) const;
  186.     void PrintXMLSchemaExtra(CNcbiOstream& out) const;
  187.     void FixTypeTree(void) const;
  188.     bool CheckType(void) const;
  189.     void AddMember(const AutoPtr<CDataMember>& member);
  190.     TObjectPtr CreateDefault(const CDataValue& value) const;
  191.     virtual const char* GetASNKeyword(void) const = 0;
  192.     virtual const char* XmlMemberSeparator(void) const = 0;
  193.     const TMembers& GetMembers(void) const
  194.         {
  195.             return m_Members;
  196.         }
  197.     CComments& LastComments(void)
  198.         {
  199.             return m_LastComments;
  200.         }
  201. private:
  202.     TMembers m_Members;
  203.     CComments m_LastComments;
  204. };
  205. class CDataContainerType : public CDataMemberContainerType {
  206.     typedef CDataMemberContainerType CParent;
  207. public:
  208.     CTypeInfo* CreateTypeInfo(void);
  209.     
  210.     virtual const char* XmlMemberSeparator(void) const;
  211.     AutoPtr<CTypeStrings> GenerateCode(void) const;
  212.     AutoPtr<CTypeStrings> GetFullCType(void) const;
  213.     AutoPtr<CTypeStrings> GetRefCType(void) const;
  214. protected:
  215.     virtual CClassTypeInfo* CreateClassInfo(void);
  216. };
  217. class CDataSetType : public CDataContainerType {
  218.     typedef CDataContainerType CParent;
  219. public:
  220.     bool CheckValue(const CDataValue& value) const;
  221.     virtual const char* GetASNKeyword(void) const;
  222. protected:
  223.     CClassTypeInfo* CreateClassInfo(void);
  224. };
  225. class CDataSequenceType : public CDataContainerType {
  226.     typedef CDataContainerType CParent;
  227. public:
  228.     bool CheckValue(const CDataValue& value) const;
  229.     virtual const char* GetASNKeyword(void) const;
  230. };
  231. END_NCBI_SCOPE
  232. #endif