Module 0x2::linked_table
Similar to iota::table
but the values are linked together, allowing for ordered insertion and
removal
- Resource
LinkedTable
- Struct
Node
- Constants
- Function
new
- Function
front
- Function
back
- Function
push_front
- Function
push_back
- Function
borrow
- Function
borrow_mut
- Function
prev
- Function
next
- Function
remove
- Function
pop_front
- Function
pop_back
- Function
contains
- Function
length
- Function
is_empty
- Function
destroy_empty
- Function
drop
use 0x1::option;
use 0x2::dynamic_field;
use 0x2::object;
use 0x2::tx_context;
Resource LinkedTable
struct LinkedTable<K: copy, drop, store, V: store> has store, key
Fields
Struct Node
struct Node<K: copy, drop, store, V: store> has store
Fields
Constants
const ETableIsEmpty: u64 = 1;
const ETableNotEmpty: u64 = 0;
Function new
Creates a new, empty table
public fun new<K: copy, drop, store, V: store>(ctx: &mut tx_context::TxContext): linked_table::LinkedTable<K, V>
Implementation
Function front
Returns the key for the first element in the table, or None if the table is empty
public fun front<K: copy, drop, store, V: store>(table: &linked_table::LinkedTable<K, V>): &option::Option<K>
Implementation
Function back
Returns the key for the last element in the table, or None if the table is empty
public fun back<K: copy, drop, store, V: store>(table: &linked_table::LinkedTable<K, V>): &option::Option<K>
Implementation
Function push_front
Inserts a key-value pair at the front of the table, i.e. the newly inserted pair will be
the first element in the table
Aborts with iota::dynamic_field::EFieldAlreadyExists
if the table already has an entry with
that key k: K
.
public fun push_front<K: copy, drop, store, V: store>(table: &mut linked_table::LinkedTable<K, V>, k: K, value: V)
Implementation
Function push_back
Inserts a key-value pair at the back of the table, i.e. the newly inserted pair will be
the last element in the table
Aborts with iota::dynamic_field::EFieldAlreadyExists
if the table already has an entry with
that key k: K
.
public fun push_back<K: copy, drop, store, V: store>(table: &mut linked_table::LinkedTable<K, V>, k: K, value: V)
Implementation
Function borrow
Immutable borrows the value associated with the key in the table table: &LinkedTable<K, V>
.
Aborts with iota::dynamic_field::EFieldDoesNotExist
if the table does not have an entry with
that key k: K
.
public fun borrow<K: copy, drop, store, V: store>(table: &linked_table::LinkedTable<K, V>, k: K): &V
Implementation
Function borrow_mut
Mutably borrows the value associated with the key in the table table: &mut LinkedTable<K, V>
.
Aborts with iota::dynamic_field::EFieldDoesNotExist
if the table does not have an entry with
that key k: K
.
public fun borrow_mut<K: copy, drop, store, V: store>(table: &mut linked_table::LinkedTable<K, V>, k: K): &mut V
Implementation
Function prev
Borrows the key for the previous entry of the specified key k: K
in the table
table: &LinkedTable<K, V>
. Returns None if the entry does not have a predecessor.
Aborts with iota::dynamic_field::EFieldDoesNotExist
if the table does not have an entry with
that key k: K
public fun prev<K: copy, drop, store, V: store>(table: &linked_table::LinkedTable<K, V>, k: K): &option::Option<K>
Implementation
Function next
Borrows the key for the next entry of the specified key k: K
in the table
table: &LinkedTable<K, V>
. Returns None if the entry does not have a predecessor.
Aborts with iota::dynamic_field::EFieldDoesNotExist
if the table does not have an entry with
that key k: K
public fun next<K: copy, drop, store, V: store>(table: &linked_table::LinkedTable<K, V>, k: K): &option::Option<K>
Implementation
Function remove
Removes the key-value pair in the table table: &mut LinkedTable<K, V>
and returns the value.
This splices the element out of the ordering.
Aborts with iota::dynamic_field::EFieldDoesNotExist
if the table does not have an entry with
that key k: K
. Note: this is also what happens when the table is empty.
public fun remove<K: copy, drop, store, V: store>(table: &mut linked_table::LinkedTable<K, V>, k: K): V
Implementation
Function pop_front
Removes the front of the table table: &mut LinkedTable<K, V>
and returns the value.
Aborts with ETableIsEmpty
if the table is empty
public fun pop_front<K: copy, drop, store, V: store>(table: &mut linked_table::LinkedTable<K, V>): (K, V)
Implementation
Function pop_back
Removes the back of the table table: &mut LinkedTable<K, V>
and returns the value.
Aborts with ETableIsEmpty
if the table is empty
public fun pop_back<K: copy, drop, store, V: store>(table: &mut linked_table::LinkedTable<K, V>): (K, V)
Implementation
Function contains
Returns true iff there is a value associated with the key k: K
in table
table: &LinkedTable<K, V>
public fun contains<K: copy, drop, store, V: store>(table: &linked_table::LinkedTable<K, V>, k: K): bool
Implementation
Function length
Returns the size of the table, the number of key-value pairs
public fun length<K: copy, drop, store, V: store>(table: &linked_table::LinkedTable<K, V>): u64
Implementation
Function is_empty
Returns true iff the table is empty (if length
returns 0
)
public fun is_empty<K: copy, drop, store, V: store>(table: &linked_table::LinkedTable<K, V>): bool
Implementation
Function destroy_empty
Destroys an empty table
Aborts with ETableNotEmpty
if the table still contains values
public fun destroy_empty<K: copy, drop, store, V: store>(table: linked_table::LinkedTable<K, V>)
Implementation
Function drop
Drop a possibly non-empty table.
Usable only if the value type V
has the drop
ability
public fun drop<K: copy, drop, store, V: drop, store>(table: linked_table::LinkedTable<K, V>)