slot_map: Do not require Container to provide reverse_iterator typedefs.#122
Open
Quuxplusone wants to merge 2 commits intoWG21-SG14:masterfrom
Open
slot_map: Do not require Container to provide reverse_iterator typedefs.#122Quuxplusone wants to merge 2 commits intoWG21-SG14:masterfrom
Quuxplusone wants to merge 2 commits intoWG21-SG14:masterfrom
Conversation
Contributor
|
Seems reasonable to me - does anyone have any objections to this? I'm not familiar enough with the code to comment as to side-effects. |
The member function `sm.reserve_slots(n)` used to call `reserve` (and nothing else) on the slots container. This is not useful functionality. After this patch, `sm.reserve_slots(n)` resizes the slots container to `n`. It does not touch the values container, since there is a valid use-case for "many slots, relatively few values." The member function `sm.reserve(n)` used to call `reserve` on all three containers. After this patch, `sm.reserve(n)` still calls `reserve` on the values container, and also on the reverse_map container, which is always the same size as the values container by definition. It now *resizes* the slots container to `n`, since there is no way for the programmer to use the `n` capacity of the values container without taking up `n` slots anyway. N.B.: For container types that do not provide a suitable `reserve()` method, the methods `sm.reserve(n)` and `sm.reserve_slots(n)` have exactly the same effects. The accessor `sm.capacity_slots()` has been renamed to `sm.slot_count()` for clarity, and returns the `size()` of the slots container. The accessor `sm.capacity()` still returns the `capacity()` of the values container. It now SFINAEs away if the container does not provide a suitable `capacity()` method.
`slot_map<T,K,C>` will now propagate the "reverse-iterability" of `C<T>`, both the existence of the member typedefs and the existence of the member functions `rbegin`, `rend`, `crbegin`, and `crend` (as a group, not individually).
dbeb876 to
472e738
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Attn: @Masstronaut
With this patch,
slot_map<T,K,C>will propagate the "reverse-iterability" ofC<T>, both the existence of the member typedefs and the existence of the member functionsrbegin,rend,crbegin, andcrend(as a group, not individually).Is this desirable? I tend to think yes, because implementing reverse-iterability for a custom container is usually wasted busywork. OTOH, it could alternatively be addressed by some library (either SG14 or Boost or otherwise) providing a
reversiblemix-in:BTW, the fact that this
reVectoralias template can be passed to a template template parameter is very cool. I was worried that it wasn't going to be that easy.