Skip to main content

Module 0x2::object_table

Similar to iota::table, an ObjectTable<K, V> is a map-like collection. But unlike iota::table, the values bound to these dynamic fields must be objects themselves. This allows for the objects to still exist within in storage, which may be important for external tools. The difference is otherwise not observable from within Move.

use 0x1::option; use 0x2::dynamic_object_field; use 0x2::object; use 0x2::tx_context;

Resource ObjectTable

struct ObjectTable<K: copy, drop, store, V: store, key> has store, key

Fields
id: object::UID

the ID of this table

size: u64

the number of key-value pairs in the table

Constants

const ETableNotEmpty: u64 = 0;

Function new

Creates a new, empty table

public fun new<K: copy, drop, store, V: store, key>(ctx: &mut tx_context::TxContext): object_table::ObjectTable<K, V>

Implementation

public fun new<K: copy + drop + store, V: key + store>(ctx: &mut TxContext): ObjectTable<K, V> { ObjectTable { id: object::new(ctx), size: 0, } }

Function add

Adds a key-value pair to the table table: &mut ObjectTable<K, V> Aborts with iota::dynamic_field::EFieldAlreadyExists if the table already has an entry with that key k: K.

public fun add<K: copy, drop, store, V: store, key>(table: &mut object_table::ObjectTable<K, V>, k: K, v: V)

Implementation

public fun add<K: copy + drop + store, V: key + store>(table: &mut ObjectTable<K, V>, k: K, v: V) { ofield::add(&mut table.id, k, v); table.size = table.size + 1; }

Function borrow

Immutable borrows the value associated with the key in the table table: &ObjectTable<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, key>(table: &object_table::ObjectTable<K, V>, k: K): &V

Implementation

public fun borrow<K: copy + drop + store, V: key + store>(table: &ObjectTable<K, V>, k: K): &V { ofield::borrow(&table.id, k) }

Function borrow_mut

Mutably borrows the value associated with the key in the table table: &mut ObjectTable<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, key>(table: &mut object_table::ObjectTable<K, V>, k: K): &mut V

Implementation

public fun borrow_mut<K: copy + drop + store, V: key + store>( table: &mut ObjectTable<K, V>, k: K, ): &mut V { ofield::borrow_mut(&mut table.id, k) }

Function remove

Removes the key-value pair in the table table: &mut ObjectTable<K, V> and returns the value. Aborts with iota::dynamic_field::EFieldDoesNotExist if the table does not have an entry with that key k: K.

public fun remove<K: copy, drop, store, V: store, key>(table: &mut object_table::ObjectTable<K, V>, k: K): V

Implementation

public fun remove<K: copy + drop + store, V: key + store>(table: &mut ObjectTable<K, V>, k: K): V { let v = ofield::remove(&mut table.id, k); table.size = table.size - 1; v }

Function contains

Returns true iff there is a value associated with the key k: K in table table: &ObjectTable<K, V>

public fun contains<K: copy, drop, store, V: store, key>(table: &object_table::ObjectTable<K, V>, k: K): bool

Implementation

public fun contains<K: copy + drop + store, V: key + store>(table: &ObjectTable<K, V>, k: K): bool { ofield::exists_<K>(&table.id, k) }

Function length

Returns the size of the table, the number of key-value pairs

public fun length<K: copy, drop, store, V: store, key>(table: &object_table::ObjectTable<K, V>): u64

Implementation

public fun length<K: copy + drop + store, V: key + store>(table: &ObjectTable<K, V>): u64 { table.size }

Function is_empty

Returns true iff the table is empty (if length returns 0)

public fun is_empty<K: copy, drop, store, V: store, key>(table: &object_table::ObjectTable<K, V>): bool

Implementation

public fun is_empty<K: copy + drop + store, V: key + store>(table: &ObjectTable<K, V>): bool { table.size == 0 }

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, key>(table: object_table::ObjectTable<K, V>)

Implementation

public fun destroy_empty<K: copy + drop + store, V: key + store>(table: ObjectTable<K, V>) { let ObjectTable { id, size } = table; assert!(size == 0, ETableNotEmpty); id.delete() }

Function value_id

Returns the ID of the object associated with the key if the table has an entry with key k: K Returns none otherwise

public fun value_id<K: copy, drop, store, V: store, key>(table: &object_table::ObjectTable<K, V>, k: K): option::Option<object::ID>

Implementation

public fun value_id<K: copy + drop + store, V: key + store>( table: &ObjectTable<K, V>, k: K, ): Option<ID> { ofield::id(&table.id, k) }