Skip to content

Commit

Permalink
move stray methods in base/unicode/utf32.jl to appropriate places (#1…
Browse files Browse the repository at this point in the history
  • Loading branch information
StefanKarpinski committed Jun 11, 2016
1 parent feb9117 commit 67c818a
Show file tree
Hide file tree
Showing 5 changed files with 12 additions and 26 deletions.
6 changes: 5 additions & 1 deletion base/c.jl
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,11 @@ unsafe_string(s::Cstring) = unsafe_string(convert(Ptr{UInt8}, s))
cconvert(::Type{Cstring}, s::AbstractString) = String(s)
cconvert(::Type{Cwstring}, s::AbstractString) = wstring(s)

containsnul(p::Ptr, len) = C_NULL != ccall(:memchr, Ptr{Cchar}, (Ptr{Cchar}, Cint, Csize_t), p, 0, len)
containsnul(p::Ptr, len) =
C_NULL != ccall(:memchr, Ptr{Cchar}, (Ptr{Cchar}, Cint, Csize_t), p, 0, len)
containsnul(s::String) = containsnul(unsafe_convert(Ptr{Cchar}, s), sizeof(s))
containsnul(s::AbstractString) = '\0' in s

function unsafe_convert(::Type{Cstring}, s::String)
p = unsafe_convert(Ptr{Cchar}, s)
if containsnul(p, sizeof(s))
Expand Down
3 changes: 3 additions & 0 deletions base/strings/string.jl
Original file line number Diff line number Diff line change
Expand Up @@ -228,6 +228,9 @@ end

write(io::IO, s::String) = write(io, s.data)

pointer(x::String) = pointer(x.data)
pointer(x::String, i::Integer) = pointer(x.data)+(i-1)

## transcoding to UTF-8 ##

convert(::Type{String}, s::String) = s
Expand Down
3 changes: 3 additions & 0 deletions base/strings/types.jl
Original file line number Diff line number Diff line change
Expand Up @@ -177,3 +177,6 @@ function repeat(s::String, r::Integer)
end

(^)(s::AbstractString, r::Integer) = repeat(s,r)

pointer(x::SubString{String}) = pointer(x.string.data) + x.offset
pointer(x::SubString{String}, i::Integer) = pointer(x.string.data) + x.offset + (i-1)
1 change: 0 additions & 1 deletion base/unicode.jl
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,3 @@ include("unicode/types.jl")
include("unicode/checkstring.jl")
include("unicode/utf16.jl")
include("unicode/utf32.jl")
importall .UTF8proc
25 changes: 1 addition & 24 deletions base/unicode/utf32.jl
Original file line number Diff line number Diff line change
Expand Up @@ -126,16 +126,6 @@ convert(::Type{UTF32String}, data::AbstractVector{Char}) =
convert{T<:AbstractString, S<:Union{UInt32,Char,Int32}}(::Type{T}, v::AbstractVector{S}) =
convert(T, utf32(v))

# specialize for performance reasons:
function convert{T<:Union{UInt32,Char,Int32}}(::Type{String}, data::AbstractVector{T})
s = IOBuffer(Array{UInt8}(length(data)), true, true)
truncate(s,0)
for x in data
print(s, Char(x))
end
takebuf_string(s)
end

convert(::Type{Vector{UInt32}}, str::UTF32String) = str.data
convert(::Type{Array{UInt32}}, str::UTF32String) = str.data

Expand Down Expand Up @@ -196,13 +186,6 @@ function map(f, s::UTF32String)
UTF32String(out)
end

# Definitions for C compatible strings, that don't allow embedded
# '\0', and which are terminated by a '\0'

containsnul(s::AbstractString) = '\0' in s
containsnul(s::String) = containsnul(unsafe_convert(Ptr{Cchar}, s), sizeof(s))
containsnul(s::Union{UTF16String,UTF32String}) = findfirst(s.data, 0) != length(s.data)

if sizeof(Cwchar_t) == 2
const WString = UTF16String
const wstring = utf16
Expand All @@ -221,13 +204,7 @@ function unsafe_convert(::Type{Cwstring}, s::WString)
return Cwstring(unsafe_convert(Ptr{Cwchar_t}, s))
end

# pointer conversions of ASCII/UTF8/UTF16/UTF32 strings:
pointer(x::Union{String,UTF16String,UTF32String}) = pointer(x.data)
pointer(x::String, i::Integer) = pointer(x.data)+(i-1)
pointer(x::Union{UTF16String,UTF32String}) = pointer(x.data)
pointer(x::Union{UTF16String,UTF32String}, i::Integer) = pointer(x)+(i-1)*sizeof(eltype(x.data))

# pointer conversions of SubString of ASCII/UTF8/UTF16/UTF32:
pointer(x::SubString{String}) = pointer(x.string.data) + x.offset
pointer(x::SubString{String}, i::Integer) = pointer(x.string.data) + x.offset + (i-1)
pointer{T<:Union{UTF16String,UTF32String}}(x::SubString{T}) = pointer(x.string.data) + x.offset*sizeof(eltype(x.string.data))
pointer{T<:Union{UTF16String,UTF32String}}(x::SubString{T}, i::Integer) = pointer(x.string.data) + (x.offset + (i-1))*sizeof(eltype(x.string.data))

0 comments on commit 67c818a

Please sign in to comment.