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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: objectinfo.inl,v $
  4.  * PRODUCTION Revision 1000.2  2003/12/02 20:32:43  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [ORIGINAL] Dev-tree R1.5
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #if defined(OBJECTINFO__HPP)  &&  !defined(OBJECTINFO__INL)
  10. #define OBJECTINFO__INL
  11. /*  $Id: objectinfo.inl,v 1000.2 2003/12/02 20:32:43 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. /////////////////////////////////////////////////////////////////////////////
  42. // CObjectTypeInfo
  43. /////////////////////////////////////////////////////////////////////////////
  44. inline
  45. CObjectTypeInfo::CObjectTypeInfo(TTypeInfo typeinfo)
  46.     : m_TypeInfo(typeinfo)
  47. {
  48. }
  49. inline
  50. TTypeInfo CObjectTypeInfo::GetTypeInfo(void) const
  51. {
  52.     return m_TypeInfo;
  53. }
  54. inline
  55. CTypeInfo* CObjectTypeInfo::GetNCTypeInfo(void) const
  56. {
  57.     return const_cast<CTypeInfo*>(GetTypeInfo());
  58. }
  59. inline
  60. ETypeFamily CObjectTypeInfo::GetTypeFamily(void) const
  61. {
  62.     return GetTypeInfo()->GetTypeFamily();
  63. }
  64. inline
  65. void CObjectTypeInfo::CheckTypeFamily(ETypeFamily family) const
  66. {
  67.     if ( GetTypeInfo()->GetTypeFamily() != family )
  68.         WrongTypeFamily(family);
  69. }
  70. inline
  71. void CObjectTypeInfo::ResetTypeInfo(void)
  72. {
  73.     m_TypeInfo = 0;
  74. }
  75. inline
  76. void CObjectTypeInfo::SetTypeInfo(TTypeInfo typeinfo)
  77. {
  78.     m_TypeInfo = typeinfo;
  79. }
  80. inline
  81. bool CObjectTypeInfo::Valid(void) const
  82. {
  83.     return m_TypeInfo != 0;
  84. }
  85. inline
  86. CObjectTypeInfo::operator bool(void) const
  87. {
  88.     return Valid();
  89. }
  90. inline
  91. bool CObjectTypeInfo::operator!(void) const
  92. {
  93.     return !Valid();
  94. }
  95. inline
  96. bool CObjectTypeInfo::operator==(const CObjectTypeInfo& type) const
  97. {
  98.     return GetTypeInfo() == type.GetTypeInfo();
  99. }
  100. inline
  101. bool CObjectTypeInfo::operator!=(const CObjectTypeInfo& type) const
  102. {
  103.     return GetTypeInfo() != type.GetTypeInfo();
  104. }
  105. /////////////////////////////////////////////////////////////////////////////
  106. // CConstObjectInfo
  107. /////////////////////////////////////////////////////////////////////////////
  108. inline
  109. CConstObjectInfo::CConstObjectInfo(void)
  110.     : m_ObjectPtr(0)
  111. {
  112. }
  113. inline
  114. CConstObjectInfo::CConstObjectInfo(TConstObjectPtr objectPtr,
  115.                                    TTypeInfo typeInfo)
  116.     : CObjectTypeInfo(typeInfo), m_ObjectPtr(objectPtr),
  117.       m_Ref(typeInfo->GetCObjectPtr(objectPtr))
  118. {
  119. }
  120. inline
  121. CConstObjectInfo::CConstObjectInfo(TConstObjectPtr objectPtr,
  122.                                    TTypeInfo typeInfo,
  123.                                    ENonCObject)
  124.     : CObjectTypeInfo(typeInfo), m_ObjectPtr(objectPtr)
  125. {
  126.     _ASSERT(!typeInfo->IsCObject() ||
  127.             static_cast<const CObject*>(objectPtr)->Referenced() ||
  128.             !static_cast<const CObject*>(objectPtr)->CanBeDeleted());
  129. }
  130. inline
  131. CConstObjectInfo::CConstObjectInfo(pair<TConstObjectPtr, TTypeInfo> object)
  132.     : CObjectTypeInfo(object.second), m_ObjectPtr(object.first),
  133.       m_Ref(object.second->GetCObjectPtr(object.first))
  134. {
  135. }
  136. inline
  137. CConstObjectInfo::CConstObjectInfo(pair<TObjectPtr, TTypeInfo> object)
  138.     : CObjectTypeInfo(object.second), m_ObjectPtr(object.first),
  139.       m_Ref(object.second->GetCObjectPtr(object.first))
  140. {
  141. }
  142. inline
  143. bool CConstObjectInfo::Valid(void) const
  144. {
  145.     return m_ObjectPtr != 0;
  146. }
  147. inline
  148. CConstObjectInfo::operator bool(void) const
  149. {
  150.     return Valid();
  151. }
  152. inline
  153. bool CConstObjectInfo::operator!(void) const
  154. {
  155.     return !Valid();
  156. }
  157. inline
  158. void CConstObjectInfo::ResetObjectPtr(void)
  159. {
  160.     m_ObjectPtr = 0;
  161.     m_Ref.Reset();
  162. }
  163. inline
  164. TConstObjectPtr CConstObjectInfo::GetObjectPtr(void) const
  165. {
  166.     return m_ObjectPtr;
  167. }
  168. inline
  169. pair<TConstObjectPtr, TTypeInfo> CConstObjectInfo::GetPair(void) const
  170. {
  171.     return make_pair(GetObjectPtr(), GetTypeInfo());
  172. }
  173. inline
  174. void CConstObjectInfo::Reset(void)
  175. {
  176.     ResetObjectPtr();
  177.     ResetTypeInfo();
  178. }
  179. inline
  180. void CConstObjectInfo::Set(TConstObjectPtr objectPtr, TTypeInfo typeInfo)
  181. {
  182.     m_ObjectPtr = objectPtr;
  183.     SetTypeInfo(typeInfo);
  184.     m_Ref.Reset(typeInfo->GetCObjectPtr(objectPtr));
  185. }
  186. inline
  187. CConstObjectInfo&
  188. CConstObjectInfo::operator=(pair<TConstObjectPtr, TTypeInfo> object)
  189. {
  190.     Set(object.first, object.second);
  191.     return *this;
  192. }
  193. inline
  194. CConstObjectInfo&
  195. CConstObjectInfo::operator=(pair<TObjectPtr, TTypeInfo> object)
  196. {
  197.     Set(object.first, object.second);
  198.     return *this;
  199. }
  200. /////////////////////////////////////////////////////////////////////////////
  201. // CObjectInfo
  202. /////////////////////////////////////////////////////////////////////////////
  203. inline
  204. CObjectInfo::CObjectInfo(void)
  205. {
  206. }
  207. inline
  208. CObjectInfo::CObjectInfo(TTypeInfo typeInfo)
  209.     : CParent(typeInfo->Create(), typeInfo)
  210. {
  211. }
  212. inline
  213. CObjectInfo::CObjectInfo(TObjectPtr objectPtr, TTypeInfo typeInfo)
  214.     : CParent(objectPtr, typeInfo)
  215. {
  216. }
  217. inline
  218. CObjectInfo::CObjectInfo(TObjectPtr objectPtr,
  219.                          TTypeInfo typeInfo,
  220.                          ENonCObject nonCObject)
  221.     : CParent(objectPtr, typeInfo, nonCObject)
  222. {
  223. }
  224. inline
  225. CObjectInfo::CObjectInfo(pair<TObjectPtr, TTypeInfo> object)
  226.     : CParent(object)
  227. {
  228. }
  229. inline
  230. TObjectPtr CObjectInfo::GetObjectPtr(void) const
  231. {
  232.     return const_cast<TObjectPtr>(CParent::GetObjectPtr());
  233. }
  234. inline
  235. pair<TObjectPtr, TTypeInfo> CObjectInfo::GetPair(void) const
  236. {
  237.     return make_pair(GetObjectPtr(), GetTypeInfo());
  238. }
  239. inline
  240. CObjectInfo&
  241. CObjectInfo::operator=(pair<TObjectPtr, TTypeInfo> object)
  242. {
  243.     Set(object.first, object.second);
  244.     return *this;
  245. }
  246. #endif /* def OBJECTINFO__HPP  &&  ndef OBJECTINFO__INL */
  247. /* ---------------------------------------------------------------------------
  248. * $Log: objectinfo.inl,v $
  249. * Revision 1000.2  2003/12/02 20:32:43  gouriano
  250. * PRODUCTION: UPGRADED [ORIGINAL] Dev-tree R1.5
  251. *
  252. * Revision 1.5  2003/11/24 14:10:04  grichenk
  253. * Changed base class for CAliasTypeInfo to CPointerTypeInfo
  254. *
  255. * Revision 1.4  2003/11/18 18:11:47  grichenk
  256. * Resolve aliased type info before using it in CObjectTypeInfo
  257. *
  258. * Revision 1.3  2002/12/23 18:38:51  dicuccio
  259. * Added WIn32 export specifier: NCBI_XSERIAL_EXPORT.
  260. * Moved all CVS logs to the end.
  261. *
  262. * Revision 1.2  2001/05/17 14:57:22  lavr
  263. * Typos corrected
  264. *
  265. * Revision 1.1  2000/10/20 15:51:24  vasilche
  266. * Fixed data error processing.
  267. * Added interface for constructing container objects directly into output stream.
  268. * object.hpp, object.inl and object.cpp were split to
  269. * objectinfo.*, objecttype.*, objectiter.* and objectio.*.
  270. *
  271. * ===========================================================================
  272. */