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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: value.hpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/04/12 17:16:23  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.6
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef VALUE_HPP
  10. #define VALUE_HPP
  11. /*  $Id: value.hpp,v 1000.1 2004/04/12 17:16:23 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. *   Value definition (used in DEFAULT clause)
  40. *
  41. * ---------------------------------------------------------------------------
  42. * $Log: value.hpp,v $
  43. * Revision 1000.1  2004/04/12 17:16:23  gouriano
  44. * PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.6
  45. *
  46. * Revision 1.6  2004/02/25 19:45:48  gouriano
  47. * Made it possible to define DEFAULT for data members of type REAL
  48. *
  49. * Revision 1.5  2003/10/02 19:39:48  gouriano
  50. * properly handle invalid enumeration values in ASN spec
  51. *
  52. * Revision 1.4  2003/06/16 14:40:15  gouriano
  53. * added possibility to convert DTD to XML schema
  54. *
  55. * Revision 1.3  2000/12/15 15:38:36  vasilche
  56. * Added support of Int8 and long double.
  57. * Added support of BigInt ASN.1 extension - mapped to Int8.
  58. * Enum values now have type Int4 instead of long.
  59. *
  60. * Revision 1.2  2000/04/07 19:26:15  vasilche
  61. * Added namespace support to datatool.
  62. * By default with argument -oR datatool will generate objects in namespace
  63. * NCBI_NS_NCBI::objects (aka ncbi::objects).
  64. * Datatool's classes also moved to NCBI namespace.
  65. *
  66. * Revision 1.1  2000/02/01 21:46:25  vasilche
  67. * Added CGeneratedChoiceTypeInfo for generated choice classes.
  68. * Removed CMemberInfo subclasses.
  69. * Added support for DEFAULT/OPTIONAL members.
  70. * Changed class generation.
  71. * Moved datatool headers to include/internal/serial/tool.
  72. *
  73. * Revision 1.9  1999/12/29 16:01:53  vasilche
  74. * Added explicit virtual destructors.
  75. * Resolved overloading of InternalResolve.
  76. *
  77. * Revision 1.8  1999/11/19 15:48:11  vasilche
  78. * Modified AutoPtr template to allow its use in STL containers (map, vector etc.)
  79. *
  80. * Revision 1.7  1999/11/15 19:36:22  vasilche
  81. * Fixed warnings on GCC
  82. *
  83. * ===========================================================================
  84. */
  85. #include <corelib/ncbistd.hpp>
  86. #include <corelib/ncbistre.hpp>
  87. #include <corelib/ncbiutil.hpp>
  88. #include <list>
  89. BEGIN_NCBI_SCOPE
  90. class CDataTypeModule;
  91. class CDataValue {
  92. public:
  93.     CDataValue(void);
  94.     virtual ~CDataValue(void);
  95.     virtual void PrintASN(CNcbiOstream& out, int indent) const = 0;
  96.     virtual string GetXmlString(void) const = 0;
  97.     void Warning(const string& mess) const;
  98.     string LocationString(void) const;
  99.     const string& GetSourceFileName(void) const;
  100.     void SetModule(const CDataTypeModule* module) const;
  101.     int GetSourceLine(void) const
  102.         {
  103.             return m_SourceLine;
  104.         }
  105.     void SetSourceLine(int line);
  106.     
  107.     virtual bool IsComplex(void) const;
  108. private:
  109.     mutable const CDataTypeModule* m_Module;
  110.     int m_SourceLine;
  111. private:
  112.     CDataValue(const CDataValue&);
  113.     CDataValue& operator=(const CDataValue&);
  114. };
  115. class CNullDataValue : public CDataValue {
  116. public:
  117.     ~CNullDataValue(void);
  118.     void PrintASN(CNcbiOstream& out, int indent) const;
  119.     virtual string GetXmlString(void) const;
  120. };
  121. template<typename Type>
  122. class CDataValueTmpl : public CDataValue {
  123. public:
  124.     typedef Type TValueType;
  125.     CDataValueTmpl(const TValueType& v)
  126.         : m_Value(v)
  127.         {
  128.         }
  129.     ~CDataValueTmpl(void)
  130.         {
  131.         }
  132.     void PrintASN(CNcbiOstream& out, int indent) const;
  133.     virtual string GetXmlString(void) const;
  134.     const TValueType& GetValue(void) const
  135.         {
  136.             return m_Value;
  137.         }
  138. private:
  139.     TValueType m_Value;
  140. };
  141. typedef CDataValueTmpl<bool> CBoolDataValue;
  142. typedef CDataValueTmpl<Int4> CIntDataValue;
  143. typedef CDataValueTmpl<double> CDoubleDataValue;
  144. typedef CDataValueTmpl<string> CStringDataValue;
  145. class CBitStringDataValue : public CStringDataValue {
  146. public:
  147.     CBitStringDataValue(const string& v)
  148.         : CStringDataValue(v)
  149.         {
  150.         }
  151.     ~CBitStringDataValue(void);
  152.     void PrintASN(CNcbiOstream& out, int indent) const;
  153.     virtual string GetXmlString(void) const;
  154. };
  155. class CIdDataValue : public CStringDataValue {
  156. public:
  157.     CIdDataValue(const string& v)
  158.         : CStringDataValue(v)
  159.         {
  160.         }
  161.     ~CIdDataValue(void);
  162.     void PrintASN(CNcbiOstream& out, int indent) const;
  163.     virtual string GetXmlString(void) const;
  164. };
  165. class CNamedDataValue : public CDataValue {
  166. public:
  167.     CNamedDataValue(const string& id, const AutoPtr<CDataValue>& v)
  168.         : m_Name(id), m_Value(v)
  169.         {
  170.         }
  171.     ~CNamedDataValue(void);
  172.     void PrintASN(CNcbiOstream& out, int indent) const;
  173.     virtual string GetXmlString(void) const;
  174.     const string& GetName(void) const
  175.         {
  176.             return m_Name;
  177.         }
  178.     const CDataValue& GetValue(void) const
  179.         {
  180.             return *m_Value;
  181.         }
  182.     CDataValue& GetValue(void)
  183.         {
  184.             return *m_Value;
  185.         }
  186.     virtual bool IsComplex(void) const;
  187. private:
  188.     string m_Name;
  189.     AutoPtr<CDataValue> m_Value;
  190. };
  191. class CBlockDataValue : public CDataValue {
  192. public:
  193.     typedef list<AutoPtr<CDataValue> > TValues;
  194.     ~CBlockDataValue(void);
  195.     void PrintASN(CNcbiOstream& out, int indent) const;
  196.     virtual string GetXmlString(void) const;
  197.     TValues& GetValues(void)
  198.         {
  199.             return m_Values;
  200.         }
  201.     const TValues& GetValues(void) const
  202.         {
  203.             return m_Values;
  204.         }
  205.     virtual bool IsComplex(void) const;
  206. private:
  207.     TValues m_Values;
  208. };
  209. END_NCBI_SCOPE
  210. #endif