Livt packages
Livt.Collections
Version 1.4.2
Fixed-capacity FIFOs, queues, stacks, circular buffers, lists, and bit sets for Livt hardware.
Published files (62)
src/bitset/BitSet8.lvt
namespace Livt.Collections.BitSet
/**
* Synthesizable set of eight independently addressable boolean flags.
*
* Independent fields avoid the current stale staging behavior of indexed
* writes to a shared logic vector.
*/
component BitSet8 : IBitSet
{
// Number of addressable flags.
public const CAPACITY: int = 8
// Independent flag state avoids cross-function indexed-write staging.
bit0: bool
bit1: bool
bit2: bool
bit3: bool
bit4: bool
bit5: bool
bit6: bool
bit7: bool
/**
* Sets one flag; invalid indices are ignored.
*/
override fn Set(index: int)
{
if (index == 0) {
this.bit0 = true
}
if (index == 1) {
this.bit1 = true
}
if (index == 2) {
this.bit2 = true
}
if (index == 3) {
this.bit3 = true
}
if (index == 4) {
this.bit4 = true
}
if (index == 5) {
this.bit5 = true
}
if (index == 6) {
this.bit6 = true
}
if (index == 7) {
this.bit7 = true
}
}
/**
* Clears one flag; invalid indices are ignored.
*/
override fn Clear(index: int)
{
if (index == 0) {
this.bit0 = false
}
if (index == 1) {
this.bit1 = false
}
if (index == 2) {
this.bit2 = false
}
if (index == 3) {
this.bit3 = false
}
if (index == 4) {
this.bit4 = false
}
if (index == 5) {
this.bit5 = false
}
if (index == 6) {
this.bit6 = false
}
if (index == 7) {
this.bit7 = false
}
}
/**
* Inverts one flag; invalid indices are ignored.
*/
override fn Toggle(index: int)
{
if (index == 0) {
this.bit0 = this.bit0 == false
}
if (index == 1) {
this.bit1 = this.bit1 == false
}
if (index == 2) {
this.bit2 = this.bit2 == false
}
if (index == 3) {
this.bit3 = this.bit3 == false
}
if (index == 4) {
this.bit4 = this.bit4 == false
}
if (index == 5) {
this.bit5 = this.bit5 == false
}
if (index == 6) {
this.bit6 = this.bit6 == false
}
if (index == 7) {
this.bit7 = this.bit7 == false
}
}
/**
* Returns one flag, or false when index is invalid.
*/
override fn IsSet(index: int) bool
{
if (index == 0) {
return this.bit0 == true
}
if (index == 1) {
return this.bit1 == true
}
if (index == 2) {
return this.bit2 == true
}
if (index == 3) {
return this.bit3 == true
}
if (index == 4) {
return this.bit4 == true
}
if (index == 5) {
return this.bit5 == true
}
if (index == 6) {
return this.bit6 == true
}
if (index == 7) {
return this.bit7 == true
}
return false
}
/**
* Clears every flag.
*/
override fn Reset()
{
this.bit0 = false
this.bit1 = false
this.bit2 = false
this.bit3 = false
this.bit4 = false
this.bit5 = false
this.bit6 = false
this.bit7 = false
}
/**
* Returns true when at least one flag is set.
*/
override fn Any() bool
{
return this.bit0 || this.bit1 || this.bit2 || this.bit3 || this.bit4 || this.bit5 || this.bit6 || this.bit7
}
/**
* Returns true when no flags are set.
*/
override fn None() bool
{
if (this.bit0 || this.bit1 || this.bit2 || this.bit3) {
return false
}
if (this.bit4 || this.bit5 || this.bit6 || this.bit7) {
return false
}
return true
}
/**
* Returns the flags encoded as a non-negative integer bit mask.
*/
override fn GetValue() int
{
var result: int = 0
if (this.bit0 == true) {
result = result + 1
}
if (this.bit1 == true) {
result = result + 2
}
if (this.bit2 == true) {
result = result + 4
}
if (this.bit3 == true) {
result = result + 8
}
if (this.bit4 == true) {
result = result + 16
}
if (this.bit5 == true) {
result = result + 32
}
if (this.bit6 == true) {
result = result + 64
}
if (this.bit7 == true) {
result = result + 128
}
return result
}
/**
* Returns the fixed number of addressable flags.
*/
override fn GetCapacity() int
{
return CAPACITY
}
}