Struct HashVec

Source
pub struct HashVec<'a> { /* private fields */ }
Expand description

A wrapper type for &[f32] slices that provides stable hashing and equality based on the IEEE‑754 bit patterns.

HashVec compares floats by their raw bit representation and writes each element’s to_bits() into the hasher. This ensures that 0.0 and -0.0 are distinguished, and that NaN values only compare equal if their bit patterns match.

Implements VecLike by delegating to the slice implementation, allowing distance, dot‑product, and normalization operations.

Since

§Example

use std::collections::hash_map::DefaultHasher;
use std::hash::{Hash, Hasher};
use vecstasy::HashVec;
use vecstasy::VecLike;

let data: &[f32] = &[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0]; // len needs to be a multiple of 8
let hv = HashVec::from(data);

// Hash computation
let mut hasher = DefaultHasher::new();
hv.hash(&mut hasher);
let hash_value = hasher.finish();

// VecLike operations
let normed: Vec<f32> = hv.normalized();

Trait Implementations§

Source§

impl<'a> Clone for HashVec<'a>

Source§

fn clone(&self) -> HashVec<'a>

Returns a duplicate 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<'a> Debug for HashVec<'a>

Source§

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

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

impl<'a> From<&'a [f32]> for HashVec<'a>

Source§

fn from(value: &'a [f32]) -> Self

Converts to this type from the input type.
Source§

impl<'a> Hash for HashVec<'a>

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> PartialEq for HashVec<'a>

Source§

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

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

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

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<'a> VecLike for HashVec<'a>

Source§

fn l2_dist_squared(&self, other: &Self) -> f32

Computes the squared L2 (Euclidean) distance between self and othr.

Operates on fixed‐size chunks; any trailing elements when the slice length is not a multiple of the chunk size will be silently ignored in release mode.

§Panics
  • In debug mode, if self.len() != othr.len().
  • In debug mode, if the slice length is not a multiple of the internal chunk size.
Source§

fn dot(&self, other: &Self) -> f32

Computes the dot product of self and othr.

Operates on fixed‐size chunks; any trailing elements when the slice length is not a multiple of the chunk size will be silently ignored in release mode.

§Panics
  • In debug mode, if self.len() != othr.len().
  • In debug mode, if the slice length is not a multiple of the internal chunk size.
Source§

fn normalized(&self) -> Self::Owned

Returns a normalized copy of the input slice.

Operates on fixed‐size chunks; any trailing elements when the slice length is not a multiple of the chunk size will be silently ignored in release mode.

If the input norm is zero, returns a zero vector of the same length.

§Panics
  • In debug mode, if the slice length is not a multiple of the internal chunk size.
Source§

type Owned = Vec<f32>

The owned vector type returned by normalized.
Source§

impl<'a> Eq for HashVec<'a>

Auto Trait Implementations§

§

impl<'a> Freeze for HashVec<'a>

§

impl<'a> RefUnwindSafe for HashVec<'a>

§

impl<'a> Send for HashVec<'a>

§

impl<'a> Sync for HashVec<'a>

§

impl<'a> Unpin for HashVec<'a>

§

impl<'a> UnwindSafe for HashVec<'a>

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§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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> ToOwned for T
where T: Clone,

Source§

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>,

Source§

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>,

Source§

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.