Struct arrow_buffer::IntervalMonthDayNano

source ·
#[repr(C)]
pub struct IntervalMonthDayNano { pub months: i32, pub days: i32, pub nanoseconds: i64, }
Expand description

Value of an IntervalMonthDayNano array

§Representation

This type is stored as a single 128 bit integer, interpreted as three different signed integral fields:

  1. The number of months (32 bits)
  2. The number days (32 bits)
  3. The number of nanoseconds (64 bits).

Nanoseconds does not allow for leap seconds.

Each field is independent (e.g. there is no constraint that the quantity of nanoseconds represents less than a day’s worth of time).

┌───────────────┬─────────────┬─────────────────────────────┐
│     Months    │     Days    │            Nanos            │
│   (32 bits)   │  (32 bits)  │          (64 bits)          │
└───────────────┴─────────────┴─────────────────────────────┘
0            32             64                           128 bit offset

Please see the Arrow Spec for more details

§Note on Comparing and Ordering for Calendar Types

Values of IntervalMonthDayNano are compared using their binary representation, which can lead to surprising results.

Spans of time measured in calendar units are not fixed in absolute size (e.g. number of seconds) which makes defining comparisons and ordering non trivial. For example 1 month is 28 days for February but 1 month is 31 days in December.

This makes the seemingly simple operation of comparing two intervals complicated in practice. For example is 1 month more or less than 30 days? The answer depends on what month you are talking about.

This crate defines comparisons for calendar types using their binary representation which is fast and efficient, but leads to potentially surprising results.

For example a IntervalMonthDayNano of 1 month will compare as greater than a IntervalMonthDayNano of 100 days because the binary representation of 1 month is larger than the binary representation of 100 days.

Fields§

§months: i32§days: i32§nanoseconds: i64

Implementations§

source§

impl IntervalMonthDayNano

source

pub const ZERO: Self = _

The additive identity i.e. 0.

source

pub const ONE: Self = _

The multiplicative identity, i.e. 1.

source

pub const MINUS_ONE: Self = _

The multiplicative inverse, i.e. -1.

source

pub const MAX: Self = _

The maximum value that can be represented

source

pub const MIN: Self = _

The minimum value that can be represented

source

pub const fn new(months: i32, days: i32, nanoseconds: i64) -> Self

Create a new IntervalMonthDayNano

source

pub fn wrapping_abs(self) -> Self

Computes the absolute value

source

pub fn checked_abs(self) -> Option<Self>

Computes the absolute value

source

pub fn wrapping_neg(self) -> Self

Negates the value

source

pub fn checked_neg(self) -> Option<Self>

Negates the value

source

pub fn wrapping_add(self, other: Self) -> Self

Performs wrapping addition

source

pub fn checked_add(self, other: Self) -> Option<Self>

Performs checked addition

source

pub fn wrapping_sub(self, other: Self) -> Self

Performs wrapping subtraction

source

pub fn checked_sub(self, other: Self) -> Option<Self>

Performs checked subtraction

source

pub fn wrapping_mul(self, other: Self) -> Self

Performs wrapping multiplication

source

pub fn checked_mul(self, other: Self) -> Option<Self>

Performs checked multiplication

source

pub fn wrapping_div(self, other: Self) -> Self

Performs wrapping division

source

pub fn checked_div(self, other: Self) -> Option<Self>

Performs checked division

source

pub fn wrapping_rem(self, other: Self) -> Self

Performs wrapping remainder

source

pub fn checked_rem(self, other: Self) -> Option<Self>

Performs checked remainder

source

pub fn wrapping_pow(self, exp: u32) -> Self

Performs wrapping exponentiation

source

pub fn checked_pow(self, exp: u32) -> Option<Self>

Performs checked exponentiation

Trait Implementations§

source§

impl<'a, 'b> Add<&'b IntervalMonthDayNano> for &'a IntervalMonthDayNano

§

type Output = IntervalMonthDayNano

The resulting type after applying the + operator.
source§

