Graybat  1.1
Graph Approach for Highly Generic Communication Schemes Based on Adaptive Topologies
Ring.hpp
1 # pragma once
2 
3 // STL
4 #include <utility> /* std::make_pair */
5 
6 // GRAYBAT
7 #include <graybat/graphPolicy/Traits.hpp>
8 
9 
10 namespace graybat {
11 
12  namespace pattern {
13 
14  template <typename T_GraphPolicy>
15  struct Ring {
16 
17  using GraphPolicy = T_GraphPolicy;
18  using VertexDescription = graybat::graphPolicy::VertexDescription<GraphPolicy>;
19  using EdgeDescription = graybat::graphPolicy::EdgeDescription<GraphPolicy>;
20  using GraphDescription = graybat::graphPolicy::GraphDescription<GraphPolicy>;
21  using EdgeProperty = graybat::graphPolicy::EdgeProperty<GraphPolicy>;
22  using VertexProperty = graybat::graphPolicy::VertexProperty<GraphPolicy>;
23 
24  const unsigned verticesCount;
25 
26  Ring(const unsigned verticesCount) :
27  verticesCount(verticesCount) {
28 
29  }
30 
31 
32  GraphDescription operator()(){
33  std::vector<VertexDescription> vertices(verticesCount);
34  std::vector<EdgeDescription> edges;
35 
36  for(unsigned i = 0; i < vertices.size(); ++i){
37  vertices.at(i) = std::make_pair(i, VertexProperty());
38  }
39 
40  if(vertices.size() != 1) {
41  for(unsigned i = 0; i < vertices.size(); ++i){
42  if(i == vertices.size() - 1){
43  edges.push_back(std::make_pair(std::make_pair(vertices[i].first, vertices[0].first), EdgeProperty()));
44  }
45  else {
46  edges.push_back(std::make_pair(std::make_pair(vertices[i].first, vertices[i + 1].first), EdgeProperty()));
47  }
48 
49  }
50 
51  }
52  return std::make_pair(vertices,edges);
53 
54  }
55 
56  };
57 
58  } /* pattern */
59 
60 } /* graybat */
Definition: Ring.hpp:15
Definition: BiStar.hpp:8