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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: version.cpp,v $
  4.  * PRODUCTION Revision 1000.4  2004/06/01 19:09:35  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.7
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: version.cpp,v 1000.4 2004/06/01 19:09:35 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.  * Authors:  Denis Vakatov, Vladimir Ivanov
  35.  *
  36.  * File Description:
  37.  *   CVersionInfo -- a version info storage class
  38.  *
  39.  */
  40. #include <ncbi_pch.hpp>
  41. #include <corelib/version.hpp>
  42. BEGIN_NCBI_SCOPE
  43. const CVersionInfo CVersionInfo::kAny(0, 0, 0);
  44. const CVersionInfo CVersionInfo::kLatest(-1, -1, -1);
  45. CVersionInfo::CVersionInfo(int ver_major,
  46.                            int  ver_minor,
  47.                            int  patch_level, 
  48.                            const string& name) 
  49.     : m_Major(ver_major),
  50.       m_Minor(ver_minor),
  51.       m_PatchLevel(patch_level),
  52.       m_Name(name)
  53. {
  54. }
  55. CVersionInfo::CVersionInfo(const CVersionInfo& version)
  56.     : m_Major(version.m_Major),
  57.       m_Minor(version.m_Minor),
  58.       m_PatchLevel(version.m_PatchLevel),
  59.       m_Name(version.m_Name)
  60. {
  61. }
  62. string CVersionInfo::Print(void) const
  63. {
  64.     CNcbiOstrstream os;
  65.     os << m_Major << "." << m_Minor << "." << m_PatchLevel;
  66.     if ( !m_Name.empty() ) {
  67.         os << " (" << m_Name << ")";
  68.     }
  69.     return CNcbiOstrstreamToString(os);
  70. }
  71. CVersionInfo::EMatch 
  72. CVersionInfo::Match(const CVersionInfo& version_info) const
  73. {
  74.     if (GetMajor() != version_info.GetMajor())
  75.         return eNonCompatible;
  76.     if (GetMinor() != version_info.GetMinor())
  77.         return eNonCompatible;
  78.     if (GetPatchLevel() == version_info.GetPatchLevel()) {
  79.         return eFullyCompatible;
  80.     }
  81.     if (GetPatchLevel() > version_info.GetPatchLevel()) {
  82.         return eBackwardCompatible;
  83.     }
  84.     return eConditionallyCompatible;
  85. }
  86. bool IsBetterVersion(const CVersionInfo& info, 
  87.                      const CVersionInfo& cinfo,
  88.                      int&  best_major, 
  89.                      int&  best_minor,
  90.                      int&  best_patch_level)
  91. {
  92.     int major = cinfo.GetMajor();
  93.     int minor = cinfo.GetMinor();
  94.     int patch_level = cinfo.GetPatchLevel();
  95.     if (info.GetMajor() == -1) {  // best major search
  96.         if (major > best_major) { 
  97.             best_major = major;
  98.             best_minor = minor;
  99.             best_patch_level = patch_level;
  100.             return true;
  101.         }
  102.     } else { // searching for the specific major version
  103.         if (info.GetMajor() != major) {
  104.             return false;
  105.         }
  106.     }
  107.     if (info.GetMinor() == -1) {  // best minor search
  108.         if (minor > best_minor) {
  109.             best_major = major;
  110.             best_minor = minor;
  111.             best_patch_level = patch_level;
  112.             return true;
  113.         }
  114.     } else { 
  115.         if (info.GetMinor() != minor) {
  116.             return false;
  117.         }
  118.     }
  119.     // always looking for the best patch
  120.     if (patch_level > best_patch_level) {
  121.             best_major = major;
  122.             best_minor = minor;
  123.             best_patch_level = patch_level;
  124.             return true;
  125.     }
  126.     return false;    
  127. }
  128. END_NCBI_SCOPE
  129. /*
  130.  * ===========================================================================
  131.  * $Log: version.cpp,v $
  132.  * Revision 1000.4  2004/06/01 19:09:35  gouriano
  133.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.7
  134.  *
  135.  * Revision 1.7  2004/05/14 13:59:27  gorelenk
  136.  * Added include of ncbi_pch.hpp
  137.  *
  138.  * Revision 1.6  2003/11/19 21:46:59  vasilche
  139.  * Removed extra '' from version info.
  140.  *
  141.  * Revision 1.5  2003/11/17 19:51:17  kuznets
  142.  * + IsBetterVersion service function
  143.  *
  144.  * Revision 1.4  2003/10/30 19:25:35  kuznets
  145.  * Reflecting changes in hpp file.
  146.  *
  147.  * Revision 1.3  2003/10/30 16:38:50  kuznets
  148.  * Implemented CVersionInfo::Match
  149.  *
  150.  * Revision 1.2  2003/01/13 20:42:50  gouriano
  151.  * corrected the problem with ostrstream::str(): replaced such calls with
  152.  * CNcbiOstrstreamToString(os)
  153.  *
  154.  * Revision 1.1  2002/12/26 17:10:47  ivanov
  155.  * Initial revision
  156.  *
  157.  * ===========================================================================
  158.  */