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