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

View File

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

View File

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

View File

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

View File

@ -56,6 +56,7 @@ public:
const char *name(const Cell *cell) const override; const char *name(const Cell *cell) const override;
std::string getAttribute(const Cell *cell, std::string getAttribute(const Cell *cell,
const std::string &key) const override; const std::string &key) const override;
const AttributeMap &attributeMap(const Cell *cell) const override;
ObjectId id(const Cell *cell) const override; ObjectId id(const Cell *cell) const override;
Library *library(const Cell *cell) const override; Library *library(const Cell *cell) const override;
LibertyCell *libertyCell(Cell *cell) const override; LibertyCell *libertyCell(Cell *cell) const override;
@ -93,6 +94,7 @@ public:
ObjectId id(const Instance *instance) const override; ObjectId id(const Instance *instance) const override;
std::string getAttribute(const Instance *inst, std::string getAttribute(const Instance *inst,
const std::string &key) const override; const std::string &key) const override;
const AttributeMap &attributeMap(const Instance *inst) const override;
Instance *topInstance() const override; Instance *topInstance() const override;
Cell *cell(const Instance *instance) const override; Cell *cell(const Instance *instance) const override;
Instance *parent(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); return ccell->getAttribute(key);
} }
const AttributeMap &
ConcreteNetwork::attributeMap(const Cell *cell) const
{
const ConcreteCell *ccell = reinterpret_cast<const ConcreteCell*>(cell);
return ccell->attributeMap();
}
Port * Port *
ConcreteNetwork::findPort(const Cell *cell, ConcreteNetwork::findPort(const Cell *cell,
const char *name) const const char *name) const
@ -956,6 +963,13 @@ ConcreteNetwork::getAttribute(const Instance *inst,
return cinst->getAttribute(key); return cinst->getAttribute(key);
} }
const AttributeMap &
ConcreteNetwork::attributeMap(const Instance *inst) const
{
const ConcreteInstance *cinst = reinterpret_cast<const ConcreteInstance*>(inst);
return cinst->attributeMap();
}
Cell * Cell *
ConcreteNetwork::cell(const Instance *instance) const ConcreteNetwork::cell(const Instance *instance) const
{ {

View File

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