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

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

#include <Types.h>

Inheritance diagram for esi::UnionType:
Collaboration diagram for esi::UnionType:

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).
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 375 of file Types.h.

Member Typedef Documentation

◆ FieldVector

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

Definition at line 377 of file Types.h.

Constructor & Destructor Documentation

◆ UnionType()

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

Definition at line 380 of file Types.h.

References fields, esi::Type::id, and esi::Type::Type().

Member Function Documentation

◆ deserialize() [1/2]

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() [2/2]

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 384 of file Types.h.

References getFields().

Referenced by deserialize(), and serialize().

◆ getFields()

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

Definition at line 383 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(), esi::Type::serialize(), and esi::Type::Type().

Member Data Documentation

◆ fields


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