From f410620cfc767a7424c72f0ca6d8d01db5d23e6d Mon Sep 17 00:00:00 2001 From: Scott Paul Jones Date: Wed, 6 May 2015 19:51:27 -0400 Subject: [PATCH] Simplyfy and improve performance of rand(Char) --- base/random.jl | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/base/random.jl b/base/random.jl index 6fdccb8c17a5f..aab193207d6e5 100644 --- a/base/random.jl +++ b/base/random.jl @@ -253,14 +253,10 @@ rand(r::MersenneTwister, ::Type{Int128}) = reinterpret(Int128, rand(r, UInt128) rand{T<:Real}(r::AbstractRNG, ::Type{Complex{T}}) = complex(rand(r, T), rand(r, T)) # random Char values -# use simple rejection sampling over valid Char codepoint range +# returns a random valid Unicode scalar value (i.e. 0 - 0xd7ff, 0xe000 - # 0x10ffff) function rand(r::AbstractRNG, ::Type{Char}) - while true - c = rand(0x00000000:0x0010fffd) - if is_valid_char(c) - return reinterpret(Char,c) - end - end + c = rand(0x00000000:0x0010f7ff) + (c < 0xd800) ? Char(c) : Char(c+0x800) end ## Arrays of random numbers