From e480a1c9dccf210230e65bd3b6065195d8abd109 Mon Sep 17 00:00:00 2001 From: fatene Date: Tue, 24 Feb 2009 15:57:11 +0000 Subject: [PATCH] Fixing peoPopEval< EOT > :: unpackResult() so that the compiler does not complain about a no matching call for unpack method. This is always the case when using a non built-in c++ types. git-svn-id: svn://scm.gforge.inria.fr/svnroot/paradiseo@1463 331e1502-861f-0410-8da2-ba01fb791d7f --- trunk/paradiseo-peo/src/peoPopEval.h | 74 ++++++++++++++++++++++++++-- 1 file changed, 70 insertions(+), 4 deletions(-) diff --git a/trunk/paradiseo-peo/src/peoPopEval.h b/trunk/paradiseo-peo/src/peoPopEval.h index bcc760940..db767fb77 100644 --- a/trunk/paradiseo-peo/src/peoPopEval.h +++ b/trunk/paradiseo-peo/src/peoPopEval.h @@ -39,6 +39,8 @@ #include #include +#include +#include #include "core/messaging.h" #include "core/peo_debug.h" @@ -217,10 +219,74 @@ template< class EOT > void peoPopEval< EOT > :: packResult() template< class EOT > void peoPopEval< EOT > :: unpackResult() { typename EOT :: Fitness fit; - - /* Unpacking the computed fitness */ - unpack( fit ); - + /* Built in types : int, short, long int, long long int, + * unsigned int, unsigend short, unsigned long int, unsigned long long int, + * float, double, long double + */ + char types [11] = {'i','s','l','x','j','t','m','y', 'f', 'd','e'}; + const char* type = typeid(fit).name(); + int length = strlen(type); + int position = 18; + if ( length == 1) + { + position = 0; + length = 2; + } + if ( length > 1 && position < length) + { + if ( type[position] == types[0]) + { + int __fit; unpack( __fit );fit = __fit; + } + if ( type[position] == types[1]) + { + short int __fit; unpack( __fit );fit = __fit; + } + if ( type[position] == types[2]) + { + long int __fit; unpack( __fit );fit = __fit; + } + /* + if ( type[position] == types[3]) + { + long long int __fit; unpack( __fit );fit = __fit; + } + * */ + if ( type[position] == types[4]) + { + unsigned int __fit; unpack( __fit );fit = __fit; + } + if ( type[position] == types[5]) + { + unsigned short __fit; unpack( __fit );fit = __fit; + } + if ( type[position] == types[6]) + { + unsigned long __fit; unpack( __fit );fit = __fit; + } + /* + if ( type[position] == types[7]) + { + unsigned long long __fit; unpack( __fit );fit = __fit; + } + */ + if ( type[position] == types[8]) + { + float __fit; unpack( __fit );fit = __fit; + } + if ( type[position] == types[9]) + { + double __fit; unpack( __fit );fit = __fit; + } + /* + if ( type[position] == types[10]) + { + long double __fit; unpack( __fit );fit = __fit; + } + */ + } + + /* Unpacking the @ of the associated individual */ unpack( ad_sol );