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

  1. #ifndef _IRESLOCK_
  2. #define _IRESLOCK_
  3. /*******************************************************************************
  4. * FILE NAME: ireslock.hpp                                                      *
  5. *                                                                              *
  6. * DESCRIPTION:                                                                 *
  7. *   Declaration of the classes:                                                *
  8. *     IResource                                                                *
  9. *     IPrivateResource                                                         *
  10. *     ISharedResource                                                          *
  11. *     IResourceLock                                                            *
  12. *                                                                              *
  13. * COPYRIGHT:                                                                   *
  14. *   IBM Open Class Library                                                     *
  15. *   (C) Copyright International Business Machines Corporation 1992, 1996       *
  16. *   Licensed Material - Program-Property of IBM - All Rights Reserved.         *
  17. *   US Government Users Restricted Rights - Use, duplication, or disclosure    *
  18. *   restricted by GSA ADP Schedule Contract with IBM Corp.                     *
  19. *                                                                              *
  20. *******************************************************************************/
  21. #include <ivbase.hpp>
  22. #include <istring.hpp>
  23. #include <ihandle.hpp>
  24.  
  25. class IResourceLock;
  26. class IPrivateResource;
  27. class ISharedResource;
  28.  
  29. #pragma pack(4)
  30.  
  31. class IResource : public IVBase {
  32. typedef IVBase
  33.   Inherited;
  34. public:
  35. /*------------------------------- Constructors -------------------------------*/
  36.   IResource( );
  37. virtual
  38.  ~IResource( );
  39.  
  40. /*----------------------------- Resource Locking -----------------------------*/
  41. virtual IResource
  42.  &lock           ( long timeOut = -1 ),
  43.  &unlock         ( );
  44.  
  45. protected:
  46. /*------------------------------ Resource Handle -----------------------------*/
  47. virtual ISemaphoreHandle
  48.  &handle        ( )  = 0;
  49.  
  50. private:
  51. /*------------------------------ Hidden Members ------------------------------*/
  52.   IResource    ( const IResource& resource );
  53. IResource
  54.  &operator=    ( const IResource& resource );
  55.  
  56. /*--------------------------------- Private ----------------------------------*/
  57. IResourceLock
  58.  *reslockGate;
  59.  
  60. long
  61.   lClReferenceCount;
  62.  
  63. friend class IResourceLock;
  64. friend class IPrivateResource;
  65. friend class ISharedResource;
  66. }; // IResource
  67.  
  68.  
  69. class IPrivateResource : public IResource
  70. {
  71. typedef IResource
  72.   Inherited;
  73. public:
  74. /*------------------------------- Constructors -------------------------------*/
  75.   IPrivateResource   ( );
  76. virtual
  77.  ~IPrivateResource   ( );
  78.  
  79. protected:
  80. /*------------------------------ Resource Handle -----------------------------*/
  81. ISemaphoreHandle
  82.  &handle               ( );
  83.  
  84. private:
  85. /*------------------------------ Hidden Members ------------------------------*/
  86.   IPrivateResource    ( const IPrivateResource& privateResource );
  87. IPrivateResource
  88.  &operator=           ( const IPrivateResource& privateResource );
  89.  
  90. /*--------------------------------- Private ----------------------------------*/
  91. ISemaphoreHandle
  92.   resourceHandleCl;
  93.  
  94. friend class IResourceLock;
  95. }; // IPrivateResource
  96.  
  97.  
  98. class ISharedResource : public IResource
  99. {
  100. typedef IResource
  101.   Inherited;
  102. public:
  103. /*------------------------------- Constructors -------------------------------*/
  104.   ISharedResource   ( const char* keyName );
  105. virtual
  106.  ~ISharedResource   ( );
  107.  
  108. /*---------------------------- Resource Information --------------------------*/
  109. IString
  110.   keyName           ( ) const;
  111.  
  112. protected:
  113. /*------------------------------ Resource Handle -----------------------------*/
  114. ISemaphoreHandle
  115.  &handle              ( );
  116.  
  117. private:
  118. /*------------------------------ Hidden Members ------------------------------*/
  119.   ISharedResource    ( const ISharedResource& sharedResource );
  120. ISharedResource
  121.  &operator=          ( const ISharedResource& sharedResource );
  122.  
  123. /*--------------------------------- Private ----------------------------------*/
  124. ISemaphoreHandle
  125.   resourceHandleCl;
  126.  
  127. IString
  128.   keyNameCl;
  129.  
  130. friend class IResourceLock;
  131. }; // ISharedResource
  132.  
  133.  
  134. class IResourceLock : public IVBase
  135. {
  136. typedef IVBase
  137.   Inherited;
  138. public:
  139.  
  140. /*------------------------------- Constructors -------------------------------*/
  141.   IResourceLock   ( IResource& resource,
  142.                     long       timeOut = -1 );
  143. virtual
  144.   ~IResourceLock  ( );
  145.  
  146. protected:
  147. /*----------------------------- Resource Locking -----------------------------*/
  148. virtual IResourceLock
  149.  &setLock        ( long timeOut = -1 ),
  150.  &clearLock      ( );
  151.  
  152. private:
  153. /*------------------------------ Hidden Members ------------------------------*/
  154.   IResourceLock ( const IResourceLock& resourceLock );
  155. IResourceLock
  156.  &operator=     ( const IResourceLock& resourceLock );
  157.  
  158. /*--------------------------------- Private ----------------------------------*/
  159. IResource
  160.  *presCl;
  161.  
  162. friend class IResource;
  163. }; // IResourceLock
  164.  
  165. #pragma pack()
  166.  
  167.   #include <ireslock.inl>
  168.  
  169. #endif
  170.