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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: objostr.inl,v $
  4.  * PRODUCTION Revision 1000.4  2004/06/01 19:39:05  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.25
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #if defined(OBJOSTR__HPP)  &&  !defined(OBJOSTR__INL)
  10. #define OBJOSTR__INL
  11. /*  $Id: objostr.inl,v 1000.4 2004/06/01 19:39:05 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. inline
  42. ESerialDataFormat CObjectOStream::GetDataFormat(void) const
  43. {
  44.     return m_DataFormat;
  45. }
  46. inline
  47. CObjectOStream* CObjectOStream::Open(const string& fileName,
  48.                                      ESerialDataFormat format)
  49. {
  50.     return Open(format, fileName);
  51. }
  52. inline
  53. void CObjectOStream::FlushBuffer(void)
  54. {
  55.     m_Output.FlushBuffer();
  56. }
  57. inline
  58. void CObjectOStream::Flush(void)
  59. {
  60.     m_Output.Flush();
  61. }
  62. inline
  63. CObjectOStream::TFailFlags CObjectOStream::GetFailFlags(void) const
  64. {
  65.     return m_Fail;
  66. }
  67. inline
  68. bool CObjectOStream::fail(void) const
  69. {
  70.     return GetFailFlags() != 0;
  71. }
  72. inline
  73. CObjectOStream::TFailFlags CObjectOStream::ClearFailFlags(TFailFlags flags)
  74. {
  75.     TFailFlags old = GetFailFlags();
  76.     m_Fail &= ~flags;
  77.     return old;
  78. }
  79. inline
  80. CObjectOStream::TFlags CObjectOStream::GetFlags(void) const
  81. {
  82.     return m_Flags;
  83. }
  84. inline
  85. CObjectOStream::TFlags CObjectOStream::SetFlags(TFlags flags)
  86. {
  87.     TFlags old = GetFlags();
  88.     m_Flags |= flags;
  89.     return old;
  90. }
  91. inline
  92. CObjectOStream::TFlags CObjectOStream::ClearFlags(TFlags flags)
  93. {
  94.     TFlags old = GetFlags();
  95.     m_Flags &= ~flags;
  96.     return old;
  97. }
  98. inline
  99. void CObjectOStream::WriteObject(TConstObjectPtr objectPtr,
  100.                                  TTypeInfo objectType)
  101. {
  102.     objectType->WriteData(*this, objectPtr);
  103. }
  104. inline
  105. void CObjectOStream::CopyObject(TTypeInfo objectType,
  106.                                 CObjectStreamCopier& copier)
  107. {
  108.     objectType->CopyData(copier);
  109. }
  110. inline
  111. void CObjectOStream::WriteClassRandom(const CClassTypeInfo* classType,
  112.                                       TConstObjectPtr classPtr)
  113. {
  114.     WriteClass(classType, classPtr);
  115. }
  116. inline
  117. void CObjectOStream::WriteClassSequential(const CClassTypeInfo* classType,
  118.                                           TConstObjectPtr classPtr)
  119. {
  120.     WriteClass(classType, classPtr);
  121. }
  122. // std C types readers
  123. // bool
  124. inline
  125. void CObjectOStream::WriteStd(const bool& data)
  126. {
  127.     WriteBool(data);
  128. }
  129. // char
  130. inline
  131. void CObjectOStream::WriteStd(const char& data)
  132. {
  133.     WriteChar(data);
  134. }
  135. // integer numbers
  136. inline
  137. void CObjectOStream::WriteStd(const signed char& data)
  138. {
  139.     WriteInt4(data);
  140. }
  141. inline
  142. void CObjectOStream::WriteStd(const unsigned char& data)
  143. {
  144.     WriteUint4(data);
  145. }
  146. inline
  147. void CObjectOStream::WriteStd(const short& data)
  148. {
  149.     WriteInt4(data);
  150. }
  151. inline
  152. void CObjectOStream::WriteStd(const unsigned short& data)
  153. {
  154.     WriteUint4(data);
  155. }
  156. #if SIZEOF_INT == 4
  157. inline
  158. void CObjectOStream::WriteStd(const int& data)
  159. {
  160.     WriteInt4(data);
  161. }
  162. inline
  163. void CObjectOStream::WriteStd(const unsigned int& data)
  164. {
  165.     WriteUint4(data);
  166. }
  167. #else
  168. #  error Unsupported size of int - must be 4
  169. #endif
  170. #if SIZEOF_LONG == 4
  171. inline
  172. void CObjectOStream::WriteStd(const long& data)
  173. {
  174.     WriteInt4(Int4(data));
  175. }
  176. inline
  177. void CObjectOStream::WriteStd(const unsigned long& data)
  178. {
  179.     WriteUint4(Uint4(data));
  180. }
  181. #endif
  182. inline
  183. void CObjectOStream::WriteStd(const Int8& data)
  184. {
  185.     WriteInt8(data);
  186. }
  187. inline
  188. void CObjectOStream::WriteStd(const Uint8& data)
  189. {
  190.     WriteUint8(data);
  191. }
  192. // float numbers
  193. inline
  194. void CObjectOStream::WriteStd(const float& data)
  195. {
  196.     WriteFloat(data);
  197. }
  198. inline
  199. void CObjectOStream::WriteStd(const double& data)
  200. {
  201.     WriteDouble(data);
  202. }
  203. #if SIZEOF_LONG_DOUBLE != 0
  204. inline
  205. void CObjectOStream::WriteStd(const long double& data)
  206. {
  207.     WriteLDouble(data);
  208. }
  209. #endif
  210. // string
  211. inline
  212. void CObjectOStream::WriteStd(const string& data)
  213. {
  214.     WriteString(data);
  215. }
  216. inline
  217. void CObjectOStream::WriteStd(const CStringUTF8& data)
  218. {
  219.     WriteString(data,eStringTypeUTF8);
  220. }
  221. // C string
  222. inline
  223. void CObjectOStream::WriteStd(const char* const data)
  224. {
  225.     WriteCString(data);
  226. }
  227. inline
  228. void CObjectOStream::WriteStd(char* const data)
  229. {
  230.     WriteCString(data);
  231. }
  232. inline
  233. CObjectOStream::ByteBlock::ByteBlock(CObjectOStream& out, size_t length)
  234.     : m_Stream(out), m_Length(length), m_Ended(false)
  235. {
  236.     out.BeginBytes(*this);
  237. }
  238. inline
  239. CObjectOStream& CObjectOStream::ByteBlock::GetStream(void) const
  240. {
  241.     return m_Stream;
  242. }
  243. inline
  244. size_t CObjectOStream::ByteBlock::GetLength(void) const
  245. {
  246.     return m_Length;
  247. }
  248. inline
  249. void CObjectOStream::ByteBlock::Write(const void* bytes, size_t length)
  250. {
  251.     _ASSERT( length <= m_Length );
  252.     GetStream().WriteBytes(*this, static_cast<const char*>(bytes), length);
  253.     m_Length -= length;
  254. }
  255. inline
  256. CObjectOStream::CharBlock::CharBlock(CObjectOStream& out, size_t length)
  257.     : m_Stream(out), m_Length(length), m_Ended(false)
  258. {
  259.     out.BeginChars(*this);
  260. }
  261. inline
  262. CObjectOStream& CObjectOStream::CharBlock::GetStream(void) const
  263. {
  264.     return m_Stream;
  265. }
  266. inline
  267. size_t CObjectOStream::CharBlock::GetLength(void) const
  268. {
  269.     return m_Length;
  270. }
  271. inline
  272. void CObjectOStream::CharBlock::Write(const char* chars, size_t length)
  273. {
  274.     _ASSERT( length <= m_Length );
  275.     GetStream().WriteChars(*this, chars, length);
  276.     m_Length -= length;
  277. }
  278. inline
  279. CObjectOStream& Separator(CObjectOStream& os)
  280. {
  281.     os.WriteSeparator();
  282.     return os;
  283. }
  284. inline
  285. CObjectOStream& CObjectOStream::operator<<
  286.     (CObjectOStream& (*mod)(CObjectOStream& os))
  287. {
  288.     return mod(*this);
  289. }
  290. inline
  291. string CObjectOStream::GetSeparator(void) const
  292. {
  293.     return m_Separator;
  294. }
  295. inline
  296. void CObjectOStream::SetSeparator(const string sep)
  297. {
  298.     m_Separator = sep;
  299. }
  300. inline
  301. bool CObjectOStream::GetAutoSeparator(void)
  302. {
  303.     return m_AutoSeparator;
  304. }
  305. inline
  306. void CObjectOStream::SetAutoSeparator(bool value)
  307. {
  308.     m_AutoSeparator = value;
  309. }
  310. inline
  311. void CObjectOStream::SetVerifyData(ESerialVerifyData verify)
  312. {
  313.     if (m_VerifyData == eSerialVerifyData_Never ||
  314.         m_VerifyData == eSerialVerifyData_Always ||
  315.         m_VerifyData == eSerialVerifyData_DefValueAlways) {
  316.         return;
  317.     }
  318.     m_VerifyData = (verify == eSerialVerifyData_Default) ?
  319.                    x_GetVerifyDataDefault() : verify;
  320. }
  321. inline
  322. ESerialVerifyData CObjectOStream::GetVerifyData(void) const
  323. {
  324.     switch (m_VerifyData) {
  325.     default:
  326.         break;
  327.     case eSerialVerifyData_No:
  328.     case eSerialVerifyData_Never:
  329.         return eSerialVerifyData_No;
  330.     case eSerialVerifyData_Yes:
  331.     case eSerialVerifyData_Always:
  332.         return eSerialVerifyData_Yes;
  333.     case eSerialVerifyData_DefValue:
  334.     case eSerialVerifyData_DefValueAlways:
  335.         return eSerialVerifyData_DefValue;
  336.     }
  337.     return ms_VerifyDataDefault;
  338. }
  339. inline
  340. void CObjectOStream::SetUseIndentation(bool set)
  341. {
  342.     m_Output.SetUseIndentation(set);
  343. }
  344. inline
  345. bool CObjectOStream::GetUseIndentation(void) const
  346. {
  347.     return m_Output.GetUseIndentation();
  348. }
  349. #endif /* def OBJOSTR__HPP  &&  ndef OBJOSTR__INL */
  350. /* ---------------------------------------------------------------------------
  351. * $Log: objostr.inl,v $
  352. * Revision 1000.4  2004/06/01 19:39:05  gouriano
  353. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.25
  354. *
  355. * Revision 1.25  2004/05/24 18:12:24  gouriano
  356. * In text output files make indentation optional
  357. *
  358. * Revision 1.24  2004/02/09 18:21:53  gouriano
  359. * enforced checking environment vars when setting initialization
  360. * verification parameters
  361. *
  362. * Revision 1.23  2003/11/26 19:59:38  vasilche
  363. * GetPosition() and GetDataFormat() methods now are implemented
  364. * in parent classes CObjectIStream and CObjectOStream to avoid
  365. * pure virtual method call in destructors.
  366. *
  367. * Revision 1.22  2003/11/13 14:06:45  gouriano
  368. * Elaborated data verification on read/write/get to enable skipping mandatory class data members
  369. *
  370. * Revision 1.21  2003/05/22 20:08:42  gouriano
  371. * added UTF8 strings
  372. *
  373. * Revision 1.20  2003/04/29 18:29:06  gouriano
  374. * object data member initialization verification
  375. *
  376. * Revision 1.19  2003/04/10 20:13:37  vakatov
  377. * Rollback the "uninitialized member" verification -- it still needs to
  378. * be worked upon...
  379. *
  380. * Revision 1.17  2002/12/23 18:38:51  dicuccio
  381. * Added WIn32 export specifier: NCBI_XSERIAL_EXPORT.
  382. * Moved all CVS logs to the end.
  383. *
  384. * Revision 1.16  2002/10/25 14:49:29  vasilche
  385. * NCBI C Toolkit compatibility code extracted to libxcser library.
  386. * Serial streams flags names were renamed to fXxx.
  387. *
  388. * Names of flags
  389. *
  390. * Revision 1.15  2002/08/26 18:32:28  grichenk
  391. * Added Get/SetAutoSeparator() to CObjectOStream to control
  392. * output of separators.
  393. *
  394. * Revision 1.14  2002/03/07 22:01:59  grichenk
  395. * Added "Separator" modifier for CObjectOStream
  396. *
  397. * Revision 1.13  2002/02/13 22:39:15  ucko
  398. * Support AIX.
  399. *
  400. * Revision 1.12  2001/10/17 20:41:20  grichenk
  401. * Added CObjectOStream::CharBlock class
  402. *
  403. * Revision 1.11  2001/05/17 14:59:47  lavr
  404. * Typos corrected
  405. *
  406. * Revision 1.10  2000/12/15 21:28:48  vasilche
  407. * Moved some typedefs/enums from corelib/ncbistd.hpp.
  408. * Added flags to CObjectIStream/CObjectOStream: eFlagAllowNonAsciiChars.
  409. * TByte typedef replaced by Uint1.
  410. *
  411. * Revision 1.9  2000/12/15 15:38:01  vasilche
  412. * Added support of Int8 and long double.
  413. * Enum values now have type Int4 instead of long.
  414. *
  415. * Revision 1.8  2000/10/20 15:51:27  vasilche
  416. * Fixed data error processing.
  417. * Added interface for constructing container objects directly into output stream.
  418. * object.hpp, object.inl and object.cpp were split to
  419. * objectinfo.*, objecttype.*, objectiter.* and objectio.*.
  420. *
  421. * Revision 1.7  2000/10/03 17:22:35  vasilche
  422. * Reduced header dependency.
  423. * Reduced size of debug libraries on WorkShop by 3 times.
  424. * Fixed tag allocation for parent classes.
  425. * Fixed CObject allocation/deallocation in streams.
  426. * Moved instantiation of several templates in separate source file.
  427. *
  428. * Revision 1.6  2000/09/18 20:00:07  vasilche
  429. * Separated CVariantInfo and CMemberInfo.
  430. * Implemented copy hooks.
  431. * All hooks now are stored in CTypeInfo/CMemberInfo/CVariantInfo.
  432. * Most type specific functions now are implemented via function pointers instead of virtual functions.
  433. *
  434. * Revision 1.5  2000/08/15 19:44:41  vasilche
  435. * Added Read/Write hooks:
  436. * CReadObjectHook/CWriteObjectHook for objects of specified type.
  437. * CReadClassMemberHook/CWriteClassMemberHook for specified members.
  438. * CReadChoiceVariantHook/CWriteChoiceVariant for specified choice variants.
  439. * CReadContainerElementHook/CWriteContainerElementsHook for containers.
  440. *
  441. * Revision 1.4  2000/05/24 20:08:14  vasilche
  442. * Implemented XML dump.
  443. *
  444. * Revision 1.3  2000/05/09 16:38:34  vasilche
  445. * CObject::GetTypeInfo now moved to CObjectGetTypeInfo::GetTypeInfo to reduce possible errors.
  446. * Added write context to CObjectOStream.
  447. * Inlined most of methods of helping class Member, Block, ByteBlock etc.
  448. *
  449. * Revision 1.2  2000/05/04 16:22:24  vasilche
  450. * Cleaned and optimized blocks and members.
  451. *
  452. * Revision 1.1  1999/05/19 19:56:27  vasilche
  453. * Commit just in case.
  454. *
  455. * ===========================================================================
  456. */