Skip to content

Commit 06dff30

Browse files
committed
update series
1 parent f2dd7a8 commit 06dff30

File tree

1 file changed

+17
-18
lines changed

1 file changed

+17
-18
lines changed

source/mir/series.d

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1226,34 +1226,33 @@ Series!(K*, V*) series(RK, RV, K = RK, V = RV)(RV[RK] aa)
12261226
import mir.conv: to;
12271227
const size_t length = aa.length;
12281228
alias R = typeof(return);
1229-
Series!(Unqual!K*, Unqual!V*) ret;
12301229
if (__ctfe)
12311230
{
1232-
Unqual!K[] keys;
1233-
Unqual!V[] values;
1231+
K[] keys;
1232+
V[] values;
12341233
foreach(kv; aa.byKeyValue)
12351234
{
12361235
keys ~= kv.key.to!K;
12371236
values ~= kv.value.to!V;
12381237
}
1239-
ret = series(keys, values);
1238+
auto ret = series(keys, values);
1239+
.sort((()@trusted=>cast(Series!(Unqual!K*, Unqual!V*))ret)());
1240+
static if (is(typeof(ret) == typeof(return)))
1241+
return ret;
1242+
else
1243+
return ()@trusted{ return cast(R) ret; }();
12401244
}
1241-
else
1245+
import mir.ndslice.allocation: uninitSlice;
1246+
Series!(Unqual!K*, Unqual!V*) ret = series(length.uninitSlice!(Unqual!K), length.uninitSlice!(Unqual!V));
1247+
auto it = ret;
1248+
foreach(kv; aa.byKeyValue)
12421249
{
1243-
import mir.ndslice.allocation: uninitSlice;
1244-
1245-
ret = series(length.uninitSlice!(Unqual!K), length.uninitSlice!(Unqual!V));
1246-
auto it = ret;
1247-
foreach(kv; aa.byKeyValue)
1248-
{
1249-
import mir.conv: emplaceRef;
1250-
emplaceRef!K(it.index.front, kv.key.to!K);
1251-
emplaceRef!V(it._data.front, kv.value.to!V);
1252-
it.popFront;
1253-
}
1250+
import mir.conv: emplaceRef;
1251+
emplaceRef!K(it.index.front, kv.key.to!K);
1252+
emplaceRef!V(it._data.front, kv.value.to!V);
1253+
it.popFront;
12541254
}
1255-
1256-
ret.sort;
1255+
.sort(ret);
12571256
static if (is(typeof(ret) == typeof(return)))
12581257
return ret;
12591258
else

0 commit comments

Comments
 (0)