00001 #if !defined(__GATEWAYSEMAPHORE_HPP)
00002 #define __GATEWAYSEMAPHORE_HPP
00003
00004 00005 00006 00007 00008 00009 00010 00011 00012 00013 00014 00015 00016 00017 00018 00019 00020 00021 00022
00023
00024 #if !defined(__COMMON_HPP)
00025 #include <Common.hpp>
00026 #endif
00027
00028 #if !defined(__SEMAPHORE_HPP)
00029 #include <Semaphore.hpp>
00030 #endif
00031
00032 #if !defined(__MAP_HPP)
00033 #include <Map.hpp>
00034 #endif
00035
00036 namespace corelinux
00037 {
00038 DECLARE_CLASS( GatewaySemaphore );
00039
00040 CORELINUX_MAP
00041 (
00042 ThreadIdentifier,
00043 Count ,
00044 std::less<ThreadIdentifier>,
00045 GatewayClient
00046 );
00047
00072 class GatewaySemaphore : public Semaphore
00073 {
00074 public:
00075
00076
00077
00078
00079
00093 GatewaySemaphore
00094 (
00095 SemaphoreGroupPtr,
00096 SemaphoreIdentifierRef,
00097 Count ,
00098 bool Recursive = false,
00099 bool Balking = false
00100 ) throw ( NullPointerException );
00101
00103
00104 virtual ~GatewaySemaphore( void );
00105
00106
00107
00108
00109
00111
00112 virtual bool isLocked( void );
00113
00115
00116 virtual bool isAnOwner( void );
00117
00124 virtual Counter getOwnerRecursionQueueLength( void );
00125
00126
00127
00128
00129
00130
00132
00133 virtual SemaphoreOperationStatus lockWithWait(void)
00134 throw( SemaphoreException );
00135
00137
00138 virtual SemaphoreOperationStatus lockWithNoWait(void)
00139 throw( SemaphoreException );
00140
00141
00143
00144
00145
00146
00148
00149 virtual SemaphoreOperationStatus release(void)
00150 throw( SemaphoreException );
00151
00152 protected:
00153
00154
00155
00156 00158
00159 GatewaySemaphore( void ) throw( Assertion );
00160
00162
00163 GatewaySemaphore( GatewaySemaphoreCref )
00164 throw( Assertion );
00165
00166
00167
00168 00170
00171 GatewaySemaphoreRef operator=( GatewaySemaphoreCref )
00172 throw( Assertion );
00173
00174
00175
00176
00177
00178 SemaphoreOperationStatus lockAndAdd
00179 (
00180 ThreadIdentifierRef aTid,
00181 Int aFlag = 0
00182 );
00183
00184
00185 private:
00186
00188
00189 Count theMaxCount;
00190
00192
00193 GatewayClient theClients;
00194
00195 };
00196 }
00197
00198 #endif // if !defined(__GATEWAYSEMAPHORE_HPP)
00199 00200 00201 00202 00203 00204 00205
00206