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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: ptrinfo.hpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/04/12 17:15:33  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.29
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef PTRINFO__HPP
  10. #define PTRINFO__HPP
  11. /*  $Id: ptrinfo.hpp,v 1000.2 2004/04/12 17:15:33 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 <serial/typeinfo.hpp>
  42. #include <serial/typeref.hpp>
  43. /** @addtogroup TypeInfoCPP
  44.  *
  45.  * @{
  46.  */
  47. BEGIN_NCBI_SCOPE
  48. // CTypeInfo for pointers
  49. class NCBI_XSERIAL_EXPORT CPointerTypeInfo : public CTypeInfo
  50. {
  51.     typedef CTypeInfo CParent;
  52. public:
  53.     CPointerTypeInfo(TTypeInfo type);
  54.     CPointerTypeInfo(const CTypeRef& typeRef);
  55.     CPointerTypeInfo(size_t size, TTypeInfo type);
  56.     CPointerTypeInfo(size_t size, const CTypeRef& typeRef);
  57.     CPointerTypeInfo(const string& name, TTypeInfo type);
  58.     CPointerTypeInfo(const string& name, size_t size, TTypeInfo type);
  59.     static TTypeInfo GetTypeInfo(TTypeInfo base);
  60.     TTypeInfo GetPointedType(void) const;
  61.     
  62.     TConstObjectPtr GetObjectPointer(TConstObjectPtr object) const;
  63.     TObjectPtr GetObjectPointer(TObjectPtr object) const;
  64.     void SetObjectPointer(TObjectPtr object, TObjectPtr pointer) const;
  65.     TTypeInfo GetRealDataTypeInfo(TConstObjectPtr object) const;
  66.     virtual bool MayContainType(TTypeInfo type) const;
  67.     virtual bool IsDefault(TConstObjectPtr object) const;
  68.     virtual bool Equals(TConstObjectPtr object1, TConstObjectPtr object2,
  69.                         ESerialRecursionMode how = eRecursive) const;
  70.     virtual void SetDefault(TObjectPtr dst) const;
  71.     virtual void Assign(TObjectPtr dst, TConstObjectPtr src,
  72.                         ESerialRecursionMode how = eRecursive) const;
  73.     typedef TObjectPtr (*TGetDataFunction)(const CPointerTypeInfo* objectType,
  74.                                            TObjectPtr objectPtr);
  75.     typedef void (*TSetDataFunction)(const CPointerTypeInfo* objectType,
  76.                                      TObjectPtr objectPtr,
  77.                                      TObjectPtr dataPtr);
  78.     void SetFunctions(TGetDataFunction getFunc, TSetDataFunction setFunc);
  79. protected:
  80.     static TObjectPtr GetPointer(const CPointerTypeInfo* objectType,
  81.                                  TObjectPtr objectPtr);
  82.     static void SetPointer(const CPointerTypeInfo* objectType,
  83.                            TObjectPtr objectPtr,
  84.                            TObjectPtr dataPtr);
  85.     static TObjectPtr CreatePointer(TTypeInfo objectType);
  86.     static void ReadPointer(CObjectIStream& in,
  87.                             TTypeInfo objectType,
  88.                             TObjectPtr objectPtr);
  89.     static void WritePointer(CObjectOStream& out,
  90.                              TTypeInfo objectType,
  91.                              TConstObjectPtr objectPtr);
  92.     static void SkipPointer(CObjectIStream& in,
  93.                             TTypeInfo objectType);
  94.     static void CopyPointer(CObjectStreamCopier& copier,
  95.                             TTypeInfo objectType);
  96. protected:
  97.     CTypeRef m_DataTypeRef;
  98.     TGetDataFunction m_GetData;
  99.     TSetDataFunction m_SetData;
  100. private:
  101.     void InitPointerTypeInfoFunctions(void);
  102. };
  103. /* @} */
  104. #include <serial/ptrinfo.inl>
  105. END_NCBI_SCOPE
  106. #endif  /* PTRINFO__HPP */
  107. /* ---------------------------------------------------------------------------
  108. * $Log: ptrinfo.hpp,v $
  109. * Revision 1000.2  2004/04/12 17:15:33  gouriano
  110. * PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.29
  111. *
  112. * Revision 1.29  2004/03/25 15:56:27  gouriano
  113. * Added possibility to copy and compare serial object non-recursively
  114. *
  115. * Revision 1.28  2003/11/24 14:10:04  grichenk
  116. * Changed base class for CAliasTypeInfo to CPointerTypeInfo
  117. *
  118. * Revision 1.27  2003/04/15 16:18:38  siyan
  119. * Added doxygen support
  120. *
  121. * Revision 1.26  2002/12/23 18:38:51  dicuccio
  122. * Added WIn32 export specifier: NCBI_XSERIAL_EXPORT.
  123. * Moved all CVS logs to the end.
  124. *
  125. * Revision 1.25  2000/10/17 18:45:25  vasilche
  126. * Added possibility to turn off object cross reference detection in
  127. * CObjectIStream and CObjectOStream.
  128. *
  129. * Revision 1.24  2000/10/13 16:28:31  vasilche
  130. * Reduced header dependency.
  131. * Avoid use of templates with virtual methods.
  132. * Reduced amount of different maps used.
  133. * All this lead to smaller compiled code size (libraries and programs).
  134. *
  135. * Revision 1.23  2000/09/18 20:00:08  vasilche
  136. * Separated CVariantInfo and CMemberInfo.
  137. * Implemented copy hooks.
  138. * All hooks now are stored in CTypeInfo/CMemberInfo/CVariantInfo.
  139. * Most type specific functions now are implemented via function pointers instead of virtual functions.
  140. *
  141. * Revision 1.22  2000/09/13 15:10:13  vasilche
  142. * Fixed type detection in type iterators.
  143. *
  144. * Revision 1.21  2000/09/01 13:16:02  vasilche
  145. * Implemented class/container/choice iterators.
  146. * Implemented CObjectStreamCopier for copying data without loading into memory.
  147. *
  148. * Revision 1.20  2000/07/03 18:42:37  vasilche
  149. * Added interface to typeinfo via CObjectInfo and CConstObjectInfo.
  150. * Reduced header dependency.
  151. *
  152. * Revision 1.19  2000/05/24 20:08:15  vasilche
  153. * Implemented XML dump.
  154. *
  155. * Revision 1.18  2000/03/29 15:55:21  vasilche
  156. * Added two versions of object info - CObjectInfo and CConstObjectInfo.
  157. * Added generic iterators by class -
  158. *  CTypeIterator<class>, CTypeConstIterator<class>,
  159. *  CStdTypeIterator<type>, CStdTypeConstIterator<type>,
  160. *  CObjectsIterator and CObjectsConstIterator.
  161. *
  162. * Revision 1.17  2000/03/07 14:05:31  vasilche
  163. * Added stream buffering to ASN.1 binary input.
  164. * Optimized class loading/storing.
  165. * Fixed bugs in processing OPTIONAL fields.
  166. *
  167. * Revision 1.16  2000/02/17 20:02:29  vasilche
  168. * Added some standard serialization exceptions.
  169. * Optimized text/binary ASN.1 reading.
  170. * Fixed wrong encoding of StringStore in ASN.1 binary format.
  171. * Optimized logic of object collection.
  172. *
  173. * Revision 1.15  1999/12/28 18:55:39  vasilche
  174. * Reduced size of compiled object files:
  175. * 1. avoid inline or implicit virtual methods (especially destructors).
  176. * 2. avoid std::string's methods usage in inline methods.
  177. * 3. avoid string literals ("xxx") in inline methods.
  178. *
  179. * Revision 1.14  1999/12/17 19:04:53  vasilche
  180. * Simplified generation of GetTypeInfo methods.
  181. *
  182. * Revision 1.13  1999/10/28 15:37:37  vasilche
  183. * Fixed null choice pointers handling.
  184. * Cleaned enumertion interface.
  185. *
  186. * Revision 1.12  1999/10/25 19:07:12  vasilche
  187. * Fixed coredump on non initialized choices.
  188. * Fixed compilation warning.
  189. *
  190. * Revision 1.11  1999/09/22 20:11:50  vasilche
  191. * Modified for compilation on IRIX native c++ compiler.
  192. *
  193. * Revision 1.10  1999/09/14 18:54:05  vasilche
  194. * Fixed bugs detected by gcc & egcs.
  195. * Removed unneeded includes.
  196. *
  197. * Revision 1.9  1999/08/31 17:50:04  vasilche
  198. * Implemented several macros for specific data types.
  199. * Added implicit members.
  200. * Added multimap and set.
  201. *
  202. * Revision 1.8  1999/08/13 15:53:44  vasilche
  203. * C++ analog of asntool: datatool
  204. *
  205. * Revision 1.7  1999/07/20 18:22:55  vasilche
  206. * Added interface to old ASN.1 routines.
  207. * Added fixed choice of subclasses to use for pointers.
  208. *
  209. * Revision 1.6  1999/07/13 20:18:06  vasilche
  210. * Changed types naming.
  211. *
  212. * Revision 1.5  1999/07/07 19:58:46  vasilche
  213. * Reduced amount of data allocated on heap
  214. * Cleaned ASN.1 structures info
  215. *
  216. * Revision 1.4  1999/06/30 16:04:34  vasilche
  217. * Added support for old ASN.1 structures.
  218. *
  219. * Revision 1.3  1999/06/24 14:44:42  vasilche
  220. * Added binary ASN.1 output.
  221. *
  222. * Revision 1.2  1999/06/15 16:20:05  vasilche
  223. * Added ASN.1 object output stream.
  224. *
  225. * Revision 1.1  1999/06/04 20:51:36  vasilche
  226. * First compilable version of serialization.
  227. *
  228. * ===========================================================================
  229. */