#![allow(clippy::comparison_chain)]
#![cfg_attr(not(feature = "std"), no_std)]
#[allow(unused)]
#[inline(always)]
#[cold]
pub(crate) fn cold_path() {}
#[allow(unused)]
#[inline(always)]
#[rustversion::since(1.81.0)]
pub(crate) const unsafe fn assert_unchecked(cond: bool) {
unsafe { ::core::hint::assert_unchecked(cond) }
}
#[allow(unused)]
#[inline(always)]
#[rustversion::before(1.81.0)]
pub(crate) const unsafe fn assert_unchecked(cond: bool) {}
mod error;
#[cfg(not(any(
all(target_arch = "aarch64", target_feature = "neon"),
all(
target_feature = "sse2",
target_feature = "sse3",
target_feature = "sse4.1",
target_feature = "ssse3",
target_feature = "avx",
target_feature = "avx2"
),
)))]
mod fallback;
mod linker;
mod short;
#[cfg(any(
all(target_arch = "aarch64", target_feature = "neon"),
all(
target_feature = "sse2",
target_feature = "sse",
target_feature = "sse4.1",
target_feature = "ssse3"
),
))]
mod simd;
pub use crate::{
error::AtoiSimdError,
linker::{Parse, ParseNeg},
};
#[inline]
pub fn parse<T: Parse, const SKIP_ZEROES: bool, const SKIP_PLUS: bool>(
s: &[u8],
) -> Result<T, AtoiSimdError<'_>> {
T::atoi_simd_parse::<SKIP_ZEROES, SKIP_PLUS>(s)
}
#[inline]
pub fn parse_pos<T: Parse, const SKIP_ZEROES: bool>(s: &[u8]) -> Result<T, AtoiSimdError<'_>> {
T::atoi_simd_parse_pos::<SKIP_ZEROES>(s)
}
#[inline]
pub fn parse_neg<T: ParseNeg, const SKIP_ZEROES: bool>(s: &[u8]) -> Result<T, AtoiSimdError<'_>> {
T::atoi_simd_parse_neg::<SKIP_ZEROES>(s)
}
#[inline]
pub fn parse_prefix<T: Parse, const SKIP_ZEROES: bool, const SKIP_PLUS: bool>(
s: &[u8],
) -> Result<(T, usize), AtoiSimdError<'_>> {
T::atoi_simd_parse_prefix::<SKIP_ZEROES, SKIP_PLUS>(s)
}
#[inline]
pub fn parse_prefix_pos<T: Parse, const SKIP_ZEROES: bool>(
s: &[u8],
) -> Result<(T, usize), AtoiSimdError<'_>> {
T::atoi_simd_parse_prefix_pos::<SKIP_ZEROES>(s)
}
#[inline]
pub fn parse_prefix_neg<T: ParseNeg, const SKIP_ZEROES: bool>(
s: &[u8],
) -> Result<(T, usize), AtoiSimdError<'_>> {
T::atoi_simd_parse_prefix_neg::<SKIP_ZEROES>(s)
}
#[deprecated(since = "0.18.0", note = "Use `parse::<_, true, true>` instead")]
#[inline]
pub fn parse_skipped<T: Parse>(s: &[u8]) -> Result<T, AtoiSimdError<'_>> {
parse::<_, true, true>(s)
}
#[deprecated(since = "0.17.0", note = "Use `parse_prefix` instead")]
#[inline]
pub fn parse_any<T: Parse>(s: &[u8]) -> Result<(T, usize), AtoiSimdError<'_>> {
parse_prefix::<_, false, false>(s)
}
#[deprecated(since = "0.17.0", note = "Use `parse_prefix_pos` instead")]
#[inline]
pub fn parse_any_pos<T: Parse>(s: &[u8]) -> Result<(T, usize), AtoiSimdError<'_>> {
parse_prefix_pos::<_, false>(s)
}
#[deprecated(since = "0.17.0", note = "Use `parse_prefix_neg` instead")]
#[inline]
pub fn parse_any_neg<T: ParseNeg>(s: &[u8]) -> Result<(T, usize), AtoiSimdError<'_>> {
parse_prefix_neg::<_, false>(s)
}