mirror of
https://github.com/qdrant/qdrant.git
synced 2026-08-01 23:50:55 -05:00
* move quantization repo * are you happy fmt * are you happy clippy * remove dumping pq to image * workspace deps * are you happy clippy
27 lines
821 B
Rust
27 lines
821 B
Rust
use std::mem;
|
|
use std::mem::size_of;
|
|
|
|
pub fn transmute_to_u8_slice<T>(v: &[T]) -> &[u8] {
|
|
unsafe { std::slice::from_raw_parts(v.as_ptr().cast::<u8>(), mem::size_of_val(v)) }
|
|
}
|
|
|
|
pub fn transmute_from_u8_to_slice<T>(data: &[u8]) -> &[T] {
|
|
debug_assert_eq!(data.len() % size_of::<T>(), 0);
|
|
|
|
assert_eq!(
|
|
data.as_ptr().align_offset(mem::align_of::<T>()),
|
|
0,
|
|
"transmuting byte slice 0x{:p} into slice of {}: \
|
|
required alignment is {} bytes, \
|
|
byte slice misaligned by {} bytes",
|
|
data.as_ptr(),
|
|
std::any::type_name::<T>(),
|
|
mem::align_of::<T>(),
|
|
data.as_ptr().align_offset(mem::align_of::<T>()),
|
|
);
|
|
|
|
let len = data.len() / size_of::<T>();
|
|
let ptr = data.as_ptr().cast::<T>();
|
|
unsafe { std::slice::from_raw_parts(ptr, len) }
|
|
}
|