Skip to content

Commit b8d5cb6

Browse files
committed
iterators and utilities
1 parent 3ffc938 commit b8d5cb6

File tree

6 files changed

+511
-189
lines changed

6 files changed

+511
-189
lines changed

aptos-move/framework/aptos-framework/doc/big_ordered_map.md

Lines changed: 309 additions & 44 deletions
Large diffs are not rendered by default.

aptos-move/framework/aptos-framework/doc/ordered_map.md

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ allowing cleaner iterator APIs.
3939
- [Function `add`](#0x1_ordered_map_add)
4040
- [Function `upsert`](#0x1_ordered_map_upsert)
4141
- [Function `remove`](#0x1_ordered_map_remove)
42+
- [Function `remove_or_none`](#0x1_ordered_map_remove_or_none)
4243
- [Function `contains`](#0x1_ordered_map_contains)
4344
- [Function `borrow`](#0x1_ordered_map_borrow)
4445
- [Function `borrow_mut`](#0x1_ordered_map_borrow_mut)
@@ -77,7 +78,7 @@ allowing cleaner iterator APIs.
7778
- [Function `destroy`](#0x1_ordered_map_destroy)
7879
- [Function `for_each`](#0x1_ordered_map_for_each)
7980
- [Function `for_each_ref`](#0x1_ordered_map_for_each_ref)
80-
- [Function `for_each_ref_friend`](#0x1_ordered_map_for_each_ref_friend)
81+
- [Function `for_each_ref`](#0x1_ordered_map_for_each_ref_friend)
8182
- [Function `for_each_mut`](#0x1_ordered_map_for_each_mut)
8283
- [Function `new_iter`](#0x1_ordered_map_new_iter)
8384
- [Function `binary_search`](#0x1_ordered_map_binary_search)
@@ -515,6 +516,39 @@ Aborts with EKEY_NOT_FOUND if <code>key</code> doesn't exist.
515516

516517

517518

519+
</details>
520+
521+
<a id="0x1_ordered_map_remove_or_none"></a>
522+
523+
## Function `remove_or_none`
524+
525+
Remove a key/value pair from the map.
526+
Returns none if <code>key</code> doesn't exist.
527+
528+
529+
<pre><code><b>public</b> <b>fun</b> <a href="ordered_map.md#0x1_ordered_map_remove_or_none">remove_or_none</a>&lt;K: drop, V&gt;(self: &<b>mut</b> <a href="ordered_map.md#0x1_ordered_map_OrderedMap">ordered_map::OrderedMap</a>&lt;K, V&gt;, key: &K): <a href="../../aptos-stdlib/../move-stdlib/doc/option.md#0x1_option_Option">option::Option</a>&lt;V&gt;
530+
</code></pre>
531+
532+
533+
534+
<details>
535+
<summary>Implementation</summary>
536+
537+
538+
<pre><code><b>public</b> <b>fun</b> <a href="ordered_map.md#0x1_ordered_map_remove_or_none">remove_or_none</a>&lt;K: drop, V&gt;(self: &<b>mut</b> <a href="ordered_map.md#0x1_ordered_map_OrderedMap">OrderedMap</a>&lt;K, V&gt;, key: &K): Option&lt;V&gt; {
539+
<b>let</b> len = self.entries.<a href="ordered_map.md#0x1_ordered_map_length">length</a>();
540+
<b>let</b> index = <a href="ordered_map.md#0x1_ordered_map_binary_search">binary_search</a>(key, &self.entries, 0, len);
541+
<b>if</b> (index &lt; len && key == &self.entries[index].key) {
542+
<b>let</b> <a href="ordered_map.md#0x1_ordered_map_Entry">Entry</a> { key: _, value } = self.entries.<a href="ordered_map.md#0x1_ordered_map_remove">remove</a>(index);
543+
<a href="../../aptos-stdlib/../move-stdlib/doc/option.md#0x1_option_some">option::some</a>(value)
544+
} <b>else</b> {
545+
<a href="../../aptos-stdlib/../move-stdlib/doc/option.md#0x1_option_none">option::none</a>()
546+
}
547+
}
548+
</code></pre>
549+
550+
551+
518552
</details>
519553

520554
<a id="0x1_ordered_map_contains"></a>
@@ -1741,11 +1775,11 @@ to O(n).
17411775

17421776
<a id="0x1_ordered_map_for_each_ref_friend"></a>
17431777

1744-
## Function `for_each_ref_friend`
1778+
## Function `for_each_ref`
17451779

17461780

17471781

1748-
<pre><code><b>public</b>(<b>friend</b>) <b>fun</b> <a href="ordered_map.md#0x1_ordered_map_for_each_ref_friend">for_each_ref_friend</a>&lt;K: <b>copy</b>, drop, V&gt;(self: &<a href="ordered_map.md#0x1_ordered_map_OrderedMap">ordered_map::OrderedMap</a>&lt;K, V&gt;, f: |&K, &V|)
1782+
<pre><code><b>public</b>(<b>friend</b>) <b>fun</b> <a href="ordered_map.md#0x1_ordered_map_for_each_ref_friend">for_each_ref</a>&lt;K: <b>copy</b>, drop, V&gt;(self: &<a href="ordered_map.md#0x1_ordered_map_OrderedMap">ordered_map::OrderedMap</a>&lt;K, V&gt;, f: |&K, &V|)
17491783
</code></pre>
17501784

17511785

@@ -1754,7 +1788,7 @@ to O(n).
17541788
<summary>Implementation</summary>
17551789

17561790

1757-
<pre><code><b>public</b>(<b>friend</b>) inline <b>fun</b> <a href="ordered_map.md#0x1_ordered_map_for_each_ref_friend">for_each_ref_friend</a>&lt;K: <b>copy</b> + drop, V&gt;(self: &<a href="ordered_map.md#0x1_ordered_map_OrderedMap">OrderedMap</a>&lt;K, V&gt;, f: |&K, &V|) {
1791+
<pre><code><b>public</b>(<b>friend</b>) inline <b>fun</b> <a href="ordered_map.md#0x1_ordered_map_for_each_ref_friend">for_each_ref</a>&lt;K: <b>copy</b> + drop, V&gt;(self: &<a href="ordered_map.md#0x1_ordered_map_OrderedMap">OrderedMap</a>&lt;K, V&gt;, f: |&K, &V|) {
17581792
<b>let</b> iter = self.<a href="ordered_map.md#0x1_ordered_map_new_begin_iter">new_begin_iter</a>();
17591793
<b>while</b> (!iter.<a href="ordered_map.md#0x1_ordered_map_iter_is_end">iter_is_end</a>(self)) {
17601794
f(iter.<a href="ordered_map.md#0x1_ordered_map_iter_borrow_key">iter_borrow_key</a>(self), iter.<a href="ordered_map.md#0x1_ordered_map_iter_borrow">iter_borrow</a>(self));

0 commit comments

Comments
 (0)