CIRCT 24.0.0git
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Private Attributes | List of all members
esi::UnionType Class Reference

Unions contain one active field without storing a tag. More...

#include <Types.h>

Inheritance diagram for esi::UnionType:
Inheritance graph
[legend]
Collaboration diagram for esi::UnionType:
Collaboration graph
[legend]

Public Types

using FieldVector = std::vector< std::pair< std::string, const Type * > >
 
- Public Types inherited from esi::Type
using ID = std::string
 

Public Member Functions

 UnionType (const ID &id, const FieldVector &fields)
 
const FieldVector & getFields () const
 
std::ptrdiff_t getBitWidth () const override
 
void ensureValid (const std::any &obj) const override
 Ensure that a std::any object is valid for this type.
 
MutableBitVector serialize (const std::any &obj) const override
 Serialize an object to a MutableBitVector (LSB-first stream).
 
std::any deserialize (BitVector &data) const override
 Deserialize from a BitVector stream (LSB-first).
 
virtual std::any deserialize (BitVector &data) const
 Deserialize from a BitVector stream (LSB-first).
 
std::any deserialize (const MessageData &data) const
 
- Public Member Functions inherited from esi::Type
 Type (const ID &id)
 
virtual ~Type ()=default
 
ID getID () const
 
void setHWBitwidth (std::ptrdiff_t bw)
 Set from manifest JSON hwBitwidth.
 
std::any deserialize (const MessageData &data) const
 
std::optional< std::string > isValid (const std::any &obj) const
 
void dump (std::ostream &os, bool oneLine=false) const
 
std::string toString (bool oneLine=false) const
 

Private Attributes

FieldVector fields
 

Additional Inherited Members

- Protected Attributes inherited from esi::Type
ID id
 
std::ptrdiff_t hwBitwidth = -1
 

Detailed Description

Unions contain one active field without storing a tag.

All fields start at bit zero, and the width is the maximum field width. Serialization zero-pads the high bits of narrower fields, matching the hw.union bitcast layout. Nonzero hw.union member offsets are rejected during manifest generation.

Definition at line 357 of file Types.h.

Member Typedef Documentation

◆ FieldVector

using esi::UnionType::FieldVector = std::vector<std::pair<std::string, const Type *> >

Definition at line 359 of file Types.h.

Constructor & Destructor Documentation

◆ UnionType()

esi::UnionType::UnionType ( const ID &  id,
const FieldVector &  fields 
)
inline

Definition at line 362 of file Types.h.

Member Function Documentation

◆ deserialize() [1/3]

virtual std::any esi::Type::deserialize ( BitVector &  data) const
inlinevirtual

Deserialize from a BitVector stream (LSB-first).

Implementations consume bits from 'data' in-place (via logical right shifts) and return the reconstructed value. Remaining bits stay in 'data'.

Reimplemented from esi::Type.

Definition at line 60 of file Types.h.

◆ deserialize() [2/3]

std::any esi::UnionType::deserialize ( BitVector &  data) const
overridevirtual

Deserialize from a BitVector stream (LSB-first).

Implementations consume bits from 'data' in-place (via logical right shifts) and return the reconstructed value. Remaining bits stay in 'data'.

Reimplemented from esi::Type.

Definition at line 493 of file Types.cpp.

References fields, getBitWidth(), and esi::BitVector::lsb().

◆ deserialize() [3/3]

std::any esi::Type::deserialize ( const MessageData &  data) const
inline

Definition at line 67 of file Types.h.

◆ ensureValid()

void esi::UnionType::ensureValid ( const std::any &  obj) const
overridevirtual

Ensure that a std::any object is valid for this type.

Throws std::runtime_error if the object is not valid.

Reimplemented from esi::Type.

Definition at line 445 of file Types.cpp.

References fields.

Referenced by serialize().

◆ getBitWidth()

std::optional< int64_t > UnionType::getBitWidth ( ) const
inlineoverridevirtual

Reimplemented from esi::Type.

Definition at line 366 of file Types.h.

References getFields().

Referenced by deserialize(), and serialize().

◆ getFields()

const FieldVector & esi::UnionType::getFields ( ) const
inline

Definition at line 365 of file Types.h.

References fields.

Referenced by getBitWidth(), and NB_MODULE().

◆ serialize()

MutableBitVector esi::UnionType::serialize ( const std::any &  obj) const
overridevirtual

Serialize an object to a MutableBitVector (LSB-first stream).

The object should be passed via std::any. Implementations append fields in the order they are iterated (the first serialized field occupies the least-significant bits of the result).

Reimplemented from esi::Type.

Definition at line 475 of file Types.cpp.

References ensureValid(), fields, getBitWidth(), and esi::Type::serialize().

Member Data Documentation

◆ fields

FieldVector esi::UnionType::fields
private

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