@@ -9,21 +9,21 @@ export RSigned, RUnsigned, RInteger
9
9
export RInt8, RUInt8, RInt16, RUInt16, RInt32, RUInt32, RInt64, RUInt64,
10
10
RInt128, RUInt128, RInt, RUInt
11
11
12
- @compat abstract type RSigned <: Signed end
13
- @compat abstract type RUnsigned <: Unsigned end
12
+ abstract type RSigned <: Signed end
13
+ abstract type RUnsigned <: Unsigned end
14
14
15
15
const RInteger = Union{RSigned,RUnsigned}
16
16
17
- @compat primitive type RInt8 <: RSigned 8 end
18
- @compat primitive type RUInt8 <: RUnsigned 8 end
19
- @compat primitive type RInt16 <: RSigned 16 end
20
- @compat primitive type RUInt16 <: RUnsigned 16 end
21
- @compat primitive type RInt32 <: RSigned 32 end
22
- @compat primitive type RUInt32 <: RUnsigned 32 end
23
- @compat primitive type RInt64 <: RSigned 64 end
24
- @compat primitive type RUInt64 <: RUnsigned 64 end
25
- @compat primitive type RInt128 <: RSigned 128 end
26
- @compat primitive type RUInt128 <: RUnsigned 128 end
17
+ primitive type RInt8 <: RSigned 8 end
18
+ primitive type RUInt8 <: RUnsigned 8 end
19
+ primitive type RInt16 <: RSigned 16 end
20
+ primitive type RUInt16 <: RUnsigned 16 end
21
+ primitive type RInt32 <: RSigned 32 end
22
+ primitive type RUInt32 <: RUnsigned 32 end
23
+ primitive type RInt64 <: RSigned 64 end
24
+ primitive type RUInt64 <: RUnsigned 64 end
25
+ primitive type RInt128 <: RSigned 128 end
26
+ primitive type RUInt128 <: RUnsigned 128 end
27
27
28
28
if Sys. WORD_SIZE == 32
29
29
const RInt = RInt32
@@ -65,67 +65,67 @@ rtype(x::Union{Signed,Unsigned}) = rtype(typeof(x))
65
65
# RIntegers are largely about assignment; for usage, we convert to
66
66
# standard integers at the drop of a hat.
67
67
68
- Base. promote_rule {T<:Number,RI<:RInteger} (:: Type{T} , :: Type{RI} ) =
68
+ Base. promote_rule (:: Type{T} , :: Type{RI} ) where {T <: Number ,RI <: RInteger } =
69
69
promote_type (T, itype (RI))
70
70
# Resolve ambiguities
71
- Base. promote_rule {RI<:RInteger} (:: Type{Bool} , :: Type{RI} ) =
71
+ Base. promote_rule (:: Type{Bool} , :: Type{RI} ) where {RI <: RInteger } =
72
72
promote_type (Bool, itype (RI))
73
- Base. promote_rule {RI<:RInteger} (:: Type{BigInt} , :: Type{RI} ) =
73
+ Base. promote_rule (:: Type{BigInt} , :: Type{RI} ) where {RI <: RInteger } =
74
74
promote_type (BigInt, itype (RI))
75
- Base. promote_rule {RI<:RInteger} (:: Type{BigFloat} , :: Type{RI} ) =
75
+ Base. promote_rule (:: Type{BigFloat} , :: Type{RI} ) where {RI <: RInteger } =
76
76
promote_type (BigFloat, itype (RI))
77
- Base. promote_rule {T<:Real,RI<:RInteger} (:: Type{Complex{T}} , :: Type{RI} ) =
77
+ Base. promote_rule (:: Type{Complex{T}} , :: Type{RI} ) where {T <: Real ,RI <: RInteger } =
78
78
promote_type (Complex{T}, itype (RI))
79
- Base. promote_rule {T<:Integer,RI<:RInteger} (:: Type{Rational{T}} , :: Type{RI} ) =
79
+ Base. promote_rule (:: Type{Rational{T}} , :: Type{RI} ) where {T <: Integer ,RI <: RInteger } =
80
80
promote_type (Rational{T}, itype (RI))
81
- @compat Base. promote_rule {RI<:RInteger} (:: Type{<:Irrational} , :: Type{RI} ) =
81
+ Base. promote_rule (:: Type{<:Irrational} , :: Type{RI} ) where {RI <: RInteger } =
82
82
promote_type (Float64, itype (RI))
83
83
84
- ( :: Type{ Signed} ) (x:: RSigned ) = reinterpret (itype (x), x)
85
- ( :: Type{ Unsigned} ) (x:: RUnsigned ) = reinterpret (itype (x), x)
86
- ( :: Type{ RSigned} ) (x:: Signed ) = reinterpret (rtype (x), x)
87
- ( :: Type{ RUnsigned} ) (x:: Unsigned ) = reinterpret (rtype (x), x)
88
- ( :: Type{ Integer} ) (x:: RSigned ) = Signed (x)
89
- ( :: Type{ Integer} ) (x:: RUnsigned ) = Unsigned (x)
90
- ( :: Type{ RInteger} ) (x:: Signed ) = RSigned (x)
91
- ( :: Type{ RInteger} ) (x:: Unsigned ) = RUnsigned (x)
84
+ Signed (x:: RSigned ) = reinterpret (itype (x), x)
85
+ Unsigned (x:: RUnsigned ) = reinterpret (itype (x), x)
86
+ RSigned (x:: Signed ) = reinterpret (rtype (x), x)
87
+ RUnsigned (x:: Unsigned ) = reinterpret (rtype (x), x)
88
+ Integer (x:: RSigned ) = Signed (x)
89
+ Integer (x:: RUnsigned ) = Unsigned (x)
90
+ RInteger (x:: Signed ) = RSigned (x)
91
+ RInteger (x:: Unsigned ) = RUnsigned (x)
92
92
93
93
# Basic conversions
94
94
# @inline Base.convert{T<:RSigned}(::Type{T}, x::T) = x
95
95
# @inline Base.convert{T<:RUnsigned}(::Type{T}, x::T) = x
96
- @inline Base. convert {T<:RInteger} (:: Type{T} , x:: T ) = x
97
- @inline Base. convert {T<:RInteger} (:: Type{T} , x:: RInteger ) =
96
+ @inline Base. convert (:: Type{T} , x:: T ) where {T <: RInteger } = x
97
+ @inline Base. convert (:: Type{T} , x:: RInteger ) where {T <: RInteger } =
98
98
RInteger (convert (itype (T), Integer (x)))
99
- @inline Base. convert {T<:RInteger} (:: Type{T} , x:: Integer ) = RInteger (convert (itype (T), x))
100
- @inline Base. convert {T<:RInteger} (:: Type{T} , x:: AbstractFloat ) =
99
+ @inline Base. convert (:: Type{T} , x:: Integer ) where {T <: RInteger } = RInteger (convert (itype (T), x))
100
+ @inline Base. convert (:: Type{T} , x:: AbstractFloat ) where {T <: RInteger } =
101
101
RInteger (round (itype (T), x))
102
- @inline Base. convert {T<:RInteger} (:: Type{T} , x:: Number ) =
102
+ @inline Base. convert (:: Type{T} , x:: Number ) where {T <: RInteger } =
103
103
convert (T, convert (itype (T), x))
104
104
105
- @inline Base. convert {T<:Number} (:: Type{T} , x:: RInteger ) = convert (T, Integer (x))
105
+ @inline Base. convert (:: Type{T} , x:: RInteger ) where {T <: Number } = convert (T, Integer (x))
106
106
107
107
# Resolve ambiguities
108
108
Base. convert (:: Type{Integer} , x:: RInteger ) = Integer (x)
109
109
Base. convert (:: Type{BigInt} , x:: RInteger ) = convert (BigInt, Integer (x))
110
- Base. convert {T<:RInteger} (:: Type{T} , x:: BigInt ) = RInteger (convert (itype (T), x))
110
+ Base. convert (:: Type{T} , x:: BigInt ) where {T <: RInteger } = RInteger (convert (itype (T), x))
111
111
Base. convert (:: Type{BigFloat} , x:: RInteger ) = convert (BigFloat, Integer (x))
112
- Base. convert {T<:RInteger} (:: Type{T} , x:: BigFloat ) = RInteger (convert (itype (T), x))
113
- Base. convert {T<:Real} (:: Type{Complex{T}} , x:: RInteger ) = convert (Complex{T}, Integer (x))
114
- Base. convert {T<:RInteger} (:: Type{T} , z:: Complex ) = RInteger (convert (itype (T), z))
112
+ Base. convert (:: Type{T} , x:: BigFloat ) where {T <: RInteger } = RInteger (convert (itype (T), x))
113
+ Base. convert (:: Type{Complex{T}} , x:: RInteger ) where {T <: Real } = convert (Complex{T}, Integer (x))
114
+ Base. convert (:: Type{T} , z:: Complex ) where {T <: RInteger } = RInteger (convert (itype (T), z))
115
115
Base. convert (:: Type{Complex} , x:: RInteger ) = Complex (x)
116
- Base. convert {T<:RInteger} (:: Type{T} , x:: Rational ) = RInteger (convert (itype (T)), x)
117
- Base. convert {T<:Integer} (:: Type{Rational{T}} , x:: RInteger ) =
116
+ Base. convert (:: Type{T} , x:: Rational ) where {T <: RInteger } = RInteger (convert (itype (T)), x)
117
+ Base. convert (:: Type{Rational{T}} , x:: RInteger ) where {T <: Integer } =
118
118
convert (Rational{T}, Integer (x))
119
119
Base. convert (:: Type{Rational} , x:: RInteger ) = convert (Rational{typeof (x)}, x)
120
120
Base. convert (:: Type{Float16} , x:: RInteger ) = convert (Float16, Integer (x))
121
- Base. convert {T<:RInteger} (:: Type{T} , x:: Float16 ) = RInteger (convert (itype (T), x))
121
+ Base. convert (:: Type{T} , x:: Float16 ) where {T <: RInteger } = RInteger (convert (itype (T), x))
122
122
Base. convert (:: Type{Bool} , x:: RInteger ) = convert (Bool, Integer (x))
123
123
124
124
# rem conversions
125
- @inline Base. rem {T<:RInteger} (x:: T , :: Type{T} ) = T
126
- @inline Base. rem {T<:RInteger} (x:: Integer , :: Type{T} ) = RInteger (rem (x, itype (T)))
125
+ @inline Base. rem (x:: T , :: Type{T} ) where {T <: RInteger } = T
126
+ @inline Base. rem (x:: Integer , :: Type{T} ) where {T <: RInteger } = RInteger (rem (x, itype (T)))
127
127
# ambs
128
- @inline Base. rem {T<:RInteger} (x:: BigInt , :: Type{T} ) = error (" no rounding BigInt available" )
128
+ @inline Base. rem (x:: BigInt , :: Type{T} ) where {T <: RInteger } = error (" no rounding BigInt available" )
129
129
130
130
131
131
Base. flipsign (x:: RSigned , y:: RSigned ) = RInteger (flipsign (Integer (x), Integer (y)))
@@ -153,23 +153,23 @@ Base.ndigits0z(x::RInteger) = Base.ndigits0z(Integer(x))
153
153
>>> (x:: RInteger , y:: Int ) = RInteger (Integer (x) >>> y)
154
154
<< (x:: RInteger , y:: Int ) = RInteger (Integer (x) << y)
155
155
156
- + {T <: RInteger } (x:: T , y:: T ) = RInteger (Integer (x) + Integer (y))
157
- - {T <: RInteger } (x:: T , y:: T ) = RInteger (Integer (x) - Integer (y))
158
- * {T <: RInteger } (x:: T , y:: T ) = RInteger (Integer (x) * Integer (y))
159
- (& ){T <: RInteger } (x:: T , y:: T ) = RInteger (Integer (x) & Integer (y))
160
- (| ){T <: RInteger } (x:: T , y:: T ) = RInteger (Integer (x) | Integer (y))
156
+ + (x:: T , y:: T ) where {T <: RInteger } = RInteger (Integer (x) + Integer (y))
157
+ - (x:: T , y:: T ) where {T <: RInteger } = RInteger (Integer (x) - Integer (y))
158
+ * (x:: T , y:: T ) where {T <: RInteger } = RInteger (Integer (x) * Integer (y))
159
+ (& )(x:: T , y:: T ) where {T <: RInteger } = RInteger (Integer (x) & Integer (y))
160
+ (| )(x:: T , y:: T ) where {T <: RInteger } = RInteger (Integer (x) | Integer (y))
161
161
# ($){T<:RInteger}(x::T, y::T) = RInteger(Integer(x) $ Integer(y))
162
- Compat. xor {T<:RInteger} (x:: T , y:: T ) = RInteger (xor (Integer (x), Integer (y)))
162
+ Compat. xor (x:: T , y:: T ) where {T <: RInteger } = RInteger (xor (Integer (x), Integer (y)))
163
163
164
- Base. rem {T<:RInteger} (x:: T , y:: T ) = RInteger (rem (Integer (x), Integer (y)))
165
- Base. mod {T<:RInteger} (x:: T , y:: T ) = RInteger (mod (Integer (x), Integer (y)))
164
+ Base. rem (x:: T , y:: T ) where {T <: RInteger } = RInteger (rem (Integer (x), Integer (y)))
165
+ Base. mod (x:: T , y:: T ) where {T <: RInteger } = RInteger (mod (Integer (x), Integer (y)))
166
166
167
167
Base. unsigned (x:: RSigned ) = RInteger (unsigned (Integer (x)))
168
168
Base. signed (x:: RSigned ) = RInteger (signed (Integer (x)))
169
169
170
170
# traits
171
- Base. typemin {T<:RInteger} (:: Type{T} ) = RInteger (typemin (itype (T)))
172
- Base. typemax {T<:RInteger} (:: Type{T} ) = RInteger (typemax (itype (T)))
173
- Base. widen {T<:RInteger} (:: Type{T} ) = rtype (widen (itype (T)))
171
+ Base. typemin (:: Type{T} ) where {T <: RInteger } = RInteger (typemin (itype (T)))
172
+ Base. typemax (:: Type{T} ) where {T <: RInteger } = RInteger (typemax (itype (T)))
173
+ Base. widen (:: Type{T} ) where {T <: RInteger } = rtype (widen (itype (T)))
174
174
175
175
end # module
0 commit comments