CIRCT 24.0.0git
Loading...
Searching...
No Matches
esi::MutableBitVector Class Reference

A mutable bit vector that owns its underlying storage. More...

#include <Values.h>

Inheritance diagram for esi::MutableBitVector:
Collaboration diagram for esi::MutableBitVector:

Public Member Functions

 MutableBitVector (size_t width)
 Owning, zero-initialized constructor of a given width.
 MutableBitVector (std::vector< byte > &&bytes, std::optional< size_t > width=std::nullopt)
 Owning constructor from an rvalue vector (must move in).
 MutableBitVector ()=default
 MutableBitVector (const MutableBitVector &other)
 MutableBitVector (const BitVector &other)
 MutableBitVector (MutableBitVector &&other) noexcept
 MutableBitVector (BitVector &&other)
MutableBitVector & operator= (const MutableBitVector &other)
MutableBitVector & operator= (MutableBitVector &&other) noexcept
void setBit (size_t i, bool v)
 Set the i-th bit.
std::span< const byte > getSpan () const
 Return a handle to the underlying span (always aligned since bitIndex=0).
std::vector< uint8_t > takeStorage ()
 Return and transfer ownership of the underlying storage.
MutableBitVector & operator>>= (size_t n)
 In-place logical right shift that drops the least-significant n bits.
MutableBitVector & operator<<= (size_t n)
 In-place logical left shift shifts in n zero bits at LSB, shifting existing bits upward.
MutableBitVector & operator<<= (const MutableBitVector &other)
 In-place concatenate: appends bits from other to this.
MutableBitVector & operator|= (const MutableBitVector &other)
MutableBitVector & operator&= (const MutableBitVector &other)
MutableBitVector & operator^= (const MutableBitVector &other)
MutableBitVector operator~ () const
MutableBitVector operator| (const MutableBitVector &other) const
MutableBitVector operator& (const MutableBitVector &other) const
MutableBitVector operator^ (const MutableBitVector &other) const
Public Member Functions inherited from esi::BitVector
 BitVector (std::span< const byte > bytes, std::optional< size_t > width=std::nullopt, uint8_t bitIndex=0)
 Construct from an existing span.
 BitVector ()=default
 BitVector (const BitVector &other)
BitVector & operator= (const BitVector &other)
size_t width () const
size_t size () const
bool getBit (size_t i) const
 Return the i-th bit (0 = LSB) as boolean.
std::span< const byte > getSpan () const
 Return a handle to the underlying span.
BitVector operator>> (size_t n) const
 Logical right shift that drops the least-significant n bits by advancing the byte/bit index and reducing width.
BitVector & operator>>= (size_t n)
BitVector slice (size_t offset, size_t sliceWidth) const
 Create a new immutable view of a contiguous bit slice [offset, offset+sliceWidth).
BitVector lsb (size_t n) const
 Return a view of the N least-significant bits.
BitVector msb (size_t n) const
 Return a view of the N most-significant bits.
std::string toString (unsigned base=16) const
bool operator== (const BitVector &rhs) const
bool operator!= (const BitVector &rhs) const
bit_iterator begin () const
 Return an iterator to the first bit (LSB).
bit_iterator end () const
 Return an iterator past the last bit.

Private Attributes

std::vector< byte > owner

Additional Inherited Members

Public Types inherited from esi::BitVector
using byte = uint8_t
Protected Member Functions inherited from esi::BitVector
void checkHighBytesEqual (unsigned lowExclusive, uint8_t expectedByte, const char *fmt, unsigned target) const
Protected Attributes inherited from esi::BitVector
std::span< const byte > data {}
size_t bitWidth = 0
uint8_t bitIndex = 0

Detailed Description

A mutable bit vector that owns its underlying storage.

It supports in-place modifications and mutable operations.

Definition at line 278 of file Values.h.

Constructor & Destructor Documentation

◆ MutableBitVector() [1/7]

MutableBitVector::MutableBitVector ( size_t width)
explicit

◆ MutableBitVector() [2/7]

