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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: objectinfo.cpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/01 19:40:41  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.8
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: objectinfo.cpp,v 1000.2 2004/06/01 19:40: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: Eugene Vasilchenko
  35. *
  36. * File Description:
  37. *   !!! PUT YOUR DESCRIPTION HERE !!!
  38. */
  39. #include <ncbi_pch.hpp>
  40. #include <corelib/ncbistd.hpp>
  41. #include <serial/exception.hpp>
  42. #include <serial/objectinfo.hpp>
  43. BEGIN_NCBI_SCOPE
  44. // object type info
  45. void CObjectTypeInfo::WrongTypeFamily(ETypeFamily /*needFamily*/) const
  46. {
  47.     NCBI_THROW(CSerialException,eInvalidData, "wrong type family");
  48. }
  49. const CPrimitiveTypeInfo* CObjectTypeInfo::GetPrimitiveTypeInfo(void) const
  50. {
  51.     CheckTypeFamily(eTypeFamilyPrimitive);
  52.     return CTypeConverter<CPrimitiveTypeInfo>::SafeCast(GetTypeInfo());
  53. }
  54. const CClassTypeInfo* CObjectTypeInfo::GetClassTypeInfo(void) const
  55. {
  56.     CheckTypeFamily(eTypeFamilyClass);
  57.     return CTypeConverter<CClassTypeInfo>::SafeCast(GetTypeInfo());
  58. }
  59. const CChoiceTypeInfo* CObjectTypeInfo::GetChoiceTypeInfo(void) const
  60. {
  61.     CheckTypeFamily(eTypeFamilyChoice);
  62.     return CTypeConverter<CChoiceTypeInfo>::SafeCast(GetTypeInfo());
  63. }
  64. const CContainerTypeInfo* CObjectTypeInfo::GetContainerTypeInfo(void) const
  65. {
  66.     CheckTypeFamily(eTypeFamilyContainer);
  67.     return CTypeConverter<CContainerTypeInfo>::SafeCast(GetTypeInfo());
  68. }
  69. const CPointerTypeInfo* CObjectTypeInfo::GetPointerTypeInfo(void) const
  70. {
  71.     CheckTypeFamily(eTypeFamilyPointer);
  72.     return CTypeConverter<CPointerTypeInfo>::SafeCast(GetTypeInfo());
  73. }
  74. CObjectTypeInfo CObjectTypeInfo::GetElementType(void) const
  75. {
  76.     return GetContainerTypeInfo()->GetElementType();
  77. }
  78. // pointer interface
  79. CObjectTypeInfo CObjectTypeInfo::GetPointedType(void) const
  80. {
  81.     return GetPointerTypeInfo()->GetPointedType();
  82. }
  83. CConstObjectInfo CConstObjectInfo::GetPointedObject(void) const
  84. {
  85.     const CPointerTypeInfo* pointerType = GetPointerTypeInfo();
  86.     return pair<TConstObjectPtr, TTypeInfo>(pointerType->GetObjectPointer(GetObjectPtr()), pointerType->GetPointedType());
  87. }
  88. CObjectInfo CObjectInfo::GetPointedObject(void) const
  89. {
  90.     const CPointerTypeInfo* pointerType = GetPointerTypeInfo();
  91.     return pair<TObjectPtr, TTypeInfo>(pointerType->GetObjectPointer(GetObjectPtr()), pointerType->GetPointedType());
  92. }
  93. // primitive interface
  94. EPrimitiveValueType CObjectTypeInfo::GetPrimitiveValueType(void) const
  95. {
  96.     return GetPrimitiveTypeInfo()->GetPrimitiveValueType();
  97. }
  98. bool CObjectTypeInfo::IsPrimitiveValueSigned(void) const
  99. {
  100.     return GetPrimitiveTypeInfo()->IsSigned();
  101. }
  102. TMemberIndex CObjectTypeInfo::FindMemberIndex(const string& name) const
  103. {
  104.     return GetClassTypeInfo()->GetMembers().Find(name);
  105. }
  106. TMemberIndex CObjectTypeInfo::FindMemberIndex(int tag) const
  107. {
  108.     return GetClassTypeInfo()->GetMembers().Find(tag);
  109. }
  110. TMemberIndex CObjectTypeInfo::FindVariantIndex(const string& name) const
  111. {
  112.     return GetChoiceTypeInfo()->GetVariants().Find(name);
  113. }
  114. TMemberIndex CObjectTypeInfo::FindVariantIndex(int tag) const
  115. {
  116.     return GetChoiceTypeInfo()->GetVariants().Find(tag);
  117. }
  118. bool CConstObjectInfo::GetPrimitiveValueBool(void) const
  119. {
  120.     return GetPrimitiveTypeInfo()->GetValueBool(GetObjectPtr());
  121. }
  122. char CConstObjectInfo::GetPrimitiveValueChar(void) const
  123. {
  124.     return GetPrimitiveTypeInfo()->GetValueChar(GetObjectPtr());
  125. }
  126. int CConstObjectInfo::GetPrimitiveValueInt(void) const
  127. {
  128.     return GetPrimitiveTypeInfo()->GetValueInt(GetObjectPtr());
  129. }
  130. unsigned CConstObjectInfo::GetPrimitiveValueUInt(void) const
  131. {
  132.     return GetPrimitiveTypeInfo()->GetValueUInt(GetObjectPtr());
  133. }
  134. long CConstObjectInfo::GetPrimitiveValueLong(void) const
  135. {
  136.     return GetPrimitiveTypeInfo()->GetValueLong(GetObjectPtr());
  137. }
  138. unsigned long CConstObjectInfo::GetPrimitiveValueULong(void) const
  139. {
  140.     return GetPrimitiveTypeInfo()->GetValueULong(GetObjectPtr());
  141. }
  142. Int4 CConstObjectInfo::GetPrimitiveValueInt4(void) const
  143. {
  144.     return GetPrimitiveTypeInfo()->GetValueInt4(GetObjectPtr());
  145. }
  146. Uint4 CConstObjectInfo::GetPrimitiveValueUint4(void) const
  147. {
  148.     return GetPrimitiveTypeInfo()->GetValueUint4(GetObjectPtr());
  149. }
  150. Int8 CConstObjectInfo::GetPrimitiveValueInt8(void) const
  151. {
  152.     return GetPrimitiveTypeInfo()->GetValueInt8(GetObjectPtr());
  153. }
  154. Uint8 CConstObjectInfo::GetPrimitiveValueUint8(void) const
  155. {
  156.     return GetPrimitiveTypeInfo()->GetValueUint8(GetObjectPtr());
  157. }
  158. double CConstObjectInfo::GetPrimitiveValueDouble(void) const
  159. {
  160.     return GetPrimitiveTypeInfo()->GetValueDouble(GetObjectPtr());
  161. }
  162. void CConstObjectInfo::GetPrimitiveValueString(string& value) const
  163. {
  164.     GetPrimitiveTypeInfo()->GetValueString(GetObjectPtr(), value);
  165. }
  166. string CConstObjectInfo::GetPrimitiveValueString(void) const
  167. {
  168.     string value;
  169.     GetPrimitiveValueString(value);
  170.     return value;
  171. }
  172. void CConstObjectInfo::GetPrimitiveValueOctetString(vector<char>& value) const
  173. {
  174.     GetPrimitiveTypeInfo()->GetValueOctetString(GetObjectPtr(), value);
  175. }
  176. void CObjectInfo::SetPrimitiveValueBool(bool value)
  177. {
  178.     GetPrimitiveTypeInfo()->SetValueBool(GetObjectPtr(), value);
  179. }
  180. void CObjectInfo::SetPrimitiveValueChar(char value)
  181. {
  182.     GetPrimitiveTypeInfo()->SetValueChar(GetObjectPtr(), value);
  183. }
  184. void CObjectInfo::SetPrimitiveValueLong(long value)
  185. {
  186.     GetPrimitiveTypeInfo()->SetValueLong(GetObjectPtr(), value);
  187. }
  188. void CObjectInfo::SetPrimitiveValueULong(unsigned long value)
  189. {
  190.     GetPrimitiveTypeInfo()->SetValueULong(GetObjectPtr(), value);
  191. }
  192. void CObjectInfo::SetPrimitiveValueDouble(double value)
  193. {
  194.     GetPrimitiveTypeInfo()->SetValueDouble(GetObjectPtr(), value);
  195. }
  196. void CObjectInfo::SetPrimitiveValueString(const string& value)
  197. {
  198.     GetPrimitiveTypeInfo()->SetValueString(GetObjectPtr(), value);
  199. }
  200. void CObjectInfo::SetPrimitiveValueOctetString(const vector<char>& value)
  201. {
  202.     GetPrimitiveTypeInfo()->SetValueOctetString(GetObjectPtr(), value);
  203. }
  204. TMemberIndex CConstObjectInfo::GetCurrentChoiceVariantIndex(void) const
  205. {
  206.     return GetChoiceTypeInfo()->GetIndex(GetObjectPtr());
  207. }
  208. void CObjectTypeInfo::SetLocalReadHook(CObjectIStream& stream,
  209.                                        CReadObjectHook* hook) const
  210. {
  211.     GetNCTypeInfo()->SetLocalReadHook(stream, hook);
  212. }
  213. void CObjectTypeInfo::SetGlobalReadHook(CReadObjectHook* hook) const
  214. {
  215.     GetNCTypeInfo()->SetGlobalReadHook(hook);
  216. }
  217. void CObjectTypeInfo::ResetLocalReadHook(CObjectIStream& stream) const
  218. {
  219.     GetNCTypeInfo()->ResetLocalReadHook(stream);
  220. }
  221. void CObjectTypeInfo::ResetGlobalReadHook(void) const
  222. {
  223.     GetNCTypeInfo()->ResetGlobalReadHook();
  224. }
  225. void CObjectTypeInfo::SetPathReadHook(CObjectIStream* stream, const string& path,
  226.                          CReadObjectHook* hook) const
  227. {
  228.     GetNCTypeInfo()->SetPathReadHook(stream,path,hook);
  229. }
  230. void CObjectTypeInfo::SetLocalWriteHook(CObjectOStream& stream,
  231.                                         CWriteObjectHook* hook) const
  232. {
  233.     GetNCTypeInfo()->SetLocalWriteHook(stream, hook);
  234. }
  235. void CObjectTypeInfo::SetGlobalWriteHook(CWriteObjectHook* hook) const
  236. {
  237.     GetNCTypeInfo()->SetGlobalWriteHook(hook);
  238. }
  239. void CObjectTypeInfo::ResetLocalWriteHook(CObjectOStream& stream) const
  240. {
  241.     GetNCTypeInfo()->ResetLocalWriteHook(stream);
  242. }
  243. void CObjectTypeInfo::ResetGlobalWriteHook(void) const
  244. {
  245.     GetNCTypeInfo()->ResetGlobalWriteHook();
  246. }
  247. void CObjectTypeInfo::SetPathWriteHook(CObjectOStream* stream, const string& path,
  248.                           CWriteObjectHook* hook) const
  249. {
  250.     GetNCTypeInfo()->SetPathWriteHook(stream,path,hook);
  251. }
  252. void CObjectTypeInfo::SetLocalSkipHook(CObjectIStream& stream,
  253.                                        CSkipObjectHook* hook) const
  254. {
  255.     GetNCTypeInfo()->SetLocalSkipHook(stream, hook);
  256. }
  257. void CObjectTypeInfo::SetGlobalSkipHook(CSkipObjectHook* hook) const
  258. {
  259.     GetNCTypeInfo()->SetGlobalSkipHook(hook);
  260. }
  261. void CObjectTypeInfo::ResetLocalSkipHook(CObjectIStream& stream) const
  262. {
  263.     GetNCTypeInfo()->ResetLocalSkipHook(stream);
  264. }
  265. void CObjectTypeInfo::ResetGlobalSkipHook(void) const
  266. {
  267.     GetNCTypeInfo()->ResetGlobalSkipHook();
  268. }
  269. void CObjectTypeInfo::SetPathSkipHook(CObjectIStream* stream, const string& path,
  270.                          CSkipObjectHook* hook) const
  271. {
  272.     GetNCTypeInfo()->SetPathSkipHook(stream,path,hook);
  273. }
  274. void CObjectTypeInfo::SetLocalCopyHook(CObjectStreamCopier& stream,
  275.                                        CCopyObjectHook* hook) const
  276. {
  277.     GetNCTypeInfo()->SetLocalCopyHook(stream, hook);
  278. }
  279. void CObjectTypeInfo::SetGlobalCopyHook(CCopyObjectHook* hook) const
  280. {
  281.     GetNCTypeInfo()->SetGlobalCopyHook(hook);
  282. }
  283. void CObjectTypeInfo::ResetLocalCopyHook(CObjectStreamCopier& stream) const
  284. {
  285.     GetNCTypeInfo()->ResetLocalCopyHook(stream);
  286. }
  287. void CObjectTypeInfo::ResetGlobalCopyHook(void) const
  288. {
  289.     GetNCTypeInfo()->ResetGlobalCopyHook();
  290. }
  291. void CObjectTypeInfo::SetPathCopyHook(CObjectStreamCopier* stream, const string& path,
  292.                          CCopyObjectHook* hook) const
  293. {
  294.     GetNCTypeInfo()->SetPathCopyHook(stream,path,hook);
  295. }
  296. END_NCBI_SCOPE
  297. /*
  298. * ===========================================================================
  299. *
  300. * $Log: objectinfo.cpp,v $
  301. * Revision 1000.2  2004/06/01 19:40:41  gouriano
  302. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.8
  303. *
  304. * Revision 1.8  2004/05/17 21:03:02  gorelenk
  305. * Added include of PCH ncbi_pch.hpp
  306. *
  307. * Revision 1.7  2004/01/05 14:25:20  gouriano
  308. * Added possibility to set serialization hooks by stack path
  309. *
  310. * Revision 1.6  2003/07/29 18:47:47  vasilche
  311. * Fixed thread safeness of object stream hooks.
  312. *
  313. * Revision 1.5  2003/04/16 19:58:26  ucko
  314. * Actually implement CObjectTypeInfo::GetPointedType; move CVS log to end.
  315. *
  316. * Revision 1.4  2003/03/10 18:54:25  gouriano
  317. * use new structured exceptions (based on CException)
  318. *
  319. * Revision 1.3  2001/05/17 15:07:07  lavr
  320. * Typos corrected
  321. *
  322. * Revision 1.2  2000/12/15 15:38:43  vasilche
  323. * Added support of Int8 and long double.
  324. * Enum values now have type Int4 instead of long.
  325. *
  326. * Revision 1.1  2000/10/20 15:51:39  vasilche
  327. * Fixed data error processing.
  328. * Added interface for constructing container objects directly into output stream.
  329. * object.hpp, object.inl and object.cpp were split to
  330. * objectinfo.*, objecttype.*, objectiter.* and objectio.*.
  331. *
  332. * ===========================================================================
  333. */