1 /*****************************************************************************/ 2 /* Software Testing Automation Framework (STAF) */ 3 /* (C) Copyright IBM Corp. 2001 */ 4 /* */ 5 /* This software is licensed under the Eclipse Public License (EPL) V1.0. */ 6 /*****************************************************************************/ 7 8 #ifndef STAF_EventSem 9 #define STAF_EventSem 10 11 #include "STAF.h" 12 13 #ifdef __cplusplus 14 extern "C" { 15 #endif 16 17 /* Begin C language definitions */ 18 19 #define STAF_EVENT_SEM_INDEFINITE_WAIT (unsigned int)-1 20 21 typedef struct STAFEventSemImplementation *STAFEventSem_t; 22 typedef enum STAFEventSemState_e { 23 kSTAFEventSemReset = 0, 24 kSTAFEventSemPosted = 1 25 } STAFEventSemState_t; 26 27 /***********************************************************************/ 28 /* STAFEventSemConstruct - Creates a STAF Event sempahore. The */ 29 /* semaphore will be created in the reset */ 30 /* state. */ 31 /* */ 32 /* Accepts: (Out) Pointer to a event */ 33 /* (In) The name of the event (This should be 0/NULL for a */ 34 /* private event) */ 35 /* (Out) Pointer to OS return code */ 36 /* */ 37 /* Returns: kSTAFOk, on success */ 38 /* other on error */ 39 /***********************************************************************/ 40 STAFRC_t STAFEventSemConstruct(STAFEventSem_t *pEvent, 41 const char *name, unsigned int *osRC); 42 43 /***********************************************************************/ 44 /* STAFEventSemPost - Posts a STAF Event semaphore. It is safe to */ 45 /* post a posted semaphore. */ 46 /* */ 47 /* Accepts: (In) Pointer to a event */ 48 /* (Out) Pointer to OS return code */ 49 /* */ 50 /* Returns: kSTAFOk, on success */ 51 /* other on error */ 52 /***********************************************************************/ 53 STAFRC_t STAFEventSemPost(STAFEventSem_t pEvent, unsigned int *osRC); 54 55 56 /***********************************************************************/ 57 /* STAFEventSemReset - Resets a STAF Event semaphore. It is safe to */ 58 /* reset a reset semaphore. */ 59 /* */ 60 /* Accepts: (In) Pointer to a event */ 61 /* (Out) Pointer to OS return code */ 62 /* */ 63 /* Returns: kSTAFOk, on success */ 64 /* other on error */ 65 /***********************************************************************/ 66 STAFRC_t STAFEventSemReset(STAFEventSem_t pEvent, unsigned int *osRC); 67 68 69 /***********************************************************************/ 70 /* STAFEventSemWait - Waits for a STAF Event semaphore */ 71 /* */ 72 /* Accepts: (In) Pointer to a event */ 73 /* (In) The amount of time to wait (in milliseconds) */ 74 /* (Out) Pointer to OS return code */ 75 /* */ 76 /* Returns: kSTAFOk, if the event semaphore was posted */ 77 /* kSTAFTimeout, on timeout */ 78 /* other on error */ 79 /***********************************************************************/ 80 STAFRC_t STAFEventSemWait(STAFEventSem_t pEvent, unsigned int timeout, 81 unsigned int *osRC); 82 83 84 /***********************************************************************/ 85 /* STAFEventSemQuery - Queries the state of a STAF Event semaphore */ 86 /* */ 87 /* Accepts: (In) Pointer to a event */ 88 /* (Out) Pointer to event sem state */ 89 /* (Out) Pointer to OS return code */ 90 /* */ 91 /* Returns: kSTAFOk, if the event semaphore was queried succesfully */ 92 /* other on error */ 93 /***********************************************************************/ 94 STAFRC_t STAFEventSemQuery(STAFEventSem_t pEvent, STAFEventSemState_t *pState, 95 unsigned int *osRC); 96 97 98 /***********************************************************************/ 99 /* STAFEventSemDestruct - Destructs a STAF Event semaphore */ 100 /* */ 101 /* Accepts: (In) Pointer to a event */ 102 /* (Out) Pointer to OS return code */ 103 /* */ 104 /* Returns: kSTAFOk, on success */ 105 /* other on error */ 106 /***********************************************************************/ 107 STAFRC_t STAFEventSemDestruct(STAFEventSem_t *pEvent, unsigned int *osRC); 108 109 /* End C language definitions */ 110 111 #ifdef __cplusplus 112 } 113 114 // Begin C++ language definitions 115 116 #include "STAFRefPtr.h" 117 #include "STAFString.h" 118 #include "STAFException.h" 119 120 // Forward declaration for typedef 121 class STAFEventSem; 122 typedef STAFRefPtr<STAFEventSem> STAFEventSemPtr; 123 124 // STAFEventSem - This class provides a C++ wrapper around the STAF Event 125 // C APIs. This class will throw exceptions in all error 126 // cases except for a timeout on a request(). 127 128 class STAFEventSem 129 { 130 public: 131 132 STAFEventSem(const char *name = 0); 133 134 void post(); 135 void reset(); 136 137 // Waits the indicated amount in milliseconds. 138 // Returns: kSTAFOk, if the sem was posted 139 // kSTAFTimeout, if the call timed out 140 STAFRC_t wait(unsigned int timeout = STAF_EVENT_SEM_INDEFINITE_WAIT); 141 142 // Checks whether the semaphore is posted or reset 143 // Returns: kSTAFEventSemReset, if the semaphore is reset 144 // kSTAFEventSemPosted, if the semaphore is posted 145 STAFEventSemState_t query(); 146 getImpl()147 STAFEventSem_t getImpl() { return fEventImpl; } 148 149 ~STAFEventSem(); 150 151 private: 152 153 // Don't allow copy or assignment 154 STAFEventSem(const STAFEventSem &); 155 STAFEventSem &operator=(const STAFEventSem &); 156 157 STAFEventSem_t fEventImpl; 158 }; 159 160 161 // Now include inline definitions 162 163 #ifndef STAF_NATIVE_COMPILER 164 #include "STAFEventSemInlImpl.cpp" 165 #endif 166 167 // End C++ language definitions 168 169 // End #ifdef __cplusplus 170 #endif 171 172 #endif 173