@@ -160,22 +160,23 @@ maxmultiplemix(k::Uint64) = k >> 32 == 0 ? uint64(maxmultiple(itrunc(Uint32, k))
160
160
immutable RandIntGen{T<: Integer , U<: Unsigned }
161
161
k:: U # range length
162
162
u:: U # rejection threshold
163
- end
164
- # generators with 32, 128 bits entropy
165
- RandIntGen {U<:Union(Uint32, Uint128)} (T:: Type , k:: U ) = RandIntGen {T, U} (k, maxmultiple (k))
166
- # mixed 32/64 bits entropy generator
167
- RandIntGen (T:: Type , k:: Uint64 ) = RandIntGen {T,Uint64} (k, maxmultiplemix (k))
168
163
164
+ function RandIntGen (k:: U )
165
+ @assert U in (Uint32, Uint64, Uint128) # respectively 32, mixed 32/64 and 128 bits of entropy
166
+ k < 1 && error (" No integers in the range [1, $k ]. Did you try to pick an element from a empty collection?" )
167
+ new (k, U == Uint64 ? maxmultiplemix (k) : maxmultiple (k))
168
+ end
169
+ end
169
170
170
171
# generator API
171
172
# randintgen(k) returns a helper object for generating random integers in the range 1:k
172
- randintgen {T<:Unsigned} (k:: T ) = k < 1 ? error ( " range must be non-empty " ) : RandIntGen ( T, k)
173
+ randintgen {T<:Unsigned} (k:: T ) = RandIntGen { T, T} ( k)
173
174
# specialized versions
174
175
for (T, U) in [(Uint8, Uint32), (Uint16, Uint32),
175
176
(Int8, Uint32), (Int16, Uint32), (Int32, Uint32), (Int64, Uint64), (Int128, Uint128),
176
177
(Bool, Uint32), (Char, Uint32)]
177
178
178
- @eval randintgen (k:: $T ) = k < 1 ? error ( " range must be non-empty " ) : RandIntGen ( $ T, convert ($ U, k))
179
+ @eval randintgen (k:: $T ) = RandIntGen { $T,$U} ( convert ($ U, k))
179
180
end
180
181
181
182
@inline function rand_lessthan {U} (u:: U )
0 commit comments