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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: PluginMRUList.cpp,v $
  4.  * PRODUCTION Revision 1000.0  2004/06/01 21:26:05  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [GCC34_MSVC7] Dev-tree R1.3
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /* $Id: PluginMRUList.cpp,v 1000.0 2004/06/01 21:26:05 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:  .......
  35.  *
  36.  * File Description:
  37.  *   .......
  38.  *
  39.  * Remark:
  40.  *   This code was originally generated by application DATATOOL
  41.  *   using specifications from the data definition file
  42.  *   'plugin.asn'.
  43.  */
  44. // standard includes
  45. #include <ncbi_pch.hpp>
  46. #include <corelib/ncbistre.hpp>
  47. #include <serial/objostr.hpp>
  48. #include <serial/objistr.hpp>
  49. #include <serial/serial.hpp>
  50. #include <gui/utils/system_path.hpp>
  51. #include <gui/plugin/PluginMRUEntry.hpp>
  52. // generated includes
  53. #include <gui/plugin/PluginMRUList.hpp>
  54. // generated classes
  55. BEGIN_NCBI_SCOPE
  56. BEGIN_objects_SCOPE // namespace ncbi::objects::
  57. // constructor
  58. CPluginMRUList::CPluginMRUList(const string& filename, int max_list_size)
  59. : m_Filename(filename),
  60.   m_MaxListSize(max_list_size)
  61. {
  62.     x_ReadCacheFile();
  63. }
  64. // destructor
  65. CPluginMRUList::~CPluginMRUList(void)
  66. {
  67. }
  68. void CPluginMRUList::Add(CPluginMessage& msg, const string& label)
  69. {
  70.     if (CRef<CPluginMRUEntry> entry = x_Exists(label)) {
  71.         Set().remove(entry);
  72.     }
  73.     CRef<CPluginMessage> clone(new CPluginMessage());
  74.     clone->Assign(msg);
  75.     clone->SetReply().Reset();
  76.     CRef<CPluginMRUEntry> entry(new CPluginMRUEntry);
  77.     entry->SetMessage(*clone);
  78.     entry->SetLabel(label);
  79.     
  80.     Set().push_front(entry);
  81.     while (Get().size() > m_MaxListSize) {
  82.         Set().pop_back();
  83.     }
  84.     x_WriteCacheFile();
  85. }
  86. void CPluginMRUList::Delete(CPluginMessage& msg)
  87. {
  88.     if (CRef<CPluginMRUEntry> entry = x_Exists(msg)) {
  89.         Set().remove(entry);
  90.     }
  91. }
  92. CRef<CPluginMRUEntry> CPluginMRUList::x_Exists(const string& label)
  93. {
  94.     NON_CONST_ITERATE(CPluginMRUList::Tdata, iter, Set()) {
  95.         CRef<CPluginMRUEntry> entry = *iter;
  96.         
  97.         if (entry->GetLabel() == label) {
  98.             return entry;
  99.         }
  100.     }
  101.     return CRef<CPluginMRUEntry>(null);
  102. }
  103. CRef<CPluginMRUEntry> CPluginMRUList::x_Exists(CPluginMessage& msg)
  104. {
  105.     CRef<CPluginMessage> msg_ref(&msg);
  106.     NON_CONST_ITERATE(CPluginMRUList::Tdata, iter, Set()) {
  107.         CRef<CPluginMRUEntry> entry = *iter;
  108.         
  109.         if (&(entry->GetMessage()) == &msg) {
  110.             return entry;
  111.         }
  112.     }
  113.     return CRef<CPluginMRUEntry>(null);
  114. }
  115. //const CPluginMRUList::TPluginMessageList& 
  116. //CPluginMRUList::GetMessageList() const 
  117. //{
  118. //    return m_List;
  119. //}
  120. void CPluginMRUList::x_ReadCacheFile()
  121. {
  122.     string filename = CSystemPath::ResolvePath("<home>/" + m_Filename);
  123.     auto_ptr<CNcbiIfstream> in_file_str
  124.         (new CNcbiIfstream(filename.c_str()));
  125.     if (in_file_str->fail()) {
  126.         // log
  127.         return;
  128.     }
  129.     auto_ptr<CObjectIStream> in_obj_str
  130.         (CObjectIStream::Open(eSerial_AsnText, *in_file_str));
  131.     try {
  132.         *in_obj_str >> *this;
  133.     }
  134.     catch (exception const except) {
  135.         LOG_POST(Warning  << "MRU Chache file read failed: " << except.what());
  136.     }
  137.     /**
  138.     catch (...) {
  139.         LOG_POST(Warning  << "MRU Chache file read failed: ");
  140.     }
  141.     **/
  142. /*
  143.     while (!in_file_str->eof()) {
  144.         CRef<CPluginMessage> msg(new CPluginMessage());
  145.         
  146.         try {
  147.             *in_obj_str >> *msg;
  148.         } 
  149.         catch (...) {
  150.             // log
  151.             return;
  152.         }
  153.         m_List.push_back(msg);
  154.     }
  155. */
  156. }
  157. void CPluginMRUList::x_WriteCacheFile()
  158. {
  159.     string filename = CSystemPath::ResolvePath("<home>/" + m_Filename);
  160.     auto_ptr<CNcbiOfstream> out_file_str
  161.         (new CNcbiOfstream(filename.c_str(), IOS_BASE::trunc));
  162.     if (out_file_str->fail()) {
  163.         // log
  164.         return;
  165.     }
  166.     auto_ptr<CObjectOStream> out_obj_str
  167.         (CObjectOStream::Open(eSerial_AsnText, *out_file_str));
  168.     *out_obj_str << *this;
  169. //    ITERATE(TPluginMessageList, iter, m_List) {
  170. //        *out_obj_str << **iter;
  171. //    }
  172. }
  173. END_objects_SCOPE // namespace ncbi::objects::
  174. END_NCBI_SCOPE
  175. /*
  176. * ===========================================================================
  177. *
  178. * $Log: PluginMRUList.cpp,v $
  179. * Revision 1000.0  2004/06/01 21:26:05  gouriano
  180. * PRODUCTION: IMPORTED [GCC34_MSVC7] Dev-tree R1.3
  181. *
  182. * Revision 1.3  2004/06/01 18:09:45  dicuccio
  183. * Always prune the MRU list to the maximum size if it is larger
  184. *
  185. * Revision 1.2  2004/05/21 22:27:46  gorelenk
  186. * Added PCH ncbi_pch.hpp
  187. *
  188. * Revision 1.1  2004/05/18 11:18:35  friedman
  189. * Initial Revision
  190. *
  191. *
  192. * ===========================================================================
  193. */
  194. /* Original file checksum: lines: 64, chars: 1889, CRC32: 5415d4ae */