@@ -42,15 +42,16 @@ Params:
42
42
Returns:
43
43
n-dimensional slice
44
44
+/
45
- Slice ! (Contiguous, [N] , T* )
46
- slice(T, size_t N)(size_t [N] lengths... )
45
+ ContiguousTensor ! (N , T)
46
+ slice(T, size_t N)(size_t [N] lengths... )
47
47
{
48
48
immutable len = lengthsProduct(lengths);
49
49
return new T[len].sliced(lengths);
50
50
}
51
51
52
52
// / ditto
53
- auto slice (T, size_t N)(size_t [N] lengths, T init)
53
+ ContiguousTensor! (N, T)
54
+ slice(T, size_t N)(size_t [N] lengths, T init)
54
55
{
55
56
immutable len = lengthsProduct(lengths);
56
57
static if (! hasElaborateAssign! T)
@@ -70,7 +71,12 @@ auto slice(T, size_t N)(size_t[N] lengths, T init)
70
71
// / ditto
71
72
auto slice (SliceKind kind, size_t [] packs, Iterator)(Slice! (kind, packs, Iterator) slice)
72
73
{
73
- auto ret = .slice! (Unqual! (slice.DeepElemType))(slice.shape);
74
+ alias T = Unqual! (slice.DeepElemType);
75
+ static if (hasElaborateAssign! T)
76
+ alias fun = .slice;
77
+ else
78
+ alias fun = .uninitializedSlice;
79
+ auto ret = fun! T(slice.shape);
74
80
ret[] = slice;
75
81
return ret;
76
82
}
@@ -104,8 +110,8 @@ auto slice(size_t dim, Slices...)(Concatenation!(dim, Slices) concatenation)
104
110
alias fun = .slice;
105
111
else
106
112
alias fun = .uninitializedSlice;
107
- auto ret = fun! (Unqual ! (concatenation.DeepElemType)) (concatenation.shape);
108
- ret. opIndexAssign ( concatenation) ;
113
+ auto ret = fun! T (concatenation.shape);
114
+ ret[] = concatenation;
109
115
return ret;
110
116
}
111
117
0 commit comments