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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: serialasn.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 19:41:43  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.6
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: serialasn.cpp,v 1000.1 2004/06/01 19:41:43 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. *   Serialization classes.
  38. *
  39. * ---------------------------------------------------------------------------
  40. * $Log: serialasn.cpp,v $
  41. * Revision 1000.1  2004/06/01 19:41:43  gouriano
  42. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.6
  43. *
  44. * Revision 1.6  2004/05/17 21:03:03  gorelenk
  45. * Added include of PCH ncbi_pch.hpp
  46. *
  47. * Revision 1.5  2002/10/25 15:15:54  vasilche
  48. * Fixed check for NCBI C toolkit.
  49. *
  50. * Revision 1.4  2002/10/25 15:05:44  vasilche
  51. * Moved more code to libxcser library.
  52. *
  53. * Revision 1.3  2000/10/13 16:28:40  vasilche
  54. * Reduced header dependency.
  55. * Avoid use of templates with virtual methods.
  56. * Reduced amount of different maps used.
  57. * All this lead to smaller compiled code size (libraries and programs).
  58. *
  59. * Revision 1.2  1999/11/22 21:29:27  vasilche
  60. * Fixed compilation on Windows
  61. *
  62. * Revision 1.1  1999/11/22 21:04:42  vasilche
  63. * Cleaned main interface headers. Now generated files should include serial/serialimpl.hpp and user code should include serial/serial.hpp which became might lighter.
  64. *
  65. * Revision 1.3  1999/06/04 20:51:49  vasilche
  66. * First compilable version of serialization.
  67. *
  68. * Revision 1.2  1999/05/19 19:56:57  vasilche
  69. * Commit just in case.
  70. *
  71. * Revision 1.1  1999/03/25 19:12:04  vasilche
  72. * Beginning of serialization library.
  73. *
  74. * ===========================================================================
  75. */
  76. #include <ncbi_pch.hpp>
  77. #include <corelib/ncbistd.hpp>
  78. #if HAVE_NCBI_C
  79. #include <serial/autoptrinfo.hpp>
  80. #include <serial/asntypes.hpp>
  81. #include <serial/classinfo.hpp>
  82. #include <serial/choice.hpp>
  83. #include <serial/serialimpl.hpp>
  84. #include <asn.h>
  85. BEGIN_NCBI_SCOPE
  86. TTypeInfo COctetStringTypeInfoGetTypeInfo(void)
  87. {
  88.     return COctetStringTypeInfo::GetTypeInfo();
  89. }
  90. TTypeInfo CAutoPointerTypeInfoGetTypeInfo(TTypeInfo type)
  91. {
  92.     return CAutoPointerTypeInfo::GetTypeInfo(type);
  93. }
  94. TTypeInfo CSetOfTypeInfoGetTypeInfo(TTypeInfo type)
  95. {
  96.     return CSetOfTypeInfo::GetTypeInfo(type);
  97. }
  98. TTypeInfo CSequenceOfTypeInfoGetTypeInfo(TTypeInfo type)
  99. {
  100.     return CSequenceOfTypeInfo::GetTypeInfo(type);
  101. }
  102. TTypeInfo COldAsnTypeInfoGetTypeInfo(const string& name,
  103.                                      TAsnNewProc newProc,
  104.                                      TAsnFreeProc freeProc,
  105.                                      TAsnReadProc readProc,
  106.                                      TAsnWriteProc writeProc)
  107. {
  108.     return new COldAsnTypeInfo(name, newProc, freeProc, readProc, writeProc);
  109. }
  110. static TObjectPtr CreateAsnStruct(TTypeInfo info)
  111. {
  112.     TObjectPtr object = calloc(info->GetSize(), 1);
  113.     if ( !object )
  114.         THROW_TRACE(bad_alloc, ());
  115.     return object;
  116. }
  117. static const type_info* GetNullId(TConstObjectPtr )
  118. {
  119.     return 0;
  120. }
  121. CClassTypeInfo* CClassInfoHelperBase::CreateAsnStructInfo(const char* name,
  122.                                                           size_t size,
  123.                                                           const type_info& id)
  124. {
  125.     return CreateClassInfo(name, size,
  126.                            TConstObjectPtr(0), &CreateAsnStruct,
  127.                            id, &GetNullId);
  128. }
  129. static TMemberIndex WhichAsn(const CChoiceTypeInfo* /*choiceType*/,
  130.                              TConstObjectPtr choicePtr)
  131. {
  132.     const valnode* node = static_cast<const valnode*>(choicePtr);
  133.     return node->choice + (kEmptyChoice - 0);
  134. }
  135. static void SelectAsn(const CChoiceTypeInfo* /*choiceType*/,
  136.                       TObjectPtr choicePtr,
  137.                       TMemberIndex index)
  138. {
  139.     valnode* node = static_cast<valnode*>(choicePtr);
  140.     node->choice = Uint1(index - (kEmptyChoice - 0));
  141. }
  142. static void ResetAsn(const CChoiceTypeInfo* /*choiceType*/,
  143.                      TObjectPtr choicePtr)
  144. {
  145.     valnode* node = static_cast<valnode*>(choicePtr);
  146.     node->choice = 0;
  147. }
  148. CChoiceTypeInfo* CClassInfoHelperBase::CreateAsnChoiceInfo(const char* name)
  149. {
  150.     return CreateChoiceInfo(name, sizeof(valnode),
  151.                             TConstObjectPtr(0), &CreateAsnStruct, typeid(void),
  152.                             &WhichAsn, &SelectAsn, &ResetAsn);
  153. }
  154. END_NCBI_SCOPE
  155. #endif