Struct ord_lmdb_zero::Unaligned
source · [−]#[repr(packed)]pub struct Unaligned<T: LmdbRawIfUnaligned>(_);
Expand description
Wrapper for arbitrary Copy
types which lifts their alignment
restrictions.
This allows using values which have non-byte alignment but are otherwise
LMDB-safe (as defined by LmdbRaw
) to be used with it. It obviously does
not make T
itself packed, so the same discussion with respect to padding
in the LmdbRaw
documentation applies here as well.
There is no way to get a reference to the contained value, as Rust currently has no way to express that the reference may be misaligned. (See also https://github.com/rust-lang/rust/issues/27060.)
Example
use lmdb_zero as lmdb;
use lmdb_zero::Unaligned as U;
fn get_a_u64(env: &lmdb::Environment, db: &lmdb::Database,
key: &str) -> u64 {
let tx = lmdb::ReadTransaction::new(env).unwrap();
let access = tx.access();
access.get::<str, U<u64>>(db, key).unwrap().get()
}
Implementations
sourceimpl<T: LmdbRawIfUnaligned> Unaligned<T>
impl<T: LmdbRawIfUnaligned> Unaligned<T>
sourcepub fn of_ref(t: &T) -> &Self
pub fn of_ref(t: &T) -> &Self
Returns t
as if it were wrapped by Unaligned
.
This is safe because any &T
is a valid &Unaligned<T>
.
sourcepub fn of_mut(t: &mut T) -> &mut Self
pub fn of_mut(t: &mut T) -> &mut Self
Returns t
as if it were wrapped by Unaligned
.
This is safe because any &T
is a valid &Unaligned<T>
.
Trait Implementations
sourceimpl<T: LmdbRawIfUnaligned + Add<T>> Add<Unaligned<T>> for Unaligned<T> where
T::Output: LmdbRawIfUnaligned,
impl<T: LmdbRawIfUnaligned + Add<T>> Add<Unaligned<T>> for Unaligned<T> where
T::Output: LmdbRawIfUnaligned,
sourceimpl<T: LmdbRawIfUnaligned + AddAssign<T>> AddAssign<Unaligned<T>> for Unaligned<T>
impl<T: LmdbRawIfUnaligned + AddAssign<T>> AddAssign<Unaligned<T>> for Unaligned<T>
sourcefn add_assign(&mut self, rhs: Self)
fn add_assign(&mut self, rhs: Self)
Performs the +=
operation. Read more
sourceimpl<T: LmdbRawIfUnaligned> Binary for Unaligned<T> where
T: Binary,
impl<T: LmdbRawIfUnaligned> Binary for Unaligned<T> where
T: Binary,
sourceimpl<T: LmdbRawIfUnaligned + BitAnd<T>> BitAnd<Unaligned<T>> for Unaligned<T> where
T::Output: LmdbRawIfUnaligned,
impl<T: LmdbRawIfUnaligned + BitAnd<T>> BitAnd<Unaligned<T>> for Unaligned<T> where
T::Output: LmdbRawIfUnaligned,
sourceimpl<T: LmdbRawIfUnaligned + BitAndAssign<T>> BitAndAssign<Unaligned<T>> for Unaligned<T>
impl<T: LmdbRawIfUnaligned + BitAndAssign<T>> BitAndAssign<Unaligned<T>> for Unaligned<T>
sourcefn bitand_assign(&mut self, rhs: Self)
fn bitand_assign(&mut self, rhs: Self)
Performs the &=
operation. Read more
sourceimpl<T: LmdbRawIfUnaligned + BitOr<T>> BitOr<Unaligned<T>> for Unaligned<T> where
T::Output: LmdbRawIfUnaligned,
impl<T: LmdbRawIfUnaligned + BitOr<T>> BitOr<Unaligned<T>> for Unaligned<T> where
T::Output: LmdbRawIfUnaligned,
sourceimpl<T: LmdbRawIfUnaligned + BitOrAssign<T>> BitOrAssign<Unaligned<T>> for Unaligned<T>
impl<T: LmdbRawIfUnaligned + BitOrAssign<T>> BitOrAssign<Unaligned<T>> for Unaligned<T>
sourcefn bitor_assign(&mut self, rhs: Self)
fn bitor_assign(&mut self, rhs: Self)
Performs the |=
operation. Read more
sourceimpl<T: LmdbRawIfUnaligned + BitXor<T>> BitXor<Unaligned<T>> for Unaligned<T> where
T::Output: LmdbRawIfUnaligned,
impl<T: LmdbRawIfUnaligned + BitXor<T>> BitXor<Unaligned<T>> for Unaligned<T> where
T::Output: LmdbRawIfUnaligned,
sourceimpl<T: LmdbRawIfUnaligned + BitXorAssign<T>> BitXorAssign<Unaligned<T>> for Unaligned<T>
impl<T: LmdbRawIfUnaligned + BitXorAssign<T>> BitXorAssign<Unaligned<T>> for Unaligned<T>
sourcefn bitxor_assign(&mut self, rhs: Self)
fn bitxor_assign(&mut self, rhs: Self)
Performs the ^=
operation. Read more
sourceimpl<T: LmdbRawIfUnaligned> Clone for Unaligned<T>
impl<T: LmdbRawIfUnaligned> Clone for Unaligned<T>
sourceimpl<T: LmdbRawIfUnaligned> Debug for Unaligned<T> where
T: Debug,
impl<T: LmdbRawIfUnaligned> Debug for Unaligned<T> where
T: Debug,
sourceimpl<T: LmdbRawIfUnaligned> Display for Unaligned<T> where
T: Display,
impl<T: LmdbRawIfUnaligned> Display for Unaligned<T> where
T: Display,
sourceimpl<T: LmdbRawIfUnaligned + Div<T>> Div<Unaligned<T>> for Unaligned<T> where
T::Output: LmdbRawIfUnaligned,
impl<T: LmdbRawIfUnaligned + Div<T>> Div<Unaligned<T>> for Unaligned<T> where
T::Output: LmdbRawIfUnaligned,
sourceimpl<T: LmdbRawIfUnaligned + DivAssign<T>> DivAssign<Unaligned<T>> for Unaligned<T>
impl<T: LmdbRawIfUnaligned + DivAssign<T>> DivAssign<Unaligned<T>> for Unaligned<T>
sourcefn div_assign(&mut self, rhs: Self)
fn div_assign(&mut self, rhs: Self)
Performs the /=
operation. Read more
sourceimpl<T: LmdbRawIfUnaligned + Hash> Hash for Unaligned<T>
impl<T: LmdbRawIfUnaligned + Hash> Hash for Unaligned<T>
sourceimpl<T: LmdbRawIfUnaligned + LmdbOrdKeyIfUnaligned> LmdbOrdKey for Unaligned<T>
impl<T: LmdbRawIfUnaligned + LmdbOrdKeyIfUnaligned> LmdbOrdKey for Unaligned<T>
sourcefn ordered_by_bytes() -> bool
fn ordered_by_bytes() -> bool
Returns whether the default LMDB byte-by-byte comparison is correct for valid values of this type. Read more
sourcefn ordered_as_integer() -> bool
fn ordered_as_integer() -> bool
Returns whether LMDB will correctly handle this value with the
INTEGERKEY
or INTEGERDUP
flags. Read more
sourceimpl<T: LmdbRawIfUnaligned> LmdbRaw for Unaligned<T>
impl<T: LmdbRawIfUnaligned> LmdbRaw for Unaligned<T>
sourcefn reported_type() -> String
fn reported_type() -> String
Returns the name of this type to report in error messages. Read more
sourceimpl<T: LmdbRawIfUnaligned> LowerExp for Unaligned<T> where
T: LowerExp,
impl<T: LmdbRawIfUnaligned> LowerExp for Unaligned<T> where
T: LowerExp,
sourceimpl<T: LmdbRawIfUnaligned> LowerHex for Unaligned<T> where
T: LowerHex,
impl<T: LmdbRawIfUnaligned> LowerHex for Unaligned<T> where
T: LowerHex,
sourceimpl<T: LmdbRawIfUnaligned + Mul<T>> Mul<Unaligned<T>> for Unaligned<T> where
T::Output: LmdbRawIfUnaligned,
impl<T: LmdbRawIfUnaligned + Mul<T>> Mul<Unaligned<T>> for Unaligned<T> where
T::Output: LmdbRawIfUnaligned,
sourceimpl<T: LmdbRawIfUnaligned + MulAssign<T>> MulAssign<Unaligned<T>> for Unaligned<T>
impl<T: LmdbRawIfUnaligned + MulAssign<T>> MulAssign<Unaligned<T>> for Unaligned<T>
sourcefn mul_assign(&mut self, rhs: Self)
fn mul_assign(&mut self, rhs: Self)
Performs the *=
operation. Read more
sourceimpl<T: LmdbRawIfUnaligned> Octal for Unaligned<T> where
T: Octal,
impl<T: LmdbRawIfUnaligned> Octal for Unaligned<T> where
T: Octal,
sourceimpl<T: LmdbRawIfUnaligned + Ord> Ord for Unaligned<T>
impl<T: LmdbRawIfUnaligned + Ord> Ord for Unaligned<T>
sourceimpl<T: LmdbRawIfUnaligned + PartialOrd<T>> PartialOrd<Unaligned<T>> for Unaligned<T>
impl<T: LmdbRawIfUnaligned + PartialOrd<T>> PartialOrd<Unaligned<T>> for Unaligned<T>
sourcefn partial_cmp(&self, other: &Self) -> Option<Ordering>
fn partial_cmp(&self, other: &Self) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
sourcefn lt(&self, other: &Self) -> bool
fn lt(&self, other: &Self) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
sourcefn le(&self, other: &Self) -> bool
fn le(&self, other: &Self) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
sourceimpl<T: LmdbRawIfUnaligned> Pointer for Unaligned<T> where
T: Pointer,
impl<T: LmdbRawIfUnaligned> Pointer for Unaligned<T> where
T: Pointer,
sourceimpl<T: LmdbRawIfUnaligned + Rem<T>> Rem<Unaligned<T>> for Unaligned<T> where
T::Output: LmdbRawIfUnaligned,
impl<T: LmdbRawIfUnaligned + Rem<T>> Rem<Unaligned<T>> for Unaligned<T> where
T::Output: LmdbRawIfUnaligned,
sourceimpl<T: LmdbRawIfUnaligned + RemAssign<T>> RemAssign<Unaligned<T>> for Unaligned<T>
impl<T: LmdbRawIfUnaligned + RemAssign<T>> RemAssign<Unaligned<T>> for Unaligned<T>
sourcefn rem_assign(&mut self, rhs: Self)
fn rem_assign(&mut self, rhs: Self)
Performs the %=
operation. Read more
sourceimpl<T: LmdbRawIfUnaligned + Shl<T>> Shl<Unaligned<T>> for Unaligned<T> where
T::Output: LmdbRawIfUnaligned,
impl<T: LmdbRawIfUnaligned + Shl<T>> Shl<Unaligned<T>> for Unaligned<T> where
T::Output: LmdbRawIfUnaligned,
sourceimpl<T: LmdbRawIfUnaligned + ShlAssign<T>> ShlAssign<Unaligned<T>> for Unaligned<T>
impl<T: LmdbRawIfUnaligned + ShlAssign<T>> ShlAssign<Unaligned<T>> for Unaligned<T>
sourcefn shl_assign(&mut self, rhs: Self)
fn shl_assign(&mut self, rhs: Self)
Performs the <<=
operation. Read more
sourceimpl<T: LmdbRawIfUnaligned + Shr<T>> Shr<Unaligned<T>> for Unaligned<T> where
T::Output: LmdbRawIfUnaligned,
impl<T: LmdbRawIfUnaligned + Shr<T>> Shr<Unaligned<T>> for Unaligned<T> where
T::Output: LmdbRawIfUnaligned,
sourceimpl<T: LmdbRawIfUnaligned + ShrAssign<T>> ShrAssign<Unaligned<T>> for Unaligned<T>
impl<T: LmdbRawIfUnaligned + ShrAssign<T>> ShrAssign<Unaligned<T>> for Unaligned<T>
sourcefn shr_assign(&mut self, rhs: Self)
fn shr_assign(&mut self, rhs: Self)
Performs the >>=
operation. Read more
sourceimpl<T: LmdbRawIfUnaligned + Sub<T>> Sub<Unaligned<T>> for Unaligned<T> where
T::Output: LmdbRawIfUnaligned,
impl<T: LmdbRawIfUnaligned + Sub<T>> Sub<Unaligned<T>> for Unaligned<T> where
T::Output: LmdbRawIfUnaligned,
sourceimpl<T: LmdbRawIfUnaligned + SubAssign<T>> SubAssign<Unaligned<T>> for Unaligned<T>
impl<T: LmdbRawIfUnaligned + SubAssign<T>> SubAssign<Unaligned<T>> for Unaligned<T>
sourcefn sub_assign(&mut self, rhs: Self)
fn sub_assign(&mut self, rhs: Self)
Performs the -=
operation. Read more
sourceimpl<T: LmdbRawIfUnaligned> UpperExp for Unaligned<T> where
T: UpperExp,
impl<T: LmdbRawIfUnaligned> UpperExp for Unaligned<T> where
T: UpperExp,
sourceimpl<T: LmdbRawIfUnaligned> UpperHex for Unaligned<T> where
T: UpperHex,
impl<T: LmdbRawIfUnaligned> UpperHex for Unaligned<T> where
T: UpperHex,
impl<T: LmdbRawIfUnaligned> Copy for Unaligned<T>
impl<T: LmdbRawIfUnaligned + Eq> Eq for Unaligned<T>
Auto Trait Implementations
impl<T> RefUnwindSafe for Unaligned<T> where
T: RefUnwindSafe,
impl<T> Send for Unaligned<T> where
T: Send,
impl<T> Sync for Unaligned<T> where
T: Sync,
impl<T> Unpin for Unaligned<T> where
T: Unpin,
impl<T> UnwindSafe for Unaligned<T> where
T: UnwindSafe,
Blanket Implementations
sourceimpl<V> AsLmdbBytes for V where
V: LmdbRaw,
impl<V> AsLmdbBytes for V where
V: LmdbRaw,
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<'a, T> DefaultFeatures<'a> for T where
T: 'a + Send + Sync + Clone,
impl<'a, T> DefaultFeatures<'a> for T where
T: 'a + Send + Sync + Clone,
sourcefn clone_boxed(&self) -> Box<dyn DefaultFeatures<'a> + 'a, Global>
fn clone_boxed(&self) -> Box<dyn DefaultFeatures<'a> + 'a, Global>
Clone this value, and then immediately put it into a Box
behind a trait object of this trait. Read more
sourcefn self_address_mut(&mut self) -> *mut ()
fn self_address_mut(&mut self) -> *mut ()
Returns the address of self
. Read more
sourceimpl<V> FromLmdbBytes for V where
V: LmdbRaw,
impl<V> FromLmdbBytes for V where
V: LmdbRaw,
sourceimpl<V> FromReservedLmdbBytes for V where
V: LmdbRaw,
impl<V> FromReservedLmdbBytes for V where
V: LmdbRaw,
sourceimpl<T> LmdbOrdKeyIfUnaligned for T where
T: LmdbRaw + LmdbOrdKey,
impl<T> LmdbOrdKeyIfUnaligned for T where
T: LmdbRaw + LmdbOrdKey,
sourcefn ordered_by_bytes() -> bool
fn ordered_by_bytes() -> bool
Like LmdbOrdKey::ordered_by_bytes()
sourcefn ordered_as_integer() -> bool
fn ordered_as_integer() -> bool
Like LmdbOrdKey::ordered_as_integer()
sourceimpl<T> LmdbRawIfUnaligned for T where
T: LmdbRaw,
impl<T> LmdbRawIfUnaligned for T where
T: LmdbRaw,
sourcefn reported_type() -> String
fn reported_type() -> String
Returns the name of this type to report in error messages. Read more
sourceimpl<'a, T> NonSyncFeatures<'a> for T where
T: 'a + Clone,
impl<'a, T> NonSyncFeatures<'a> for T where
T: 'a + Clone,
sourcefn clone_boxed(&self) -> Box<dyn NonSyncFeatures<'a> + 'a, Global>
fn clone_boxed(&self) -> Box<dyn NonSyncFeatures<'a> + 'a, Global>
Clone this value, and then immediately put it into a Box
behind a trait object of this trait. Read more
sourcefn self_address_mut(&mut self) -> *mut ()
fn self_address_mut(&mut self) -> *mut ()
Returns the address of self
. Read more
sourceimpl<T> SafeBorrow<T> for T where
T: ?Sized,
impl<T> SafeBorrow<T> for T where
T: ?Sized,
sourcefn borrow_replacement(ptr: &T) -> &T
fn borrow_replacement(ptr: &T) -> &T
Given ptr
, which was obtained from a prior call to Self::borrow()
,
return a value with the same nominal lifetime which is guaranteed to
survive mutations to Self
. Read more
sourceimpl<T> ToOwned for T where
T: Clone,
impl<T> ToOwned for T where
T: Clone,
type Owned = T
type Owned = T
The resulting type after obtaining ownership.
sourcefn clone_into(&self, target: &mut T)
fn clone_into(&self, target: &mut T)
toowned_clone_into
)Uses borrowed data to replace owned data, usually by cloning. Read more