Crate atoi_simd

source ·
Expand description

§Fast &[u8] to integer parser

SIMD (fast) parsing is supported on x86_64 (SSE4.1, AVX2) and on Arm64 (aarch64, Neon), but this library works even if you don’t have a SIMD supported cpu (and it will be still faster than str::parse).

Supports negative values and validates the input.

Supported output types: u8, i8, u16, i16, u32, i32, u64, i64, u128, i128, usize, isize.

Has good test coverage, and can be considered safe.

To enable SIMD it needs the target-feature or target-cpu flags set, or it will fallback to non-SIMD functions. You can copy the ./.cargo/config.toml to your project, or use one of the following environment variables:

  • RUSTFLAGS="-C target-feature=+sse2,+sse3,+sse4.1,+ssse3,+avx,+avx2" for x86_64

  • RUSTFLAGS="-C target-feature=+neon" for Arm64

  • RUSTFLAGS="-C target-cpu=native" will optimize for your current cpu

If you have &str then use .as_bytes()

Supports no_std with --no-default-features

§Examples

let val: u64 = atoi_simd::parse(b"1234").unwrap();
assert_eq!(val, 1234_u64);

assert_eq!(atoi_simd::parse::<i64>(b"-2345"), Ok(-2345_i64));

assert_eq!(atoi_simd::parse_any::<u64>(b"123something_else"), Ok((123_u64, 3)));

// a drop-in replacement for `str::parse`
assert_eq!(atoi_simd::parse_skipped::<u64>(b"+000000000000000000001234"), Ok(1234_u64));

Enums§

Traits§

  • Note: all of the provided methods are #[inline(always)]
  • Note: all of the provided methods are #[inline(always)]

Functions§

  • Parses a slice of digits, and checks the first ‘-’ char for signed integers.
  • Parses a slice of digits until it reaches invalid character, and checks the first ‘-’ char for signed integers. Returns the parsed value and the parsed size of the slice.
  • Parses a negative integer until it reaches an invalid character. Slice must not contain ‘-’ sign. Returns the parsed value and the parsed size of the slice.
  • Parses a positive integer until it reaches an invalid character. Returns the parsed value and the parsed size of the slice.
  • Parses a negative integer. Slice must not contain ‘-’ sign.
  • Parses a positive integer.
  • Parses a slice of digits. Was made to be used as a drop-in replacement for str::parse. Checks the first ‘-’ char for signed integers. Skips the ‘+’ char and extra zeroes at the beginning. It’s slower than parse().