[−][src]Struct hilbert::normalize::IntegerDataRange
Holds the observed range of values seen in a set of points whose coordinates are 32-bit integers (signed or unsigned).
From this information we can determine how to translate the coordinates so that their normalized range has a low of zero. This permits us to use the fewest number of bits to represent them when constructing a Hilbert index.
- Use the
normalize
method to adjust a coordinate value into range such that the full precision of the number is preserved. - Use the
compress
method to both normalize and shrink the coordinate value, to reduce the number of bits used per coordinate, at the expense of less precision.
Motivation.
- The Hilbert Curve transformation requires non-negative numbers, so all values must be translated until the lowest is zero. That means that if the lowest value is negative, we shift to the positive direction, or contrariwise to the negative direction.
- The execution time of the Hilbert transformation is directly proportional to the number of bits used to represent each value. Thus if we can sacrifice some precision, each value can be right-shifted by the same number of bits if we wish to compress the range.
Fields
low: i64
Lowest value of any coordinate of any point in a collection of points.
high: i64
Highest value of any coordinate of any point in a collection of points.
bits_required: usize
Minimum number of bits required to represent a normalized value without loss of information.
Examples:
- If
low
is -10 andhigh
is 24 then the range is 34 so 6 bits are required to represent all values in that range. - If
low
is 50 andhigh
is 67 then the range is 17 so 5 bits are required to represent all values in that range.
Methods
impl IntegerDataRange
[src]
pub fn new<I>(low_i: I, high_i: I) -> Self where
I: Into<i64>,
[src]
I: Into<i64>,
Create an IntegerDataRange
without reference to particular data.
pub fn from_i32<I>(points: &[I]) -> Self where
&'a I: IntoIterator<Item = &'a i32>,
[src]
&'a I: IntoIterator<Item = &'a i32>,
Study all i32
coordinates in all points to find the minimum and maximum values.
pub fn from_u32<I>(points: &[I]) -> Self where
&'a I: IntoIterator<Item = &'a u32>,
[src]
&'a I: IntoIterator<Item = &'a u32>,
Study all u32
coordinates in all points to find the minimum and maximum values.
pub fn range(&self) -> u32
[src]
Range from low to high value.
pub fn normalize<I>(&self, coordinate: I) -> u32 where
I: Into<i64>,
[src]
I: Into<i64>,
Normalize an integer convertible to an i64, shifting it enough so that the minimum value found in any point
is shifted to zero and the maximum value is shifted to range
, and using the full number of bits required for the range.
pub fn compress<I>(&self, coordinate: I, bits_allocated: usize) -> u32 where
I: Into<i64>,
[src]
I: Into<i64>,
Normalize a coordinate
value, shifting it enough so that the minimum value found in any point
is shifted to zero and the maximum value is shifted to range
, then optionally compressing the range by bit shifting
such that no more than the given number of bits are required for the largest value.
Trait Implementations
impl Clone for IntegerDataRange
[src]
fn clone(&self) -> IntegerDataRange
[src]
fn clone_from(&mut self, source: &Self)
1.0.0[src]
impl PartialEq<IntegerDataRange> for IntegerDataRange
[src]
fn eq(&self, other: &IntegerDataRange) -> bool
[src]
fn ne(&self, other: &IntegerDataRange) -> bool
[src]
impl Debug for IntegerDataRange
[src]
impl StructuralPartialEq for IntegerDataRange
[src]
Auto Trait Implementations
impl Send for IntegerDataRange
impl Sync for IntegerDataRange
impl Unpin for IntegerDataRange
impl UnwindSafe for IntegerDataRange
impl RefUnwindSafe for IntegerDataRange
Blanket Implementations
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> From<T> for T
[src]
impl<T> ToOwned for T where
T: Clone,
[src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
fn to_owned(&self) -> T
[src]
fn clone_into(&self, target: &mut T)
[src]
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
V: MultiLane<T>,