Skip to content

Commit 3f51323

Browse files
Efficient copying uc/first & lc/first for ASCIIStrings.
1 parent afca4d9 commit 3f51323

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed

j/ascii.j

+50
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,56 @@ prevind(s::ASCIIString, i::Int) = i-1
1515
strcat(a::ASCIIString, b::ASCIIString, c::ASCIIString...) = ASCIIString(memcat(a,b,c...))
1616
ref(s::ASCIIString, r::Range1{Index}) = ASCIIString(ref(s.data,r))
1717

18+
function ucfirst(s::ASCIIString)
19+
if 'a' <= s[1] <= 'z'
20+
t = strcpy(s)
21+
t.data[1] -= 32
22+
return t
23+
end
24+
return s
25+
end
26+
function lcfirst(s::ASCIIString)
27+
if 'A' <= s[1] <= 'Z'
28+
t = strcpy(s)
29+
t.data[1] += 32
30+
return t
31+
end
32+
return s
33+
end
34+
35+
function uc(s::ASCIIString)
36+
for i = 1:length(s)
37+
if 'a' <= s[i] <= 'z'
38+
t = strcpy(s)
39+
t.data[i] -= 32
40+
while i <= length(t)
41+
if 'a' <= t[i] <= 'z'
42+
t.data[i] -= 32
43+
end
44+
i += 1
45+
end
46+
return t
47+
end
48+
end
49+
return s
50+
end
51+
function lc(s::ASCIIString)
52+
for i = 1:length(s)
53+
if 'A' <= s[i] <= 'Z'
54+
t = strcpy(s)
55+
t.data[i] += 32
56+
while i <= length(t)
57+
if 'A' <= t[i] <= 'Z'
58+
t.data[i] += 32
59+
end
60+
i += 1
61+
end
62+
return t
63+
end
64+
end
65+
return s
66+
end
67+
1868
## outputing ASCII strings ##
1969

2070
print(s::ASCIIString) = print(s.data)

0 commit comments

Comments
 (0)