Module bitvec::field[][src]

Parallel bitfield access.

This module provides parallel, multiple-bit, access to a BitSlice. This functionality permits the use of BitSlice as a library-level implementation of the bitfield language feature found in C and C++.

The BitField trait is not sealed against client implementation, as there is no useful way to automatically use a BitOrder implementation to provide a universal behavior. As such, the trait has some requirements that the compiler cannot enforce for client implementations.

Batch Behavior

The purpose of this trait is to provide access to arbitrary bit regions as if they were an ordinary memory location. As such, it is important for implementations of this trait to provide shift/mask register transfer behavior where possible, for as wide a span as possible in each action. Implementations of this trait should not use bit-by-bit iteration.

Register Bit Order Preservation

As a default assumption – user orderings may violate this, but should not – each element of slice memory used to store part of a value should not reorder the value bits. Transfer between slice memory and a CPU register should solely be an ordinary value load or store between memory and the register, and a shift/mask operation to select the part of the value that is live.

Endianness

The _le and _be methods of BitField refer to the order in which T: BitStore elements of the slice are assigned significance when containing fragments of a stored data value. Within any T element, the order of its constituent bytes is not governed by the BitField trait method.

The provided BitOrder implementors Lsb0 and Msb0 use the local machine’s byte ordering. Other cursors may implement ordering of bytes within T elements differently, for instance by calling .to_be_bytes before store and from_be_bytes after load.

Traits

BitField

Performs C-style bitfield access through a BitSlice.