|
1 |
| -import Base: .+, .-, .*, ./, .\, .%, .^ |
| 1 | +import Base: .+, .-, .*, ./, .//, .\, .%, .^, .<<, .>>, .==, .<, .>, .<=, .>=, !, &, |, $ |
2 | 2 |
|
3 | 3 | # Support for elementwise ops on AbstractArray{S<:StaticArray} with Number
|
4 | 4 | Base.promote_op{Op,A<:StaticArray,T<:Number}(op::Op, ::Type{A}, ::Type{T}) = similar_type(A, promote_op(op, eltype(A), T))
|
5 | 5 | Base.promote_op{Op,T<:Number,A<:StaticArray}(op::Op, ::Type{T}, ::Type{A}) = similar_type(A, promote_op(op, T, eltype(A)))
|
6 | 6 |
|
7 |
| - |
8 |
| -# TODO any more operators? |
9 |
| - |
10 | 7 | @inline .-(a1::StaticArray) = broadcast(-, a1)
|
11 | 8 |
|
12 | 9 | @inline .+(a1::StaticArray, a2::StaticArray) = broadcast(+, a1, a2)
|
13 | 10 | @inline .-(a1::StaticArray, a2::StaticArray) = broadcast(-, a1, a2)
|
14 | 11 | @inline .*(a1::StaticArray, a2::StaticArray) = broadcast(*, a1, a2)
|
15 | 12 | @inline ./(a1::StaticArray, a2::StaticArray) = broadcast(/, a1, a2)
|
| 13 | +@inline .//(a1::StaticArray, a2::StaticArray) = broadcast(//, a1, a2) |
16 | 14 | @inline .\(a1::StaticArray, a2::StaticArray) = broadcast(\, a1, a2)
|
17 | 15 | @inline .%(a1::StaticArray, a2::StaticArray) = broadcast(%, a1, a2)
|
18 | 16 | @inline .^(a1::StaticArray, a2::StaticArray) = broadcast(^, a1, a2)
|
| 17 | +@inline .<<(a1::StaticArray, a2::StaticArray) = broadcast(<<, a1, a2) |
| 18 | +@inline .>>(a1::StaticArray, a2::StaticArray) = broadcast(<<, a1, a2) |
| 19 | +@inline .==(a1::StaticArray, a2::StaticArray) = broadcast(==, a1, a2) |
| 20 | +@inline .<(a1::StaticArray, a2::StaticArray) = broadcast(<, a1, a2) |
| 21 | +@inline .>(a1::StaticArray, a2::StaticArray) = broadcast(>, a1, a2) |
| 22 | +@inline .<=(a1::StaticArray, a2::StaticArray) = broadcast(<=, a1, a2) |
| 23 | +@inline .>=(a1::StaticArray, a2::StaticArray) = broadcast(>=, a1, a2) |
19 | 24 |
|
20 | 25 | @inline .+(a1::StaticArray, a2::Number) = broadcast(+, a1, a2)
|
21 | 26 | @inline .-(a1::StaticArray, a2::Number) = broadcast(-, a1, a2)
|
22 | 27 | @inline .*(a1::StaticArray, a2::Number) = broadcast(*, a1, a2)
|
23 | 28 | @inline ./(a1::StaticArray, a2::Number) = broadcast(/, a1, a2)
|
| 29 | +@inline .//(a1::StaticArray, a2::Number) = broadcast(//, a1, a2) |
24 | 30 | @inline .\(a1::StaticArray, a2::Number) = broadcast(\, a1, a2)
|
25 | 31 | @inline .%(a1::StaticArray, a2::Number) = broadcast(%, a1, a2)
|
26 | 32 | @inline .^(a1::StaticArray, a2::Number) = broadcast(^, a1, a2)
|
| 33 | +@inline .<<(a1::StaticArray, a2::Number) = broadcast(<<, a1, a2) |
| 34 | +@inline .>>(a1::StaticArray, a2::Number) = broadcast(<<, a1, a2) |
| 35 | +@inline .==(a1::StaticArray, a2) = broadcast(==, a1, a2) |
| 36 | +@inline .<(a1::StaticArray, a2) = broadcast(<, a1, a2) |
| 37 | +@inline .>(a1::StaticArray, a2) = broadcast(>, a1, a2) |
| 38 | +@inline .<=(a1::StaticArray, a2) = broadcast(<=, a1, a2) |
| 39 | +@inline .>=(a1::StaticArray, a2) = broadcast(>=, a1, a2) |
27 | 40 |
|
28 | 41 | @inline .+(a1::Number, a2::StaticArray) = broadcast(+, a1, a2)
|
29 | 42 | @inline .-(a1::Number, a2::StaticArray) = broadcast(-, a1, a2)
|
30 | 43 | @inline .*(a1::Number, a2::StaticArray) = broadcast(*, a1, a2)
|
31 | 44 | @inline ./(a1::Number, a2::StaticArray) = broadcast(/, a1, a2)
|
| 45 | +@inline .//(a1::Number, a2::StaticArray) = broadcast(//, a1, a2) |
32 | 46 | @inline .\(a1::Number, a2::StaticArray) = broadcast(\, a1, a2)
|
33 | 47 | @inline .%(a1::Number, a2::StaticArray) = broadcast(%, a1, a2)
|
34 | 48 | @inline .^(a1::Number, a2::StaticArray) = broadcast(^, a1, a2)
|
| 49 | +@inline .<<(a1::Number, a2::StaticArray) = broadcast(<<, a1, a2) |
| 50 | +@inline .>>(a1::Number, a2::StaticArray) = broadcast(<<, a1, a2) |
| 51 | +@inline .==(a1, a2::StaticArray) = broadcast(==, a1, a2) |
| 52 | +@inline .<(a1, a2::StaticArray) = broadcast(<, a1, a2) |
| 53 | +@inline .>(a1, a2::StaticArray) = broadcast(>, a1, a2) |
| 54 | +@inline .<=(a1, a2::StaticArray) = broadcast(<=, a1, a2) |
| 55 | +@inline .>=(a1, a2::StaticArray) = broadcast(>=, a1, a2) |
| 56 | + |
| 57 | +# The remaining auto-vectorized boolean operators |
| 58 | +@inline !(a::StaticArray{Bool}) = broadcast(!, a) |
| 59 | + |
| 60 | +@inline (&){T1,T2}(a1::StaticArray{T1}, a2::StaticArray{T2}) = broadcast(&, a1, a2) |
| 61 | +@inline (|){T1,T2}(a1::StaticArray{T1}, a2::StaticArray{T2}) = broadcast(|, a1, a2) |
| 62 | +@inline ($){T1,T2}(a1::StaticArray{T1}, a2::StaticArray{T2}) = broadcast($, a1, a2) |
| 63 | + |
| 64 | +@inline (&){T}(a1::StaticArray{T}, a2::Number) = broadcast(&, a1, a2) |
| 65 | +@inline (|){T}(a1::StaticArray{T}, a2::Number) = broadcast(|, a1, a2) |
| 66 | +@inline ($){T}(a1::StaticArray{T}, a2::Number) = broadcast($, a1, a2) |
| 67 | + |
| 68 | +@inline (&){T}(a1::Number, a2::StaticArray{T}) = broadcast(&, a1, a2) |
| 69 | +@inline (|){T}(a1::Number, a2::StaticArray{T}) = broadcast(|, a1, a2) |
| 70 | +@inline ($){T}(a1::Number, a2::StaticArray{T}) = broadcast($, a1, a2) |
| 71 | + |
35 | 72 |
|
36 | 73 | @generated function Base.zeros{SA <: StaticArray}(::Union{SA,Type{SA}})
|
37 | 74 | s = size(SA)
|
|
0 commit comments