MutableBitVector::MutableBitVector ( std::vector< byte > && bytes,
std::optional< size_t > width = std::nullopt )

Owning constructor from an rvalue vector (must move in).

Definition at line 105 of file Values.cpp.

References esi::BitVector::bitIndex, esi::BitVector::bitWidth, esi::BitVector::data, owner, and esi::BitVector::width().

◆ MutableBitVector() [3/7]

esi::MutableBitVector::MutableBitVector ( )
default

◆ MutableBitVector() [4/7]

MutableBitVector::MutableBitVector ( const MutableBitVector & other)

◆ MutableBitVector() [5/7]

◆ MutableBitVector() [6/7]

MutableBitVector::MutableBitVector ( MutableBitVector && other)
noexcept

◆ MutableBitVector() [7/7]

MutableBitVector::MutableBitVector ( BitVector && other)

Member Function Documentation

◆ getSpan()

std::span< const byte > esi::MutableBitVector::getSpan ( ) const
inline

Return a handle to the underlying span (always aligned since bitIndex=0).

Definition at line 309 of file Values.h.

References esi::BitVector::data.

◆ operator&()

MutableBitVector MutableBitVector::operator& ( const MutableBitVector & other) const

Definition at line 525 of file Values.cpp.

References esi::BitVector::BitVector(), and MutableBitVector().

◆ operator&=()

MutableBitVector & MutableBitVector::operator&= ( const MutableBitVector & other)

◆ operator<<=() [1/2]

MutableBitVector & MutableBitVector::operator<<= ( const MutableBitVector & other)

In-place concatenate: appends bits from other to this.

Definition at line 233 of file Values.cpp.

References esi::BitVector::bitIndex, esi::BitVector::bitWidth, esi::BitVector::data, esi::BitVector::getBit(), MutableBitVector(), owner, and esi::BitVector::width().

◆ operator<<=() [2/2]

MutableBitVector & MutableBitVector::operator<<= ( size_t n)

In-place logical left shift shifts in n zero bits at LSB, shifting existing bits upward.

Definition at line 211 of file Values.cpp.

References esi::BitVector::bitIndex, esi::BitVector::bitWidth, esi::BitVector::data, esi::BitVector::getBit(), MutableBitVector(), and owner.

◆ operator=() [1/2]

MutableBitVector & MutableBitVector::operator= ( const MutableBitVector & other)

◆ operator=() [2/2]

MutableBitVector & MutableBitVector::operator= ( MutableBitVector && other)
noexcept

◆ operator>>=()

MutableBitVector & MutableBitVector::operator>>= ( size_t n)

In-place logical right shift that drops the least-significant n bits.

Reduces width and updates internal state. Does not modify underlying storage.

Definition at line 191 of file Values.cpp.

References esi::BitVector::bitIndex, esi::BitVector::bitWidth, esi::BitVector::data, and MutableBitVector().

◆ operator^()

MutableBitVector MutableBitVector::operator^ ( const MutableBitVector & other) const

Definition at line 532 of file Values.cpp.

References esi::BitVector::BitVector(), and MutableBitVector().

◆ operator^=()

MutableBitVector & MutableBitVector::operator^= ( const MutableBitVector & other)

◆ operator|()

MutableBitVector MutableBitVector::operator| ( const MutableBitVector & other) const

Definition at line 518 of file Values.cpp.

References esi::BitVector::BitVector(), and MutableBitVector().

◆ operator|=()

MutableBitVector & MutableBitVector::operator|= ( const MutableBitVector & other)

◆ operator~()

MutableBitVector MutableBitVector::operator~ ( ) const

◆ setBit()

void MutableBitVector::setBit ( size_t i,
bool v )

◆ takeStorage()

std::vector< uint8_t > esi::MutableBitVector::takeStorage ( )
inline

Return and transfer ownership of the underlying storage.

Definition at line 312 of file Values.h.

References owner.

Referenced by esi::BitsType::deserialize().

Member Data Documentation

◆ owner


The documentation for this class was generated from the following files: