mirror of
https://github.com/uutils/sed.git
synced 2026-06-10 16:14:15 -07:00
Use memchr to speed up line splitting
This improves performance up to 1.5 times, with no downside.
no-op-short rust-sed is similarly fast as rust-sed-f0
access-log-no-op rust-sed is 1.5 times faster than rust-sed-f0
access-log-no-subst rust-sed is similarly fast as rust-sed-f0
access-log-subst rust-sed is similarly fast as rust-sed-f0
access-log-no-del rust-sed is 1.1 times faster than rust-sed-f0
access-log-all-del rust-sed is similarly fast as rust-sed-f0
access-log-translit rust-sed is 1.2 times faster than rust-sed-f0
access-log-complex-sub rust-sed is similarly fast as rust-sed-f0
remove-cr rust-sed is similarly fast as rust-sed-f0
genome-subst rust-sed is similarly fast as rust-sed-f0
number-fix rust-sed is 1.1 times faster than rust-sed-f0
long-script rust-sed is similarly fast as rust-sed-f0
hanoi rust-sed is similarly fast as rust-sed-f0
factorial rust-sed is similarly fast as rust-sed-f0
This commit is contained in:
Generated
+2
@@ -703,6 +703,7 @@ dependencies = [
|
||||
"ctor",
|
||||
"fancy-regex",
|
||||
"libc",
|
||||
"memchr",
|
||||
"memmap2",
|
||||
"phf",
|
||||
"phf_codegen",
|
||||
@@ -896,6 +897,7 @@ version = "0.0.1"
|
||||
dependencies = [
|
||||
"clap",
|
||||
"fancy-regex",
|
||||
"memchr",
|
||||
"memmap2",
|
||||
"regex",
|
||||
"tempfile",
|
||||
|
||||
@@ -38,6 +38,7 @@ clap_complete = "4.5"
|
||||
clap_mangen = "0.2"
|
||||
fancy-regex = "0.14.0"
|
||||
libc = "0.2.153"
|
||||
memchr = "2.7.4"
|
||||
memmap2 = "0.9"
|
||||
phf = "0.11.2"
|
||||
phf_codegen = "0.11.2"
|
||||
@@ -56,6 +57,7 @@ clap_complete = { workspace = true }
|
||||
clap_mangen = { workspace = true }
|
||||
ctor = "0.4.1"
|
||||
fancy-regex = { workspace = true }
|
||||
memchr = { workspace = true }
|
||||
memmap2.workspace = true
|
||||
phf = { workspace = true }
|
||||
sed = { optional = true, version = "0.0.1", package = "uu_sed", path = "src/uu/sed" }
|
||||
|
||||
@@ -15,6 +15,7 @@ categories = ["command-line-utilities"]
|
||||
[dependencies]
|
||||
clap = { workspace = true }
|
||||
fancy-regex = { workspace = true }
|
||||
memchr = { workspace = true }
|
||||
regex = { workspace = true }
|
||||
tempfile = { workspace = true }
|
||||
memmap2 = { workspace = true }
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
// For the full copyright and license information, please view the LICENSE
|
||||
// file that was distributed with this source code.
|
||||
|
||||
use memchr::memchr;
|
||||
#[cfg(unix)]
|
||||
use memmap2::Mmap;
|
||||
|
||||
@@ -69,10 +70,12 @@ impl<'a> MmapLineCursor<'a> {
|
||||
}
|
||||
|
||||
let start = self.pos;
|
||||
let mut end = start;
|
||||
while end < self.data.len() && self.data[end] != b'\n' {
|
||||
end += 1;
|
||||
}
|
||||
|
||||
let mut end = if let Some(pos) = memchr(b'\n', &self.data[start..]) {
|
||||
pos + start
|
||||
} else {
|
||||
self.data.len()
|
||||
};
|
||||
|
||||
if end < self.data.len() {
|
||||
end += 1; // include \n in full span
|
||||
|
||||
Reference in New Issue
Block a user