fn add(self, rhs: &'b IntervalMonthDayNano) -> Self::Output

Performs the + operation. Read more
source§

impl<'a> Add<&'a IntervalMonthDayNano> for IntervalMonthDayNano

§

type Output = IntervalMonthDayNano

The resulting type after applying the + operator.
source§

fn add(self, rhs: &'a IntervalMonthDayNano) -> Self::Output

Performs the + operation. Read more
source§

impl<'a> Add<IntervalMonthDayNano> for &'a IntervalMonthDayNano

§

type Output = IntervalMonthDayNano

The resulting type after applying the + operator.
source§

fn add(self, rhs: IntervalMonthDayNano) -> Self::Output

Performs the + operation. Read more
source§

impl Add for IntervalMonthDayNano

§

type Output = IntervalMonthDayNano

The resulting type after applying the + operator.
source§

fn add(self, rhs: Self) -> Self::Output

Performs the + operation. Read more
source§

impl AddAssign for IntervalMonthDayNano

source§

fn add_assign(&mut self, rhs: Self)

Performs the += operation. Read more
source§

impl ArrowNativeType for IntervalMonthDayNano

source§

fn from_usize(_: usize) -> Option<Self>

Convert native integer type from usize Read more
source§

fn as_usize(self) -> usize

Convert to usize according to the as operator
source§

fn usize_as(i: usize) -> Self

Convert from usize according to the as operator
source§

fn to_usize(self) -> Option<usize>

Convert native type to usize. Read more
source§

fn to_isize(self) -> Option<isize>

Convert native type to isize. Read more
source§

fn to_i64(self) -> Option<i64>

Convert native type to i64. Read more
source§

fn get_byte_width() -> usize

Returns the byte width of this native type.
source§

fn from_i32(_: i32) -> Option<Self>

👎Deprecated: please use Option::Some instead
Convert native type from i32. Read more
source§

fn from_i64(_: i64) -> Option<Self>

👎Deprecated: please use Option::Some instead
Convert native type from i64. Read more
source§

fn from_i128(_: i128) -> Option<Self>

👎Deprecated: please use Option::Some instead
Convert native type from i128. Read more
source§

impl Clone for IntervalMonthDayNano

source§

fn clone(&self) -> IntervalMonthDayNano

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for IntervalMonthDayNano

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for IntervalMonthDayNano

source§

fn default() -> IntervalMonthDayNano

Returns the “default value” for a type. Read more
source§

impl<'a, 'b> Div<&'b IntervalMonthDayNano> for &'a IntervalMonthDayNano

§

type Output = IntervalMonthDayNano

The resulting type after applying the / operator.
source§

fn div(self, rhs: &'b IntervalMonthDayNano) -> Self::Output

Performs the / operation. Read more
source§

impl<'a> Div<&'a IntervalMonthDayNano> for IntervalMonthDayNano

§

type Output = IntervalMonthDayNano

The resulting type after applying the / operator.
source§

fn div(self, rhs: &'a IntervalMonthDayNano) -> Self::Output

Performs the / operation. Read more
source§

impl<'a> Div<IntervalMonthDayNano> for &'a IntervalMonthDayNano

§

type Output = IntervalMonthDayNano

The resulting type after applying the / operator.
source§

fn div(self, rhs: IntervalMonthDayNano) -> Self::Output

Performs the / operation. Read more
source§

impl Div for IntervalMonthDayNano

§

type Output = IntervalMonthDayNano

The resulting type after applying the / operator.
source§

fn div(self, rhs: Self) -> Self::Output

Performs the / operation. Read more
source§

impl DivAssign for IntervalMonthDayNano

source§

fn div_assign(&mut self, rhs: Self)

Performs the /= operation. Read more
source§

impl Hash for IntervalMonthDayNano

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl<'a, 'b> Mul<&'b IntervalMonthDayNano> for &'a IntervalMonthDayNano

§

type Output = IntervalMonthDayNano

The resulting type after applying the * operator.
source§

fn mul(self, rhs: &'b IntervalMonthDayNano) -> Self::Output

Performs the * operation. Read more
source§

impl<'a> Mul<&'a IntervalMonthDayNano> for IntervalMonthDayNano

§

type Output = IntervalMonthDayNano

The resulting type after applying the * operator.
source§

fn mul(self, rhs: &'a IntervalMonthDayNano) -> Self::Output

Performs the * operation. Read more
source§

impl<'a> Mul<IntervalMonthDayNano> for &'a IntervalMonthDayNano

§

type Output = IntervalMonthDayNano

The resulting type after applying the * operator.
source§

fn mul(self, rhs: IntervalMonthDayNano) -> Self::Output

Performs the * operation. Read more
source§

impl Mul for IntervalMonthDayNano

§

type Output = IntervalMonthDayNano

The resulting type after applying the * operator.
source§

fn mul(self, rhs: Self) -> Self::Output

Performs the * operation. Read more
source§

impl MulAssign for IntervalMonthDayNano

source§

fn mul_assign(&mut self, rhs: Self)

Performs the *= operation. Read more
source§

impl Neg for IntervalMonthDayNano

§

type Output = IntervalMonthDayNano

The resulting type after applying the - operator.
source§

fn neg(self) -> Self::Output

Performs the unary - operation. Read more
source§

impl Ord for IntervalMonthDayNano

source§

fn cmp(&self, other: &IntervalMonthDayNano) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for IntervalMonthDayNano

source§

fn eq(&self, other: &IntervalMonthDayNano) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for IntervalMonthDayNano

source§

fn partial_cmp(&self, other: &IntervalMonthDayNano) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more
source§

impl<'a, 'b> Rem<&'b IntervalMonthDayNano> for &'a IntervalMonthDayNano

§

type Output = IntervalMonthDayNano

The resulting type after applying the % operator.
source§

fn rem(self, rhs: &'b IntervalMonthDayNano) -> Self::Output

Performs the % operation. Read more
source§

impl<'a> Rem<&'a IntervalMonthDayNano> for IntervalMonthDayNano

§

type Output = IntervalMonthDayNano

The resulting type after applying the % operator.
source§

fn rem(self, rhs: &'a IntervalMonthDayNano) -> Self::Output

Performs the % operation. Read more
source§

impl<'a> Rem<IntervalMonthDayNano> for &'a IntervalMonthDayNano

§

type Output = IntervalMonthDayNano

The resulting type after applying the % operator.
source§

fn rem(self, rhs: IntervalMonthDayNano) -> Self::Output

Performs the % operation. Read more
source§

impl Rem for IntervalMonthDayNano

§

type Output = IntervalMonthDayNano

The resulting type after applying the % operator.
source§

fn rem(self, rhs: Self) -> Self::Output

Performs the % operation. Read more
source§

impl RemAssign for IntervalMonthDayNano

source§

fn rem_assign(&mut self, rhs: Self)

Performs the %= operation. Read more
source§

impl<'a, 'b> Sub<&'b IntervalMonthDayNano> for &'a IntervalMonthDayNano

§

type Output = IntervalMonthDayNano

The resulting type after applying the - operator.
source§

fn sub(self, rhs: &'b IntervalMonthDayNano) -> Self::Output

Performs the - operation. Read more
source§

impl<'a> Sub<&'a IntervalMonthDayNano> for IntervalMonthDayNano

§

type Output = IntervalMonthDayNano

The resulting type after applying the - operator.
source§

fn sub(self, rhs: &'a IntervalMonthDayNano) -> Self::Output

Performs the - operation. Read more
source§

impl<'a> Sub<IntervalMonthDayNano> for &'a IntervalMonthDayNano

§

type Output = IntervalMonthDayNano

The resulting type after applying the - operator.
source§

fn sub(self, rhs: IntervalMonthDayNano) -> Self::Output

Performs the - operation. Read more
source§

impl Sub for IntervalMonthDayNano

§

type Output = IntervalMonthDayNano

The resulting type after applying the - operator.
source§

fn sub(self, rhs: Self) -> Self::Output

Performs the - operation. Read more
source§

impl SubAssign for IntervalMonthDayNano

source§

fn sub_assign(&mut self, rhs: Self)

Performs the -= operation. Read more
source§

impl Copy for IntervalMonthDayNano

source§

impl Eq for IntervalMonthDayNano

source§

impl StructuralPartialEq for IntervalMonthDayNano

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> CloneToUninit for T
where T: Clone,

source§

default unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
source§

impl<T> CloneToUninit for T
where T: Copy,

source§

unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> ToByteSlice for T
where T: ArrowNativeType,

source§

fn to_byte_slice(&self) -> &[u8]

Converts this instance into a byte slice
source§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> Allocation for T
where T: RefUnwindSafe + Send + Sync,

source§

impl<T, Rhs> NumAssignOps<Rhs> for T
where T: AddAssign<Rhs> + SubAssign<Rhs> + MulAssign<Rhs> + DivAssign<Rhs> + RemAssign<Rhs>,

source§

impl<T, Rhs, Output> NumOps<Rhs, Output> for T
where T: Sub<Rhs, Output = Output> + Mul<Rhs, Output = Output> + Div<Rhs, Output = Output> + Add<Rhs, Output = Output> + Rem<Rhs, Output = Output>,

source§

impl<T, Base> RefNum<Base> for T
where T: NumOps<Base, Base> + for<'r> NumOps<&'r Base, Base>,