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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: active_obj.hpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/04/21 14:47:38  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.8
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef _ACTIVE_OBJ_HPP_
  10. #define _ACTIVE_OBJ_HPP_
  11. /* $Id: active_obj.hpp,v 1000.2 2004/04/21 14:47:38 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 Name:  $Id: active_obj.hpp,v 1000.2 2004/04/21 14:47:38 gouriano Exp $
  37. *
  38. * Author:  Michael Kholodov
  39. *   
  40. * File Description:  CActiveObject and IEventListener, object notification
  41. *                    interface
  42. *
  43. *
  44. * $Log: active_obj.hpp,v $
  45. * Revision 1000.2  2004/04/21 14:47:38  gouriano
  46. * PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.8
  47. *
  48. * Revision 1.8  2004/04/08 15:56:58  kholodov
  49. * Multiple bug fixes and optimizations
  50. *
  51. * Revision 1.7  2004/02/27 14:37:32  kholodov
  52. * Modified: set collection replaced by list for listeners
  53. *
  54. * Revision 1.6  2002/12/16 18:56:50  kholodov
  55. * Fixed: memory leak in CStatement object
  56. *
  57. * Revision 1.5  2002/09/18 18:47:30  kholodov
  58. * Modified: CActiveObject inherits directly from IEventListener
  59. * Added: Additional trace output
  60. *
  61. * Revision 1.4  2002/09/09 20:48:56  kholodov
  62. * Added: Additional trace output about object life cycle
  63. * Added: CStatement::Failed() method to check command status
  64. *
  65. * Revision 1.3  2002/05/16 22:04:36  kholodov
  66. * Added: CDbapiClosedEvent()
  67. *
  68. * Revision 1.2  2002/02/05 17:16:23  kholodov
  69. * Put into right scope, invalidobjex retired
  70. *
  71. * Revision 1.1  2002/01/30 14:51:22  kholodov
  72. * User DBAPI implementation, first commit
  73. *
  74. *
  75. *
  76. */
  77. #include <corelib/ncbistd.hpp>
  78. //#include <corelib/ncbiobj.hpp>
  79. #include <list>
  80. BEGIN_NCBI_SCOPE
  81. class CActiveObject;
  82. class CDbapiEvent
  83. {
  84. public:
  85.    
  86.     CDbapiEvent(CActiveObject* src, const string& name)
  87.         : m_source(src), m_name(name) {}
  88.   
  89.     virtual ~CDbapiEvent() {}
  90.     CActiveObject* GetSource() const { return m_source; }
  91.     string GetName() const { return m_name; }
  92.     
  93. private:
  94.     CActiveObject* m_source;
  95.     string m_name;
  96. };
  97. class CDbapiDeletedEvent : public CDbapiEvent
  98. {
  99. public:
  100.     CDbapiDeletedEvent(CActiveObject* src)
  101.         : CDbapiEvent(src, "CDbapiDeletedEvent") {}
  102.     virtual ~CDbapiDeletedEvent() {}
  103. };
  104. class CDbapiAuxDeletedEvent : public CDbapiEvent
  105. {
  106. public:
  107.     CDbapiAuxDeletedEvent(CActiveObject* src)
  108.         : CDbapiEvent(src, "CDbapiAuxDeletedEvent") {}
  109.     virtual ~CDbapiAuxDeletedEvent() {}
  110. };
  111. class CDbapiNewResultEvent : public CDbapiEvent
  112. {
  113. public:
  114.     CDbapiNewResultEvent(CActiveObject* src)
  115.         : CDbapiEvent(src, "CDbapiNewResultEvent") {}
  116.     virtual ~CDbapiNewResultEvent() {}
  117. };
  118. class CDbapiClosedEvent : public CDbapiEvent
  119. {
  120. public:
  121.     CDbapiClosedEvent(CActiveObject* src)
  122.         : CDbapiEvent(src, "CDbapiClosedEvent") {}
  123.     virtual ~CDbapiClosedEvent() {}
  124. };
  125. //===============================================================
  126. class IEventListener
  127. {
  128. public:
  129.     virtual void Action(const CDbapiEvent& e) = 0;
  130. protected:
  131.     IEventListener() {}
  132. };
  133. //=================================================================
  134. class CActiveObject : //public CObject,
  135.                       public IEventListener
  136. {
  137. public:
  138.     CActiveObject();
  139.     virtual ~CActiveObject();
  140.     void AddListener(CActiveObject* obj);
  141.     void RemoveListener(CActiveObject* obj);
  142.     void Notify(const CDbapiEvent& e);
  143.     // Do nothing by default
  144.     virtual void Action(const CDbapiEvent& e);
  145.     string GetIdent() const;
  146. protected:
  147.     typedef list<CActiveObject*> TLList;
  148.     void SetIdent(const string& name);
  149.     TLList& GetListenerList();
  150. private:
  151.     TLList m_listenerList;
  152.     string m_ident;  // Object identificator
  153. };
  154. END_NCBI_SCOPE
  155. #endif // _GENERAL_EXCEPTION_HPP_