User Manual, Developers Guide and API Documentation

Cache.hpp

Go to the documentation of this file.
00001 /*******************************************************************************
00002  * This file is part of openWNS (open Wireless Network Simulator)
00003  * _____________________________________________________________________________
00004  *
00005  * Copyright (C) 2004-2007
00006  * Chair of Communication Networks (ComNets)
00007  * Kopernikusstr. 5, D-52074 Aachen, Germany
00008  * phone: ++49-241-80-27910,
00009  * fax: ++49-241-80-22242
00010  * email: info@openwns.org
00011  * www: http://www.openwns.org
00012  * _____________________________________________________________________________
00013  *
00014  * openWNS is free software; you can redistribute it and/or modify it under the
00015  * terms of the GNU Lesser General Public License version 2 as published by the
00016  * Free Software Foundation;
00017  *
00018  * openWNS is distributed in the hope that it will be useful, but WITHOUT ANY
00019  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
00020  * A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
00021  * details.
00022  *
00023  * You should have received a copy of the GNU Lesser General Public License
00024  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
00025  *
00026  ******************************************************************************/
00027 
00028 
00029 #ifndef _CACHE_HPP
00030 #define _CACHE_HPP
00031 
00032 namespace wns {
00037     template <class C>
00038     class Cache
00039         : public C
00040     {
00041     public:
00047         Cache()
00048             : C(),
00049               dirty(false)
00050         {}
00051 
00057         Cache(const C& aC)
00058             : C(aC),
00059               dirty(false)
00060         {}
00061 
00062         virtual ~Cache()
00063         {}
00064 
00065         void
00066         operator =(const Cache& aC)
00067         {
00068             C::operator=(aC);
00069             dirty=false;
00070         }
00071 
00072         void
00073         operator =(const C& aC)
00074         {
00075             C::operator=(aC);
00076             dirty=false;
00077         }
00078 
00079         template <class O>
00080         void
00081         operator +=(const O& aC)
00082         {
00083             C::operator+=(aC);
00084             dirty=false;
00085         }
00086 
00087         template <class O>
00088         void
00089         operator -=(const O& aC)
00090         {
00091             C::operator-=(aC);
00092             dirty=false;
00093         }
00094 
00095         template <class O>
00096         void
00097         operator *=(const O& aC)
00098         {
00099             C::operator*=(aC);
00100             dirty=false;
00101         }
00102 
00103         template <class O>
00104         void
00105         operator /=(const O& aC)
00106         {
00107             C::operator/=(aC);
00108             dirty=false;
00109         }
00110 
00111         template <class O>
00112         void
00113         operator %=(const O& aC)
00114         {
00115             C::operator%=(aC);
00116             dirty=false;
00117         }
00118 
00119         template <class O>
00120         void
00121         operator ^=(const O& aC)
00122         {
00123             C::operator^=(aC);
00124             dirty=false;
00125         }
00126 
00127         template <class O>
00128         void
00129         operator &=(const O& aC)
00130         {
00131             C::operator&=(aC);
00132             dirty=false;
00133         }
00134 
00135         template <class O>
00136         void
00137         operator |=(const O& aC)
00138         {
00139             C::operator|=(aC);
00140             dirty=false;
00141         }
00142 
00143         template <class O>
00144         void
00145         operator <<=(const O& aC)
00146         {
00147             C::operator<<=(aC);
00148             dirty=false;
00149         }
00150 
00151         template <class O>
00152         void
00153         operator >>=(const O& aC)
00154         {
00155             C::operator>>=(aC);
00156             dirty=false;
00157         }
00158 
00166         void setDirty() {dirty=true;};
00167 
00177         void setClean() {dirty=false;};
00178 
00191         bool isDirty() {return dirty;};
00192     private:
00193         bool dirty;
00194     };
00195 
00200     template <class POD>
00201     class Class
00202     {
00203     public:
00204         Class()
00205             : data()
00206         {}
00207 
00208         Class(const POD& pod)
00209             : data(pod)
00210         {}
00211 
00212         virtual ~Class()
00213         {}
00214 
00215         void
00216         operator =(const Class& aC)
00217         {
00218             data = aC.data;
00219         }
00220 
00221         void
00222         operator =(const POD& pod)
00223         {
00224             data=pod;
00225         }
00226 
00227         template <class O> void operator +=(const O& aC) {data+=aC;}
00228         template <class O> void operator -=(const O& aC) {data+=aC;}
00229         template <class O> void operator *=(const O& aC) {data+=aC;}
00230         template <class O> void operator /=(const O& aC) {data+=aC;}
00231         template <class O> void operator %=(const O& aC) {data+=aC;}
00232         template <class O> void operator ^=(const O& aC) {data+=aC;}
00233         template <class O> void operator &=(const O& aC) {data+=aC;}
00234         template <class O> void operator |=(const O& aC) {data+=aC;}
00235         template <class O> void operator <<=(const O& aC) {data+=aC;}
00236         template <class O> void operator >>=(const O& aC) {data+=aC;}
00237 
00238         template <class O> void operator +=(const Class<O>& aC) {data+=O(aC);}
00239         template <class O> void operator -=(const Class<O>& aC) {data+=O(aC);}
00240         template <class O> void operator *=(const Class<O>& aC) {data+=O(aC);}
00241         template <class O> void operator /=(const Class<O>& aC) {data+=O(aC);}
00242         template <class O> void operator %=(const Class<O>& aC) {data+=O(aC);}
00243         template <class O> void operator ^=(const Class<O>& aC) {data+=O(aC);}
00244         template <class O> void operator &=(const Class<O>& aC) {data+=O(aC);}
00245         template <class O> void operator |=(const Class<O>& aC) {data+=O(aC);}
00246         template <class O> void operator <<=(const Class<O>& aC) {data+=O(aC);}
00247         template <class O> void operator >>=(const Class<O>& aC) {data+=O(aC);}
00248 
00249         virtual
00250         operator const POD &() const
00251         {
00252             return data;
00253         }
00254 
00255     private:
00256         POD data;
00257     };
00258 }
00259 
00260 #endif
00261 

Generated on Wed Feb 8 03:31:38 2012 for openWNS by  doxygen 1.5.5