@@ -7,8 +7,8 @@ struct Static{N} <: Integer
7
7
Static {N} () where {N} = new {N::Int} ()
8
8
end
9
9
10
- const Zero = Static {0} ()
11
- const One = Static {1} ()
10
+ const Zero = Static{0 }
11
+ const One = Static{1 }
12
12
13
13
Base. @pure Static (N:: Int ) = Static {N} ()
14
14
Static (N:: Integer ) = Static (convert (Int, N))
@@ -38,43 +38,43 @@ Base.promote_rule(::Type{<:Static}, ::Type{<:Static}) = Int
38
38
Base.:(% )(:: Static{N} , :: Type{Integer} ) where {N} = N
39
39
40
40
Base. eltype (:: Type{T} ) where {T<: Static } = Int
41
- Base. iszero (:: Static{0} ) = true
41
+ Base. iszero (:: Zero ) = true
42
42
Base. iszero (:: Static ) = false
43
- Base. isone (:: Static{1} ) = true
43
+ Base. isone (:: One ) = true
44
44
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 ()
47
47
48
48
for T = [:Real , :Rational , :Integer ]
49
49
@eval begin
50
- @inline Base.:(+ )(i:: $T , :: Static{0} ) = i
50
+ @inline Base.:(+ )(i:: $T , :: Zero ) = i
51
51
@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
53
53
@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
55
55
@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
58
58
@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
61
61
@inline Base.:(* )(:: Static{M} , i:: $T ) where {M} = M * i
62
62
end
63
63
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} ()
67
67
68
- @inline Base.:(- )(:: Static{M} , :: Static{0} ) where {M} = Static {M} ()
68
+ @inline Base.:(- )(:: Static{M} , :: Zero ) where {M} = Static {M} ()
69
69
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} ()
78
78
for f ∈ [:(+ ), :(- ), :(* ), :(/ ), :(÷ ), :(% ), :(<< ), :(>> ), :(>>> ), :(& ), :(| ), :(⊻ )]
79
79
@eval @generated Base.$ f (:: Static{M} , :: Static{N} ) where {M,N} = Expr (:call , Expr (:curly , :Static , $ f (M, N)))
80
80
end
0 commit comments