boostorg / boostorg/json

Explore potential for optimization in array::insert(Iter, InputIt, InputIt)

Ouverte
#702 6 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
Performance
Langage dominant
C++
Étoiles
479
Forks
110
Merge moyen
10 j 3 h
PR mergées (30 j)
5

Description

The idea is this:
1. Fill the buffer up to capacity _at the end_ (needs a `revert_insert` protection).
2. Create a temporary buffer with the remaining elements (can throw).
3. If temporary buffer is not empty
1. Allocate new buffer with necessary size (can throw).
2. Relocate elements
* first original elements, up to insertion point,
* then new elements (at the end of the original buffer),
* then new elements from the temporary buffer,
* then remaining old elements.
4. If the temporary buffer is empty, rotate elements in the original buffer instead.

In the end result:
1. If the original capacity could accommodate the input range, then no new buffer (even a temporary one) is allocated. This is particularly useful when the caller uses input iterators, but does know the input range size, and thus can call `reserve`.
2. We should be able to keep the strong guarantee.

Guide de contribution

Ouvrir le guide de contribution

Évaluation

Cette issue n'a pas encore été évaluée.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.