跳转到内容

slots_storage - [mainnet]

此内容尚不支持你的语言。

use 0x1::table;
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;
}