@@ -2188,18 +2188,45 @@ Merges multiple (time) series into one.
21882188Makes exactly one memory allocation for two series union
21892189and two memory allocation for three and more series union.
21902190
2191- Params:
2192- seriesTuple = variadic static array of composed of series, each series must be sorted.
21932191Returns: sorted GC-allocated series.
21942192See_also $(LREF Series.opBinary) $(LREF makeUnionSeries)
21952193*/
2196- auto unionSeries (IndexIterator, Iterator, size_t N, SliceKind kind, size_t C)(Series! (IndexIterator, Iterator, N, kind)[C] seriesTuple... )
2197- if (C > 1 )
2194+ auto unionSeries (IndexIterator, Iterator, size_t N, SliceKind kind)(
2195+ Series! (IndexIterator, Iterator, N, kind) a,
2196+ Series! (IndexIterator, Iterator, N, kind) b,
2197+ ) @safe
2198+ {
2199+ import core.lifetime : move;
2200+ Series! (IndexIterator, Iterator, N, kind)[2 ] ar = [move(a), move(b)];
2201+ return unionSeriesImplPrivate! false (move(ar));
2202+ }
2203+
2204+ // / ditto
2205+ auto unionSeries (IndexIterator, Iterator, size_t N, SliceKind kind)(
2206+ Series! (IndexIterator, Iterator, N, kind) a,
2207+ Series! (IndexIterator, Iterator, N, kind) b,
2208+ Series! (IndexIterator, Iterator, N, kind) c,
2209+ ) @safe
21982210{
21992211 import core.lifetime : move;
2200- return unionSeriesImplPrivate! false (move(seriesTuple));
2212+ Series! (IndexIterator, Iterator, N, kind)[3 ] ar = [move(a), move(b), move(c)];
2213+ return unionSeriesImplPrivate! false (move(ar));
22012214}
22022215
2216+ // / ditto
2217+ auto unionSeries (IndexIterator, Iterator, size_t N, SliceKind kind)(
2218+ Series! (IndexIterator, Iterator, N, kind) a,
2219+ Series! (IndexIterator, Iterator, N, kind) b,
2220+ Series! (IndexIterator, Iterator, N, kind) c,
2221+ Series! (IndexIterator, Iterator, N, kind) d,
2222+ ) @safe
2223+ {
2224+ import core.lifetime : move;
2225+ Series! (IndexIterator, Iterator, N, kind)[4 ] ar = [move(a), move(b), move(c), move(d)];
2226+ return unionSeriesImplPrivate! false (move(ar));
2227+ }
2228+
2229+
22032230// /
22042231@safe pure nothrow version(mir_test) unittest
22052232{
@@ -2322,15 +2349,42 @@ auto makeUnionSeries(IndexIterator, Iterator, size_t N, SliceKind kind, size_t C
23222349/**
23232350Merges multiple (time) series into one.
23242351
2325- Params:
2326- seriesTuple = variadic static array of composed of series.
23272352Returns: sorted manually allocated series.
23282353See_also $(LREF unionSeries)
23292354*/
2330- auto rcUnionSeries (IndexIterator, Iterator, size_t N, SliceKind kind, size_t C)(Series! (IndexIterator, Iterator, N, kind)[C] seriesTuple... )
2331- if (C > 1 )
2355+ auto rcUnionSeries (IndexIterator, Iterator, size_t N, SliceKind kind)(
2356+ Series! (IndexIterator, Iterator, N, kind) a,
2357+ Series! (IndexIterator, Iterator, N, kind) b,
2358+ ) @safe
23322359{
2333- return unionSeriesImplPrivate! true (seriesTuple);
2360+ import core.lifetime : move;
2361+ Series! (IndexIterator, Iterator, N, kind)[2 ] ar = [move(a), move(b)];
2362+ return unionSeriesImplPrivate! true (move(ar));
2363+ }
2364+
2365+ // /ditto
2366+ auto rcUnionSeries (IndexIterator, Iterator, size_t N, SliceKind kind)(
2367+ Series! (IndexIterator, Iterator, N, kind) a,
2368+ Series! (IndexIterator, Iterator, N, kind) b,
2369+ Series! (IndexIterator, Iterator, N, kind) c,
2370+ ) @safe
2371+ {
2372+ import core.lifetime : move;
2373+ Series! (IndexIterator, Iterator, N, kind)[3 ] ar = [move(a), move(b), move(c)];
2374+ return unionSeriesImplPrivate! true (move(ar));
2375+ }
2376+
2377+ // /ditto
2378+ auto rcUnionSeries (IndexIterator, Iterator, size_t N, SliceKind kind)(
2379+ Series! (IndexIterator, Iterator, N, kind) a,
2380+ Series! (IndexIterator, Iterator, N, kind) b,
2381+ Series! (IndexIterator, Iterator, N, kind) c,
2382+ Series! (IndexIterator, Iterator, N, kind) d,
2383+ ) @safe
2384+ {
2385+ import core.lifetime : move;
2386+ Series! (IndexIterator, Iterator, N, kind)[4 ] ar = [move(a), move(b), move(c), move(d)];
2387+ return unionSeriesImplPrivate! true (move(ar));
23342388}
23352389
23362390// /
@@ -2374,9 +2428,9 @@ Params:
23742428pragma (inline, false )
23752429auto unionSeriesImpl (I, E,
23762430 IndexIterator, Iterator, size_t N, SliceKind kind, UI , UE )(
2377- Series! (IndexIterator, Iterator, N, kind)[] seriesTuple,
2431+ scope Series! (IndexIterator, Iterator, N, kind)[] seriesTuple,
23782432 Series! (UI * , UE * , N) uninitSeries,
2379- )
2433+ ) @trusted
23802434{
23812435 import mir.conv: emplaceRef;
23822436 import mir.algorithm.setops: multiwayUnion;
@@ -2403,7 +2457,7 @@ auto unionSeriesImpl(I, E,
24032457 }
24042458}
24052459
2406- private auto unionSeriesImplPrivate (bool rc, IndexIterator, Iterator, size_t N, SliceKind kind, size_t C, Allocator... )(Series! (IndexIterator, Iterator, N, kind)[C] seriesTuple, ref Allocator allocator)
2460+ private auto unionSeriesImplPrivate (bool rc, IndexIterator, Iterator, size_t N, SliceKind kind, size_t C, Allocator... )(Series! (IndexIterator, Iterator, N, kind)[C] seriesTuple, ref Allocator allocator) @safe
24072461 if (C > 1 && Allocator.length <= 1 )
24082462{
24092463 import mir.algorithm.setops: unionLength;
0 commit comments