00001 #if !defined(__HANDLER_HPP)
00002 #define __HANDLER_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(__REQUEST_HPP)
00029 #include <Request.hpp>
00030 #endif
00031
00032 namespace corelinux
00033 {
00034
00035 DECLARE_CLASS( Handler );
00036
00043 class Handler : public Synchronized
00044 {
00045 public:
00046
00047
00048
00049
00050
00052
00053 Handler( void );
00054
00056
00057 Handler( HandlerCref );
00058
00060
00061 virtual ~Handler( void );
00062
00063
00064
00065
00067
00068 HandlerRef operator=( HandlerCref );
00069
00071
00072 bool operator==( HandlerCref ) const;
00073
00074
00075
00076
00078
00079 HandlerPtr operator++( void ) ;
00080
00082
00083 HandlerPtr operator--( void ) ;
00084
00085
00086
00087
00088
00096 void succeedHandler( HandlerPtr ) throw ( Assertion );
00097
00105 void precedeHandler( HandlerPtr ) throw ( Assertion );
00106
00108
00109 void extractSelf( void );
00110
00119 virtual void handleRequest( RequestPtr ) ;
00120
00121 protected:
00122
00132 virtual bool handlesType( RequestPtr ) = 0;
00133
00140 virtual void handle( RequestPtr ) = 0;
00141
00143
00144 void setSuccessor( HandlerPtr ) ;
00145
00147
00148 void setPredecessor( HandlerPtr ) ;
00149
00151
00152 void setSiblings( HandlerPtr, HandlerPtr );
00153 protected:
00154
00156
00157 HandlerPtr theSuccessor;
00158
00160
00161 HandlerPtr thePredecessor;
00162
00163 private:
00164
00165 };
00166 }
00167 #endif // if !defined(__HANDLER_HPP)
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178