@@ -158,7 +158,7 @@ namespace internal
158
158
};
159
159
160
160
template <typename TArray>
161
- class ArrayShifter
161
+ class ArrayInserter
162
162
{
163
163
public:
164
164
typedef TArray Array;
@@ -196,17 +196,6 @@ namespace internal
196
196
}
197
197
}
198
198
199
- template <std::input_iterator ArgIterator, internal::conceptSentinel<ArgIterator> ArgSentinel>
200
- static void Insert (Array& array, size_t index, ArgIterator begin, ArgSentinel end)
201
- {
202
- typedef typename ItemTraits::template Creator<
203
- std::iter_reference_t <ArgIterator>> IterCreator;
204
- MemManager& memManager = array.GetMemManager ();
205
- size_t count = 0 ;
206
- for (ArgIterator iter = std::move (begin); iter != end; (void )++iter, ++count)
207
- array.InsertCrt (index + count, IterCreator (memManager, *iter));
208
- }
209
-
210
199
template <internal::conceptForwardIterator ArgIterator>
211
200
static void InsertNogrow (Array& array, size_t index, ArgIterator begin, size_t count)
212
201
{
@@ -259,6 +248,9 @@ namespace internal
259
248
private:
260
249
typedef ArrayItemHandler<ItemTraits> ItemHandler;
261
250
251
+ template <typename ArrayArg>
252
+ using ArrayInserter = internal::ArrayInserter<std::decay_t <ArrayArg>>;
253
+
262
254
public:
263
255
template <conceptMutableThisArg ArrayArg, conceptObjectCreator<Item> ItemCreator>
264
256
void InsertCrt (this ArrayArg&& array, size_t index, ItemCreator itemCreator)
@@ -290,28 +282,31 @@ namespace internal
290
282
template <conceptMutableThisArg ArrayArg>
291
283
void Insert (this ArrayArg&& array, size_t index, size_t count, const Item& item)
292
284
{
293
- typedef ArrayShifter<std::decay_t <ArrayArg>> ArrayShifter;
294
285
typedef typename ItemTraits::template Creator<const Item&> ItemCreator;
295
286
MemManager& memManager = array.GetMemManager ();
296
287
ItemHandler itemHandler (memManager, FastMovableFunctor (ItemCreator (memManager, item)));
297
288
array.Reserve (array.GetCount () + count);
298
- ArrayShifter ::InsertNogrow (array, index , count, itemHandler.Get ());
289
+ ArrayInserter<ArrayArg> ::InsertNogrow (array, index , count, itemHandler.Get ());
299
290
}
300
291
301
292
template <conceptMutableThisArg ArrayArg,
302
293
std::input_iterator ArgIterator, conceptSentinel<ArgIterator> ArgSentinel>
303
294
void Insert (this ArrayArg&& array, size_t index, ArgIterator begin, ArgSentinel end)
304
295
{
305
- typedef ArrayShifter<std::decay_t <ArrayArg>> ArrayShifter;
306
296
if constexpr (conceptForwardIterator<ArgIterator>)
307
297
{
308
298
size_t count = UIntMath<>::Dist (begin, end);
309
299
array.Reserve (array.GetCount () + count);
310
- ArrayShifter ::InsertNogrow (array, index , begin, count);
300
+ ArrayInserter<ArrayArg> ::InsertNogrow (array, index , begin, count);
311
301
}
312
302
else
313
303
{
314
- ArrayShifter::Insert (array, index , std::move (begin), std::move (end));
304
+ typedef typename ItemTraits::template Creator<
305
+ std::iter_reference_t <ArgIterator>> IterCreator;
306
+ MemManager& memManager = array.GetMemManager ();
307
+ size_t count = 0 ;
308
+ for (ArgIterator iter = std::move (begin); iter != end; (void )++iter, ++count)
309
+ array.InsertCrt (index + count, IterCreator (memManager, *iter));
315
310
}
316
311
}
317
312
@@ -381,7 +376,7 @@ namespace internal
381
376
{
382
377
ItemHandler itemHandler (array.GetMemManager (), std::move (itemCreator));
383
378
array.Reserve (array.GetCount () + 1 );
384
- ArrayShifter <Array>::InsertNogrow (array, index , std::move (itemHandler.Get ()));
379
+ ArrayInserter <Array>::InsertNogrow (array, index , std::move (itemHandler.Get ()));
385
380
}
386
381
};
387
382
0 commit comments