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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: serializable.hpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/04/12 17:15:47  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.9
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef SERIALIZABLE__HPP
  10. #define SERIALIZABLE__HPP
  11. /*  $Id: serializable.hpp,v 1000.1 2004/04/12 17:15:47 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:  Michael Kholodov, Denis Vakatov
  37. *
  38. * File Description:
  39. *   General serializable interface for different output formats
  40. */
  41. #include <corelib/ncbistd.hpp>
  42. /** @addtogroup SerialDef
  43.  *
  44.  * @{
  45.  */
  46. BEGIN_NCBI_SCOPE
  47. class NCBI_XSERIAL_EXPORT CSerializable
  48. {
  49. public:
  50.     enum EOutputType {
  51.         eAsFasta, 
  52.         eAsAsnText, 
  53.         eAsAsnBinary, 
  54.         eAsXML, 
  55.         eAsString
  56.     };
  57.     class NCBI_XSERIAL_EXPORT CProxy {
  58.     public:
  59.         CProxy(const CSerializable& obj, EOutputType output_type)
  60.             : m_Obj(obj), m_OutputType(output_type) { }
  61.     private:
  62.         const CSerializable& m_Obj;
  63.         EOutputType          m_OutputType;
  64.         friend NCBI_XSERIAL_EXPORT
  65.         CNcbiOstream& operator << (CNcbiOstream& out, const CProxy& src);
  66.     };
  67.     CProxy Dump(EOutputType output_type) const;
  68. protected:
  69.     virtual void WriteAsFasta     (CNcbiOstream& out) const;
  70.     virtual void WriteAsAsnText   (CNcbiOstream& out) const;
  71.     virtual void WriteAsAsnBinary (CNcbiOstream& out) const;
  72.     virtual void WriteAsXML       (CNcbiOstream& out) const;
  73.     virtual void WriteAsString    (CNcbiOstream& out) const;
  74.     friend NCBI_XSERIAL_EXPORT
  75.     CNcbiOstream& operator << (CNcbiOstream& out, const CProxy& src);
  76. };
  77. inline
  78. CSerializable::CProxy CSerializable::Dump(EOutputType output_type)
  79.     const
  80. {
  81.     return CProxy(*this, output_type);
  82. }
  83. NCBI_XSERIAL_EXPORT
  84. CNcbiOstream& operator << (CNcbiOstream& out,
  85.                            const CSerializable::CProxy& src);
  86. END_NCBI_SCOPE
  87. #endif  /* SERIALIZABLE__HPP */
  88. /* @} */
  89. /* ---------------------------------------------------------------------------
  90. * $Log: serializable.hpp,v $
  91. * Revision 1000.1  2004/04/12 17:15:47  gouriano
  92. * PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.9
  93. *
  94. * Revision 1.9  2004/01/20 15:11:19  dicuccio
  95. * Oops, forgot one export specifier.  Fixed code formatting.
  96. *
  97. * Revision 1.8  2004/01/20 14:58:47  dicuccio
  98. * FIxed use of export specifiers - located before return type of function
  99. *
  100. * Revision 1.7  2004/01/16 22:10:40  ucko
  101. * Tweak to use a proxy class to avoid clashing with new support for
  102. * feeding CSerialObject to streams.
  103. *
  104. * Revision 1.6  2003/04/15 16:18:53  siyan
  105. * Added doxygen support
  106. *
  107. * Revision 1.5  2003/03/26 16:13:33  vasilche
  108. * Removed TAB symbols. Some formatting.
  109. *
  110. * Revision 1.4  2002/12/23 18:38:51  dicuccio
  111. * Added WIn32 export specifier: NCBI_XSERIAL_EXPORT.
  112. * Moved all CVS logs to the end.
  113. *
  114. * Revision 1.3  2001/05/21 14:38:38  kholodov
  115. * Added: method WriteAsString() for string representation of an object.
  116. *
  117. * Revision 1.2  2001/04/17 04:08:01  vakatov
  118. * Redesigned from a pure interface (ISerializable) into a regular
  119. * base class (CSerializable) to make its usage safer, more formal and
  120. * less bulky.
  121. *
  122. * Revision 1.1  2001/04/12 17:01:04  kholodov
  123. * General serializable interface for different output formats
  124. *
  125. * ===========================================================================
  126. */