00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #ifndef __eoVector_mesg_h
00038 #define __eoVector_mesg_h
00039
00040 #include <eoVector.h>
00041 #include <core/moeoVector.h>
00042
00043 #include "messaging.h"
00044
00045
00046 template <class F, class T> void pack (const eoVector <F, T> & __v)
00047 {
00048
00049 if (__v.invalid())
00050 {
00051 pack((unsigned)0);
00052 }
00053 else
00054 {
00055 pack((unsigned)1);
00056 pack (__v.fitness ());
00057 }
00058
00059 unsigned len = __v.size ();
00060 pack (len);
00061 for (unsigned i = 0 ; i < len; i ++)
00062 pack (__v [i]);
00063 }
00064
00065 template <class F, class T> void unpack (eoVector <F, T> & __v)
00066 {
00067
00068 unsigned valid;
00069 unpack(valid);
00070
00071 if (! valid)
00072 {
00073 __v.invalidate();
00074 }
00075 else
00076 {
00077 F fit;
00078 unpack (fit);
00079 __v.fitness (fit);
00080 }
00081
00082 unsigned len;
00083 unpack (len);
00084 __v.resize (len);
00085 for (unsigned i = 0 ; i < len; i ++)
00086 unpack (__v [i]);
00087 }
00088
00089 template <class F, class T, class V> void pack (const eoVectorParticle <F, T, V> & __v)
00090 {
00091
00092 if (__v.invalid())
00093 {
00094 pack((unsigned)0);
00095 }
00096 else
00097 {
00098 pack((unsigned)1);
00099 pack (__v.fitness ());
00100 pack (__v.best());
00101 }
00102
00103 unsigned len = __v.size ();
00104 pack (len);
00105 for (unsigned i = 0 ; i < len; i ++)
00106 pack (__v [i]);
00107 for (unsigned i = 0 ; i < len; i ++)
00108 pack (__v.bestPositions[i]);
00109 for (unsigned i = 0 ; i < len; i ++)
00110 pack (__v.velocities[i]);
00111 }
00112
00113 template <class F, class T, class V> void unpack (eoVectorParticle <F, T, V> & __v)
00114 {
00115
00116 unsigned valid;
00117 unpack(valid);
00118
00119 if (! valid)
00120 {
00121 __v.invalidate();
00122 }
00123 else
00124 {
00125 F fit;
00126 unpack (fit);
00127 __v.fitness (fit);
00128 unpack(fit);
00129 __v.best(fit);
00130
00131 }
00132 unsigned len;
00133 unpack (len);
00134 __v.resize (len);
00135 for (unsigned i = 0 ; i < len; i ++)
00136 unpack (__v [i]);
00137 for (unsigned i = 0 ; i < len; i ++)
00138 unpack (__v.bestPositions[i]);
00139 for (unsigned i = 0 ; i < len; i ++)
00140 unpack (__v.velocities[i]);
00141 }
00142
00143 template <class F, class T, class V, class W> void unpack (moeoVector <F,T,V,W> &_v)
00144 {
00145 unsigned valid;
00146 unpack(valid);
00147 if (! valid)
00148 _v.invalidate();
00149 else
00150 {
00151 T fit;
00152 unpack (fit);
00153 _v.fitness (fit);
00154 }
00155 unpack(valid);
00156 if (! valid)
00157 _v.invalidateDiversity();
00158 else
00159 {
00160 V diver;
00161 unpack(diver);
00162 _v.diversity(diver);
00163 }
00164 unsigned len;
00165 unpack (len);
00166 _v.resize (len);
00167 for (unsigned i = 0 ; i < len; i ++)
00168 unpack (_v [i]);
00169 unpack(valid);
00170 if (! valid)
00171 _v.invalidateObjectiveVector();
00172 else
00173 {
00174 F object;
00175 unpack (len);
00176 object.resize(len);
00177 for (unsigned i = 0 ; i < len; i ++)
00178 unpack (object[i]);
00179 _v.objectiveVector(object);
00180 }
00181 }
00182
00183
00184 template <class F, class T, class V, class W> void pack (moeoVector <F,T,V,W> &_v)
00185 {
00186 if (_v.invalid())
00187 pack((unsigned)0);
00188 else
00189 {
00190 pack((unsigned)1);
00191 pack (_v.fitness ());
00192 }
00193 if (_v.invalidDiversity())
00194 pack((unsigned)0);
00195 else
00196 {
00197 pack((unsigned)1);
00198 pack(_v.diversity());
00199 }
00200 unsigned len = _v.size ();
00201 pack (len);
00202 for (unsigned i = 0 ; i < len; i ++)
00203 pack (_v[i]);
00204 if (_v.invalidObjectiveVector())
00205 pack((unsigned)0);
00206 else
00207 {
00208 pack((unsigned)1);
00209 F object;
00210 object=_v.objectiveVector();
00211 len=object.nObjectives();
00212 pack (len);
00213 for (unsigned i = 0 ; i < len; i ++)
00214 pack (object[i]);
00215 }
00216 }
00217
00218 #endif