1#ifndef FPMAS_VON_NEUMANN_GRID_H
2#define FPMAS_VON_NEUMANN_GRID_H
10namespace fpmas {
namespace model {
11 using api::model::DiscretePoint;
29 return std::abs(p2.
x - p1.
x) + std::abs(p2.
y - p1.
y);
48 template<
typename CellType = model::Gr
idCell>
87 std::vector<CellType*>& frontier
93 template<
typename CellType>
104 model.
link(cells[i][j], cells[i+1][j], api::model::CELL_SUCCESSOR);
107 model.
link(cells[i][j], cells[i-1][j], api::model::CELL_SUCCESSOR);
112 model.
link(cells[i][j], cells[i][j+1], api::model::CELL_SUCCESSOR);
115 model.
link(cells[i][j], cells[i][j-1], api::model::CELL_SUCCESSOR);
119 template<
typename CellType>
120 void VonNeumannGridBuilder<CellType>::linkFrontiers(
121 api::model::SpatialModel<CellType>& model,
122 GridDimensions local_dimensions,
124 std::vector<CellType*>& frontier
126 for(
auto cell : frontier) {
127 if(cell->location().y == local_dimensions.getExtent().y) {
129 if(cell->location().x >= local_dimensions.getOrigin().x
130 && cell->location().x < local_dimensions.getExtent().x) {
132 local_cells[local_dimensions.height()-1][cell->location().x - local_dimensions.getOrigin().x],
134 SpatialModelLayers::CELL_SUCCESSOR
138 else if(cell->location().y == local_dimensions.getOrigin().y-1) {
140 if(cell->location().x >= local_dimensions.getOrigin().x
141 && cell->location().x < local_dimensions.getExtent().x) {
143 local_cells[0][cell->location().x - local_dimensions.getOrigin().x],
145 SpatialModelLayers::CELL_SUCCESSOR
149 else if(cell->location().x == local_dimensions.getOrigin().x-1) {
151 if(cell->location().y >= local_dimensions.getOrigin().y
152 && cell->location().y < local_dimensions.getExtent().y) {
154 local_cells[cell->location().y - local_dimensions.getOrigin().y][0],
156 SpatialModelLayers::CELL_SUCCESSOR
160 else if(cell->location().x == local_dimensions.getExtent().x) {
162 if(cell->location().y >= local_dimensions.getOrigin().y
163 && cell->location().y < local_dimensions.getExtent().y) {
165 local_cells[cell->location().y - local_dimensions.getOrigin().y][local_dimensions.width()-1],
167 SpatialModelLayers::CELL_SUCCESSOR
178 template<
typename CellType = model::Gr
idCell>
virtual AgentEdge * link(Agent *src_agent, Agent *tgt_agent, api::graph::LayerId layer)=0
Definition: grid_load_balancing.h:30
DiscreteCoordinate height() const
Definition: grid_load_balancing.h:79
DiscreteCoordinate width() const
Definition: grid_load_balancing.h:72
Definition: von_neumann_grid.h:19
DiscreteCoordinate operator()(const DiscretePoint &p1, const DiscretePoint &p2) const
Definition: von_neumann_grid.h:26
Definition: von_neumann_grid.h:49
Definition: grid_builder.h:29
std::vector< std::vector< CellType * > > CellMatrix
Definition: grid_builder.h:37
long DiscreteCoordinate
Definition: grid.h:15
DiscreteCoordinate x
Definition: grid.h:25
DiscreteCoordinate y
Definition: grid.h:29