aboutsummaryrefslogtreecommitdiff
path: root/src/string_immutable.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/string_immutable.zig')
-rw-r--r--src/string_immutable.zig10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/string_immutable.zig b/src/string_immutable.zig
index bc0b59ea0..f44afdce6 100644
--- a/src/string_immutable.zig
+++ b/src/string_immutable.zig
@@ -224,6 +224,16 @@ pub fn indexOfSigned(self: string, str: string) i32 {
}
pub inline fn lastIndexOfChar(self: string, char: u8) ?usize {
+ if (comptime Environment.isLinux) {
+ const memrchr = struct {
+ pub extern fn memrchr(ptr: [*]const u8, val: c_int, len: usize) ?[*]const u8;
+ }.memrchr;
+ const start = memrchr(self.ptr, char, self.len) orelse return null;
+ const i = @ptrToInt(start) - @ptrToInt(self.ptr);
+ std.debug.assert(i < self.len);
+ return @intCast(usize, i);
+ }
+
return std.mem.lastIndexOfScalar(u8, self, char);
}