Skip to content

Commit c4ab750

Browse files
committed
ditto
1 parent 45aaf8d commit c4ab750

File tree

1 file changed

+11
-20
lines changed

1 file changed

+11
-20
lines changed

source/mir/series.d

Lines changed: 11 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ module mir.series;
1717

1818
public import mir.ndslice.slice;
1919
public import mir.ndslice.sorting: sort;
20+
import mir.ndslice.sorting: transitionIndex;
2021
import mir.qualifier;
2122
import std.traits;
2223

@@ -222,8 +223,6 @@ $(LREF sort) can be used to normalise a series.
222223
+/
223224
struct mir_series(IndexIterator_, Iterator_, size_t N_ = 1, SliceKind kind_ = Contiguous)
224225
{
225-
import std.range: SearchPolicy, assumeSorted;
226-
227226
private enum doUnittest = is(typeof(this) == Series!(int*, double*));
228227

229228
///
@@ -513,14 +512,12 @@ struct mir_series(IndexIterator_, Iterator_, size_t N_ = 1, SliceKind kind_ = Co
513512
+/
514513
auto lowerBound(Index)(Index moment)
515514
{
516-
import mir.ndslice.sorting: transitionIndex;
517515
return this[0 .. index.transitionIndex(moment)];
518516
}
519517

520518
/// ditto
521519
auto lowerBound(Index)(Index moment) const
522520
{
523-
import mir.ndslice.sorting: transitionIndex;
524521
return this[0 .. index.transitionIndex(moment)];
525522
}
526523

@@ -530,16 +527,14 @@ struct mir_series(IndexIterator_, Iterator_, size_t N_ = 1, SliceKind kind_ = Co
530527
`t > moment` is true for all `t`.
531528
The search schedule and its complexity are documented in `std.range.SearchPolicy`.
532529
+/
533-
auto upperBound(SearchPolicy sp = SearchPolicy.binarySearch, Index)(Index moment)
530+
auto upperBound(Index)(Index moment)
534531
{
535-
import mir.ndslice.sorting: transitionIndex;
536532
return this[index.transitionIndex!"a <= b"(moment) .. $];
537533
}
538534

539535
/// ditto
540-
auto upperBound(SearchPolicy sp = SearchPolicy.binarySearch, Index)(Index moment) const
536+
auto upperBound(Index)(Index moment) const
541537
{
542-
import mir.ndslice.sorting: transitionIndex;
543538
return this[index.transitionIndex!"a <= b"(moment) .. $];
544539
}
545540

@@ -554,7 +549,7 @@ struct mir_series(IndexIterator_, Iterator_, size_t N_ = 1, SliceKind kind_ = Co
554549
ref get(Index, Value)(Index moment, return ref Value _default)
555550
if (!is(Value : const(Exception)))
556551
{
557-
size_t idx = index.assumeSorted.lowerBound(moment).length;
552+
size_t idx = index.transitionIndex(moment);
558553
return idx < _data._lengths[0] && index[idx] == moment ? data[idx] : _default;
559554
}
560555

@@ -575,7 +570,7 @@ struct mir_series(IndexIterator_, Iterator_, size_t N_ = 1, SliceKind kind_ = Co
575570
auto get(Index, Value)(Index moment, Value _default)
576571
if (!is(Value : const(Exception)))
577572
{
578-
size_t idx = index.assumeSorted.lowerBound(moment).length;
573+
size_t idx = index.transitionIndex(moment);
579574
return idx < _data._lengths[0] && index[idx] == moment ? data[idx] : _default;
580575
}
581576

@@ -613,7 +608,7 @@ struct mir_series(IndexIterator_, Iterator_, size_t N_ = 1, SliceKind kind_ = Co
613608
/// ditto
614609
auto ref get(Index)(Index moment, lazy const Exception exc)
615610
{
616-
size_t idx = index.assumeSorted.lowerBound(moment).length;
611+
size_t idx = index.transitionIndex(moment);
617612
if (idx < _data._lengths[0] && index[idx] == moment)
618613
{
619614
return data[idx];
@@ -703,14 +698,14 @@ struct mir_series(IndexIterator_, Iterator_, size_t N_ = 1, SliceKind kind_ = Co
703698
///
704699
bool contains(Index)(Index moment) const
705700
{
706-
size_t idx = index.assumeSorted.lowerBound(moment).length;
701+
size_t idx = index.transitionIndex(moment);
707702
return idx < _data._lengths[0] && index[idx] == moment;
708703
}
709704

710705
///
711706
auto opBinaryRight(string op : "in", Index)(Index moment)
712707
{
713-
size_t idx = index.assumeSorted.lowerBound(moment).length;
708+
size_t idx = index.transitionIndex(moment);
714709
bool cond = idx < _data._lengths[0] && index[idx] == moment;
715710
static if (__traits(compiles, &_data[size_t.init]))
716711
{
@@ -739,7 +734,7 @@ struct mir_series(IndexIterator_, Iterator_, size_t N_ = 1, SliceKind kind_ = Co
739734
///
740735
bool tryGet(Index, Value)(Index moment, ref Value val)
741736
{
742-
size_t idx = index.assumeSorted.lowerBound(moment).length;
737+
size_t idx = index.transitionIndex(moment);
743738
auto cond = idx < _data._lengths[0] && index[idx] == moment;
744739
if (cond)
745740
val = data[idx];
@@ -1434,9 +1429,7 @@ Returns:
14341429
+/
14351430
size_t findIndex(IndexIterator, Iterator, size_t N, SliceKind kind, Index)(Series!(IndexIterator, Iterator, N, kind) series, Index moment)
14361431
{
1437-
import std.range: assumeSorted;
1438-
1439-
auto idx = series.index.assumeSorted.lowerBound(moment).length;
1432+
auto idx = series.index.transitionIndex(moment);
14401433
if (idx < series._data._lengths[0] && series.index[idx] == moment)
14411434
{
14421435
return idx;
@@ -1466,9 +1459,7 @@ Returns:
14661459
+/
14671460
size_t find(IndexIterator, Iterator, size_t N, SliceKind kind, Index)(Series!(IndexIterator, Iterator, N, kind) series, Index moment)
14681461
{
1469-
import std.range: assumeSorted;
1470-
1471-
auto idx = series.index.assumeSorted.lowerBound(moment).length;
1462+
auto idx = series.index.transitionIndex(moment);
14721463
auto bidx = series._data._lengths[0] - idx;
14731464
if (bidx && series.index[idx] == moment)
14741465
{

0 commit comments

Comments
 (0)