Main Page
Namespaces
Namespace List
Namespace Members
All
Functions
Classes
Class List
Class Hierarchy
Class Members
All
a
b
c
d
e
f
g
h
i
l
m
n
o
p
r
s
v
w
x
y
~
Functions
a
b
c
e
f
g
i
l
o
p
r
s
~
Variables
a
b
c
d
e
h
i
l
m
n
p
r
s
w
x
y
Typedefs
Files
File List
File Members
All
Functions
src
sub_grid.cpp
Go to the documentation of this file.
1
/*
2
* Software License Agreement (BSD License)
3
*
4
* Copyright (c) 2018, Locus Robotics
5
* All rights reserved.
6
*
7
* Redistribution and use in source and binary forms, with or without
8
* modification, are permitted provided that the following conditions
9
* are met:
10
*
11
* * Redistributions of source code must retain the above copyright
12
* notice, this list of conditions and the following disclaimer.
13
* * Redistributions in binary form must reproduce the above
14
* copyright notice, this list of conditions and the following
15
* disclaimer in the documentation and/or other materials provided
16
* with the distribution.
17
* * Neither the name of the copyright holder nor the names of its
18
* contributors may be used to endorse or promote products derived
19
* from this software without specific prior written permission.
20
*
21
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25
* COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32
* POSSIBILITY OF SUCH DAMAGE.
33
*/
34
35
#include <
nav_grid_iterators/sub_grid.h
>
36
37
namespace
nav_grid_iterators
38
{
39
SubGrid::SubGrid
(
const
nav_grid::NavGridInfo
* info,
const
nav_grid::Index
& index,
40
unsigned
int
min_x,
unsigned
int
min_y,
41
unsigned
int
width,
unsigned
int
height)
42
:
BaseIterator
(info, index), min_x_(min_x), min_y_(min_y), width_(width), height_(height)
43
{
44
// If the start coordinate is entirely off the grid or the size is 0
45
// we invalidate the entire iterator and give up immediately
46
if
(
min_x_
>= info->
width
||
min_y_
>= info->
height
||
width_
== 0 ||
height_
== 0)
47
{
48
index_
=
nav_grid::Index
(0, 0);
49
width_
= 0;
50
height_
= 0;
51
min_x_
= 0;
52
min_y_
= 0;
53
return
;
54
}
55
56
// If the end coordinate is off the grid, we shorten the dimensions to
57
// cover the on-grid potion
58
if
(
min_x_
+
width_
> info->
width
)
59
{
60
width_
= info->
width
-
min_x_
;
61
}
62
if
(
min_y_
+
height_
> info->
height
)
63
{
64
height_
= info->
height
-
min_y_
;
65
}
66
}
67
68
SubGrid
SubGrid::begin
()
const
69
{
70
return
SubGrid
(
info_
,
min_x_
,
min_y_
,
width_
,
height_
);
71
}
72
73
SubGrid
SubGrid::end
()
const
74
{
75
return
SubGrid
(
info_
,
nav_grid::Index
(
min_x_
,
min_y_
+
height_
),
min_x_
,
min_y_
,
width_
,
height_
);
76
}
77
78
void
SubGrid::increment
()
79
{
80
++
index_
.
x
;
81
if
(
index_
.
x
>=
min_x_
+
width_
)
82
{
83
index_
.
x
=
min_x_
;
84
++
index_
.
y
;
85
}
86
}
87
88
bool
SubGrid::fieldsEqual
(
const
SubGrid
& other)
89
{
90
return
min_x_
== other.
min_x_
&&
min_y_
== other.
min_y_
&&
width_
== other.
width_
&&
height_
== other.
height_
;
91
}
92
93
}
// namespace nav_grid_iterators
nav_grid::NavGridInfo::height
unsigned int height
nav_grid_iterators
Definition:
base_iterator.h:41
nav_grid_iterators::SubGrid::begin
SubGrid begin() const override
Definition:
sub_grid.cpp:68
nav_grid_iterators::SubGrid
Iterator for looping through every index within an aligned rectangular portion of the grid.
Definition:
sub_grid.h:47
sub_grid.h
nav_grid_iterators::SubGrid::SubGrid
SubGrid(const nav_grid::NavGridInfo *info, unsigned int min_x, unsigned int min_y, unsigned int width, unsigned int height)
Public Constructor.
Definition:
sub_grid.h:58
nav_grid_iterators::SubGrid::end
SubGrid end() const override
Definition:
sub_grid.cpp:73
nav_grid::GenericIndex::x
NumericType x
nav_grid::Index
GenericIndex< unsigned int > Index
nav_grid::GenericIndex
nav_grid_iterators::SubGrid::increment
void increment() override
Increase the iterator to the next element.
Definition:
sub_grid.cpp:78
nav_grid_iterators::BaseIterator
Definition:
base_iterator.h:44
nav_grid::GenericIndex::y
NumericType y
nav_grid_iterators::BaseIterator< SubGrid >::index_
nav_grid::Index index_
Definition:
base_iterator.h:135
nav_grid::NavGridInfo
nav_grid_iterators::BaseIterator< SubGrid >::info_
const nav_grid::NavGridInfo * info_
Definition:
base_iterator.h:134
nav_grid_iterators::SubGrid::fieldsEqual
bool fieldsEqual(const SubGrid &other) override
Additional check for whether fields of derived iterators are equal.
Definition:
sub_grid.cpp:88
nav_grid::NavGridInfo::width
unsigned int width
nav_grid_iterators::SubGrid::height_
unsigned int height_
Definition:
sub_grid.h:100
nav_grid_iterators::SubGrid::min_y_
unsigned int min_y_
Definition:
sub_grid.h:100
nav_grid_iterators::SubGrid::width_
unsigned int width_
Definition:
sub_grid.h:100
nav_grid_iterators::SubGrid::min_x_
unsigned int min_x_
Definition:
sub_grid.h:100
nav_grid_iterators
Author(s):
autogenerated on Sun Jul 3 2022 02:48:01