home *** CD-ROM | disk | FTP | other *** search
/ Power GUI Programming with VisualAge C++ / powergui.iso / trialva / ibmcppw / include / iobslist.hpp < prev    next >
Encoding:
C/C++ Source or Header  |  1996-02-22  |  3.7 KB  |  120 lines

  1. #ifndef _IOBSLIST_
  2. #define _IOBSLIST_
  3. /*******************************************************************************
  4. * FILE NAME: iobslist.hpp                                                      *
  5. *                                                                              *
  6. * DESCRIPTION:                                                                 *
  7. *   Declaration of the classes:                                                *
  8. *     IObserverList                                                            *
  9. *                                                                              *
  10. * COPYRIGHT:                                                                   *
  11. *   IBM Open Class Library                                                     *
  12. *   (C) Copyright International Business Machines Corporation 1992, 1996       *
  13. *   Licensed Material - Program-Property of IBM - All Rights Reserved.         *
  14. *   US Government Users Restricted Rights - Use, duplication, or disclosure    *
  15. *   restricted by GSA ADP Schedule Contract with IBM Corp.                     *
  16. *                                                                              *
  17. *******************************************************************************/
  18.  
  19. #include <ivbase.hpp>
  20. #include <ireslock.hpp>
  21.  
  22. class IObserver;
  23. class IObserverDataList;
  24. class INotificationEvent;
  25. class IObserverPtr;
  26. class IObserverListData;
  27.  
  28. #pragma pack(4)
  29.  
  30. class IObserverList : public IVBase {
  31. typedef IVBase
  32.   Inherited;
  33.  
  34. public:
  35.  
  36. /*---------------------------- Constructors ----------------------------------*/
  37.   IObserverList     ( );
  38.  
  39. virtual
  40.  ~IObserverList     ( );
  41.  
  42. class Cursor : public IVBase {
  43. public:
  44. /*---------------------------- Constructors ----------------------------------*/
  45.   Cursor ( IObserverList& observerList );
  46. virtual
  47.  ~Cursor ( );
  48.  
  49. /*-------------------------- Cursor Movement ---------------------------------*/
  50. virtual Boolean
  51.   setToFirst      ( ),
  52.   setToNext       ( ),
  53.   setToLast       ( ),
  54.   setToPrevious   ( ),
  55.   isValid         ( ) const;
  56.  
  57. virtual void
  58.   invalidate      ( );
  59.  
  60. private:
  61. /*--------------------------------- Private ----------------------------------*/
  62. friend class IObserverList;
  63. void
  64.  *fCursor;
  65. }; //Cursor
  66.  
  67. friend class IObserverList::Cursor;
  68.  
  69. /*------------------------- Observer Notification ----------------------------*/
  70. IObserverList
  71.  ¬ifyObservers ( const INotificationEvent& event );
  72.  
  73. /*---------------------- Observer Addition and Removal -----------------------*/
  74. virtual Boolean
  75.   add             ( IObserver&       observer,
  76.                     void*            userData );
  77. virtual IObserver
  78.  &elementAt       ( const Cursor&    cursor ) const;
  79. virtual IObserverList
  80.  &removeAt        ( const Cursor&    cursor ),
  81.  &remove          ( const IObserver& observer ),
  82.  &removeAll       ( );
  83. unsigned long
  84.  numberOfElements ( ) const;
  85.  
  86. Boolean
  87.  isEmpty          ( ) const;
  88.  
  89.  
  90. private:
  91. /*--------------------------------- Private ----------------------------------*/
  92. IObserverDataList
  93.   *fObserverDataList;
  94. const char
  95.   *observerKey();
  96. const IString
  97.   fObserverKey;
  98. static IString
  99.   obsLockKeyPrefix;
  100.  
  101. unsigned long
  102.   fNumObservers;
  103. IObserverPtr
  104.   *fpObserverArray;
  105. void removeFromObsArray(const IObserver& observer);
  106. void removeFromObsArray(IObserver& observer);
  107. IObserverListData
  108.   *fObserverListData;
  109. /*----------------------------- Hidden Functions -----------------------------*/
  110. IObserverList ( const IObserverList& obsList );
  111. IObserverList
  112.    &operator= (const IObserverList& obsList);
  113. }; //IObserverList
  114.  
  115. #pragma pack()
  116.  
  117. /*----------------------------- Inline Functions -----------------------------*/
  118.  
  119. #endif /* _IOBSLIST_ */
  120.