oaDesignObserver.h

Go to the documentation of this file.
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

Return to top of page