Skip to content

Commit 8c5929b

Browse files
wip
1 parent 768d383 commit 8c5929b

File tree

6 files changed

+43
-36
lines changed

6 files changed

+43
-36
lines changed

base/strings/char.jl

+3
Original file line numberDiff line numberDiff line change
@@ -98,3 +98,6 @@ function show(io::IO, c::Char)
9898
end
9999
return
100100
end
101+
102+
isascii(c::Char) = c < Char(0x80)
103+
isxdigit(c::Char) = '0'<=c<='9' || 'a'<=c<='f' || 'A'<=c<='F'

base/strings/basic.jl base/strings/generic.jl

+3-34
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,6 @@ string(s::AbstractString) = s
1313
bytestring() = ""
1414
bytestring(s::Vector{UInt8}) = bytestring(pointer(s),length(s))
1515

16-
function bytestring(p::Union{Ptr{UInt8},Ptr{Int8}})
17-
p == C_NULL ? throw(ArgumentError("cannot convert NULL to string")) :
18-
ccall(:jl_cstr_to_string, Any, (Cstring,), p)::String
19-
end
20-
bytestring(s::Cstring) = bytestring(convert(Ptr{UInt8}, s))
21-
22-
function bytestring(p::Union{Ptr{UInt8},Ptr{Int8}},len::Integer)
23-
p == C_NULL ? throw(ArgumentError("cannot convert NULL to string")) :
24-
ccall(:jl_pchar_to_string, Any, (Ptr{UInt8},Int), p, len)::String
25-
end
26-
2716
convert(::Type{Vector{UInt8}}, s::AbstractString) = bytestring(s).data
2817
convert(::Type{Array{UInt8}}, s::AbstractString) = bytestring(s).data
2918
convert(::Type{String}, s::AbstractString) = bytestring(s)
@@ -52,6 +41,7 @@ eltype{T<:AbstractString}(::Type{T}) = Char
5241
(.*){T<:AbstractString}(s::AbstractString,v::Vector{T}) = [s*i for i in v]
5342

5443
length(s::DirectIndexString) = endof(s)
44+
5545
function length(s::AbstractString)
5646
i = start(s)
5747
if done(s,i)
@@ -90,14 +80,6 @@ end
9080
==(a::AbstractString, b::AbstractString) = cmp(a,b) == 0
9181
isless(a::AbstractString, b::AbstractString) = cmp(a,b) < 0
9282

93-
# faster comparisons for byte strings and symbols
94-
95-
cmp(a::String, b::String) = lexcmp(a.data, b.data)
96-
cmp(a::Symbol, b::Symbol) = Int(sign(ccall(:strcmp, Int32, (Cstring, Cstring), a, b)))
97-
98-
==(a::String, b::String) = endof(a) == endof(b) && cmp(a,b) == 0
99-
isless(a::Symbol, b::Symbol) = cmp(a,b) < 0
100-
10183
## Generic validation functions ##
10284

10385
isvalid(s::DirectIndexString, i::Integer) = (start(s) <= i <= endof(s))
@@ -115,9 +97,9 @@ end
11597
## Generic indexing functions ##
11698

11799
prevind(s::DirectIndexString, i::Integer) = i-1
118-
prevind(s::AbstractArray , i::Integer) = i-1
100+
prevind(s::AbstractArray , i::Integer) = i-1
119101
nextind(s::DirectIndexString, i::Integer) = i+1
120-
nextind(s::AbstractArray , i::Integer) = i+1
102+
nextind(s::AbstractArray , i::Integer) = i+1
121103

122104
function prevind(s::AbstractString, i::Integer)
123105
e = endof(s)
@@ -206,28 +188,15 @@ typealias ByteArray Union{Vector{UInt8},Vector{Int8}}
206188

207189
strwidth(s::AbstractString) = (w=0; for c in s; w += charwidth(c); end; w)
208190

209-
isascii(c::Char) = c < Char(0x80)
210191
isascii(s::AbstractString) = all(isascii, s)
211192

212193
## string promotion rules ##
213194

214195
promote_rule{S<:AbstractString,T<:AbstractString}(::Type{S}, ::Type{T}) = String
215196

