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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: objlist.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2003/10/29 17:27:10  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.17
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef OBJLIST__HPP
  10. #define OBJLIST__HPP
  11. /*  $Id: objlist.hpp,v 1000.0 2003/10/29 17:27:10 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 <corelib/ncbiobj.hpp>
  43. #include <serial/serialdef.hpp>
  44. #include <serial/typeinfo.hpp>
  45. #include <map>
  46. #include <vector>
  47. /** @addtogroup ObjStreamSupport
  48.  *
  49.  * @{
  50.  */
  51. BEGIN_NCBI_SCOPE
  52. class CMemberId;
  53. class CMemberInfo;
  54. class CWriteObjectList;
  55. class CReadObjectList;
  56. class NCBI_XSERIAL_EXPORT CReadObjectInfo
  57. {
  58. public:
  59.     typedef size_t TObjectIndex;
  60.     CReadObjectInfo(void);
  61.     CReadObjectInfo(TTypeInfo typeinfo);
  62.     CReadObjectInfo(TObjectPtr objectPtr, TTypeInfo typeInfo);
  63.     
  64.     TTypeInfo GetTypeInfo(void) const;
  65.     TObjectPtr GetObjectPtr(void) const;
  66.     void ResetObjectPtr(void);
  67.     void Assign(TObjectPtr objectPtr, TTypeInfo typeInfo);
  68. private:
  69.     TTypeInfo m_TypeInfo;
  70.     TObjectPtr m_ObjectPtr;
  71.     CConstRef<CObject> m_ObjectRef;
  72. };
  73. class NCBI_XSERIAL_EXPORT CReadObjectList
  74. {
  75. public:
  76.     typedef CReadObjectInfo::TObjectIndex TObjectIndex;
  77.     CReadObjectList(void);
  78.     ~CReadObjectList(void);
  79.     TObjectIndex GetObjectCount(void) const;
  80. protected:
  81.     friend class CObjectIStream;
  82.     void Clear(void);
  83.     void ForgetObjects(TObjectIndex from, TObjectIndex to);
  84.     const CReadObjectInfo& GetRegisteredObject(TObjectIndex index) const;
  85.     void RegisterObject(TTypeInfo typeInfo);
  86.     void RegisterObject(TObjectPtr objectPtr, TTypeInfo typeInfo);
  87. private:
  88.     vector<CReadObjectInfo> m_Objects;
  89. };
  90. class NCBI_XSERIAL_EXPORT CWriteObjectInfo {
  91. public:
  92.     typedef size_t TObjectIndex;
  93.     CWriteObjectInfo(void);
  94.     CWriteObjectInfo(TTypeInfo typeInfo, TObjectIndex index);
  95.     CWriteObjectInfo(TConstObjectPtr objectPtr,
  96.                      TTypeInfo typeInfo, TObjectIndex index);
  97.     TObjectIndex GetIndex(void) const;
  98.     TTypeInfo GetTypeInfo(void) const;
  99.     TConstObjectPtr GetObjectPtr(void) const;
  100.     const CConstRef<CObject>& GetObjectRef(void) const;
  101.     void ResetObjectPtr(void);
  102. private:
  103.     TTypeInfo m_TypeInfo;
  104.     TConstObjectPtr m_ObjectPtr;
  105.     CConstRef<CObject> m_ObjectRef;
  106.     TObjectIndex m_Index;
  107. };
  108. class NCBI_XSERIAL_EXPORT CWriteObjectList
  109. {
  110. public:
  111.     typedef CWriteObjectInfo::TObjectIndex TObjectIndex;
  112.     CWriteObjectList(void);
  113.     ~CWriteObjectList(void);
  114.     TObjectIndex GetObjectCount(void) const;
  115.     TObjectIndex NextObjectIndex(void) const;
  116. protected:
  117.     friend class CObjectOStream;
  118.     // check that all objects marked as written
  119.     void Clear(void);
  120.     // add object to object list
  121.     // may throw an exception if there is error in objects placements
  122.     void RegisterObject(TTypeInfo typeInfo);
  123.     const CWriteObjectInfo* RegisterObject(TConstObjectPtr object,
  124.                                            TTypeInfo typeInfo);
  125.     void MarkObjectWritten(CWriteObjectInfo& info);
  126.     // forget pointers of written object (e.g. because we want to delete them)
  127.     void ForgetObjects(TObjectIndex from, TObjectIndex to);
  128. private:
  129.     // we need reverse order map due to faster algorithm of lookup
  130.     typedef vector<CWriteObjectInfo> TObjects;
  131.     typedef map<TConstObjectPtr, TObjectIndex> TObjectsByPtr;
  132.     TObjects m_Objects;           // registered objects
  133.     TObjectsByPtr m_ObjectsByPtr; // registered objects by pointer
  134. };
  135. /* @} */
  136. #include <serial/objlist.inl>
  137. END_NCBI_SCOPE
  138. #endif  /* OBJLIST__HPP */
  139. /* ---------------------------------------------------------------------------
  140. * $Log: objlist.hpp,v $
  141. * Revision 1000.0  2003/10/29 17:27:10  gouriano
  142. * PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.17
  143. *
  144. * Revision 1.17  2003/04/15 16:18:26  siyan
  145. * Added doxygen support
  146. *
  147. * Revision 1.16  2002/12/23 18:38:51  dicuccio
  148. * Added WIn32 export specifier: NCBI_XSERIAL_EXPORT.
  149. * Moved all CVS logs to the end.
  150. *
  151. * Revision 1.15  2000/10/17 18:45:25  vasilche
  152. * Added possibility to turn off object cross reference detection in
  153. * CObjectIStream and CObjectOStream.
  154. *
  155. * Revision 1.14  2000/10/13 20:59:12  vasilche
  156. * Avoid using of ssize_t absent on some compilers.
  157. *
  158. * Revision 1.13  2000/10/13 20:22:46  vasilche
  159. * Fixed warnings on 64 bit compilers.
  160. * Fixed missing typename in templates.
  161. *
  162. * Revision 1.12  2000/09/01 13:16:01  vasilche
  163. * Implemented class/container/choice iterators.
  164. * Implemented CObjectStreamCopier for copying data without loading into memory.
  165. *
  166. * Revision 1.11  2000/08/15 19:44:40  vasilche
  167. * Added Read/Write hooks:
  168. * CReadObjectHook/CWriteObjectHook for objects of specified type.
  169. * CReadClassMemberHook/CWriteClassMemberHook for specified members.
  170. * CReadChoiceVariantHook/CWriteChoiceVariant for specified choice variants.
  171. * CReadContainerElementHook/CWriteContainerElementsHook for containers.
  172. *
  173. * Revision 1.10  2000/06/16 16:31:07  vasilche
  174. * Changed implementation of choices and classes info to allow use of the same classes in generated and user written classes.
  175. *
  176. * Revision 1.9  2000/04/06 16:10:51  vasilche
  177. * Fixed bug with iterators in choices.
  178. * Removed unneeded calls to ReadExternalObject/WriteExternalObject.
  179. * Added output buffering to text ASN.1 data.
  180. *
  181. * Revision 1.8  2000/03/29 15:55:21  vasilche
  182. * Added two versions of object info - CObjectInfo and CConstObjectInfo.
  183. * Added generic iterators by class -
  184. *  CTypeIterator<class>, CTypeConstIterator<class>,
  185. *  CStdTypeIterator<type>, CStdTypeConstIterator<type>,
  186. *  CObjectsIterator and CObjectsConstIterator.
  187. *
  188. * Revision 1.7  2000/01/10 19:46:32  vasilche
  189. * Fixed encoding/decoding of REAL type.
  190. * Fixed encoding/decoding of StringStore.
  191. * Fixed encoding/decoding of NULL type.
  192. * Fixed error reporting.
  193. * Reduced object map (only classes).
  194. *
  195. * Revision 1.6  1999/10/04 16:22:09  vasilche
  196. * Fixed bug with old ASN.1 structures.
  197. *
  198. * Revision 1.5  1999/09/14 18:54:04  vasilche
  199. * Fixed bugs detected by gcc & egcs.
  200. * Removed unneeded includes.
  201. *
  202. * Revision 1.4  1999/06/30 16:04:30  vasilche
  203. * Added support for old ASN.1 structures.
  204. *
  205. * Revision 1.3  1999/06/24 14:44:40  vasilche
  206. * Added binary ASN.1 output.
  207. *
  208. * Revision 1.2  1999/06/10 21:06:39  vasilche
  209. * Working binary output and almost working binary input.
  210. *
  211. * Revision 1.1  1999/06/07 19:30:16  vasilche
  212. * More bug fixes
  213. *
  214. * ===========================================================================
  215. */