@@ -133,10 +133,10 @@ float vuapi fast_sqrtf(const float number)
133
133
* @param[in] num_items The number of items.
134
134
* @param[in] num_pieces The number of pieces.
135
135
* @param[in] fn The function that apply to each piece.
136
- * idx The piece index.
137
- * beg The index of the begin item in piece.
138
- * end The index of the end item in piece.
139
- * num The number of items in piece.
136
+ * piece. idx The piece index.
137
+ * piece. beg The index of the begin item in piece.
138
+ * piece. end The index of the end item in piece.
139
+ * piece. num The number of items in piece.
140
140
* Eg. In these cases, the number of items of each piece as the following:
141
141
* (4, 1) => (4)
142
142
* (4, 2) => (2, 2)
@@ -145,7 +145,7 @@ float vuapi fast_sqrtf(const float number)
145
145
* (4, 5) => (1, 1, 1, 1, 0)
146
146
*/
147
147
void divide_items_into_pieces (const size_t num_items, const size_t num_pieces,
148
- std::function<void (size_t idx, size_t beg, size_t end, size_t num )> fn)
148
+ std::function<void (const piece_t & piece )> fn)
149
149
{
150
150
if (fn == nullptr )
151
151
{
@@ -154,17 +154,20 @@ void divide_items_into_pieces(const size_t num_items, const size_t num_pieces,
154
154
155
155
size_t num_items_per_piece = std::max (1 , int (num_items / float (num_pieces) + 0 .5F ));
156
156
157
+ piece_t piece;
158
+
157
159
for (size_t idx = 0 ; idx < num_pieces; ++idx)
158
160
{
159
161
size_t beg = idx * num_items_per_piece;
160
162
size_t end = idx == num_pieces - 1 ? num_items : (idx + 1 ) * num_items_per_piece;
161
163
size_t num = end - beg;
162
164
163
- beg = idx < num_items ? beg : -1 ;
164
- end = idx < num_items ? end - 1 : -1 ;
165
- num = idx < num_items ? num : 0 ;
165
+ piece.idx = idx;
166
+ piece.beg = idx < num_items ? beg : -1 ;
167
+ piece.end = idx < num_items ? end - 1 : -1 ;
168
+ piece.num = idx < num_items ? num : 0 ;
166
169
167
- fn (idx, beg, end, num );
170
+ fn (piece );
168
171
}
169
172
}
170
173
@@ -173,40 +176,48 @@ void divide_items_into_pieces(const size_t num_items, const size_t num_pieces,
173
176
* @param[in] num_items The number of items.
174
177
* @param[in] num_pieces The number of item per piece.
175
178
* @param[in] fn The function that apply to each piece.
176
- * idx The piece index.
177
- * beg The index of the begin item in piece.
178
- * end The index of the end item in piece.
179
- * num The number of items in piece.
179
+ * piece. idx The piece index.
180
+ * piece. beg The index of the begin item in piece.
181
+ * piece. end The index of the end item in piece.
182
+ * piece. num The number of items in piece.
180
183
* @return The number of pieces.
181
184
* Eg. The number of items of each piece as the following.
182
185
* (4, 1) => (1, 1, 1, 1)
183
186
* (4, 2) => (2, 2)
184
- * (4, 3) => (3, 1, 1 )
187
+ * (4, 3) => (3, 1)
185
188
* (4, 4) => (4)
186
189
* (4, 5) => (4)
187
190
*/
188
191
size_t divide_items_into_num_items_per_piece (const size_t num_items, const size_t num_items_per_piece,
189
- std::function<void (size_t idx, size_t beg, size_t end, size_t num )> fn)
192
+ std::function<void (const piece_t & piece )> fn)
190
193
{
191
194
if (fn == nullptr )
192
195
{
193
196
return 0 ;
194
197
}
195
198
199
+ piece_t piece;
200
+
196
201
size_t result = 0 ;
197
202
198
- std::vector<size_t > piece ;
203
+ std::vector<size_t > temp ;
199
204
200
205
for (size_t j = 1 ; j <= num_items; j++)
201
206
{
202
207
size_t i = j - 1 ;
203
208
204
- piece .push_back (i);
209
+ temp .push_back (i);
205
210
206
211
if (j % num_items_per_piece == 0 || i == num_items - 1 )
207
212
{
208
- fn (result, piece.front (), piece.back (), piece.size ());
209
- piece.clear ();
213
+ piece.idx = result;
214
+ piece.beg = temp.front ();
215
+ piece.end = temp.back ();
216
+ piece.num = temp.size ();
217
+
218
+ fn (piece);
219
+
220
+ temp.clear ();
210
221
result += 1 ;
211
222
}
212
223
}
0 commit comments