@@ -50,31 +50,31 @@ class KDBush {
50
50
sortKD (0 , size - 1 , 0 );
51
51
}
52
52
53
- template <typename TOutputIter >
53
+ template <typename TVisitor >
54
54
void range (const TNumber minX,
55
55
const TNumber minY,
56
56
const TNumber maxX,
57
57
const TNumber maxY,
58
- TOutputIter out ) {
59
- range (minX, minY, maxX, maxY, out , 0 , ids.size () - 1 , 0 );
58
+ const TVisitor &visitor ) {
59
+ range (minX, minY, maxX, maxY, visitor , 0 , ids.size () - 1 , 0 );
60
60
}
61
61
62
- template <typename TOutputIter >
63
- void within (const TNumber qx, const TNumber qy, const TNumber r, TOutputIter out ) {
64
- within (qx, qy, r, out , 0 , ids.size () - 1 , 0 );
62
+ template <typename TVisitor >
63
+ void within (const TNumber qx, const TNumber qy, const TNumber r, const TVisitor &visitor ) {
64
+ within (qx, qy, r, visitor , 0 , ids.size () - 1 , 0 );
65
65
}
66
66
67
67
private:
68
68
std::vector<TIndex> ids;
69
69
std::vector<std::pair<TNumber, TNumber>> points;
70
70
std::uint8_t nodeSize;
71
71
72
- template <typename TOutputIter >
72
+ template <typename TVisitor >
73
73
void range (const TNumber minX,
74
74
const TNumber minY,
75
75
const TNumber maxX,
76
76
const TNumber maxY,
77
- TOutputIter out ,
77
+ const TVisitor &visitor ,
78
78
const TIndex left,
79
79
const TIndex right,
80
80
const std::uint8_t axis) {
@@ -83,7 +83,7 @@ class KDBush {
83
83
for (auto i = left; i <= right; i++) {
84
84
const TNumber x = std::get<0 >(points[i]);
85
85
const TNumber y = std::get<1 >(points[i]);
86
- if (x >= minX && x <= maxX && y >= minY && y <= maxY) *out++ = ids[i];
86
+ if (x >= minX && x <= maxX && y >= minY && y <= maxY) visitor ( ids[i]) ;
87
87
}
88
88
return ;
89
89
}
@@ -92,20 +92,20 @@ class KDBush {
92
92
const TNumber x = std::get<0 >(points[m]);
93
93
const TNumber y = std::get<1 >(points[m]);
94
94
95
- if (x >= minX && x <= maxX && y >= minY && y <= maxY) *out++ = ids[m];
95
+ if (x >= minX && x <= maxX && y >= minY && y <= maxY) visitor ( ids[m]) ;
96
96
97
97
if (axis == 0 ? minX <= x : minY <= y)
98
- range (minX, minY, maxX, maxY, out , left, m - 1 , (axis + 1 ) % 2 );
98
+ range (minX, minY, maxX, maxY, visitor , left, m - 1 , (axis + 1 ) % 2 );
99
99
100
100
if (axis == 0 ? maxX >= x : maxY >= y)
101
- range (minX, minY, maxX, maxY, out , m + 1 , right, (axis + 1 ) % 2 );
101
+ range (minX, minY, maxX, maxY, visitor , m + 1 , right, (axis + 1 ) % 2 );
102
102
}
103
103
104
- template <typename TOutputIter >
104
+ template <typename TVisitor >
105
105
void within (const TNumber qx,
106
106
const TNumber qy,
107
107
const TNumber r,
108
- TOutputIter out ,
108
+ const TVisitor &visitor ,
109
109
const TIndex left,
110
110
const TIndex right,
111
111
const std::uint8_t axis) {
@@ -116,7 +116,7 @@ class KDBush {
116
116
for (auto i = left; i <= right; i++) {
117
117
const TNumber x = std::get<0 >(points[i]);
118
118
const TNumber y = std::get<1 >(points[i]);
119
- if (sqDist (x, y, qx, qy) <= r2) *out++ = ids[i];
119
+ if (sqDist (x, y, qx, qy) <= r2) visitor ( ids[i]) ;
120
120
}
121
121
return ;
122
122
}
@@ -125,13 +125,13 @@ class KDBush {
125
125
const TNumber x = std::get<0 >(points[m]);
126
126
const TNumber y = std::get<1 >(points[m]);
127
127
128
- if (sqDist (x, y, qx, qy) <= r2) *out++ = ids[m];
128
+ if (sqDist (x, y, qx, qy) <= r2) visitor ( ids[m]) ;
129
129
130
130
if (axis == 0 ? qx - r <= x : qy - r <= y)
131
- within (qx, qy, r, out , left, m - 1 , (axis + 1 ) % 2 );
131
+ within (qx, qy, r, visitor , left, m - 1 , (axis + 1 ) % 2 );
132
132
133
133
if (axis == 0 ? qx + r >= x : qy + r >= y)
134
- within (qx, qy, r, out , m + 1 , right, (axis + 1 ) % 2 );
134
+ within (qx, qy, r, visitor , m + 1 , right, (axis + 1 ) % 2 );
135
135
}
136
136
137
137
void sortKD (const TIndex left, const TIndex right, const std::uint8_t axis) {
0 commit comments