[−][src]Trait frame_support::storage::StorageDoubleMap
An implementation of a map with a two keys.
It provides an important ability to efficiently remove all entries that have a common first key.
Details on implementation can be found at
[generator::StorageDoubleMap
]
Associated Types
type Query
The type that get/take returns.
Required methods
fn hashed_key_for<KArg1, KArg2>(k1: KArg1, k2: KArg2) -> Vec<u8>ⓘ where
KArg1: EncodeLike<K1>,
KArg2: EncodeLike<K2>,
KArg1: EncodeLike<K1>,
KArg2: EncodeLike<K2>,
Get the storage key used to fetch a value corresponding to a specific key.
fn contains_key<KArg1, KArg2>(k1: KArg1, k2: KArg2) -> bool where
KArg1: EncodeLike<K1>,
KArg2: EncodeLike<K2>,
KArg1: EncodeLike<K1>,
KArg2: EncodeLike<K2>,
Does the value (explicitly) exist in storage?
fn get<KArg1, KArg2>(k1: KArg1, k2: KArg2) -> Self::Query where
KArg1: EncodeLike<K1>,
KArg2: EncodeLike<K2>,
KArg1: EncodeLike<K1>,
KArg2: EncodeLike<K2>,
Load the value associated with the given key from the double map.
fn take<KArg1, KArg2>(k1: KArg1, k2: KArg2) -> Self::Query where
KArg1: EncodeLike<K1>,
KArg2: EncodeLike<K2>,
KArg1: EncodeLike<K1>,
KArg2: EncodeLike<K2>,
Take a value from storage, removing it afterwards.
fn swap<XKArg1, XKArg2, YKArg1, YKArg2>(
x_k1: XKArg1,
x_k2: XKArg2,
y_k1: YKArg1,
y_k2: YKArg2
) where
XKArg1: EncodeLike<K1>,
XKArg2: EncodeLike<K2>,
YKArg1: EncodeLike<K1>,
YKArg2: EncodeLike<K2>,
x_k1: XKArg1,
x_k2: XKArg2,
y_k1: YKArg1,
y_k2: YKArg2
) where
XKArg1: EncodeLike<K1>,
XKArg2: EncodeLike<K2>,
YKArg1: EncodeLike<K1>,
YKArg2: EncodeLike<K2>,
Swap the values of two key-pairs.
fn insert<KArg1, KArg2, VArg>(k1: KArg1, k2: KArg2, val: VArg) where
KArg1: EncodeLike<K1>,
KArg2: EncodeLike<K2>,
VArg: EncodeLike<V>,
KArg1: EncodeLike<K1>,
KArg2: EncodeLike<K2>,
VArg: EncodeLike<V>,
Store a value to be associated with the given keys from the double map.
fn remove<KArg1, KArg2>(k1: KArg1, k2: KArg2) where
KArg1: EncodeLike<K1>,
KArg2: EncodeLike<K2>,
KArg1: EncodeLike<K1>,
KArg2: EncodeLike<K2>,
Remove the value under the given keys.
fn remove_prefix<KArg1: ?Sized>(k1: KArg1) where
KArg1: EncodeLike<K1>,
KArg1: EncodeLike<K1>,
Remove all values under the first key.
fn iter_prefix_values<KArg1: ?Sized>(k1: KArg1) -> PrefixIterator<V>ⓘNotable traits for PrefixIterator<Value>
impl<Value: Decode> Iterator for PrefixIterator<Value> type Item = Value;
where
KArg1: EncodeLike<K1>,
Notable traits for PrefixIterator<Value>
impl<Value: Decode> Iterator for PrefixIterator<Value> type Item = Value;
KArg1: EncodeLike<K1>,
Iterate over values that share the first key.
fn mutate<KArg1, KArg2, R, F>(k1: KArg1, k2: KArg2, f: F) -> R where
KArg1: EncodeLike<K1>,
KArg2: EncodeLike<K2>,
F: FnOnce(&mut Self::Query) -> R,
KArg1: EncodeLike<K1>,
KArg2: EncodeLike<K2>,
F: FnOnce(&mut Self::Query) -> R,
Mutate the value under the given keys.
fn try_mutate<KArg1, KArg2, R, E, F>(k1: KArg1, k2: KArg2, f: F) -> Result<R, E> where
KArg1: EncodeLike<K1>,
KArg2: EncodeLike<K2>,
F: FnOnce(&mut Self::Query) -> Result<R, E>,
KArg1: EncodeLike<K1>,
KArg2: EncodeLike<K2>,
F: FnOnce(&mut Self::Query) -> Result<R, E>,
Mutate the value under the given keys when the closure returns Ok
.
fn append<Item, EncodeLikeItem, KArg1, KArg2>(
k1: KArg1,
k2: KArg2,
item: EncodeLikeItem
) where
KArg1: EncodeLike<K1>,
KArg2: EncodeLike<K2>,
Item: Encode,
EncodeLikeItem: EncodeLike<Item>,
V: StorageAppend<Item>,
k1: KArg1,
k2: KArg2,
item: EncodeLikeItem
) where
KArg1: EncodeLike<K1>,
KArg2: EncodeLike<K2>,
Item: Encode,
EncodeLikeItem: EncodeLike<Item>,
V: StorageAppend<Item>,
Append the given item to the value in the storage.
V
is required to implement StorageAppend
.
Warning
If the storage item is not encoded properly, the storage will be overwritten
and set to [item]
. Any default value set for the storage item will be ignored
on overwrite.
fn migrate_keys<OldHasher1: StorageHasher, OldHasher2: StorageHasher, KeyArg1: EncodeLike<K1>, KeyArg2: EncodeLike<K2>>(
key1: KeyArg1,
key2: KeyArg2
) -> Option<V>
key1: KeyArg1,
key2: KeyArg2
) -> Option<V>
Migrate an item with the given key1
and key2
from defunct OldHasher1
and
OldHasher2
to the current hashers.
If the key doesn't exist, then it's a no-op. If it does, then it returns its value.
Provided methods
fn decode_len<KArg1, KArg2>(key1: KArg1, key2: KArg2) -> Option<usize> where
KArg1: EncodeLike<K1>,
KArg2: EncodeLike<K2>,
V: StorageDecodeLength,
KArg1: EncodeLike<K1>,
KArg2: EncodeLike<K2>,
V: StorageDecodeLength,
Read the length of the storage value without decoding the entire value under the
given key1
and key2
.
V
is required to implement StorageDecodeLength
.
If the value does not exists or it fails to decode the length, None
is returned.
Otherwise Some(len)
is returned.
Warning
None
does not mean that get()
does not return a value. The default value is completly
ignored by this function.
Implementors
impl<K1, K2, V, G> StorageDoubleMap<K1, K2, V> for G where
K1: FullEncode,
K2: FullEncode,
V: FullCodec,
G: StorageDoubleMap<K1, K2, V>,
[src]
K1: FullEncode,
K2: FullEncode,
V: FullCodec,
G: StorageDoubleMap<K1, K2, V>,
type Query = G::Query
fn hashed_key_for<KArg1, KArg2>(k1: KArg1, k2: KArg2) -> Vec<u8>ⓘ where
KArg1: EncodeLike<K1>,
KArg2: EncodeLike<K2>,
[src]
KArg1: EncodeLike<K1>,
KArg2: EncodeLike<K2>,
fn contains_key<KArg1, KArg2>(k1: KArg1, k2: KArg2) -> bool where
KArg1: EncodeLike<K1>,
KArg2: EncodeLike<K2>,
[src]
KArg1: EncodeLike<K1>,
KArg2: EncodeLike<K2>,
fn get<KArg1, KArg2>(k1: KArg1, k2: KArg2) -> Self::Query where
KArg1: EncodeLike<K1>,
KArg2: EncodeLike<K2>,
[src]
KArg1: EncodeLike<K1>,
KArg2: EncodeLike<K2>,
fn take<KArg1, KArg2>(k1: KArg1, k2: KArg2) -> Self::Query where
KArg1: EncodeLike<K1>,
KArg2: EncodeLike<K2>,
[src]
KArg1: EncodeLike<K1>,
KArg2: EncodeLike<K2>,
fn swap<XKArg1, XKArg2, YKArg1, YKArg2>(
x_k1: XKArg1,
x_k2: XKArg2,
y_k1: YKArg1,
y_k2: YKArg2
) where
XKArg1: EncodeLike<K1>,
XKArg2: EncodeLike<K2>,
YKArg1: EncodeLike<K1>,
YKArg2: EncodeLike<K2>,
[src]
x_k1: XKArg1,
x_k2: XKArg2,
y_k1: YKArg1,
y_k2: YKArg2
) where
XKArg1: EncodeLike<K1>,
XKArg2: EncodeLike<K2>,
YKArg1: EncodeLike<K1>,
YKArg2: EncodeLike<K2>,
fn insert<KArg1, KArg2, VArg>(k1: KArg1, k2: KArg2, val: VArg) where
KArg1: EncodeLike<K1>,
KArg2: EncodeLike<K2>,
VArg: EncodeLike<V>,
[src]
KArg1: EncodeLike<K1>,
KArg2: EncodeLike<K2>,
VArg: EncodeLike<V>,
fn remove<KArg1, KArg2>(k1: KArg1, k2: KArg2) where
KArg1: EncodeLike<K1>,
KArg2: EncodeLike<K2>,
[src]
KArg1: EncodeLike<K1>,
KArg2: EncodeLike<K2>,
fn remove_prefix<KArg1>(k1: KArg1) where
KArg1: EncodeLike<K1>,
[src]
KArg1: EncodeLike<K1>,
fn iter_prefix_values<KArg1: ?Sized>(k1: KArg1) -> PrefixIterator<V>ⓘNotable traits for PrefixIterator<Value>
impl<Value: Decode> Iterator for PrefixIterator<Value> type Item = Value;
where
KArg1: EncodeLike<K1>,
[src]
Notable traits for PrefixIterator<Value>
impl<Value: Decode> Iterator for PrefixIterator<Value> type Item = Value;
KArg1: EncodeLike<K1>,
fn mutate<KArg1, KArg2, R, F>(k1: KArg1, k2: KArg2, f: F) -> R where
KArg1: EncodeLike<K1>,
KArg2: EncodeLike<K2>,
F: FnOnce(&mut Self::Query) -> R,
[src]
KArg1: EncodeLike<K1>,
KArg2: EncodeLike<K2>,
F: FnOnce(&mut Self::Query) -> R,
fn try_mutate<KArg1, KArg2, R, E, F>(k1: KArg1, k2: KArg2, f: F) -> Result<R, E> where
KArg1: EncodeLike<K1>,
KArg2: EncodeLike<K2>,
F: FnOnce(&mut Self::Query) -> Result<R, E>,
[src]
KArg1: EncodeLike<K1>,
KArg2: EncodeLike<K2>,
F: FnOnce(&mut Self::Query) -> Result<R, E>,
fn append<Item, EncodeLikeItem, KArg1, KArg2>(
k1: KArg1,
k2: KArg2,
item: EncodeLikeItem
) where
KArg1: EncodeLike<K1>,
KArg2: EncodeLike<K2>,
Item: Encode,
EncodeLikeItem: EncodeLike<Item>,
V: StorageAppend<Item>,
[src]
k1: KArg1,
k2: KArg2,
item: EncodeLikeItem
) where
KArg1: EncodeLike<K1>,
KArg2: EncodeLike<K2>,
Item: Encode,
EncodeLikeItem: EncodeLike<Item>,
V: StorageAppend<Item>,
fn migrate_keys<OldHasher1: StorageHasher, OldHasher2: StorageHasher, KeyArg1: EncodeLike<K1>, KeyArg2: EncodeLike<K2>>(
key1: KeyArg1,
key2: KeyArg2
) -> Option<V>
[src]
key1: KeyArg1,
key2: KeyArg2
) -> Option<V>