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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: objectiter.hpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/01 19:38:47  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.11
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef OBJECTITER__HPP
  10. #define OBJECTITER__HPP
  11. /*  $Id: objectiter.hpp,v 1000.2 2004/06/01 19:38: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: Eugene Vasilchenko
  37. *
  38. * File Description:
  39. *   !!! PUT YOUR DESCRIPTION HERE !!!
  40. */
  41. #include <corelib/ncbistd.hpp>
  42. #include <serial/objectinfo.hpp>
  43. /** @addtogroup UserCodeSupport
  44.  *
  45.  * @{
  46.  */
  47. BEGIN_NCBI_SCOPE
  48. class NCBI_XSERIAL_EXPORT CConstObjectInfoEI
  49. {
  50. public:
  51.     CConstObjectInfoEI(void);
  52.     CConstObjectInfoEI(const CConstObjectInfo& object);
  53.     CConstObjectInfoEI& operator=(const CConstObjectInfo& object);
  54.     bool Valid(void) const;
  55.     operator bool(void) const;
  56.     bool operator!(void) const;
  57.     void Next(void);
  58.     CConstObjectInfoEI& operator++(void);
  59.     CConstObjectInfo GetElement(void) const;
  60.     CConstObjectInfo operator*(void) const;
  61.     bool CanGet(void) const
  62.     {
  63.         return true;
  64.     }
  65. private:
  66.     bool CheckValid(void) const;
  67.     void ReportNonValid(void) const;
  68.     
  69.     CConstContainerElementIterator m_Iterator;
  70. #if _DEBUG
  71.     mutable enum { eNone, eValid, eNext, eErase } m_LastCall;
  72. #endif
  73. };
  74. class NCBI_XSERIAL_EXPORT CObjectInfoEI
  75. {
  76. public:
  77.     CObjectInfoEI(void);
  78.     CObjectInfoEI(const CObjectInfo& object);
  79.     CObjectInfoEI& operator=(const CObjectInfo& object);
  80.     bool Valid(void) const;
  81.     operator bool(void) const;
  82.     bool operator!(void) const;
  83.     void Next(void);
  84.     CObjectInfoEI& operator++(void);
  85.     CObjectInfo GetElement(void) const;
  86.     CObjectInfo operator*(void) const;
  87.     void Erase(void);
  88.     bool CanGet(void) const
  89.     {
  90.         return true;
  91.     }
  92. private:
  93.     bool CheckValid(void) const;
  94.     void ReportNonValid(void) const;
  95.     CContainerElementIterator m_Iterator;
  96. #if _DEBUG
  97.     mutable enum { eNone, eValid, eNext, eErase } m_LastCall;
  98. #endif
  99. };
  100. class NCBI_XSERIAL_EXPORT CObjectTypeInfoII // item iterator (either member or variant)
  101. {
  102. public:
  103.     const string& GetAlias(void) const;
  104.     
  105.     bool Valid(void) const;
  106.     operator bool(void) const;
  107.     bool operator!(void) const;
  108.     
  109.     bool operator==(const CObjectTypeInfoII& iter) const;
  110.     bool operator!=(const CObjectTypeInfoII& iter) const;
  111.     
  112.     void Next(void);
  113. protected:
  114.     CObjectTypeInfoII(void);
  115.     CObjectTypeInfoII(const CClassTypeInfoBase* typeInfo);
  116.     CObjectTypeInfoII(const CClassTypeInfoBase* typeInfo, TMemberIndex index);
  117.     
  118.     const CObjectTypeInfo& GetOwnerType(void) const;
  119.     const CClassTypeInfoBase* GetClassTypeInfoBase(void) const;
  120.     TMemberIndex GetItemIndex(void) const;
  121.     const CItemInfo* GetItemInfo(void) const;
  122.     void Init(const CClassTypeInfoBase* typeInfo);
  123.     void Init(const CClassTypeInfoBase* typeInfo, TMemberIndex index);
  124.     bool CanGet(void) const
  125.     {
  126.         return true;
  127.     }
  128. private:
  129.     CObjectTypeInfo m_OwnerType;
  130.     TMemberIndex m_ItemIndex;
  131.     TMemberIndex m_LastItemIndex;
  132.     
  133.     void ReportNonValid(void) const;
  134.     
  135. protected:
  136. #if _DEBUG
  137.     mutable enum { eNone, eValid, eNext, eErase } m_LastCall;
  138. #endif
  139.     bool CheckValid(void) const;
  140. };
  141. class NCBI_XSERIAL_EXPORT CObjectTypeInfoMI : public CObjectTypeInfoII
  142. {
  143.     typedef CObjectTypeInfoII CParent;
  144. public:
  145.     CObjectTypeInfoMI(void);
  146.     CObjectTypeInfoMI(const CObjectTypeInfo& info);
  147.     CObjectTypeInfoMI(const CObjectTypeInfo& info, TMemberIndex index);
  148.     TMemberIndex GetMemberIndex(void) const;
  149.     CObjectTypeInfoMI& operator++(void);
  150.     CObjectTypeInfoMI& operator=(const CObjectTypeInfo& info);
  151.     CObjectTypeInfo GetClassType(void) const;
  152.     operator CObjectTypeInfo(void) const;
  153.     CObjectTypeInfo GetMemberType(void) const;
  154.     CObjectTypeInfo operator*(void) const;
  155.     void SetLocalReadHook(CObjectIStream& stream,
  156.                           CReadClassMemberHook* hook) const;
  157.     void SetGlobalReadHook(CReadClassMemberHook* hook) const;
  158.     void ResetLocalReadHook(CObjectIStream& stream) const;
  159.     void ResetGlobalReadHook(void) const;
  160.     void SetPathReadHook(CObjectIStream* in, const string& path,
  161.                          CReadClassMemberHook* hook) const;
  162.     void SetLocalWriteHook(CObjectOStream& stream,
  163.                           CWriteClassMemberHook* hook) const;
  164.     void SetGlobalWriteHook(CWriteClassMemberHook* hook) const;
  165.     void ResetLocalWriteHook(CObjectOStream& stream) const;
  166.     void ResetGlobalWriteHook(void) const;
  167.     void SetPathWriteHook(CObjectOStream* stream, const string& path,
  168.                           CWriteClassMemberHook* hook) const;
  169.     void SetLocalSkipHook(CObjectIStream& stream,
  170.                           CSkipClassMemberHook* hook) const;
  171.     void SetGlobalSkipHook(CSkipClassMemberHook* hook) const;
  172.     void ResetLocalSkipHook(CObjectIStream& stream) const;
  173.     void ResetGlobalSkipHook(void) const;
  174.     void SetPathSkipHook(CObjectIStream* stream, const string& path,
  175.                          CSkipClassMemberHook* hook) const;
  176.     void SetLocalCopyHook(CObjectStreamCopier& stream,
  177.                           CCopyClassMemberHook* hook) const;
  178.     void SetGlobalCopyHook(CCopyClassMemberHook* hook) const;
  179.     void ResetLocalCopyHook(CObjectStreamCopier& stream) const;
  180.     void ResetGlobalCopyHook(void) const;
  181.     void SetPathCopyHook(CObjectStreamCopier* stream, const string& path,
  182.                          CCopyClassMemberHook* hook) const;
  183. public: // mostly for internal use
  184.     const CMemberInfo* GetMemberInfo(void) const;
  185. protected:
  186.     void Init(const CObjectTypeInfo& info);
  187.     void Init(const CObjectTypeInfo& info, TMemberIndex index);
  188.     const CClassTypeInfo* GetClassTypeInfo(void) const;
  189.     bool IsSet(const CConstObjectInfo& object) const;
  190. private:
  191.     CMemberInfo* GetNCMemberInfo(void) const;
  192. };
  193. class NCBI_XSERIAL_EXPORT CObjectTypeInfoVI : public CObjectTypeInfoII
  194. {
  195.     typedef CObjectTypeInfoII CParent;
  196. public:
  197.     CObjectTypeInfoVI(const CObjectTypeInfo& info);
  198.     CObjectTypeInfoVI(const CObjectTypeInfo& info, TMemberIndex index);
  199.     TMemberIndex GetVariantIndex(void) const;
  200.     CObjectTypeInfoVI& operator++(void);
  201.     CObjectTypeInfoVI& operator=(const CObjectTypeInfo& info);
  202.     CObjectTypeInfo GetChoiceType(void) const;
  203.     CObjectTypeInfo GetVariantType(void) const;
  204.     CObjectTypeInfo operator*(void) const;
  205.     void SetLocalReadHook(CObjectIStream& stream,
  206.                           CReadChoiceVariantHook* hook) const;
  207.     void SetGlobalReadHook(CReadChoiceVariantHook* hook) const;
  208.     void ResetLocalReadHook(CObjectIStream& stream) const;
  209.     void ResetGlobalReadHook(void) const;
  210.     void SetPathReadHook(CObjectIStream* stream, const string& path,
  211.                          CReadChoiceVariantHook* hook) const;
  212.     void SetLocalWriteHook(CObjectOStream& stream,
  213.                           CWriteChoiceVariantHook* hook) const;
  214.     void SetGlobalWriteHook(CWriteChoiceVariantHook* hook) const;
  215.     void ResetLocalWriteHook(CObjectOStream& stream) const;
  216.     void ResetGlobalWriteHook(void) const;
  217.     void SetPathWriteHook(CObjectOStream* stream, const string& path,
  218.                           CWriteChoiceVariantHook* hook) const;
  219.     void SetLocalSkipHook(CObjectIStream& stream,
  220.                           CSkipChoiceVariantHook* hook) const;
  221.     void SetGlobalSkipHook(CSkipChoiceVariantHook* hook) const;
  222.     void ResetLocalSkipHook(CObjectIStream& stream) const;
  223.     void ResetGlobalSkipHook(void) const;
  224.     void SetPathSkipHook(CObjectIStream* stream, const string& path,
  225.                          CSkipChoiceVariantHook* hook) const;
  226.     void SetLocalCopyHook(CObjectStreamCopier& stream,
  227.                           CCopyChoiceVariantHook* hook) const;
  228.     void SetGlobalCopyHook(CCopyChoiceVariantHook* hook) const;
  229.     void ResetLocalCopyHook(CObjectStreamCopier& stream) const;
  230.     void ResetGlobalCopyHook(void) const;
  231.     void SetPathCopyHook(CObjectStreamCopier* stream, const string& path,
  232.                          CCopyChoiceVariantHook* hook) const;
  233. public: // mostly for internal use
  234.     const CVariantInfo* GetVariantInfo(void) const;
  235. protected:
  236.     void Init(const CObjectTypeInfo& info);
  237.     void Init(const CObjectTypeInfo& info, TMemberIndex index);
  238.     const CChoiceTypeInfo* GetChoiceTypeInfo(void) const;
  239. private:
  240.     CVariantInfo* GetNCVariantInfo(void) const;
  241. };
  242. class NCBI_XSERIAL_EXPORT CConstObjectInfoMI : public CObjectTypeInfoMI
  243. {
  244.     typedef CObjectTypeInfoMI CParent;
  245. public:
  246.     CConstObjectInfoMI(void);
  247.     CConstObjectInfoMI(const CConstObjectInfo& object);
  248.     CConstObjectInfoMI(const CConstObjectInfo& object, TMemberIndex index);
  249.     
  250.     const CConstObjectInfo& GetClassObject(void) const;
  251.     
  252.     CConstObjectInfoMI& operator=(const CConstObjectInfo& object);
  253.     
  254.     bool IsSet(void) const;
  255.     CConstObjectInfo GetMember(void) const;
  256.     CConstObjectInfo operator*(void) const;
  257.     bool CanGet(void) const;
  258. private:
  259.     pair<TConstObjectPtr, TTypeInfo> GetMemberPair(void) const;
  260.     CConstObjectInfo m_Object;
  261. };
  262. class NCBI_XSERIAL_EXPORT CObjectInfoMI : public CObjectTypeInfoMI
  263. {
  264.     typedef CObjectTypeInfoMI CParent;
  265. public:
  266.     CObjectInfoMI(void);
  267.     CObjectInfoMI(const CObjectInfo& object);
  268.     CObjectInfoMI(const CObjectInfo& object, TMemberIndex index);
  269.     
  270.     const CObjectInfo& GetClassObject(void) const;
  271.     
  272.     CObjectInfoMI& operator=(const CObjectInfo& object);
  273.     
  274.     bool IsSet(void) const;
  275.     CObjectInfo GetMember(void) const;
  276.     CObjectInfo operator*(void) const;
  277.     // reset value of member to default state
  278.     enum EEraseFlag {
  279.         eErase_Optional, // default - erase optional member only
  280.         eErase_Mandatory // allow erasing mandatory members, may be dangerous!
  281.     };
  282.     void Erase(EEraseFlag flag = eErase_Optional);
  283.     void Reset(void);
  284.     bool CanGet(void) const;
  285. private:
  286.     pair<TObjectPtr, TTypeInfo> GetMemberPair(void) const;
  287.     CObjectInfo m_Object;
  288. };
  289. class NCBI_XSERIAL_EXPORT CObjectTypeInfoCV
  290. {
  291. public:
  292.     CObjectTypeInfoCV(void);
  293.     CObjectTypeInfoCV(const CObjectTypeInfo& info);
  294.     CObjectTypeInfoCV(const CObjectTypeInfo& info, TMemberIndex index);
  295.     CObjectTypeInfoCV(const CConstObjectInfo& object);
  296.     TMemberIndex GetVariantIndex(void) const;
  297.     const string& GetAlias(void) const;
  298.     bool Valid(void) const;
  299.     operator bool(void) const;
  300.     bool operator!(void) const;
  301.     bool operator==(const CObjectTypeInfoCV& iter) const;
  302.     bool operator!=(const CObjectTypeInfoCV& iter) const;
  303.     CObjectTypeInfoCV& operator=(const CObjectTypeInfo& info);
  304.     CObjectTypeInfoCV& operator=(const CConstObjectInfo& object);
  305.     CObjectTypeInfo GetChoiceType(void) const;
  306.     CObjectTypeInfo GetVariantType(void) const;
  307.     CObjectTypeInfo operator*(void) const;
  308.     void SetLocalReadHook(CObjectIStream& stream,
  309.                           CReadChoiceVariantHook* hook) const;
  310.     void SetGlobalReadHook(CReadChoiceVariantHook* hook) const;
  311.     void ResetLocalReadHook(CObjectIStream& stream) const;
  312.     void ResetGlobalReadHook(void) const;
  313.     void SetPathReadHook(CObjectIStream* stream, const string& path,
  314.                          CReadChoiceVariantHook* hook) const;
  315.     void SetLocalWriteHook(CObjectOStream& stream,
  316.                           CWriteChoiceVariantHook* hook) const;
  317.     void SetGlobalWriteHook(CWriteChoiceVariantHook* hook) const;
  318.     void ResetLocalWriteHook(CObjectOStream& stream) const;
  319.     void ResetGlobalWriteHook(void) const;
  320.     void SetPathWriteHook(CObjectOStream* stream, const string& path,
  321.                           CWriteChoiceVariantHook* hook) const;
  322.     void SetLocalCopyHook(CObjectStreamCopier& stream,
  323.                           CCopyChoiceVariantHook* hook) const;
  324.     void SetGlobalCopyHook(CCopyChoiceVariantHook* hook) const;
  325.     void ResetLocalCopyHook(CObjectStreamCopier& stream) const;
  326.     void ResetGlobalCopyHook(void) const;
  327.     void SetPathCopyHook(CObjectStreamCopier* stream, const string& path,
  328.                           CCopyChoiceVariantHook* hook) const;
  329. public: // mostly for internal use
  330.     const CVariantInfo* GetVariantInfo(void) const;
  331. protected:
  332.     const CChoiceTypeInfo* GetChoiceTypeInfo(void) const;
  333.     void Init(const CObjectTypeInfo& info);
  334.     void Init(const CObjectTypeInfo& info, TMemberIndex index);
  335.     void Init(const CConstObjectInfo& object);
  336. private:
  337.     const CChoiceTypeInfo* m_ChoiceTypeInfo;
  338.     TMemberIndex m_VariantIndex;
  339. private:
  340.     CVariantInfo* GetNCVariantInfo(void) const;
  341. };
  342. class NCBI_XSERIAL_EXPORT CConstObjectInfoCV : public CObjectTypeInfoCV
  343. {
  344.     typedef CObjectTypeInfoCV CParent;
  345. public:
  346.     CConstObjectInfoCV(void);
  347.     CConstObjectInfoCV(const CConstObjectInfo& object);
  348.     CConstObjectInfoCV(const CConstObjectInfo& object, TMemberIndex index);
  349.     const CConstObjectInfo& GetChoiceObject(void) const;
  350.     
  351.     CConstObjectInfoCV& operator=(const CConstObjectInfo& object);
  352.     
  353.     CConstObjectInfo GetVariant(void) const;
  354.     CConstObjectInfo operator*(void) const;
  355. private:
  356.     pair<TConstObjectPtr, TTypeInfo> GetVariantPair(void) const;
  357.     CConstObjectInfo m_Object;
  358.     TMemberIndex m_VariantIndex;
  359. };
  360. class NCBI_XSERIAL_EXPORT CObjectInfoCV : public CObjectTypeInfoCV
  361. {
  362.     typedef CObjectTypeInfoCV CParent;
  363. public:
  364.     CObjectInfoCV(void);
  365.     CObjectInfoCV(const CObjectInfo& object);
  366.     CObjectInfoCV(const CObjectInfo& object, TMemberIndex index);
  367.     const CObjectInfo& GetChoiceObject(void) const;
  368.     
  369.     CObjectInfoCV& operator=(const CObjectInfo& object);
  370.     
  371.     CObjectInfo GetVariant(void) const;
  372.     CObjectInfo operator*(void) const;
  373. private:
  374.     pair<TObjectPtr, TTypeInfo> GetVariantPair(void) const;
  375.     CObjectInfo m_Object;
  376. };
  377. /* @} */
  378. #include <serial/objectiter.inl>
  379. END_NCBI_SCOPE
  380. #endif  /* OBJECTITER__HPP */
  381. /* ---------------------------------------------------------------------------
  382. * $Log: objectiter.hpp,v $
  383. * Revision 1000.2  2004/06/01 19:38:47  gouriano
  384. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.11
  385. *
  386. * Revision 1.11  2004/04/30 13:28:39  gouriano
  387. * Remove obsolete function declarations
  388. *
  389. * Revision 1.10  2004/01/05 14:24:08  gouriano
  390. * Added possibility to set serialization hooks by stack path
  391. *
  392. * Revision 1.9  2003/09/30 17:12:30  gouriano
  393. * Modified TypeIterators to skip unset optional members
  394. *
  395. * Revision 1.8  2003/08/14 20:03:57  vasilche
  396. * Avoid memory reallocation when reading over preallocated object.
  397. * Simplified CContainerTypeInfo iterators interface.
  398. *
  399. * Revision 1.7  2003/08/11 15:25:50  grichenk
  400. * Added possibility to reset an object member from
  401. * a read hook (including non-optional members).
  402. *
  403. * Revision 1.6  2003/07/29 18:47:46  vasilche
  404. * Fixed thread safeness of object stream hooks.
  405. *
  406. * Revision 1.5  2003/07/17 22:49:31  vasilche
  407. * Added export specifiers.
  408. * Added missing methods.
  409. *
  410. * Revision 1.4  2003/04/15 16:18:15  siyan
  411. * Added doxygen support
  412. *
  413. * Revision 1.3  2002/12/23 18:38:51  dicuccio
  414. * Added WIn32 export specifier: NCBI_XSERIAL_EXPORT.
  415. * Moved all CVS logs to the end.
  416. *
  417. * Revision 1.2  2001/05/17 14:58:35  lavr
  418. * Typos corrected
  419. *
  420. * Revision 1.1  2000/10/20 15:51:25  vasilche
  421. * Fixed data error processing.
  422. * Added interface for constructing container objects directly into output stream.
  423. * object.hpp, object.inl and object.cpp were split to
  424. * objectinfo.*, objecttype.*, objectiter.* and objectio.*.
  425. *
  426. * ===========================================================================
  427. */