EvolvingObjects
|
00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- 00002 00003 //----------------------------------------------------------------------------- 00004 // eoSTLFunctor.h 00005 // (c) Maarten Keijzer 2001 00006 /* 00007 This library is free software; you can redistribute it and/or 00008 modify it under the terms of the GNU Lesser General Public 00009 License as published by the Free Software Foundation; either 00010 version 2 of the License, or (at your option) any later version. 00011 00012 This library is distributed in the hope that it will be useful, 00013 but WITHOUT ANY WARRANTY; without even the implied warranty of 00014 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00015 Lesser General Public License for more details. 00016 00017 You should have received a copy of the GNU Lesser General Public 00018 License along with this library; if not, write to the Free Software 00019 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00020 00021 Contact: todos@geneura.ugr.es, http://geneura.ugr.es 00022 Marc.Schoenauer@polytechnique.fr 00023 mak@dhi.dk 00024 */ 00025 //----------------------------------------------------------------------------- 00026 00027 #ifndef _eoSTLFunctor_H 00028 #define _eoSTLFunctor_H 00029 00030 #include "eoFunctor.h" 00031 00044 template <class R> 00045 class eoSTLF 00046 { 00047 public: 00048 00049 typedef R result_type; 00050 00051 eoSTLF(eoF<R>& _f) : f(_f) {} 00052 00053 R operator()(void) 00054 { 00055 return f(); 00056 } 00057 00058 private : 00059 00060 eoF<R>& f; 00061 }; 00062 00063 #ifdef _MSVC 00064 00065 00066 template <> 00067 void eoSTLF<void>::operator()(void) 00068 { 00069 f(); 00070 } 00071 #endif 00072 00081 template <class A1, class R> 00082 class eoSTLUF : public std::unary_function<A1, R> 00083 { 00084 public: 00085 eoSTLUF(eoUF<A1,R>& _f) : f(_f) {} 00086 00087 R operator()(A1 a) 00088 { 00089 return f(a); 00090 } 00091 00092 private: 00093 eoUF<A1, R>& f; 00094 }; 00095 00104 template <class A1, class A2, class R> 00105 class eoSTLBF : public std::binary_function<A1, A2, R> 00106 { 00107 public: 00108 eoSTLBF(eoUF<A1,R>& _f) : f(_f) {} 00109 00110 R operator()(A1 a1, A2 a2) 00111 { 00112 return f(a1, a2); 00113 } 00114 00115 private: 00116 00117 eoBF<A1, A2, R>& f; 00118 }; 00119 00121 00123 #endif