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