#[cfg(target_arch = "aarch64")]
pub(crate) mod common;
#[cfg(target_arch = "aarch64")]
mod specialized;
#[cfg(target_arch = "aarch64")]
use crate::core::dictionary::Dictionary;
#[cfg(target_arch = "aarch64")]
use crate::simd::variants::{identify_base32_variant, identify_base64_variant};
#[cfg(target_arch = "aarch64")]
use specialized::base16::identify_hex_variant;
#[cfg(target_arch = "aarch64")]
#[inline]
#[allow(dead_code)]
pub fn has_neon() -> bool {
true
}
#[cfg(target_arch = "aarch64")]
pub fn encode_base64_simd(data: &[u8], dictionary: &Dictionary) -> Option<String> {
if dictionary.base() != 64 {
return None;
}
let variant = identify_base64_variant(dictionary)?;
specialized::base64::encode(data, dictionary, variant)
}
#[cfg(target_arch = "aarch64")]
pub fn decode_base64_simd(encoded: &str, dictionary: &Dictionary) -> Option<Vec<u8>> {
if dictionary.base() != 64 {
return None;
}
let variant = identify_base64_variant(dictionary)?;
if encoded.len() < 16 {
return None;
}
specialized::base64::decode(encoded, variant)
}
#[cfg(target_arch = "aarch64")]
pub fn encode_base16_simd(data: &[u8], dictionary: &Dictionary) -> Option<String> {
if dictionary.base() != 16 {
return None;
}
let variant = identify_hex_variant(dictionary)?;
specialized::base16::encode(data, dictionary, variant)
}
#[cfg(target_arch = "aarch64")]
pub fn decode_base16_simd(encoded: &str, dictionary: &Dictionary) -> Option<Vec<u8>> {
if dictionary.base() != 16 {
return None;
}
let variant = identify_hex_variant(dictionary)?;
if encoded.len() < 32 {
return None;
}
specialized::base16::decode(encoded, variant)
}
#[cfg(target_arch = "aarch64")]
pub fn encode_base256_simd(data: &[u8], dictionary: &Dictionary) -> Option<String> {
if dictionary.base() != 256 {
return None;
}
specialized::base256::encode(data, dictionary)
}
#[cfg(target_arch = "aarch64")]
pub fn decode_base256_simd(encoded: &str, dictionary: &Dictionary) -> Option<Vec<u8>> {
if dictionary.base() != 256 {
return None;
}
if encoded.len() < 16 {
return None;
}
specialized::base256::decode(encoded, dictionary)
}
#[cfg(target_arch = "aarch64")]
#[allow(dead_code)]
pub fn encode_base32_simd(data: &[u8], dictionary: &Dictionary) -> Option<String> {
if dictionary.base() != 32 {
return None;
}
let variant = identify_base32_variant(dictionary)?;
specialized::base32::encode(data, dictionary, variant)
}
#[cfg(target_arch = "aarch64")]
#[allow(dead_code)]
pub fn decode_base32_simd(encoded: &str, dictionary: &Dictionary) -> Option<Vec<u8>> {
if dictionary.base() != 32 {
return None;
}
let variant = identify_base32_variant(dictionary)?;
if encoded.len() < 16 {
return None;
}
specialized::base32::decode(encoded, variant)
}