RepastHPC  2.3.1
Grid2DQuery.h
1 /*
2  * Repast for High Performance Computing (Repast HPC)
3  *
4  * Copyright (c) 2010 Argonne National Laboratory
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with
8  * or without modification, are permitted provided that the following
9  * conditions are met:
10  *
11  * Redistributions of source code must retain the above copyright notice,
12  * this list of conditions and the following disclaimer.
13  *
14  * Redistributions in binary form must reproduce the above copyright notice,
15  * this list of conditions and the following disclaimer in the documentation
16  * and/or other materials provided with the distribution.
17  *
18  * Neither the name of the Argonne National Laboratory nor the names of its
19  * contributors may be used to endorse or promote products derived from
20  * this software without specific prior written permission.
21  *
22  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
25  * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE TRUSTEES OR
26  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
27  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
28  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
29  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
30  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
31  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
32  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33  *
34  *
35  * Grid2DQuery.h
36  *
37  * Created on: Aug 12, 2010
38  * Author: nick
39  */
40 
41 #ifndef GRID2DQUERY_H_
42 #define GRID2DQUERY_H_
43 
44 #include "RepastErrors.h"
45 
46 namespace repast {
47 
53 template<typename T>
54 class Grid2DQuery {
55 
56 protected:
57  const Grid<T, int>* _grid;
58  int minMax[2][2];
59 
60 public:
61 
65  Grid2DQuery(const Grid<T, int>* grid);
66  virtual ~Grid2DQuery() {}
67 
77  virtual void query(const Point<int>& center, int range, bool includeCenter, std::vector<T*>& out) const = 0;
78 };
79 
80 template<typename T>
82  _grid(grid) {
83  if (grid->bounds().dimensionCount() != 2)
84  throw Repast_Error_10(grid->bounds().dimensionCount()); // Grid2DQuery only accepts 2D grids
85 
86  GridDimensions bounds = grid->bounds();
87 
88  for (size_t i = 0; i < 2; i++) {
89  int origin = bounds.origin(i);
90  minMax[i][0] = origin;
91  // max is EXCLUSIVE
92  minMax[i][1] = (bounds.extents(i) + bounds.origin(i));
93  }
94 }
95 
96 }
97 
98 #endif /* GRID2DQUERY_H_ */
repast::GridDimensions::extents
const Point< double > & extents() const
Gets the extents along each dimension.
Definition: GridDimensions.h:90
repast::Grid2DQuery::Grid2DQuery
Grid2DQuery(const Grid< T, int > *grid)
Creates Grid2DQuery that will query the specified Grid.
Definition: Grid2DQuery.h:81
repast::Grid2DQuery
Base class for neighborhood queries on discrete Grids.
Definition: Grid2DQuery.h:54
repast::GridDimensions::origin
const Point< double > & origin() const
Gets the origin.
Definition: GridDimensions.h:83
repast::Grid< T, int >
repast::Grid2DQuery::query
virtual void query(const Point< int > &center, int range, bool includeCenter, std::vector< T * > &out) const =0
Queries the Grid for the neighbors surrounding the center point within a specified range.
repast::GridDimensions
Basic structure for specifying grid dimenions.
Definition: GridDimensions.h:58
repast::Point< int >