|
158 | 158 | end |
159 | 159 | end |
160 | 160 |
|
161 | | -@inline function _mapreduce(f, op, D::Tuple, init, sz::Size{S}, a::StaticArray) where {S} |
162 | | - b = _mapreduce(f, op, first(D), init, sz, a) |
163 | | - return _mapreduce(f, op, Base.tail(D), init, Size(b), b) |
164 | | -end |
165 | | -_mapreduce(f, op, D::Tuple{}, init, sz::Size{S}, a::StaticArray) where {S} = a |
| 161 | +@inline _mapreduce(f, op, D::Tuple{<:Any}, init, sz::Size{S}, a::StaticArray) where {S} = |
| 162 | + _mapreduce(f, op, first(D), init, sz, a) |
166 | 163 |
|
167 | 164 | @generated function _mapfoldl(f, op, dims::Val{D}, init, |
168 | 165 | ::Size{S}, a::StaticArray) where {S,D} |
@@ -215,6 +212,14 @@ reduce(::typeof(hcat), A::StaticArray{<:Tuple,<:StaticVecOrMatLike}) = |
215 | 212 | @inline _reduce(op, a::StaticArray, dims, init = _InitialValue()) = |
216 | 213 | _mapreduce(identity, op, dims, init, Size(a), a) |
217 | 214 |
|
| 215 | +@inline function _reduce(op, a::StaticArray, dims::Tuple, init = _InitialValue()) |
| 216 | + b = _reduce(op, a, first(dims), init) |
| 217 | + return _reduce(op, b, Base.tail(dims)) |
| 218 | +end |
| 219 | +_reduce(op, a::StaticArray, dims::Tuple{}, ::_InitialValue) = a |
| 220 | +_reduce(op, a::StaticArray, dims::Tuple{}, init) = op.(init, a) |
| 221 | + |
| 222 | + |
218 | 223 | ################ |
219 | 224 | ## (map)foldl ## |
220 | 225 | ################ |
|
0 commit comments