00001 // ***************************************************************************** 00002 // ***************************************************************************** 00003 // oaDesignObserver.h 00004 // 00005 // This file contains the definitions for the observer classes associated with 00006 // design-based objects: 00007 // 00008 // oaPcellObserver 00009 // This class implements the observers for IPcell. It supports onError, 00010 // preEval, and postEval actions. 00011 // 00012 // oaVersionedObserver<oaDesign> 00013 // This class implements the observers for design object. It supports 00014 // open, purge, preSave, postSave, preSaveAs, postSaveAs, preReopen, 00015 // postReopen, and truncate actions. 00016 // 00017 // oaVersionedObserver<oaParasiticNetwork> 00018 // 00019 // oaDesignUndoObserverBase 00020 // This is the base class for versioned observers. It supports observers 00021 // for undo/redo and check point change actions on designs. 00022 // 00023 // oaVersionedDesignUndoObserver 00024 // This template class supports future extensions of designUndoObservsers. 00025 // 00026 // ***************************************************************************** 00027 // Except as specified in the OpenAccess terms of use of Cadence or Silicon 00028 // Integration Initiative, this material may not be copied, modified, 00029 // re-published, uploaded, executed, or distributed in any way, in any medium, 00030 // in whole or in part, without prior written permission from Cadence.F 00031 // 00032 // Copyright 2002-2005 Cadence Design Systems, Inc. 00033 // All Rights Reserved. 00034 // $Author: rajeshh $ 00035 // $Revision: #7 $ 00036 // $Date: 2008/06/27 $ 00037 // $State: Exp $ 00038 // ***************************************************************************** 00039 // ***************************************************************************** 00040 00041 00042 00043 #if !defined(oaDesignObserver_P) 00044 #define oaDesignObserver_P 00045 00046 00047 00048 // ***************************************************************************** 00049 // Nested includes 00050 // ***************************************************************************** 00051 #include "oaObserver.h" 00052 #include "oaAnalysisOpPoint.h" 00053 #include "oaBoundary.h" 00054 #include "oaBlockage.h" 00055 #include "oaAssignment.h" 00056 #include "oaBusTermDef.h" 00057 #include "oaConnectDef.h" 00058 #include "oaCluster.h" 00059 #include "oaCMap.h" 00060 #include "oaDevice.h" 00061 #include "oaElmore.h" 00062 #include "oaFigGroup.h" 00063 #include "oaGCellPattern.h" 00064 #include "oaGuide.h" 00065 #include "oaLPPHeader.h" 00066 #include "oaMarker.h" 00067 #include "oaOpPointHeader.h" 00068 #include "oaNode.h" 00069 #include "oaPin.h" 00070 #include "oaPoleResidue.h" 00071 #include "oaRoute.h" 00072 #include "oaRow.h" 00073 #include "oaRowHeader.h" 00074 #include "oaScanChain.h" 00075 #include "oaScanChainInst.h" 00076 #include "oaShape.h" 00077 #include "oaSteiner.h" 00078 #include "oaSubNetwork.h" 00079 #include "oaTrackPattern.h" 00080 #include "oaVectorInstDef.h" 00081 #include "oaVia.h" 00082 #include "oaViaHeader.h" 00083 #include "oaParasiticNetwork.h" 00084 #include "oaPcellLink.h" 00085 00086 00087 00088 // ***************************************************************************** 00089 // Declare and define types in the OpenAccess namespace. 00090 // ***************************************************************************** 00091 BEGIN_OA_NAMESPACE 00092 00093 00094 00095 // ***************************************************************************** 00096 // Explicit template instantiations 00097 // ***************************************************************************** 00098 #if defined(OA_DESIGN_DLL_EXTERN) 00099 OA_DESIGN_DLL_EXTERN template 00100 class OA_DESIGN_DLL_API oaVersionedObserver<oaAnalysisOpPoint, oaRevisionTraits<oaAnalysisOpPoint>::scopedObserverRevision>; 00101 00102 OA_DESIGN_DLL_EXTERN template 00103 class OA_DESIGN_DLL_API oaVersionedObserver<oaAnalysisPoint, oaRevisionTraits<oaAnalysisPoint>::scopedObserverRevision>; 00104 00105 OA_DESIGN_DLL_EXTERN template 00106 class OA_DESIGN_DLL_API oaVersionedObserver<oaAssignment, oaRevisionTraits<oaAssignment>::scopedObserverRevision>; 00107 00108 OA_DESIGN_DLL_EXTERN template 00109 class OA_DESIGN_DLL_API oaVersionedObserver<oaBlock, oaRevisionTraits<oaBlock>::scopedObserverRevision>; 00110 00111 OA_DESIGN_DLL_EXTERN template 00112 class OA_DESIGN_DLL_API oaVersionedObserver<oaBlockage, oaRevisionTraits<oaBlockage>::scopedObserverRevision>; 00113 00114 OA_DESIGN_DLL_EXTERN template 00115 class OA_DESIGN_DLL_API oaVersionedObserver<oaBoundary, oaRevisionTraits<oaBoundary>::scopedObserverRevision>; 00116 00117 OA_DESIGN_DLL_EXTERN template 00118 class OA_DESIGN_DLL_API oaVersionedObserver<oaBusNetDef, oaRevisionTraits<oaBusNetDef>::scopedObserverRevision>; 00119 00120 OA_DESIGN_DLL_EXTERN template 00121 class OA_DESIGN_DLL_API oaVersionedObserver<oaBusTermDef, oaRevisionTraits<oaBusTermDef>::scopedObserverRevision>; 00122 00123 OA_DESIGN_DLL_EXTERN template 00124 class OA_DESIGN_DLL_API oaVersionedObserver<oaCluster, oaRevisionTraits<oaCluster>::scopedObserverRevision>; 00125 00126 OA_DESIGN_DLL_EXTERN template 00127 class OA_DESIGN_DLL_API oaVersionedObserver<oaCMap, oaRevisionTraits<oaCMap>::scopedObserverRevision>; 00128 00129 OA_DESIGN_DLL_EXTERN template 00130 class OA_DESIGN_DLL_API oaVersionedObserver<oaConnectDef, oaRevisionTraits<oaConnectDef>::scopedObserverRevision>; 00131 00132 OA_DESIGN_DLL_EXTERN template 00133 class OA_DESIGN_DLL_API oaVersionedObserver<oaDevice, oaRevisionTraits<oaDevice>::scopedObserverRevision>; 00134 00135 OA_DESIGN_DLL_EXTERN template 00136 class OA_DESIGN_DLL_API oaVersionedObserver<oaElmore, oaRevisionTraits<oaElmore>::scopedObserverRevision>; 00137 00138 OA_DESIGN_DLL_EXTERN template 00139 class OA_DESIGN_DLL_API oaVersionedObserver<oaFigGroup, oaRevisionTraits<oaFigGroup>::scopedObserverRevision>; 00140 00141 OA_DESIGN_DLL_EXTERN template 00142 class OA_DESIGN_DLL_API oaVersionedObserver<oaFigGroupMem, oaRevisionTraits<oaFigGroupMem>::scopedObserverRevision>; 00143 00144 OA_DESIGN_DLL_EXTERN template 00145 class OA_DESIGN_DLL_API oaVersionedObserver<oaGCellPattern, oaRevisionTraits<oaGCellPattern>::scopedObserverRevision>; 00146 00147 OA_DESIGN_DLL_EXTERN template 00148 class OA_DESIGN_DLL_API oaVersionedObserver<oaGuide, oaRevisionTraits<oaGuide>::scopedObserverRevision>; 00149 00150 OA_DESIGN_DLL_EXTERN template 00151 class OA_DESIGN_DLL_API oaVersionedObserver<oaInst, oaRevisionTraits<oaInst>::scopedObserverRevision>; 00152 00153 OA_DESIGN_DLL_EXTERN template 00154 class OA_DESIGN_DLL_API oaVersionedObserver<oaInstHeader, oaRevisionTraits<oaInstHeader>::scopedObserverRevision>; 00155 00156 OA_DESIGN_DLL_EXTERN template 00157 class OA_DESIGN_DLL_API oaVersionedObserver<oaInstTerm, oaRevisionTraits<oaInstTerm>::scopedObserverRevision>; 00158 00159 OA_DESIGN_DLL_EXTERN template 00160 class OA_DESIGN_DLL_API oaVersionedObserver<oaLayerHeader, oaRevisionTraits<oaLayerHeader>::scopedObserverRevision>; 00161 00162 OA_DESIGN_DLL_EXTERN template 00163 class OA_DESIGN_DLL_API oaVersionedObserver<oaLPPHeader, oaRevisionTraits<oaLPPHeader>::scopedObserverRevision>; 00164 00165 OA_DESIGN_DLL_EXTERN template 00166 class OA_DESIGN_DLL_API oaVersionedObserver<oaMarker, oaRevisionTraits<oaMarker>::scopedObserverRevision>; 00167 00168 OA_DESIGN_DLL_EXTERN template 00169 class OA_DESIGN_DLL_API oaVersionedObserver<oaNet, oaRevisionTraits<oaNet>::scopedObserverRevision>; 00170 00171 OA_DESIGN_DLL_EXTERN template 00172 class OA_DESIGN_DLL_API oaVersionedObserver<oaNode, oaRevisionTraits<oaNode>::scopedObserverRevision>; 00173 00174 OA_DESIGN_DLL_EXTERN template 00175 class OA_DESIGN_DLL_API oaVersionedObserver<oaOpPointHeader, oaRevisionTraits<oaOpPointHeader>::scopedObserverRevision>; 00176 00177 OA_DESIGN_DLL_EXTERN template 00178 class OA_DESIGN_DLL_API oaVersionedObserver<oaPin, oaRevisionTraits<oaPin>::scopedObserverRevision>; 00179 00180 OA_DESIGN_DLL_EXTERN template 00181 class OA_DESIGN_DLL_API oaVersionedObserver<oaPoleResidue, oaRevisionTraits<oaPoleResidue>::scopedObserverRevision>; 00182 00183 OA_DESIGN_DLL_EXTERN template 00184 class OA_DESIGN_DLL_API oaVersionedObserver<oaReducedModel, oaRevisionTraits<oaReducedModel>::scopedObserverRevision>; 00185 00186 OA_DESIGN_DLL_EXTERN template 00187 class OA_DESIGN_DLL_API oaVersionedObserver<oaRoute, oaRevisionTraits<oaRoute>::scopedObserverRevision>; 00188 00189 OA_DESIGN_DLL_EXTERN template 00190 class OA_DESIGN_DLL_API oaVersionedObserver<oaRow, oaRevisionTraits<oaRow>::scopedObserverRevision>; 00191 00192 OA_DESIGN_DLL_EXTERN template 00193 class OA_DESIGN_DLL_API oaVersionedObserver<oaRowHeader, oaRevisionTraits<oaRowHeader>::scopedObserverRevision>; 00194 00195 OA_DESIGN_DLL_EXTERN template 00196 class OA_DESIGN_DLL_API oaVersionedObserver<oaScanChain, oaRevisionTraits<oaScanChain>::scopedObserverRevision>; 00197 00198 OA_DESIGN_DLL_EXTERN template 00199 class OA_DESIGN_DLL_API oaVersionedObserver<oaScanChainInst, oaRevisionTraits<oaScanChainInst>::scopedObserverRevision>; 00200 00201 OA_DESIGN_DLL_EXTERN template 00202 class OA_DESIGN_DLL_API oaVersionedObserver<oaScanChainSet, oaRevisionTraits<oaScanChainSet>::scopedObserverRevision>; 00203 00204 OA_DESIGN_DLL_EXTERN template 00205 class OA_DESIGN_DLL_API oaVersionedObserver<oaShape, oaRevisionTraits<oaShape>::scopedObserverRevision>; 00206 00207 OA_DESIGN_DLL_EXTERN template 00208 class OA_DESIGN_DLL_API oaVersionedObserver<oaSteiner, oaRevisionTraits<oaSteiner>::scopedObserverRevision>; 00209 00210 OA_DESIGN_DLL_EXTERN template 00211 class OA_DESIGN_DLL_API oaVersionedObserver<oaSubNetwork, oaRevisionTraits<oaSubNetwork>::scopedObserverRevision>; 00212 00213 OA_DESIGN_DLL_EXTERN template 00214 class OA_DESIGN_DLL_API oaVersionedObserver<oaTerm, oaRevisionTraits<oaTerm>::scopedObserverRevision>; 00215 00216 OA_DESIGN_DLL_EXTERN template 00217 class OA_DESIGN_DLL_API oaVersionedObserver<oaTrackPattern, oaRevisionTraits<oaTrackPattern>::scopedObserverRevision>; 00218 00219 OA_DESIGN_DLL_EXTERN template 00220 class OA_DESIGN_DLL_API oaVersionedObserver<oaVectorInstDef, oaRevisionTraits<oaVectorInstDef>::scopedObserverRevision>; 00221 00222 OA_DESIGN_DLL_EXTERN template 00223 class OA_DESIGN_DLL_API oaVersionedObserver<oaVia, oaRevisionTraits<oaVia>::scopedObserverRevision>; 00224 00225 OA_DESIGN_DLL_EXTERN template 00226 class OA_DESIGN_DLL_API oaVersionedObserver<oaViaHeader, oaRevisionTraits<oaViaHeader>::scopedObserverRevision>; 00227 00228 #endif 00229 00230 00231 00232 00233 // ***************************************************************************** 00234 // oaPcellObserver 00235 // ***************************************************************************** 00236 class OA_DESIGN_DLL_API oaPcellObserver : public oaBaseObserver { 00237 public: 00238 oaPcellObserver(oaUInt4 priorityIn, 00239 oaBoolean enabledIn = true); 00240 virtual ~oaPcellObserver(); 00241 00242 virtual void onError(oaDesign *design, 00243 const oaString &msg, 00244 oaPcellErrorTypeEnum type); 00245 virtual void onPreEval(oaDesign *design, 00246 oaPcellDef *pcellDef); 00247 virtual void onPostEval(oaDesign *design, 00248 oaPcellDef *pcellDef); 00249 00250 static void notifyErrorObservers(oaDesign *design, 00251 const oaString &msg, 00252 oaPcellErrorTypeEnum type); 00253 static void notifyPreEvalObservers(oaDesign *design, 00254 oaPcellDef *pcellDef); 00255 static void notifyPostEvalObservers(oaDesign *design, 00256 oaPcellDef *pcellDef); 00257 00258 private: 00259 oaPcellObserver *next; 00260 00261 static oaPcellObserver *first; 00262 }; 00263 00264 00265 00266 // ***************************************************************************** 00267 // oaVersionedObserver<oaDesign> specialization 00268 // ***************************************************************************** 00269 template<> 00270 class OA_DESIGN_DLL_API oaVersionedObserver<oaDesign, oacObserverVersion1> : public oaBaseObserver { 00271 public: 00272 oaVersionedObserver(oaUInt4 priorityIn, 00273 oaBoolean enabledIn = true); 00274 virtual ~oaVersionedObserver(); 00275 00276 virtual void onFirstOpen(oaDesign *design); 00277 virtual void onPurge(oaDesign *design); 00278 virtual void onPreReopen(oaDesign *design, 00279 oaChar newMode); 00280 virtual void onPostReopen(oaDesign *design, 00281 oaChar oldMode); 00282 virtual void onTruncate(oaDesign *design); 00283 virtual void onPreSave(oaDesign *design); 00284 virtual void onPostSave(oaDesign *design, 00285 oaBoolean succeeded); 00286 virtual void onPreSaveAs(oaDesign *design, 00287 const oaScalarName &libName, 00288 const oaScalarName &cellName, 00289 const oaScalarName &viewName); 00290 virtual void onPostSaveAs(oaDesign *design, 00291 const oaScalarName &libName, 00292 const oaScalarName &cellName, 00293 const oaScalarName &viewName, 00294 oaBoolean succeeded); 00295 virtual void onPreModify(oaDesign *design, 00296 oaDesignModTypeEnum modType); 00297 virtual void onPostModify(oaDesign *design, 00298 oaDesignModTypeEnum modType); 00299 00300 static void notifyFirstOpenObservers(oaDesign *design); 00301 static void notifyPurgeObservers(oaDesign *design); 00302 static void notifyPreReopenObservers(oaDesign *design, 00303 oaChar newMode); 00304 static void notifyPostReopenObservers(oaDesign *design, 00305 oaChar oldMode); 00306 static void notifyTruncateObservers(oaDesign *design); 00307 static void notifyPreSaveObservers(oaDesign *design); 00308 static void notifyPostSaveObservers(oaDesign *design, 00309 oaBoolean succeeded); 00310 static void notifyPreSaveAsObservers(oaDesign *design, 00311 const oaScalarName &libName, 00312 const oaScalarName &cellName, 00313 const oaScalarName &viewName); 00314 static void notifyPostSaveAsObservers(oaDesign *design, 00315 const oaScalarName &libName, 00316 const oaScalarName &cellName, 00317 const oaScalarName &viewName, 00318 oaBoolean succeeded); 00319 static void notifyPreModifyObservers(oaDesign *design, 00320 oaDesignModTypeEnum modType); 00321 static void notifyPostModifyObservers(oaDesign *design, 00322 oaDesignModTypeEnum modType); 00323 private: 00324 oaVersionedObserver<oaDesign, oacObserverVersion1> *next; 00325 00326 static oaVersionedObserver<oaDesign, oacObserverVersion1> *first; 00327 }; 00328 00329 00330 00331 // ***************************************************************************** 00332 // oaDesignUndoObserverBase 00333 // ***************************************************************************** 00334 class OA_DESIGN_DLL_API oaDesignUndoObserverBase { 00335 public: 00336 oaDesignUndoObserverBase(); 00337 virtual ~oaDesignUndoObserverBase(); 00338 00339 virtual void onStartUndo(oaDesign *design); 00340 virtual void onEndUndo(oaDesign *design); 00341 00342 virtual void onStartRedo(oaDesign *design); 00343 virtual void onEndRedo(oaDesign *design); 00344 00345 virtual void onSetCp(oaDesign *design, 00346 oaUInt4 cpID); 00347 virtual void onUnsetCp(oaDesign *design); 00348 00349 oaBoolean isEnabled(); 00350 void enable(oaBoolean enabledIn); 00351 00352 protected: 00353 void *pImpl; 00354 }; 00355 00356 00357 00358 // ***************************************************************************** 00359 // oaDesignUndoObserver 00360 // ***************************************************************************** 00361 #define oaDesignUndoObserver oaDesignUndoObserver<oacObserverVersion2> // <JR> Removed "Versioned" 00362 00363 00364 00365 // ***************************************************************************** 00366 // oaVersionedDesignUndoObserver 00367 // ***************************************************************************** 00368 template <oaUInt4 rev = oacObserverVersion2> 00369 class OA_DESIGN_DLL_API oaDesignUndoObserver : public oaDesignUndoObserverBase {// <JR> Removed "Versioned" 00370 public: 00371 oaDesignUndoObserver(oaUInt4 priorityIn, // <JR> Removed "Versioned" 00372 oaBoolean enabledIn = true); 00373 }; 00374 00375 00376 00377 // ***************************************************************************** 00378 // oaVersionedObserver<oaParasiticNetwork> specialization 00379 // ***************************************************************************** 00380 template<> 00381 class OA_DESIGN_DLL_API oaVersionedObserver<oaParasiticNetwork, oacObserverVersion1> : public oaBaseObserver { 00382 public: 00383 oaVersionedObserver(oaUInt4 priorityIn, 00384 oaBoolean enabledIn = true); 00385 virtual ~oaVersionedObserver(); 00386 00387 virtual void onPostCreate(oaParasiticNetwork *pn); 00388 virtual void onPreDestroy(oaParasiticNetwork *pn); 00389 virtual void onPostLoad(oaParasiticNetwork *pn); 00390 virtual void onPreUnload(oaParasiticNetwork *pn); 00391 virtual void onPreModify(oaParasiticNetwork *pn, 00392 oaParasiticNetworkModTypeEnum modType); 00393 virtual void onPostModify(oaParasiticNetwork *pn, 00394 oaParasiticNetworkModTypeEnum modType); 00395 00396 static void notifyPostCreateObservers(oaParasiticNetwork *pn); 00397 static void notifyPreDestroyObservers(oaParasiticNetwork *pn); 00398 static void notifyPostLoadObservers(oaParasiticNetwork *pn); 00399 static void notifyPreUnloadObservers(oaParasiticNetwork *pn); 00400 static void notifyPreModifyObservers(oaParasiticNetwork *pn, 00401 oaParasiticNetworkModTypeEnum mt); 00402 static void notifyPostModifyObservers(oaParasiticNetwork *pn, 00403 oaParasiticNetworkModTypeEnum mt); 00404 00405 private: 00406 typedef oaVersionedObserver<oaParasiticNetwork, oacObserverVersion1> oaParasiticNetworkObserver; 00407 00408 oaParasiticNetworkObserver *next; 00409 00410 static oaParasiticNetworkObserver *first; 00411 }; 00412 /* <TM> 6/18/07 comment out. 00413 template<> 00414 class OA_DESIGN_DLL_API oaVersionedObserver<oaParasiticNetwork, 00415 oacObserverVersion2> : public oaVersionedObserver<oaParasiticNetwork, 00416 oacObserverVersion1> { 00417 public: 00418 oaVersionedObserver(oaUInt4 priorityIn, 00419 oaBoolean enabledIn = true); 00420 virtual ~oaVersionedObserver(); 00421 00422 virtual void onBeginCreate(oaObject *owner, 00423 oaUInt4 scopeID); 00424 virtual void onEndCreate(oaParasiticNetwork *object, 00425 oaUInt4 scopeID); 00426 virtual void onBeginDestroy(oaParasiticNetwork *object, 00427 oaUInt4 scopeID); 00428 virtual void onEndDestroy(oaObject *owner, 00429 oaUInt4 scopeID); 00430 00431 static void notifyBeginCreateObservers(oaObject *database, 00432 oaUInt4 scopeID); 00433 static void notifyEndCreateObservers(oaParasiticNetwork *object, 00434 oaUInt4 scopeID); 00435 static void notifyBeginDestroyObservers(oaParasiticNetwork *object, 00436 oaUInt4 scopeID); 00437 static void notifyEndDestroyObservers(oaObject *database, 00438 oaUInt4 scopeID); 00439 00440 private: 00441 typedef oaVersionedObserver<oaParasiticNetwork, oaRevisionTraits<oaParasiticNetwork>::scopedObserverRevision> oaParasiticNetworkObserver; 00442 00443 oaParasiticNetworkObserver *next; 00444 00445 static oaParasiticNetworkObserver *first; 00446 }; 00447 */ 00448 00449 00450 // ***************************************************************************** 00451 // oaRecursionObserver 00452 // ***************************************************************************** 00453 class OA_DESIGN_DLL_API oaRecursionObserver : public oaBaseObserver { 00454 public: 00455 oaRecursionObserver(oaUInt4 priorityIn, 00456 oaBoolean enabledIn = true); 00457 virtual ~oaRecursionObserver(); 00458 00459 virtual void onDetect(const oaDesign *design, 00460 const oaDesignArray &bottomUpList); 00461 virtual void onBind(const oaRefHeader *header, 00462 const oaDesign *master, 00463 const oaDesignArray &bottomUpList); 00464 00465 static void notifyDetectObservers(const oaDesign *design, 00466 const oaDesignArray &bottomUpList); 00467 static void notifyBindObservers(const oaRefHeader *header, 00468 const oaDesign *master, 00469 const oaDesignArray &bottomUpList); 00470 00471 private: 00472 oaRecursionObserver *next; 00473 00474 static oaRecursionObserver *first; 00475 }; 00476 00477 00478 00479 // ***************************************************************************** 00480 // oaPcellFileObserver 00481 // ***************************************************************************** 00482 class OA_DESIGN_DLL_API oaPcellFileObserver { 00483 public: 00484 oaPcellFileObserver(oaUInt4 priorityIn, 00485 oaBoolean enabledIn = true); 00486 virtual ~oaPcellFileObserver(); 00487 00488 virtual void onRead(oaDesign *design, 00489 PcellFile *file, 00490 oaUInt8 offset); 00491 virtual void onPreAppend(oaDesign *design, 00492 PcellFile *file); 00493 virtual void onPostAppend(oaDesign *design, 00494 PcellFile *file); 00495 00496 oaBoolean isEnabled(); 00497 void enable(oaBoolean enabledIn); 00498 oaUInt4 getPriority() const; 00499 00500 private: 00501 void *pImpl; 00502 }; 00503 00504 00505 00506 00507 END_OA_NAMESPACE 00508 00509 #endif
Copyright © 2002 - 2010 Cadence Design Systems, Inc.
All Rights Reserved.