21#include "hurricane/Go.h"
22#include "hurricane/Plug.h"
23#include "hurricane/SharedPath.h"
35class Instance :
public Go {
38 static FastRTTI _fastRTTI;
40 static inline const FastRTTI& fastRTTI ();
41 virtual const FastRTTI& vfastRTTI ()
const;
61 public:
operator const Code&()
const {
return _code;};
65 public:
string _getTypeName()
const {
return _TName(
"Instance::PlacementStatus"); };
66 public:
string _getString()
const;
67 public: Record* _getRecord()
const;
71 public:
class PlugMap :
public IntrusiveMap<const Net*, Plug> {
74 public:
typedef IntrusiveMap<const Net*, Plug> Inherit;
78 public:
virtual const Net* _getKey(Plug* plug)
const;
79 public:
virtual unsigned _getHashValue(
const Net* masterNet)
const;
80 public:
virtual Plug* _getNextElement(Plug* plug)
const;
81 public:
virtual void _setNextElement(Plug* plug, Plug* nextPlug)
const;
85 public:
class SharedPathMap :
public IntrusiveMap<const SharedPath*, SharedPath> {
88 public:
typedef IntrusiveMap<const SharedPath*, SharedPath> Inherit;
90 public: SharedPathMap();
92 public:
virtual const SharedPath* _getKey(SharedPath* sharedPath)
const;
93 public:
virtual unsigned _getHashValue(
const SharedPath* tailSharedPath)
const;
94 public:
virtual SharedPath* _getNextElement(SharedPath* sharedPath)
const;
95 public:
virtual void _setNextElement(SharedPath* sharedPath, SharedPath* nextSharedPath)
const;
102 private: Cell* _cell;
104 private: Cell* _masterCell;
105 private: Transformation _transformation;
107 private: PlugMap _plugMap;
108 private: SharedPathMap _sharedPathMap;
109 private: Instance* _nextOfCellInstanceMap;
110 private: Instance* _nextOfCellSlaveInstanceSet;
115 protected: Instance(Cell* cell,
const Name& name, Cell* masterCell,
const Transformation& transformation,
const PlacementStatus& placementstatus,
bool secureFlag);
117 public:
static Instance*
create(
Cell* cell,
const Name& name,
Cell* masterCell,
bool secureFlag =
true);
123 public:
virtual Cell* getCell()
const {
return _cell;};
124 public:
virtual Box getBoundingBox()
const;
128 public:
const PlacementStatus& getPlacementStatus()
const {
return _placementStatus;};
129 public:
Plug*
getPlug(
const Net* masterNet)
const {
return _plugMap.getElement(masterNet);};
142 public:
bool isTerminal()
const;
143 public:
bool isTerminalNetlist()
const;
144 public:
bool isUnique()
const;
145 public:
bool isUniquified()
const;
146 public:
bool isUniquifyMaster()
const;
163 public:
virtual void materialize();
164 public:
virtual void unmaterialize();
165 public:
virtual void invalidate(
bool propagateFlag =
true);
170 public:
void setPlacementStatus(
const PlacementStatus& placementstatus);
173 public:
void slaveAbutmentBox();
179 protected:
virtual void _postCreate();
181 protected:
virtual void _preDestroy();
183 public:
virtual string _getTypeName()
const {
return _TName(
"Instance");};
184 public:
virtual string _getString()
const;
185 public:
virtual Record* _getRecord()
const;
186 public:
virtual void _toJson(JsonWriter*)
const;
187 public:
virtual void _toJsonCollections(JsonWriter*)
const;
188 public: PlugMap& _getPlugMap() {
return _plugMap;};
189 public: SharedPath* _getSharedPath(
const SharedPath* tailSharedPath)
const {
return _sharedPathMap.getElement(tailSharedPath);}
190 public: SharedPathes _getSharedPathes()
const {
return _sharedPathMap.getElements();};
191 public: SharedPathMap& _getSharedPathMap() {
return _sharedPathMap;};
192 public: Instance* _getNextOfCellInstanceMap()
const {
return _nextOfCellInstanceMap;};
193 public: Instance* _getNextOfCellSlaveInstanceSet()
const {
return _nextOfCellSlaveInstanceSet;};
195 public:
void _setNextOfCellInstanceMap(Instance* instance) {_nextOfCellInstanceMap = instance;};
196 public:
void _setNextOfCellSlaveInstanceSet(Instance* instance) {_nextOfCellSlaveInstanceSet = instance;};
201 inline const FastRTTI& Instance::fastRTTI () {
return _fastRTTI; }
204class JsonInstance :
public JsonEntity {
207 public:
static void initialize();
208 public: JsonInstance(
unsigned long flags);
209 public:
virtual string getTypeName()
const;
210 public:
virtual JsonInstance* clone(
unsigned long)
const;
211 public:
virtual void toData(JsonStack&);
221inline std::string getString<const Hurricane::Instance::PlacementStatus::Code*>
233inline std::string getString<Hurricane::Instance::PlacementStatus::Code>
245inline Hurricane::Record* getRecord<const Hurricane::Instance::PlacementStatus::Code*>
248 Hurricane::Record* record =
new Hurricane::Record(getString(
object));
249 record->add(getSlot(
"Code", (
unsigned int*)
object));
265INSPECTOR_P_SUPPORT(Hurricane::Instance::PlugMap);
266INSPECTOR_P_SUPPORT(Hurricane::Instance::SharedPathMap);
271 w->write( getString(status.
getCode()) );
BasicLayer description (API)
Definition BasicLayer.h:42
Box description (API)
Definition Box.h:30
The model (API).
Definition Cell.h:64
std::int64_t Unit
Definition DbU.h:67
Instance Placement Status (API)
Definition Instance.h:48
PlacementStatus(const PlacementStatus &placementstatus)
PlacementStatus(const Code &code=UNPLACED)
const Code & getCode() const
Definition Instance.h:63
Code
Definition Instance.h:51
@ UNPLACED
Definition Instance.h:51
@ PLACED
Definition Instance.h:51
@ FIXED
Definition Instance.h:51
Instance description (API)
Definition Instance.h:35
Plugs getConnectedPlugs() const
Plug * getPlug(const Net *masterNet) const
Definition Instance.h:129
Box getAbutmentBox() const
Path getPath(const Path &tailPath=Path()) const
const Transformation & getTransformation() const
Definition Instance.h:127
static Instance * create(Cell *cell, const Name &name, Cell *masterCell, const Transformation &transformation, const PlacementStatus &placementstatus, bool secureFlag=true)
Plugs getPlugs() const
Definition Instance.h:130
void setTransformation(const Transformation &transformation)
Plugs getUnconnectedPlugs() const
void setMasterCell(Cell *masterCell, bool secureFlag=true)
const Name & getName() const
Definition Instance.h:125
static InstanceFilter getIsUnderFilter(const Box &area)
Instance * getClone(Cell *cloneCell) const
Cell * getMasterCell() const
Definition Instance.h:126
void setName(const Name &name)
static Instance * create(Cell *cell, const Name &name, Cell *masterCell, bool secureFlag=true)
Go Inherit
Definition Instance.h:46
Name description (API)
Definition Name.h:35
Net description (API)
Definition Net.h:46
Path description (API)
Definition Path.h:35
Plug description (API)
Definition Plug.h:37
Contains Almost Everything.
Definition BasicLayer.h:39
GenericCollection< Plug * > Plugs
Definition Plugs.h:35
GenericFilter< Instance * > InstanceFilter
Definition Instances.h:51