pub trait Representable: Copy + Debug {
    type PageOffsets: Iterator<Item = u64>;

    fn onpage_size(&self) -> u16;
    unsafe fn write_value(&self, p: *mut u8);
    unsafe fn read_value(p: *const u8) -> Self;
    unsafe fn cmp_value<T: LoadPage>(&self, txn: &T, x: Self) -> Ordering;
    fn page_offsets(&self) -> Self::PageOffsets;

    fn alignment() -> Alignment { ... }
    unsafe fn skip(p: *mut u8) -> *mut u8 { ... }
    fn drop_value<T, R: Rng>(
        &self,
        _: &mut MutTxn<'_, T>,
        _: &mut R
    ) -> Result<(), Error> { ... } }
Expand description

Types that can be stored in a Sanakirja database, as keys or values. Some care must be taken when storing things.

Required Associated Types

An iterator over the offsets to pages contained in this value. Only values from this crate can generate non-empty iterators, but combined values (like tuples) must chain the iterators returned by method page_offsets.

Required Methods

How much space this value occupies on the page (not counting alignment padding).

Write this value to a u8 pointer, guaranteed to be a multiple of self.alignment().

Read value from an onpage pointer, guaranteed to be a multiple of self.alignment().

Compare a value with an onpage value. The current transaction is sometimes helpful, for instance when the page only stores a pointer to another page.

If this value is an offset to another page at offset offset, return Some(offset). Return None else.

Provided Methods

Alignment of this type. Allowed values are 1, 2, 4 and 8.

First pointer strictly after this value’s pointer. The default implementation is basically p.offset(self.onpage_size() as isize), but their might be more efficient implementations in some cases.

How to free the pages used by this value. The default implementation doesn’t do anything, which is fine for types stored directly on B tree pages.

Implementations on Foreign Types

Implementors