From c3fd4eb3ee1d9322d70247afbddc84c984b5554b Mon Sep 17 00:00:00 2001 From: mac Date: Sat, 19 Feb 2000 16:32:12 +0000 Subject: [PATCH] eoScalarFitness, 'envelope class' for making minimizing/maximizing fitness --- eo/src/eoScalarFitness.h | 82 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 eo/src/eoScalarFitness.h diff --git a/eo/src/eoScalarFitness.h b/eo/src/eoScalarFitness.h new file mode 100644 index 00000000..277888bd --- /dev/null +++ b/eo/src/eoScalarFitness.h @@ -0,0 +1,82 @@ +/* -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + + ----------------------------------------------------------------------------- + eoScalarFitness.h + + (c) Maarten Keijzer (mkeijzer@mad.scientist.com) and GeNeura Team, 1999, 2000 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: todos@geneura.ugr.es, http://geneura.ugr.es + */ + + +#ifndef eoScalarFitness_h +#define eoScalarFitness_h + +/** + * eoScalarFitness >: + * Wraps a scalar fitness values such as a double or int, with the option of + * maximizing (using less) or miniziming (using greater) + * this quantity in EO. + * + * It overrides operator<() to use the Compare template argument + * + * Suitable constructors and assignments and casts are defined to work + * with this quantity as if it were a ScalarType. +*/ + +template > +class eoScalarFitness +{ + public : + + eoScalarFitness() : value() {} + eoScalarFitness(const eoScalarFitness& other) : value(other.value) {} + eoScalarFitness(const ScalarType& v) : value(v) {} + + eoScalarFitness& operator=(const eoScalarFitness& other) + { value = other.value; return *this; } + eoScalarFitness& operator=(const ScalarType& v) + { value = v; return *this; } + + operator ScalarType(void) const { return value; } + + // Comparison, using less by default + bool operator<(const eoScalarFitness& other) const + { return Compare()(this->value, other.value); } + + private : + ScalarType value; +}; + +template +std::ostream& operator<<(std::ostream& os, const eoScalarFitness& +f) +{ + os << (F) f; + return os; +} + +template +std::istream& operator>>(istream& is, eoScalarFitness& f) +{ + F value; + is >> value; + f = value; + return is; +} + +#endif