slots_storage - [mainnet]
use 0x1::table;
Enum Link
enum Link<T: store> has store
Variants
Some
Fields
-
value: T
Empty
Fields
-
next: u64
Constants
const NULL_INDEX: u64 = 0;
Structs
SlotsStorage
struct SlotsStorage<T: store> has store
Fields
-
slots: table::Table<u64, slots_storage::Link<T>>
-
new_slot_index: u64
-
never_deallocate: bool
-
reuse_head_index: u64
TransientSlot
struct TransientSlot
Fields
-
slot_index: u64
Functions
new_storage_slots
public fun new_storage_slots<T: store>(): slots_storage::SlotsStorage<T>
Implementation
public fun new_storage_slots<T: store>(): SlotsStorage<T> { SlotsStorage { slots: table::new(), new_slot_index: 1, never_deallocate: false, reuse_head_index: NULL_INDEX, }}
add
public fun add<T: store>(self: &mut slots_storage::SlotsStorage<T>, val: T): u64
Implementation
public fun add<T: store>(self: &mut SlotsStorage<T>, val: T): u64 { let slot_index = self.new_slot_index; self.new_slot_index = self.new_slot_index + 1; self.slots.add(slot_index, Link::Some { value: val }); slot_index}
remove
public fun remove<T: store>(self: &mut slots_storage::SlotsStorage<T>, slot_index: u64): T
Implementation
public fun remove<T: store>(self: &mut SlotsStorage<T>, slot_index: u64): T { let Link::Some { value } = self.slots.remove(slot_index); value}
destroy_empty
public fun destroy_empty<T: store>(self: slots_storage::SlotsStorage<T>)
Implementation
public fun destroy_empty<T: store>(self: SlotsStorage<T>) { let SlotsStorage { slots, new_slot_index: _, never_deallocate: _, reuse_head_index: _, } = self; slots.destroy_empty();}
borrow
public fun borrow<T: store>(self: &slots_storage::SlotsStorage<T>, slot_index: u64): &T
Implementation
public fun borrow<T: store>(self: &SlotsStorage<T>, slot_index: u64): &T { &self.slots.borrow(slot_index).value}
borrow_mut
public fun borrow_mut<T: store>(self: &mut slots_storage::SlotsStorage<T>, slot_index: u64): &mut T
Implementation
public fun borrow_mut<T: store>(self: &mut SlotsStorage<T>, slot_index: u64): &mut T { &mut self.slots.borrow_mut(slot_index).value}
get_index
public fun get_index(self: &slots_storage::TransientSlot): u64
Implementation
public fun get_index(self: &TransientSlot): u64 { self.slot_index}
create_transient_slot
public fun create_transient_slot<T: store>(self: &mut slots_storage::SlotsStorage<T>): slots_storage::TransientSlot
Implementation
public fun create_transient_slot<T: store>(self: &mut SlotsStorage<T>): TransientSlot { let slot_index = self.new_slot_index; self.new_slot_index = self.new_slot_index + 1; TransientSlot { slot_index, }}
add_transient_slot
public fun add_transient_slot<T: store>(self: &mut slots_storage::SlotsStorage<T>, slot: slots_storage::TransientSlot, val: T)
Implementation
public fun add_transient_slot<T: store>(self: &mut SlotsStorage<T>, slot: TransientSlot, val: T) { let TransientSlot { slot_index } = slot; self.slots.add(slot_index, Link::Some { value: val });}
transiently_remove
public fun transiently_remove<T: store>(self: &mut slots_storage::SlotsStorage<T>, slot_index: u64): (slots_storage::TransientSlot, T)
Implementation
public fun transiently_remove<T: store>(self: &mut SlotsStorage<T>, slot_index: u64): (TransientSlot, T) { let Link::Some { value } = self.slots.remove(slot_index); (TransientSlot { slot_index }, value)}
destroy_transient_slot
public fun destroy_transient_slot(self: slots_storage::TransientSlot)
Implementation
public fun destroy_transient_slot(self: TransientSlot) { let TransientSlot { slot_index: _ } = self;}