1#ifndef FPMAS_MOORE_GRID_H
2#define FPMAS_MOORE_GRID_H
10namespace fpmas {
namespace model {
27 return std::max(std::abs(p2.
x - p1.
x), std::abs(p2.
y - p1.
y));
46 template<
typename CellType = model::Gr
idCell>
85 std::vector<CellType*>& frontier
91 template<
typename CellType>
103 model.
link(cells[i][j], cells[i+1][j], api::model::CELL_SUCCESSOR);
106 model.
link(cells[i][j], cells[i-1][j], api::model::CELL_SUCCESSOR);
113 model.
link(cells[i][j], cells[i][j+1], api::model::CELL_SUCCESSOR);
116 model.
link(cells[i][j], cells[i][j-1], api::model::CELL_SUCCESSOR);
123 model.
link(cells[i][j], cells[i+1][j+1], api::model::CELL_SUCCESSOR);
130 model.
link(cells[i][j], cells[i+1][j-1], api::model::CELL_SUCCESSOR);
137 model.
link(cells[i][j], cells[i-1][j+1], api::model::CELL_SUCCESSOR);
144 model.
link(cells[i][j], cells[i-1][j-1], api::model::CELL_SUCCESSOR);
149 template<
typename CellType>
150 void MooreGridBuilder<CellType>::linkFrontiers(
151 api::model::SpatialModel<CellType>& model,
152 GridDimensions local_dimensions,
154 std::vector<CellType*>& frontier
156 for(
auto cell : frontier) {
157 if(cell->location().y == local_dimensions.getExtent().y) {
163 if(mid_x >= 0 && mid_x < local_dimensions.width())
167 local_cells[local_dimensions.height()-1][mid_x],
169 SpatialModelLayers::CELL_SUCCESSOR
177 local_cells[local_dimensions.height()-1][left_x],
179 SpatialModelLayers::CELL_SUCCESSOR
185 if(right_x < local_dimensions.width())
187 local_cells[local_dimensions.height()-1][right_x],
189 SpatialModelLayers::CELL_SUCCESSOR
192 else if(cell->location().y == local_dimensions.getOrigin().y-1) {
198 if(mid_x >= 0 && mid_x < local_dimensions.width())
200 local_cells[0][mid_x],
202 SpatialModelLayers::CELL_SUCCESSOR
210 local_cells[0][left_x],
212 SpatialModelLayers::CELL_SUCCESSOR
218 if(right_x < local_dimensions.width())
220 local_cells[0][right_x],
222 SpatialModelLayers::CELL_SUCCESSOR
225 else if(cell->location().x == local_dimensions.getOrigin().x-1) {
231 if(left_y >= 0 && left_y < local_dimensions.height())
233 local_cells[left_y][0],
235 SpatialModelLayers::CELL_SUCCESSOR
243 local_cells[bottom_y][0],
245 SpatialModelLayers::CELL_SUCCESSOR
251 if(top_y < local_dimensions.height())
253 local_cells[top_y][0],
255 SpatialModelLayers::CELL_SUCCESSOR
258 else if(cell->location().x == local_dimensions.getExtent().x) {
264 if(right_y >= 0 && right_y < local_dimensions.height())
266 local_cells[right_y][local_dimensions.width()-1],
268 SpatialModelLayers::CELL_SUCCESSOR
276 local_cells[bottom_y][local_dimensions.width()-1],
278 SpatialModelLayers::CELL_SUCCESSOR
284 if(top_y < local_dimensions.height())
286 local_cells[top_y][local_dimensions.width()-1],
288 SpatialModelLayers::CELL_SUCCESSOR
297 template<
typename CellType = model::Gr
idCell>
virtual AgentEdge * link(Agent *src_agent, Agent *tgt_agent, api::graph::LayerId layer)=0
Definition: moore_grid.h:17
DiscreteCoordinate operator()(const DiscretePoint &p1, const DiscretePoint &p2) const
Definition: moore_grid.h:24
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: moore_grid.h:47
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