#[repr(transparent)]
pub struct BitIdx<R> where
    R: BitRegister
{ /* private fields */ }
Expand description

A semantic index counter within a register element R.

This type is a counter in the ring 0 .. R::BITS, and serves to mark a semantic index within some register element. It is a virtual index, and is the stored value used in pointer encodings to track region start information.

It is translated to an electrical index through the BitOrder trait. This virtual index is the only counter that can be used for address computation, and once lowered to an electrical index through BitOrder::at, the electrical address can only be used for instruction selection.

Type Parameters

  • R: The register element that this index governs.

Validity

Values of this type are required to be in the range 0 .. R::BITS. Any value not less than R::BITS makes the program invalid, and will likely cause either a crash or incorrect memory access.

Construction

This type can never be constructed outside of the bitvec crate. It is passed in to BitOrder implementations, which may use it to construct electrical position, selection, or mask values from it. All values of this type constructed by bitvec are known to be correct in their region; no other construction site can be trusted.

Implementations

The inclusive maximum index within an element R.

The inclusive minimum index within an element R.

Wraps a counter value as a known-good index into an R register.

Parameters
  • value: The counter value to mark as an index. This must be not less than Self::ZERO and not more than Self::LAST.
Returns

This returns value, marked as either a valid or invalid index by whether or not it is within the valid range 0 .. R::BITS.

Wraps a counter value as an assumed-good index into an R register.

Parameters
  • value: The counter value to mark as an index. This must be not less than Self::ZERO and not more than Self::LAST.
Returns

This returns value, marked as a valid index.

Safety

If the value is outside the valid range, then the program is incorrect. Debug builds will panic; release builds do not inspect the value.

Casts to a new index type.

This will always succeed if self.value() is a valid index in the S register; it will return an error if the self index is too wide for S.

Removes the index wrapper, leaving the internal counter.

Increments an index counter, wrapping at the back edge of the register.

Parameters
  • self: The index to increment.
Returns
  • .0: The next index after self.
  • .1: Indicates that the new index is in the next register.

Decrements an index counter, wrapping at the front edge of the register.

Parameters
  • self: The index to decrement.
Returns
  • .0: The previous index before self.
  • .1: Indicates that the new index is in the previous register.

Computes the bit position corresponding to self under some ordering.

This forwards to O::at::<R>, which is the only public, safe, constructor for a position counter.

Computes the bit selector corresponding to self under an ordering.

This forwards to O::select::<R>, which is the only public, safe, constructor for a bit selector.

Computes the bit selector for self as an accessor mask.

This is a type-cast over Self::select.

Iterates over all indices between an inclusive start and exclusive end point.

Because implementation details of the range type family, including the RangeBounds trait, are not yet stable, and heterogenous ranges are not supported, this must be an opaque iterator rather than a direct Range<BitIdx<R>>.

Parameters
  • from: The inclusive low bound of the range. This will be the first index produced by the iterator.
  • upto: The exclusive high bound of the range. The iterator will halt before yielding an index of this value.
Returns

An opaque iterator that is equivalent to the range from .. upto.

Requirements

from must be no greater than upto.

Iterates over all possible index values.

Computes the jump distance for some number of bits away from a starting index.

This computes the number of elements by which to adjust a base pointer, and then the bit index of the destination bit in the new referent register element.

Parameters
  • self: An index within some element, from which the offset is computed.
  • by: The distance by which to jump. Negative values move lower in the index and element-pointer space; positive values move higher.
Returns
  • .0: The number of elements R by which to adjust a base pointer. This value can be passed directly into ptr::offset.
  • .1: The index of the destination bit within the destination element.

Computes the span information for a region beginning at self for len bits.

The span information is the number of elements in the region that hold live bits, and the position of the tail marker after the live bits.

This forwards to BitTail::span, as the computation is identical for the two types. Beginning a span at any Idx is equivalent to beginning it at the tail of a previous span.

Parameters
  • self: The start bit of the span.
  • len: The number of bits in the span.
Returns
  • .0: The number of elements, starting in the element that contains self, that contain live bits of the span.
  • .1: The tail counter of the span’s end point.

Trait Implementations

Formats the value using the given formatter.

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

Formats the value using the given formatter. Read more

Returns the “default value” for a type. Read more

Formats the value using the given formatter. Read more

Feeds this value into the given Hasher. Read more

