Skip to content

Commit bc3447d

Browse files
committed
Switch Zero and One to from instances to types
1 parent d973c64 commit bc3447d

File tree

1 file changed

+25
-25
lines changed

1 file changed

+25
-25
lines changed

src/static.jl

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ struct Static{N} <: Integer
77
Static{N}() where {N} = new{N::Int}()
88
end
99

10-
const Zero = Static{0}()
11-
const One = Static{1}()
10+
const Zero = Static{0}
11+
const One = Static{1}
1212

1313
Base.@pure Static(N::Int) = Static{N}()
1414
Static(N::Integer) = Static(convert(Int, N))
@@ -38,43 +38,43 @@ Base.promote_rule(::Type{<:Static}, ::Type{<:Static}) = Int
3838
Base.:(%)(::Static{N}, ::Type{Integer}) where {N} = N
3939

4040
Base.eltype(::Type{T}) where {T<:Static} = Int
41-
Base.iszero(::Static{0}) = true
41+
Base.iszero(::Zero) = true
4242
Base.iszero(::Static) = false
43-
Base.isone(::Static{1}) = true
43+
Base.isone(::One) = true
4444
Base.isone(::Static) = false
45-
Base.zero(::Type{T}) where {T<:Static} = Zero
46-
Base.one(::Type{T}) where {T<:Static} = One
45+
Base.zero(::Type{T}) where {T<:Static} = Zero()
46+
Base.one(::Type{T}) where {T<:Static} = One()
4747

4848
for T = [:Real, :Rational, :Integer]
4949
@eval begin
50-
@inline Base.:(+)(i::$T, ::Static{0}) = i
50+
@inline Base.:(+)(i::$T, ::Zero) = i
5151
@inline Base.:(+)(i::$T, ::Static{M}) where {M} = i + M
52-
@inline Base.:(+)(::Static{0}, i::$T) = i
52+
@inline Base.:(+)(::Zero, i::$T) = i
5353
@inline Base.:(+)(::Static{M}, i::$T) where {M} = M + i
54-
@inline Base.:(-)(i::$T, ::Static{0}) = i
54+
@inline Base.:(-)(i::$T, ::Zero) = i
5555
@inline Base.:(-)(i::$T, ::Static{M}) where {M} = i - M
56-
@inline Base.:(*)(i::$T, ::Static{0}) = Static{0}()
57-
@inline Base.:(*)(i::$T, ::Static{1}) = i
56+
@inline Base.:(*)(i::$T, ::Zero) = Zero()
57+
@inline Base.:(*)(i::$T, ::One) = i
5858
@inline Base.:(*)(i::$T, ::Static{M}) where {M} = i * M
59-
@inline Base.:(*)(::Static{0}, i::$T) = Static{0}()
60-
@inline Base.:(*)(::Static{1}, i::$T) = i
59+
@inline Base.:(*)(::Zero, i::$T) = Zero()
60+
@inline Base.:(*)(::One, i::$T) = i
6161
@inline Base.:(*)(::Static{M}, i::$T) where {M} = M * i
6262
end
6363
end
64-
@inline Base.:(+)(::Static{0}, ::Static{0}) = Static{0}()
65-
@inline Base.:(+)(::Static{0}, ::Static{M}) where {M} = Static{M}()
66-
@inline Base.:(+)(::Static{M}, ::Static{0}) where {M} = Static{M}()
64+
@inline Base.:(+)(::Zero, ::Zero) = Zero()
65+
@inline Base.:(+)(::Zero, ::Static{M}) where {M} = Static{M}()
66+
@inline Base.:(+)(::Static{M}, ::Zero) where {M} = Static{M}()
6767

68-
@inline Base.:(-)(::Static{M}, ::Static{0}) where {M} = Static{M}()
68+
@inline Base.:(-)(::Static{M}, ::Zero) where {M} = Static{M}()
6969

70-
@inline Base.:(*)(::Static{0}, ::Static{0}) = Static{0}()
71-
@inline Base.:(*)(::Static{1}, ::Static{0}) = Static{0}()
72-
@inline Base.:(*)(::Static{0}, ::Static{1}) = Static{0}()
73-
@inline Base.:(*)(::Static{1}, ::Static{1}) = Static{1}()
74-
@inline Base.:(*)(::Static{M}, ::Static{0}) where {M} = Static{0}()
75-
@inline Base.:(*)(::Static{0}, ::Static{M}) where {M} = Static{0}()
76-
@inline Base.:(*)(::Static{M}, ::Static{1}) where {M} = Static{M}()
77-
@inline Base.:(*)(::Static{1}, ::Static{M}) where {M} = Static{M}()
70+
@inline Base.:(*)(::Zero, ::Zero) = Zero()
71+
@inline Base.:(*)(::One, ::Zero) = Zero()
72+
@inline Base.:(*)(::Zero, ::One) = Zero()
73+
@inline Base.:(*)(::One, ::One) = One()
74+
@inline Base.:(*)(::Static{M}, ::Zero) where {M} = Zero()
75+
@inline Base.:(*)(::Zero, ::Static{M}) where {M} = Zero()
76+
@inline Base.:(*)(::Static{M}, ::One) where {M} = Static{M}()
77+
@inline Base.:(*)(::One, ::Static{M}) where {M} = Static{M}()
7878
for f [:(+), :(-), :(*), :(/), :(÷), :(%), :(<<), :(>>), :(>>>), :(&), :(|), :()]
7979
@eval @generated Base.$f(::Static{M}, ::Static{N}) where {M,N} = Expr(:call, Expr(:curly, :Static, $f(M, N)))
8080
end

0 commit comments

Comments
 (0)