Network::attributeMap resolves #245

Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
James Cherry 2025-05-18 09:37:10 -07:00
parent b32eed9a84
commit ac02981b62
7 changed files with 37 additions and 2 deletions

View File

@ -46,7 +46,6 @@ class LibertyCell;
class LibertyPort;
typedef Map<std::string, ConcreteCell*> ConcreteCellMap;
typedef std::map<std::string, std::string> AttributeMap;
typedef Vector<ConcretePort*> ConcretePortSeq;
typedef Map<std::string, ConcretePort*> ConcretePortMap;
typedef ConcreteCellMap::ConstIterator ConcreteLibraryCellIterator;
@ -117,6 +116,7 @@ public:
void setAttribute(const std::string &key,
const std::string &value);
std::string getAttribute(const std::string &key) const;
const AttributeMap &attributeMap() const { return attribute_map_; }
// Cell acts as port factory.
ConcretePort *makePort(const char *name);

View File

@ -46,7 +46,6 @@ class ConcreteBindingTbl;
class ConcreteLibertyLibraryIterator;
typedef Vector<ConcreteLibrary*> ConcreteLibrarySeq;
typedef std::map<std::string, std::string> AttributeMap;
typedef Map<const char*, ConcreteLibrary*, CharPtrLess> ConcreteLibraryMap;
typedef ConcreteLibrarySeq::ConstIterator ConcreteLibraryIterator;
typedef Map<const char *, ConcreteInstance*,
@ -85,6 +84,7 @@ public:
const char *name(const Cell *cell) const override;
std::string getAttribute(const Cell *cell,
const std::string &key) const override;
const AttributeMap &attributeMap(const Cell *cell) const override;
ObjectId id(const Cell *cell) const override;
Library *library(const Cell *cell) const override;
LibertyCell *libertyCell(Cell *cell) const override;
@ -121,6 +121,7 @@ public:
const char *name(const Instance *instance) const override;
std::string getAttribute(const Instance *inst,
const std::string &key) const override;
const AttributeMap &attributeMap(const Instance *inst) const override;
ObjectId id(const Instance *instance) const override;
Cell *cell(const Instance *instance) const override;
Instance *parent(const Instance *instance) const override;
@ -307,6 +308,7 @@ public:
void setAttribute(const std::string &key,
const std::string &value);
std::string getAttribute(const std::string &key) const;
const AttributeMap &attributeMap() const { return attribute_map_; }
void addChild(ConcreteInstance *child);
void deleteChild(ConcreteInstance *child);
void addPin(ConcretePin *pin);

View File

@ -153,6 +153,7 @@ public:
// Attributes can be null
virtual std::string getAttribute(const Cell *cell,
const std::string &key) const = 0;
virtual const AttributeMap &attributeMap(const Cell *cell) const = 0;
// Name can be a simple, bundle, bus, or bus bit name.
virtual Port *findPort(const Cell *cell,
const char *name) const = 0;
@ -217,6 +218,7 @@ public:
const PatternMatch *pattern) const;
virtual std::string getAttribute(const Instance *inst,
const std::string &key) const = 0;
virtual const AttributeMap &attributeMap(const Instance *inst) const = 0;
// Hierarchical path name.
virtual const char *pathName(const Instance *instance) const;
bool pathNameLess(const Instance *inst1,

View File

@ -25,6 +25,8 @@
#pragma once
#include <cstdint>
#include <string>
#include <map>
#include "Set.hh"
#include "Vector.hh"
@ -70,6 +72,7 @@ typedef Iterator<const Pin*> ConnectedPinIterator;
typedef ConnectedPinIterator NetConnectedPinIterator;
typedef ConnectedPinIterator PinConnectedPinIterator;
typedef uint32_t ObjectId;
typedef std::map<std::string, std::string> AttributeMap;
enum class LogicValue : unsigned { zero, one, unknown, rise, fall };

View File

@ -56,6 +56,7 @@ public:
const char *name(const Cell *cell) const override;
std::string getAttribute(const Cell *cell,
const std::string &key) const override;
const AttributeMap &attributeMap(const Cell *cell) const override;
ObjectId id(const Cell *cell) const override;
Library *library(const Cell *cell) const override;
LibertyCell *libertyCell(Cell *cell) const override;
@ -93,6 +94,7 @@ public:
ObjectId id(const Instance *instance) const override;
std::string getAttribute(const Instance *inst,
const std::string &key) const override;
const AttributeMap &attributeMap(const Instance *inst) const override;
Instance *topInstance() const override;
Cell *cell(const Instance *instance) const override;
Instance *parent(const Instance *instance) const override;

View File

@ -624,6 +624,13 @@ ConcreteNetwork::getAttribute(const Cell *cell,
return ccell->getAttribute(key);
}
const AttributeMap &
ConcreteNetwork::attributeMap(const Cell *cell) const
{
const ConcreteCell *ccell = reinterpret_cast<const ConcreteCell*>(cell);
return ccell->attributeMap();
}
Port *
ConcreteNetwork::findPort(const Cell *cell,
const char *name) const
@ -956,6 +963,13 @@ ConcreteNetwork::getAttribute(const Instance *inst,
return cinst->getAttribute(key);
}
const AttributeMap &
ConcreteNetwork::attributeMap(const Instance *inst) const
{
const ConcreteInstance *cinst = reinterpret_cast<const ConcreteInstance*>(inst);
return cinst->attributeMap();
}
Cell *
ConcreteNetwork::cell(const Instance *instance) const
{

View File

@ -144,6 +144,12 @@ NetworkNameAdapter::getAttribute(const Cell *cell,
return network_->getAttribute(cell, key);
}
const AttributeMap &
NetworkNameAdapter::attributeMap(const Cell *cell) const
{
return network_->attributeMap(cell);
}
Library *
NetworkNameAdapter::library(const Cell *cell) const
{
@ -356,6 +362,12 @@ NetworkNameAdapter::getAttribute(const Instance *inst,
return network_->getAttribute(inst, key);
}
const AttributeMap &
NetworkNameAdapter::attributeMap(const Instance *inst) const
{
return network_->attributeMap(inst);
}
Instance *
NetworkNameAdapter::parent(const Instance *instance) const
{