216-
isxdigit(c::Char) = '0'<=c<='9' || 'a'<=c<='f' || 'A'<=c<='F'
217197
isxdigit(s::AbstractString) = all(isxdigit, s)
218198
need_full_hex(s::AbstractString, i::Int) = !done(s,i) && isxdigit(next(s,i)[1])
219199

220-
## checking UTF-8 & ACSII validity ##
221-
222-
byte_string_classify(data::Vector{UInt8}) =
223-
ccall(:u8_isvalid, Int32, (Ptr{UInt8}, Int), data, length(data))
224-
byte_string_classify(s::String) = byte_string_classify(s.data)
225-
# 0: neither valid ASCII nor UTF-8
226-
# 1: valid ASCII
227-
# 2: valid UTF-8
228-
229-
isvalid(::Type{String}, s::Union{Vector{UInt8},String}) = byte_string_classify(s) != 0
230-
231200
## uppercase and lowercase transformations ##
232201
uppercase(s::AbstractString) = map(uppercase, s)
233202
lowercase(s::AbstractString) = map(lowercase, s)

base/strings/string.jl

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# This file is a part of Julia. License is MIT: http://julialang.org/license
2+
3+
function bytestring(p::Union{Ptr{UInt8},Ptr{Int8}})
4+
p == C_NULL ? throw(ArgumentError("cannot convert NULL to string")) :
5+
ccall(:jl_cstr_to_string, Any, (Cstring,), p)::String
6+
end
7+
bytestring(s::Cstring) = bytestring(convert(Ptr{UInt8}, s))
8+
9+
function bytestring(p::Union{Ptr{UInt8},Ptr{Int8}},len::Integer)
10+
p == C_NULL ? throw(ArgumentError("cannot convert NULL to string")) :
11+
ccall(:jl_pchar_to_string, Any, (Ptr{UInt8},Int), p, len)::String
12+
end
13+
14+
cmp(a::String, b::String) = lexcmp(a.data, b.data)
15+
==(a::String, b::String) = endof(a) == endof(b) && cmp(a,b) == 0
16+
17+
## checking UTF-8 & ACSII validity ##
18+
19+
isvalid(::Type{String}, s::Union{Vector{UInt8},String}) = byte_string_classify(s) != 0
20+
21+
byte_string_classify(data::Vector{UInt8}) =
22+
ccall(:u8_isvalid, Int32, (Ptr{UInt8}, Int), data, length(data))
23+
byte_string_classify(s::String) = byte_string_classify(s.data)
24+
# 0: neither valid ASCII nor UTF-8
25+
# 1: valid ASCII
26+
# 2: valid UTF-8
27+

base/strings/symbol.jl

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# This file is a part of Julia. License is MIT: http://julialang.org/license
2+
3+
cmp(a::Symbol, b::Symbol) = Int(sign(ccall(:strcmp, Int32, (Cstring, Cstring), a, b)))
4+
isless(a::Symbol, b::Symbol) = cmp(a,b) < 0
5+

base/sysimg.jl

+4-1
Original file line numberDiff line numberDiff line change
@@ -121,10 +121,13 @@ include("iobuffer.jl")
121121
include("strings/char.jl")
122122
include("strings/ascii.jl")
123123
include("strings/types.jl")
124-
include("strings/basic.jl")
124+
include("strings/string.jl")
125+
include("strings/generic.jl")
126+
include("strings/symbol.jl")
125127
include("strings/search.jl")
126128
include("strings/util.jl")
127129
include("strings/io.jl")
130+
128131
include("unicode/UnicodeError.jl")
129132
include("unicode/checkstring.jl")
130133
include("unicode/utf8.jl")

test/runtests.jl

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ end
1313
cd(dirname(@__FILE__)) do
1414
n = 1
1515
if net_on
16-
n = min(8, CPU_CORES, length(tests))
16+
n = min(1, CPU_CORES, length(tests))
1717
n > 1 && addprocs(n; exeflags=`--check-bounds=yes --depwarn=error`)
1818
blas_set_num_threads(1)
1919
end

0 commit comments

Comments
 (0)