From 6667499e62332775475775f40a6bec6c0ab8ce8d Mon Sep 17 00:00:00 2001 From: cahon Date: Fri, 29 Mar 2002 14:50:11 +0000 Subject: [PATCH] Each island is connected from/to only one neighbour --- .../island/topologies/eoRingConnectivity.h | 122 ++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 eo/src/paradisEO/island/topologies/eoRingConnectivity.h diff --git a/eo/src/paradisEO/island/topologies/eoRingConnectivity.h b/eo/src/paradisEO/island/topologies/eoRingConnectivity.h new file mode 100644 index 00000000..7de042ac --- /dev/null +++ b/eo/src/paradisEO/island/topologies/eoRingConnectivity.h @@ -0,0 +1,122 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "eoRingConnectivity.h" + +// (c) OPAC Team, LIFL, 2002 + +/* 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 + + Cont act: cahon@lifl.fr +*/ + +#ifndef eoRingConnectivity_h +#define eoRingConnectivity_h + +#include + +/** + Each algorithm has a single pair of entering and outgoing + neighbours, so that the unit constitutes a circular topology. +*/ + +template class eoRingConnectivity : public eoConnectivity { + +public : + + /** + Constructor + */ + + eoRingConnectivity (eoListener & _listen, + vector & _sel_neigh + ) : eoConnectivity (_listen, _sel_neigh) { + } + + virtual vector *> from () { + + listen.update () ; + + vector *> v ; + int i, k = listen.size () ; + + for (i = 0 ; i < k ; i ++) { + if (listen [i] == listen.here ()) + break ; + } + + for (int j = (i - 1 + k) % k ; j != i ; j = (j - 1 + k) % k) + if (selected (listen [j].label ())) { + v.push_back (& listen [j]) ; + break ; + } + + return v ; + } + + /** + + */ + + virtual vector *> to () { + + listen.update () ; + + vector *> v ; + int i, k = listen.size () ; + + for (i = 0 ; i < k ; i ++) + if (listen [i] == listen.here ()) + break ; + + for (int j = (i + 1) % k ; j != i ; j = (j + 1) % k) + if (selected (listen [j].label ())) { + v.push_back (& listen [j]) ; + break ; + } + + return v ; + } + +} ; + +#endif + + + + + + + + + + + + + + + + + + + + + + + + + + + +