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