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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: aliasinfo.cpp,v $
  4.  * PRODUCTION Revision 1000.4  2004/06/01 19:39:41  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.8
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: aliasinfo.cpp,v 1000.4 2004/06/01 19:39:41 gouriano Exp $
  10. * ===========================================================================
  11. *
  12. *                            PUBLIC DOMAIN NOTICE
  13. *               National Center for Biotechnology Information
  14. *
  15. *  This software/database is a "United States Government Work" under the
  16. *  terms of the United States Copyright Act.  It was written as part of
  17. *  the author's official duties as a United States Government employee and
  18. *  thus cannot be copyrighted.  This software/database is freely available
  19. *  to the public for use. The National Library of Medicine and the U.S.
  20. *  Government have not placed any restriction on its use or reproduction.
  21. *
  22. *  Although all reasonable efforts have been taken to ensure the accuracy
  23. *  and reliability of the software and data, the NLM and the U.S.
  24. *  Government do not and cannot warrant the performance or results that
  25. *  may be obtained by using this software or data. The NLM and the U.S.
  26. *  Government disclaim all warranties, express or implied, including
  27. *  warranties of performance, merchantability or fitness for any particular
  28. *  purpose.
  29. *
  30. *  Please cite the author in any work or product based on this material.
  31. *
  32. * ===========================================================================
  33. *
  34. * Author: Aleksey Grichenko
  35. *
  36. * File Description:
  37. *   Alias type info
  38. *
  39. * ---------------------------------------------------------------------------
  40. * $Log: aliasinfo.cpp,v $
  41. * Revision 1000.4  2004/06/01 19:39:41  gouriano
  42. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.8
  43. *
  44. * Revision 1.8  2004/05/17 21:03:02  gorelenk
  45. * Added include of PCH ncbi_pch.hpp
  46. *
  47. * Revision 1.7  2004/05/13 18:31:07  gouriano
  48. * Corrected GetRealTypeInfo
  49. *
  50. * Revision 1.6  2004/03/25 15:57:08  gouriano
  51. * Added possibility to copy and compare serial object non-recursively
  52. *
  53. * Revision 1.5  2003/12/08 22:14:41  grichenk
  54. * Fixed CAliasTypeInfo::IsType()
  55. *
  56. * Revision 1.4  2003/11/24 14:10:05  grichenk
  57. * Changed base class for CAliasTypeInfo to CPointerTypeInfo
  58. *
  59. * Revision 1.3  2003/11/18 18:11:48  grichenk
  60. * Resolve aliased type info before using it in CObjectTypeInfo
  61. *
  62. * Revision 1.2  2003/10/21 21:08:46  grichenk
  63. * Fixed aliases-related bug in XML stream
  64. *
  65. * Revision 1.1  2003/10/21 13:45:23  grichenk
  66. * Initial revision
  67. *
  68. *
  69. * ===========================================================================
  70. */
  71. #include <ncbi_pch.hpp>
  72. #include <serial/aliasinfo.hpp>
  73. #include <serial/serialbase.hpp>
  74. #include <serial/serialutil.hpp>
  75. #include <serial/objistr.hpp>
  76. #include <serial/objostr.hpp>
  77. BEGIN_NCBI_SCOPE
  78. class CAliasTypeInfoFunctions
  79. {
  80. public:
  81.     static void ReadAliasDefault(CObjectIStream& in,
  82.                                  TTypeInfo objectType,
  83.                                  TObjectPtr objectPtr);
  84.     static void WriteAliasDefault(CObjectOStream& out,
  85.                                   TTypeInfo objectType,
  86.                                   TConstObjectPtr objectPtr);
  87.     static void SkipAliasDefault(CObjectIStream& in,
  88.                                  TTypeInfo objectType);
  89.     static void CopyAliasDefault(CObjectStreamCopier& copier,
  90.                                  TTypeInfo objectType);
  91. };
  92. typedef CAliasTypeInfoFunctions TFunc;
  93. CAliasTypeInfo::CAliasTypeInfo(const string& name, TTypeInfo type)
  94.     : CParent(name, type->GetSize(), type),
  95.       m_DataOffset(0)
  96. {
  97.     InitAliasTypeInfoFunctions();
  98. }
  99. TObjectPtr CAliasTypeInfo::GetDataPointer(const CPointerTypeInfo* objectType,
  100.                                           TObjectPtr objectPtr)
  101. {
  102.     const CAliasTypeInfo* alias = static_cast<const CAliasTypeInfo*>(objectType);
  103.     return alias->GetDataPtr(objectPtr);
  104. }
  105. void CAliasTypeInfo::SetDataPointer(const CPointerTypeInfo* objectType,
  106.                                     TObjectPtr objectPtr,
  107.                                     TObjectPtr dataPtr)
  108. {
  109.     const CAliasTypeInfo* alias = static_cast<const CAliasTypeInfo*>(objectType);
  110.     alias->Assign(objectPtr, dataPtr);
  111. }
  112. void CAliasTypeInfo::InitAliasTypeInfoFunctions(void)
  113. {
  114.     SetReadFunction(&TFunc::ReadAliasDefault);
  115.     SetWriteFunction(&TFunc::WriteAliasDefault);
  116.     SetCopyFunction(&TFunc::CopyAliasDefault);
  117.     SetSkipFunction(&TFunc::SkipAliasDefault);
  118.     SetFunctions(&GetDataPointer, &SetDataPointer);
  119. }
  120. bool CAliasTypeInfo::IsDefault(TConstObjectPtr object) const
  121. {
  122.     return GetPointedType()->IsDefault(object);
  123. }
  124. bool CAliasTypeInfo::Equals(TConstObjectPtr object1, TConstObjectPtr object2,
  125.                             ESerialRecursionMode how) const
  126. {
  127.     return GetPointedType()->Equals(object1, object2, how);
  128. }
  129. void CAliasTypeInfo::SetDefault(TObjectPtr dst) const
  130. {
  131.     GetPointedType()->SetDefault(dst);
  132. }
  133. void CAliasTypeInfo::Assign(TObjectPtr dst, TConstObjectPtr src,
  134.                             ESerialRecursionMode how) const
  135. {
  136.     GetPointedType()->Assign(dst, src, how);
  137. }
  138. void CAliasTypeInfo::Delete(TObjectPtr object) const
  139. {
  140.     GetPointedType()->Delete(object);
  141. }
  142. void CAliasTypeInfo::DeleteExternalObjects(TObjectPtr object) const
  143. {
  144.     GetPointedType()->DeleteExternalObjects(object);
  145. }
  146. const CObject* CAliasTypeInfo::GetCObjectPtr(TConstObjectPtr objectPtr) const
  147. {
  148.     return GetPointedType()->GetCObjectPtr(objectPtr);
  149. }
  150. TTypeInfo CAliasTypeInfo::GetRealTypeInfo(TConstObjectPtr object) const
  151. {
  152.     return CParent::GetRealTypeInfo(object);
  153. //    return GetPointedType()->GetRealTypeInfo(object);
  154. }
  155. bool CAliasTypeInfo::IsParentClassOf(const CClassTypeInfo* classInfo) const
  156. {
  157.     return GetPointedType()->IsParentClassOf(classInfo);
  158. }
  159. void CAliasTypeInfo::SetDataOffset(TPointerOffsetType offset)
  160. {
  161. // it seems a lot of code here won't work correctly if the offset is not zero
  162.     _ASSERT(offset == 0);
  163.     m_DataOffset = offset;
  164. }
  165. TObjectPtr CAliasTypeInfo::GetDataPtr(TObjectPtr objectPtr) const
  166. {
  167.     return static_cast<char*>(objectPtr) + m_DataOffset;
  168. }
  169. TConstObjectPtr CAliasTypeInfo::GetDataPtr(TConstObjectPtr objectPtr) const
  170. {
  171.     return static_cast<const char*>(objectPtr) + m_DataOffset;
  172. }
  173. void CAliasTypeInfoFunctions::ReadAliasDefault(CObjectIStream& in,
  174.                                                TTypeInfo objectType,
  175.                                                TObjectPtr objectPtr)
  176. {
  177.     const CAliasTypeInfo* aliasType =
  178.         CTypeConverter<CAliasTypeInfo>::SafeCast(objectType);
  179.     in.ReadAlias(aliasType, objectPtr);
  180. }
  181. void CAliasTypeInfoFunctions::WriteAliasDefault(CObjectOStream& out,
  182.                                                 TTypeInfo objectType,
  183.                                                 TConstObjectPtr objectPtr)
  184. {
  185.     const CAliasTypeInfo* aliasType =
  186.         CTypeConverter<CAliasTypeInfo>::SafeCast(objectType);
  187.     out.WriteAlias(aliasType, objectPtr);
  188. }
  189. void CAliasTypeInfoFunctions::CopyAliasDefault(CObjectStreamCopier& copier,
  190.                                                TTypeInfo objectType)
  191. {
  192.     const CAliasTypeInfo* aliasType =
  193.         CTypeConverter<CAliasTypeInfo>::SafeCast(objectType);
  194.     aliasType->GetPointedType()->DefaultCopyData(copier);
  195. }
  196. void CAliasTypeInfoFunctions::SkipAliasDefault(CObjectIStream& in,
  197.                                                TTypeInfo objectType)
  198. {
  199.     const CAliasTypeInfo* aliasType =
  200.         CTypeConverter<CAliasTypeInfo>::SafeCast(objectType);
  201.     in.SkipAlias(aliasType);
  202. }
  203. END_NCBI_SCOPE