00001 #if !defined (__DECORATOR_HPP) 00002 #define __DECORATOR_HPP 00003 00004 /* 00005 CoreLinux++ 00006 Copyright (C) 1999,2000 CoreLinux Consortium 00007 00008 The CoreLinux++ Library is free software; you can redistribute it and/or 00009 modify it under the terms of the GNU Library General Public License as 00010 published by the Free Software Foundation; either version 2 of the 00011 License, or (at your option) any later version. 00012 00013 The CoreLinux++ Library Library is distributed in the hope that it will 00014 be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of 00015 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00016 Library General Public License for more details. 00017 00018 You should have received a copy of the GNU Library General Public 00019 License along with the GNU C Library; see the file COPYING.LIB. If not, 00020 write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 00021 Boston, MA 02111-1307, USA. 00022 */ 00023 00024 #if !defined(__COMMON_HPP) 00025 #include <Common.hpp> 00026 #endif 00027 00028 00029 namespace corelinux 00030 { 00031 00038 template <class Implementation> 00039 class Decorator : public CoreLinuxObject 00040 { 00041 public: 00042 00043 // 00044 // Constructors 00045 // 00046 00052 Decorator( Implementation aImplementation ) 00053 : 00054 CoreLinuxObject(), 00055 theImplementation(aImplementation) 00056 { 00057 ; // do nothing 00058 } 00059 00065 Decorator( const Decorator &aDecorator ) 00066 : 00067 CoreLinuxObject(), 00068 theImplementation 00069 ( 00070 aDecorator.getImplementation() 00071 ) 00072 { 00073 ; // do nothing 00074 } 00075 00077 00078 virtual ~Decorator( void ) 00079 { 00080 ; // do nothing 00081 } 00082 00083 // 00084 // Operator overloads 00085 // 00094 Decorator & operator=( const Decorator & aDecorator ) 00095 throw(Exception) 00096 { 00097 this->setImplementation 00098 ( aDecorator.getImplementation() ); 00099 00100 return (*this); 00101 } 00102 00109 bool operator==( const Decorator & aDecorator ) const 00110 { 00111 return 00112 ( 00113 this == &aDecorator && 00114 ( 00115 this->getImplementation() == 00116 aDecorator.getImplementation() 00117 ) 00118 ); 00119 } 00120 00121 // 00122 // Accessors 00123 // 00124 00130 virtual Implementation getImplementation( void ) const 00131 { 00132 return theImplementation; 00133 } 00134 00135 // 00136 // Mutators 00137 // 00138 00144 virtual void setImplementation( Implementation aImplementation ) 00145 throw(Exception) 00146 { 00147 theImplementation = aImplementation; 00148 } 00149 00150 protected: 00151 00152 // 00153 // Constructors 00154 // 00155 00163 Decorator( void ) 00164 throw (Assertion) 00165 : 00166 CoreLinuxObject() 00167 { 00168 NEVER_GET_HERE; 00169 } 00170 00171 00172 protected: 00173 00175 00176 Implementation theImplementation; 00177 00178 00179 }; 00180 00181 } 00182 00183 #endif // if !defined(__DECORATOR_HPP) 00184 00185 /* 00186 Common rcs information do not modify 00187 $Author: prudhomm $ 00188 $Revision: 1.1 $ 00189 $Date: 2000/04/23 20:43:13 $ 00190 $Locker: $ 00191 */ 00192 00193 00194 00195