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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: message_history.hpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/04/12 18:12:30  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.4
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef GUI_PLUGIN_MESSAGEHISTORY_HPP
  10. #define GUI_PLUGIN_MESSAGEHISTORY_HPP
  11. /* $Id: message_history.hpp,v 1000.1 2004/04/12 18:12:30 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.  * File Description:
  37.  *  This files contain definitions for plugin messages history.
  38.  *
  39.  * ===========================================================================
  40.  */
  41. #include <corelib/ncbistd.hpp>
  42. #include <corelib/ncbiobj.hpp>
  43. #include <gui/plugin/PluginMessage.hpp>
  44. #include <gui/plugin/MessageHistoryInfo.hpp>
  45. #include <vector>
  46. BEGIN_NCBI_SCOPE
  47. // forward declarations
  48. class CPluginMessageHistory_CI;
  49. //=======================  CPluginMessageHistory  ===========================
  50. /* 
  51.  * NOTE: Messages can be ordered by the time they were entered into the 
  52.  * message queue which result in a linear data structure. 
  53.  * It can also be as a 'forest' where messages points to messages they
  54.  * initiated (a tree stucture).
  55.  * Though the underlying data structures supporst both views, currently
  56.  * we support only the linear view at the user level.
  57.  */
  58. class NCBI_XGBPLUGIN_EXPORT CPluginMessageHistory
  59. {
  60. public:
  61.     // access
  62.     static CPluginMessageHistory& Instance(void);
  63.     // destructor
  64.     virtual ~CPluginMessageHistory(void);
  65.     // types
  66.     typedef objects::CMessageHistoryInfo TInfo;
  67.     typedef CPluginMessageHistory_CI     const_iterator;
  68.     // clear the current history
  69.     void Clear();
  70.     // Add message to history list
  71.     void AddMessage(const objects::CPluginMessage&);
  72.     // Returns the number of message in the history repository
  73.     SIZE_TYPE  Size(void) const;
  74.     
  75.     const TInfo& operator[](size_t) const;
  76.     // iterator
  77.     const_iterator begin(void) const;
  78.     const_iterator end(void) const;
  79. private:
  80.     friend class CPluginMessageHistory_CI;
  81.     class CMessageHistoryEntry 
  82.     {
  83.     public:
  84.         // constructor
  85.         CMessageHistoryEntry(const objects::CPluginMessage&);
  86.         // destructor
  87.         ~CMessageHistoryEntry(void);
  88.         // copy constructor 
  89.         CMessageHistoryEntry(const CMessageHistoryEntry&);
  90.         // assignment operator
  91.         CMessageHistoryEntry& operator=(const CMessageHistoryEntry&);
  92.         // types
  93.         typedef objects::CMessageHistoryInfo TInfo;
  94.         typedef size_t                       TPredecessor;
  95.         typedef vector<size_t>               TSuccessors;
  96.         
  97.         // typedef CMessageHistoryInfo TInfo
  98.         const TInfo& GetInfo(void) const;
  99.         
  100.         // typedef size_t TPredecessor
  101.         TPredecessor GetPredecessor(void) const;
  102.         void SetPredecessor(const TPredecessor& value);
  103.         
  104.         // typedef vector< int > TSuccessors
  105.         const TSuccessors& GetSuccessors(void) const;
  106.         void AddSuccessor(size_t);
  107.     private:
  108.         
  109.         // data
  110.         TInfo           m_Info;
  111.         TPredecessor    m_Predecessor;
  112.         TSuccessors     m_Successors;
  113.     };
  114.     // constructor
  115.     CPluginMessageHistory(void);
  116.     // Prohibit copy constructor and assignment operator
  117.     CPluginMessageHistory(const CPluginMessageHistory&);
  118.     CPluginMessageHistory& operator=(const CPluginMessageHistory&);
  119.     // private types
  120.     typedef vector< CMessageHistoryEntry > TEntries;
  121.     // data
  122.     static auto_ptr<CPluginMessageHistory> sm_Instance;
  123.     TEntries                               m_Entries;
  124. };
  125. //======================  CPluginMessageHistory_CI  ==========================
  126. class NCBI_XGBPLUGIN_EXPORT CPluginMessageHistory_CI
  127. {
  128. public:
  129.     // types
  130.     typedef CPluginMessageHistory::TInfo    TInfo;
  131.     typedef CPluginMessageHistory::TEntries TEntries;
  132.     // copy constructor
  133.     CPluginMessageHistory_CI(const CPluginMessageHistory_CI&);
  134.     // assignment operator
  135.     CPluginMessageHistory_CI& operator=(const CPluginMessageHistory_CI&);
  136.     // increment & decrement operators
  137.     CPluginMessageHistory_CI& operator++(void);
  138.     CPluginMessageHistory_CI& operator--(void);
  139.     // dereferencing
  140.     const TInfo& operator*(void) const;
  141.     const TInfo* operator->(void) const;
  142.     // comparison
  143.     bool operator==(const CPluginMessageHistory_CI& other);
  144.     bool operator!=(const CPluginMessageHistory_CI& other);
  145. private:
  146.     friend CPluginMessageHistory_CI CPluginMessageHistory::begin(void) const;
  147.     friend CPluginMessageHistory_CI CPluginMessageHistory::end(void) const;
  148.     // constructors
  149.     CPluginMessageHistory_CI(void);    
  150.     CPluginMessageHistory_CI(CPluginMessageHistory::TEntries::const_iterator);
  151.     const CPluginMessageHistory_CI operator++(int);
  152.     const CPluginMessageHistory_CI operator--(int);
  153.     // data
  154.     CPluginMessageHistory::TEntries::const_iterator   m_Iterator;
  155. };
  156. ///////////////////////////////////////////////////////////
  157. ///////////////////// inline methods //////////////////////
  158. ///////////////////////////////////////////////////////////
  159. //===============  CPluginMessageHistory  =================
  160. inline
  161. SIZE_TYPE CPluginMessageHistory::Size(void) const
  162. {
  163.     return m_Entries.size();
  164. }
  165. inline
  166. const objects::CMessageHistoryInfo&
  167. CPluginMessageHistory::operator[](size_t index) const
  168. {
  169.     return m_Entries[index].GetInfo();
  170. }
  171. //=============  CPluginMessageHistory_CI  ================
  172. inline
  173. CPluginMessageHistory_CI::CPluginMessageHistory_CI(void)
  174. {
  175. }
  176. inline
  177. CPluginMessageHistory_CI::CPluginMessageHistory_CI
  178. (const CPluginMessageHistory_CI& other)
  179. {
  180.     *this = other;
  181. }
  182. inline
  183. CPluginMessageHistory_CI& CPluginMessageHistory_CI::operator=
  184. (const CPluginMessageHistory_CI& other)
  185. {
  186.     if ( this != &other ) {
  187.         m_Iterator = other.m_Iterator;
  188.     }
  189.     return *this;
  190. }
  191. inline
  192. CPluginMessageHistory_CI::CPluginMessageHistory_CI
  193. (CPluginMessageHistory::TEntries::const_iterator iter)
  194. {
  195.     m_Iterator = iter;
  196. }
  197. inline
  198. CPluginMessageHistory_CI& CPluginMessageHistory_CI::operator++(void)
  199. {
  200.     ++m_Iterator;
  201.     return *this;
  202. }
  203. inline
  204. CPluginMessageHistory_CI& CPluginMessageHistory_CI::operator--(void)
  205. {
  206.     --m_Iterator;
  207.     return *this;
  208. }
  209. inline
  210. const CPluginMessageHistory_CI::TInfo& CPluginMessageHistory_CI::operator*(void) const
  211. {
  212.     return m_Iterator->GetInfo();
  213. }
  214. inline
  215. const CPluginMessageHistory_CI::TInfo* CPluginMessageHistory_CI::operator->(void) const
  216. {
  217.     return &(m_Iterator->GetInfo());
  218. }
  219. inline
  220. bool CPluginMessageHistory_CI::operator==(const CPluginMessageHistory_CI& other)
  221. {
  222.     return m_Iterator == other.m_Iterator;
  223. }
  224. inline
  225. bool CPluginMessageHistory_CI::operator!=(const CPluginMessageHistory_CI& other)
  226. {
  227.     return !(*this == other);
  228. }
  229. ///////////////////////////////////////////////////////////
  230. ////////////////// end of inline methods //////////////////
  231. ///////////////////////////////////////////////////////////
  232. END_NCBI_SCOPE
  233. /*
  234. * ===========================================================================
  235. *
  236. * $Log: message_history.hpp,v $
  237. * Revision 1000.1  2004/04/12 18:12:30  gouriano
  238. * PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.4
  239. *
  240. * Revision 1.4  2003/12/31 20:31:14  dicuccio
  241. * Added Clear()
  242. *
  243. * Revision 1.3  2003/08/22 15:54:48  dicuccio
  244. * General clean-up:  Removed unneeded export specifiers from templates; removed
  245. * 'USING_SCOPE(objects)'
  246. *
  247. * Revision 1.2  2003/07/15 13:51:57  shomrat
  248. * Completion of history interface
  249. *
  250. * Revision 1.1  2003/07/14 10:52:10  shomrat
  251. * Initial Revision
  252. *
  253. *
  254. * ===========================================================================
  255. */
  256. #endif // GUI_PLUGIN_MESSAGEHISTORY_HPP