PaGMO  1.1.5
one_way_ring.cpp
1 /*****************************************************************************
2  * Copyright (C) 2004-2015 The PaGMO development team, *
3  * Advanced Concepts Team (ACT), European Space Agency (ESA) *
4  * *
5  * https://github.com/esa/pagmo *
6  * *
7  * act@esa.int *
8  * *
9  * This program is free software; you can redistribute it and/or modify *
10  * it under the terms of the GNU General Public License as published by *
11  * the Free Software Foundation; either version 2 of the License, or *
12  * (at your option) any later version. *
13  * *
14  * This program is distributed in the hope that it will be useful, *
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
17  * GNU General Public License for more details. *
18  * *
19  * You should have received a copy of the GNU General Public License *
20  * along with this program; if not, write to the *
21  * Free Software Foundation, Inc., *
22  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
23  *****************************************************************************/
24 
25 #include <string>
26 
27 #include "../exceptions.h"
28 #include "base.h"
29 #include "one_way_ring.h"
30 
31 namespace pagmo { namespace topology {
32 
34 one_way_ring::one_way_ring():base(),m_first(0),m_last(0) {}
35 
37 {
38  return base_ptr(new one_way_ring(*this));
39 }
40 
41 void one_way_ring::connect(const vertices_size_type &n)
42 {
43  // Store frequently-used variables.
45  pagmo_assert(t_size != 0);
46  switch (t_size) {
47  case 1: {
48  // If the topology was empty, just update the id of the first element.
49  m_first = n;
50  break;
51  }
52  case 2: {
53  pagmo_assert(n != m_first);
54  // Add connections to the only existing element.
55  add_edge(m_first,n);
56  add_edge(n,m_first);
57  break;
58  }
59  default: {
60  // The current last must be connected to the new one.
61  remove_edge(m_last,m_first);
62  add_edge(m_last,n);
63  add_edge(n,m_first);
64  }
65  }
66  // Update the id of the last island.
67  m_last = n;
68 }
69 
70 std::string one_way_ring::get_name() const
71 {
72  return "One way ring";
73 }
74 
75 }} //namespaces
76 
77 BOOST_CLASS_EXPORT_IMPLEMENT(pagmo::topology::one_way_ring)
Root PaGMO namespace.
boost::shared_ptr< base > base_ptr
Alias for shared pointer to base topology.
Definition: topology/base.h:47
std::string get_name() const
Get name of the topology.
Base topology class.
Definition: topology/base.h:75
void remove_edge(const vertices_size_type &, const vertices_size_type &)
Remove an edge.
void connect(const vertices_size_type &)
Establish connections between islands during a push_back() operation.
vertices_size_type get_number_of_vertices() const
Get number of vertices.
one_way_ring()
Default constructor.
graph_type::vertices_size_type vertices_size_type
Vertices size type.
base_ptr clone() const
Clone method.
void add_edge(const vertices_size_type &, const vertices_size_type &)
Add an edge.
Uni-directional ring topology.
Definition: one_way_ring.h:44