Skip to content

Commit

Permalink
Remove num dependency from arrow-buffer (#2594)
Browse files Browse the repository at this point in the history
  • Loading branch information
tustvold committed Sep 27, 2022
1 parent b7016ed commit 738596a
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 180 deletions.
1 change: 0 additions & 1 deletion arrow-buffer/Cargo.toml
Expand Up @@ -38,7 +38,6 @@ path = "src/lib.rs"
bench = false

[dependencies]
num = { version = "0.4", default-features = false, features = ["std"] }
half = { version = "2.0", default-features = false }

[dev-dependencies]
Expand Down
243 changes: 66 additions & 177 deletions arrow-buffer/src/native.rs
Expand Up @@ -46,193 +46,82 @@ mod private {
pub trait ArrowNativeType:
std::fmt::Debug + Send + Sync + Copy + PartialOrd + Default + private::Sealed + 'static
{
/// Convert native type from usize.
#[inline]
fn from_usize(_: usize) -> Option<Self> {
None
}
/// Convert native integer type from usize
///
/// Returns `None` if [`Self`] is not an integer or conversion would result
/// in truncation/overflow
fn from_usize(_: usize) -> Option<Self>;

/// Convert native type to usize.
#[inline]
fn to_usize(&self) -> Option<usize> {
None
}
///
/// Returns `None` if [`Self`] is not an integer or conversion would result
/// in truncation/overflow
fn to_usize(&self) -> Option<usize>;

/// Convert native type to isize.
#[inline]
fn to_isize(&self) -> Option<isize> {
None
}
}

impl private::Sealed for i8 {}
impl ArrowNativeType for i8 {
#[inline]
fn from_usize(v: usize) -> Option<Self> {
num::FromPrimitive::from_usize(v)
}

#[inline]
fn to_usize(&self) -> Option<usize> {
num::ToPrimitive::to_usize(self)
}

#[inline]
fn to_isize(&self) -> Option<isize> {
num::ToPrimitive::to_isize(self)
}
}

impl private::Sealed for i16 {}
impl ArrowNativeType for i16 {
#[inline]
fn from_usize(v: usize) -> Option<Self> {
num::FromPrimitive::from_usize(v)
}

#[inline]
fn to_usize(&self) -> Option<usize> {
num::ToPrimitive::to_usize(self)
}

#[inline]
fn to_isize(&self) -> Option<isize> {
num::ToPrimitive::to_isize(self)
}
}

impl private::Sealed for i32 {}
impl ArrowNativeType for i32 {
#[inline]
fn from_usize(v: usize) -> Option<Self> {
num::FromPrimitive::from_usize(v)
}

#[inline]
fn to_usize(&self) -> Option<usize> {
num::ToPrimitive::to_usize(self)
}

#[inline]
fn to_isize(&self) -> Option<isize> {
num::ToPrimitive::to_isize(self)
}
}

impl private::Sealed for i64 {}
impl ArrowNativeType for i64 {
#[inline]
fn from_usize(v: usize) -> Option<Self> {
num::FromPrimitive::from_usize(v)
}

#[inline]
fn to_usize(&self) -> Option<usize> {
num::ToPrimitive::to_usize(self)
}

#[inline]
fn to_isize(&self) -> Option<isize> {
num::ToPrimitive::to_isize(self)
}
}

impl private::Sealed for i128 {}
impl ArrowNativeType for i128 {
#[inline]
fn from_usize(v: usize) -> Option<Self> {
num::FromPrimitive::from_usize(v)
}

#[inline]
fn to_usize(&self) -> Option<usize> {
num::ToPrimitive::to_usize(self)
}

#[inline]
fn to_isize(&self) -> Option<isize> {
num::ToPrimitive::to_isize(self)
}
}

impl private::Sealed for u8 {}
impl ArrowNativeType for u8 {
#[inline]
fn from_usize(v: usize) -> Option<Self> {
num::FromPrimitive::from_usize(v)
}

#[inline]
fn to_usize(&self) -> Option<usize> {
num::ToPrimitive::to_usize(self)
}

#[inline]
fn to_isize(&self) -> Option<isize> {
num::ToPrimitive::to_isize(self)
}
///
/// Returns `None` if [`Self`] is not an integer or conversion would result
/// in truncation/overflow
fn to_isize(&self) -> Option<isize>;
}

impl private::Sealed for u16 {}
impl ArrowNativeType for u16 {
#[inline]
fn from_usize(v: usize) -> Option<Self> {
num::FromPrimitive::from_usize(v)
}

#[inline]
fn to_usize(&self) -> Option<usize> {
num::ToPrimitive::to_usize(self)
}

#[inline]
fn to_isize(&self) -> Option<isize> {
num::ToPrimitive::to_isize(self)
}
}

impl private::Sealed for u32 {}
impl ArrowNativeType for u32 {
#[inline]
fn from_usize(v: usize) -> Option<Self> {
num::FromPrimitive::from_usize(v)
}

#[inline]
fn to_usize(&self) -> Option<usize> {
num::ToPrimitive::to_usize(self)
}

#[inline]
fn to_isize(&self) -> Option<isize> {
num::ToPrimitive::to_isize(self)
}
macro_rules! native_integer {
($t: ty) => {
impl private::Sealed for $t {}
impl ArrowNativeType for $t {
#[inline]
fn from_usize(v: usize) -> Option<Self> {
v.try_into().ok()
}

#[inline]
fn to_usize(&self) -> Option<usize> {
(*self).try_into().ok()
}

#[inline]
fn to_isize(&self) -> Option<isize> {
(*self).try_into().ok()
}
}
};
}

impl private::Sealed for u64 {}
impl ArrowNativeType for u64 {
#[inline]
fn from_usize(v: usize) -> Option<Self> {
num::FromPrimitive::from_usize(v)
}

#[inline]
fn to_usize(&self) -> Option<usize> {
num::ToPrimitive::to_usize(self)
}

#[inline]
fn to_isize(&self) -> Option<isize> {
num::ToPrimitive::to_isize(self)
}
native_integer!(i8);
native_integer!(i16);
native_integer!(i32);
native_integer!(i64);
native_integer!(i128);
native_integer!(u8);
native_integer!(u16);
native_integer!(u32);
native_integer!(u64);

macro_rules! native_float {
($t:ty) => {
impl private::Sealed for $t {}
impl ArrowNativeType for $t {
#[inline]
fn from_usize(_: usize) -> Option<Self> {
None
}

#[inline]
fn to_usize(&self) -> Option<usize> {
None
}

#[inline]
fn to_isize(&self) -> Option<isize> {
None
}
}
};
}

impl ArrowNativeType for f16 {}
impl private::Sealed for f16 {}
impl ArrowNativeType for f32 {}
impl private::Sealed for f32 {}
impl ArrowNativeType for f64 {}
impl private::Sealed for f64 {}
native_float!(f16);
native_float!(f32);
native_float!(f64);

/// Allows conversion from supported Arrow types to a byte slice.
pub trait ToByteSlice {
Expand Down
3 changes: 1 addition & 2 deletions arrow-buffer/src/util/bit_util.rs
Expand Up @@ -17,7 +17,6 @@

//! Utils for working with bits

use num::Integer;
#[cfg(feature = "simd")]
use packed_simd::u8x64;

Expand Down Expand Up @@ -102,7 +101,7 @@ pub unsafe fn unset_bit_raw(data: *mut u8, i: usize) {
pub fn ceil(value: usize, divisor: usize) -> usize {
// Rewrite as `value.div_ceil(&divisor)` after
// https://github.com/rust-lang/rust/issues/88581 is merged.
Integer::div_ceil(&value, &divisor)
value / divisor + (0 != value % divisor) as usize
}

/// Performs SIMD bitwise binary operations.
Expand Down

0 comments on commit 738596a

Please sign in to comment.