Skip to content

Commit fb60d4e

Browse files
committed
Add new feature simdutf8
Using simdutf8 is usually 4-11 times faster than Rust stdlib implementation. This is alternative when unsafe-str-decode is too risky to use.
1 parent a74ad8c commit fb60d4e

File tree

3 files changed

+8
-0
lines changed

3 files changed

+8
-0
lines changed

Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ edition = "2021"
1515

1616
[features]
1717
default = []
18+
simdutf8 = ["dep:simdutf8"]
1819
mmap = ["memmap2"]
1920
unsafe-str-decode = []
2021

@@ -28,6 +29,7 @@ log = "0.4"
2829
serde = { version = "1.0", features = ["derive"] }
2930
memchr = "2.4"
3031
memmap2 = { version = "0.9.0", optional = true }
32+
simdutf8 = { version = "0.1.5", optional = true }
3133

3234
[dev-dependencies]
3335
env_logger = "0.11"

src/maxminddb/decoder.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,9 @@ impl<'de> Decoder<'de> {
328328

329329
#[cfg(not(feature = "unsafe-str-decode"))]
330330
fn decode_string(&mut self, size: usize) -> DecodeResult<&'de str> {
331+
#[cfg(feature = "simdutf8")]
332+
use simdutf8::basic::from_utf8;
333+
#[cfg(not(feature = "simdutf8"))]
331334
use std::str::from_utf8;
332335

333336
let new_offset: usize = self.current_ptr + size;

src/maxminddb/lib.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ use memmap2::MmapOptions;
1818
#[cfg(feature = "mmap")]
1919
use std::fs::File;
2020

21+
#[cfg(all(feature = "simdutf8", feature = "unsafe-str-decode"))]
22+
compile_error!("features `simdutf8` and `unsafe-str-decode` are mutually exclusive");
23+
2124
#[derive(Debug, PartialEq, Eq)]
2225
pub enum MaxMindDBError {
2326
AddressNotFoundError(String),

0 commit comments

Comments
 (0)