Feeds a slice of this type into the given Hasher. Read more

This method returns an Ordering between self and other. Read more

Compares and returns the maximum of two values. Read more

Compares and returns the minimum of two values. Read more

Restrict a value to a certain interval. Read more

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

This method returns an ordering between self and other values if one exists. Read more

This method tests less than (for self and other) and is used by the < operator. Read more

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more

This method tests greater than (for self and other) and is used by the > operator. Read more

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more

The type returned in the event of a conversion error.

Performs the conversion.

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Converts self into T using Into<T>. Read more

Converts self into a target type. Read more

Causes self to use its Binary implementation when Debug-formatted.

Causes self to use its Display implementation when Debug-formatted. Read more

Causes self to use its LowerExp implementation when Debug-formatted. Read more

Causes self to use its LowerHex implementation when Debug-formatted. Read more

Causes self to use its Octal implementation when Debug-formatted.

Causes self to use its Pointer implementation when Debug-formatted. Read more

Causes self to use its UpperExp implementation when Debug-formatted. Read more

Causes self to use its UpperHex implementation when Debug-formatted. Read more

Performs the conversion.

Performs the conversion.

Pipes by value. This is generally the method you want to use. Read more

Borrows self and passes that borrow into the pipe function. Read more

Mutably borrows self and passes that borrow into the pipe function. Read more

Borrows self, then passes self.borrow() into the pipe function. Read more

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more

Borrows self, then passes self.as_ref() into the pipe function.

Mutably borrows self, then passes self.as_mut() into the pipe function. Read more

Borrows self, then passes self.deref() into the pipe function.

Mutably borrows self, then passes self.deref_mut() into the pipe function. Read more

Pipes a value into a function that cannot ordinarily be called in suffix position. Read more

Pipes a trait borrow into a function that cannot normally be called in suffix position. Read more

Pipes a trait mutable borrow into a function that cannot normally be called in suffix position. Read more

Pipes a trait borrow into a function that cannot normally be called in suffix position. Read more

Pipes a trait mutable borrow into a function that cannot normally be called in suffix position. Read more

Pipes a dereference into a function that cannot normally be called in suffix position. Read more

Pipes a mutable dereference into a function that cannot normally be called in suffix position. Read more

Pipes a reference into a function that cannot ordinarily be called in suffix position. Read more

Pipes a mutable reference into a function that cannot ordinarily be called in suffix position. Read more

Immutable access to a value. Read more

Mutable access to a value. Read more

Immutable access to the Borrow<B> of a value. Read more

Mutable access to the BorrowMut<B> of a value. Read more

Immutable access to the AsRef<R> view of a value. Read more

Mutable access to the AsMut<R> view of a value. Read more

Immutable access to the Deref::Target of a value. Read more

Mutable access to the Deref::Target of a value. Read more

Calls .tap() only in debug builds, and is erased in release builds.

Calls .tap_mut() only in debug builds, and is erased in release builds. Read more

Calls .tap_borrow() only in debug builds, and is erased in release builds. Read more

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds. Read more

Calls .tap_ref() only in debug builds, and is erased in release builds. Read more

Calls .tap_ref_mut() only in debug builds, and is erased in release builds. Read more

Calls .tap_deref() only in debug builds, and is erased in release builds. Read more

Calls .tap_deref_mut() only in debug builds, and is erased in release builds. Read more

Provides immutable access for inspection. Read more

Calls tap in debug builds, and does nothing in release builds.

Provides mutable access for modification. Read more

Calls tap_mut in debug builds, and does nothing in release builds.

Provides immutable access to the reference for inspection.

Calls tap_ref in debug builds, and does nothing in release builds.

Provides mutable access to the reference for modification.

Calls tap_ref_mut in debug builds, and does nothing in release builds.

Provides immutable access to the borrow for inspection. Read more

Calls tap_borrow in debug builds, and does nothing in release builds.

Provides mutable access to the borrow for modification.

Calls tap_borrow_mut in debug builds, and does nothing in release builds. Read more

Immutably dereferences self for inspection.

Calls tap_deref in debug builds, and does nothing in release builds.

Mutably dereferences self for modification.

Calls tap_deref_mut in debug builds, and does nothing in release builds. Read more

The resulting type after obtaining ownership.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

Converts the given value to a String. Read more

Attempts to convert self into T using TryInto<T>. Read more

Attempts to convert self into a target type. Read more

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.