Exposing pred from SortedRange and changes to algorithms that assumeSorted

aliak something at something.com
Fri Jan 12 09:52:36 UTC 2018


Would it be an acceptable enhancement to phobos to expose the 
predicate in SortedRange 
(https://dlang.org/library/std/range/sorted_range.html)?

The rationale behind it would be so that functions like 
setDifference 
(https://dlang.org/library/std/algorithm/setops/set_difference.html) or any function that requires a sorted range to "run" does not need to be provided the sorting predicate, ie:

setDifference
largestPartialIntersection
largestPartialIntersectionWeighted
multiwayUnion
setIntersection
setSymmetricDifference
setUnion
multiwayMerge

Where functions do required ranges to be sorted and a predicate 
passed in, this enhancement should reduce programmer errors (i.e. 
providing the wrong predicate to the algorithm that was used to 
sort the range that you want to operate on). The sortedrange 
knows how it was sorted, so there should be no need to duplicate 
that (unless there are maybe some valid reasons?).

It would also make for SortedRange itself to be made lighter 
(maybe not a good idea at this point but it can be done at least) 
by moving it's functionality in to algorithms that are already 
there. Eg, "SortedRange.contains" can be done by 
algorithm.canFind:

auto canFind(Range, T)(Range range, T element) if 
(isSortedRange!Range) {
   // do binary search for element
}

PS: Is this the correct place for posts like this? Apologies if 
not :s



More information about the Digitalmars-d mailing list