external-crates/move/crates/move-stdlib/docs/std/bit_vector.md
<a name="std_bit_vector"></a>
std::bit_vectorBitVectornewsetunsetshift_leftis_index_setlengthlongest_set_sequence_starting_at<a name="std_bit_vector_BitVector"></a>
BitVector<a name="@Constants_0"></a>
<a name="std_bit_vector_EINDEX"></a>
The provided index is out of bounds
<pre><code><b>const</b> <a href="../std/bit_vector.md#std_bit_vector_EINDEX">EINDEX</a>: <a href="../std/u64.md#std_u64">u64</a> = 131072; </code></pre><a name="std_bit_vector_ELENGTH"></a>
An invalid length of bitvector was given
<pre><code><b>const</b> <a href="../std/bit_vector.md#std_bit_vector_ELENGTH">ELENGTH</a>: <a href="../std/u64.md#std_u64">u64</a> = 131073; </code></pre><a name="std_bit_vector_WORD_SIZE"></a>
<pre><code><b>const</b> <a href="../std/bit_vector.md#std_bit_vector_WORD_SIZE">WORD_SIZE</a>: <a href="../std/u64.md#std_u64">u64</a> = 1; </code></pre><a name="std_bit_vector_MAX_SIZE"></a>
The maximum allowed bitvector size
<pre><code><b>const</b> <a href="../std/bit_vector.md#std_bit_vector_MAX_SIZE">MAX_SIZE</a>: <a href="../std/u64.md#std_u64">u64</a> = 1024; </code></pre><a name="std_bit_vector_new"></a>
new<a name="std_bit_vector_set"></a>
setSet the bit at <code>bit_index</code> in the <code>bitvector</code> regardless of its previous state.
<pre><code><b>public</b> <b>fun</b> <a href="../std/bit_vector.md#std_bit_vector_set">set</a>(bitvector: &<b>mut</b> <a href="../std/bit_vector.md#std_bit_vector_BitVector">std::bit_vector::BitVector</a>, bit_index: <a href="../std/u64.md#std_u64">u64</a>) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../std/bit_vector.md#std_bit_vector_set">set</a>(bitvector: &<b>mut</b> <a href="../std/bit_vector.md#std_bit_vector_BitVector">BitVector</a>, bit_index: <a href="../std/u64.md#std_u64">u64</a>) { <b>assert</b>!(bit_index < bitvector.bit_field.<a href="../std/bit_vector.md#std_bit_vector_length">length</a>(), <a href="../std/bit_vector.md#std_bit_vector_EINDEX">EINDEX</a>); <b>let</b> x = &<b>mut</b> bitvector.bit_field[bit_index]; *x = <b>true</b>; } </code></pre> </details><a name="std_bit_vector_unset"></a>
unsetUnset the bit at <code>bit_index</code> in the <code>bitvector</code> regardless of its previous state.
<pre><code><b>public</b> <b>fun</b> <a href="../std/bit_vector.md#std_bit_vector_unset">unset</a>(bitvector: &<b>mut</b> <a href="../std/bit_vector.md#std_bit_vector_BitVector">std::bit_vector::BitVector</a>, bit_index: <a href="../std/u64.md#std_u64">u64</a>) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../std/bit_vector.md#std_bit_vector_unset">unset</a>(bitvector: &<b>mut</b> <a href="../std/bit_vector.md#std_bit_vector_BitVector">BitVector</a>, bit_index: <a href="../std/u64.md#std_u64">u64</a>) { <b>assert</b>!(bit_index < bitvector.bit_field.<a href="../std/bit_vector.md#std_bit_vector_length">length</a>(), <a href="../std/bit_vector.md#std_bit_vector_EINDEX">EINDEX</a>); <b>let</b> x = &<b>mut</b> bitvector.bit_field[bit_index]; *x = <b>false</b>; } </code></pre> </details><a name="std_bit_vector_shift_left"></a>
shift_leftShift the <code>bitvector</code> left by <code>amount</code>. If <code>amount</code> is greater than the bitvector's length the bitvector will be zeroed out.
<pre><code><b>public</b> <b>fun</b> <a href="../std/bit_vector.md#std_bit_vector_shift_left">shift_left</a>(bitvector: &<b>mut</b> <a href="../std/bit_vector.md#std_bit_vector_BitVector">std::bit_vector::BitVector</a>, amount: <a href="../std/u64.md#std_u64">u64</a>) </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../std/bit_vector.md#std_bit_vector_shift_left">shift_left</a>(bitvector: &<b>mut</b> <a href="../std/bit_vector.md#std_bit_vector_BitVector">BitVector</a>, amount: <a href="../std/u64.md#std_u64">u64</a>) { <b>if</b> (amount >= bitvector.<a href="../std/bit_vector.md#std_bit_vector_length">length</a>) { <b>let</b> len = bitvector.bit_field.<a href="../std/bit_vector.md#std_bit_vector_length">length</a>(); <b>let</b> <b>mut</b> i = 0; <b>while</b> (i < len) { <b>let</b> elem = &<b>mut</b> bitvector.bit_field[i]; *elem = <b>false</b>; i = i + 1; }; } <b>else</b> { <b>let</b> <b>mut</b> i = amount; <b>while</b> (i < bitvector.<a href="../std/bit_vector.md#std_bit_vector_length">length</a>) { <b>if</b> (bitvector.<a href="../std/bit_vector.md#std_bit_vector_is_index_set">is_index_set</a>(i)) bitvector.<a href="../std/bit_vector.md#std_bit_vector_set">set</a>(i - amount) <b>else</b> bitvector.<a href="../std/bit_vector.md#std_bit_vector_unset">unset</a>(i - amount); i = i + 1; }; i = bitvector.<a href="../std/bit_vector.md#std_bit_vector_length">length</a> - amount; <b>while</b> (i < bitvector.<a href="../std/bit_vector.md#std_bit_vector_length">length</a>) { <a href="../std/bit_vector.md#std_bit_vector_unset">unset</a>(bitvector, i); i = i + 1; }; } } </code></pre> </details><a name="std_bit_vector_is_index_set"></a>
is_index_setReturn the value of the bit at <code>bit_index</code> in the <code>bitvector</code>. <code><b>true</b></code> represents "1" and <code><b>false</b></code> represents a 0
<pre><code><b>public</b> <b>fun</b> <a href="../std/bit_vector.md#std_bit_vector_is_index_set">is_index_set</a>(bitvector: &<a href="../std/bit_vector.md#std_bit_vector_BitVector">std::bit_vector::BitVector</a>, bit_index: <a href="../std/u64.md#std_u64">u64</a>): <a href="../std/bool.md#std_bool">bool</a> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../std/bit_vector.md#std_bit_vector_is_index_set">is_index_set</a>(bitvector: &<a href="../std/bit_vector.md#std_bit_vector_BitVector">BitVector</a>, bit_index: <a href="../std/u64.md#std_u64">u64</a>): <a href="../std/bool.md#std_bool">bool</a> { <b>assert</b>!(bit_index < bitvector.bit_field.<a href="../std/bit_vector.md#std_bit_vector_length">length</a>(), <a href="../std/bit_vector.md#std_bit_vector_EINDEX">EINDEX</a>); bitvector.bit_field[bit_index] } </code></pre> </details><a name="std_bit_vector_length"></a>
lengthReturn the length (number of usable bits) of this bitvector
<pre><code><b>public</b> <b>fun</b> <a href="../std/bit_vector.md#std_bit_vector_length">length</a>(bitvector: &<a href="../std/bit_vector.md#std_bit_vector_BitVector">std::bit_vector::BitVector</a>): <a href="../std/u64.md#std_u64">u64</a> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../std/bit_vector.md#std_bit_vector_length">length</a>(bitvector: &<a href="../std/bit_vector.md#std_bit_vector_BitVector">BitVector</a>): <a href="../std/u64.md#std_u64">u64</a> { bitvector.bit_field.<a href="../std/bit_vector.md#std_bit_vector_length">length</a>() } </code></pre> </details><a name="std_bit_vector_longest_set_sequence_starting_at"></a>
longest_set_sequence_starting_atReturns the length of the longest sequence of set bits starting at (and including) <code>start_index</code> in the <code>bitvector</code>. If there is no such sequence, then <code>0</code> is returned.
<pre><code><b>public</b> <b>fun</b> <a href="../std/bit_vector.md#std_bit_vector_longest_set_sequence_starting_at">longest_set_sequence_starting_at</a>(bitvector: &<a href="../std/bit_vector.md#std_bit_vector_BitVector">std::bit_vector::BitVector</a>, start_index: <a href="../std/u64.md#std_u64">u64</a>): <a href="../std/u64.md#std_u64">u64</a> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../std/bit_vector.md#std_bit_vector_longest_set_sequence_starting_at">longest_set_sequence_starting_at</a>(bitvector: &<a href="../std/bit_vector.md#std_bit_vector_BitVector">BitVector</a>, start_index: <a href="../std/u64.md#std_u64">u64</a>): <a href="../std/u64.md#std_u64">u64</a> { <b>assert</b>!(start_index < bitvector.<a href="../std/bit_vector.md#std_bit_vector_length">length</a>, <a href="../std/bit_vector.md#std_bit_vector_EINDEX">EINDEX</a>); <b>let</b> <b>mut</b> index = start_index; // Find the greatest index in the <a href="../std/vector.md#std_vector">vector</a> such that all indices less than it are <a href="../std/bit_vector.md#std_bit_vector_set">set</a>. <b>while</b> (index < bitvector.<a href="../std/bit_vector.md#std_bit_vector_length">length</a>) { <b>if</b> (!bitvector.<a href="../std/bit_vector.md#std_bit_vector_is_index_set">is_index_set</a>(index)) <b>break</b>; index = index + 1; }; index - start_index } </code></pre> </details>