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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: typemap.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 19:42:02  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.3
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: typemap.cpp,v 1000.1 2004/06/01 19:42:02 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. * ---------------------------------------------------------------------------
  40. * $Log: typemap.cpp,v $
  41. * Revision 1000.1  2004/06/01 19:42:02  gouriano
  42. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.3
  43. *
  44. * Revision 1.3  2004/05/17 21:03:04  gorelenk
  45. * Added include of PCH ncbi_pch.hpp
  46. *
  47. * Revision 1.2  2000/11/07 17:25:42  vasilche
  48. * Fixed encoding of XML:
  49. *     removed unnecessary apostrophes in OCTET STRING
  50. *     removed unnecessary content in NULL
  51. * Added module names to CTypeInfo and CEnumeratedTypeValues
  52. *
  53. * Revision 1.1  2000/10/13 16:28:41  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. * ===========================================================================
  60. */
  61. #include <ncbi_pch.hpp>
  62. #include <corelib/ncbistd.hpp>
  63. #include <serial/typemap.hpp>
  64. #include <serial/typemapimpl.hpp>
  65. BEGIN_NCBI_SCOPE
  66. CTypeInfoMap::CTypeInfoMap(void)
  67.     : m_Data(0)
  68. {
  69. }
  70. CTypeInfoMap::~CTypeInfoMap(void)
  71. {
  72.     delete m_Data;
  73. }
  74. TTypeInfo CTypeInfoMap::GetTypeInfo(TTypeInfo key, TTypeInfoGetter1 func)
  75. {
  76.     CTypeInfoMapData* data = m_Data;
  77.     if ( !data )
  78.         m_Data = data = new CTypeInfoMapData;
  79.     return data->GetTypeInfo(key, func);
  80. }
  81. TTypeInfo CTypeInfoMap::GetTypeInfo(TTypeInfo key, TTypeInfoCreator1 func)
  82. {
  83.     CTypeInfoMapData* data = m_Data;
  84.     if ( !data )
  85.         m_Data = data = new CTypeInfoMapData;
  86.     return data->GetTypeInfo(key, func);
  87. }
  88. TTypeInfo CTypeInfoMapData::GetTypeInfo(TTypeInfo key, TTypeInfoGetter1 func)
  89. {
  90.     TTypeInfo& slot = m_Map[key];
  91.     TTypeInfo ret = slot;
  92.     if ( !ret )
  93.         slot = ret = func(key);
  94.     return ret;
  95. }
  96. TTypeInfo CTypeInfoMapData::GetTypeInfo(TTypeInfo key, TTypeInfoCreator1 func)
  97. {
  98.     TTypeInfo& slot = m_Map[key];
  99.     TTypeInfo ret = slot;
  100.     if ( !ret )
  101.         slot = ret = func(key);
  102.     return ret;
  103. }
  104. CTypeInfoMap2::CTypeInfoMap2(void)
  105.     : m_Data(0)
  106. {
  107. }
  108. CTypeInfoMap2::~CTypeInfoMap2(void)
  109. {
  110.     delete m_Data;
  111. }
  112. TTypeInfo CTypeInfoMap2::GetTypeInfo(TTypeInfo arg1, TTypeInfo arg2,
  113.                                      TTypeInfoGetter2 func)
  114. {
  115.     CTypeInfoMap2Data* data = m_Data;
  116.     if ( !data )
  117.         m_Data = data = new CTypeInfoMap2Data;
  118.     return data->GetTypeInfo(arg1, arg2, func);
  119. }
  120. TTypeInfo CTypeInfoMap2::GetTypeInfo(TTypeInfo arg1, TTypeInfo arg2,
  121.                                      TTypeInfoCreator2 func)
  122. {
  123.     CTypeInfoMap2Data* data = m_Data;
  124.     if ( !data )
  125.         m_Data = data = new CTypeInfoMap2Data;
  126.     return data->GetTypeInfo(arg1, arg2, func);
  127. }
  128. TTypeInfo CTypeInfoMap2Data::GetTypeInfo(TTypeInfo arg1, TTypeInfo arg2,
  129.                                          TTypeInfoGetter2 func)
  130. {
  131.     TTypeInfo& slot = m_Map[arg1][arg2];
  132.     TTypeInfo ret = slot;
  133.     if ( !ret )
  134.         slot = ret = func(arg1, arg2);
  135.     return ret;
  136. }
  137. TTypeInfo CTypeInfoMap2Data::GetTypeInfo(TTypeInfo arg1, TTypeInfo arg2,
  138.                                          TTypeInfoCreator2 func)
  139. {
  140.     TTypeInfo& slot = m_Map[arg1][arg2];
  141.     TTypeInfo ret = slot;
  142.     if ( !ret )
  143.         slot = ret = func(arg1, arg2);
  144.     return ret;
  145. }
  146. END_NCBI_SCOPE