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;
106 private: PlacementStatus _placementStatus;
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);
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;};
static Instance * create(Cell *cell, const Name &name, Cell *masterCell, const Transformation &transformation, const PlacementStatus &placementstatus, bool secureFlag=true)