Module iota::vec_set
- Struct
VecSet - Constants
- Function
empty - Function
singleton - Function
insert - Function
remove - Function
contains - Function
size - Function
is_empty - Function
into_keys - Function
from_keys - Function
keys - Function
get_idx_opt - Function
get_idx
use std::option;
use std::vector;
Struct VecSet
A set data structure backed by a vector. The set is guaranteed not to contain duplicate keys. All operations are O(N) in the size of the set. The intention of this data structure is only to provide the convenience of programming against a set API. Sets that need sorted iteration rather than insertion order iteration should be handwritten.
public struct VecSet<K: copy, drop> has copy, drop, store
Fields
contents: vector<K>
Constants
This key already exists in the map
const EKeyAlreadyExists: u64 = 0;
This key does not exist in the map
const EKeyDoesNotExist: u64 = 1;
Function empty
Create an empty VecSet
public fun empty<K: copy, drop>(): iota::vec_set::VecSet<K>
Function singleton
Create a singleton VecSet that only contains one element.
public fun singleton<K: copy, drop>(key: K): iota::vec_set::VecSet<K>
Implementation
Function insert
Insert a key into self.
Aborts if key is already present in self.
public fun insert<K: copy, drop>(self: &mut iota::vec_set::VecSet<K>, key: K)
Implementation
public fun insert<K: copy + drop>(self: &mut VecSet<K>, key: K) {
assert!(!self.contains(&key), EKeyAlreadyExists);
self.contents.push_back(key)
}
Function remove
Remove the entry key from self. Aborts if key is not present in self.
public fun remove<K: copy, drop>(self: &mut iota::vec_set::VecSet<K>, key: &K)
Implementation
Function contains
Return true if self contains an entry for key, false otherwise
public fun contains<K: copy, drop>(self: &iota::vec_set::VecSet<K>, key: &K): bool
Implementation
public fun contains<K: copy + drop>(self: &VecSet<K>, key: &K): bool {
get_idx_opt(self, key).is_some()
}
Function size
Return the number of entries in self
public fun size<K: copy, drop>(self: &iota::vec_set::VecSet<K>): u64
Function is_empty
Return true if self has 0 elements, false otherwise
public fun is_empty<K: copy, drop>(self: &iota::vec_set::VecSet<K>): bool
Function into_keys
Unpack self into vectors of keys.
The output keys are stored in insertion order, not sorted.
public fun into_keys<K: copy, drop>(self: iota::vec_set::VecSet<K>): vector<K>
Implementation
Function from_keys
Construct a new VecSet from a vector of keys.
The keys are stored in insertion order (the original keys ordering)
and are not sorted.
public fun from_keys<K: copy, drop>(keys: vector<K>): iota::vec_set::VecSet<K>
Implementation
Function keys
Borrow the contents of the VecSet to access content by index
without unpacking. The contents are stored in insertion order,
not sorted.
public fun keys<K: copy, drop>(self: &iota::vec_set::VecSet<K>): &vector<K>
Function get_idx_opt
Find the index of key in self. Return None if key is not in self.
Note that keys are stored in insertion order, not sorted.
fun get_idx_opt<K: copy, drop>(self: &iota::vec_set::VecSet<K>, key: &K): std::option::Option<u64>
Implementation
fun get_idx_opt<K: copy + drop>(self: &VecSet<K>, key: &K): Option<u64> {
let mut i = 0;
let n = size(self);
while (i < n) {
if (&self.contents[i] == key) {
return option::some(i)
};
i = i + 1;
};
option::none()
}
Function get_idx
Find the index of key in self. Aborts if key is not in self.
Note that map entries are stored in insertion order, not sorted.
fun get_idx<K: copy, drop>(self: &iota::vec_set::VecSet<K>, key: &K): u64
Implementation
fun get_idx<K: copy + drop>(self: &VecSet<K>, key: &K): u64 {
let idx_opt = get_idx_opt(self, key);
assert!(idx_opt.is_some(), EKeyDoesNotExist);
idx_opt.destroy_some()
}