ctutils: pluggable trait impls for [T] and [T; N]
#1388
Merged
+209
−266
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.
Introduces a set of helper traits for the following:
CtAssign:CtAssignSliceCtEq:CtEqSliceCtSelect:CtSelectArrayImplementing a
*Slicetrait unlocks a blanket impl for the corresponding trait for[T], e.g. impl'ingCtAssignSliceforTmeansCtAssignwill now work with[T].Likewise, implementing
CtSelectArrayunlocks the blanket impl ofCtSelectfor[T; N], andCtSelectArrayitself is already blanket impl'd for types which implClone + CtAssignSlice + CtSelect.All traits provide a default implementation with the option to plug in a faster one. The implementations on core integers thunk to the corresponding
Cmov/CmovEqimpls on slices of core integers, which in some cases have been optimized (especiallyu8).