Skip to content

Commit 6083be5

Browse files
committed
join, is_absolute: correct/streamline
1 parent 2a18431 commit 6083be5

File tree

4 files changed

+50
-20
lines changed

4 files changed

+50
-20
lines changed

+stdlib/is_absolute.m

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
% on non-Windows, absolute paths must start with a slash
44

55

6-
function isabs = is_absolute(p, use_java)
6+
function y = is_absolute(p, use_java)
77
arguments
88
p (1,1) string
99
use_java (1,1) logical = false
@@ -14,34 +14,39 @@
1414
if use_java
1515
% java is about 5x to 10x slower than intrinsic
1616
% https://docs.oracle.com/en/java/javase/22/docs/api/java.base/java/io/File.html#isAbsolute()
17-
isabs = javaFileObject(p).toPath().isAbsolute();
17+
y = javaFileObject(p).isAbsolute();
1818

1919
else
20+
y = false;
21+
L = stdlib.len(p);
22+
if ~L || (ispc && L < 3)
23+
return
24+
end
2025

21-
L = strlength(p);
2226
if ispc
23-
s = "";
24-
if L > 2
27+
if ischar(p)
28+
s = p(3); %#ok<UNRCH>
29+
else
2530
s = extractBetween(p, 3, 3);
2631
end
27-
isabs = L > 2 && strlength(stdlib.root_name(p)) && (strcmp(s, '/') || strcmp(s, '\'));
32+
y = stdlib.len(stdlib.root_name(p)) && (strcmp(s, '/') || strcmp(s, '\'));
2833
else
29-
isabs = L >= 1 && startsWith(p, "/");
34+
y = strncmp(p, "/", 1);
3035
end
3136

3237
end
3338

3439
end
3540

36-
%!assert(is_absolute(''), false)
41+
%!assert(is_absolute('',0), false)
3742
%!test
3843
%! if ispc
39-
%! assert(is_absolute('C:\'))
40-
%! assert(is_absolute('C:/'))
41-
%! assert(!is_absolute('C:'))
42-
%! assert(!is_absolute('C'))
44+
%! assert(is_absolute('C:\', 0))
45+
%! assert(is_absolute('C:/', 0))
46+
%! assert(!is_absolute('C:', 0))
47+
%! assert(!is_absolute('C', 0))
4348
%! else
44-
%! assert(is_absolute('/'))
45-
%! assert(is_absolute('/usr'))
46-
%! assert(!is_absolute('usr'))
49+
%! assert(is_absolute('/',0))
50+
%! assert(is_absolute('/usr',0))
51+
%! assert(!is_absolute('usr',0))
4752
%! endif

+stdlib/join.m

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,15 @@
88
end
99

1010

11-
b = stdlib.drop_slash(base);
12-
o = stdlib.drop_slash(other);
13-
1411
if use_java
15-
r = javaFileObject(b).toPath().resolve(o);
12+
r = javaFileObject(base).toPath().resolve(other);
1613
p = jPosix(r);
1714
else
1815

19-
if startsWith(o, "/") || (ispc && stdlib.is_absolute(o))
16+
b = stdlib.drop_slash(base);
17+
o = stdlib.drop_slash(other);
18+
19+
if startsWith(o, "/") || (ispc && stdlib.is_absolute(o, false))
2020
p = o;
2121
return
2222
end

example/bench_is_absolute.m

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
a1 = "c:/a/";
2+
3+
fno = @() stdlib.is_absolute(a1, false);
4+
fjava = @() stdlib.is_absolute(a1, true);
5+
6+
t_no = timeit(fno);
7+
t_java = timeit(fjava);
8+
9+
disp("No Java: " + t_no + " s")
10+
disp("Java: " + t_java + " s")
11+
12+
disp("Java is " + t_no/t_java + " times faster")

example/bench_join.m

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
a1 = "a/";
2+
b1 = "b/c";
3+
4+
fno = @() stdlib.join(a1, b1, false);
5+
fjava = @() stdlib.join(a1, b1, true);
6+
7+
t_no = timeit(fno);
8+
t_java = timeit(fjava);
9+
10+
disp("No Java: " + t_no + " s")
11+
disp("Java: " + t_java + " s")
12+
13+
disp("Java is " + t_no/t_java + " times faster")

0 commit comments

Comments
 (0)