feat(tvix/tools/weave): init
Scalable tracing GC for the cache.nixos.org dataset. Change-Id: I6c7852796f28e1a1c7607384ffb55f44407e1185 Reviewed-on: https://cl.tvl.fyi/c/depot/+/10765 Tested-by: BuildkiteCI Reviewed-by: flokli <flokli@flokli.de>
This commit is contained in:
parent
692f2bfb1c
commit
e3860689ba
9 changed files with 11471 additions and 0 deletions
27
tvix/tools/weave/src/bytes.rs
Normal file
27
tvix/tools/weave/src/bytes.rs
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
use owning_ref::{OwningRef, StableAddress};
|
||||
use polars::export::arrow::buffer::Buffer;
|
||||
use std::ops::Deref;
|
||||
|
||||
/// An shared `[[u8; N]]` backed by a Polars [Buffer].
|
||||
pub type FixedBytes<const N: usize> = OwningRef<Bytes, [[u8; N]]>;
|
||||
|
||||
/// Wrapper struct to make [Buffer] implement [StableAddress].
|
||||
/// TODO(edef): upstream the `impl`
|
||||
pub struct Bytes(pub Buffer<u8>);
|
||||
|
||||
/// SAFETY: [Buffer] is always an Arc+Vec indirection.
|
||||
unsafe impl StableAddress for Bytes {}
|
||||
|
||||
impl Bytes {
|
||||
pub fn map<U: ?Sized>(self, f: impl FnOnce(&[u8]) -> &U) -> OwningRef<Self, U> {
|
||||
OwningRef::new(self).map(f)
|
||||
}
|
||||
}
|
||||
|
||||
impl Deref for Bytes {
|
||||
type Target = [u8];
|
||||
|
||||
fn deref(&self) -> &Self::Target {
|
||||
&*self.0
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue