From 0df4821806e22ae42656c7bdd5765e4c17ba3889 Mon Sep 17 00:00:00 2001 From: Jean-Paul Chaput Date: Mon, 27 May 2019 18:49:51 +0200 Subject: [PATCH] Full update of the generated documentation for version 2.3 --- .../doc/crlcore/html/AcmSigda_8h_source.html | 2 +- .../html/AllianceFramework_8h_source.html | 30 +- .../html/AllianceLibrary_8h_source.html | 2 +- .../doc/crlcore/html/Banner_8h_source.html | 2 +- .../doc/crlcore/html/Catalog_8h_source.html | 2 +- .../crlcore/html/Environment_8h_source.html | 2 +- .../html/GraphicToolEngine_8h_source.html | 2 +- .../crlcore/html/RoutingGauge_8h_source.html | 2 +- .../html/RoutingLayerGauge_8h_source.html | 6 +- .../crlcore/html/SearchPath_8h_source.html | 2 +- .../crlcore/html/ToolEngine_8h_source.html | 2 +- .../crlcore/html/ToolEngines_8h_source.html | 2 +- crlcore/doc/crlcore/html/annotated.html | 2 +- .../html/classCRL_1_1AcmSigda-members.html | 2 +- .../crlcore/html/classCRL_1_1AcmSigda.html | 2 +- ...classCRL_1_1AllianceFramework-members.html | 2 +- .../html/classCRL_1_1AllianceFramework.html | 2 +- .../classCRL_1_1AllianceLibrary-members.html | 2 +- .../html/classCRL_1_1AllianceLibrary.html | 2 +- .../html/classCRL_1_1Banner-members.html | 2 +- .../doc/crlcore/html/classCRL_1_1Banner.html | 2 +- .../html/classCRL_1_1Catalog-members.html | 2 +- .../doc/crlcore/html/classCRL_1_1Catalog.html | 2 +- .../classCRL_1_1CatalogExtension-members.html | 2 +- .../html/classCRL_1_1CatalogExtension.html | 2 +- .../classCRL_1_1Catalog_1_1State-members.html | 2 +- .../html/classCRL_1_1Catalog_1_1State.html | 2 +- .../html/classCRL_1_1Environment-members.html | 2 +- .../crlcore/html/classCRL_1_1Environment.html | 2 +- .../html/classCRL_1_1GraphicTool-members.html | 2 +- .../crlcore/html/classCRL_1_1GraphicTool.html | 2 +- .../classCRL_1_1RoutingGauge-members.html | 2 +- .../html/classCRL_1_1RoutingGauge.html | 2 +- ...classCRL_1_1RoutingLayerGauge-members.html | 9 +- .../html/classCRL_1_1RoutingLayerGauge.html | 35 +- .../html/classCRL_1_1SearchPath-members.html | 2 +- .../crlcore/html/classCRL_1_1SearchPath.html | 2 +- ...sCRL_1_1SearchPath_1_1Element-members.html | 2 +- .../classCRL_1_1SearchPath_1_1Element.html | 2 +- .../html/classCRL_1_1ToolEngine-members.html | 2 +- .../crlcore/html/classCRL_1_1ToolEngine.html | 2 +- crlcore/doc/crlcore/html/classes.html | 2 +- crlcore/doc/crlcore/html/crlcore.tag | 9 +- .../dir_1d3beb215ce2defdb52d6dee9d41bc7a.html | 2 +- .../dir_68267d1309a1af8e8297ef4c3efbcdba.html | 2 +- .../dir_d23e13494685c82fafa9ef5abb5746af.html | 2 +- crlcore/doc/crlcore/html/files.html | 2 +- crlcore/doc/crlcore/html/functions.html | 2 +- crlcore/doc/crlcore/html/functions_0x7e.html | 2 +- crlcore/doc/crlcore/html/functions_b.html | 2 +- crlcore/doc/crlcore/html/functions_c.html | 2 +- crlcore/doc/crlcore/html/functions_d.html | 2 +- crlcore/doc/crlcore/html/functions_e.html | 2 +- crlcore/doc/crlcore/html/functions_enum.html | 2 +- crlcore/doc/crlcore/html/functions_eval.html | 2 +- crlcore/doc/crlcore/html/functions_f.html | 2 +- crlcore/doc/crlcore/html/functions_func.html | 5 +- crlcore/doc/crlcore/html/functions_g.html | 5 +- crlcore/doc/crlcore/html/functions_h.html | 2 +- crlcore/doc/crlcore/html/functions_i.html | 2 +- crlcore/doc/crlcore/html/functions_l.html | 2 +- crlcore/doc/crlcore/html/functions_m.html | 2 +- crlcore/doc/crlcore/html/functions_o.html | 2 +- crlcore/doc/crlcore/html/functions_p.html | 2 +- crlcore/doc/crlcore/html/functions_r.html | 2 +- crlcore/doc/crlcore/html/functions_s.html | 2 +- crlcore/doc/crlcore/html/functions_v.html | 2 +- crlcore/doc/crlcore/html/hierarchy.html | 2 +- crlcore/doc/crlcore/html/index.html | 2 +- crlcore/doc/crlcore/html/namespaceCRL.html | 2 +- .../doc/crlcore/html/namespaceConstant.html | 2 +- .../doc/crlcore/html/namespacemembers.html | 2 +- .../crlcore/html/namespacemembers_enum.html | 2 +- .../crlcore/html/namespacemembers_eval.html | 2 +- .../crlcore/html/namespacemembers_type.html | 2 +- crlcore/doc/crlcore/html/namespaces.html | 2 +- .../latex/classCRL_1_1RoutingLayerGauge.tex | 12 +- crlcore/doc/crlcore/latex/refman.tex | 2 +- crlcore/etc/symbolic/cmos/plugins.conf | 5 - documentation/CMakeLists.txt | 11 + documentation/PythonCpp/PythonCpp.pdf | Bin 173087 -> 174061 bytes .../PythonTutorial/PythonTutorial.pdf | Bin 208430 -> 298133 bytes documentation/PythonTutorial/pdfHeader.rst | 43 +- documentation/RDS/RDS.pdf | Bin 116053 -> 116386 bytes documentation/Stratus/Stratus.pdf | Bin 560554 -> 563828 bytes documentation/UsersGuide/Installation.rst | 66 +- documentation/UsersGuide/LicenseCredits.rst | 18 +- documentation/UsersGuide/Releases.rst | 26 +- documentation/UsersGuide/ScriptsPlugins.rst | 117 +-- documentation/UsersGuide/UsersGuide.pdf | Bin 634687 -> 761684 bytes documentation/UsersGuide/ViewerTools.rst | 165 ++-- .../UsersGuide/images/chip-structure-1.fig | 54 +- .../UsersGuide/images/chip-structure-1.pdf | Bin 160152 -> 14163 bytes .../UsersGuide/images/chip-structure-1.png | Bin 9949 -> 46764 bytes documentation/UsersGuide/pdfHeader.rst | 42 +- .../_build/doctrees/Analog/Analog.doctree | Bin 59921 -> 64436 bytes .../Architecture.doctree | Bin 0 -> 71524 bytes .../ConfigurationTechnology/index.doctree | Bin 0 -> 65166 bytes .../ConfigurationTechnology/pdfHeader.doctree | Bin 0 -> 65006 bytes .../_build/doctrees/CrlCore/CrlCore.doctree | Bin 59857 -> 64398 bytes .../doctrees/Hurricane/Hurricane.doctree | Bin 59912 -> 64393 bytes .../doctrees/Katabatic/Katabatic.doctree | Bin 60625 -> 65136 bytes .../_build/doctrees/Kite/Kite.doctree | Bin 60606 -> 65132 bytes .../_build/doctrees/Oroshi/Oroshi.doctree | Bin 59869 -> 64340 bytes .../doctrees/PythonCpp/Configuration.doctree | Bin 66066 -> 70559 bytes .../doctrees/PythonCpp/DBoHierarchy.doctree | Bin 112364 -> 116812 bytes .../doctrees/PythonCpp/DBoStandalone.doctree | Bin 133076 -> 137544 bytes .../_build/doctrees/PythonCpp/DbU.doctree | Bin 65853 -> 70336 bytes .../doctrees/PythonCpp/Introduction.doctree | Bin 91534 -> 95995 bytes .../_build/doctrees/PythonCpp/Name.doctree | Bin 59209 -> 63790 bytes .../_build/doctrees/PythonCpp/NonDBo.doctree | Bin 80266 -> 84785 bytes .../_build/doctrees/PythonCpp/index.doctree | Bin 60745 -> 65191 bytes .../PythonTutorial/AdvancedTopics.doctree | Bin 86144 -> 90661 bytes .../PythonTutorial/CellNetComponent.doctree | Bin 135558 -> 140020 bytes .../doctrees/PythonTutorial/CgtScript.doctree | Bin 94377 -> 98871 bytes .../PythonTutorial/Collections.doctree | Bin 96271 -> 100748 bytes .../PythonTutorial/Environment.doctree | Bin 99210 -> 103674 bytes .../PythonTutorial/Introduction.doctree | Bin 108510 -> 113014 bytes .../doctrees/PythonTutorial/Netlist.doctree | Bin 139347 -> 143794 bytes .../PythonTutorial/RealDesigns.doctree | Bin 91943 -> 96437 bytes .../PythonTutorial/ToolEngines.doctree | Bin 104945 -> 109452 bytes .../doctrees/PythonTutorial/index.doctree | Bin 62190 -> 66706 bytes .../doctrees/PythonTutorial/pdfHeader.doctree | Bin 85911 -> 91648 bytes .../_build/doctrees/RDS/RDSpage.doctree | Bin 170246 -> 174703 bytes .../_build/doctrees/RDS/index.doctree | Bin 60885 -> 65391 bytes .../doctrees/Stratus/Developper.doctree | Bin 72794 -> 72288 bytes .../_build/doctrees/Stratus/DpGen.doctree | Bin 589867 -> 588527 bytes .../_build/doctrees/Stratus/Language.doctree | Bin 483120 -> 482676 bytes .../_build/doctrees/Stratus/Patterns.doctree | Bin 41404 -> 40922 bytes .../_build/doctrees/Stratus/index.doctree | Bin 60960 -> 65476 bytes .../_build/doctrees/Unicorn/Unicorn.doctree | Bin 59854 -> 64335 bytes .../doctrees/UsersGuide/Configuration.doctree | Bin 171712 -> 175622 bytes .../doctrees/UsersGuide/DesignFlow.doctree | Bin 0 -> 68676 bytes .../doctrees/UsersGuide/Installation.doctree | Bin 115209 -> 148574 bytes .../UsersGuide/LicenseCredits.doctree | Bin 66942 -> 72096 bytes .../doctrees/UsersGuide/Releases.doctree | Bin 86385 -> 96954 bytes .../UsersGuide/ScriptsPlugins.doctree | Bin 138217 -> 139721 bytes .../doctrees/UsersGuide/ViewerTools.doctree | Bin 288058 -> 284038 bytes .../_build/doctrees/UsersGuide/index.doctree | Bin 60646 -> 65195 bytes .../_build/doctrees/Viewer/Viewer.doctree | Bin 59840 -> 64306 bytes .../_build/doctrees/defapi/defapi.doctree | Bin 60402 -> 64918 bytes .../_build/doctrees/environment.pickle | Bin 213708 -> 217926 bytes .../_build/doctrees/etc/definitions.doctree | Bin 58416 -> 62882 bytes documentation/_build/doctrees/index.doctree | Bin 6170 -> 6218 bytes .../_build/doctrees/lefapi/lefapi.doctree | Bin 69092 -> 73534 bytes .../_build/doctrees/lefdef/lefdef.doctree | Bin 60498 -> 64994 bytes documentation/_build/html/Analog/Analog.html | 22 +- .../ConfigurationTechnology/Architecture.html | 645 ++++++++++++ .../html/ConfigurationTechnology/index.html | 599 ++++++++++++ .../ConfigurationTechnology/pdfHeader.html | 589 +++++++++++ documentation/_build/html/Contents.html | 37 +- .../_build/html/CrlCore/CrlCore.html | 22 +- .../_build/html/Hurricane/Hurricane.html | 26 +- .../_build/html/Katabatic/Katabatic.html | 22 +- documentation/_build/html/Kite/Kite.html | 22 +- documentation/_build/html/Oroshi/Oroshi.html | 22 +- .../_build/html/PythonCpp/Configuration.html | 22 +- .../_build/html/PythonCpp/DBoHierarchy.html | 22 +- .../_build/html/PythonCpp/DBoStandalone.html | 22 +- documentation/_build/html/PythonCpp/DbU.html | 22 +- .../_build/html/PythonCpp/Introduction.html | 22 +- documentation/_build/html/PythonCpp/Name.html | 22 +- .../_build/html/PythonCpp/NonDBo.html | 22 +- .../_build/html/PythonCpp/index.html | 22 +- .../html/PythonTutorial/AdvancedTopics.html | 24 +- .../html/PythonTutorial/CellNetComponent.html | 44 +- .../_build/html/PythonTutorial/CgtScript.html | 28 +- .../html/PythonTutorial/Collections.html | 34 +- .../html/PythonTutorial/Environment.html | 38 +- .../html/PythonTutorial/Introduction.html | 30 +- .../_build/html/PythonTutorial/Netlist.html | 50 +- .../html/PythonTutorial/RealDesigns.html | 32 +- .../html/PythonTutorial/ToolEngines.html | 28 +- .../html/PythonTutorial/definitions.html | 22 +- .../_build/html/PythonTutorial/index.html | 24 +- .../_build/html/PythonTutorial/pdfHeader.html | 39 +- documentation/_build/html/RDS/RDSpage.html | 22 +- documentation/_build/html/RDS/index.html | 22 +- .../_build/html/Stratus/Developper.html | 24 +- documentation/_build/html/Stratus/DpGen.html | 28 +- .../_build/html/Stratus/Language.html | 24 +- .../_build/html/Stratus/Patterns.html | 24 +- documentation/_build/html/Stratus/index.html | 22 +- .../_build/html/Unicorn/Unicorn.html | 22 +- .../_build/html/UsersGuide/Configuration.html | 62 +- .../_build/html/UsersGuide/DesignFlow.html | 610 ++++++++++++ .../_build/html/UsersGuide/Installation.html | 225 +++-- .../html/UsersGuide/LicenseCredits.html | 36 +- .../_build/html/UsersGuide/Releases.html | 52 +- .../html/UsersGuide/ScriptsPlugins.html | 200 ++-- .../_build/html/UsersGuide/ViewerTools.html | 207 ++-- .../_build/html/UsersGuide/index.html | 26 +- documentation/_build/html/Viewer/Viewer.html | 22 +- .../_build/html/_images/chip-structure-1.png | Bin 9949 -> 46764 bytes ...37db03668389c8e33d766f186469af280334bb.png | Bin 1253 -> 0 bytes ...9c214f89790a2afdc94a731f08c35d0fafa77d.png | Bin 1216 -> 0 bytes .../ConfigurationTechnology/Architecture.txt | 69 ++ .../ConfigurationTechnology/index.txt | 17 + .../ConfigurationTechnology/pdfHeader.txt | 15 + .../PythonTutorial/AdvancedTopics.txt | 2 +- .../PythonTutorial/CellNetComponent.txt | 22 +- .../_sources/PythonTutorial/CgtScript.txt | 6 +- .../_sources/PythonTutorial/Collections.txt | 12 +- .../_sources/PythonTutorial/Environment.txt | 14 +- .../_sources/PythonTutorial/Introduction.txt | 8 +- .../html/_sources/PythonTutorial/Netlist.txt | 28 +- .../_sources/PythonTutorial/RealDesigns.txt | 10 +- .../_sources/PythonTutorial/ToolEngines.txt | 6 +- .../_sources/PythonTutorial/pdfHeader.txt | 42 +- .../html/_sources/Stratus/Developper.txt | 3 - .../_build/html/_sources/Stratus/DpGen.txt | 3 - .../_build/html/_sources/Stratus/Language.txt | 3 - .../_build/html/_sources/Stratus/Patterns.txt | 3 - .../_sources/UsersGuide/Configuration.txt | 49 +- .../html/_sources/UsersGuide/DesignFlow.txt | 25 + .../html/_sources/UsersGuide/Installation.txt | 214 +++- .../_sources/UsersGuide/LicenseCredits.txt | 28 +- .../html/_sources/UsersGuide/Releases.txt | 28 +- .../_sources/UsersGuide/ScriptsPlugins.txt | 145 ++- .../html/_sources/UsersGuide/ViewerTools.txt | 165 ++-- .../_build/html/_sources/UsersGuide/index.txt | 1 + .../_build/html/_sources/etc/definitions.txt | 13 + documentation/_build/html/_sources/index.txt | 1 + documentation/_build/html/defapi/defapi.html | 22 +- .../_build/html/etc/definitions.html | 22 +- documentation/_build/html/genindex.html | 22 +- documentation/_build/html/index.html | 24 +- documentation/_build/html/lefapi/lefapi.html | 22 +- documentation/_build/html/lefdef/lefdef.html | 22 +- documentation/_build/html/objects.inv | Bin 1650 -> 1724 bytes documentation/_build/html/search.html | 22 +- documentation/_build/html/searchindex.js | 2 +- documentation/etc/definitions.rst | 6 + documentation/etc/images/Logo-CNRS.png | Bin 0 -> 31307 bytes .../etc/images/Logo-LIP6-bleugris.png | Bin 0 -> 295067 bytes documentation/etc/images/Logo-SU.png | Bin 0 -> 61377 bytes documentation/examples/AM2901/CMakeLists.txt | 13 +- documentation/examples/AM2901/amd2901.vst | 4 +- documentation/examples/AM2901/amd2901_chip.py | 12 - .../examples/AM2901/amd2901_ioring.py | 15 + documentation/examples/AM2901/corona.vst | 102 ++ documentation/examples/AM2901/doChip.py | 57 +- hurricane/doc/analog/html/graph_legend.html | 2 +- hurricane/doc/analog/html/index.html | 2 +- hurricane/doc/analog/latex/refman.tex | 2 +- .../hurricane/html/BasicLayer_8h_source.html | 4 +- .../doc/hurricane/html/Box_8h_source.html | 2 +- .../doc/hurricane/html/Boxes_8h_source.html | 2 +- .../doc/hurricane/html/Cell_8h_source.html | 6 +- .../doc/hurricane/html/Cells_8h_source.html | 2 +- .../hurricane/html/Collection_8h_source.html | 20 +- .../doc/hurricane/html/Commons_8h_source.html | 2 +- .../hurricane/html/Component_8h_source.html | 2 +- .../hurricane/html/Components_8h_source.html | 2 +- .../html/ContactLayer_8h_source.html | 2 +- .../doc/hurricane/html/Contact_8h_source.html | 2 +- .../hurricane/html/Contacts_8h_source.html | 2 +- .../doc/hurricane/html/DBo_8h_source.html | 8 +- .../doc/hurricane/html/DBos_8h_source.html | 2 +- .../hurricane/html/DataBase_8h_source.html | 2 +- .../doc/hurricane/html/DbU_8h_source.html | 2 +- .../html/DebugSession_8h_source.html | 2 +- .../hurricane/html/Diagonal_8h_source.html | 2 +- .../html/DiffusionLayer_8h_source.html | 2 +- .../hurricane/html/Entities_8h_source.html | 6 +- .../doc/hurricane/html/Entity_8h_source.html | 8 +- .../doc/hurricane/html/Error_8h_source.html | 2 +- .../hurricane/html/Exception_8h_source.html | 2 +- .../doc/hurricane/html/Filter_8h_source.html | 2 +- .../doc/hurricane/html/Go_8h_source.html | 6 +- .../doc/hurricane/html/Gos_8h_source.html | 2 +- .../doc/hurricane/html/Hook_8h_source.html | 2 +- .../doc/hurricane/html/Hooks_8h_source.html | 2 +- .../hurricane/html/Horizontal_8h_source.html | 2 +- .../hurricane/html/Horizontals_8h_source.html | 2 +- .../hurricane/html/HyperNet_8h_source.html | 2 +- .../hurricane/html/Initializer_8h_source.html | 2 +- .../hurricane/html/Instance_8h_source.html | 2 +- .../hurricane/html/Instances_8h_source.html | 2 +- .../html/Interruption_8h_source.html | 2 +- .../hurricane/html/Interval_8h_source.html | 36 +- .../hurricane/html/Intervals_8h_source.html | 2 +- .../hurricane/html/JsonObject_8h_source.html | 6 +- .../hurricane/html/JsonReader_8h_source.html | 2 +- .../doc/hurricane/html/Layer_8h_source.html | 20 +- .../doc/hurricane/html/Layers_8h_source.html | 2 +- .../hurricane/html/Libraries_8h_source.html | 2 +- .../doc/hurricane/html/Library_8h_source.html | 2 +- .../html/ListCollection_8h_source.html | 2 +- .../doc/hurricane/html/Locator_8h_source.html | 2 +- .../html/MapCollection_8h_source.html | 2 +- .../doc/hurricane/html/Name_8h_source.html | 2 +- .../doc/hurricane/html/Names_8h_source.html | 2 +- .../doc/hurricane/html/Net_8h_source.html | 12 +- .../doc/hurricane/html/Nets_8h_source.html | 2 +- .../hurricane/html/Occurrence_8h_source.html | 6 +- .../hurricane/html/Occurrences_8h_source.html | 2 +- .../doc/hurricane/html/Pad_8h_source.html | 2 +- .../doc/hurricane/html/Pads_8h_source.html | 2 +- .../doc/hurricane/html/Path_8h_source.html | 2 +- .../doc/hurricane/html/Pathes_8h_source.html | 2 +- .../doc/hurricane/html/Pin_8h_source.html | 2 +- .../doc/hurricane/html/Pins_8h_source.html | 2 +- .../doc/hurricane/html/Plug_8h_source.html | 2 +- .../doc/hurricane/html/Plugs_8h_source.html | 2 +- .../doc/hurricane/html/Point_8h_source.html | 2 +- .../doc/hurricane/html/Points_8h_source.html | 2 +- .../doc/hurricane/html/Polygon_8h_source.html | 2 +- .../hurricane/html/Properties_8h_source.html | 2 +- .../hurricane/html/Property_8h_source.html | 4 +- .../hurricane/html/QuadTree_8h_source.html | 2 +- .../doc/hurricane/html/Quark_8h_source.html | 2 +- .../doc/hurricane/html/Quarks_8h_source.html | 2 +- .../doc/hurricane/html/Query_8h_source.html | 2 +- .../html/RegularLayer_8h_source.html | 2 +- .../hurricane/html/Relation_8h_source.html | 2 +- .../hurricane/html/RoutingPad_8h_source.html | 2 +- .../doc/hurricane/html/Rubber_8h_source.html | 2 +- .../doc/hurricane/html/Rubbers_8h_source.html | 2 +- .../doc/hurricane/html/Segment_8h_source.html | 2 +- .../hurricane/html/Segments_8h_source.html | 2 +- .../html/SetCollection_8h_source.html | 2 +- .../doc/hurricane/html/Slice_8h_source.html | 2 +- .../doc/hurricane/html/Slices_8h_source.html | 2 +- .../hurricane/html/Tabulation_8h_source.html | 2 +- .../hurricane/html/Technology_8h_source.html | 14 +- .../html/Transformation_8h_source.html | 2 +- .../html/TransistorLayer_8h_source.html | 2 +- .../html/UpdateSession_8h_source.html | 4 +- .../html/VectorCollection_8h_source.html | 2 +- .../hurricane/html/Vertical_8h_source.html | 2 +- .../hurricane/html/Verticals_8h_source.html | 2 +- .../hurricane/html/ViaLayer_8h_source.html | 2 +- .../doc/hurricane/html/Warning_8h_source.html | 2 +- hurricane/doc/hurricane/html/annotated.html | 171 ++-- .../html/classEntity_1_1CompareById.html | 72 ++ .../classHurricane_1_1BasicLayer-members.html | 2 +- .../html/classHurricane_1_1BasicLayer.html | 2 +- ...ane_1_1BasicLayer_1_1Material-members.html | 2 +- ...ssHurricane_1_1BasicLayer_1_1Material.html | 2 +- .../html/classHurricane_1_1Box-members.html | 2 +- .../hurricane/html/classHurricane_1_1Box.html | 2 +- .../html/classHurricane_1_1Cell-members.html | 69 +- .../html/classHurricane_1_1Cell.html | 5 +- .../classHurricane_1_1Collection-members.html | 2 +- .../html/classHurricane_1_1Collection.html | 2 +- .../classHurricane_1_1Component-members.html | 37 +- .../html/classHurricane_1_1Component.html | 5 +- ...cane_1_1Component_1_1BodyHook-members.html | 2 +- ...assHurricane_1_1Component_1_1BodyHook.html | 2 +- .../classHurricane_1_1Contact-members.html | 51 +- .../html/classHurricane_1_1Contact.html | 5 +- ...lassHurricane_1_1ContactLayer-members.html | 2 +- .../html/classHurricane_1_1ContactLayer.html | 2 +- ...cane_1_1Contact_1_1AnchorHook-members.html | 2 +- ...assHurricane_1_1Contact_1_1AnchorHook.html | 2 +- .../html/classHurricane_1_1DBo-members.html | 2 +- .../hurricane/html/classHurricane_1_1DBo.html | 2 +- .../classHurricane_1_1DataBase-members.html | 2 +- .../html/classHurricane_1_1DataBase.html | 2 +- .../html/classHurricane_1_1DbU-members.html | 2 +- .../hurricane/html/classHurricane_1_1DbU.html | 2 +- ...lassHurricane_1_1DebugSession-members.html | 2 +- .../html/classHurricane_1_1DebugSession.html | 2 +- .../classHurricane_1_1Diagonal-members.html | 31 +- .../html/classHurricane_1_1Diagonal.html | 5 +- ...ssHurricane_1_1DiffusionLayer-members.html | 2 +- .../classHurricane_1_1DiffusionLayer.html | 2 +- .../classHurricane_1_1Entity-members.html | 15 +- .../html/classHurricane_1_1Entity.html | 41 +- .../html/classHurricane_1_1Error-members.html | 2 +- .../html/classHurricane_1_1Error.html | 2 +- .../classHurricane_1_1Exception-members.html | 2 +- .../html/classHurricane_1_1Exception.html | 2 +- .../classHurricane_1_1Filter-members.html | 2 +- .../html/classHurricane_1_1Filter.html | 2 +- ...urricane_1_1GenericCollection-members.html | 2 +- .../classHurricane_1_1GenericCollection.html | 2 +- ...assHurricane_1_1GenericFilter-members.html | 2 +- .../html/classHurricane_1_1GenericFilter.html | 2 +- ...ssHurricane_1_1GenericLocator-members.html | 2 +- .../classHurricane_1_1GenericLocator.html | 2 +- .../html/classHurricane_1_1Go-members.html | 25 +- .../hurricane/html/classHurricane_1_1Go.html | 4 +- .../html/classHurricane_1_1Hook-members.html | 2 +- .../html/classHurricane_1_1Hook.html | 2 +- .../classHurricane_1_1Horizontal-members.html | 57 +- .../html/classHurricane_1_1Horizontal.html | 5 +- .../classHurricane_1_1HyperNet-members.html | 2 +- .../html/classHurricane_1_1HyperNet.html | 2 +- ...classHurricane_1_1Initializer-members.html | 2 +- .../html/classHurricane_1_1Initializer.html | 2 +- .../classHurricane_1_1Instance-members.html | 43 +- .../html/classHurricane_1_1Instance.html | 5 +- ..._1Instance_1_1PlacementStatus-members.html | 2 +- ...ricane_1_1Instance_1_1PlacementStatus.html | 2 +- ...lassHurricane_1_1Interruption-members.html | 2 +- .../html/classHurricane_1_1Interruption.html | 2 +- .../classHurricane_1_1Interval-members.html | 30 +- .../html/classHurricane_1_1Interval.html | 128 +-- .../classHurricane_1_1JsonObject-members.html | 2 +- .../html/classHurricane_1_1JsonObject.html | 2 +- .../classHurricane_1_1JsonStack-members.html | 2 +- .../html/classHurricane_1_1JsonStack.html | 2 +- .../html/classHurricane_1_1Layer-members.html | 2 +- .../html/classHurricane_1_1Layer.html | 2 +- .../classHurricane_1_1Library-members.html | 2 +- .../html/classHurricane_1_1Library.html | 2 +- ...ssHurricane_1_1ListCollection-members.html | 2 +- .../classHurricane_1_1ListCollection.html | 2 +- .../classHurricane_1_1Locator-members.html | 2 +- .../html/classHurricane_1_1Locator.html | 2 +- ...assHurricane_1_1MapCollection-members.html | 2 +- .../html/classHurricane_1_1MapCollection.html | 2 +- .../html/classHurricane_1_1Name-members.html | 2 +- .../html/classHurricane_1_1Name.html | 2 +- .../html/classHurricane_1_1Net-members.html | 83 +- .../hurricane/html/classHurricane_1_1Net.html | 5 +- ...Hurricane_1_1Net_1_1Direction-members.html | 2 +- .../classHurricane_1_1Net_1_1Direction.html | 2 +- ...classHurricane_1_1Net_1_1Type-members.html | 2 +- .../html/classHurricane_1_1Net_1_1Type.html | 2 +- .../classHurricane_1_1NotFilter-members.html | 2 +- .../html/classHurricane_1_1NotFilter.html | 2 +- .../classHurricane_1_1Occurrence-members.html | 2 +- .../html/classHurricane_1_1Occurrence.html | 2 +- .../html/classHurricane_1_1Pad-members.html | 29 +- .../hurricane/html/classHurricane_1_1Pad.html | 5 +- .../html/classHurricane_1_1Path-members.html | 2 +- .../html/classHurricane_1_1Path.html | 2 +- .../html/classHurricane_1_1Pin-members.html | 49 +- .../hurricane/html/classHurricane_1_1Pin.html | 5 +- .../html/classHurricane_1_1Plug-members.html | 39 +- .../html/classHurricane_1_1Plug.html | 5 +- .../html/classHurricane_1_1Point-members.html | 2 +- .../html/classHurricane_1_1Point.html | 2 +- .../classHurricane_1_1Polygon-members.html | 31 +- .../html/classHurricane_1_1Polygon.html | 5 +- ...sHurricane_1_1PrivateProperty-members.html | 2 +- .../classHurricane_1_1PrivateProperty.html | 2 +- .../classHurricane_1_1Property-members.html | 2 +- .../html/classHurricane_1_1Property.html | 2 +- .../classHurricane_1_1QuadTree-members.html | 2 +- .../html/classHurricane_1_1QuadTree.html | 2 +- .../html/classHurricane_1_1Quark-members.html | 2 +- .../html/classHurricane_1_1Quark.html | 2 +- .../html/classHurricane_1_1Query-members.html | 2 +- .../html/classHurricane_1_1Query.html | 2 +- ...lassHurricane_1_1RegularLayer-members.html | 2 +- .../html/classHurricane_1_1RegularLayer.html | 2 +- .../classHurricane_1_1Relation-members.html | 2 +- .../html/classHurricane_1_1Relation.html | 2 +- .../classHurricane_1_1RoutingPad-members.html | 65 +- .../html/classHurricane_1_1RoutingPad.html | 5 +- .../classHurricane_1_1Rubber-members.html | 21 +- .../html/classHurricane_1_1Rubber.html | 5 +- .../classHurricane_1_1Segment-members.html | 65 +- .../html/classHurricane_1_1Segment.html | 5 +- ...cane_1_1Segment_1_1SourceHook-members.html | 2 +- ...assHurricane_1_1Segment_1_1SourceHook.html | 2 +- ...cane_1_1Segment_1_1TargetHook-members.html | 2 +- ...assHurricane_1_1Segment_1_1TargetHook.html | 2 +- ...assHurricane_1_1SetCollection-members.html | 2 +- .../html/classHurricane_1_1SetCollection.html | 2 +- ...ssHurricane_1_1SharedProperty-members.html | 2 +- .../classHurricane_1_1SharedProperty.html | 2 +- .../html/classHurricane_1_1Slice-members.html | 2 +- .../html/classHurricane_1_1Slice.html | 2 +- ...ne_1_1StandardPrivateProperty-members.html | 2 +- ...sHurricane_1_1StandardPrivateProperty.html | 2 +- ...Hurricane_1_1StandardRelation-members.html | 2 +- .../classHurricane_1_1StandardRelation.html | 2 +- ...ane_1_1StandardSharedProperty-members.html | 2 +- ...ssHurricane_1_1StandardSharedProperty.html | 2 +- ...Hurricane_1_1SubSetCollection-members.html | 2 +- .../classHurricane_1_1SubSetCollection.html | 2 +- ...urricane_1_1SubTypeCollection-members.html | 2 +- .../classHurricane_1_1SubTypeCollection.html | 2 +- .../classHurricane_1_1Tabulation-members.html | 2 +- .../html/classHurricane_1_1Tabulation.html | 2 +- .../classHurricane_1_1Technology-members.html | 2 +- .../html/classHurricane_1_1Technology.html | 2 +- ...ssHurricane_1_1Transformation-members.html | 2 +- .../classHurricane_1_1Transformation.html | 2 +- ...Transformation_1_1Orientation-members.html | 2 +- ...cane_1_1Transformation_1_1Orientation.html | 2 +- ...sHurricane_1_1TransistorLayer-members.html | 2 +- .../classHurricane_1_1TransistorLayer.html | 2 +- ...assHurricane_1_1UpdateSession-members.html | 2 +- .../html/classHurricane_1_1UpdateSession.html | 2 +- ...Hurricane_1_1VectorCollection-members.html | 2 +- .../classHurricane_1_1VectorCollection.html | 2 +- .../classHurricane_1_1Vertical-members.html | 57 +- .../html/classHurricane_1_1Vertical.html | 5 +- .../classHurricane_1_1ViaLayer-members.html | 2 +- .../html/classHurricane_1_1ViaLayer.html | 2 +- .../classHurricane_1_1Warning-members.html | 2 +- .../html/classHurricane_1_1Warning.html | 2 +- hurricane/doc/hurricane/html/classes.html | 4 +- .../hurricane/html/clasststream-members.html | 2 +- .../doc/hurricane/html/clasststream.html | 2 +- .../dir_2450e9a649c497a3424377400b95054f.html | 2 +- .../dir_68267d1309a1af8e8297ef4c3efbcdba.html | 2 +- .../dir_84a91669594ac5e20f6d730a15331f7a.html | 2 +- hurricane/doc/hurricane/html/files.html | 2 +- hurricane/doc/hurricane/html/functions.html | 2 +- .../doc/hurricane/html/functions_0x7e.html | 2 +- hurricane/doc/hurricane/html/functions_b.html | 2 +- hurricane/doc/hurricane/html/functions_c.html | 4 +- hurricane/doc/hurricane/html/functions_d.html | 2 +- hurricane/doc/hurricane/html/functions_e.html | 2 +- .../doc/hurricane/html/functions_enum.html | 2 +- .../doc/hurricane/html/functions_eval.html | 2 +- hurricane/doc/hurricane/html/functions_f.html | 2 +- .../doc/hurricane/html/functions_func.html | 2 +- .../hurricane/html/functions_func_0x7e.html | 2 +- .../doc/hurricane/html/functions_func_b.html | 2 +- .../doc/hurricane/html/functions_func_c.html | 4 +- .../doc/hurricane/html/functions_func_d.html | 2 +- .../doc/hurricane/html/functions_func_e.html | 2 +- .../doc/hurricane/html/functions_func_f.html | 2 +- .../doc/hurricane/html/functions_func_g.html | 11 +- .../doc/hurricane/html/functions_func_h.html | 2 +- .../doc/hurricane/html/functions_func_i.html | 6 +- .../doc/hurricane/html/functions_func_j.html | 2 +- .../doc/hurricane/html/functions_func_l.html | 2 +- .../doc/hurricane/html/functions_func_m.html | 4 +- .../doc/hurricane/html/functions_func_n.html | 2 +- .../doc/hurricane/html/functions_func_o.html | 8 +- .../doc/hurricane/html/functions_func_p.html | 2 +- .../doc/hurricane/html/functions_func_q.html | 2 +- .../doc/hurricane/html/functions_func_r.html | 2 +- .../doc/hurricane/html/functions_func_s.html | 2 +- .../doc/hurricane/html/functions_func_t.html | 4 +- .../doc/hurricane/html/functions_func_u.html | 2 +- .../doc/hurricane/html/functions_func_v.html | 2 +- .../doc/hurricane/html/functions_func_w.html | 2 +- hurricane/doc/hurricane/html/functions_g.html | 21 +- hurricane/doc/hurricane/html/functions_h.html | 2 +- hurricane/doc/hurricane/html/functions_i.html | 6 +- hurricane/doc/hurricane/html/functions_j.html | 2 +- hurricane/doc/hurricane/html/functions_k.html | 2 +- hurricane/doc/hurricane/html/functions_l.html | 2 +- hurricane/doc/hurricane/html/functions_m.html | 4 +- hurricane/doc/hurricane/html/functions_n.html | 2 +- hurricane/doc/hurricane/html/functions_o.html | 8 +- hurricane/doc/hurricane/html/functions_p.html | 2 +- hurricane/doc/hurricane/html/functions_q.html | 2 +- hurricane/doc/hurricane/html/functions_r.html | 2 +- hurricane/doc/hurricane/html/functions_s.html | 2 +- hurricane/doc/hurricane/html/functions_t.html | 4 +- .../doc/hurricane/html/functions_type.html | 2 +- hurricane/doc/hurricane/html/functions_u.html | 2 +- hurricane/doc/hurricane/html/functions_v.html | 2 +- hurricane/doc/hurricane/html/functions_w.html | 2 +- .../doc/hurricane/html/graph_legend.html | 2 +- .../doc/hurricane/html/group__DbUGroup.html | 2 +- .../hurricane/html/group__Generalities.html | 2 +- .../hurricane/html/group__JsonSupport.html | 2 +- .../html/group__grpSynthHierarchy.html | 2 +- hurricane/doc/hurricane/html/hierarchy.html | 4 +- hurricane/doc/hurricane/html/hurricane.tag | 68 +- hurricane/doc/hurricane/html/index.html | 2 +- hurricane/doc/hurricane/html/modules.html | 2 +- .../hurricane/html/namespaceHurricane.html | 2 +- .../doc/hurricane/html/namespacemembers.html | 2 +- .../hurricane/html/namespacemembers_func.html | 2 +- .../hurricane/html/namespacemembers_type.html | 2 +- hurricane/doc/hurricane/html/namespaces.html | 2 +- hurricane/doc/hurricane/latex/annotated.tex | 2 +- .../latex/classEntity_1_1CompareById.tex | 35 + .../latex/classHurricane_1_1Entity.tex | 19 +- .../latex/classHurricane_1_1Interval.tex | 58 +- hurricane/doc/hurricane/latex/hierarchy.tex | 2 +- hurricane/doc/hurricane/latex/refman.tex | 4 +- .../doc/viewer/html/CellImage_8h_source.html | 2 +- .../viewer/html/CellPrinter_8h_source.html | 2 +- .../doc/viewer/html/CellViewer_8h_source.html | 16 +- .../doc/viewer/html/CellWidget_8h_source.html | 4 +- .../viewer/html/DisplayStyle_8h_source.html | 2 +- .../doc/viewer/html/Graphics_8h_source.html | 2 +- .../html/InspectorWidget_8h_source.html | 2 +- hurricane/doc/viewer/html/annotated.html | 2 +- .../classHurricane_1_1CellImage-members.html | 2 +- .../html/classHurricane_1_1CellImage.html | 2 +- ...classHurricane_1_1CellPrinter-members.html | 2 +- .../html/classHurricane_1_1CellPrinter.html | 2 +- .../classHurricane_1_1CellViewer-members.html | 2 +- .../html/classHurricane_1_1CellViewer.html | 2 +- .../classHurricane_1_1CellWidget-members.html | 2 +- .../html/classHurricane_1_1CellWidget.html | 2 +- ...lassHurricane_1_1DisplayStyle-members.html | 2 +- .../html/classHurricane_1_1DisplayStyle.html | 2 +- .../classHurricane_1_1Graphics-members.html | 2 +- .../html/classHurricane_1_1Graphics.html | 2 +- ...sHurricane_1_1InspectorWidget-members.html | 2 +- .../classHurricane_1_1InspectorWidget.html | 2 +- hurricane/doc/viewer/html/classes.html | 2 +- .../dir_0afc25342c548a63e1813d8fbde8101d.html | 2 +- .../dir_22af1943967c75aa4d199e6ffd8de9d2.html | 2 +- .../dir_53ec41d7bc61ef1f85d867f95df84d28.html | 2 +- .../dir_68267d1309a1af8e8297ef4c3efbcdba.html | 2 +- hurricane/doc/viewer/html/files.html | 2 +- hurricane/doc/viewer/html/functions.html | 2 +- hurricane/doc/viewer/html/functions_enum.html | 2 +- hurricane/doc/viewer/html/functions_eval.html | 2 +- hurricane/doc/viewer/html/functions_func.html | 2 +- hurricane/doc/viewer/html/graph_legend.html | 2 +- .../doc/viewer/html/group__graphicsGroup.html | 2 +- hurricane/doc/viewer/html/index.html | 2 +- hurricane/doc/viewer/html/modules.html | 2 +- hurricane/doc/viewer/latex/refman.tex | 2 +- .../doc/html/AutoContactHTee_8h_source.html | 2 +- .../html/AutoContactTerminal_8h_source.html | 2 +- .../doc/html/AutoContactTurn_8h_source.html | 2 +- .../doc/html/AutoContactVTee_8h_source.html | 2 +- katabatic/doc/html/AutoContact_8h_source.html | 2 +- .../doc/html/AutoHorizontal_8h_source.html | 2 +- katabatic/doc/html/AutoSegment_8h_source.html | 2 +- .../doc/html/AutoSegments_8h_source.html | 2 +- .../doc/html/AutoVertical_8h_source.html | 2 +- katabatic/doc/html/ChipTools_8h_source.html | 2 +- katabatic/doc/html/Constants_8h_source.html | 2 +- katabatic/doc/html/GCellGrid_8h_source.html | 2 +- katabatic/doc/html/GCell_8h_source.html | 2 +- katabatic/doc/html/GCells_8h_source.html | 2 +- katabatic/doc/html/Grid_8h_source.html | 2 +- .../doc/html/KatabaticEngine_8h_source.html | 2 +- katabatic/doc/html/Observer_8h_source.html | 2 +- katabatic/doc/html/Session_8h_source.html | 2 +- katabatic/doc/html/annotated.html | 2 +- ...classKatabatic_1_1AutoContact-members.html | 2 +- .../html/classKatabatic_1_1AutoContact.html | 2 +- ...sKatabatic_1_1AutoContactHTee-members.html | 2 +- .../classKatabatic_1_1AutoContactHTee.html | 2 +- ...abatic_1_1AutoContactTerminal-members.html | 2 +- ...classKatabatic_1_1AutoContactTerminal.html | 4 +- ...sKatabatic_1_1AutoContactTurn-members.html | 2 +- .../classKatabatic_1_1AutoContactTurn.html | 2 +- ...sKatabatic_1_1AutoContactVTee-members.html | 2 +- .../classKatabatic_1_1AutoContactVTee.html | 2 +- ...ssKatabatic_1_1AutoHorizontal-members.html | 2 +- .../classKatabatic_1_1AutoHorizontal.html | 6 +- ...classKatabatic_1_1AutoSegment-members.html | 2 +- .../html/classKatabatic_1_1AutoSegment.html | 8 +- ...tic_1_1AutoSegments__Aligneds-members.html | 2 +- ...ssKatabatic_1_1AutoSegments__Aligneds.html | 2 +- ..._1AutoSegments__AnchorOnGCell-members.html | 2 +- ...abatic_1_1AutoSegments__AnchorOnGCell.html | 2 +- ..._1_1AutoSegments__InDirection-members.html | 2 +- ...atabatic_1_1AutoSegments__InDirection.html | 2 +- ..._1AutoSegments__IsAccountable-members.html | 2 +- ...abatic_1_1AutoSegments__IsAccountable.html | 2 +- ...ic_1_1AutoSegments__OnContact-members.html | 2 +- ...sKatabatic_1_1AutoSegments__OnContact.html | 2 +- ...1AutoSegments__Perpandiculars-members.html | 2 +- ...batic_1_1AutoSegments__Perpandiculars.html | 2 +- ...lassKatabatic_1_1AutoVertical-members.html | 2 +- .../html/classKatabatic_1_1AutoVertical.html | 6 +- .../classKatabatic_1_1BaseGrid-members.html | 2 +- .../doc/html/classKatabatic_1_1BaseGrid.html | 2 +- ...Katabatic_1_1BaseGrid_1_1Axis-members.html | 2 +- .../classKatabatic_1_1BaseGrid_1_1Axis.html | 2 +- ...lassKatabatic_1_1BaseObserver-members.html | 2 +- .../html/classKatabatic_1_1BaseObserver.html | 2 +- .../classKatabatic_1_1ChipTools-members.html | 2 +- .../doc/html/classKatabatic_1_1ChipTools.html | 2 +- .../html/classKatabatic_1_1GCell-members.html | 2 +- .../doc/html/classKatabatic_1_1GCell.html | 2 +- ...sKatabatic_1_1GCellDensitySet-members.html | 2 +- .../classKatabatic_1_1GCellDensitySet.html | 2 +- .../classKatabatic_1_1GCellGrid-members.html | 2 +- .../doc/html/classKatabatic_1_1GCellGrid.html | 2 +- ..._1_1GCell_1_1CompareByDensity-members.html | 2 +- ...atabatic_1_1GCell_1_1CompareByDensity.html | 2 +- ...ic_1_1GCell_1_1CompareByIndex-members.html | 2 +- ...sKatabatic_1_1GCell_1_1CompareByIndex.html | 2 +- ...lassKatabatic_1_1GCell_1_1Key-members.html | 2 +- .../html/classKatabatic_1_1GCell_1_1Key.html | 2 +- .../html/classKatabatic_1_1Grid-members.html | 2 +- .../doc/html/classKatabatic_1_1Grid.html | 2 +- ...sKatabatic_1_1KatabaticEngine-members.html | 2 +- .../classKatabatic_1_1KatabaticEngine.html | 2 +- ...assKatabatic_1_1LocatorHelper-members.html | 2 +- .../html/classKatabatic_1_1LocatorHelper.html | 2 +- .../classKatabatic_1_1Observable-members.html | 2 +- .../html/classKatabatic_1_1Observable.html | 2 +- .../classKatabatic_1_1Observer-members.html | 2 +- .../doc/html/classKatabatic_1_1Observer.html | 2 +- .../classKatabatic_1_1Session-members.html | 2 +- .../doc/html/classKatabatic_1_1Session.html | 2 +- ...yNet_8cpp_03_1_1GCellTopology-members.html | 2 +- ...2LoadGrByNet_8cpp_03_1_1GCellTopology.html | 2 +- katabatic/doc/html/classes.html | 2 +- .../dir_46a5d811a0c60e95b7acaa92d73c003a.html | 2 +- .../dir_68267d1309a1af8e8297ef4c3efbcdba.html | 2 +- katabatic/doc/html/files.html | 2 +- katabatic/doc/html/functions.html | 2 +- katabatic/doc/html/functions_0x7e.html | 2 +- katabatic/doc/html/functions_a.html | 2 +- katabatic/doc/html/functions_b.html | 2 +- katabatic/doc/html/functions_c.html | 2 +- katabatic/doc/html/functions_d.html | 2 +- katabatic/doc/html/functions_e.html | 2 +- katabatic/doc/html/functions_enum.html | 2 +- katabatic/doc/html/functions_eval.html | 2 +- katabatic/doc/html/functions_f.html | 2 +- katabatic/doc/html/functions_func.html | 2 +- katabatic/doc/html/functions_func_0x7e.html | 2 +- katabatic/doc/html/functions_func_a.html | 2 +- katabatic/doc/html/functions_func_b.html | 2 +- katabatic/doc/html/functions_func_c.html | 2 +- katabatic/doc/html/functions_func_d.html | 2 +- katabatic/doc/html/functions_func_e.html | 2 +- katabatic/doc/html/functions_func_f.html | 2 +- katabatic/doc/html/functions_func_g.html | 2 +- katabatic/doc/html/functions_func_h.html | 2 +- katabatic/doc/html/functions_func_i.html | 2 +- katabatic/doc/html/functions_func_k.html | 2 +- katabatic/doc/html/functions_func_l.html | 2 +- katabatic/doc/html/functions_func_m.html | 2 +- katabatic/doc/html/functions_func_n.html | 2 +- katabatic/doc/html/functions_func_o.html | 2 +- katabatic/doc/html/functions_func_p.html | 2 +- katabatic/doc/html/functions_func_r.html | 2 +- katabatic/doc/html/functions_func_s.html | 2 +- katabatic/doc/html/functions_func_t.html | 2 +- katabatic/doc/html/functions_func_u.html | 2 +- katabatic/doc/html/functions_func_x.html | 2 +- katabatic/doc/html/functions_g.html | 2 +- katabatic/doc/html/functions_h.html | 2 +- katabatic/doc/html/functions_i.html | 2 +- katabatic/doc/html/functions_k.html | 2 +- katabatic/doc/html/functions_l.html | 2 +- katabatic/doc/html/functions_m.html | 2 +- katabatic/doc/html/functions_n.html | 2 +- katabatic/doc/html/functions_o.html | 2 +- katabatic/doc/html/functions_p.html | 2 +- katabatic/doc/html/functions_r.html | 2 +- katabatic/doc/html/functions_s.html | 2 +- katabatic/doc/html/functions_t.html | 2 +- katabatic/doc/html/functions_type.html | 2 +- katabatic/doc/html/functions_u.html | 2 +- katabatic/doc/html/functions_x.html | 2 +- katabatic/doc/html/graph_legend.html | 2 +- .../doc/html/group__LoadGlobalRouting.html | 2 +- .../doc/html/group__grpSynthHierarchy.html | 2 +- katabatic/doc/html/hierarchy.html | 2 +- katabatic/doc/html/index.html | 2 +- katabatic/doc/html/modules.html | 2 +- katabatic/doc/html/namespaceKatabatic.html | 2 +- ...mous__namespace_02AutoSegment_8cpp_03.html | 2 +- ...nymous__namespace_02ChipTools_8cpp_03.html | 2 +- ...eanonymous__namespace_02GCell_8cpp_03.html | 2 +- ...__namespace_02KatabaticEngine_8cpp_03.html | 2 +- ...mous__namespace_02LoadGrByNet_8cpp_03.html | 2 +- ...nonymous__namespace_02Session_8cpp_03.html | 2 +- katabatic/doc/html/namespacemembers.html | 2 +- katabatic/doc/html/namespacemembers_enum.html | 2 +- katabatic/doc/html/namespacemembers_eval.html | 2 +- katabatic/doc/html/namespacemembers_func.html | 2 +- katabatic/doc/html/namespacemembers_type.html | 2 +- katabatic/doc/html/namespaces.html | 2 +- katabatic/doc/latex/refman.tex | 2 +- kite/doc/html/Constants_8h_source.html | 2 +- kite/doc/html/DataNegociate_8h_source.html | 2 +- kite/doc/html/HorizontalTrack_8h_source.html | 2 +- kite/doc/html/KiteEngine_8h_source.html | 2 +- kite/doc/html/Manipulator_8h_source.html | 2 +- kite/doc/html/NegociateWindow_8h_source.html | 2 +- .../html/RoutingEventHistory_8h_source.html | 2 +- kite/doc/html/RoutingEventLoop_8h_source.html | 2 +- .../doc/html/RoutingEventQueue_8h_source.html | 2 +- kite/doc/html/RoutingEvent_8h_source.html | 2 +- kite/doc/html/RoutingPlane_8h_source.html | 5 +- kite/doc/html/SegmentFsm_8h_source.html | 2 +- kite/doc/html/Session_8h_source.html | 2 +- kite/doc/html/TrackElement_8h_source.html | 2 +- .../doc/html/TrackFixedSegment_8h_source.html | 2 +- kite/doc/html/TrackMarker_8h_source.html | 2 +- kite/doc/html/TrackSegment_8h_source.html | 2 +- kite/doc/html/Track_8h_source.html | 2 +- kite/doc/html/VerticalTrack_8h_source.html | 2 +- kite/doc/html/annotated.html | 2 +- .../classKite_1_1DataNegociate-members.html | 2 +- kite/doc/html/classKite_1_1DataNegociate.html | 2 +- .../classKite_1_1HorizontalTrack-members.html | 2 +- .../html/classKite_1_1HorizontalTrack.html | 2 +- .../html/classKite_1_1KiteEngine-members.html | 2 +- kite/doc/html/classKite_1_1KiteEngine.html | 2 +- .../classKite_1_1Manipulator-members.html | 2 +- kite/doc/html/classKite_1_1Manipulator.html | 2 +- .../classKite_1_1NegociateWindow-members.html | 2 +- .../html/classKite_1_1NegociateWindow.html | 2 +- .../classKite_1_1RoutingEvent-members.html | 2 +- kite/doc/html/classKite_1_1RoutingEvent.html | 2 +- ...ssKite_1_1RoutingEventHistory-members.html | 2 +- .../classKite_1_1RoutingEventHistory.html | 2 +- ...classKite_1_1RoutingEventLoop-members.html | 2 +- .../html/classKite_1_1RoutingEventLoop.html | 2 +- ...lassKite_1_1RoutingEventQueue-members.html | 2 +- .../html/classKite_1_1RoutingEventQueue.html | 2 +- ...ssKite_1_1RoutingEvent_1_1Key-members.html | 2 +- .../classKite_1_1RoutingEvent_1_1Key.html | 2 +- .../classKite_1_1RoutingPlane-members.html | 2 +- kite/doc/html/classKite_1_1RoutingPlane.html | 2 +- .../classKite_1_1SegmentAction-members.html | 2 +- kite/doc/html/classKite_1_1SegmentAction.html | 2 +- .../html/classKite_1_1SegmentFsm-members.html | 2 +- kite/doc/html/classKite_1_1SegmentFsm.html | 2 +- .../classKite_1_1SegmentObserver-members.html | 2 +- .../html/classKite_1_1SegmentObserver.html | 2 +- .../html/classKite_1_1Session-members.html | 2 +- kite/doc/html/classKite_1_1Session.html | 2 +- kite/doc/html/classKite_1_1Track-members.html | 2 +- kite/doc/html/classKite_1_1Track.html | 2 +- .../classKite_1_1TrackElement-members.html | 2 +- kite/doc/html/classKite_1_1TrackElement.html | 2 +- ...lassKite_1_1TrackFixedSegment-members.html | 2 +- .../html/classKite_1_1TrackFixedSegment.html | 2 +- .../classKite_1_1TrackMarker-members.html | 2 +- kite/doc/html/classKite_1_1TrackMarker.html | 2 +- .../classKite_1_1TrackSegment-members.html | 2 +- kite/doc/html/classKite_1_1TrackSegment.html | 2 +- .../classKite_1_1VerticalTrack-members.html | 2 +- kite/doc/html/classKite_1_1VerticalTrack.html | 2 +- kite/doc/html/classes.html | 2 +- .../dir_2916ee297f5e79ec495d393dfe8ba769.html | 2 +- .../dir_68267d1309a1af8e8297ef4c3efbcdba.html | 2 +- kite/doc/html/files.html | 2 +- kite/doc/html/functions.html | 2 +- kite/doc/html/functions_0x7e.html | 2 +- kite/doc/html/functions_a.html | 2 +- kite/doc/html/functions_b.html | 2 +- kite/doc/html/functions_c.html | 2 +- kite/doc/html/functions_d.html | 2 +- kite/doc/html/functions_e.html | 2 +- kite/doc/html/functions_enum.html | 2 +- kite/doc/html/functions_eval.html | 2 +- kite/doc/html/functions_f.html | 2 +- kite/doc/html/functions_func.html | 2 +- kite/doc/html/functions_func_0x7e.html | 2 +- kite/doc/html/functions_func_a.html | 2 +- kite/doc/html/functions_func_b.html | 2 +- kite/doc/html/functions_func_c.html | 2 +- kite/doc/html/functions_func_d.html | 2 +- kite/doc/html/functions_func_e.html | 2 +- kite/doc/html/functions_func_f.html | 2 +- kite/doc/html/functions_func_g.html | 2 +- kite/doc/html/functions_func_h.html | 2 +- kite/doc/html/functions_func_i.html | 2 +- kite/doc/html/functions_func_l.html | 2 +- kite/doc/html/functions_func_m.html | 2 +- kite/doc/html/functions_func_n.html | 2 +- kite/doc/html/functions_func_o.html | 2 +- kite/doc/html/functions_func_p.html | 2 +- kite/doc/html/functions_func_r.html | 2 +- kite/doc/html/functions_func_s.html | 2 +- kite/doc/html/functions_func_u.html | 2 +- kite/doc/html/functions_g.html | 2 +- kite/doc/html/functions_h.html | 2 +- kite/doc/html/functions_i.html | 2 +- kite/doc/html/functions_l.html | 2 +- kite/doc/html/functions_m.html | 2 +- kite/doc/html/functions_n.html | 2 +- kite/doc/html/functions_o.html | 2 +- kite/doc/html/functions_p.html | 2 +- kite/doc/html/functions_r.html | 2 +- kite/doc/html/functions_s.html | 2 +- kite/doc/html/functions_t.html | 2 +- kite/doc/html/functions_u.html | 2 +- kite/doc/html/functions_vars.html | 2 +- kite/doc/html/graph_legend.html | 2 +- kite/doc/html/group__AlgorithmOverview.html | 2 +- kite/doc/html/group__grpSynthHierarchy.html | 2 +- kite/doc/html/hierarchy.html | 2 +- kite/doc/html/index.html | 2 +- kite/doc/html/modules.html | 2 +- kite/doc/html/namespaceKite.html | 2 +- ...mous__namespace_02AutoSegment_8cpp_03.html | 2 +- ...nymous__namespace_02ChipTools_8cpp_03.html | 2 +- ...eanonymous__namespace_02GCell_8cpp_03.html | 2 +- ...__namespace_02KatabaticEngine_8cpp_03.html | 2 +- ...mous__namespace_02LoadGrByNet_8cpp_03.html | 2 +- ...mous__namespace_02Manipulator_8cpp_03.html | 2 +- ...__namespace_02NegociateWindow_8cpp_03.html | 2 +- ...ous__namespace_02RoutingPlane_8cpp_03.html | 2 +- ...ymous__namespace_02SegmentFsm_8cpp_03.html | 2 +- ...nonymous__namespace_02Session_8cpp_03.html | 2 +- ...ous__namespace_02TrackElement_8cpp_03.html | 2 +- ...eanonymous__namespace_02Track_8cpp_03.html | 2 +- kite/doc/html/namespacemembers.html | 2 +- kite/doc/html/namespacemembers_enum.html | 2 +- kite/doc/html/namespacemembers_eval.html | 2 +- kite/doc/html/namespacemembers_type.html | 2 +- kite/doc/html/namespaces.html | 2 +- kite/doc/html/pageNotes.html | 2 +- kite/doc/html/pages.html | 2 +- kite/doc/latex/refman.tex | 2 +- oroshi/doc/html/annotated.html | 2 +- oroshi/doc/html/classes.html | 2 +- ...classpython_1_1Stack_1_1Stack-members.html | 2 +- .../html/classpython_1_1Stack_1_1Stack.html | 2 +- .../dir_7837fde3ab9c1fb2fc5be7b717af8d79.html | 2 +- oroshi/doc/html/functions.html | 2 +- oroshi/doc/html/functions_func.html | 2 +- oroshi/doc/html/graph_legend.html | 2 +- oroshi/doc/html/index.html | 2 +- oroshi/doc/latex/refman.tex | 2 +- .../unicorn/html/UnicornGui_8h_source.html | 2 +- unicorn/doc/unicorn/html/annotated.html | 2 +- .../classUnicorn_1_1UnicornGui-members.html | 2 +- .../html/classUnicorn_1_1UnicornGui.html | 2 +- unicorn/doc/unicorn/html/classes.html | 2 +- .../dir_4aa09a10ca668c28f3c8e57fb374580b.html | 2 +- .../dir_68267d1309a1af8e8297ef4c3efbcdba.html | 2 +- unicorn/doc/unicorn/html/files.html | 2 +- unicorn/doc/unicorn/html/functions.html | 2 +- unicorn/doc/unicorn/html/functions_func.html | 2 +- unicorn/doc/unicorn/html/hierarchy.html | 2 +- unicorn/doc/unicorn/html/index.html | 2 +- .../doc/unicorn/html/namespaceUnicorn.html | 2 +- unicorn/doc/unicorn/html/namespaces.html | 2 +- unicorn/doc/unicorn/html/pages.html | 2 +- unicorn/doc/unicorn/latex/refman.tex | 2 +- unicorn/src/cgt.py | 8 +- vlsisapd/doc/html/agds.html | 2 +- vlsisapd/doc/html/annotated.html | 95 +- vlsisapd/doc/html/cif.html | 2 +- .../doc/html/class_a_g_d_s_1_1_element.html | 2 +- .../doc/html/class_a_g_d_s_1_1_library.html | 2 +- .../doc/html/class_a_g_d_s_1_1_rectangle.html | 2 +- .../doc/html/class_a_g_d_s_1_1_structure.html | 2 +- vlsisapd/doc/html/class_bloc.html | 50 + .../doc/html/class_c_i_f_1_1_circuit.html | 2 +- .../doc/html/class_c_i_f_1_1_polygon.html | 2 +- vlsisapd/doc/html/class_circuit.html | 50 + vlsisapd/doc/html/class_d_t_r_1_1_a_rule.html | 2 +- .../html/class_d_t_r_1_1_d_t_r_exception.html | 2 +- vlsisapd/doc/html/class_d_t_r_1_1_rule.html | 2 +- vlsisapd/doc/html/class_d_t_r_1_1_techno.html | 2 +- vlsisapd/doc/html/class_device.html | 52 + vlsisapd/doc/html/class_group.html | 50 + vlsisapd/doc/html/class_instance.html | 51 + vlsisapd/doc/html/class_instance_point.html | 50 + .../doc/html/class_intermediate_point.html | 50 + vlsisapd/doc/html/class_layout.html | 52 + vlsisapd/doc/html/class_name.html | 2 +- vlsisapd/doc/html/class_net.html | 58 ++ .../doc/html/class_net_1_1_connection.html | 54 + vlsisapd/doc/html/class_netlist.html | 52 + vlsisapd/doc/html/class_node.html | 51 + .../doc/html/class_open_chams_exception.html | 50 + vlsisapd/doc/html/class_operator.html | 58 ++ .../html/class_operator_1_1_constraint.html | 54 + vlsisapd/doc/html/class_parameters.html | 50 + vlsisapd/doc/html/class_port.html | 52 + vlsisapd/doc/html/class_port_point.html | 50 + .../html/class_s_p_i_c_e_1_1_capacitor.html | 9 +- .../doc/html/class_s_p_i_c_e_1_1_circuit.html | 92 +- .../doc/html/class_s_p_i_c_e_1_1_current.html | 2 +- .../html/class_s_p_i_c_e_1_1_instance.html | 57 +- .../doc/html/class_s_p_i_c_e_1_1_mosfet.html | 9 +- .../html/class_s_p_i_c_e_1_1_resistor.html | 9 +- .../doc/html/class_s_p_i_c_e_1_1_source.html | 2 +- .../class_s_p_i_c_e_1_1_spice_exception.html | 2 +- .../doc/html/class_s_p_i_c_e_1_1_subckt.html | 2 +- .../doc/html/class_s_p_i_c_e_1_1_value.html | 2 +- .../doc/html/class_s_p_i_c_e_1_1_voltage.html | 2 +- vlsisapd/doc/html/class_schematic.html | 60 ++ .../doc/html/class_schematic_1_1_infos.html | 54 + vlsisapd/doc/html/class_simul_model.html | 50 + vlsisapd/doc/html/class_sizing.html | 52 + vlsisapd/doc/html/class_transistor.html | 51 + vlsisapd/doc/html/class_wire.html | 56 ++ vlsisapd/doc/html/class_wire_point.html | 50 + vlsisapd/doc/html/classes.html | 67 +- vlsisapd/doc/html/contact.html | 2 +- .../dir_194c6646cbe14a62ea0314c7fca681a9.html | 2 +- .../dir_2852b3f74447b3eef98d33971cc12e93.html | 2 +- .../dir_37f2f7cf13fe8b3dbbf4df2dcd9db30e.html | 2 +- .../dir_39781fe580a6e198d1f524a1e4a0bc7e.html | 2 +- .../dir_47b618c8860794e76993335614edf751.html | 2 +- .../dir_55e17805e082fdc46e6a3a5c39067580.html | 2 +- .../dir_59ec496789535d63823312241afb9b7f.html | 2 +- .../dir_61fcc85a192620389e1754e99f550e16.html | 2 +- .../dir_622483769e0f2cd8e596ff15be97e36f.html | 2 +- .../dir_68267d1309a1af8e8297ef4c3efbcdba.html | 2 +- .../dir_71789bf9375547e252911cdb9a2317ae.html | 2 +- .../dir_7665d8bfef91390195a0fbeced79f129.html | 2 +- .../dir_97fdc78ce1a397e825572027accd162c.html | 2 +- .../dir_bf3fa239d58b225d86806ac9c8613e9c.html | 2 +- .../dir_c663fdd46c388fa35da0cbda7880ed60.html | 2 +- .../dir_d524a314c3e79ad7dcb6d469d1af3bdb.html | 2 +- .../dir_e15e6a3c4c4383a9f2520d7186345132.html | 2 +- vlsisapd/doc/html/dtr.html | 2 +- vlsisapd/doc/html/functions.html | 254 ++++- vlsisapd/doc/html/functions_func.html | 254 ++++- vlsisapd/doc/html/hierarchy.html | 110 +-- vlsisapd/doc/html/index.html | 2 +- vlsisapd/doc/html/openchams.html | 68 +- vlsisapd/doc/html/pages.html | 2 +- vlsisapd/doc/html/spice.html | 8 +- .../html/struct_s_p_i_c_e_1_1map__item.html | 2 +- vlsisapd/doc/latex/annotated.tex | 62 +- .../doc/latex/class_a_g_d_s_1_1_element.pdf | Bin 4910 -> 4811 bytes .../doc/latex/class_a_g_d_s_1_1_rectangle.pdf | Bin 4907 -> 4808 bytes vlsisapd/doc/latex/class_bloc.tex | 6 + vlsisapd/doc/latex/class_circuit.tex | 6 + vlsisapd/doc/latex/class_d_t_r_1_1_a_rule.pdf | Bin 4187 -> 4088 bytes vlsisapd/doc/latex/class_d_t_r_1_1_rule.pdf | Bin 4188 -> 4089 bytes vlsisapd/doc/latex/class_device.tex | 12 + vlsisapd/doc/latex/class_group.tex | 6 + vlsisapd/doc/latex/class_instance.tex | 8 + vlsisapd/doc/latex/class_instance_point.tex | 6 + .../doc/latex/class_intermediate_point.tex | 6 + vlsisapd/doc/latex/class_layout.tex | 12 + vlsisapd/doc/latex/class_net.tex | 11 + .../doc/latex/class_net_1_1_connection.tex | 6 + vlsisapd/doc/latex/class_netlist.tex | 12 + vlsisapd/doc/latex/class_node.tex | 8 + .../doc/latex/class_open_chams_exception.tex | 6 + vlsisapd/doc/latex/class_operator.tex | 11 + .../latex/class_operator_1_1_constraint.tex | 6 + vlsisapd/doc/latex/class_parameters.tex | 6 + vlsisapd/doc/latex/class_port.tex | 12 + vlsisapd/doc/latex/class_port_point.tex | 6 + .../latex/class_s_p_i_c_e_1_1_capacitor.pdf | Bin 4925 -> 4826 bytes .../doc/latex/class_s_p_i_c_e_1_1_circuit.tex | 48 +- .../doc/latex/class_s_p_i_c_e_1_1_current.pdf | Bin 4614 -> 4515 bytes .../latex/class_s_p_i_c_e_1_1_instance.pdf | Bin 5437 -> 5338 bytes .../latex/class_s_p_i_c_e_1_1_instance.tex | 39 +- .../doc/latex/class_s_p_i_c_e_1_1_mosfet.pdf | Bin 4749 -> 4650 bytes .../latex/class_s_p_i_c_e_1_1_resistor.pdf | Bin 4872 -> 4773 bytes .../doc/latex/class_s_p_i_c_e_1_1_source.pdf | Bin 5273 -> 5174 bytes .../doc/latex/class_s_p_i_c_e_1_1_voltage.pdf | Bin 4873 -> 4774 bytes vlsisapd/doc/latex/class_schematic.tex | 17 + .../doc/latex/class_schematic_1_1_infos.tex | 6 + vlsisapd/doc/latex/class_simul_model.tex | 6 + vlsisapd/doc/latex/class_sizing.tex | 12 + vlsisapd/doc/latex/class_transistor.tex | 8 + vlsisapd/doc/latex/class_wire.tex | 17 + vlsisapd/doc/latex/class_wire_point.tex | 6 + vlsisapd/doc/latex/hierarchy.tex | 74 +- vlsisapd/doc/latex/openchams.tex | 921 +----------------- vlsisapd/doc/latex/refman.tex | 62 +- vlsisapd/doc/latex/spice.tex | 10 +- 1047 files changed, 8781 insertions(+), 4363 deletions(-) create mode 100644 documentation/_build/doctrees/ConfigurationTechnology/Architecture.doctree create mode 100644 documentation/_build/doctrees/ConfigurationTechnology/index.doctree create mode 100644 documentation/_build/doctrees/ConfigurationTechnology/pdfHeader.doctree create mode 100644 documentation/_build/doctrees/UsersGuide/DesignFlow.doctree create mode 100644 documentation/_build/html/ConfigurationTechnology/Architecture.html create mode 100644 documentation/_build/html/ConfigurationTechnology/index.html create mode 100644 documentation/_build/html/ConfigurationTechnology/pdfHeader.html create mode 100644 documentation/_build/html/UsersGuide/DesignFlow.html delete mode 100644 documentation/_build/html/_images/math/0b37db03668389c8e33d766f186469af280334bb.png delete mode 100644 documentation/_build/html/_images/math/ab9c214f89790a2afdc94a731f08c35d0fafa77d.png create mode 100644 documentation/_build/html/_sources/ConfigurationTechnology/Architecture.txt create mode 100644 documentation/_build/html/_sources/ConfigurationTechnology/index.txt create mode 100644 documentation/_build/html/_sources/ConfigurationTechnology/pdfHeader.txt create mode 100644 documentation/_build/html/_sources/UsersGuide/DesignFlow.txt create mode 100644 documentation/etc/images/Logo-CNRS.png create mode 100644 documentation/etc/images/Logo-LIP6-bleugris.png create mode 100644 documentation/etc/images/Logo-SU.png delete mode 100644 documentation/examples/AM2901/amd2901_chip.py create mode 100644 documentation/examples/AM2901/amd2901_ioring.py create mode 100644 documentation/examples/AM2901/corona.vst create mode 100644 hurricane/doc/hurricane/html/classEntity_1_1CompareById.html create mode 100644 hurricane/doc/hurricane/latex/classEntity_1_1CompareById.tex create mode 100644 vlsisapd/doc/html/class_bloc.html create mode 100644 vlsisapd/doc/html/class_circuit.html create mode 100644 vlsisapd/doc/html/class_device.html create mode 100644 vlsisapd/doc/html/class_group.html create mode 100644 vlsisapd/doc/html/class_instance.html create mode 100644 vlsisapd/doc/html/class_instance_point.html create mode 100644 vlsisapd/doc/html/class_intermediate_point.html create mode 100644 vlsisapd/doc/html/class_layout.html create mode 100644 vlsisapd/doc/html/class_net.html create mode 100644 vlsisapd/doc/html/class_net_1_1_connection.html create mode 100644 vlsisapd/doc/html/class_netlist.html create mode 100644 vlsisapd/doc/html/class_node.html create mode 100644 vlsisapd/doc/html/class_open_chams_exception.html create mode 100644 vlsisapd/doc/html/class_operator.html create mode 100644 vlsisapd/doc/html/class_operator_1_1_constraint.html create mode 100644 vlsisapd/doc/html/class_parameters.html create mode 100644 vlsisapd/doc/html/class_port.html create mode 100644 vlsisapd/doc/html/class_port_point.html create mode 100644 vlsisapd/doc/html/class_schematic.html create mode 100644 vlsisapd/doc/html/class_schematic_1_1_infos.html create mode 100644 vlsisapd/doc/html/class_simul_model.html create mode 100644 vlsisapd/doc/html/class_sizing.html create mode 100644 vlsisapd/doc/html/class_transistor.html create mode 100644 vlsisapd/doc/html/class_wire.html create mode 100644 vlsisapd/doc/html/class_wire_point.html create mode 100644 vlsisapd/doc/latex/class_bloc.tex create mode 100644 vlsisapd/doc/latex/class_circuit.tex create mode 100644 vlsisapd/doc/latex/class_device.tex create mode 100644 vlsisapd/doc/latex/class_group.tex create mode 100644 vlsisapd/doc/latex/class_instance.tex create mode 100644 vlsisapd/doc/latex/class_instance_point.tex create mode 100644 vlsisapd/doc/latex/class_intermediate_point.tex create mode 100644 vlsisapd/doc/latex/class_layout.tex create mode 100644 vlsisapd/doc/latex/class_net.tex create mode 100644 vlsisapd/doc/latex/class_net_1_1_connection.tex create mode 100644 vlsisapd/doc/latex/class_netlist.tex create mode 100644 vlsisapd/doc/latex/class_node.tex create mode 100644 vlsisapd/doc/latex/class_open_chams_exception.tex create mode 100644 vlsisapd/doc/latex/class_operator.tex create mode 100644 vlsisapd/doc/latex/class_operator_1_1_constraint.tex create mode 100644 vlsisapd/doc/latex/class_parameters.tex create mode 100644 vlsisapd/doc/latex/class_port.tex create mode 100644 vlsisapd/doc/latex/class_port_point.tex create mode 100644 vlsisapd/doc/latex/class_schematic.tex create mode 100644 vlsisapd/doc/latex/class_schematic_1_1_infos.tex create mode 100644 vlsisapd/doc/latex/class_simul_model.tex create mode 100644 vlsisapd/doc/latex/class_sizing.tex create mode 100644 vlsisapd/doc/latex/class_transistor.tex create mode 100644 vlsisapd/doc/latex/class_wire.tex create mode 100644 vlsisapd/doc/latex/class_wire_point.tex diff --git a/crlcore/doc/crlcore/html/AcmSigda_8h_source.html b/crlcore/doc/crlcore/html/AcmSigda_8h_source.html index c9e82b04..d8b0635a 100644 --- a/crlcore/doc/crlcore/html/AcmSigda_8h_source.html +++ b/crlcore/doc/crlcore/html/AcmSigda_8h_source.html @@ -54,7 +54,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
diff --git a/crlcore/doc/crlcore/html/AllianceFramework_8h_source.html b/crlcore/doc/crlcore/html/AllianceFramework_8h_source.html index 87ce4f41..bd55ab71 100644 --- a/crlcore/doc/crlcore/html/AllianceFramework_8h_source.html +++ b/crlcore/doc/crlcore/html/AllianceFramework_8h_source.html @@ -44,42 +44,44 @@ $(function() {
AllianceFramework.h
-
1 // -*- C++ -*-
2 //
3 // This file is part of the Coriolis Software.
4 // Copyright (c) UPMC 2008-2018, All Rights Reserved
5 //
6 // +-----------------------------------------------------------------+
7 // | C O R I O L I S |
8 // | Alliance / Hurricane Interface |
9 // | |
10 // | Author : Jean-Paul CHAPUT |
11 // | E-mail : Jean-Paul.Chaput@lip6.fr |
12 // | =============================================================== |
13 // | C++ Header : "./crlcore/AllianceFramework.h" |
14 // +-----------------------------------------------------------------+
15 
16 
17 #ifndef CRL_ALLIANCE_FRAMEWORK_H
18 #define CRL_ALLIANCE_FRAMEWORK_H
19 
20 #include <map>
21 #include <limits>
22 #include "hurricane/Cell.h"
23 #include "crlcore/Environment.h"
24 #include "crlcore/AllianceLibrary.h"
25 #include "crlcore/Catalog.h"
26 #include "crlcore/ParsersDrivers.h"
27 
28 
29 namespace CRL {
30 
31  using Hurricane::Observable;
32  using Hurricane::BaseObserver;
35  using Hurricane::Cell;
36  using Hurricane::Net;
37  class RoutingGauge;
38  class CellGauge;
39 
40 
42  public:
43  enum FunctionsFlags { NoFlags = 0
44  , NoPythonInit = (1<<0)
45  };
47  , IgnoreFeeds = (1<<1)
48  };
49  enum LibraryFlags { CreateLibrary = (1<<0)
50  , AppendLibrary = (1<<1)
51  , HasCatalog = (1<<2)
52  };
53  enum NotifyFlags { AddedLibrary = (1<<0)
54  , RemovedLibrary = (1<<1)
55  , ConfigChanged = (1<<2)
56  };
57  public:
58  // Constructors.
59  static AllianceFramework* create ( unsigned long flags=NoFlags );
60  // Destructors.
61  void destroy ();
62  // Accessors.
63  static AllianceFramework* get ();
64  string getPrint () const;
65  // Predicates.
66  Catalog::State* isInCatalog ( const Name& );
67  Catalog::State* isInCatalog ( string );
68  inline bool isPOWER ( const char* name );
69  inline bool isPOWER ( const string& name );
70  inline bool isPOWER ( const Name& name );
71  inline bool isGROUND ( const char* name );
72  inline bool isGROUND ( const string& name );
73  inline bool isGROUND ( const Name& name );
74  inline bool isCLOCK ( const char* name );
75  inline bool isCLOCK ( const string& name );
76  inline bool isCLOCK ( const Name& name );
77  inline bool isBLOCKAGE ( const char* name );
78  inline bool isBLOCKAGE ( const string& name );
79  inline bool isBLOCKAGE ( const Name& name );
80  inline bool isBLOCKAGE ( const Net* net );
81  inline bool isPad ( const char* name );
82  inline bool isPad ( const string& name );
83  inline bool isPad ( const Name& name );
84  inline bool isPad ( const Cell* );
85  // Accessors.
86  inline Environment* getEnvironment ();
87  inline Catalog* getCatalog ();
88  inline const Name& getParentLibraryName () const;
89  inline Library* getParentLibrary ();
90  Library* getLibrary ( unsigned int index );
91  Library* getLibrary ( const Name& libName );
92  AllianceLibrary* getAllianceLibrary ( unsigned int index );
93  AllianceLibrary* getAllianceLibrary ( const Name& libName, unsigned int flags );
94  AllianceLibrary* getAllianceLibrary ( Library* );
95  AllianceLibrary* createLibrary ( const string& path, unsigned int flags, string libName="" );
96  inline const AllianceLibraries& getAllianceLibraries () const;
97  void saveLibrary ( Library* );
98  void saveLibrary ( AllianceLibrary* );
99  RoutingGauge* getRoutingGauge ( const Name& name="" );
100  CellGauge* getCellGauge ( const Name& name="" );
101  inline const Name getDefaultCGPinLayerName () const;
102  // Modifiers.
103  RoutingGauge* setRoutingGauge ( const Name& name="" );
104  CellGauge* setCellGauge ( const Name& name="" );
105  void addRoutingGauge ( RoutingGauge* );
106  void addCellGauge ( CellGauge* );
107  void addObserver ( BaseObserver* );
108  void removeObserver ( BaseObserver* );
109  void notify ( unsigned int flags );
110  // Cell Management.
111  Cell* cellLoader ( const string& rpath );
112  Cell* getCell ( const string& name
113  , unsigned int mode
114  , unsigned int depth=(unsigned int)-1 );
115  Cell* createCell ( const string& name, AllianceLibrary* library=NULL );
116  void saveCell ( Cell* , unsigned int mode );
117  unsigned int loadLibraryCells ( Library* );
118  unsigned int loadLibraryCells ( const Name& );
119  static size_t getInstancesCount ( Cell*, unsigned int flags );
120  // Hurricane Managment.
121  void toJson ( JsonWriter* ) const;
122  inline string _getTypeName () const;
123  string _getString () const;
124  Record* _getRecord () const;
125 
126  // Internals - Attributes.
127  protected:
128  static const Name _parentLibraryName;
129  static AllianceFramework* _singleton;
130  Observable _observers;
131  Environment _environment;
132  ParsersMap _parsers;
133  DriversMap _drivers;
134  Catalog _catalog;
135  AllianceLibraries _libraries;
136  Library* _parentLibrary;
137  map<Name,RoutingGauge*> _routingGauges;
138  RoutingGauge* _defaultRoutingGauge;
139  map<Name,CellGauge*> _cellGauges;
140  CellGauge* _defaultCellGauge;
141 
142  // Internals - Constructors.
143  AllianceFramework ();
144  AllianceFramework ( const AllianceFramework& );
145  AllianceFramework& operator= ( const AllianceFramework& );
146  // Internals - Destructors.
147  ~AllianceFramework ();
148  // Internals - Methods.
149  bool _readLocate ( const string& file, unsigned int mode, bool isLib=false );
150  bool _writeLocate ( const string& file, unsigned int mode, bool isLib=false );
151  AllianceLibrary* _createLibrary ( const string& path, bool& hasCatalog );
152  void _bindLibraries ();
153  };
154 
155  inline bool AllianceFramework::isPOWER ( const char* name ) { return _environment.isPOWER(name); }
156  inline bool AllianceFramework::isPOWER ( const string& name ) { return isPOWER(name.c_str()); }
157  inline bool AllianceFramework::isPOWER ( const Name& name ) { return isPOWER(getString(name)); }
158  inline bool AllianceFramework::isGROUND ( const char* name ) { return _environment.isGROUND(name); }
159  inline bool AllianceFramework::isGROUND ( const string& name ) { return isGROUND(name.c_str()); }
160  inline bool AllianceFramework::isGROUND ( const Name& name ) { return isGROUND(getString(name)); }
161  inline bool AllianceFramework::isCLOCK ( const char* name ) { return _environment.isCLOCK(name); }
162  inline bool AllianceFramework::isCLOCK ( const string& name ) { return isCLOCK(name.c_str()); }
163  inline bool AllianceFramework::isCLOCK ( const Name& name ) { return isCLOCK(getString(name)); }
164  inline bool AllianceFramework::isBLOCKAGE ( const char* name ) { return _environment.isBLOCKAGE(name); }
165  inline bool AllianceFramework::isBLOCKAGE ( const string& name ) { return isBLOCKAGE(name.c_str()); }
166  inline bool AllianceFramework::isBLOCKAGE ( const Name& name ) { return isBLOCKAGE(getString(name)); }
167  inline bool AllianceFramework::isBLOCKAGE ( const Net* net ) { return isBLOCKAGE(net->getName()); }
168  inline bool AllianceFramework::isPad ( const char* name ) { return _environment.isPad(name); }
169  inline bool AllianceFramework::isPad ( const string& name ) { return isPad(name.c_str()); }
170  inline bool AllianceFramework::isPad ( const Name& name ) { return isPad(getString(name)); }
171  inline bool AllianceFramework::isPad ( const Cell* cell ) { return isPad(cell->getName()); }
172  inline Environment* AllianceFramework::getEnvironment () { return &_environment; }
173  inline Catalog* AllianceFramework::getCatalog () { return &_catalog; }
175  () const { return _parentLibraryName; }
176  inline Library* AllianceFramework::getParentLibrary () { return _parentLibrary; }
177  inline const AllianceLibraries&
178  AllianceFramework::getAllianceLibraries () const { return _libraries; }
179 // TEMPORARY.
181  () const { return "CALU1"; }
182  inline string AllianceFramework::_getTypeName () const { return "AllianceFramework"; }
183 
184 
185  class JsonAllianceFramework : public JsonObject {
186  public:
187  static void initialize ();
188  JsonAllianceFramework( unsigned long );
189  virtual ~JsonAllianceFramework();
190  virtual string getTypeName () const;
191  virtual JsonAllianceFramework* clone ( unsigned long ) const;
192  virtual void toData ( JsonStack& );
193  private:
194  std::string _defaultRoutingGauge;
195  std::string _defaultCellGauge;
196  };
197 
198 
199 } // CRL namespace.
200 
201 
202 INSPECTOR_P_SUPPORT(CRL::AllianceFramework);
203 
204 #endif // CRL_ALLIANCE_FRAMEWORK_H
bool isBLOCKAGE(const char *name) const
-
Library * getParentLibrary()
Definition: AllianceFramework.h:176
+
1 // -*- C++ -*-
2 //
3 // This file is part of the Coriolis Software.
4 // Copyright (c) UPMC 2008-2018, All Rights Reserved
5 //
6 // +-----------------------------------------------------------------+
7 // | C O R I O L I S |
8 // | Alliance / Hurricane Interface |
9 // | |
10 // | Author : Jean-Paul CHAPUT |
11 // | E-mail : Jean-Paul.Chaput@lip6.fr |
12 // | =============================================================== |
13 // | C++ Header : "./crlcore/AllianceFramework.h" |
14 // +-----------------------------------------------------------------+
15 
16 
17 #ifndef CRL_ALLIANCE_FRAMEWORK_H
18 #define CRL_ALLIANCE_FRAMEWORK_H
19 
20 #include <map>
21 #include <limits>
22 #include "hurricane/Cell.h"
23 #include "crlcore/Environment.h"
24 #include "crlcore/AllianceLibrary.h"
25 #include "crlcore/Catalog.h"
26 #include "crlcore/ParsersDrivers.h"
27 
28 
29 namespace CRL {
30 
31  using Hurricane::Observable;
32  using Hurricane::BaseObserver;
35  using Hurricane::DbU;
36  using Hurricane::Cell;
37  using Hurricane::Net;
38  class RoutingGauge;
39  class CellGauge;
40 
41 
43  public:
44  enum FunctionsFlags { NoFlags = 0
45  , NoPythonInit = (1<<0)
46  };
48  , IgnoreFeeds = (1<<1)
49  };
50  enum LibraryFlags { CreateLibrary = (1<<0)
51  , AppendLibrary = (1<<1)
52  , HasCatalog = (1<<2)
53  };
54  enum NotifyFlags { AddedLibrary = (1<<0)
55  , RemovedLibrary = (1<<1)
56  , ConfigChanged = (1<<2)
57  };
58  public:
59  // Constructors.
60  static AllianceFramework* create ( unsigned long flags=NoFlags );
61  // Destructors.
62  void destroy ();
63  // Accessors.
64  static AllianceFramework* get ();
65  string getPrint () const;
66  // Predicates.
67  Catalog::State* isInCatalog ( const Name& );
68  Catalog::State* isInCatalog ( string );
69  inline bool isPOWER ( const char* name );
70  inline bool isPOWER ( const string& name );
71  inline bool isPOWER ( const Name& name );
72  inline bool isGROUND ( const char* name );
73  inline bool isGROUND ( const string& name );
74  inline bool isGROUND ( const Name& name );
75  inline bool isCLOCK ( const char* name );
76  inline bool isCLOCK ( const string& name );
77  inline bool isCLOCK ( const Name& name );
78  inline bool isBLOCKAGE ( const char* name );
79  inline bool isBLOCKAGE ( const string& name );
80  inline bool isBLOCKAGE ( const Name& name );
81  inline bool isBLOCKAGE ( const Net* net );
82  inline bool isPad ( const char* name );
83  inline bool isPad ( const string& name );
84  inline bool isPad ( const Name& name );
85  inline bool isPad ( const Cell* );
86  // Accessors.
87  inline Environment* getEnvironment ();
88  inline Catalog* getCatalog ();
89  inline const Name& getParentLibraryName () const;
90  inline Library* getParentLibrary ();
91  Library* getLibrary ( unsigned int index );
92  Library* getLibrary ( const Name& libName );
93  AllianceLibrary* getAllianceLibrary ( unsigned int index );
94  AllianceLibrary* getAllianceLibrary ( const Name& libName, unsigned int flags );
95  AllianceLibrary* getAllianceLibrary ( Library* );
96  AllianceLibrary* createLibrary ( const string& path, unsigned int flags, string libName="" );
97  inline const AllianceLibraries& getAllianceLibraries () const;
98  void saveLibrary ( Library* );
99  void saveLibrary ( AllianceLibrary* );
100  RoutingGauge* getRoutingGauge ( const Name& name="" );
101  CellGauge* getCellGauge ( const Name& name="" );
102  CellGauge* matchCellGauge ( DbU::Unit width, DbU::Unit height ) const;
103  CellGauge* matchCellGaugeByHeight ( DbU::Unit height ) const;
104  inline const Name getDefaultCGPinLayerName () const;
105  // Modifiers.
106  RoutingGauge* setRoutingGauge ( const Name& name="" );
107  CellGauge* setCellGauge ( const Name& name="" );
108  void addRoutingGauge ( RoutingGauge* );
109  void addCellGauge ( CellGauge* );
110  void addObserver ( BaseObserver* );
111  void removeObserver ( BaseObserver* );
112  void notify ( unsigned int flags );
113  // Cell Management.
114  Cell* cellLoader ( const string& rpath );
115  Cell* getCell ( const string& name
116  , unsigned int mode
117  , unsigned int depth=(unsigned int)-1 );
118  Cell* createCell ( const string& name, AllianceLibrary* library=NULL );
119  void saveCell ( Cell* , unsigned int mode );
120  unsigned int loadLibraryCells ( Library* );
121  unsigned int loadLibraryCells ( const Name& );
122  static size_t getInstancesCount ( Cell*, unsigned int flags );
123  // Hurricane Managment.
124  void toJson ( JsonWriter* ) const;
125  inline string _getTypeName () const;
126  string _getString () const;
127  Record* _getRecord () const;
128 
129  // Internals - Attributes.
130  protected:
131  static const Name _parentLibraryName;
132  static AllianceFramework* _singleton;
133  Observable _observers;
134  Environment _environment;
135  ParsersMap _parsers;
136  DriversMap _drivers;
137  Catalog _catalog;
138  AllianceLibraries _libraries;
139  Library* _parentLibrary;
140  map<Name,RoutingGauge*> _routingGauges;
141  RoutingGauge* _defaultRoutingGauge;
142  map<Name,CellGauge*> _cellGauges;
143  CellGauge* _defaultCellGauge;
144 
145  // Internals - Constructors.
146  AllianceFramework ();
147  AllianceFramework ( const AllianceFramework& );
148  AllianceFramework& operator= ( const AllianceFramework& );
149  // Internals - Destructors.
150  ~AllianceFramework ();
151  // Internals - Methods.
152  bool _readLocate ( const string& file, unsigned int mode, bool isLib=false );
153  bool _writeLocate ( const string& file, unsigned int mode, bool isLib=false );
154  AllianceLibrary* _createLibrary ( const string& path, bool& hasCatalog );
155  void _bindLibraries ();
156  };
157 
158  inline bool AllianceFramework::isPOWER ( const char* name ) { return _environment.isPOWER(name); }
159  inline bool AllianceFramework::isPOWER ( const string& name ) { return isPOWER(name.c_str()); }
160  inline bool AllianceFramework::isPOWER ( const Name& name ) { return isPOWER(getString(name)); }
161  inline bool AllianceFramework::isGROUND ( const char* name ) { return _environment.isGROUND(name); }
162  inline bool AllianceFramework::isGROUND ( const string& name ) { return isGROUND(name.c_str()); }
163  inline bool AllianceFramework::isGROUND ( const Name& name ) { return isGROUND(getString(name)); }
164  inline bool AllianceFramework::isCLOCK ( const char* name ) { return _environment.isCLOCK(name); }
165  inline bool AllianceFramework::isCLOCK ( const string& name ) { return isCLOCK(name.c_str()); }
166  inline bool AllianceFramework::isCLOCK ( const Name& name ) { return isCLOCK(getString(name)); }
167  inline bool AllianceFramework::isBLOCKAGE ( const char* name ) { return _environment.isBLOCKAGE(name); }
168  inline bool AllianceFramework::isBLOCKAGE ( const string& name ) { return isBLOCKAGE(name.c_str()); }
169  inline bool AllianceFramework::isBLOCKAGE ( const Name& name ) { return isBLOCKAGE(getString(name)); }
170  inline bool AllianceFramework::isBLOCKAGE ( const Net* net ) { return isBLOCKAGE(net->getName()); }
171  inline bool AllianceFramework::isPad ( const char* name ) { return _environment.isPad(name); }
172  inline bool AllianceFramework::isPad ( const string& name ) { return isPad(name.c_str()); }
173  inline bool AllianceFramework::isPad ( const Name& name ) { return isPad(getString(name)); }
174  inline bool AllianceFramework::isPad ( const Cell* cell ) { return isPad(cell->getName()); }
175  inline Environment* AllianceFramework::getEnvironment () { return &_environment; }
176  inline Catalog* AllianceFramework::getCatalog () { return &_catalog; }
178  () const { return _parentLibraryName; }
179  inline Library* AllianceFramework::getParentLibrary () { return _parentLibrary; }
180  inline const AllianceLibraries&
181  AllianceFramework::getAllianceLibraries () const { return _libraries; }
182 // TEMPORARY.
184  () const { return "CALU1"; }
185  inline string AllianceFramework::_getTypeName () const { return "AllianceFramework"; }
186 
187 
188  class JsonAllianceFramework : public JsonObject {
189  public:
190  static void initialize ();
191  JsonAllianceFramework( unsigned long );
192  virtual ~JsonAllianceFramework();
193  virtual string getTypeName () const;
194  virtual JsonAllianceFramework* clone ( unsigned long ) const;
195  virtual void toData ( JsonStack& );
196  private:
197  std::string _defaultRoutingGauge;
198  std::string _defaultCellGauge;
199  };
200 
201 
202 } // CRL namespace.
203 
204 
205 INSPECTOR_P_SUPPORT(CRL::AllianceFramework);
206 
207 #endif // CRL_ALLIANCE_FRAMEWORK_H
bool isBLOCKAGE(const char *name) const
+
Library * getParentLibrary()
Definition: AllianceFramework.h:179
bool isCLOCK(const char *name) const
-
A Framework to work with Alliance formats.
Definition: AllianceFramework.h:41
-
const Name getDefaultCGPinLayerName() const
Definition: AllianceFramework.h:181
+
A Framework to work with Alliance formats.
Definition: AllianceFramework.h:42
+
const Name getDefaultCGPinLayerName() const
Definition: AllianceFramework.h:184
bool isPOWER(const char *name) const
void addCellGauge(CellGauge *)
-
InstancesCountFlags
Definition: AllianceFramework.h:46
+
InstancesCountFlags
Definition: AllianceFramework.h:47
static size_t getInstancesCount(Cell *, unsigned int flags)
+
std::int64_t Unit
void saveCell(Cell *, unsigned int mode)
AllianceLibrary * createLibrary(const string &path, unsigned int flags, string libName="")
-
LibraryFlags
Definition: AllianceFramework.h:49
+
LibraryFlags
Definition: AllianceFramework.h:50
bool isPad(const char *name) const
bool isGROUND(const char *name) const
-
Definition: AllianceFramework.h:46
+
Definition: AllianceFramework.h:47
Library * getLibrary(unsigned int index)
-
const Name & getParentLibraryName() const
Definition: AllianceFramework.h:175
+
const Name & getParentLibraryName() const
Definition: AllianceFramework.h:178
+
void addRoutingGauge(RoutingGauge *)
-
Definition: AllianceFramework.h:49
+
Definition: AllianceFramework.h:50
unsigned int loadLibraryCells(Library *)
Cell * createCell(const string &name, AllianceLibrary *library=NULL)
-
Catalog * getCatalog()
Definition: AllianceFramework.h:173
-
Definition: AllianceFramework.h:47
+
Catalog * getCatalog()
Definition: AllianceFramework.h:176
+
Definition: AllianceFramework.h:48
RoutingGauge * getRoutingGauge(const Name &name="")
A Registry to store Alliance Cell metadatas.
Definition: Catalog.h:56
AllianceLibrary * getAllianceLibrary(unsigned int index)
-
Definition: AllianceFramework.h:51
+
Definition: AllianceFramework.h:52
Holds all the Alliance environment variables.
Definition: Environment.h:35
-
Environment * getEnvironment()
Definition: AllianceFramework.h:172
+
Environment * getEnvironment()
Definition: AllianceFramework.h:175
string getPrint() const
void saveLibrary(Library *)
Cell * getCell(const string &name, unsigned int mode, unsigned int depth=(unsigned int) -1)
@@ -90,7 +92,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
diff --git a/crlcore/doc/crlcore/html/AllianceLibrary_8h_source.html b/crlcore/doc/crlcore/html/AllianceLibrary_8h_source.html index bec4924a..35b6f5a1 100644 --- a/crlcore/doc/crlcore/html/AllianceLibrary_8h_source.html +++ b/crlcore/doc/crlcore/html/AllianceLibrary_8h_source.html @@ -59,7 +59,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
diff --git a/crlcore/doc/crlcore/html/Banner_8h_source.html b/crlcore/doc/crlcore/html/Banner_8h_source.html index 68d6192d..887fc730 100644 --- a/crlcore/doc/crlcore/html/Banner_8h_source.html +++ b/crlcore/doc/crlcore/html/Banner_8h_source.html @@ -66,7 +66,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
diff --git a/crlcore/doc/crlcore/html/Catalog_8h_source.html b/crlcore/doc/crlcore/html/Catalog_8h_source.html index 222c436a..3424e139 100644 --- a/crlcore/doc/crlcore/html/Catalog_8h_source.html +++ b/crlcore/doc/crlcore/html/Catalog_8h_source.html @@ -123,7 +123,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
diff --git a/crlcore/doc/crlcore/html/Environment_8h_source.html b/crlcore/doc/crlcore/html/Environment_8h_source.html index aae11660..4d0bf20b 100644 --- a/crlcore/doc/crlcore/html/Environment_8h_source.html +++ b/crlcore/doc/crlcore/html/Environment_8h_source.html @@ -99,7 +99,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
diff --git a/crlcore/doc/crlcore/html/GraphicToolEngine_8h_source.html b/crlcore/doc/crlcore/html/GraphicToolEngine_8h_source.html index e6a3b757..1f0ae5fc 100644 --- a/crlcore/doc/crlcore/html/GraphicToolEngine_8h_source.html +++ b/crlcore/doc/crlcore/html/GraphicToolEngine_8h_source.html @@ -60,7 +60,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
diff --git a/crlcore/doc/crlcore/html/RoutingGauge_8h_source.html b/crlcore/doc/crlcore/html/RoutingGauge_8h_source.html index d344ac0c..8bfb8ed5 100644 --- a/crlcore/doc/crlcore/html/RoutingGauge_8h_source.html +++ b/crlcore/doc/crlcore/html/RoutingGauge_8h_source.html @@ -80,7 +80,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
diff --git a/crlcore/doc/crlcore/html/RoutingLayerGauge_8h_source.html b/crlcore/doc/crlcore/html/RoutingLayerGauge_8h_source.html index 0964fb6a..f7cc7a1d 100644 --- a/crlcore/doc/crlcore/html/RoutingLayerGauge_8h_source.html +++ b/crlcore/doc/crlcore/html/RoutingLayerGauge_8h_source.html @@ -44,13 +44,13 @@ $(function() {
RoutingLayerGauge.h
-
1 // -*- C++ -*-
2 //
3 // This file is part of the Coriolis Software.
4 // Copyright (c) UPMC 2008-2018, All Rights Reserved
5 //
6 // +-----------------------------------------------------------------+
7 // | C O R I O L I S |
8 // | C o r e L i b r a r y |
9 // | |
10 // | Author : Jean-Paul CHAPUT |
11 // | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
12 // | =============================================================== |
13 // | C++ Header : "./RoutingLayerGauge.h" |
14 // +-----------------------------------------------------------------+
15 
16 
17 #ifndef CRL_ROUTING_LAYER_GAUGE_H
18 #define CRL_ROUTING_LAYER_GAUGE_H
19 
20 
21 #include <map>
22 #include "hurricane/Commons.h"
23 #include "hurricane/Error.h"
24 #include "hurricane/DbU.h"
25 #include "hurricane/Collection.h"
26 #include "hurricane/Slot.h"
27 #include "crlcore/Utilities.h"
28 
29 namespace Hurricane {
30  class Layer;
31 }
32 
33 
34 namespace Constant {
35 
36  enum Direction { Horizontal = (1<<0)
37  , Vertical = (1<<1)
38  };
39 
40  enum LayerGaugeType { Default = (1<<0)
41  , PinOnly = (1<<1)
42  };
43 
44  enum Round { Superior = (1<<2)
45  , Inferior = (1<<3)
46  , Nearest = (1<<4)
47  , Exact = (1<<5)
48  };
49 
50  Direction perpandicular ( unsigned int );
51 
52 }
53 
54 
55 
56 namespace CRL {
57 
58  using std::map;
65  using Hurricane::Record;
66  using Hurricane::DbU;
67  using Hurricane::Layer;
68 
69 
70  class RoutingGauge;
71 
72 
73 // -------------------------------------------------------------------
74 // Class : "RoutingLayerGauge".
75 
76 
78 
79  public:
80  // Constructors & Destructors.
81  static RoutingLayerGauge* create ( const Layer* layer
82  , Constant::Direction direction
84  , unsigned int depth
85  , double density
86  , DbU::Unit offset
87  , DbU::Unit pitch
88  , DbU::Unit wireWidth
89  , DbU::Unit viaWidth
90  , DbU::Unit obsDw );
91  virtual void destroy ();
92  // Accessors.
93  inline bool isHorizontal () const;
94  inline bool isVertical () const;
95  inline const Layer* getLayer () const;
96  inline const Layer* getBlockageLayer () const;
97  inline unsigned int getDepth () const;
98  inline Constant::Direction getDirection () const;
99  inline Constant::LayerGaugeType getType () const;
100  inline double getDensity () const;
101  inline DbU::Unit getOffset () const;
102  inline DbU::Unit getPitch () const;
103  inline DbU::Unit getHalfPitch () const;
104  inline DbU::Unit getWireWidth () const;
105  inline DbU::Unit getHalfWireWidth () const;
106  inline DbU::Unit getViaWidth () const;
107  inline DbU::Unit getHalfViaWidth () const;
108  inline DbU::Unit getObstacleDw () const;
109  void divide ( DbU::Unit dividend, long& quotient, long& modulo ) const;
110  unsigned int getTrackNumber ( DbU::Unit start, DbU::Unit stop ) const;
111  unsigned int getTrackIndex ( DbU::Unit start, DbU::Unit stop, DbU::Unit position, unsigned mode ) const;
112  inline DbU::Unit getTrackPosition ( DbU::Unit start, DbU::Unit stop, DbU::Unit position, unsigned mode ) const;
113  DbU::Unit getTrackPosition ( DbU::Unit start, unsigned depth ) const;
114  // Hurricane Managment.
115  void toJson ( JsonWriter* ) const;
116  virtual string _getTypeName () const;
117  virtual string _getString () const;
118  virtual Record* _getRecord () const;
119 
120  protected:
121  // Internal - Attributes.
122  const Layer* _layer;
123  const Layer* _blockageLayer;
124  Constant::Direction _direction;
126  unsigned int _depth;
127  double _density;
128  DbU::Unit _offset;
129  DbU::Unit _pitch;
130  DbU::Unit _wireWidth;
131  DbU::Unit _viaWidth;
132  DbU::Unit _obstacleDw;
133 
134  // Internal - Constructors & Destructors.
135  RoutingLayerGauge ( const Layer* layer
136  , Constant::Direction direction
138  , unsigned int depth
139  , double density
140  , DbU::Unit offset
141  , DbU::Unit pitch
142  , DbU::Unit wireWidth
143  , DbU::Unit viaWidth
144  , DbU::Unit obsDw );
145  virtual ~RoutingLayerGauge ();
146  virtual void _preDestroy();
147  RoutingLayerGauge& operator= ( const RoutingLayerGauge& );
148 
149  // Friends.
150  friend class RoutingGauge;
151  };
152 
153 
154  // New Types.
155  typedef map<Layer*,RoutingLayerGauge*> RoutingLayerGaugeMap;
156 
157 
158 // -------------------------------------------------------------------
159 // Collection : "RoutingLayerGauges".
160 
164 
165 
166 // -------------------------------------------------------------------
167 // Inline Functions.
168 
169  inline bool RoutingLayerGauge::isHorizontal () const { return (_direction == Constant::Direction::Horizontal); }
170  inline bool RoutingLayerGauge::isVertical () const { return (_direction == Constant::Direction::Vertical); }
171  inline const Layer* RoutingLayerGauge::getLayer () const { return _layer; }
172  inline const Layer* RoutingLayerGauge::getBlockageLayer () const { return _blockageLayer; }
173  inline Constant::Direction RoutingLayerGauge::getDirection () const { return _direction; }
174  inline Constant::LayerGaugeType RoutingLayerGauge::getType () const { return _type; }
175  inline unsigned int RoutingLayerGauge::getDepth () const { return _depth; }
176  inline double RoutingLayerGauge::getDensity () const { return _density; }
177  inline DbU::Unit RoutingLayerGauge::getOffset () const { return _offset; }
178  inline DbU::Unit RoutingLayerGauge::getPitch () const { return _pitch; }
179  inline DbU::Unit RoutingLayerGauge::getHalfPitch () const { return _pitch>>1; }
180  inline DbU::Unit RoutingLayerGauge::getWireWidth () const { return _wireWidth; }
181  inline DbU::Unit RoutingLayerGauge::getHalfWireWidth () const { return _wireWidth>>1; }
182  inline DbU::Unit RoutingLayerGauge::getViaWidth () const { return _viaWidth; }
183  inline DbU::Unit RoutingLayerGauge::getHalfViaWidth () const { return _viaWidth>>1; }
184  inline DbU::Unit RoutingLayerGauge::getObstacleDw () const { return _obstacleDw; }
185  inline DbU::Unit RoutingLayerGauge::getTrackPosition ( DbU::Unit start, DbU::Unit stop, DbU::Unit position, unsigned mode ) const
186  { return getTrackPosition( start, getTrackIndex(start,stop,position,mode) ); }
187 
188 
189 // -------------------------------------------------------------------
190 // Class : "JsonRoutingLayerGauge".
191 
192  class JsonRoutingLayerGauge : public JsonObject {
193  public:
194  static void initialize ();
195  JsonRoutingLayerGauge ( unsigned long flags );
196  virtual string getTypeName () const;
197  virtual JsonRoutingLayerGauge* clone ( unsigned long flags ) const;
198  virtual void toData ( JsonStack& );
199  };
200 
201 
202 } // CRL namespace.
203 
204 
205 INSPECTOR_P_SUPPORT(CRL::RoutingLayerGauge);
206 
207 
208 // -------------------------------------------------------------------
209 // Inspector Support for : "const ::Constant::Direction*".
210 
211 
212 inline void from ( Constant::Direction& direction, const std::string& s )
213 {
214  if (s == "Vertical") direction = Constant::Vertical;
215  else {
216  if (s != "Horizontal")
217  std::cerr << Hurricane::Error( "::from(Direction&,string&): Unknown value \"%s\"."
218  , s.c_str() ) << std::endl;
219  direction = Constant::Horizontal;
220  }
221 }
222 
223 
224 template<>
225 inline std::string getString<const Constant::Direction*>
226  ( const Constant::Direction* direction )
227 {
228  switch ( *direction ) {
229  case Constant::Horizontal: return "Horizontal";
230  case Constant::Vertical: return "Vertical";
231  }
232  return "Unknown Constant::Direction";
233 }
234 
235 
236 template<>
237 inline std::string getString<Constant::Direction>
238  ( Constant::Direction direction )
239 {
240  switch ( direction ) {
241  case Constant::Horizontal: return "Horizontal";
242  case Constant::Vertical: return "Vertical";
243  }
244  return "Unknown Constant::Direction";
245 }
246 
247 
248 IOSTREAM_POINTER_SUPPORT(Constant::Direction);
249 
250 
251 // -------------------------------------------------------------------
252 // Inspector Support for : "const Constant::LayerGaugeType*".
253 
254 
255 inline void from ( Constant::LayerGaugeType& type, const std::string& s )
256 {
257  if (s == "PinOnly") type = Constant::PinOnly;
258  else {
259  if (s != "Default")
260  std::cerr << Hurricane::Error( "::from(LayerGaugeType&,string&): Unknown value \"%s\"."
261  , s.c_str() ) << std::endl;
262  type = Constant::Default;
263  }
264 }
265 
266 
267 template<>
268 inline std::string getString<const Constant::LayerGaugeType*>
269  ( const Constant::LayerGaugeType* layerGaugeType )
270 {
271  switch ( *layerGaugeType ) {
272  case Constant::Default: return "Default";
273  case Constant::PinOnly: return "PinOnly";
274  }
275  return "Unknown Constant::LayerGaugeType";
276 }
277 
278 
279 template<>
280 inline std::string getString<Constant::LayerGaugeType*>
281  ( Constant::LayerGaugeType* layerGaugeType )
282 { return getString<const Constant::LayerGaugeType*>(layerGaugeType); }
283 
284 
285 template<>
286 inline std::string getString<const Constant::LayerGaugeType>
287  ( const Constant::LayerGaugeType layerGaugeType )
288 {
289  switch ( layerGaugeType ) {
290  case Constant::Default: return "Default";
291  case Constant::PinOnly: return "PinOnly";
292  }
293  return "Unknown Constant::LayerGaugeType";
294 }
295 
296 
297 template<>
298 inline std::string getString<Constant::LayerGaugeType>
299  ( Constant::LayerGaugeType layerGaugeType )
300 { return getString<const Constant::LayerGaugeType>(layerGaugeType); }
301 
302 
303 IOSTREAM_POINTER_SUPPORT(Constant::LayerGaugeType);
304 
305 
306 #endif // CRL_ROUTING_LAYER_GAUGE_H
Store various constants.
Definition: RoutingLayerGauge.h:34
+
1 // -*- C++ -*-
2 //
3 // This file is part of the Coriolis Software.
4 // Copyright (c) UPMC 2008-2018, All Rights Reserved
5 //
6 // +-----------------------------------------------------------------+
7 // | C O R I O L I S |
8 // | C o r e L i b r a r y |
9 // | |
10 // | Author : Jean-Paul CHAPUT |
11 // | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
12 // | =============================================================== |
13 // | C++ Header : "./RoutingLayerGauge.h" |
14 // +-----------------------------------------------------------------+
15 
16 
17 #ifndef CRL_ROUTING_LAYER_GAUGE_H
18 #define CRL_ROUTING_LAYER_GAUGE_H
19 
20 
21 #include <map>
22 #include "hurricane/Commons.h"
23 #include "hurricane/Error.h"
24 #include "hurricane/DbU.h"
25 #include "hurricane/Collection.h"
26 #include "hurricane/Slot.h"
27 #include "crlcore/Utilities.h"
28 
29 namespace Hurricane {
30  class Layer;
31 }
32 
33 
34 namespace Constant {
35 
36  enum Direction { Horizontal = (1<<0)
37  , Vertical = (1<<1)
38  };
39 
40  enum LayerGaugeType { Default = (1<<0)
41  , PinOnly = (1<<1)
42  };
43 
44  enum Round { Superior = (1<<2)
45  , Inferior = (1<<3)
46  , Nearest = (1<<4)
47  , Exact = (1<<5)
48  };
49 
50  Direction perpandicular ( unsigned int );
51 
52 }
53 
54 
55 
56 namespace CRL {
57 
58  using std::map;
65  using Hurricane::Record;
66  using Hurricane::DbU;
67  using Hurricane::Layer;
68 
69 
70  class RoutingGauge;
71 
72 
73 // -------------------------------------------------------------------
74 // Class : "RoutingLayerGauge".
75 
76 
78 
79  public:
80  // Constructors & Destructors.
81  static RoutingLayerGauge* create ( const Layer* layer
82  , Constant::Direction direction
84  , unsigned int depth
85  , double density
86  , DbU::Unit offset
87  , DbU::Unit pitch
88  , DbU::Unit wireWidth
89  , DbU::Unit viaWidth
90  , DbU::Unit obsDw );
91  virtual void destroy ();
92  // Accessors.
93  inline bool isHorizontal () const;
94  inline bool isVertical () const;
95  inline const Layer* getLayer () const;
96  inline const Layer* getBlockageLayer () const;
97  inline unsigned int getDepth () const;
98  inline Constant::Direction getDirection () const;
99  inline Constant::LayerGaugeType getType () const;
100  inline double getDensity () const;
101  inline DbU::Unit getOffset () const;
102  inline DbU::Unit getPitch () const;
103  inline DbU::Unit getHalfPitch () const;
104  inline DbU::Unit getWireWidth () const;
105  inline DbU::Unit getHalfWireWidth () const;
106  inline DbU::Unit getViaWidth () const;
107  inline DbU::Unit getHalfViaWidth () const;
108  inline DbU::Unit getObstacleDw () const;
109  void divide ( DbU::Unit dividend, long& quotient, long& modulo ) const;
110  unsigned int getTrackNumber ( DbU::Unit start, DbU::Unit stop ) const;
111  long getTrackIndex ( DbU::Unit start, DbU::Unit stop, DbU::Unit position, unsigned mode ) const;
112  inline DbU::Unit getTrackPosition ( DbU::Unit start, DbU::Unit stop, DbU::Unit position, unsigned mode ) const;
113  DbU::Unit getTrackPosition ( DbU::Unit start, long index ) const;
114  // Hurricane Managment.
115  void toJson ( JsonWriter* ) const;
116  virtual string _getTypeName () const;
117  virtual string _getString () const;
118  virtual Record* _getRecord () const;
119 
120  protected:
121  // Internal - Attributes.
122  const Layer* _layer;
123  const Layer* _blockageLayer;
124  Constant::Direction _direction;
126  unsigned int _depth;
127  double _density;
128  DbU::Unit _offset;
129  DbU::Unit _pitch;
130  DbU::Unit _wireWidth;
131  DbU::Unit _viaWidth;
132  DbU::Unit _obstacleDw;
133 
134  // Internal - Constructors & Destructors.
135  RoutingLayerGauge ( const Layer* layer
136  , Constant::Direction direction
138  , unsigned int depth
139  , double density
140  , DbU::Unit offset
141  , DbU::Unit pitch
142  , DbU::Unit wireWidth
143  , DbU::Unit viaWidth
144  , DbU::Unit obsDw );
145  virtual ~RoutingLayerGauge ();
146  virtual void _preDestroy();
147  RoutingLayerGauge& operator= ( const RoutingLayerGauge& );
148 
149  // Friends.
150  friend class RoutingGauge;
151  };
152 
153 
154  // New Types.
155  typedef map<Layer*,RoutingLayerGauge*> RoutingLayerGaugeMap;
156 
157 
158 // -------------------------------------------------------------------
159 // Collection : "RoutingLayerGauges".
160 
164 
165 
166 // -------------------------------------------------------------------
167 // Inline Functions.
168 
169  inline bool RoutingLayerGauge::isHorizontal () const { return (_direction == Constant::Direction::Horizontal); }
170  inline bool RoutingLayerGauge::isVertical () const { return (_direction == Constant::Direction::Vertical); }
171  inline const Layer* RoutingLayerGauge::getLayer () const { return _layer; }
172  inline const Layer* RoutingLayerGauge::getBlockageLayer () const { return _blockageLayer; }
173  inline Constant::Direction RoutingLayerGauge::getDirection () const { return _direction; }
174  inline Constant::LayerGaugeType RoutingLayerGauge::getType () const { return _type; }
175  inline unsigned int RoutingLayerGauge::getDepth () const { return _depth; }
176  inline double RoutingLayerGauge::getDensity () const { return _density; }
177  inline DbU::Unit RoutingLayerGauge::getOffset () const { return _offset; }
178  inline DbU::Unit RoutingLayerGauge::getPitch () const { return _pitch; }
179  inline DbU::Unit RoutingLayerGauge::getHalfPitch () const { return _pitch>>1; }
180  inline DbU::Unit RoutingLayerGauge::getWireWidth () const { return _wireWidth; }
181  inline DbU::Unit RoutingLayerGauge::getHalfWireWidth () const { return _wireWidth>>1; }
182  inline DbU::Unit RoutingLayerGauge::getViaWidth () const { return _viaWidth; }
183  inline DbU::Unit RoutingLayerGauge::getHalfViaWidth () const { return _viaWidth>>1; }
184  inline DbU::Unit RoutingLayerGauge::getObstacleDw () const { return _obstacleDw; }
185  inline DbU::Unit RoutingLayerGauge::getTrackPosition ( DbU::Unit start, DbU::Unit stop, DbU::Unit position, unsigned mode ) const
186  { return getTrackPosition( start, getTrackIndex(start,stop,position,mode) ); }
187 
188 
189 // -------------------------------------------------------------------
190 // Class : "JsonRoutingLayerGauge".
191 
192  class JsonRoutingLayerGauge : public JsonObject {
193  public:
194  static void initialize ();
195  JsonRoutingLayerGauge ( unsigned long flags );
196  virtual string getTypeName () const;
197  virtual JsonRoutingLayerGauge* clone ( unsigned long flags ) const;
198  virtual void toData ( JsonStack& );
199  };
200 
201 
202 } // CRL namespace.
203 
204 
205 INSPECTOR_P_SUPPORT(CRL::RoutingLayerGauge);
206 
207 
208 // -------------------------------------------------------------------
209 // Inspector Support for : "const ::Constant::Direction*".
210 
211 
212 inline void from ( Constant::Direction& direction, const std::string& s )
213 {
214  if (s == "Vertical") direction = Constant::Vertical;
215  else {
216  if (s != "Horizontal")
217  std::cerr << Hurricane::Error( "::from(Direction&,string&): Unknown value \"%s\"."
218  , s.c_str() ) << std::endl;
219  direction = Constant::Horizontal;
220  }
221 }
222 
223 
224 template<>
225 inline std::string getString<const Constant::Direction*>
226  ( const Constant::Direction* direction )
227 {
228  switch ( *direction ) {
229  case Constant::Horizontal: return "Horizontal";
230  case Constant::Vertical: return "Vertical";
231  }
232  return "Unknown Constant::Direction";
233 }
234 
235 
236 template<>
237 inline std::string getString<Constant::Direction>
238  ( Constant::Direction direction )
239 {
240  switch ( direction ) {
241  case Constant::Horizontal: return "Horizontal";
242  case Constant::Vertical: return "Vertical";
243  }
244  return "Unknown Constant::Direction";
245 }
246 
247 
248 IOSTREAM_POINTER_SUPPORT(Constant::Direction);
249 
250 
251 // -------------------------------------------------------------------
252 // Inspector Support for : "const Constant::LayerGaugeType*".
253 
254 
255 inline void from ( Constant::LayerGaugeType& type, const std::string& s )
256 {
257  if (s == "PinOnly") type = Constant::PinOnly;
258  else {
259  if (s != "Default")
260  std::cerr << Hurricane::Error( "::from(LayerGaugeType&,string&): Unknown value \"%s\"."
261  , s.c_str() ) << std::endl;
262  type = Constant::Default;
263  }
264 }
265 
266 
267 template<>
268 inline std::string getString<const Constant::LayerGaugeType*>
269  ( const Constant::LayerGaugeType* layerGaugeType )
270 {
271  switch ( *layerGaugeType ) {
272  case Constant::Default: return "Default";
273  case Constant::PinOnly: return "PinOnly";
274  }
275  return "Unknown Constant::LayerGaugeType";
276 }
277 
278 
279 template<>
280 inline std::string getString<Constant::LayerGaugeType*>
281  ( Constant::LayerGaugeType* layerGaugeType )
282 { return getString<const Constant::LayerGaugeType*>(layerGaugeType); }
283 
284 
285 template<>
286 inline std::string getString<const Constant::LayerGaugeType>
287  ( const Constant::LayerGaugeType layerGaugeType )
288 {
289  switch ( layerGaugeType ) {
290  case Constant::Default: return "Default";
291  case Constant::PinOnly: return "PinOnly";
292  }
293  return "Unknown Constant::LayerGaugeType";
294 }
295 
296 
297 template<>
298 inline std::string getString<Constant::LayerGaugeType>
299  ( Constant::LayerGaugeType layerGaugeType )
300 { return getString<const Constant::LayerGaugeType>(layerGaugeType); }
301 
302 
303 IOSTREAM_POINTER_SUPPORT(Constant::LayerGaugeType);
304 
305 
306 #endif // CRL_ROUTING_LAYER_GAUGE_H
Store various constants.
Definition: RoutingLayerGauge.h:34
DbU::Unit getViaWidth() const
Definition: RoutingLayerGauge.h:182
virtual void destroy()
const Layer * getLayer() const
Definition: RoutingLayerGauge.h:171
Round
Definition: RoutingLayerGauge.h:44
DbU::Unit getPitch() const
Definition: RoutingLayerGauge.h:178
-
unsigned int getTrackIndex(DbU::Unit start, DbU::Unit stop, DbU::Unit position, unsigned mode) const
+
long getTrackIndex(DbU::Unit start, DbU::Unit stop, DbU::Unit position, unsigned mode) const
@@ -93,7 +93,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
diff --git a/crlcore/doc/crlcore/html/SearchPath_8h_source.html b/crlcore/doc/crlcore/html/SearchPath_8h_source.html index c6719954..57b9d045 100644 --- a/crlcore/doc/crlcore/html/SearchPath_8h_source.html +++ b/crlcore/doc/crlcore/html/SearchPath_8h_source.html @@ -68,7 +68,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
diff --git a/crlcore/doc/crlcore/html/ToolEngine_8h_source.html b/crlcore/doc/crlcore/html/ToolEngine_8h_source.html index a5e8b2ac..3acb76d1 100644 --- a/crlcore/doc/crlcore/html/ToolEngine_8h_source.html +++ b/crlcore/doc/crlcore/html/ToolEngine_8h_source.html @@ -58,7 +58,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
diff --git a/crlcore/doc/crlcore/html/ToolEngines_8h_source.html b/crlcore/doc/crlcore/html/ToolEngines_8h_source.html index 6e2d975c..d72d9ae0 100644 --- a/crlcore/doc/crlcore/html/ToolEngines_8h_source.html +++ b/crlcore/doc/crlcore/html/ToolEngines_8h_source.html @@ -57,7 +57,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
diff --git a/crlcore/doc/crlcore/html/annotated.html b/crlcore/doc/crlcore/html/annotated.html index 50a90693..e8bd28c8 100644 --- a/crlcore/doc/crlcore/html/annotated.html +++ b/crlcore/doc/crlcore/html/annotated.html @@ -64,7 +64,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
diff --git a/crlcore/doc/crlcore/html/classCRL_1_1AcmSigda-members.html b/crlcore/doc/crlcore/html/classCRL_1_1AcmSigda-members.html index b270d2c5..b1f95183 100644 --- a/crlcore/doc/crlcore/html/classCRL_1_1AcmSigda-members.html +++ b/crlcore/doc/crlcore/html/classCRL_1_1AcmSigda-members.html @@ -53,7 +53,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
diff --git a/crlcore/doc/crlcore/html/classCRL_1_1AcmSigda.html b/crlcore/doc/crlcore/html/classCRL_1_1AcmSigda.html index 463c49b8..8b60c414 100644 --- a/crlcore/doc/crlcore/html/classCRL_1_1AcmSigda.html +++ b/crlcore/doc/crlcore/html/classCRL_1_1AcmSigda.html @@ -118,7 +118,7 @@ Static Public Member Functions
- +
Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
diff --git a/crlcore/doc/crlcore/html/classCRL_1_1AllianceFramework-members.html b/crlcore/doc/crlcore/html/classCRL_1_1AllianceFramework-members.html index 0f8821cc..f607bfe0 100644 --- a/crlcore/doc/crlcore/html/classCRL_1_1AllianceFramework-members.html +++ b/crlcore/doc/crlcore/html/classCRL_1_1AllianceFramework-members.html @@ -87,7 +87,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
diff --git a/crlcore/doc/crlcore/html/classCRL_1_1AllianceFramework.html b/crlcore/doc/crlcore/html/classCRL_1_1AllianceFramework.html index ba419e34..29b61911 100644 --- a/crlcore/doc/crlcore/html/classCRL_1_1AllianceFramework.html +++ b/crlcore/doc/crlcore/html/classCRL_1_1AllianceFramework.html @@ -923,7 +923,7 @@ Static Public Member Functions
- +
Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
diff --git a/crlcore/doc/crlcore/html/classCRL_1_1AllianceLibrary-members.html b/crlcore/doc/crlcore/html/classCRL_1_1AllianceLibrary-members.html index d7a7ca4b..3546c9a8 100644 --- a/crlcore/doc/crlcore/html/classCRL_1_1AllianceLibrary-members.html +++ b/crlcore/doc/crlcore/html/classCRL_1_1AllianceLibrary-members.html @@ -56,7 +56,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
diff --git a/crlcore/doc/crlcore/html/classCRL_1_1AllianceLibrary.html b/crlcore/doc/crlcore/html/classCRL_1_1AllianceLibrary.html index abafaa29..59f87d75 100644 --- a/crlcore/doc/crlcore/html/classCRL_1_1AllianceLibrary.html +++ b/crlcore/doc/crlcore/html/classCRL_1_1AllianceLibrary.html @@ -175,7 +175,7 @@ Public Member Functions
- +
Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
diff --git a/crlcore/doc/crlcore/html/classCRL_1_1Banner-members.html b/crlcore/doc/crlcore/html/classCRL_1_1Banner-members.html index c3324927..5094698f 100644 --- a/crlcore/doc/crlcore/html/classCRL_1_1Banner-members.html +++ b/crlcore/doc/crlcore/html/classCRL_1_1Banner-members.html @@ -67,7 +67,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
diff --git a/crlcore/doc/crlcore/html/classCRL_1_1Banner.html b/crlcore/doc/crlcore/html/classCRL_1_1Banner.html index a5065e46..7d03cf2d 100644 --- a/crlcore/doc/crlcore/html/classCRL_1_1Banner.html +++ b/crlcore/doc/crlcore/html/classCRL_1_1Banner.html @@ -495,7 +495,7 @@ Public Member Functions
- +
Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
diff --git a/crlcore/doc/crlcore/html/classCRL_1_1Catalog-members.html b/crlcore/doc/crlcore/html/classCRL_1_1Catalog-members.html index d71b0723..0ae4eabe 100644 --- a/crlcore/doc/crlcore/html/classCRL_1_1Catalog-members.html +++ b/crlcore/doc/crlcore/html/classCRL_1_1Catalog-members.html @@ -60,7 +60,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
diff --git a/crlcore/doc/crlcore/html/classCRL_1_1Catalog.html b/crlcore/doc/crlcore/html/classCRL_1_1Catalog.html index dd4713ad..09b1a837 100644 --- a/crlcore/doc/crlcore/html/classCRL_1_1Catalog.html +++ b/crlcore/doc/crlcore/html/classCRL_1_1Catalog.html @@ -292,7 +292,7 @@ Public Member Functions
- +
Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
diff --git a/crlcore/doc/crlcore/html/classCRL_1_1CatalogExtension-members.html b/crlcore/doc/crlcore/html/classCRL_1_1CatalogExtension-members.html index 2255224e..8251818e 100644 --- a/crlcore/doc/crlcore/html/classCRL_1_1CatalogExtension-members.html +++ b/crlcore/doc/crlcore/html/classCRL_1_1CatalogExtension-members.html @@ -71,7 +71,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
diff --git a/crlcore/doc/crlcore/html/classCRL_1_1CatalogExtension.html b/crlcore/doc/crlcore/html/classCRL_1_1CatalogExtension.html index 9ecc38fd..10aa49f5 100644 --- a/crlcore/doc/crlcore/html/classCRL_1_1CatalogExtension.html +++ b/crlcore/doc/crlcore/html/classCRL_1_1CatalogExtension.html @@ -763,7 +763,7 @@ Static Public Member Functions
- +
Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
diff --git a/crlcore/doc/crlcore/html/classCRL_1_1Catalog_1_1State-members.html b/crlcore/doc/crlcore/html/classCRL_1_1Catalog_1_1State-members.html index e58b7047..ee5b4bb6 100644 --- a/crlcore/doc/crlcore/html/classCRL_1_1Catalog_1_1State-members.html +++ b/crlcore/doc/crlcore/html/classCRL_1_1Catalog_1_1State-members.html @@ -86,7 +86,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
diff --git a/crlcore/doc/crlcore/html/classCRL_1_1Catalog_1_1State.html b/crlcore/doc/crlcore/html/classCRL_1_1Catalog_1_1State.html index 1120f645..a3ae5d8b 100644 --- a/crlcore/doc/crlcore/html/classCRL_1_1Catalog_1_1State.html +++ b/crlcore/doc/crlcore/html/classCRL_1_1Catalog_1_1State.html @@ -846,7 +846,7 @@ Public Member Functions
- +
Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
diff --git a/crlcore/doc/crlcore/html/classCRL_1_1Environment-members.html b/crlcore/doc/crlcore/html/classCRL_1_1Environment-members.html index dca15fb5..f0de0a26 100644 --- a/crlcore/doc/crlcore/html/classCRL_1_1Environment-members.html +++ b/crlcore/doc/crlcore/html/classCRL_1_1Environment-members.html @@ -96,7 +96,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
diff --git a/crlcore/doc/crlcore/html/classCRL_1_1Environment.html b/crlcore/doc/crlcore/html/classCRL_1_1Environment.html index 0b6e794c..82d4228a 100644 --- a/crlcore/doc/crlcore/html/classCRL_1_1Environment.html +++ b/crlcore/doc/crlcore/html/classCRL_1_1Environment.html @@ -1146,7 +1146,7 @@ Public Member Functions
- +
Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
diff --git a/crlcore/doc/crlcore/html/classCRL_1_1GraphicTool-members.html b/crlcore/doc/crlcore/html/classCRL_1_1GraphicTool-members.html index 2cbfefe9..7d25aae5 100644 --- a/crlcore/doc/crlcore/html/classCRL_1_1GraphicTool-members.html +++ b/crlcore/doc/crlcore/html/classCRL_1_1GraphicTool-members.html @@ -54,7 +54,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
diff --git a/crlcore/doc/crlcore/html/classCRL_1_1GraphicTool.html b/crlcore/doc/crlcore/html/classCRL_1_1GraphicTool.html index c4306483..99b5c4ec 100644 --- a/crlcore/doc/crlcore/html/classCRL_1_1GraphicTool.html +++ b/crlcore/doc/crlcore/html/classCRL_1_1GraphicTool.html @@ -127,7 +127,7 @@ Public Member Functions
- +
Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
diff --git a/crlcore/doc/crlcore/html/classCRL_1_1RoutingGauge-members.html b/crlcore/doc/crlcore/html/classCRL_1_1RoutingGauge-members.html index 428e6c74..c34529aa 100644 --- a/crlcore/doc/crlcore/html/classCRL_1_1RoutingGauge-members.html +++ b/crlcore/doc/crlcore/html/classCRL_1_1RoutingGauge-members.html @@ -68,7 +68,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
diff --git a/crlcore/doc/crlcore/html/classCRL_1_1RoutingGauge.html b/crlcore/doc/crlcore/html/classCRL_1_1RoutingGauge.html index 04d4e553..413272df 100644 --- a/crlcore/doc/crlcore/html/classCRL_1_1RoutingGauge.html +++ b/crlcore/doc/crlcore/html/classCRL_1_1RoutingGauge.html @@ -451,7 +451,7 @@ Static Public Member Functions
- +
Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
diff --git a/crlcore/doc/crlcore/html/classCRL_1_1RoutingLayerGauge-members.html b/crlcore/doc/crlcore/html/classCRL_1_1RoutingLayerGauge-members.html index b76ba7a3..394e8a53 100644 --- a/crlcore/doc/crlcore/html/classCRL_1_1RoutingLayerGauge-members.html +++ b/crlcore/doc/crlcore/html/classCRL_1_1RoutingLayerGauge-members.html @@ -62,16 +62,15 @@ $(function() { getPitch() constCRL::RoutingLayerGaugeinline getTrackIndex(DbU::Unit start, DbU::Unit stop, DbU::Unit position, unsigned mode) constCRL::RoutingLayerGauge getTrackNumber(DbU::Unit start, DbU::Unit stop) constCRL::RoutingLayerGauge - getTrackPosition(DbU::Unit start, unsigned depth) constCRL::RoutingLayerGauge - getType() constCRL::RoutingLayerGaugeinline - getViaWidth() constCRL::RoutingLayerGaugeinline - getWireWidth() constCRL::RoutingLayerGaugeinline + getType() constCRL::RoutingLayerGaugeinline + getViaWidth() constCRL::RoutingLayerGaugeinline + getWireWidth() constCRL::RoutingLayerGaugeinline


- +
Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
diff --git a/crlcore/doc/crlcore/html/classCRL_1_1RoutingLayerGauge.html b/crlcore/doc/crlcore/html/classCRL_1_1RoutingLayerGauge.html index 1a4eaba7..a1b499a6 100644 --- a/crlcore/doc/crlcore/html/classCRL_1_1RoutingLayerGauge.html +++ b/crlcore/doc/crlcore/html/classCRL_1_1RoutingLayerGauge.html @@ -86,10 +86,8 @@ Public Member Functions   unsigned int getTrackNumber (DbU::Unit start, DbU::Unit stop) const   -unsigned int getTrackIndex (DbU::Unit start, DbU::Unit stop, DbU::Unit position, unsigned mode) const +long getTrackIndex (DbU::Unit start, DbU::Unit stop, DbU::Unit position, unsigned mode) const   -DbU::Unit getTrackPosition (DbU::Unit start, unsigned depth) const -  @@ -673,35 +671,6 @@ Static Public Member Functions

Returns: the index of the track nearest position position in interval [start:stop], according the rounding mode.

-
- - -

◆ getTrackPosition()

- -
-
-

Static Public Member Functions

- - - - - - - - - - - - - - - - - -
DbU::Unit CRL::RoutingLayerGauge::getTrackPosition (DbU::Unit start,
unsigned depth 
) const
-
-

Returns: the position of the track number depth (with first track at start).

-

The documentation for this class was generated from the following files: +
  • Complete Design Flow & Examples
  • Installation
  • 2. Setting up the Environment
  • +
  • Complete Design Flow & Examples
  • Installation
  • 2. Setting up the Environment
  • +
  • Complete Design Flow & Examples
  • Installation
  • -
  • Knik – Global Router
  • -
  • Kite – Detailed Router
  • +
  • Complete Design Flow & Examples
  • Installation
  • 2. Setting up the Environment
  • +
  • Complete Design Flow & Examples
  • Installation
  • 2. Setting up the Environment
  • @@ -523,7 +533,7 @@ available here: Generated by Sphinx - using a RTD theme on Mar 04, 2019. + using a RTD theme on May 27, 2019. diff --git a/documentation/_build/html/Katabatic/Katabatic.html b/documentation/_build/html/Katabatic/Katabatic.html index 17d1bab3..cd84e8e1 100644 --- a/documentation/_build/html/Katabatic/Katabatic.html +++ b/documentation/_build/html/Katabatic/Katabatic.html @@ -83,13 +83,18 @@
  • Release 1.0.2049
  • Release v2.0.1
  • Release v2.1
  • -
  • Release v2.2
  • +
  • Release v2.2
  • +
  • Release v2.3
  • +
  • Complete Design Flow & Examples
  • Installation
  • 2. Setting up the Environment
  • +
  • Complete Design Flow & Examples
  • Installation
  • 2. Setting up the Environment
  • +
  • Complete Design Flow & Examples
  • Installation
  • 2. Setting up the Environment
  • +
  • Complete Design Flow & Examples
  • Installation
  • 2. Setting up the Environment
  • +
  • Complete Design Flow & Examples
  • Installation
  • 2. Setting up the Environment
  • +
  • Complete Design Flow & Examples
  • Installation
  • 2. Setting up the Environment
  • +
  • Complete Design Flow & Examples
  • Installation
  • 2. Setting up the Environment
  • +
  • Complete Design Flow & Examples
  • Installation
  • 2. Setting up the Environment
  • +
  • Complete Design Flow & Examples
  • Installation
  • 2. Setting up the Environment
  • +
  • Complete Design Flow & Examples
  • Installation
  • 2. Setting up the Environment
  • +
  • Complete Design Flow & Examples
  • Installation
  • 2. Setting up the Environment
  • +
  • Complete Design Flow & Examples
  • Installation
  • 2. Setting up the Environment
  • +
  • Complete Design Flow & Examples
  • Installation
  • 2. Setting up the Environment
      -
    • 2.1 Setting up the Pathes
    • +
    • 2.1 Setting up the Paths
    • 2.2 User’s Configurations File
    • +
    • Configuration & Technonology +
    • Hurricane Reference
    • Viewer Reference
    • CRL Core Reference
    • @@ -501,15 +511,15 @@

      3. Making a Standard Cell – Layout

      -

      In this part, we well show how to create and save a terminal Cell, +

      In this part, we will show how to create and save a terminal Cell, that is, a cell without instances (the end point of a hierarchical design). To illustrate the case we will draw the layout of a standard cell.

      We will introduce the following classes : Cell, Net, Component -and it’s derived classes.

      +and its derived classes.

      3.1 The AllianceFramework (CRL Core)

      -

      The Hurricane database only manage objects in memory. To load or save +

      The Hurricane database only manages objects in memory. To load or save something from the outside, we need to use a framework. As of today, only one is available : the Alliance framework. It allows Coriolis to handle Alliance libraries and cells in the exact same way.

      @@ -524,7 +534,7 @@ as the various MBK_

      3.2 Session Mechanism (Hurricane)

      In the Hurricane database, all modifications must take place inside -an UpdateSession. At the closing of a session, created or modificateds +an UpdateSession. At the closing of a session, created or modificated objects are fully inserted in the database. This is especially true for the visualisation, a created component will be visible only only after the session close.

      @@ -551,7 +561,7 @@ environment is provided by the crl module.

      UpdateSession.close()
      -

      This is the simplest call to createCell(), and it that case, the newly +

      This is the simplest call to createCell(), and in that case, the newly created Cell will be saved in the working library (usually, the current directory). You may supply a second argument telling into which library you want the Cell to be created.

      @@ -566,7 +576,7 @@ To be more precise, they are fixed points numbers expressed in hundredth of foundry grid (to allow transient non-integer computation).

      To work with symbolic layout, that is, using lambda based lengths, -two conversion functions are provideds:

      +two conversion functions are provided:

      +
    • Complete Design Flow & Examples
    • Installation
    • 2. Setting up the Environment

      For other distributions, refer to their own packaging system.

      -

      Fixed Directory Tree

      -

      In order to simplificate the work of the ccb installer, the source, build +

      In order to simplify the work of the ccb installer, the source, build and installation tree is fixed. To successfully compile Coriolis you must follow it exactly. The tree is relative to the home directory of the user building it (noted ~/ or $HOME/). Only the source @@ -627,72 +644,162 @@ and Debug instead

      Static do not work because I don’t know yet to mix statically linked binaries and Python modules (which must be dynamic).

      -

      Building Coriolis

      -

      First step is to install the prerequisites. Currently, only RapidJSON. -As RapidJSON is evolving fast, if you encounter compatibility problems, -the exact version we compiled against is given below.

      +
      +

      The actively developed branch

      +

      The devel_anabatic branch is now closed and we go back to a more classical +scheme where master is the stable version and devel the development one.

      +

      The Coriolis git repository is https://www-soc.lip6.fr/git/coriolis.git

      +
      +

      Note

      +

      Again, the devel_anabatic branch is now closed. Please revert to devel +or master.

      +
      +
      +

      Note

      +

      As it is now possible to mix PyQt widget with Coriolis ones, it is simpler +for us to revert to qt 4 only. Our reference os being rhel 7, there is no +compatible PyQt5 build compatible with their qt 5 version (we fall short of +one minor, they provides qt 5.9 were we need at least qt 5.10).

      +
      +
      +

      Note

      +

      Under rhel 7 or clones, they upgraded their version of qt 4 (from 4.6 to 4.8) +so the diagonal line bug no longer occur. So we can safely use the default +system qt again.

      +
      +
      +
      +

      Installing on RedHat or compatible distributions

      +
        +
      1. Install or check that the required prerequisites are installeds :

        +
        dummy@lepka:~> yum install -y git cmake bison flex gcc-c++ libstdc++-devel  \
        +                              binutils-devel                                \
        +                              boost-devel boost-python boost-filesystem     \
        +                              boost-regex  boost-wave                       \
        +                              python-devel libxml2-devel bzip2-devel        \
        +                              qt-devel qwt-devel                            # Qt 4
        +
        +
        +

        Note, that the Qwt packages are directly availables from the standart distribution +when using qt 4.

        +
      2. +
      3. Install the unpackaged prerequisites. Currently, only RapidJSON.

        dummy@lepka:~> mkdir -p ~/coriolis-2.x/src/support
        -dummy@lepka:~> cd ~/coriolis-2.x/src/support
        -dummy@lepka:~> git clone http://github.com/miloyip/rapidjson
        -dummy@lepka:~> git checkout ec322005072076ef53984462fb4a1075c27c7dfd
        +dummy@lepka:support> cd ~/coriolis-2.x/src/support
        +dummy@lepka:support> git clone http://github.com/miloyip/rapidjson
         
        -

        The second step is to create the source directory and pull the git repository:

        +
      4. +
      5. Create the source directory and pull the git repository:

        dummy@lepka:~> mkdir -p ~/coriolis-2.x/src
        -dummy@lepka:~> cd ~/coriolis-2.x/src
        -dummy@lepka:~> git clone https://www-soc.lip6.fr/git/coriolis.git
        +dummy@lepka:src> cd ~/coriolis-2.x/src
        +dummy@lepka:src> git clone https://www-soc.lip6.fr/git/coriolis.git
         
        -

        Third and final step, build & install:

        -
        dummy@lepka:src> ./bootstrap/ccb.py --project=support  \
        -                                    --project=coriolis \
        -                                    --make="-j4 install"
        -dummy@lepka:src> ./bootstrap/ccb.py --project=support  \
        -                                    --project=coriolis \
        -                                    --doc --make="-j1 install"
        +
      6. +
      7. Build & install:

        +
        dummy@lepka:src> cd coriolis
        +dummy@lepka:coriolis> git checkout devel_anabatic
        +dummy@lepka:coriolis> ./bootstrap/ccb.py --project=support  \
        +                                         --project=coriolis \
        +                                         --make="-j4 install"
         
        -

        We need to separate to perform a separate installation of the documentation because it -do not support to be generated with a parallel build. So we compile & install in a first +

      8. +
      +
      +

      Note

      +

      Pre-generated documentation will get installed by the previous command. +Only if you did made modifications to it you need to regenerate it with:

      +
      dummy@lepka:coriolis> ./bootstrap/ccb.py --project=support  \
      +                                         --project=coriolis \
      +                                         --doc --make="-j1 install"
      +
      +
      +

      We need to perform a separate installation of the documentation because it +does not support to be generated with a parallel build. So we compile & install in a first stage in -j4 (or whatever) then we generate the documentation in -j1

      +

      Under rhel6 or clones, you must build using the devtoolset, the version is to be given as argument:

      -
      dummy@lepka:src> ./bootstrap/ccb.py --project=coriolis \
      -                                    --devtoolset=8 --make="-j4 install"
      +
      dummy@lepka:coriolis> ./bootstrap/ccb.py --project=coriolis \
      +                                         --devtoolset=8 --make="-j4 install"
       
      -

      If you want to uses Qt 5 instead of Qt 4, you may add the --qt5 argument.

      +

      If you want to uses Qt 5 instead of Qt 4 modify the previous steps as follow:

      +
        +
      • At step 1, do not install the qt 4 related development package (qt4-devel), +but instead:

        +
        dummy@lepka:~> yum install -y qt5-qtbase-devel qt5-qtsvg-devel              # Qt 5.
        +
        +
        +

        The package qwt-qt5-devel and it’s dependency qwt-qt5 are not provided +by any standard repository (like epel). You may download them from the +LIP6 Addons Repository +Then run:

        +
        dummy@lepka:~> yum localinstall -y qwt-qt5-6.1.2-4.fc23.x86_64.rpm  \
        +                                   qwt-qt5-6.1.2-4.fc23.x86_64.rpm  # Qwt for Qt 5.
        +
        +
        +
      • +
      • At step 4, add a --qt5 argument to the ccb.py command line.

        +
      • +
      • The Python scripts that makes uses of PyQt in crlcore and cumulus must be +edited to import PyQt5 instead of PtQt4 (should find a way to automatically +switch between the two of them).

        +
      • +

      The complete list of ccb functionalities can be accessed with the --help argument. It also may be run in graphical mode (--gui).

      -
      -

      Building the Devel Branch

      -

      In the Coriolis git repository, two branches are present:

      -
        -
      • The master branch, which contains the latest stable version. This is the -one used by default if you follow the above instructions.

        -
      • -
      • The devel branch, which obviously contains the latest commits from the -development team. To use it instead of the master one, do the following -command just after the first step:

        -
        dummy@lepka:~> git checkout devel
        -dummy@lepka:src> ./bootstrap/ccb.py --project=coriolis \
        -                                    --make="-j4 install" --debug
        +
        +
        +

        Building a Debug Enabled Version

        +

        The Release.Shared default version of the Coriolis is build stripped of symbols +and optimized so that it makes analysing a core dump after a crash difficult. In the +(unlikely) case of a crash, you may want to build, alongside the optimized version, +a debug one which allow forensic examination by gdb (or valgrind or whatever).

        +

        Run again ccb.py, adding the --debug argument:

        +
        dummy@lepka:coriolis> ./bootstrap/ccb.py --project=support  \
        +                                         --project=coriolis \
        +                                         --make="-j4 install" --debug
         
        -

        Be aware that it may requires newer versions of the dependencies and may introduce -incompatibilites with the stable version.

        -

        In the (unlikely) event of a crash of cgt, as it is a Python script, the right -command to run gdb on it is:

        +

        As cgt is a Python script, the right command to run gdb is:

        dummy@lepka:work> gdb python core.XXXX
         
        -
      • -

      +
      +

      Installing on Debian 9, Ubuntu 18 or compatible distributions

      +

      First, install or check that the required prerequisites are installeds :

      +
      dummy@lepka:~> sudo apt install -y build-essential binutils-dev                     \
      +                                   git cmake bison flex gcc python-dev              \
      +                                   libboost-all-dev libboost-python-dev             \
      +                                   libbz2-dev libxml2-dev rapidjson-dev libbz2-dev  \
      +                                   qt4-dev-tools libqwt5-qt4-dev                    \ # Qt 4
      +                                   qtbase5-dev libqt5svg5-dev libqwt-qt5-dev        \ # Qt 5
      +                                   doxygen dvipng graphviz python-sphinx            \
      +                                   texlive-fonts-extra texlive-lang-french
      +
      +
      +

      Second step is to create the source directory and pull the git repository:

      +
      dummy@lepka:~> mkdir -p ~/coriolis-2.x/src
      +dummy@lepka:src> cd ~/coriolis-2.x/src
      +dummy@lepka:src> git clone https://www-soc.lip6.fr/git/coriolis.git
      +
      +
      +

      Third and final step, build & install:

      +
      dummy@lepka:src> cd coriolis
      +dummy@lepka:coriolis> git checkout devel_anabatic
      +dummy@lepka:coriolis> ./bootstrap/ccb.py --project=coriolis \
      +                                         --make="-j4 install"
      +
      +
      +

      Additionnal Requirement under MacOS

      Coriolis make uses of the boost::python module, but the MacPorts boost @@ -710,10 +817,10 @@ the system.

      Packaging Coriolis

      -

      Packager should not uses ccb, instead bootstrap/Makefile.package is provided +

      Packager should not use ccb, instead bootstrap/Makefile.package is provided to emulate a top-level autotool makefile. Just copy it in the root of the Coriolis git repository (~/corriolis-2.x/src/coriolis/) and build.

      -

      Sligthly outaded packaging configuration files can also be found under bootstrap/:

      +

      Sligthly outdated packaging configuration files can also be found under bootstrap/:

      • bootstrap/coriolis2.spec.in for rpm based distributions.
      • bootstrap/debian for Debian based distributions.
      • @@ -743,7 +850,7 @@ in the bootstrap

        Note

        Do not call that script in your environement initialisation. -When used under rhel6 or clones, it needs to be run in the |devtoolset2| +When used under rhel6 or clones, it needs to be run in the devtoolset environement. The script then launch a new shell, which may cause an infinite loop if it’s called again in, say ~/.bashrc.

        Instead you may want to create an alias:

        @@ -763,7 +870,7 @@ infinite loop if it’s called again in, say ~/.bashrcNext - Previous + Previous
        @@ -775,7 +882,7 @@ infinite loop if it’s called again in, say ~/.bashrc Generated by Sphinx - using a RTD theme on Mar 04, 2019. + using a RTD theme on May 27, 2019. diff --git a/documentation/_build/html/UsersGuide/LicenseCredits.html b/documentation/_build/html/UsersGuide/LicenseCredits.html index 5452f5aa..80e98462 100644 --- a/documentation/_build/html/UsersGuide/LicenseCredits.html +++ b/documentation/_build/html/UsersGuide/LicenseCredits.html @@ -84,13 +84,18 @@
      • Release 1.0.2049
      • Release v2.0.1
      • Release v2.1
      • -
      • Release v2.2
      • +
      • Release v2.2
      • +
      • Release v2.3
    • +
    • Complete Design Flow & Examples
    • Installation
    • 2. Setting up the Environment
    • +
    • Complete Design Flow & Examples
    • Installation
    • 2. Setting up the Environment
        -
      • 2.1 Setting up the Pathes
      • +
      • 2.1 Setting up the Paths
      • 2.2 User’s Configurations File
      • +
      • Configuration & Technonology +
      • Hurricane Reference
      • Viewer Reference
      • CRL Core Reference
      • @@ -571,19 +581,41 @@ achieve a speedup factor greater than 20... Etesian and its legalization and detailed placement tools.
      • Added a Blif format parser to process circuits generated by the Yosys and ABC logic synthetizers.
      • -
      • The multiples user defined configuration files are now grouped under +
      • The multiple user defined configuration files are now grouped under a common hidden (dot) directory .coriolis2 and the file extension is back from .conf to .py.
      • -

        Release v2.2

        +

        Release v2.2

        1. Added JSON import/export of the whole Hurricane DataBase. Two save mode are supported: Cell mode (standalone) or Blob mode, which dump the whole design down and including the standard cells.
        +
        +

        Release v2.3

        +
          +
        1. Revert to a more standard organisation of the branchs. devel_anabatic is +closed and we go on with master (stable version) and devel.

          +
        2. +
        3. Make Katana the default global & detailed router. Put Knik & Kite in the +obsolete menues.

          +
        4. +
        5. Finally make uses of PyQt4 widgets. Seems to integrate without problems +with the Coriolis own qt widget. The drawback is that to build against qt 5 +needs to adjustement from the user.

          +
        6. +
        7. Improved support for whole chip management. The outer part of the chip containing +the pad is decoupled from the core. This allow to cleanly separate real pads from +the foundry from a symbolic core. But this does not preclude other combinations +as fully symbolic or fully real.

          +

          To perform the separation an intermediate hierarchical level corona between chip +and core has been introduced.

          +
        8. +
        +
        @@ -592,7 +624,7 @@ whole design down and including the standard cells.
    • +
    • Complete Design Flow & Examples
    • Installation
    • 2. Setting up the Environment
        -
      • 2.1 Setting up the Pathes
      • +
      • 2.1 Setting up the Paths
      • 2.2 User’s Configurations File
      • +
      • Configuration & Technonology +
      • Hurricane Reference
      • Viewer Reference
      • CRL Core Reference
      • @@ -499,8 +509,9 @@
        -
        -

        Python Interface for Hurricane / Coriolis

        +

        +
        +

        Python Interface for Hurricane / Coriolis

        The (almost) complete interface of Hurricane is exported as a Python module and some part of the other components of Coriolis (each one in a separate module). The interface has been made to mirror as closely as possible the @@ -509,7 +520,7 @@ either languages.

        Summary of the C++ Documentation

        A script could be run directly in text mode from the command line or through the graphical interface (see Executing Python Scripts in Cgt).

        -

        Asides for this requirement, the python script can contain anything valid +

        Aside for this requirement, the python script can contain anything valid in Python, so don’t hesitate to use any package or extention.

        Small example of Python/Stratus script:

        from Hurricane import *
        @@ -588,31 +599,50 @@ through this method.

        Automatically perform the placement of a complete chip. This plugin, as well as the other P&R tools expect a specific top-level hierarchy for the design. The top-level hierarchy must contains the instances of all the I/O pads and -exactly one instance of the chip’s core model.

        +exactly one instance named corona of an eponym cell corona. +The corona cell in turn containing the instance of the chip’s core model.

        +

        The intermediate corona hierarchical level has been introduced to handle +the possible discoupling between real I/O pads supplied by a foundry and a +symbolic core. So the chip level contains only real layout and the corona +and below only symbolic layer.

        +
        +

        Note

        +

        This do not prevent having a design either fully symbolic (pads and core) +or fully real.

        +
        +
        +

        Note

        +

        The corona also avoid the router to actually have to manage directly +the pads which simplificate it’s configuration and accessorily avoid +to have the pads stuffed with blockages.

        +

        Chip Top Structure

        -

        The designer must provide a configuration file that define the rules for the +

        The designer must provide a configuration file that defines the rules for the placement of the top-level hierarchy (that is, the pads and the core). -This file must be named after the chip’s name, by appending _chip.py +This file must be named after the chip’s name, by appending _ioring.py (obviously, it is a Python file). For instance if the chip netlist file -is called amd2901_crl.vst, then the configuration file must be named -amd2901_crl_chip.vst.

        +is called amd2901.vst, then the configuration file must be named +amd2901_ioring.vst.

        Example of chip placement configuration file (for AM2901):

        -
        chip = \
        -  { 'pads.south'     : [ 'p_a3'     , 'p_a2'     , 'p_a1'     , 'p_r0'
        -                       , 'p_vddick0', 'p_vssick0', 'p_a0'     , 'p_i6'
        -                       , 'p_i8'     , 'p_i7'     , 'p_r3'     ]
        -  , 'pads.east'      : [ 'p_zero'   , 'p_i0'     , 'p_i1'     , 'p_i2'
        -                       , 'p_vddeck0', 'p_vsseck0', 'p_q3'     , 'p_b0'
        -                       , 'p_b1'     , 'p_b2'     , 'p_b3'     ]
        -  , 'pads.north'     : [ 'p_noe'    , 'p_y3'     , 'p_y2'     , 'p_y1'
        -                       , 'p_y0'     , 'p_vddeck1', 'p_vsseck1', 'p_np'
        -                       , 'p_ovr'    , 'p_cout'   , 'p_ng'     ]
        -  , 'pads.west'      : [ 'p_cin'    , 'p_i4'     , 'p_i5'     , 'p_i3'
        -                       , 'p_ck'     , 'p_d0'     , 'p_d1'     , 'p_d2'
        -                       , 'p_d3'     , 'p_q0'     , 'p_f3'     ]
        -  , 'core.size'      : ( 1500, 1500 )
        -  , 'chip.size'      : ( 3000, 3000 )
        -  , 'chip.clockTree' : True
        +
        from helpers import l, u, n
        +
        +chip = \
        +  { 'pads.ioPadGauge' : 'pxlib'
        +  , 'pads.south'      : [ 'p_a3'     , 'p_a2'     , 'p_a1'     , 'p_r0'
        +                        , 'p_vddick0', 'p_vssick0', 'p_a0'     , 'p_i6'
        +                        , 'p_i8'     , 'p_i7'     , 'p_r3'     ]
        +  , 'pads.east'       : [ 'p_zero'   , 'p_i0'     , 'p_i1'     , 'p_i2'
        +                        , 'p_vddeck0', 'p_vsseck0', 'p_q3'     , 'p_b0'
        +                        , 'p_b1'     , 'p_b2'     , 'p_b3'     ]
        +  , 'pads.north'      : [ 'p_noe'    , 'p_y3'     , 'p_y2'     , 'p_y1'
        +                        , 'p_y0'     , 'p_vddeck1', 'p_vsseck1', 'p_np'
        +                        , 'p_ovr'    , 'p_cout'   , 'p_ng'     ]
        +  , 'pads.west'       : [ 'p_cin'    , 'p_i4'     , 'p_i5'     , 'p_i3'
        +                        , 'p_ck'     , 'p_d0'     , 'p_d1'     , 'p_d2'
        +                        , 'p_d3'     , 'p_q0'     , 'p_f3'     ]
        +  , 'core.size'       : ( l(1500), l(1500) )
        +  , 'chip.size'       : ( l(3000), l(3000) )
        +  , 'chip.clockTree'  : True
           }
         
        @@ -630,30 +660,35 @@ is called amd2901_crl.vst -'pad.south' +'pad.ioPadGauge' +The routing gauge to use for the pad. Must be given +as it differs from the one used to route standard +inside the core + +'pad.south' Ordered list (left to right) of pad instances names to put on the south side of the chip -'pad.east' +'pad.east' Ordered list (down to up) of pad instances names to put on the east side of the chip -'pad.north' +'pad.north' Ordered list (left to right) of pad instances names to put on the north side of the chip -'pad.west' +'pad.west' Ordered list (down to up) of pad instances names to put on the west side of the chip -'core.size' +'core.size' The size of the core (to be used by the placer) -'chip.size' +'chip.size' The size of the whole chip. The sides must be great enough to accomodate all the pads -'chip.clockTree' +'chip.clockTree' Whether to generate a clock tree or not. This calls the ClockTree plugin @@ -686,69 +721,30 @@ of power/grounds chip.block.rails.hWidth TypeInt -12 +12 λ The horizontal with of the rails chip.block.rails.vWidth TypeInt -12 +12 λ The vertical with of the rails chip.block.rails.hSpacing TypeInt -6 +6 λ The spacing, edge to edge of two adjacent horizontal rails chip.block.rails.vSpacing TypeInt -6 +6 λ The spacing, edge to edge of two adjacent vertical rails -chip.pad.pck -TypeString -pck_px - -The model name of the pad connected to the -chip external clock - -chip.pad.pvddeck -TypeString -pvddeck_px - -The model name of the pad connected to the -vdde (external power) and suppling it to -the core - -chip.pad.pvsseck -TypeString -pvsseck_px - -The model name of the pad connected to the -vsse (external ground) and suppling it to -the core - -chip.pad.pvddick -TypeString -pvddick_px - -The model name of the pad connected to the -vddi (internal power) and suppling it to -the core - -chip.pad.pvssick -TypeString -pvssick_px - -The model name of the pad connected to the -vssi (internal ground) and suppling it to -the core -
        @@ -760,11 +756,11 @@ only four rails (2* power

        Clock Tree

        -

        Insert a clock tree into a block. The clock tree uses the H strategy. +

        Inserts a clock tree into a block. The clock tree uses the H strategy. The clock net is splitted into sub-nets, one for each branch of the tree.

          -
        • On chips design, the sub-nets are createds in the model of the +

        • On chip design, the sub-nets are created in the model of the core block (then trans-hierarchically flattened to be shown at chip level).

        • @@ -784,30 +780,30 @@ on which quarter of plane the sub-clock is located:

        The clock tree plugin works in four steps:

          -
        1. Build the clock tree: creates the top-block abutment box, compute the -levels of H tree neededs and place the clock buffers.
        2. +
        3. Builds the clock tree: creates the top-block abutment box, compute the +required levels of H tree and places the clock buffers.
        4. Once the clock buffers are placed, calls the placer (Etesian) to place -the ordinary standart cells, whithout disturbing clock H-tree buffers.
        5. +the ordinary standard cells, whithout disturbing clock H-tree buffers.
        6. At this point we know the exact positions of all the DFFs, so we can connect them to the nearest H-tree leaf clock signal.
        7. -
        8. Leaf clock signals that are not connecteds to any DFFs are removed.
        9. +
        10. Leaf clock signals that are not connected to any DFFs are removed.

        Netlist reorganisation:

          -
        • Obviously the top block or chip core model netlist is modificated to -contains all the clock sub-nets. The interface is not changed.
        • +
        • Obviously the top block or chip core model netlist is modified to +contain all the clock sub-nets. The interface is not changed.
        • If the top block contains instances of other models and those models -contains DFFs that get re-connecteds to the clock sub-nets (from the -top level). Change both the model netlist and interface to propagate +contain DFFs that get re-connected to the clock sub-nets (from the +top level). Changes both the model netlist and interface to propagate the relevant clock sub-nets to the instanciated model. The new model -with the added clock signal is renamed with a _clocked suffix. -For example, the sub-block model ram.vst will become ram_clocked.vst.
        • +with the added clock signal is renamed with a _cts suffix. +For example, the sub-block model ram.vst will become ram_cts.vst.

        Note

        If you are to re-run the clock tree plugin on a netlist, be careful -to erase any previously generated _clocked file (both netlist and -layout: rm *.clocked.{ap,vst}). And restart cgt to clear it’s +to erase any previously generated _cts file (both netlist and +layout: rm *_cts.{ap,vst}). And restart cgt to clear its memory cache.

        Configuration parameters, defaults are defined in etc/coriolis2/<STECHNO>/plugins.conf.

        @@ -828,7 +824,7 @@ memory cache.

        clockTree.minimumSide TypeInt -300 +300 λ The minimum size below which the clock tree will stop to perform quadri-partitions @@ -839,21 +835,13 @@ will stop to perform quadri-partitions The buffer model to use to drive sub-nets -clockTree.placerEngine -TypeString -Etesian - -The placer to use. Other value is Mauka -the simulated annealing placer which will go -into retirement very soon -

        Recursive-Save (RSave)

        -

        Perform a recursive top down save of all the models from the top cell -loaded in cgt. Force a write of any non-terminal model. This plugin is used +

        Performs a recursive top down save of all the models from the top cell +loaded in cgt. Forces a write of any non-terminal model. This plugin is used by the clock tree plugin after the netlist clock sub-nets creation.

        @@ -877,7 +865,7 @@ then run the Python script doChip.py

        Note

        Between two consecutive run, be sure to erase the netlist/layout generateds:

        -
        dummy@lepka:AM2901> rm *clocked*.vst *.ap
        +
        dummy@lepka:AM2901> rm *_cts*.vst *.ap
         
        @@ -905,7 +893,7 @@ then run the Python script doChip.py
        Generated by Sphinx - using a RTD theme on Mar 04, 2019. + using a RTD theme on May 27, 2019. diff --git a/documentation/_build/html/UsersGuide/ViewerTools.html b/documentation/_build/html/UsersGuide/ViewerTools.html index 60743904..28d28004 100644 --- a/documentation/_build/html/UsersGuide/ViewerTools.html +++ b/documentation/_build/html/UsersGuide/ViewerTools.html @@ -84,13 +84,18 @@
      • Release 1.0.2049
      • Release v2.0.1
      • Release v2.1
      • -
      • Release v2.2
      • +
      • Release v2.2
      • +
      • Release v2.3
    • +
    • Complete Design Flow & Examples
    • Installation
    • 2. Setting up the Environment
        -
      • 2.1 Setting up the Pathes
      • +
      • 2.1 Setting up the Paths
      • 2.2 User’s Configurations File
      • +
      • Configuration & Technonology +
      • Hurricane Reference
      • Viewer Reference
      • CRL Core Reference
      • @@ -594,10 +604,9 @@ within 5% of othe This Coriolis tool is actually an encapsulation of Coloquinte which is the placer.

        Note

        -

        Instance Uniquification Unsupported: a same logical instance cannot have -two different placements. So, either you manually make a clone of it or you -supply a placement for it. We need to implement uniquification in the -Hurricane database.

        +

        Instance Uniquification: a same logical instance cannot have +two different placements. So, if you don’t supply a placement for it, it will be +uniquified (cloned) and you will see the copy files appears on disk upon saving.

        Hierarchical Placement

        @@ -698,35 +707,20 @@ More refreshing slows the placer.

        -
        -

        Knik – Global Router

        -

        The quality of Knik global routing solutions are equivalent to those of FGR 1.0. -For an in-depth description of Knik algorithms, you may download the thesis of -D. Dupuis avalaible from here~: Knik Thesis.

        -

        The global router is (not yet) deterministic. To circumvent this limitation, -a global routing solution can be saved to disk and reloaded for later uses.

        -

        A global routing is saved into a file with the same name as the design and a -kgr extention. It is in Box Router output format.

        -

        Menus:

        -
          -
        • \textbf{P\&R} \rightarrow \textbf{Step by Step} \rightarrow \textbf{Save Global Routing}
        • -
        • \textbf{P\&R} \rightarrow \textbf{Step by Step} \rightarrow \textbf{Load Global Routing}
        • -
        +
        +

        Katana – Global Router

        +

        The quality of Katana global routing solutions are equivalent to those of FGR 1.0. +For an in-depth description of Katana algorithms, you may download the thesis of +D. Dupuis avalaible from here~: Knik Thesis (Knik has been rewritten as part +of Katana, the algorithms remains essentially the same).

        +

        The global router is now deterministic.

        -
        -

        Kite – Detailed Router

        -

        Kite no longer suffers from the limitations of Nero. It can route big designs +

        +

        Katana – Detailed Router

        +

        Katana no longer suffers from the limitations of Nero. It can route big designs as its runtime and memory footprint is almost linear (with respect to the number of gates). It has successfully routed design of more than 150K gates.

        -

        However, this first release comes with the temporary the following -restrictions:

        -
          -
        • Works only with SxLib standard cell gauge.
        • -
        • Works always with 4 routing metal layers (M2 through M5).
        • -
        • Do not allow (take into account) pre-routed wires on signals -other than power or ground.
        • -

        Note

        Slow Layer Assignment. Most of the time, the layer assignment stage is @@ -734,15 +728,22 @@ fast (less than a dozen seconds), but in some instances it can take more than a dozen minutes. This is a known bug and will be corrected in later releases.

        -

        After each run, Kite displays a set of completion ratios which must all -be equal to 100% if the detailed routing has been successfull. -In the event of a failure, on a saturated design, you may decrease the -edge saturation ratio (argument –edge) to balance more evenly the design -saturation. That is, the maximum saturation decrease at the price of a wider -saturated area and increased wirelength. This is the saturation of the -global router Knik, and you may increase/decrease by steps of 5%, -which represent one track. The maximum capacity of the SxLib gauge is -10 tracks in two layers, that makes 20 tracks by Knik edge.

        +

        After each run, Katana displays a set of completion ratios which must all +be equal to 100% or (NNNN+0) if the detailed routing has been successfull. +In the event of a failure, on a saturated design, you may tweak the three +following configuration parameters:

        +
          +
        1. katana.hTrackReservedLocal, the number of track reserved for local routing, +that quantity is substracted from the edge capacities (global routing) to +give a sense of the cluttering inside the GCells.
        2. +
        3. katana.vTrackReservedLocal, same as above.
        4. +
        5. etesian.spaceMargin, increase the free area of the overall design so the +routing density decrease.
        6. +
        +

        The idea is to increase the horizontal and vertical local track reservation until +the detailed router succeed. But in doing so we make the task of the global router +more and more difficult as the capacity of the edges decrease, and at some point +it will fail too. So this is a balance.

        Routing a design is done in four ordered steps:

        1. Detailed pre-route \textbf{P\&R} \rightarrow \textbf{Step by Step} \rightarrow \textbf{Detailed PreRoute}
        2. @@ -752,23 +753,21 @@ which represent one track. The maximum capacity of the SxLib

          It is possible to supply to the router a complete wiring for some nets that the user’s wants to be routed according to a specific topology. The supplied topology must respect -the building rules of the Katabatic database (contacts must be, terminals, turns, h-tee -& v-tee only). During the first step Detailed Pre-Route the router will solve +the building rules of the Anabatic database (contacts must be, terminals, turns, h-tee +& v-tee only). During the first step Detailed Pre-Route the router will solve overlaps between the segments, without making any dogleg. If no pre-routed topologies are present, this step may be ommited. Any net routed at this step is then fixed and become unmovable for the later stages.

          -

          After the detailed routing step the Kite data-structure is still active +

          After the detailed routing step the Katana data-structure is still active (the Hurricane wiring is decorated). The finalize step performs the removal of -the Kite data-structure, and it is not advisable to save the design before +the Katana data-structure, and it is not advisable to save the design before that step.

          -

          You may visualize the density (saturation) of either Knik (on edges) or -Kite (on GCells) until the routing is finalized. Special layers appears +

          You may visualize the density (saturation) of either the edges (global routing) +or the GCells (detailed routing) until the routing is finalized. Special layers appears to that effect in the The Layers&Go Tab.

          -
          -

          Kite Configuration Parameters

          -

          As Knik is only called through Kite, it’s parameters also have -the kite. prefix.

          -

          The Katabatic parameters control the layer assignment step.

          +
          +

          Katana Configuration Parameters

          +

          The Anabatic parameters control the layer assignment step.

          All the defaults value given below are from the default Alliance technology (cmos and SxLib cell gauge/routing gauge).

          @@ -784,16 +783,16 @@ the kite. prefix.

          - + - + - + @@ -801,7 +800,7 @@ used for routing (inclusive). method which is no longer used (did not give good results) - + @@ -809,7 +808,7 @@ good results) move up feedthru global segments up from depth x to x+2 - + @@ -818,9 +817,9 @@ depth x to - + - + @@ -831,56 +830,54 @@ router. Horizontal and vertical locally reserved capacity can be distinguished for more accuracy. - + - - - + - - + - - + - + - + - + - + - - + - @@ -906,7 +903,7 @@ the editor (type: CellViewer) is limited to basic capabi only.

          Any script given on the command line will be run immediatly after the initializations and before any other argument is processed.

          -

          For more explanation on Python scripts see Python Interface for Hurricane / Coriolis.

          +

          For more explanation on Python scripts see Python Interface to Coriolis.

          Printing & Snapshots

          @@ -1114,32 +1111,11 @@ redirected to a file.
          - - + + - - - - - - - - - - - - - - - - + + + + + + + + + + @@ -1157,18 +1145,7 @@ See Python Scripts i

          Some Examples :

          • Run both global and detailed router, then save the routed design :

            -
            > cgt -v -t -G -R --cell=design --save-design=design_kite
            -
            -
            -
          • -
          • Load a previous global solution, run the detailed router, then save the -routed design :

            -
            > cgt -v -t --load-global -R --cell=design --save-design=design_kite
            -
            -
            -
          • -
          • Run the global router, then save the global routing solution :

            -
            > cgt -v -t -G --save-global --cell=design
            +
            > cgt -v -t -G -R --cell=design --save-design=design_r
             
          • @@ -1397,7 +1374,7 @@ is deleted, you will crash the application...

          diff --git a/documentation/_build/html/UsersGuide/index.html b/documentation/_build/html/UsersGuide/index.html index 08cedd3d..6f14d69f 100644 --- a/documentation/_build/html/UsersGuide/index.html +++ b/documentation/_build/html/UsersGuide/index.html @@ -83,13 +83,18 @@
        3. Release 1.0.2049
        4. Release v2.0.1
        5. Release v2.1
        6. -
        7. Release v2.2
        8. +
        9. Release v2.2
        10. +
        11. Release v2.3
        12. +
        13. Complete Design Flow & Examples
        14. Installation
        15. 2. Setting up the Environment
        16. +
        17. Complete Design Flow & Examples
        18. Installation
        19. diff --git a/documentation/_build/html/Viewer/Viewer.html b/documentation/_build/html/Viewer/Viewer.html index 93b67076..aa5a6ec4 100644 --- a/documentation/_build/html/Viewer/Viewer.html +++ b/documentation/_build/html/Viewer/Viewer.html @@ -83,13 +83,18 @@
        20. Release 1.0.2049
        21. Release v2.0.1
        22. Release v2.1
        23. -
        24. Release v2.2
        25. +
        26. Release v2.2
        27. +
        28. Release v2.3
        29. +
        30. Complete Design Flow & Examples
        31. Installation
        32. 2. Setting up the Environment
        33. diff --git a/documentation/_build/html/_images/chip-structure-1.png b/documentation/_build/html/_images/chip-structure-1.png index 8af23393fa661928139f644e3357d496fbb7856e..e962bfe0b880ab879badf0b8c73ac86aeb92b272 100644 GIT binary patch literal 46764 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 P00000NkvXXu0mjf1IR$M diff --git a/documentation/_build/html/_images/math/ab9c214f89790a2afdc94a731f08c35d0fafa77d.png b/documentation/_build/html/_images/math/ab9c214f89790a2afdc94a731f08c35d0fafa77d.png deleted file mode 100644 index 8d585e6af0549829b0996df7ba5920351061903e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1216 zcmV;x1V8(UP)OEXF0000mP)t-s|Ns90 z0000000000000000000000000000000000000000000000000000000FWsPf0000F zbW%=J07&WcuNZV-`!dhnzl)u0d!JbV00b~eL_t(Y$K6*^Xj@en{%)Fk@6smOWsmyM zFnsEYEv+!oVS-W+I=L4WEn=5E=#vi#Y%l6VinymeBup5xq6x!+os*`+4P1%|SdiJw zM*AvQeAtU_O_O%sH7UpcoSWR-+`DXLID{R@%{}M;&Ue1=od2Ah08dUi6s;egoT8V% ze(6*vsvgwS*T4M;aJQ?O$UabBgtr8yk9_r3K9H%oc|T|9BP#?*$9h?kHK=A5;d?`! zYN%njMv}G=+6Bhl3UZPCpgag~(H9_%<#Dj);brI}Yk=IC9xEUg-(1k>R5LLw*{O> z@*!6Gq1-&)lDt7NTs%0may=W0ehU34$MN<>ZeLDtE9&xU)#8;#rx%=7xGWx( zGPN)({K<-m8HVA;n?GK}yUWYdc{>YL(|}ClC0ncPhQq1YrScdvW605fdMdOPU@56? zS@{Pu5t$j5(0(X4&sufhG~zq(2^?>awpW3yY^LNh7H@D5&l|QCOO}Yzj!G5+4QnHr z*q5U$H70%Mmg$!L3&#zgFi{u2mGVQjKI8NeopaJ!AIDrSC z+&r_C0tjy7w!rmTk*R4dA$a8~y*XBeWLZ(NlD4c+kZI~JeT&pgiu{z1(oDQ&Rfo1k z@71Cx?VLQp3=*lBckX=0Me60Y6@QB+*w+z!Ka__@{{7`W1WZH(P9)eIq~hd@#(|nr z=e;c6*_E-X!wSi=qPhczuXE^#int@vBFI>+OE zQEnc6ik1?Kw>FfzbK95rws%2GI$pg_lY5J;xKM@tk7a%u_}1e5qfi2Az4#AODG5ldyt=_?RFlUG2E0{N^PP&0XYKb)|Tjp za`8wFyiQhl8grcW6S)K_BMxId5vW_d!{c&Kf^k_Q>f6C$1T2uZt-N}9<$bzJMC)Rd zS6;YrVsezK%{+cPW}l+!hA{d?@o*LD!~)bSmlCph{DNr4%$LWXrLWK0KaqV5B1;s3XS+{UBy{Fq&JR?k+9eV`s|dFpcI e+7t9|1^)t-hB}u;!l>r}0000/etc/coriolis2 # Separate tree install. diff --git a/documentation/_build/html/_sources/ConfigurationTechnology/index.txt b/documentation/_build/html/_sources/ConfigurationTechnology/index.txt new file mode 100644 index 00000000..542eaebc --- /dev/null +++ b/documentation/_build/html/_sources/ConfigurationTechnology/index.txt @@ -0,0 +1,17 @@ +.. -*- mode: rst; explicit-buffer-name: "index.rst`_. + + +.. toctree:: + :maxdepth: 2 + + Architecture.rst + diff --git a/documentation/_build/html/_sources/ConfigurationTechnology/pdfHeader.txt b/documentation/_build/html/_sources/ConfigurationTechnology/pdfHeader.txt new file mode 100644 index 00000000..840f3114 --- /dev/null +++ b/documentation/_build/html/_sources/ConfigurationTechnology/pdfHeader.txt @@ -0,0 +1,15 @@ +.. -*- Mode: rst -*- + +.. include:: ../etc/definitions.rst + + +========================== +Configuration & Technology +========================== + +|pagestylefancy| + + +.. contents:: + +|newpage| diff --git a/documentation/_build/html/_sources/PythonTutorial/AdvancedTopics.txt b/documentation/_build/html/_sources/PythonTutorial/AdvancedTopics.txt index 61ec706d..8a1e69ed 100644 --- a/documentation/_build/html/_sources/PythonTutorial/AdvancedTopics.txt +++ b/documentation/_build/html/_sources/PythonTutorial/AdvancedTopics.txt @@ -19,7 +19,7 @@ The trans-hierarchical workhorse. 9.2 RoutingPads ~~~~~~~~~~~~~~~ -Unlike the Plugs_ that only make connexions between two **adjacent** +Unlike the Plugs_ that only make connections between two **adjacent** hierarchical levels, RoutingPads_ can refer to a deeply buried terminal. diff --git a/documentation/_build/html/_sources/PythonTutorial/CellNetComponent.txt b/documentation/_build/html/_sources/PythonTutorial/CellNetComponent.txt index 087ed3fe..f0d38e72 100644 --- a/documentation/_build/html/_sources/PythonTutorial/CellNetComponent.txt +++ b/documentation/_build/html/_sources/PythonTutorial/CellNetComponent.txt @@ -7,19 +7,19 @@ 3. Making a Standard Cell -- Layout =================================== -In this part, we well show how to create and save a terminal Cell_, +In this part, we will show how to create and save a terminal Cell_, that is, a cell without instances (the end point of a hierarchical design). To illustrate the case we will draw the layout of a standard cell. We will introduce the following classes : Cell_, Net_, Component_ -and it's derived classes. +and its derived classes. 3.1 The AllianceFramework (CRL Core) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -The |Hurricane| database only manage objects in memory. To load or save +The |Hurricane| database only manages objects in memory. To load or save something from the outside, we need to use a *framework*. As of today, only one is available : the Alliance framework. It allows |Coriolis| to handle |Alliance| libraries and cells in the exact same way. @@ -34,7 +34,7 @@ one is available : the Alliance framework. It allows |Coriolis| to handle ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In the |Hurricane| database, all modifications must take place inside -an UpdateSession_. At the closing of a session, created or modificateds +an UpdateSession_. At the closing of a session, created or modificated objects are fully inserted in the database. This is especially true for the visualisation, a created component will be visible *only* only after the session close. @@ -64,7 +64,7 @@ environment is provided by the |CRL| module. UpdateSession.close() -This is the simplest call to ``createCell()``, and it that case, the newly +This is the simplest call to ``createCell()``, and in that case, the newly created Cell_ will be saved in the *working library* (usually, the current directory). You may supply a second argument telling into which library you want the Cell_ to be created. @@ -83,7 +83,7 @@ hundredth of foundry grid (to allow transient non-integer computation). To work with symbolic layout, that is, using lambda based lengths, -two conversion functions are provideds: +two conversion functions are provided: * ``unit = DbU.fromLambda( lbd )`` convert a lambda :cb:`lbd` into a ``DbU``. * ``lbd = DbU.toLambda( unit )`` convert a ``DbU`` into a lambda :cb:`lbd`. @@ -95,7 +95,7 @@ is *integer*. 3.5 Setting up the Abutment Box ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -To setup the abutment box, we use a Box_ which define a box from +To setup the abutment box, we use a Box_ which defines a box from the coordinates of the lower left corner ``(x1,y1)`` and upper left corner ``(x2,y2)``. @@ -157,7 +157,7 @@ Layer_: -------------------- As said above, prior to creating any Component_, we must create the Net_ it -will belongs to. In that example we also make it an *external* net, that is, +will belong to. In that example we also make it an *external* net, that is, a part of the interface. Do not mistake the name of the net given as a string argument :cb:`'i'` and the name of the *variable* :cb:`i` holding the Net_ object. For the sake of clarity we try to give the variable a close name, but this is @@ -194,7 +194,7 @@ absolute position. There is a second overload for creating a relatively placed segment, see *articulated layout*. If the net is external, that is, part of the interface of the cell, you may have -to declare some of it's components as physical connectors usable by the router. +to declare some of its components as physical connectors usable by the router. This is done by calling the NetExternalComponents_ class: .. code-block:: Python @@ -205,7 +205,7 @@ This is done by calling the NetExternalComponents_ class: 3.7 Saving to Disk (CRL Core) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Once you are finished building your cell, you have to save it on disk. +Once you have finished to build your cell, you have to save it on disk. Using the AllianceFramework_ you can save it as a pair of file: ========================= =================================== ======================= @@ -229,7 +229,7 @@ will be written in the |Alliance| ``WORK_DIR``. The example files can be found in the ``share/doc/coriolis2/examples/scripts/`` directory (under the the root of the |Coriolis| installation). -The code needed to run it through the |cgt| viewer as been added. For the +The code needed to run it through the |cgt| viewer has been added. For the explanation of that part of the code, refer to `5. Make a script runnable through cgt`_. diff --git a/documentation/_build/html/_sources/PythonTutorial/CgtScript.txt b/documentation/_build/html/_sources/PythonTutorial/CgtScript.txt index 27027ee2..2d81325b 100644 --- a/documentation/_build/html/_sources/PythonTutorial/CgtScript.txt +++ b/documentation/_build/html/_sources/PythonTutorial/CgtScript.txt @@ -7,13 +7,13 @@ 5. Make a script runnable through |cgt| ======================================= -To use your you may run it directly like any other |Python| script. +To use your script you may run it directly like any other |Python| script. But, for debugging purpose it may be helpful to run it through the interactive layout viewer |cgt|. For |cgt| to be able to run your script, you must add to your script file a function named :cb:`ScriptMain()`, which takes a dictionnary -as sole argument (:cb:`**kw`). The ``kw`` dictionnary contains, in +as sole argument (:cb:`**kw`). The ``kw`` dictionary contains, in particular, the CellViewer_ object we are running under with the keyword ``editor``. You can then load your cell into the viewer using the menu: @@ -67,7 +67,7 @@ using the menu: ~~~~~~~~~~~~~~~~~~~~~ It is possible to add breakpoints inside a script by calling the ``Breakpoint.stop()`` -function. To be able to see exactly what has just been moficated, we must close the +function. To be able to see exactly what has just been mofied, we must close the UpdateSession_ just before calling the breakpoint and reopen it just after. The ``Breakpoint.stop()`` function takes two arguments: diff --git a/documentation/_build/html/_sources/PythonTutorial/Collections.txt b/documentation/_build/html/_sources/PythonTutorial/Collections.txt index e9ad4f0a..3505dc24 100644 --- a/documentation/_build/html/_sources/PythonTutorial/Collections.txt +++ b/documentation/_build/html/_sources/PythonTutorial/Collections.txt @@ -9,7 +9,7 @@ 4. Manipulating Cells, Nets and Components ========================================== -In this part, we well show how to navigate through the Nets_ and Components_ of a Cell_. +In this part, we will show how to navigate through the Nets_ and Components_ of a Cell_. 4.1 Hurricane Collections @@ -48,8 +48,8 @@ In C++ we would have written: **Never delete or create an element while you are iterating over a Collection.** Results can be unpredictable, you may just end up with a core dump, but more -subtly, some element of the Collection_ may be skippeds or processed twice. -If you want to create or delete en element, do it outside of the collection +subtly, some element of the Collection_ may be skipped or processed twice. +If you want to create or delete an element, do it outside the collection loop. For example: .. code-block:: Python @@ -78,12 +78,12 @@ the ``getCell()`` call wil be: disk since it was first loaded. Conversely, if the Cell_ has been modified in memory, you will get those modifications. -#. Search, in the ordered list of libraries, the first Cell_ that match the +#. Search, in the ordered list of libraries, the first Cell_ that matches the requested name. - .. note:: It means that if cells with the same name exists in different + .. note:: It means that if cells with the same name exist in different libraries, only the one in the first library will be ever used. - Be also weary of cell files that may remains in the ``WORK_LIB``, + Be also weary of cell files that may remain in the ``WORK_LIB``, they may unexpectedly shadow cells from the libraries. diff --git a/documentation/_build/html/_sources/PythonTutorial/Environment.txt b/documentation/_build/html/_sources/PythonTutorial/Environment.txt index e8ce2573..703b3486 100644 --- a/documentation/_build/html/_sources/PythonTutorial/Environment.txt +++ b/documentation/_build/html/_sources/PythonTutorial/Environment.txt @@ -8,7 +8,7 @@ 2. Setting up the Environment ============================= -2.1 Setting up the Pathes +2.1 Setting up the Paths ~~~~~~~~~~~~~~~~~~~~~~~~~ To simplify the tedious task of configuring your environment, a helper is provided. @@ -25,9 +25,9 @@ Use it like this (don't forget the ``eval`` **and** the backquotes): dummy@lepka:~> eval `/etc/coriolis2/coriolisEnv.py` -.. note:: **Do not call that script in your environement initialisation.** +.. note:: **Do not call that script in your environment initialisation.** When used under |RHEL6| or clones, it needs to be run in the |devtoolset| - environement. The script then launch a new shell, which may cause an + environment. The script then launches a new shell, which may cause an infinite loop if it's called again in, say :cb:`~/.bashrc`. Instead you may want to create an alias: :: @@ -39,12 +39,12 @@ Use it like this (don't forget the ``eval`` **and** the backquotes): ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ You may create, in the directory you are lanching |Coriolis| tools, a special -sub-directory ``.coriolis2/`` that can contains two configuration files: +sub-directory ``.coriolis2/`` that can contain two configuration files: * ``techno.py`` tells which technology to use. -* ``settings.py`` can overrides almost any default configuration setting. +* ``settings.py`` can override almost any default configuration setting. -Those two files are *optional*, if they do not exists the default settings +Those two files are *optional*, if they do not exist the default settings will be used and the technology is ``symbolic/cmos`` (i.e. purely symbolic). .. note:: Those two files will by processed by the |Python| interpreter, @@ -54,7 +54,7 @@ will be used and the technology is ``symbolic/cmos`` (i.e. purely symbolic). 2.2.1 The :cb:`techno.py` File ------------------------------ -Must provide one variable named :cb:`technology` which value the path towards +Must provide one variable named :cb:`technology` which values the path towards the technology file. The available technologies are installed under ``/etc/coriolis2``. For example, to use the 45nm FreeDPK which is in: :: diff --git a/documentation/_build/html/_sources/PythonTutorial/Introduction.txt b/documentation/_build/html/_sources/PythonTutorial/Introduction.txt index fa4c1de0..bbcd0144 100644 --- a/documentation/_build/html/_sources/PythonTutorial/Introduction.txt +++ b/documentation/_build/html/_sources/PythonTutorial/Introduction.txt @@ -10,11 +10,11 @@ This tutorial is aimed at two goals : * Presenting how to use Python scripts to control |Coriolis|. -* Make a basic introduction about the |Hurricane| database and it's +* Make a basic introduction about the |Hurricane| database and its concepts. While this tutorial is aimed at presenting the |Hurricane| database, -do not feel limited to it. You can use |Hurricane| objects as attributes +do not feel limited by it. You can use |Hurricane| objects as attributes of |Python| objects or use |Python| containers to store them. The only limitation is that you may not use |Hurricane| classes as base classes in |Python|. @@ -36,7 +36,7 @@ don't. Thus we summarize below the more important ones: =============== ===================================================== **Class** **Meaning** =============== ===================================================== -Cell_ The model. A Cell do not have terminals, only nets +Cell_ The model. A Cell does not have terminals, only nets flagged as *external* Instance_ An instance of a model Net_ A grouping of electrically connecteds components @@ -58,7 +58,7 @@ Mostly: * C++ namespaces are exported as |Python| modules. * The *scope resolution operator* :fboxtt:`::` converts into :fboxtt:`.`. * C++ blocks (between braces :fboxtt:`{}`) are replaced by indentations. -* In C++, names are manageds through a dedicated ``Name`` class. +* In C++, names are managed through a dedicated ``Name`` class. It has not been exported to the |Python| interface, you only have to use ``string``. * Coordinates are expressed in ``DbU`` which are ``long`` with a special diff --git a/documentation/_build/html/_sources/PythonTutorial/Netlist.txt b/documentation/_build/html/_sources/PythonTutorial/Netlist.txt index 0d9c99dc..3460905c 100644 --- a/documentation/_build/html/_sources/PythonTutorial/Netlist.txt +++ b/documentation/_build/html/_sources/PythonTutorial/Netlist.txt @@ -40,10 +40,10 @@ parameters: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ An Instance_ as one Plug_ for each external net of the *master cell*. -The plug allows to create a **logical** connexion bewteen a Net_ of +The plug allows to create a **logical** connection bewteen a Net_ of ``fulladder`` and a net from an Instance_ *master cell*. -A plug is somewhat equivalent to an *instance terminal* in others +A plug is somewhat equivalent to an *instance terminal* in other well known databases. Therefore, a plug is related to two nets: @@ -54,13 +54,13 @@ Therefore, a plug is related to two nets: #. The net of ``fulladder`` the plug is connected to. This can be set, it is how we build the netlist. To set the net, use - the function ``plug.setNet( net )``. It the argument is ``None``, + the function ``plug.setNet( net )``. If the argument is ``None``, the plug is *disconnected*. To find the plug of an instance associated to a given net in the *master cell*, use ``instance.getPlug( masterNet )``. The ``masterNet`` argument being an object of class net (not -it's name). +its name). Building the :cb:`a` net of ``fulladder``: @@ -81,7 +81,7 @@ Building the :cb:`a` net of ``fulladder``: terminals). There is a strict bijection between external nets and plugs. - While it may be restrictive, it enforce cleaner designs + While it may be restrictive, it enforces cleaner designs and make it possible for the HyperNet_ concept/class. @@ -112,7 +112,7 @@ until it is placed. -------------------- To place an Instance, we apply a Transformation_ to the coordinate system -of the *master cell*. A transformation is composed of two operations : +of the *master cell*. A transformation is composed of two operations: #. An Orientation_, which can be a symmetry or a rotation (or a combination of those two). The Orientation **is applied first** to the coordinate @@ -124,7 +124,7 @@ of the *master cell*. A transformation is composed of two operations : The transformation is a change of coordinate system, be aware that if the abutment box lower left corner of the *master* cell is **not** at ``(0,0)`` -the result of the Transformation may not be what you expect. To simplificate +the result of the Transformation may not be what you expect. To simplify the computation of the transformation of an instance, always place the lower left corner of the abutment box at ``(0,0)`` @@ -138,7 +138,7 @@ that the abutment box lower left corner is at ``(0,0)`` (same for the instance to left of the second row. Setting the translation on an Instance_ is not enough to make it be displayed, -we also must set it's *placement status* to ``Instance.PlacementStatus.PLACED``. +we also must set its *placement status* to ``Instance.PlacementStatus.PLACED``. .. code-block:: Python @@ -151,15 +151,15 @@ we also must set it's *placement status* to ``Instance.PlacementStatus.PLACED``. 6.4.3 Nets -- From Plugs to RoutingPads --------------------------------------- -As was stated before, Plugs_ represent a logical connexion between two -levels of hierarchy. To make the physical connexion to the *master net* +As was stated before, Plugs_ represent a logical connection between two +levels of hierarchy. To make the physical connection to the *master net* in the instance, we now must create, in the ``fulladder``, a special component which is a kind of *reference* to a component of the *master net* (in the master cell). The so called *special component* is a RoutingPad_. -The ``RoutingPad`` can be considered as an equivalent to ``pin`` in others +The ``RoutingPad`` can be considered as an equivalent to ``pin`` in other well known databases. .. code-block:: Python @@ -169,9 +169,9 @@ well known databases. , RoutingPad.BiggestArea ) For the second parameter, we must pass an Occurrence_. Occurrence objects will -be explained in detail later, for now, suffice to say that we must construct the +be explained in detail later, for now, let say that we must construct the Occurrence object with one parameter : the Plug_ for which we want to create a -physical connexion. +physical connection. The RoutingPad_ ``rp`` will be a component of the ``a`` net. @@ -179,7 +179,7 @@ The third argument ask the constructor of the RoutingPad_ to select in the master net, the component which has the biggest area. .. note:: **Component selection.** Not all the components of a net can be - selected for connexion through a RoutingPad_. The candidates must + selected for connection through a RoutingPad_. The candidates must have been flagged with the NetExternalComponents_ class. See `3.6.3 Creating a Component`_. diff --git a/documentation/_build/html/_sources/PythonTutorial/RealDesigns.txt b/documentation/_build/html/_sources/PythonTutorial/RealDesigns.txt index 1bbe68a8..b9315184 100644 --- a/documentation/_build/html/_sources/PythonTutorial/RealDesigns.txt +++ b/documentation/_build/html/_sources/PythonTutorial/RealDesigns.txt @@ -6,9 +6,9 @@ 7. Working in real mode ======================= -The AllianceFramework_ only manage *symbolic* layout as |Alliance| do. +The AllianceFramework_ only manages *symbolic* layout as |Alliance| does. But |Coriolis| is also able to work directly in *real* mode, meaning -that distances will be expresseds in microns instead of lambdas. +that distances will be expressed in microns instead of lambdas. The *real* mode will be illustrated by working with the FreePDK45_. @@ -32,7 +32,7 @@ another. library = LefImport.load( DKsdir + '/FreePDK45/osu_soc/lib/files/gscl45nm.lef' ) -.. note:: **Technology checking.** The first imported |LEF| file must contains the +.. note:: **Technology checking.** The first imported |LEF| file must contain the technology. The technology described in the |LEF| file will be checked against the one configured in the running instance of |Coriolis| to look for any discrepencies. @@ -42,8 +42,8 @@ another. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The |Blif| format is generated by the Yosys_ logic synthetizer. Here again, it is -pretty straightforward: call the static function ``Blif.load()``. If you did make -your synthesis on a cell library not managed by AllianceFramework_, For example +pretty straightforward: call the static function ``Blif.load()``. If you made +your synthesis on a cell library not managed by AllianceFramework_, for example the one of the FreePDK45, you must load it prior to calling the |Blif| loader. .. code-block:: Python diff --git a/documentation/_build/html/_sources/PythonTutorial/ToolEngines.txt b/documentation/_build/html/_sources/PythonTutorial/ToolEngines.txt index 9b3f68b8..fe3a75d4 100644 --- a/documentation/_build/html/_sources/PythonTutorial/ToolEngines.txt +++ b/documentation/_build/html/_sources/PythonTutorial/ToolEngines.txt @@ -6,7 +6,7 @@ 8. Tool Engines (CRL Core) ========================== -The ToolEngine_ class is the base class for all tools developpeds in +The ToolEngine_ class is the base class for all tools developped in |Coriolis|. In the rest of the tutorial we will use the names ``tool`` or ``engine`` as synonyms. @@ -55,7 +55,7 @@ You can configure the placer in two ways: Like for |Etesian|, you have to create the engine on the cell then call the sequence of functions detailed below. -.. note:: **Kite vs. Katana.** There are currently two router in |Coriolis|, +.. note:: **Kite vs. Katana.** There are currently two routers in |Coriolis|, |Kite| is the old one and digital only. |Katana| is a re-implementation with support for mixed routing (digital **and** analog). Until |Katana| is fully implemented we keep both of them. @@ -81,7 +81,7 @@ the sequence of functions detailed below. The example file ``toolengines.py`` can be found in the ``share/doc/coriolis2/examples/scripts/`` directory (under the the root of the |Coriolis| installation). -This script automatically place and route the ``fulladder`` netlist as seen +This script automatically places and routes the ``fulladder`` netlist as seen previously. The call to the ToolEngines_ is made inside the new function ``placeAndRoute()``. diff --git a/documentation/_build/html/_sources/PythonTutorial/pdfHeader.txt b/documentation/_build/html/_sources/PythonTutorial/pdfHeader.txt index 584bd6cd..4706e3ba 100644 --- a/documentation/_build/html/_sources/PythonTutorial/pdfHeader.txt +++ b/documentation/_build/html/_sources/PythonTutorial/pdfHeader.txt @@ -4,17 +4,51 @@ .. include:: ./definitions.rst -========================= -Hurricane+Python Tutorial -========================= -|pagestylefancy| +.. raw:: latex + + \newpage + + \pagestyle{empty} + + \begin{center} + + \hfill \includegraphics[height=2.0cm]{../etc/images/Logo-LIP6-bleugris} + \hfill \includegraphics[height=1.8cm]{../etc/images/Logo-SU} + \hfill \includegraphics[height=2.0cm]{../etc/images/Logo-CNRS} + \hfill + \\*[2cm] + + \huge \textsc{Sorbonne Université} \\*[1cm] + + \huge {\textsc{lip6} Laboratory} \\*[3cm] + + \Huge \textbf{\textsc{Hurricane+Python Tutorial}} \\*[1cm] + + \huge {Jean-Paul \textsc{Chaput}} \\ + \Large\href{mailto:Jean-Paul.Chaput@lip6.fr}{Jean-Paul.Chaput@lip6.fr}\\*[4cm] + + \includegraphics[scale=1.0]{../etc/images/logoCC.pdf} + + \normalsize + This work is licensed under a \\ + Creative Commons Attribution-NonCommercial-ShareALike 4.0 International License. \\ + Creative Commons License \href{https://creativecommons.org/licenses/by-nc-sa/4.0/}{creativecommons.org/licenses/by-nc-sa/4.0/} + + \end{center} + + + \newpage + \pagestyle{fancy} + |noindent| **First, a small disclaimer.** This tutorial assume that you are already familiar with the concepts of |VLSI| designs, such as *netlist*, *layout*, *instances* and hierarchical design. +|pagestylefancy| + .. contents:: diff --git a/documentation/_build/html/_sources/Stratus/Developper.txt b/documentation/_build/html/_sources/Stratus/Developper.txt index 19292e02..f764241a 100644 --- a/documentation/_build/html/_sources/Stratus/Developper.txt +++ b/documentation/_build/html/_sources/Stratus/Developper.txt @@ -3,9 +3,6 @@ Stratus Developper's Guide ========================== Sophie Belloeil -.. toctree:: - :maxdepth: 2 - Class Model =========== diff --git a/documentation/_build/html/_sources/Stratus/DpGen.txt b/documentation/_build/html/_sources/Stratus/DpGen.txt index 3fbc30be..cd8c1cac 100644 --- a/documentation/_build/html/_sources/Stratus/DpGen.txt +++ b/documentation/_build/html/_sources/Stratus/DpGen.txt @@ -3,9 +3,6 @@ DpGen generators manual ======================= Sophie Belloeil -.. toctree:: - :maxdepth: 2 - DpgenInv ======== diff --git a/documentation/_build/html/_sources/Stratus/Language.txt b/documentation/_build/html/_sources/Stratus/Language.txt index d23854d0..793afe6a 100644 --- a/documentation/_build/html/_sources/Stratus/Language.txt +++ b/documentation/_build/html/_sources/Stratus/Language.txt @@ -4,9 +4,6 @@ Stratus User's Guide Sophie Belloeil -.. toctree:: - :maxdepth: 2 - Introduction ============ diff --git a/documentation/_build/html/_sources/Stratus/Patterns.txt b/documentation/_build/html/_sources/Stratus/Patterns.txt index c5c1d4a1..32438686 100644 --- a/documentation/_build/html/_sources/Stratus/Patterns.txt +++ b/documentation/_build/html/_sources/Stratus/Patterns.txt @@ -3,9 +3,6 @@ Patterns module User's Guide ============================ Roselyne Chotin-Avot -.. toctree:: - :maxdepth: 2 - Description =========== diff --git a/documentation/_build/html/_sources/UsersGuide/Configuration.txt b/documentation/_build/html/_sources/UsersGuide/Configuration.txt index c40562d3..d05dc69b 100644 --- a/documentation/_build/html/_sources/UsersGuide/Configuration.txt +++ b/documentation/_build/html/_sources/UsersGuide/Configuration.txt @@ -12,8 +12,6 @@ :align: middle :width: 60% -|newpage| - Coriolis Configuration & Initialisation ======================================= @@ -22,7 +20,7 @@ Coriolis Configuration & Initialisation General Software Architecture ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -|Coriolis| has been build with respect of the classical paradigm that the +|Coriolis| has been built with respect of the classical paradigm that the computational instensive parts have been written in C++, and almost everything else in |Python|. To build the |Python| interface we used two methods: @@ -52,8 +50,6 @@ Configuration is done in two stages: #. Loading the complete configuration for the given technology and the user's settings. -|newpage| - First Stage: Technology Selection ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -71,7 +67,7 @@ The initialization process is done by executing, in order, the following file(s) | **3** | The user's local setting | :cb:`/.coriolis2/techno.py` | +-------+----------------------------------+----------------------------------------------+ -Thoses files must provides only one variable, the name of the technology. Each technology +Those files must provide only one variable, the name of the technology. Each technology will provide configuration for both the symbolic part and the real part. |Coriolis| can work with purely symbolic technology (``symbolic/cmos``) in that case, the real technology part is a dummy one. @@ -89,9 +85,9 @@ Second Stage: Technology Configuration Loading |noindent| The :cb:`technology` variable is set by the first stage and it's the name of the technology. A directory of that name, with all the configuration files, -must exists in the configuration directory (:cb:`/etc/coriolis2`). +must exist in the configuration directory (:cb:`/etc/coriolis2`). In addition to the technology-specific directories, a :cb:`common/` directory is -there to provides a trunk for all the identical datas across the various technologies. +there to provide a trunk for all the identical data across the various technologies. The initialization process is done by executing, in order, the following file(s): +-------+----------------------------------+-----------------------------------------------+ @@ -135,8 +131,6 @@ simple assembly of tuples. The helpers are installed under the directory: :: Where :cb:`/` is the root of the installation. -|newpage| - .. _Alliance Helper: @@ -188,11 +182,13 @@ variable, and if not found, default to ``/soc/alliance``. , ( 'PAD' , '.*_px$') ) +|newpage| + |noindent| The example above shows the system configuration file, with all the -available settings. Some important remarks about thoses settings: +available settings. Some important remarks about those settings: -* In it's configuration file, the user do not need to redefine all the settings, +* In its configuration file, the user does not need to redefine all the settings, just the one he wants to change. In most of the cases, the ``SYSTEM_LIBRARY``, the ``WORKING_LIBRARY`` and the special net names (at this point there is not much alternatives for the others settings). @@ -209,25 +205,25 @@ available settings. Some important remarks about thoses settings: it, whithout changing the search path order. If no library of that name already exists, it is appended. - A library is identified by it's name, this name is the last component of the + A library is identified by its name, this name is the last component of the path name. For instance: ``/soc/alliance/sxlib`` will be named ``sxlib``. Implementing the |Alliance| specification, when looking for a |Cell| ``name``, - the system will browse sequentially trought the library list and returns + the system will browse sequentially through the library list and returns the first |Cell| whose name match. * For ``POWER``, ``GROUND``, ``CLOCK`` and ``BLOCKAGE`` net names, a regular expression (|GNU| regexp) is expected. .. * The ``helpers.sysConfDir`` variable is supplied by the helpers, it is the -.. directory in which the system-wide configuration files are locateds. +.. directory in which the system-wide configuration files are located. .. For a standard installation it would be: ``/soc/coriolis2``. .. .. .. * Trick and naming convention about ``SYMBOLIC_TECHNOLOGY``, ``REAL_TECHNOLOGY`` -.. and ``DISPLAY``. In the previous releases, thoses files where to read by +.. and ``DISPLAY``. In the previous releases, those files were to be read by .. XML parsers, and still do if you triggers the XML compatibility mode. .. But now, they have Python conterparts. In the configuration files, you .. still have to name them as XML files, the Python file name will be -.. deduced from this one with thoses two translation rules: +.. deduced from this one with those two translation rules: .. .. #. In the filename, all dots, except for the last (the file extention), .. are replaced by underscores. @@ -256,15 +252,18 @@ A typical user's configuration file would be: :: Tools Configuration Helpers --------------------------- -All the tools uses the same helper to load their configuration (a.k.a. +All the tools use the same helper to load their configuration (a.k.a. *Configuration Helper*). Currently the following configuration system-wide configuration files are defined: -* :cb:`misc.conf`: commons settings or not belonging specifically to a tool. +* :cb:`misc.conf`: common settings or not belonging specifically to a tool. * :cb:`etesian.conf`: for the |Etesian| tool. * :cb:`kite.conf`: for the |Kite| tool. * :cb:`stratus1.conf`: for the |stratus1| tool. +|newpage| + + Here is the contents of :cb:`etesian.conf`: :: # Etesian parameters. @@ -301,23 +300,21 @@ Here is the contents of :cb:`etesian.conf`: :: , (TypeRule ,) ) -|newpage| - Taxonomy of the file: -* It must contains, at least, the two tables: +* It must contain, at least, the two tables: - * ``parametersTable``, defines & initialise the configuration variables. + * ``parametersTable``, defines & initialises the configuration variables. * ``layoutTables``, defines how the various parameters will be displayed in the configuration window (:ref:`The Settings Tab`). * The ``parametersTable``, is a tuple (list) of tuples. Each entry in the list - describe a configuration parameter. In it's simplest form, it's a quadruplet + describes a configuration parameter. In its simplest form, it's a quadruplet :cb:`(TypeOption, 'paramId', ParameterType, DefaultValue)` with: - #. ``TypeOption``, tells that this tuple describe a parameter. + #. ``TypeOption``, tells that this tuple describes a parameter. #. ``paramId``, the identifier of the parameter. Identifiers are defined by the tools. The list of parameters is detailed in each tool section. @@ -337,7 +334,7 @@ Taxonomy of the file: Hacking the Configuration Files ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Asides from the symbols that gets used by the configuration helpers like +Aside from the symbols that get used by the configuration helpers like :cb:`allianceConfig` or :cb:`parametersTable`, you can put pretty much anything in :cb:`/.coriolis2/settings.py` (that is, written in |Python|). diff --git a/documentation/_build/html/_sources/UsersGuide/DesignFlow.txt b/documentation/_build/html/_sources/UsersGuide/DesignFlow.txt new file mode 100644 index 00000000..90a4c0bf --- /dev/null +++ b/documentation/_build/html/_sources/UsersGuide/DesignFlow.txt @@ -0,0 +1,25 @@ +.. -*- Mode: rst -*- + +.. include:: ../etc/definitions.rst + +|newpage| + + +Complete Design Flow & Examples +=============================== + +While |Coriolis| can be used stand-alone, it is in fact part of a more complete +design flow build upon |Yosys| and |Alliance|. In addition, a set of demos and +examples are supplied in the repository |alliance-check-toolkit|. + +* |Yosys| : http://www.clifford.at/yosys/ + + An |rpm| packaged version is available here: + + https://ftp.lip6.fr/pub/linux/distributions/slsoc/soc/7/addons/x86_64/repoview/yosys.html + +* Alliance : https://www-soc.lip6.fr/equipe-cian/logiciels/alliance/ + +* |alliance-check-toolkit| |git| repository: + + https://www-soc.lip6.fr/git/alliance-check-toolkit.git/ diff --git a/documentation/_build/html/_sources/UsersGuide/Installation.txt b/documentation/_build/html/_sources/UsersGuide/Installation.txt index cb264d3c..79f0b8bd 100644 --- a/documentation/_build/html/_sources/UsersGuide/Installation.txt +++ b/documentation/_build/html/_sources/UsersGuide/Installation.txt @@ -2,23 +2,28 @@ .. include:: ../etc/definitions.rst -|newpage| - Installation ============ .. note:: As the sources are being released, the binary packaging is dropped. - You still may find older version here: http://asim.lip6.fr/pub/coriolis/2.0 . + You may still find (very) old versions here: http://asim.lip6.fr/pub/coriolis/2.0 . -In a nutshell, building source consist in pulling the |git| repository then +In a nutshell, building source consistis in pulling the |git| repository then running the |ccb| installer. +.. note:: + The documentation is already generated and commited in the |git| tree. + You may not install the additional prerequisites for the documentation. + By default the documentation is not generated, just installed by |ccb|. + If you really want to re-generate it, add the ``--doc`` flag to |ccb|. + Main building prerequisites: * cmake * C++11-capable compiler +* BFD library (provided through ``binutils``). * RapidJSON_ * python2.7 * boost @@ -26,12 +31,13 @@ Main building prerequisites: * bzip2 * yacc & lex * Qt 4 or Qt 5 +* PyQt 4 or PyQt 5 +* Qwt Building documentation prerequisites: * doxygen * latex -* latex2html * python-docutils (for reStructuredText) The following libraries gets directly bundled with |Coriolis|: @@ -41,13 +47,11 @@ The following libraries gets directly bundled with |Coriolis|: For other distributions, refer to their own packaging system. -|newpage| - Fixed Directory Tree ~~~~~~~~~~~~~~~~~~~~ -In order to simplificate the work of the |ccb| installer, the source, build +In order to simplify the work of the |ccb| installer, the source, build and installation tree is fixed. To successfully compile |Coriolis| you must follow it exactly. The tree is relative to the home directory of the user building it (noted :fboxtt:`~/` or :fboxtt:`$HOME/`). Only the source @@ -94,79 +98,183 @@ automatically created either by |ccb| or the build system. ``Static`` do not work because I don't know yet to mix statically linked binaries and Python modules (which must be dynamic). -|newpage| - Building Coriolis ~~~~~~~~~~~~~~~~~ -First step is to install the prerequisites. Currently, only RapidJSON_. -As RapidJSON is evolving fast, if you encounter compatibility problems, -the exact version we compiled against is given below. :: +The actively developed branch +----------------------------- - dummy@lepka:~> mkdir -p ~/coriolis-2.x/src/support - dummy@lepka:~> cd ~/coriolis-2.x/src/support - dummy@lepka:~> git clone http://github.com/miloyip/rapidjson - dummy@lepka:~> git checkout ec322005072076ef53984462fb4a1075c27c7dfd +The **devel_anabatic** branch is now closed and we go back to a more classical +scheme where **master** is the stable version and **devel** the development one. -The second step is to create the source directory and pull the |git| repository: :: +The |Coriolis| |git| repository is https://www-soc.lip6.fr/git/coriolis.git - dummy@lepka:~> mkdir -p ~/coriolis-2.x/src - dummy@lepka:~> cd ~/coriolis-2.x/src - dummy@lepka:~> git clone https://www-soc.lip6.fr/git/coriolis.git +.. note:: + Again, the **devel_anabatic** branch is now closed. Please revert to **devel** + or **master**. -Third and final step, build & install: :: +.. note:: + As it is now possible to mix |PyQt| widget with |Coriolis| ones, it is simpler + for us to revert to |Qt| 4 only. Our reference |OS| being |RHEL| 7, there is no + compatible |PyQt5| build compatible with their |Qt| 5 version (we fall short of + one minor, they provides |Qt| 5.9 were we need at least |Qt| 5.10). - dummy@lepka:src> ./bootstrap/ccb.py --project=support \ - --project=coriolis \ - --make="-j4 install" - dummy@lepka:src> ./bootstrap/ccb.py --project=support \ - --project=coriolis \ - --doc --make="-j1 install" +.. note:: + Under |RHEL| 7 or clones, they upgraded their version of |Qt| 4 (from 4.6 to 4.8) + so the *diagonal line* bug no longer occur. So we can safely use the default + system |Qt| again. -We need to separate to perform a separate installation of the documentation because it -do not support to be generated with a parallel build. So we compile & install in a first -stage in ``-j4`` (or whatever) then we generate the documentation in ``-j1`` + +Installing on |RedHat| or compatible distributions +-------------------------------------------------- + +1. Install or check that the required prerequisites are installeds : :: + + dummy@lepka:~> yum install -y git cmake bison flex gcc-c++ libstdc++-devel \ + binutils-devel \ + boost-devel boost-python boost-filesystem \ + boost-regex boost-wave \ + python-devel libxml2-devel bzip2-devel \ + qt-devel qwt-devel # Qt 4 + + Note, that the ``Qwt`` packages are directly availables from the standart distribution + when using |Qt| 4. + +2. Install the unpackaged prerequisites. Currently, only RapidJSON_. :: + + dummy@lepka:~> mkdir -p ~/coriolis-2.x/src/support + dummy@lepka:support> cd ~/coriolis-2.x/src/support + dummy@lepka:support> git clone http://github.com/miloyip/rapidjson + + +3. Create the source directory and pull the |git| repository: :: + + dummy@lepka:~> mkdir -p ~/coriolis-2.x/src + dummy@lepka:src> cd ~/coriolis-2.x/src + dummy@lepka:src> git clone https://www-soc.lip6.fr/git/coriolis.git + +4. Build & install: :: + + dummy@lepka:src> cd coriolis + dummy@lepka:coriolis> git checkout devel_anabatic + dummy@lepka:coriolis> ./bootstrap/ccb.py --project=support \ + --project=coriolis \ + --make="-j4 install" + +.. note:: + Pre-generated documentation will get installed by the previous command. + Only if you did made modifications to it you need to regenerate it with: :: + + dummy@lepka:coriolis> ./bootstrap/ccb.py --project=support \ + --project=coriolis \ + --doc --make="-j1 install" + + We need to perform a separate installation of the documentation because it + does not support to be generated with a parallel build. So we compile & install in a first + stage in ``-j4`` (or whatever) then we generate the documentation in ``-j1`` Under |RHEL6| or clones, you must build using the |devtoolset|, the version is to be given as argument: :: - dummy@lepka:src> ./bootstrap/ccb.py --project=coriolis \ - --devtoolset=8 --make="-j4 install" + dummy@lepka:coriolis> ./bootstrap/ccb.py --project=coriolis \ + --devtoolset=8 --make="-j4 install" -If you want to uses Qt 5 instead of Qt 4, you may add the ``--qt5`` argument. +If you want to uses Qt 5 instead of Qt 4 modify the previous steps as follow: + +* At **step 1**, do not install the |QT| 4 related development package (``qt4-devel``), + but instead: :: + + dummy@lepka:~> yum install -y qt5-qtbase-devel qt5-qtsvg-devel # Qt 5. + + The package ``qwt-qt5-devel`` and it's dependency ``qwt-qt5`` are not provided + by any standard repository (like |EPEL|). You may download them from the + `LIP6 Addons Repository `_ + Then run: :: + + dummy@lepka:~> yum localinstall -y qwt-qt5-6.1.2-4.fc23.x86_64.rpm \ + qwt-qt5-6.1.2-4.fc23.x86_64.rpm # Qwt for Qt 5. + +* At **step 4**, add a ``--qt5`` argument to the ``ccb.py`` command line. + +* The |Python| scripts that makes uses of |PyQt| in ``crlcore`` and ``cumulus`` must be + edited to import ``PyQt5`` instead of ``PtQt4`` (should find a way to automatically + switch between the two of them). The complete list of |ccb| functionalities can be accessed with the ``--help`` argument. It also may be run in graphical mode (``--gui``). -Building the Devel Branch -------------------------- +Building a Debug Enabled Version +-------------------------------- -In the |Coriolis| |git| repository, two branches are present: +The ``Release.Shared`` default version of the |Coriolis| is build stripped of symbols +and optimized so that it makes analysing a core dump after a crash difficult. In the +(unlikely) case of a crash, you may want to build, alongside the optimized version, +a debug one which allow forensic examination by |gdb| (or |valgrind| or whatever). -* The :cb:`master` branch, which contains the latest stable version. This is the - one used by default if you follow the above instructions. +Run again ``ccb.py``, adding the ``--debug`` argument: :: -* The :cb:`devel` branch, which obviously contains the latest commits from the - development team. To use it instead of the :cb:`master` one, do the following - command just after the first step: :: + dummy@lepka:coriolis> ./bootstrap/ccb.py --project=support \ + --project=coriolis \ + --make="-j4 install" --debug - dummy@lepka:~> git checkout devel - dummy@lepka:src> ./bootstrap/ccb.py --project=coriolis \ - --make="-j4 install" --debug - Be aware that it may requires newer versions of the dependencies and may introduce - incompatibilites with the stable version. +As |cgt| is a |Python| script, the right command to run |gdb| is: :: - In the (unlikely) event of a crash of |cgt|, as it is a |Python| script, the right - command to run |gdb| on it is: :: + dummy@lepka:work> gdb python core.XXXX - dummy@lepka:work> gdb python core.XXXX + +.. Building the Devel Branch +.. ------------------------- +.. +.. In the |Coriolis| |git| repository, two branches are present: +.. +.. * The :cb:`master` branch, which contains the latest stable version. This is the +.. one used by default if you follow the above instructions. +.. +.. * The :cb:`devel` branch, which obviously contains the latest commits from the +.. development team. To use it instead of the :cb:`master` one, do the following +.. command just after the first step: :: +.. +.. dummy@lepka:coriolis> git checkout devel +.. dummy@lepka:coriolis> ./bootstrap/ccb.py --project=coriolis \ +.. --make="-j4 install" --debug +.. +.. Be aware that it may require newer versions of the dependencies and may introduce +.. incompatibilities with the stable version. |newpage| +Installing on |Debian| 9, |Ubuntu| 18 or compatible distributions +----------------------------------------------------------------- + +First, install or check that the required prerequisites are installeds : :: + + dummy@lepka:~> sudo apt install -y build-essential binutils-dev \ + git cmake bison flex gcc python-dev \ + libboost-all-dev libboost-python-dev \ + libbz2-dev libxml2-dev rapidjson-dev libbz2-dev \ + qt4-dev-tools libqwt5-qt4-dev \ # Qt 4 + qtbase5-dev libqt5svg5-dev libqwt-qt5-dev \ # Qt 5 + doxygen dvipng graphviz python-sphinx \ + texlive-fonts-extra texlive-lang-french + +Second step is to create the source directory and pull the |git| repository: :: + + dummy@lepka:~> mkdir -p ~/coriolis-2.x/src + dummy@lepka:src> cd ~/coriolis-2.x/src + dummy@lepka:src> git clone https://www-soc.lip6.fr/git/coriolis.git + +Third and final step, build & install: :: + + dummy@lepka:src> cd coriolis + dummy@lepka:coriolis> git checkout devel_anabatic + dummy@lepka:coriolis> ./bootstrap/ccb.py --project=coriolis \ + --make="-j4 install" + + Additionnal Requirement under |MacOS| ------------------------------------- @@ -187,11 +295,11 @@ Then proceed with the generic install instructions. Packaging Coriolis ~~~~~~~~~~~~~~~~~~ -Packager should not uses |ccb|, instead ``bootstrap/Makefile.package`` is provided +Packager should not use |ccb|, instead ``bootstrap/Makefile.package`` is provided to emulate a top-level ``autotool`` makefile. Just copy it in the root of the |Coriolis| git repository (``~/corriolis-2.x/src/coriolis/``) and build. -Sligthly outaded packaging configuration files can also be found under ``bootstrap/``: +Sligthly outdated packaging configuration files can also be found under ``bootstrap/``: * ``bootstrap/coriolis2.spec.in`` for |rpm| based distributions. * ``bootstrap/debian`` for |Debian| based distributions. @@ -223,7 +331,7 @@ Use it like this: :: dummy@lepka:~> eval `~/coriolis-2.x/src/coriolis/bootstrap/coriolisEnv.py` .. note:: **Do not call that script in your environement initialisation.** - When used under |RHEL6| or clones, it needs to be run in the |devtoolset2| + When used under |RHEL6| or clones, it needs to be run in the |devtoolset| environement. The script then launch a new shell, which may cause an infinite loop if it's called again in, say :cb:`~/.bashrc`. diff --git a/documentation/_build/html/_sources/UsersGuide/LicenseCredits.txt b/documentation/_build/html/_sources/UsersGuide/LicenseCredits.txt index a815e214..ad99e298 100644 --- a/documentation/_build/html/_sources/UsersGuide/LicenseCredits.txt +++ b/documentation/_build/html/_sources/UsersGuide/LicenseCredits.txt @@ -18,10 +18,10 @@ Credits & License

          Stratus Sophie Belloeil


          -

          Knik +

          Katana (global) Damien Dupuis


          -

          Kite, +

          Katana (detailed), Unicorn Jean-Paul Chaput


          @@ -30,26 +30,26 @@ Credits & License .. raw:: latex \begin{center}\begin{minipage}[t]{.8\textwidth} - \noindent\DUrole{sc}{Hurricane} \dotfill Rémy \DUrole{sc}{Escassut} \& - Christian \DUrole{sc}{Masson} \\ - \noindent\DUrole{sc}{Etesian} \dotfill Gabriel \DUrole{sc}{Gouvine} \\ - \noindent\DUrole{sc}{Stratus} \dotfill Sophie \DUrole{sc}{Belloeil} \\ - \noindent\DUrole{sc}{Knik} \dotfill Damien \DUrole{sc}{Dupuis} \\ - \noindent\DUrole{sc}{Kite}, - \DUrole{sc}{Unicorn} \dotfill Jean-Paul \DUrole{sc}{Chaput} \\ + \noindent\DUrole{sc}{Hurricane} \dotfill Rémy \DUrole{sc}{Escassut} \& + Christian \DUrole{sc}{Masson} \\ + \noindent\DUrole{sc}{Etesian} \dotfill Gabriel \DUrole{sc}{Gouvine} \\ + \noindent\DUrole{sc}{Stratus} \dotfill Sophie \DUrole{sc}{Belloeil} \\ + \noindent\DUrole{sc}{Katana} (global) \dotfill Damien \DUrole{sc}{Dupuis} \\ + \noindent\DUrole{sc}{Katana} (detailed), + \DUrole{sc}{Unicorn} \dotfill Jean-Paul \DUrole{sc}{Chaput} \\ \end{minipage}\end{center} |medskip| -The |Hurricane| data-base is copyright© |Bull| 2000-2018 and is +The |Hurricane| data-base is copyright© |Bull| 2000-2019 and is released under the terms of the |LGPL| license. All other tools are -copyright© |UPMC| 2008-2018 and released under the |GPL| -license. +copyright© |UPMC| 2008-2018, |SorbonneUniversite| 2018-2019 +and released under the |GPL| license. Others important contributors to |Coriolis| are Christophe |Alexandre|, -Hugo |Clement|, Marek |Sroka| and Wu |Yifei|. +Roselyne |Chotin|, Hugo |Clement|, Marek |Sroka| and Wu |Yifei|. -The |Knik| router makes use of the |Flute| software, which is +The |Katana| router makes use of the |Flute| software, which is copyright© Chris C. N. |Chu| from the Iowa State University (http://home.eng.iastate.edu/~cnchu/). diff --git a/documentation/_build/html/_sources/UsersGuide/Releases.txt b/documentation/_build/html/_sources/UsersGuide/Releases.txt index c86243a1..2826b32a 100644 --- a/documentation/_build/html/_sources/UsersGuide/Releases.txt +++ b/documentation/_build/html/_sources/UsersGuide/Releases.txt @@ -84,7 +84,7 @@ Release v2.1 |Etesian| and its legalization and detailed placement tools. #. Added a Blif format parser to process circuits generated by the Yosys and ABC logic synthetizers. -#. The multiples user defined configuration files are now grouped under +#. The multiple user defined configuration files are now grouped under a common hidden (dot) directory ``.coriolis2`` and the file extension is back from ``.conf`` to ``.py``. @@ -94,9 +94,31 @@ Release v2.1 .. as possible. -**Release v2.2** -~~~~~~~~~~~~~~~~ +Release v2.2 +~~~~~~~~~~~~ #. Added JSON import/export of the whole Hurricane DataBase. Two save mode are supported: *Cell* mode (standalone) or *Blob* mode, which dump the whole design down and including the standard cells. + + +Release v2.3 +~~~~~~~~~~~~ + +#. Revert to a more standard organisation of the branchs. **devel_anabatic** is + closed and we go on with **master** (stable version) and **devel**. + +#. Make |Katana| the default global & detailed router. Put |Knik| & |Kite| in the + obsolete menues. + +#. Finally make uses of |PyQt4| widgets. Seems to integrate without problems + with the |Coriolis| own |Qt| widget. The drawback is that to build against |Qt| 5 + needs to adjustement from the user. + +#. Improved support for whole chip management. The outer part of the chip containing + the pad is decoupled from the core. This allow to cleanly separate real pads from + the foundry from a symbolic core. But this does not preclude other combinations + as fully symbolic or fully real. + + To perform the separation an intermediate hierarchical level ``corona`` between chip + and core has been introduced. diff --git a/documentation/_build/html/_sources/UsersGuide/ScriptsPlugins.txt b/documentation/_build/html/_sources/UsersGuide/ScriptsPlugins.txt index 8fe35c9e..63186247 100644 --- a/documentation/_build/html/_sources/UsersGuide/ScriptsPlugins.txt +++ b/documentation/_build/html/_sources/UsersGuide/ScriptsPlugins.txt @@ -13,6 +13,9 @@ .. _Python Interface to Coriolis: +|newpage| + + Python Interface for |Hurricane| / |Coriolis| ============================================= @@ -27,7 +30,7 @@ either languages. A script could be run directly in text mode from the command line or through the graphical interface (see :ref:`Python Scripts in Cgt`). -Asides for this requirement, the python script can contain anything valid +Aside for this requirement, the python script can contain anything valid in |Python|, so don't hesitate to use any package or extention. Small example of Python/Stratus script: :: @@ -100,35 +103,52 @@ Chip Placement Automatically perform the placement of a complete chip. This plugin, as well as the other P&R tools expect a specific top-level hierarchy for the design. The top-level hierarchy must contains the instances of all the I/O pads and -**exactly one** instance of the chip's core model. +**exactly one** instance named ``corona`` of an eponym cell ``corona``. +The ``corona`` cell in turn containing the instance of the chip's core model. + +The intermediate ``corona`` hierarchical level has been introduced to handle +the possible discoupling between real I/O pads supplied by a foundry and a +symbolic core. So the *chip* level contains only real layout and the corona +and below only symbolic layer. + +.. note:: This do not prevent having a design either fully symbolic (pads and core) + or fully real. + +.. note:: The ``corona`` also avoid the router to actually have to manage directly + the pads which simplificate it's configuration and accessorily avoid + to have the pads stuffed with blockages. |bcenter| |ChipStructure-1| |ecenter| -The designer must provide a configuration file that define the rules for the +The designer must provide a configuration file that defines the rules for the placement of the top-level hierarchy (that is, the pads and the core). -This file must be named after the chip's name, by appending ``_chip.py`` +This file must be named after the chip's name, by appending ``_ioring.py`` (obviously, it is a |Python| file). For instance if the chip netlist file -is called ``amd2901_crl.vst``, then the configuration file must be named -``amd2901_crl_chip.vst``. +is called ``amd2901.vst``, then the configuration file must be named +``amd2901_ioring.vst``. Example of chip placement configuration file (for ``AM2901``): :: + + from helpers import l, u, n + chip = \ - { 'pads.south' : [ 'p_a3' , 'p_a2' , 'p_a1' , 'p_r0' - , 'p_vddick0', 'p_vssick0', 'p_a0' , 'p_i6' - , 'p_i8' , 'p_i7' , 'p_r3' ] - , 'pads.east' : [ 'p_zero' , 'p_i0' , 'p_i1' , 'p_i2' - , 'p_vddeck0', 'p_vsseck0', 'p_q3' , 'p_b0' - , 'p_b1' , 'p_b2' , 'p_b3' ] - , 'pads.north' : [ 'p_noe' , 'p_y3' , 'p_y2' , 'p_y1' - , 'p_y0' , 'p_vddeck1', 'p_vsseck1', 'p_np' - , 'p_ovr' , 'p_cout' , 'p_ng' ] - , 'pads.west' : [ 'p_cin' , 'p_i4' , 'p_i5' , 'p_i3' - , 'p_ck' , 'p_d0' , 'p_d1' , 'p_d2' - , 'p_d3' , 'p_q0' , 'p_f3' ] - , 'core.size' : ( 1500, 1500 ) - , 'chip.size' : ( 3000, 3000 ) - , 'chip.clockTree' : True + { 'pads.ioPadGauge' : 'pxlib' + , 'pads.south' : [ 'p_a3' , 'p_a2' , 'p_a1' , 'p_r0' + , 'p_vddick0', 'p_vssick0', 'p_a0' , 'p_i6' + , 'p_i8' , 'p_i7' , 'p_r3' ] + , 'pads.east' : [ 'p_zero' , 'p_i0' , 'p_i1' , 'p_i2' + , 'p_vddeck0', 'p_vsseck0', 'p_q3' , 'p_b0' + , 'p_b1' , 'p_b2' , 'p_b3' ] + , 'pads.north' : [ 'p_noe' , 'p_y3' , 'p_y2' , 'p_y1' + , 'p_y0' , 'p_vddeck1', 'p_vsseck1', 'p_np' + , 'p_ovr' , 'p_cout' , 'p_ng' ] + , 'pads.west' : [ 'p_cin' , 'p_i4' , 'p_i5' , 'p_i3' + , 'p_ck' , 'p_d0' , 'p_d1' , 'p_d2' + , 'p_d3' , 'p_q0' , 'p_f3' ] + , 'core.size' : ( l(1500), l(1500) ) + , 'chip.size' : ( l(3000), l(3000) ) + , 'chip.clockTree' : True } The file must contain *one dictionnary* named ``chip``. @@ -138,6 +158,10 @@ The file must contain *one dictionnary* named ``chip``. +----------------------+-------------------------------------------------------+ | Parameter Key/Name | Value/Contents type | +======================+=======================================================+ +| ``'pad.ioPadGauge'`` | The routing gauge to use for the pad. Must be given | +| | as it differs from the one used to route standard | +| | inside the core | ++----------------------+-------------------------------------------------------+ | ``'pad.south'`` | Ordered list (left to right) of pad instances names | | | to put on the south side of the chip | +----------------------+-------------------------------------------------------+ @@ -173,53 +197,24 @@ Configuration parameters, defaults are defined in ``etc/coriolis2//plug | | One rail for the clock and at least two pairs | | | of power/grounds | +-----------------------------------+------------------+----------------------------+ -|``chip.block.rails.hWidth`` | TypeInt | :cb:`12` | +|``chip.block.rails.hWidth`` | TypeInt | :cb:`12` |lambda| | | +------------------+----------------------------+ | | The horizontal with of the rails | +-----------------------------------+------------------+----------------------------+ -|``chip.block.rails.vWidth`` | TypeInt | :cb:`12` | +|``chip.block.rails.vWidth`` | TypeInt | :cb:`12` |lambda| | | +------------------+----------------------------+ | | The vertical with of the rails | +-----------------------------------+------------------+----------------------------+ -|``chip.block.rails.hSpacing`` | TypeInt | :cb:`6` | +|``chip.block.rails.hSpacing`` | TypeInt | :cb:`6` |lambda| | | +------------------+----------------------------+ | | The spacing, *edge to edge* of two adjacent | | | horizontal rails | +-----------------------------------+------------------+----------------------------+ -|``chip.block.rails.vSpacing`` | TypeInt | :cb:`6` | +|``chip.block.rails.vSpacing`` | TypeInt | :cb:`6` |lambda| | | +------------------+----------------------------+ | | The spacing, *edge to edge* of two adjacent | | | vertical rails | +-----------------------------------+------------------+----------------------------+ -|``chip.pad.pck`` | TypeString | :cb:`pck_px` | -| +------------------+----------------------------+ -| | The model name of the pad connected to the | -| | chip external clock | -+-----------------------------------+------------------+----------------------------+ -|``chip.pad.pvddeck`` | TypeString | :cb:`pvddeck_px` | -| +------------------+----------------------------+ -| | The model name of the pad connected to the | -| | ``vdde`` (external power) and suppling it to | -| | the core | -+-----------------------------------+------------------+----------------------------+ -|``chip.pad.pvsseck`` | TypeString | :cb:`pvsseck_px` | -| +------------------+----------------------------+ -| | The model name of the pad connected to the | -| | ``vsse`` (external ground) and suppling it to | -| | the core | -+-----------------------------------+------------------+----------------------------+ -|``chip.pad.pvddick`` | TypeString | :cb:`pvddick_px` | -| +------------------+----------------------------+ -| | The model name of the pad connected to the | -| | ``vddi`` (internal power) and suppling it to | -| | the core | -+-----------------------------------+------------------+----------------------------+ -|``chip.pad.pvssick`` | TypeString | :cb:`pvssick_px` | -| +------------------+----------------------------+ -| | The model name of the pad connected to the | -| | ``vssi`` (internal ground) and suppling it to | -| | the core | -+-----------------------------------+------------------+----------------------------+ .. note:: If no clock tree is generated, then the clock rail is *not* created. @@ -230,11 +225,11 @@ Configuration parameters, defaults are defined in ``etc/coriolis2//plug Clock Tree ---------- -Insert a clock tree into a block. The clock tree uses the H strategy. +Inserts a clock tree into a block. The clock tree uses the H strategy. The clock net is splitted into sub-nets, one for each branch of the tree. -* On **chips** design, the sub-nets are createds in the model of the +* On **chip** design, the sub-nets are created in the model of the core block (then trans-hierarchically flattened to be shown at chip level). * On **blocks**, the sub nets are created directly in the top block. @@ -251,29 +246,29 @@ tree. The clock tree plugin works in four steps: -#. Build the clock tree: creates the top-block abutment box, compute the - levels of H tree neededs and place the clock buffers. +#. Builds the clock tree: creates the top-block abutment box, compute the + required levels of H tree and places the clock buffers. #. Once the clock buffers are placed, calls the placer (|etesian|) to place - the ordinary standart cells, whithout disturbing clock H-tree buffers. + the ordinary standard cells, whithout disturbing clock H-tree buffers. #. At this point we know the exact positions of all the DFFs, so we can connect them to the nearest H-tree leaf clock signal. -#. Leaf clock signals that are not connecteds to any DFFs are removed. +#. Leaf clock signals that are not connected to any DFFs are removed. Netlist reorganisation: -* Obviously the top block or chip core model netlist is modificated to - contains all the clock sub-nets. The interface is *not* changed. +* Obviously the top block or chip core model netlist is modified to + contain all the clock sub-nets. The interface is *not* changed. * If the top block contains instances of other models *and* those models - contains DFFs that get re-connecteds to the clock sub-nets (from the - top level). Change both the model netlist and interface to propagate + contain DFFs that get re-connected to the clock sub-nets (from the + top level). Changes both the model netlist and interface to propagate the relevant clock sub-nets to the instanciated model. The new model - with the added clock signal is renamed with a ``_clocked`` suffix. - For example, the sub-block model ``ram.vst`` will become ``ram_clocked.vst``. + with the added clock signal is renamed with a ``_cts`` suffix. + For example, the sub-block model ``ram.vst`` will become ``ram_cts.vst``. .. note:: If you are to re-run the clock tree plugin on a netlist, be careful - to erase any previously generated ``_clocked`` file (both netlist and - layout: ``rm *.clocked.{ap,vst}``). And restart |cgt| to clear it's + to erase any previously generated ``_cts`` file (both netlist and + layout: ``rm *_cts.{ap,vst}``). And restart |cgt| to clear its memory cache. Configuration parameters, defaults are defined in ``etc/coriolis2//plugins.conf``. @@ -283,7 +278,7 @@ Configuration parameters, defaults are defined in ``etc/coriolis2//plug +===================================+==================+============================+ | **ClockTree Plugin Parameters** | +-----------------------------------+------------------+----------------------------+ -|``clockTree.minimumSide`` | TypeInt | :cb:`300` | +|``clockTree.minimumSide`` | TypeInt | :cb:`300` |lambda| | | +------------------+----------------------------+ | | The minimum size below which the clock tree | | | will stop to perform quadri-partitions | @@ -292,19 +287,13 @@ Configuration parameters, defaults are defined in ``etc/coriolis2//plug | +------------------+----------------------------+ | | The buffer model to use to drive sub-nets | +-----------------------------------+------------------+----------------------------+ -|``clockTree.placerEngine`` | TypeString | :cb:`Etesian` | -| +------------------+----------------------------+ -| | The placer to use. Other value is ``Mauka`` | -| | the simulated annealing placer which will go | -| | into retirement very soon | -+-----------------------------------+------------------+----------------------------+ Recursive-Save (RSave) ---------------------- -Perform a recursive top down save of all the models from the top cell -loaded in |cgt|. Force a write of any non-terminal model. This plugin is used +Performs a recursive top down save of all the models from the top cell +loaded in |cgt|. Forces a write of any non-terminal model. This plugin is used by the clock tree plugin after the netlist clock sub-nets creation. @@ -329,4 +318,4 @@ You can generate the chip using one of the following method: .. note:: Between two consecutive run, be sure to erase the netlist/layout generateds: :: - dummy@lepka:AM2901> rm *clocked*.vst *.ap + dummy@lepka:AM2901> rm *_cts*.vst *.ap diff --git a/documentation/_build/html/_sources/UsersGuide/ViewerTools.txt b/documentation/_build/html/_sources/UsersGuide/ViewerTools.txt index 8313e1df..94cc226b 100644 --- a/documentation/_build/html/_sources/UsersGuide/ViewerTools.txt +++ b/documentation/_build/html/_sources/UsersGuide/ViewerTools.txt @@ -185,10 +185,9 @@ The |Etesian| placer is a state of the art (as of 2015) analytical placer. It is within ``5%`` of other placers' solutions, but is normally a bit worse than ePlace. This |Coriolis| tool is actually an encapsulation of |Coloquinte| which *is* the placer. -.. note:: *Instance Uniquification Unsupported:* a same logical instance cannot have - two different placements. So, either you manually make a clone of it or you - supply a placement for it. We need to implement uniquification in the - |Hurricane| database. +.. note:: *Instance Uniquification:* a same logical instance cannot have + two different placements. So, if you don't supply a placement for it, it will be + uniquified (cloned) and you will see the copy files appears on disk upon saving. |noindent| @@ -280,56 +279,47 @@ Etesian Configuration Parameters |newpage| -Knik -- Global Router ---------------------- - -The quality of |Knik| global routing solutions are equivalent to those of FGR_ 1.0. -For an in-depth description of |Knik| algorithms, you may download the thesis of -D. |Dupuis| avalaible from here~: `Knik Thesis`_. - -The global router is (not yet) deterministic. To circumvent this limitation, -a global routing *solution* can be saved to disk and reloaded for later uses. - -A global routing is saved into a file with the same name as the design and a -|kgr| extention. It is in `Box Router`_ output format. - -|noindent| Menus: - -* :math:`\textbf{P\&R} \rightarrow \textbf{Step by Step} \rightarrow \textbf{Save Global Routing}` -* :math:`\textbf{P\&R} \rightarrow \textbf{Step by Step} \rightarrow \textbf{Load Global Routing}` - - -Kite -- Detailed Router +Katana -- Global Router ----------------------- -|Kite| no longer suffers from the limitations of |Nero|. It can route big designs +The quality of |Katana| global routing solutions are equivalent to those of FGR_ 1.0. +For an in-depth description of |Katana| algorithms, you may download the thesis of +D. |Dupuis| avalaible from here~: `Knik Thesis`_ (|Knik| has been rewritten as part +of |Katana|, the algorithms remains essentially the same). + +The global router is now deterministic. + + +Katana -- Detailed Router +------------------------- + +|Katana| no longer suffers from the limitations of |Nero|. It can route big designs as its runtime and memory footprint is almost linear (with respect to the number of gates). It has successfully routed design of more than `150K` gates. |medskip| -|noindent| However, this first release comes with the temporary the following -restrictions: - -* Works only with |SxLib| standard cell gauge. -* Works always with 4 routing metal layers (`M2` through `M5`). -* Do not allow (take into account) pre-routed wires on signals - other than |POWER| or |GROUND|. - .. note:: **Slow Layer Assignment.** Most of the time, the layer assignment stage is fast (less than a dozen seconds), but in some instances it can take more than a dozen *minutes*. This is a known bug and will be corrected in later releases. -After each run, |Kite| displays a set of *completion ratios* which must all -be equal to `100%` if the detailed routing has been successfull. -In the event of a failure, on a saturated design, you may decrease the -`edge saturation ratio` (argument `--edge`) to balance more evenly the design -saturation. That is, the maximum saturation decrease at the price of a wider -saturated area and increased wirelength. This is the saturation of the -*global* router |Knik|, and you may increase/decrease by steps of ``5%``, -which represent one track. The maximum capacity of the |SxLib| gauge is -10 tracks in two layers, that makes 20 tracks by |Knik| edge. +After each run, |Katana| displays a set of *completion ratios* which must all +be equal to `100%` or (``NNNN+0``) if the detailed routing has been successfull. +In the event of a failure, on a saturated design, you may tweak the three +following configuration parameters: + +#. ``katana.hTrackReservedLocal``, the number of track reserved for local routing, + that quantity is substracted from the edge capacities (global routing) to + give a sense of the cluttering inside the GCells. +#. ``katana.vTrackReservedLocal``, same as above. +#. ``etesian.spaceMargin``, increase the free area of the overall design so the + routing density decrease. + +The idea is to increase the horizontal and vertical local track reservation until +the detailed router succeed. But in doing so we make the task of the global router +more and more difficult as the capacity of the edges decrease, and at some point +it will fail too. So this is a balance. Routing a design is done in four ordered steps: @@ -340,29 +330,26 @@ Routing a design is done in four ordered steps: It is possible to supply to the router a complete wiring for some nets that the user's wants to be routed according to a specific topology. The supplied topology must respect -the building rules of the |Katabatic| database (contacts must be, terminals, turns, h-tee -& v-tee only). During the first step :fboxtt:`Detailed Pre-Route` the router will solve +the building rules of the |Anabatic| database (contacts must be, *terminals*, *turns*, *h-tee* +& *v-tee* only). During the first step :fboxtt:`Detailed Pre-Route` the router will solve overlaps between the segments, without making any dogleg. If no pre-routed topologies are present, this step may be ommited. Any net routed at this step is then fixed and become unmovable for the later stages. -After the detailed routing step the |Kite| data-structure is still active +After the detailed routing step the |Katana| data-structure is still active (the Hurricane wiring is decorated). The finalize step performs the removal of -the |Kite| data-structure, and it is not advisable to save the design before +the |Katana| data-structure, and it is not advisable to save the design before that step. -You may visualize the density (saturation) of either |Knik| (on edges) or -|Kite| (on GCells) until the routing is finalized. Special layers appears +You may visualize the density (saturation) of either the edges (global routing) +or the GCells (detailed routing) until the routing is finalized. Special layers appears to that effect in the `The Layers&Go Tab`_. -Kite Configuration Parameters -............................. +Katana Configuration Parameters +............................... -As |Knik| is only called through |Kite|, it's parameters also have -the :cb:`kite.` prefix. - -The |Katabatic| parameters control the layer assignment step. +The |Anabatic| parameters control the layer assignment step. All the defaults value given below are from the default |Alliance| technology (:cb:`cmos` and :cb:`SxLib` cell gauge/routing gauge). @@ -370,35 +357,35 @@ All the defaults value given below are from the default |Alliance| technology +-----------------------------------+------------------+----------------------------+ | Parameter Identifier | Type | Default | +===================================+==================+============================+ -| **Katabatic Parameters** | +| **Anabatic Parameters** | +-----------------------------------+------------------+----------------------------+ -|``katabatic.topRoutingLayer`` | TypeString | :cb:`METAL5` | +|``anabatic.topRoutingLayer`` | TypeString | :cb:`METAL5` | | +------------------+----------------------------+ | | Define the highest metal layer that will be | | | used for routing (inclusive). | +-----------------------------------+------------------+----------------------------+ -|``katabatic.globalLengthThreshold``| TypeInt | :cb:`1450` | +|``anabatic.globalLengthThreshold`` | TypeInt | :cb:`1450` | | +------------------+----------------------------+ | | This parameter is used by a layer assignment | | | method which is no longer used (did not give | | | good results) | +-----------------------------------+------------------+----------------------------+ -| ``katabatic.saturateRatio`` | TypePercentage | :cb:`80` | +| ``anabatic.saturateRatio`` | TypePercentage | :cb:`80` | | +------------------+----------------------------+ | | If ``M(x)`` density is above this ratio, | | | move up feedthru global segments up from | | | depth ``x`` to ``x+2`` | +-----------------------------------+------------------+----------------------------+ -| ``katabatic.saturateRp`` | TypeInt | :cb:`8` | +| ``anabatic.saturateRp`` | TypeInt | :cb:`8` | | +------------------+----------------------------+ | | If a GCell contains more terminals | | | (:cb:`RoutingPad`) than that number, force a | | | move up of the connecting segments to those | | | in excess | +-----------------------------------+------------------+----------------------------+ -| **Knik Parameters** | +| **Katana Parameters** | +-----------------------------------+------------------+----------------------------+ -| ``kite.hTracksReservedLocal`` | TypeInt | :cb:`3` | +| ``katana.hTracksReservedLocal`` | TypeInt | :cb:`3` | | +------------------+----------------------------+ | | To take account the tracks needed *inside* a | | | GCell to build the *local* routing, decrease | @@ -407,40 +394,38 @@ All the defaults value given below are from the default |Alliance| technology | | reserved capacity can be distinguished for | | | more accuracy. | +-----------------------------------+------------------+----------------------------+ -| ``kite.vTracksReservedLocal`` | TypeInt | :cb:`3` | +| ``katana.vTracksReservedLocal`` | TypeInt | :cb:`3` | | +------------------+----------------------------+ | | cf. ``kite.hTracksReservedLocal`` | +-----------------------------------+------------------+----------------------------+ -| **Kite Parameters** | -+-----------------------------------+------------------+----------------------------+ -| ``kite.eventsLimit`` | TypeInt | :cb:`4000002` | +| ``katana.eventsLimit`` | TypeInt | :cb:`4000002` | | +------------------+----------------------------+ | | The maximum number of segment displacements, | | | this is a last ditch safety against infinite | | | loop. It's perhaps a little too low for big | | | designs | +-----------------------------------+------------------+----------------------------+ -| ``kite.ripupCost`` | TypeInt | :cb:`3` | +| ``katana.ripupCost`` | TypeInt | :cb:`3` | | +------------------+----------------------------+ | | Differential introduced between two ripup | | | cost to avoid a loop between two ripped up | | | segments | +-----------------------------------+------------------+----------------------------+ -| ``kite.strapRipupLimit`` | TypeInt | :cb:`16` | +| ``katana.strapRipupLimit`` | TypeInt | :cb:`16` | | +------------------+----------------------------+ | | Maximum number of ripup for *strap* segments | +-----------------------------------+------------------+----------------------------+ -| ``kite.localRipupLimit`` | TypeInt | :cb:`9` | +| ``katana.localRipupLimit`` | TypeInt | :cb:`9` | | +------------------+----------------------------+ | | Maximum number of ripup for *local* segments | +-----------------------------------+------------------+----------------------------+ -| ``kite.globalRipupLimit`` | TypeInt | :cb:`5` | +| ``katana.globalRipupLimit`` | TypeInt | :cb:`5` | | +------------------+----------------------------+ | | Maximum number of ripup for *global* segments,| | | when this limit is reached, triggers topologic| | | modification | +-----------------------------------+------------------+----------------------------+ -| ``kite.longGlobalRipupLimit`` | TypeInt | :cb:`5` | +| ``katana.longGlobalRipupLimit`` | TypeInt | :cb:`5` | | +------------------+----------------------------+ | | Maximum number of ripup for *long global* | | | segments, when this limit is reached, triggers| @@ -606,24 +591,8 @@ Appart from the obvious ``--text`` options, all can be used for text and graphic | `-c |--cell=` | The name of the design to load, without | | | leading path or extention. | +-----------------------------+------------------------------------------------+ -| `-g|--load-global` | Reload a global routing solution from disk. | -| | The file containing the solution must be named | -| | `.kgr`. | -+-----------------------------+------------------------------------------------+ -| `--save-global` | Save the global routing solution, into a file | -| | named `.kgr`. | -+-----------------------------+------------------------------------------------+ -| `-e |--edge=` | Change the edge capacity for the global | -| | router, between 0 and 1 (|Knik|). | -+-----------------------------+------------------------------------------------+ -| `-G|--global-route` | Run the global router (|Knik|). | -+-----------------------------+------------------------------------------------+ -| `-R|--detailed-route` | Run the detailed router (|Kite|). | -+-----------------------------+------------------------------------------------+ -| `-s|--save-design=` | The design into which the routed layout will | -| | be saved. It is strongly recommanded to choose | -| | a different name from the source (unrouted) | -| | design. | +| `-m |--margin=` | Percentage *val* of white space for the placer | +| | (|Etesian|). | +-----------------------------+------------------------------------------------+ | `--events-limit=` | The maximal number of events after which the | | | router will stops. This is mainly a failsafe | @@ -632,6 +601,15 @@ Appart from the obvious ``--text`` options, all can be used for text and graphic | | any design of `100K`. gates. For bigger | | | designs you may wants to increase this limit. | +-----------------------------+------------------------------------------------+ +| `-G|--global-route` | Run the global router (|Katana|). | ++-----------------------------+------------------------------------------------+ +| `-R|--detailed-route` | Run the detailed router (|Katana|). | ++-----------------------------+------------------------------------------------+ +| `-s|--save-design=` | The design into which the routed layout will | +| | be saved. It is strongly recommanded to choose | +| | a different name from the source (unrouted) | +| | design. | ++-----------------------------+------------------------------------------------+ | `--stratus-script=` | Run the Python/Stratus script ``module``. | | | See `Python Scripts in Cgt`_. | +-----------------------------+------------------------------------------------+ @@ -643,16 +621,7 @@ Some Examples : * Run both global and detailed router, then save the routed design : :: - > cgt -v -t -G -R --cell=design --save-design=design_kite - -* Load a previous global solution, run the detailed router, then save the - routed design : :: - - > cgt -v -t --load-global -R --cell=design --save-design=design_kite - -* Run the global router, then save the global routing solution : :: - - > cgt -v -t -G --save-global --cell=design + > cgt -v -t -G -R --cell=design --save-design=design_r Miscellaneous Settings diff --git a/documentation/_build/html/_sources/UsersGuide/index.txt b/documentation/_build/html/_sources/UsersGuide/index.txt index 7121510a..0f50174a 100644 --- a/documentation/_build/html/_sources/UsersGuide/index.txt +++ b/documentation/_build/html/_sources/UsersGuide/index.txt @@ -15,6 +15,7 @@ Printable version of this document `UsersGuide.pdf <../../../pdf/main/UsersGuide LicenseCredits.rst Releases.rst + DesignFlow.rst Installation.rst Configuration.rst ViewerTools.rst diff --git a/documentation/_build/html/_sources/etc/definitions.txt b/documentation/_build/html/_sources/etc/definitions.txt index 7329285c..e9fcc144 100644 --- a/documentation/_build/html/_sources/etc/definitions.txt +++ b/documentation/_build/html/_sources/etc/definitions.txt @@ -22,13 +22,17 @@ .. |bcenter| replace:: :raw-latex:`\begin{center}` .. |ecenter| replace:: :raw-latex:`\end{center}` .. |pagestylefancy| replace:: :raw-latex:`\thispagestyle{fancy}` +.. |lambda| replace:: :raw-latex:`$\lambda$` :raw-html:`λ` .. Acronyms & names. +.. |OS| replace:: :sc:`os` .. |GNU| replace:: :sc:`gnu` .. |LGPL| replace:: :sc:`lgpl` .. |GPL| replace:: :sc:`gpl` .. |UPMC| replace:: :sc:`upmc` +.. |SorbonneUniversite| replace:: :sc:`Sorbonne Université` +.. |SU| replace:: :sc:`su` .. |Bull| replace:: :sc:`Bull` .. |Cadence| replace:: :sc:`Cadence` .. |Si2| replace:: :sc:`Si2` @@ -38,6 +42,7 @@ .. |Flute| replace:: :sc:`Flute` .. |MacOS| replace:: :sc:`MacOS` .. |Darwin| replace:: :sc:`Darwin` +.. |RHEL| replace:: :sc:`rhel` .. |RHEL6| replace:: :sc:`rhel6` .. |RHEL7| replace:: :sc:`rhel7` .. |SL6| replace:: :sc:`Scientific Linux 6` @@ -46,6 +51,7 @@ .. |RedHat| replace:: :sc:`RedHat` .. |Fedora| replace:: :sc:`Fedora` .. |FC13| replace:: :sc:`fc13` +.. |EPEL| replace:: :sc:`epel` .. |Debian| replace:: :sc:`Debian` .. |Ubuntu| replace:: :sc:`Ubuntu` .. |MOSIS| replace:: :sc:`mosis` @@ -54,6 +60,7 @@ .. |Alexandre| replace:: :sc:`Alexandre` .. |Belloeil| replace:: :sc:`Belloeil` .. |Chaput| replace:: :sc:`Chaput` +.. |Chotin| replace:: :sc:`Chotin` .. |Chu| replace:: :sc:`Chu` .. |Clement| replace:: :sc:`Clement` .. |Dupuis| replace:: :sc:`Dupuis` @@ -78,6 +85,7 @@ .. |Coriolis| replace:: :sc:`Coriolis` .. |Coriolis1| replace:: :sc:`Coriolis 1` .. |Coriolis2| replace:: :sc:`Coriolis 2` +.. |alliance-check-toolkit| replace:: ``alliance-check-toolkit`` .. |VLSISAPD| replace:: :sc:`vlsisapd` .. |CRLcore| replace:: :sc:`CRLcore` .. |Cyclop| replace:: :sc:`Cyclop` @@ -86,6 +94,7 @@ .. |Mauka| replace:: :sc:`Mauka` .. |Etesian| replace:: :sc:`Etesian` .. |Knik| replace:: :sc:`Knik` +.. |Anabatic| replace:: :sc:`Anabatic` .. |Katabatic| replace:: :sc:`Katabatic` .. |Kite| replace:: :sc:`Kite` .. |Katana| replace:: :sc:`Katana` @@ -108,11 +117,15 @@ .. |devtoolset| replace:: :cb:`devtoolset` .. |boost| replace:: :cb:`boost` .. |Qt| replace:: :sc:`qt` +.. |PyQt| replace:: :sc:`PyQt` +.. |PyQt4| replace:: :sc:`PyQt4` +.. |PyQt5| replace:: :sc:`PyQt5` .. |tty| replace:: :cb:`tty` .. |svn| replace:: :cb:`svn` .. |git| replace:: :cb:`git` .. |rpm| replace:: :cb:`rpm` .. |gdb| replace:: :cb:`gdb` +.. |valgrind| replace:: :cb:`valgrind` .. |cmake| replace:: :cb:`cmake` .. |struct| replace:: :cb:`struct` diff --git a/documentation/_build/html/_sources/index.txt b/documentation/_build/html/_sources/index.txt index dfb158f6..128ae2b5 100644 --- a/documentation/_build/html/_sources/index.txt +++ b/documentation/_build/html/_sources/index.txt @@ -15,6 +15,7 @@ Contents: UsersGuide/index.rst PythonTutorial/index.rst Stratus/index.rst + ConfigurationTechnology/index.rst Hurricane/Hurricane.rst Viewer/Viewer.rst CrlCore/CrlCore.rst diff --git a/documentation/_build/html/defapi/defapi.html b/documentation/_build/html/defapi/defapi.html index c3ca3e03..6b7985e1 100644 --- a/documentation/_build/html/defapi/defapi.html +++ b/documentation/_build/html/defapi/defapi.html @@ -83,13 +83,18 @@
        34. Release 1.0.2049
        35. Release v2.0.1
        36. Release v2.1
        37. -
        38. Release v2.2
        39. +
        40. Release v2.2
        41. +
        42. Release v2.3
        43. +
        44. Complete Design Flow & Examples
        45. Installation
        46. 2. Setting up the Environment
        47. diff --git a/documentation/_build/html/etc/definitions.html b/documentation/_build/html/etc/definitions.html index d3931e18..becc3729 100644 --- a/documentation/_build/html/etc/definitions.html +++ b/documentation/_build/html/etc/definitions.html @@ -81,13 +81,18 @@
        48. Release 1.0.2049
        49. Release v2.0.1
        50. Release v2.1
        51. -
        52. Release v2.2
        53. +
        54. Release v2.2
        55. +
        56. Release v2.3
        57. +
        58. Complete Design Flow & Examples
        59. Installation
        60. 2. Setting up the Environment
        61. diff --git a/documentation/_build/html/genindex.html b/documentation/_build/html/genindex.html index ae5a7b30..884cfb5f 100644 --- a/documentation/_build/html/genindex.html +++ b/documentation/_build/html/genindex.html @@ -82,13 +82,18 @@
        62. Release 1.0.2049
        63. Release v2.0.1
        64. Release v2.1
        65. -
        66. Release v2.2
        67. +
        68. Release v2.2
        69. +
        70. Release v2.3
        71. +
        72. Complete Design Flow & Examples
        73. Installation
        74. 2. Setting up the Environment
        75. diff --git a/documentation/_build/html/index.html b/documentation/_build/html/index.html index 45dbf04e..7338e4c3 100644 --- a/documentation/_build/html/index.html +++ b/documentation/_build/html/index.html @@ -82,13 +82,18 @@
        76. Release 1.0.2049
        77. Release v2.0.1
        78. Release v2.1
        79. -
        80. Release v2.2
        81. +
        82. Release v2.2
        83. +
        84. Release v2.3
        85. +
        86. Complete Design Flow & Examples
        87. Installation
        88. 2. Setting up the Environment
        89. diff --git a/documentation/_build/html/lefapi/lefapi.html b/documentation/_build/html/lefapi/lefapi.html index fbe042aa..dbc8ed23 100644 --- a/documentation/_build/html/lefapi/lefapi.html +++ b/documentation/_build/html/lefapi/lefapi.html @@ -83,13 +83,18 @@
        90. Release 1.0.2049
        91. Release v2.0.1
        92. Release v2.1
        93. -
        94. Release v2.2
        95. +
        96. Release v2.2
        97. +
        98. Release v2.3
        99. +
        100. Complete Design Flow & Examples
        101. Installation
        102. 2. Setting up the Environment
        103. diff --git a/documentation/_build/html/lefdef/lefdef.html b/documentation/_build/html/lefdef/lefdef.html index aba01ce3..b77dea74 100644 --- a/documentation/_build/html/lefdef/lefdef.html +++ b/documentation/_build/html/lefdef/lefdef.html @@ -82,13 +82,18 @@
        104. Release 1.0.2049
        105. Release v2.0.1
        106. Release v2.1
        107. -
        108. Release v2.2
        109. +
        110. Release v2.2
        111. +
        112. Release v2.3
        113. +
        114. Complete Design Flow & Examples
        115. Installation
        116. 2. Setting up the Environment
        117. diff --git a/documentation/_build/html/objects.inv b/documentation/_build/html/objects.inv index 63cb1e71defc018ff1f00d159c51aca58bec5d3f..7a7e06fe7481a1374c1328268a5be58a844d569c 100644 GIT binary patch delta 1623 zcmV-d2B`V+47?4Hcz;-JZ`(Ey{_bDFp+L5xm4&2Rw*|w1)Op3yE{L7><3LNaO@tu@ zl1l4;zoU+%D9Q5T?n5h!_uO;5le?|mC^@UD{QQHOTPjN` zlw{M5eG;#Dc}(7c#!OIS$eA&!;MB5`Tr*lSO)j}$69*_70Do-(8w9KXaDcsrCTnRj zq{$kZ7i{EYxRL+618@3dXxiI+e^5N%k!*4%VQHP?qtPx^;dDEKMuS|}TJwTR7U1`6 z#Wa%zo6MA4@pY}Kymi!=D*h&?Ur0 zts-hN(_*GH%l)&%)D?Nc`&-fg+hc7{JpM{)c8GhKl5qV+EnR}AMIL{pTsy?b)uIzF z$dTOr*I@{YUeAeJmA|zz8=m7MRqF^))q`5)wvf60__Nm9fPri|1D{Osg32s2=np*`QA^-g)C@gY5}p3YXXvl;6_@lN(kR*_)|n| zA?aem_J4^!jdBh~Yxmh@RnkRbH*X_D=3jj1pbvuynK`B8 z1n`6s-a$|6iTbsN;@oZh?CypvYO6G-!ZU`~{H%PYkmTh;RlG1m{t+Nr`+Z8nGQsse z{fr6miCNdKz$aQ8qyb_B!A1uE#0cx4s5RNywJSbYb;>mVKjwE zi9t&wy(~j0=Or**|%?xh>ai~`^I-M$ZHXg-lO|w z?td8-=gjc+-ZM#1vCREYLAWFu#N$(@DzO1{U z2eV@4Ty#}4@q~R(9waZ6mbrhXgnvB| zQU+W*l)2rRW^dzD*%&5_(3(S*n86@^<7$h71h4jl1$)M&P+v#Pw19R@7Ys&G6p%*s zh+KT5Zr!BZH_})t#6Bld2=b>ZDcLPA;LCu`G%I=cGh!6vH|#Zzh?l0U_e?MtS;qK+ z*w-Sy!E9r@j^e#*?nDjUaEz-9@_z}6Z3%7}rdPCJWTkX6@Z|ACQ){0&`^vOyzhkBn zgpa}10%o!W+>=+DR(S11qbc{G82YkaqID_?&3fx8Nk@PT9@J((^(~BSmxl*z1GK_6pnuVsup06m zeoh8)PY_?2C=`t6(E3B%A>@Fo-L%uh;fIMpSH!@_jsOX72R?!n{K)aq({2S(J9klv z-MpoNHoL>$YMTWCGJM2tjGk9p!Iv-$ZT}HmK2}@1t=Lbm5BR%JB*R=^v>KETwQ8(kQ?-28r z9_IXsVQzZtTER7cU!nZYT}*B|hOcp$V_|C7FW(vHWr?0^9<%t`u&%g(m=H^shq0nw z=JXuvCDJVDvSEe5SMYVAzJoZbM(&$P7U%`t0?E-@9Zrv`*;+;VTTmpsQZ2nwkKe%z zS}m!g2z=7d8wXQ*#mE{4mq2Wo|Asr9I;uwUc_eG;o6j@zJ?yBNkb5e}{fzg<5tMVd V|6at5dKqec4kQg=@-H;OgBLmXHiZBH delta 1549 zcmV+o2J-p54e|_-cz>8tZ`(EyfZzQqI26cQw6c(N>$YGRkUD7^EbW5WX&(n#qHUry zDUeiJ|N9+vBt=P<8+Q+_ZQk8?$J6n6%IoPVF}6GxbjbwCPRZTQZj_u=Ret$a%`KHB z6-u({#%{$kUY?TIU@;Ta7;<5ZDmb;QB<~q5nI`YJU=ycMG=B=TRoI}y3KWj;*I=?1 zlOZN+Fi!~NY#7M@jljD;8@l#B-yD_C*Cd-SpC4@CJo~dmGx*H}9e`I7qm#`PLidvJI7Bi(;?ms)EuE+!LZ%L!r zM$rZszonQx;(y-864u|;(j~RL$m6$^wMUGsRy$#F%X0T$hY%LMofEev|7c}4JjajJ ztRp~Euhbg1&mFS6;_F&NKuV^V5fucUP03qoU<ur*{F3W&@;&@YS>snMiU zXYV=FR2Q4wes`$`di!NcX4EipMl#YGLur62xnvs3rGLbVXJ#@|(xbk5RS%~Jot=WS zg#U`Pim8v~!w7l#fV?+TawQ8|nOZ?%^5-yh|`?eq3 zi27#_#ecaA{o?M1ENZJXr@|A%&-|i%q)_DLLRGvlL;i>&di!Ha!ZN}2K7Pi8_{gkl zSFkH-4>;(n#tMTY;!1(~^k^twP$gMLZs|_dcHnbu=Y{6gL1#fHK8)rdQex0j*HSh; z)o!$^*Ber-hkle0tSPEPc}uk70sTNFuR@8t&3~9z1h#IlC4>YFl6fT`xmI#}IFE@| z>_2m68((z=8)76;>H9c*#P+HkI%m-UwkNnb6t~xijUYbujqhSm*CIZ8uibZZU$ zhOZAklSC^X^Uq2*{#AK^V)~7F&5?6A~B|Ah4yiF@OJxoD397eLuIpZs`m%07 z4`xp&chp*@yVcc~Atq|VL8ze-?!^tBKu6Gx=RBNQxc91N019zW9waZ6mbw2-fjto- zgI+tMx#&z2+xU<+rV}P=&7n#R>Dr$_SA(NQL4r4ZLb;K~QXvjGN>$KLx{|_fd4B=J zJez4&^6un6s^kOr7AM3@Q|dhv45o}RUJ(29g1=xKu`nAZYIs$eJ5fUe8)J2qd=cSk zhl_#f6)hN9DV@wHdCYq1?GtBTnRXp>%vGY{b8x+YF=_!<+qI?@-W1Vk${rMKU)C#z zPSvAZ?>&Wd1W52oZG}?bX5jrgjb_58#9qbXLu#X%+de*HVTIViHvE#NFXoY+BTkWzSK*9&?n18tQYA5&- z=9k^Sg3B+}&h9Gq{KXM}S%`qF1&|E5&C%lVXhHglP_|>mwdagJLr@k$nN?W?J^cXt zcyN9;?qY?Jc{Gsz2@X+sbBHE$=2zcXQ8$yT4`klrVT7L;<_5#A7hLmq56bV{CF2HP zc+rLt6$Wzs^vJ+2OYB^enSaHf4Ryr@q=#6#JdTQXnX_}$cZgZgWkZDrRKbgb`T=k> zjqIBU3wS|y06AH!_@y`PT<&wd-6$Sw9C-yQ-CxIlLr3)p5ORh9Ig7M diff --git a/documentation/_build/html/search.html b/documentation/_build/html/search.html index 381f437e..ffe85a26 100644 --- a/documentation/_build/html/search.html +++ b/documentation/_build/html/search.html @@ -81,13 +81,18 @@
        118. Release 1.0.2049
        119. Release v2.0.1
        120. Release v2.1
        121. -
        122. Release v2.2
        123. +
        124. Release v2.2
        125. +
        126. Release v2.3
        127. +
        128. Complete Design Flow & Examples
        129. Installation
        130. 2. Setting up the Environment
        131. diff --git a/documentation/_build/html/searchindex.js b/documentation/_build/html/searchindex.js index e145d7aa..37240a83 100644 --- a/documentation/_build/html/searchindex.js +++ b/documentation/_build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({envversion:49,filenames:["Analog/Analog","Contents","CrlCore/CrlCore","Hurricane/Hurricane","Katabatic/Katabatic","Kite/Kite","Oroshi/Oroshi","PythonCpp/Configuration","PythonCpp/DBoHierarchy","PythonCpp/DBoStandalone","PythonCpp/DbU","PythonCpp/Introduction","PythonCpp/Name","PythonCpp/NonDBo","PythonCpp/index","PythonTutorial/AdvancedTopics","PythonTutorial/CellNetComponent","PythonTutorial/CgtScript","PythonTutorial/Collections","PythonTutorial/Environment","PythonTutorial/Introduction","PythonTutorial/Netlist","PythonTutorial/RealDesigns","PythonTutorial/ToolEngines","PythonTutorial/definitions","PythonTutorial/index","PythonTutorial/pdfHeader","RDS/RDSpage","RDS/index","Stratus/Developper","Stratus/DpGen","Stratus/Language","Stratus/Patterns","Stratus/index","Unicorn/Unicorn","UsersGuide/Configuration","UsersGuide/Installation","UsersGuide/LicenseCredits","UsersGuide/Releases","UsersGuide/ScriptsPlugins","UsersGuide/ViewerTools","UsersGuide/index","Viewer/Viewer","defapi/defapi","etc/definitions","index","lefapi/lefapi","lefdef/lefdef"],objects:{},objnames:{},objtypes:{},terms:{"005\u00b5m":27,"01\u00b5m":46,"09\u00b5m":27,"0b0001":30,"0b000111":30,"0b0010":31,"0b0110":31,"0b10":31,"0b1001":31,"0b1010":30,"0b1100":30,"0b1110":31,"0b1111":30,"0x0000ffff":30,"0x14":31,"100k":40,"150k":40,"180nm":35,"18\u00b5m":27,"1\u00b5m":27,"2\u00b5m":27,"32b":36,"32x32":40,"45nm":[19,22],"64b":36,"abstract":8,"boolean":[1,9,29],"case":1,"catch":9,"char":9,"class":[1,7],"const":[30,31],"default":[8,19,27,29,30,31,32,35,36,39,40,46],"else":30,"export":[7,8,9,20,36,38,39],"final":[16,27,36,40],"float":[16,32,35],"function":[1,7,8,9,10,11,13],"goto":40,"import":[8,9,11,16,20,21,22,23,30,31,35,37,38,39,40],"int":13,"long":[10,20,40],"new":[8,9,13],"null":[8,9,10,11,13,30],"public":[20,38],"r\u00e9my":37,"return":[8,9,10,11,13,16,17,18,20,21,23,30,31,35,39,40],"short":11,"static":[8,9,10,11,13,20,22,30,36],"supp\u00e9rior":39,"transient":[16,46],"true":[16,17,19,21,23,27,29,30,31,35,39,40],"try":[16,31,35,40],"void":[8,9,13,20],"while":[10,16,18,20,21,40,46],__add__:29,__and__:29,__c:[8,9,11,13],__div__:29,__geslice__:29,__getitem__:29,__init__:29,__invert__:29,__le__:29,__main__:39,__mul__:29,__name__:39,__or__:29,__python_module:11,__python_module__:[8,11,13],__str__:20,__xor__:29,_add:29,_alia:29,_and:29,_ariti:29,_baseobject:8,_bl:39,_br:39,_buff:29,_chip:39,_clock:[35,39],_comp:29,_db:29,_direct:29,_div:29,_ext:29,_h_type:29,_hur_cel:29,_hur_inst:29,_hur_mastercel:29,_hur_net:29,_ind:29,_insref:29,_lib0:29,_map:29,_model:29,_mult:29,_mux:29,_name:[29,32],_nb_alims_vertical:29,_nb_inst:29,_nb_pin:29,_nb_vdd_pin:29,_nb_vss_pin:29,_not:29,_object:[8,9,10,13],_or:29,_param:29,_plac:29,_px:35,_pyobject:8,_real_model:29,_real_net:29,_reg:29,_shift:29,_st_cell:29,_st_ck:29,_st_inst:29,_st_mastercel:29,_st_merg:29,_st_port:29,_st_sig:29,_st_vdd:29,_st_vsss:29,_stim:31,_sym:29,_tab_nets_cat:29,_tab_nets_out:29,_tl:39,_to_cat:29,_to_merg:29,_tr:39,_type:29,_undercel:29,_xor:29,a2_1:[21,23],a2_2:[21,23],a2_x2:[21,23,31],abc:38,abil:31,abl:[11,17,20,22],about:[1,9],abov:[9,16,17,31,35,36,40],absolut:[13,16,32],abtument:31,abut:[16,21,23,31,39,40],abutmentbox:31,accept:[32,40],access:[8,18,21,31,32,36,38,40],access_class:8,access_object:8,accessor:9,accomod:39,accord:[27,35,39,40],accordingli:11,account:40,accross:11,accumul:32,accur:38,accuraci:40,achiev:38,acknowledg:30,across:[27,35,40],act:7,action:40,activ:[17,27,40],actual:[27,30,32,40],adapt:[19,39],add:[1,9,17,21],add_python_modul:[7,11],add_sub:30,addaccu:1,addd:31,added:38,adder:[30,31],adder_8:30,adding:9,addit:[19,30,31,35,40],addition:31,additionn:1,addmode:35,addpat:1,address:30,addtyp:[8,9],adjac:[15,39],adopt:16,adr:30,advis:40,adw:30,affect:1,affect_ani:1,affect_fix:1,affect_int:1,affili:38,after:[9,16,17,21,22,23,29,31,32,36,39,40],afterward:30,again:[8,9,19,22,36],against:[9,11,22,36,40],ago:11,aim:[20,38],alc_env:36,alexandr:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],algorithm:[18,38,40],alia:[19,29,31,36],alias:40,alim:31,alimconnector:31,aliment:[1,29],alimhorizontalrail:31,alimverticalrail:31,all:[9,11,15,16,18,20,21,23,27,29,31,32,35,36,37,38,39,40],allianc:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27],alliance_top:35,allianceconfig:35,alliancetop:35,alloc:[9,20,40],allow:[9,15,16,18,21,27,30,31,32,35,40],almost:[8,19,35,39,40],alon:16,along:[13,40],alpha:38,alphanumer:31,alreadi:[11,18,25,26,31,35,40],also:[5,16,18,20,21,22,27,31,36,40],altern:[35,38,40],alternat:36,although:[27,38,40],alu1:[27,31],alu2:31,alu3:31,alu4:31,alu5:31,alu6:31,alu:31,alux:27,alwai:[9,11,21,30,31,32,40,46],am2901:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38],amd2901:39,amd2901_crl:39,amd2901_crl_chip:39,amd64:36,amend:35,among:16,amount:[30,46],amp:37,ana:5,anabat:[4,23],analysi:40,analyt:[38,40],and2:[30,31],and2_8:30,and3:30,and3_16:30,and4:30,and4_2:30,anded:30,ani:[11,13,16,17,18,19,20,21,22,27,31,32,36,39,40],anneal:[38,39],anonym:18,anoth:[1,11,22,29],another:11,ansi:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],anti:40,any:40,anymor:27,anyth:[35,39,40],anywher:40,apach:[43,46,47],api:[0,1,2,3,4,5,6,7,8,9,10,11,12,13],appart:40,appear:[9,21,40],append:[18,31,35,39],appertur:40,appli:[11,21,27,30,31,32,35],applic:40,appropri:[9,31],approx:40,architectur:1,archiv:22,area:[21,23,27,35,40],arg0:[9,10,13],arg1:[9,13],arg:[8,9,10,11,13,31],argument:[1,8,9,10,16,17,21,29,30],arith:31,arithmet:[1,29,30],ariti:[29,31,32],army:40,around:[10,23,31,39,40],arrow:40,art:40,articul:[16,21],aside:[35,39],asign:32,asim:[31,36],asimut:31,ask:[21,27],aspect:[11,23,35,40],aspectratio:[23,35,40],assembl:35,assign:40,assignment:40,associ:[7,8,9,11,13,21,27,40],associat:[1,8],assum:[22,25,26,40],assume:21,asymetr:27,attempt:10,attribut:[1,8,13,20],author:31,autocmd:31,automat:[19,23,29,31,32,36,39,40],automaticali:31,autotool:36,auxsc35:40,avail:[0,2,3,4,5,6,11,16,19,31,34,35,36,38,42,43,46,47],avala:[38,40],avoid:[21,27,40,46],avot:32,awar:[21,27,30,36,40],axi:27,back:[31,38],background:40,backquot:19,bad:8,balanc:40,base:[1,4,5],bashrc:[19,36],basi:30,basic:1,basiclay:40,bdo:13,becaus:[8,17,23,27,36,38,40],becom:[8,20,31,39,40],bee:[31,40],been:[9,11,16,17,18,20,21,29,30,31,35,38,39,40],befor:[17,21,29,31,32,36,40,46],before:32,beforehand:40,begin:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,46,47],behav:30,behavior:[9,11,13,29,30,31],behaviour:40,belloeil:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,29,30,31,33,34,35,36,37,38,39,40,41,42,43,44,46,47],belong:[16,31,35,46],below:[9,11,20,21,23,27,29,31,35,36,39,40],benchmark:40,bend:27,best:[13,40],better:21,between:[11,15,20,21,27,30,31,32,35,39,40],bewteen:21,big:[27,31,40],bigger:40,biggest:21,biggestarea:21,bigvia:27,biject:21,bin:[16,21,23,31,36],binari:[31,32,36,40],bind:35,bit:[27,29,30,31,40],black:[19,35],blif:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21],blink:40,blob:38,block:[11,20,30,39],blockag:[27,35],blockage:35,bluntli:13,blur:40,boil:27,bood:31,boost:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],booth:31,bootstrap:36,borrow:11,botch:1,both:[16,23,27,29,31,35,36,39,40],bother:9,bottom:[27,31,39],bound:[35,40],bourn:19,box:11,brace:20,branch:1,breakpoint:16,bring:11,brows:[35,40],buf:31,buf_x2:39,buff_32:30,buffer:[1,29,30],bufnewfil:31,bufread:31,bug:[19,35,38,40],build:[1,7,9,11,16,21,27,35],buildfulladd:[21,23],buildinvertor:[16,17],bull:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],bunch:9,bundl:36,buri:15,buse:[29,31],buse_8:30,buss:30,button:40,bzip2:36,c2r:[19,36],c30:30,c31:30,c_temp:31,c_x_n:27,c_x_p:27,ca2:[31,32],cach:39,cad:31,cadenc:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],calcul:[31,32],call:[8,9,10,11,13,16,17,18,19,20,21,22,23,29,30,31,32,36,39,40,45],callback:45,calu1:31,calu2:31,calu3:31,calu4:31,calu5:31,calu6:31,calu:31,calux:27,camel:9,can:[8,11,15,16,17,18,19,20,21,22,23,27,30,31,32,35,36,38,39,40,46],candid:21,cannot:[11,16,20,21,27,30,40],capabl:[11,35,36,39,40],capac:40,capacitor:30,capit:9,captur:1,care:[11,23,31,39,40],carry_1:[21,23],carry_2:[21,23],cast:[8,9],cat:31,catal:35,catalog:[16,18,21,23,35],catchcor:[19,35,40],categori:40,caus:[19,36],cbug:40,ccb:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],cdebug:40,ceil:30,cell:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],cell_1:31,cellnet:18,cellstop:35,cellview:[17,40],center:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,31,33,34,35,36,37,38,39,40,41,42,43,44,46,47],centerend:27,cerr:[8,9],certain:[13,32],cfg:35,cgt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16],ch_htree_bl_tl:39,cham:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],chang:[8,13,20,21,30,31,35,38,39,40],chaput:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],charact:[30,35],check:[22,30,31,40],checkbox:40,checker:27,checkout:36,chip:[1,31],chmod:31,choic:1,choos:[9,31,40],chosen:[29,31],chotin:32,chri:[36,37],christian:37,christoph:37,chu:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],cif:27,cin:[21,23,31],cinfo:40,circuit:1,circular:31,circumv:40,ck_htree:39,ck_htree_bl:39,ck_htree_bl_bl:39,ckin:[29,31,32],ckok:30,clariti:[8,16],class_nam:31,classic:[11,19,35],clean:35,cleaner:21,cleanli:9,clear:[13,39,40],clearer:31,clement:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],click:40,clock:[1,29,30,31,35],clocktre:[35,39],clone:[19,36,40],close:[9,16,17,20,21,23,35,39,40],closer:31,clue:11,cluster:40,cmake:[0,1,2,3,4,5,6],cmd0:31,cmd1:31,cmd2:31,cmd:[30,31],cmo:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],cnchu:37,cobject:10,code:[8,9,11,13,16,19,20,21,35,38,39],coher:[20,40],collect:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],collector:20,coloquint:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],color:31,com:[36,43,46,47],combin:[21,36],come:40,command:[1,31,36,39],commit:36,common:[9,11,27,30,31,35,38,39,40],commpos:40,commun:[9,11,13],comp:8,compar:32,comparaison:31,comparison:[1,29],compat:36,compatibilti:38,compil:[11,36,40],complement:[30,32],complet:[7,9,11],completli:[11,16,38,40],complex:[11,27],compliant:36,compnent:40,compon:[1,8,11,15],compos:[21,40],compris:40,comput:[11,16,21,30,31,32,35,39,40],concaten:31,concept:[16,20,21,25,26],conceptor:[29,31],concret:[8,31],conditionn:30,conf:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],configur:1,confus:21,congest:40,conjunct:40,connect:[16,20],connectmap:31,connector:[1,16,27],connexion:[15,20,21,29,31],consecut:39,consequ:[8,21,27,38,46],consid:[7,21,27],consist:36,const_0x0000ffff:30,constant:[1,27,30],construct:[13,20,21,31],constructor:[9,11,13],constructorerror:[9,11,13],constval0:30,constval1:30,constval2:30,constval3:30,constval:30,cont_body_n:[27,31],cont_body_p:[27,31],cont_dif_n:[16,27,31],cont_dif_p:[16,27,31],cont_poly:[16,27,31],cont_turn1:31,cont_turn2:31,cont_turn3:31,cont_turn4:31,cont_turn5:31,cont_turn6:31,cont_via2:27,cont_via3:27,cont_via4:27,cont_via5:27,cont_via:27,cont_viax:27,contact1:21,contact2:21,contact:[8,11,16,21,27,31,40],contain:[7,11,16,17,18,19,20,22,27,31,32,35,36,38,39,40],contdifn:16,contdifp:16,conterpart:[4,5,27],contest:40,context:39,contpoli:16,contributor:37,control:[1,11,20,21,27,30,31],conveni:9,convent:[11,16],convers:[1,9,16,18],convert:[9,10,13,16,20,27,32],coodin:31,coordin:[16,20,21,27,29,31,40],copi:[13,20,31,36,40],copuupseg:31,copyright:[37,43,46,47],copyupseg:1,copyupsegmentseccopi:31,cordin:31,core:1,corioli:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,31,33,34],coriolis2:[7,16,19,21,23,35,36,38,39],coriolis_install:19,coriolis_top:19,coriolisconfigur:35,coriolisenv:[1,19],coriolisinit:35,corner:[16,21,27,31],correct:[31,40],correctli:[23,31],correspond:[29,31,32,40],corrioli:36,cost:40,cougar:27,could:[18,20,31,35,39,40],count:[11,39,40],coupl:40,cours:20,cout:[18,21,23,31],cover:27,cpp:[7,9,11],craft:39,crash:[36,40],creat:[7,8,9,11,13],createcel:[16,17,21,23],creation:[1,16,20,21,23,29],credit:1,crl:[0,1],crl_cata_lib:31,crlcore:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],crude:40,csh:36,ctrl:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],cumbersom:11,current:[16,23,31,32,35,36,39,40],cursor:40,cwd:35,cycl:32,cyclop:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],cygwin:36,damien:37,dangl:11,darwin:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],data:[1,30],databas:[9,11,16,18,20,21,29,38,40,46],database:46,datain0:30,datain1:30,datain:30,dataout:30,date:32,dbit:31,dbo:1,dbodeletemethod:[8,9],dbodestroyattribut:[8,9],dbolinkcreatemethod:[8,9,13],dbu:1,debian:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],debug:[17,36,40],decim:31,declar:[1,9,16],declar_interfac:1,decod:30,decor:40,decreas:40,dedic:[8,20,31],deep:38,deeper:8,deepli:[15,40],def:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,30,31,32,33,34,35,36,37,38,39,40,41,42],defab:1,defaultstyl:[19,35],defaultvalu:35,defin:[7,8,9,11,13,16,27,29,30,31,32,35,38,39,40],define:27,definit:[7,8,9,19],degre:31,delet:[9,11,13,18,20,29,35,40],delta:[27,31],demot:27,denser:40,densiti:[35,40],depend:[7,27,31,36,38,39],deplib:7,depth:40,deriv:1,derivedobject:8,describ:[22,27,31,32,35,39],descript:[1,8],descrob:31,design:1,design_kit:40,desir:31,despit:35,destroi:[8,9,13,18,20],detail:[1,16,19,21,23,35,38],detector:30,deterior:31,determin:9,determinist:40,devel:1,develop:[23,36,40],developp:1,devic:40,devtoolset2:36,devtoolset:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],dff:39,dff_4:30,dfft_4:30,dialog:40,dict:[18,31],dictionari:[9,18],dictionnari:[9,17,29,31,39],did:[11,22,40],differ:[8,13,18,21,27,29,30,31,35,40],differenti:40,diffus:27,digit:[23,31],digitalinit:23,dimens:[27,31,40],direct:[8,9,11,13,27,29,31,32,35,40],directdeletemethod:13,directdestroymethod:13,directgetlongattribut:[8,10,13],directionn:13,directli:[11,17,20,22,23,32,36,39,40],directori:[1,16,19,21,22,23,31,35],directsetlongattribut:[10,13],disabl:[20,32,40],disambigu:27,disclaim:1,disconnect:21,discrep:22,diseappear:27,displac:40,displai:[9,21,35,40],display:40,distanc:[22,27,46],distinguish:[27,40],distribut:[36,38],disturb:39,ditch:40,divid:32,divis:31,dksdir:22,dl_export:[8,9],dobreak:[16,17,21,23],doc:[13,16,21,23,31,36],dochip:39,document:[11,14,15,20,21,25,28,31,33,35,36,38,39,40,41],docutil:36,doe:[9,31],doesn:[31,40],dogleg:40,don:[9,19,20,36,39],done:[9,16,31,35,40],dosometh:[20,39],dot:[38,40],dotfil:37,doubl:11,down:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,31,33,34,35,36,37,38,39,40,41,42,43,44,46,47],download:40,doxygen:[0,2,3,4,5,6,34,36,39,42],dozen:40,dp_sxlib:35,dpgen:1,dpgenadsb2f:1,dpgenand2:1,dpgenand3:1,dpgenand4:1,dpgenbuff:1,dpgenbus:1,dpgenconst:1,dpgendff:1,dpgendfft:1,dpgenfifo:1,dpgeninv:1,dpgenmux2:1,dpgennand2:1,dpgennand2mask:1,dpgennand3:1,dpgennand4:1,dpgennbus:1,dpgennmux2:1,dpgennor2:1,dpgennor2mask:1,dpgennor3:1,dpgennor4:1,dpgennul:1,dpgenor2:1,dpgenor3:1,dpgenor4:1,dpgenram:1,dpgenrf1:1,dpgenrf1d:1,dpgenrf1dr0:30,dpgenrf1r0:30,dpgenrom2:1,dpgenrom4:1,dpgensff:1,dpgensfft:1,dpgenshift:1,dpgenshrot:1,dpgenxnor2:1,dpgenxnor2mask:1,dpgenxor2:1,dpi:40,drain:27,draw:[16,27,40],drawn:40,drc:27,drive:[30,39],driven:35,drop:[36,38],druc:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,31,33,34,35,36,37,38,39,40,41,42,43,44,46,47],due:[35,40],dumb:35,dummi:[19,35,36,39],dump:[18,38,40],duplic:31,dupui:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],dure:[32,40],durole:37,dx1:31,dx2:31,dy1:31,dy2:31,dyld_framework_path:36,dyld_library_path:19,dynam:[11,20,30,36],dynamic_cast:8,each:[9,11,13,21,27,29,30,31,32,35,39,40],eas:[17,35],easi:31,easier:[27,29,31],easiest:36,easili:[20,35,40],east:[31,39],ec322005072076ef53984462fb4a1075c27c7dfd:36,edg:[27,39,40],editor:[1,16,17,21,23,27,29],edu:37,effect:[30,32,40],effort:[23,35,40],egin:32,ego:17,eight:31,either:[9,27,30,31,32,36,39,40],el7_64:36,electr:20,electric:27,element:[16,18,29,40],elif:31,els:[8,9,11,13,31,35],emit:9,empti:[30,40],emul:[9,36],enabl:[30,40],encapsul:[1,8,9],encompass:11,encount:[36,46],end:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,46,47],endif:[8,9,11,13],endl:[8,9,18],endswith:[18,35],enforc:21,eng:37,engin:23,engineloadgrbynet:23,enginenonetlayerassign:23,enough:[21,31,39],enrich:20,ent:8,enter:40,entir:11,entiti:8,entitycast:8,entri:[19,35,39,40],enumer:[31,35],env:31,envelop:31,envenli:40,environ:[1,16],eplac:40,eponym:40,equal:[30,31,40],equival:[20,21,31,40,46],eras:[39,40],error:[1,8,9,11,23,30],esc:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],escap:40,escassut:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],especi:16,essai:31,etc:[16,19,31,35,36,39],etesian:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22],etesianengin:23,eval:[19,36],even:[21,27,30,38,39],evenli:40,event:[32,36,40],eventslimit:40,ever:18,everi:[9,29,31,35,40],everybodi:23,everyth:[9,35,40],evolv:36,exacltli:27,exact:[16,36,39],exactli:[17,27,36,39,40],exampl:[1,7,8,9,10],except:[9,16,29,31],excess:40,execut:1,exempl:[29,31,40],exist:[18,19,31,35,40,46],exit:[39,40],expand:27,expansion:31,expect:[10,21,35,39],expens:10,experi:40,explain:21,explan:[16,40],explanat:27,explanatori:[9,20],explicit:[10,16,21],explicitli:20,expor:40,expos:[9,11,18],exposur:11,express:[16,20,22,27,31,35,40,46],ext:27,extand:31,extend:[27,29,31],extens:[1,16,17],extent:[35,39,40],extern:[8,9,11,13,16,20,21,29,31,39],extra:[35,40],extract:[9,32],extractor:27,extreme:35,face:31,facil:1,fact:[8,11],factor:[38,40,46],fail:[8,9],failsaf:40,failur:40,fairli:40,fals:[8,9,19,29,30,31,35,40],familiar:[11,25,26],fanci:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],far:[11,28],fashion:11,fast:[35,36,40],fc13:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],fc_64:36,featur:40,fedora:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],feedthru:40,feel:20,fgr:40,fhs:36,field:[8,9,13,40],fifo:30,fifo_4_16:30,figur:[27,31,40],file:1,file_nam:31,filenam:[31,32,35],fillcel:1,filler:21,filler_1:21,filler_2:21,filter:[1,21],find:[21,31,35,36],fine:40,finger:40,finish:[16,29,31],first:[1,7,9],fit:[16,17,21,23,31,40],five:27,fix:[1,16,27,32],flag:[16,20,21,23,27,30,40],flatten:[15,39,40],flavor:[9,13],flip:30,flop:30,flow:[31,40],flute:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],fly:21,follow:[7,8,9,11,16,20,27,30,31,32,35,36,39,40],fonction:31,footprint:40,forc:[9,32,39,40],forget:19,forgotten:31,form:[31,35,40],format:[22,31,32,38,40],found:[11,16,21,23,31,35,36],founder:27,foundri:[16,27],four:[9,27,30,39,40],fourth:30,framework:[16,18,21,23,36,38],franck:27,free:[23,40],freebsd:36,freed:20,freedpk:19,freepdk45:22,freepdk:22,freepdk_45:19,from:[8,9,10,11,13,16,18,20],fromlambda:[16,20,21,23],full:30,fulladd:[21,23,31],fulli:[16,23],fuse:[16,20],futur:11,gabriel:37,gap:40,garbag:20,gate:[27,30,40],gaug:[27,35,40],gcell:40,gdb:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],gdsii:40,gener:[0,1,2,3,4,5,6],generic_method_head:[8,9,13],genlib:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],geometr:[27,31,39],get:[9,10,11,15],get_cata_lib:29,getcel:[8,9,18,21,23],getcompon:18,getdb:[16,21],getenv:35,getheight:8,getlay:[16,21],getmasternet:21,getnam:18,getnet:[8,18,21,23],getobjectid:[9,13],getplug:[21,23],getrefxy:1,getstr:[20,40],gettechnolog:[16,21],getwidth:8,getx:[8,10,13],gety:[8,13],ghdl:31,gigant:11,git:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],github:36,give:[7,8,16,27,29,30,31,38,40],given:[8,9,11,16,17,21,27,29,30,31,32,35,36,40],global:[1,9,21,27,35,38],globallengththreshold:40,globalripuplimit:40,gnu:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],goal:20,goe:11,good:[7,40],gouvin:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],gpl:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],graal:27,graphic:[1,19,35,36,38,39],great:39,greater:[31,38],grew:40,grid:[1,16],ground:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,29,30,33,34,35,36,37,38,39,40,41,42,43,44,46,47],group:[20,38],gscl45nm:22,guarded:30,gui:36,guid:1,hack:1,had:27,halfadd:31,hand:27,handl:[16,31],hard:[30,35],has_kei:[16,17,21,23,35,39],hasn:40,have:[8,9,11,13,16,18,20,21,23,27,29,30,31,32,35,36,38,39,40,46],haven:31,hcatch:[8,9,10,11,13],head:1,header:1,hecadecim:31,height:[8,11,27,31,40],help:[17,36],helper:[1,9,19],here:[0,2,3,4,5,6,9,11,21,22,27,32,34,35,36,40,42,43,46,47],herit:29,hesit:39,hexa:31,hexadecim:[31,32],hidden:38,hide:40,hierach:31,hierarchi:1,high:[23,35,40],highest:40,highlight:1,highlit:40,himself:[29,31],histor:27,hmeti:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],hoc:[38,40],hold:[8,11,16,40],holder:15,hole:27,home:[17,22,31,35,36,37],homedir:35,hook:[1,9],hope:11,horizont:[8,16,20,21,27,31,39,40],how:[1,15,16,18,20,21,27,30],howev:[35,40],hspace:39,html:[31,36],htracksreservedloc:40,htry:[8,9,10,11,13],http:[36,37,43,46,47],hugo:37,hundredth:16,hur_techno_name:31,hurricaneerror:8,hurricaneplug:29,hwidth:39,hypernet:[0,2,3,4,5,6,7,8,9,10,11,12,13,14],i0_20:31,i386:36,iastat:37,ident:[8,31,35,40],identifi:[35,39,40],ifndef:[8,9,13],illegal:31,illustr:[16,21,22,39],imag:40,imcomplet:38,immediatli:40,implant:27,implement:[9,11,20,23,35,38,40,45],implemet:35,impli:[13,20],imposs:31,improv:40,in0:31,in1:[30,31],in2:[30,31],in3:[30,31],in4:30,in_lo:35,in_ph:35,includ:[7,8,9,11,13,20,31,36,38,40],include:36,inclus:40,incompat:31,incompatibilit:36,increas:[27,40],inde:40,indeed:[29,31],indent:20,index:[27,31,45],indic:[29,31],indirect:8,individu:[27,40],infinit:[19,36,40],info:[19,35,40],inform:[11,16,17,27,40,46],inherit:[9,29],init:[9,13],inithurrican:[8,9],initi:[8,9,32,35,40],initialis:[1,9,19,29,31,32],innov:38,inout:[29,31],input:[29,30,31,32,38],insert:[16,35,39],insid:[9,16,17,23,27,40],inspect:40,inspector:1,inst:[29,30,31],inst_adsb2f:30,inst_and2:30,inst_and3:30,inst_and4:30,inst_buff:30,inst_bus:30,inst_const:30,inst_dff:30,inst_dfft:30,inst_fifo:30,inst_inv:30,inst_mux2:30,inst_nand2:30,inst_nand2mask:30,inst_nand3:30,inst_nand4:30,inst_nbus:30,inst_nmux2:30,inst_nor2:30,inst_nor2mask:30,inst_nor3:30,inst_nor4:30,inst_nul:30,inst_or2:30,inst_or3:30,inst_or4:30,inst_ram:30,inst_rf1:30,inst_rf1d:30,inst_rom2:30,inst_rom4:30,inst_sff:30,inst_sfft:30,inst_shift:30,inst_shrot:30,inst_xnor2:30,inst_xnor2mask:30,inst_xor2:30,instal:[7,16,19,21,22,23,35,36,40],install:36,installat:1,instanc:[1,11,16,20],instanci:[1,8,29],instanciat:[1,29],instanti:1,instantiat:[29,31],instead:[8,11,13,19,22,31,36,40],instens:35,insti:30,insto:30,instop:30,instruct:[31,36,40],instshamt:30,insul:9,integ:[16,32,35],integer_word_length:32,integr:[9,39],intend:40,interact:17,interfac:[1,9,11,16,19,20,21,29,30,31,32,35,38],intermedi:1,intern:[29,31,32,39],interpret:[19,39],interrupt:9,intersect:27,intert:30,interv:31,introduc:[16,36,40],introduct:1,inv:31,inv_54:30,inv_x1:18,invalid:[8,9,11,13],inversor:31,invert:[27,30],inverter:30,invertor:[16,17],invok:31,iowa:37,isdir:35,isn:[31,32],isobar:[7,8,9,10,11,13],isobar_py_component_h:8,isobar_py_contact_h:8,isobar_py_entity_h:8,isobar_py_point_h:13,ispd:40,ispycompon:8,ispycontact:8,ispyentiti:8,ispyhorizont:8,ispylibrari:9,ispypoint:13,ispyvert:8,issu:[11,23],istself:7,ital:40,item:40,iter:[18,40],itself:[9,27],iwl:32,jean:37,json:38,just:[10,11,17,18,21,22,27,31,35,36,40],katabat:[0,2,3],katana:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22],katanaengin:23,keep:[13,23],kei:[9,29,31,39,40],kept:27,keyword:17,kgr:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],kind:[16,18,19],kit:5,kite:[0,1,2,3,4],knife:40,knik:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39],know:[9,36,39],known:[21,40,46],kwarg:13,lambda:[1,16,22],lanch:19,languag:[1,31,32],larg:40,last:[9,32,35,36,40],lastli:[9,13],latch:30,later:[13,16,21,38,40],latest:[31,36],latex2html:36,latex:36,lauch:39,launch:[17,19,36,39],layer:1,layerassign:23,layout:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],layoutt:35,lbd:16,lcw:27,ld_library_path:19,lead:40,leaf:[15,39,40],least:[35,39],lef:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21],lefconvertfactor:46,lefdef:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],lefimport:22,lefimporttmpcel:46,left:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,30,31,33,34,35,36,37,38,39,40,41,42,43,44,46,47],legal:[31,32,38],leght:31,lenght:31,length:[16,27,32],lepka:[19,36,39],less:[11,27,40],let:[13,40],letter:31,level:[8,9,10,11,15,16,17,21,27,35,36,39,40],lex:36,lgpl:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],lib:[9,22,36,40],liberti:40,libisobar:11,librari:[1,7,8],libxml2:36,licens:1,life:[13,27],like:[8,9,11,17,18,19,20,23,29,30,31,35,36],limit:[20,21,40],line:[1,36,39],linear:40,linebreak:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],link:1,linker:11,linux:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],lip6:36,list:[1,7,18,21,29],listdir:35,littl:[17,27,40],live:[11,40],load:[1,16,17],loader:[22,38],loadglobalrout:23,local:[35,36,40],localripuplimit:40,locat:[31,39,40],lofig:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],log2:30,log:40,logic:[5,16,20,21,22,31,32,38,40],logicin:29,logicinout:29,logicout:29,logicunknown:29,logmod:[19,35,40],longer:[11,40],longglobalripuplimit:40,look:[1,9,13,16,22,35,36],loop:[18,19,30,31,36,40],lot:[21,46],low:40,lower:[16,21,30,31,35,40],lowercas:[9,16],lsb:[29,31],lybrari:9,maco:36,macos:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35],macport:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],macro:[7,8,9,11,13,30,40,46],made:[11,21,23,27,29,30,31,39,40],mai:[11,13,16,17,18,19,20,21,27,31,35,36,39,40],main:[20,36,38,40],mainli:[35,38,40],maintain:40,make:[9,15],makefil:36,manag:[11,16,20,22],mandatori:[9,16,19,29,30,31,35],mani:[11,20,27,31],manipul:10,manual:[1,11],map:[1,18,29,30],marek:37,margin:[23,35],mark:32,mask:30,masson:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],master:[11,21,23,29,36,40],mastercel:[29,31],masterlibrari:9,masternet:21,match:[18,31,35,40],materi:40,matrix:27,mauka:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],max:35,maxim:40,maximum:40,maxtracelevel:[35,40],mayb:31,mbk:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],mbk_:16,mbk_to_rds_bigvia_hole:1,mbk_to_rds_bigvia_metal:1,mbk_to_rds_segment:1,mbk_to_rds_via:1,mbk_wiresetting:1,mean:[11,18,20,22,27,31,35,36,40,46],meaning:[27,30,31],mechan:[9,11,13,15],medskip:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],member:38,memento:1,memori:[16,18,20,39,40],menu:[17,40],merg:29,messag:[16,17,21,40],metal1:[16,27],metal2:[21,27],metal3:21,metal5:40,metal:[27,40],meth_noargs:[8,9,13],meth_static:[8,9],meth_varargs:[8,9,13],method:[1,9,10,11,13,20,27],method_head:[8,9,13],micromet:[27,46],micron:22,microns:46,middl:31,migrat:38,million:40,miloyip:36,mimic:[9,35],min:35,minim:27,minimum:[39,40],minimumsid:39,minipag:37,minor:[35,40],mintracelevel:[35,40],minut:40,mip:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],mirror:39,misc:[19,35,40],miscellan:1,miss:40,mistak:[9,16,31],mistral:31,mix:[4,5,11,23,36],mkdir:36,mode:1,model:[1,16,20,21,27],modelnam:[30,31],modif:[16,18,31,39,40],modifi:[13,18,19,31,40],modul:[1,7],modular:11,modules_stratu:31,mofic:17,monolith:11,more:[8,16,18,20,27,31,35,38,40],moreov:11,mosi:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],most:[31,35,40],mostli:[7,20,40],mous:40,movabl:40,move:40,msb:[29,31],much:[11,29,31,35,40],multipl:[22,27,31,38,40,46],multiplex:30,multiplexor:[1,29],multipli:[27,31],must:[7,8,9,11,16,17,19,20,21,22,27,31,32,35,36,39,40],mutat:9,mux2_8:30,mux:[29,31],mx2:31,my_addaccu_:31,my_and2_4bit:31,my_dpgen_and2:31,my_inv:16,myclass:[29,31],myfunc:20,myinst1:31,myinst2:31,myinst3:31,myinst:31,mylib:35,mymap:29,mynet:31,myparam:29,myref:31,myself:15,na2:31,na3:31,na4:31,name:[1,7,8,9,11],namespac:[1,7,8],nand2:30,nand2_8:30,nand2mask_0x0000ffff:30,nand3:30,nand3_20:30,nand4:30,nand4_9:30,nand:30,narrow:40,navig:18,nbit:[30,31],nbit_cmd:30,nbsp:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],nbuse29:30,nck:35,ncsu:22,ndif:[16,27,31],nearest:39,need:[7,8,9,11,13,16,19,20,21,23,27,31,35,36,39,40],neg:31,neither:[9,31],nero:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],net8:31,net:[1,8,11,15],neta:31,netb:31,netc:31,netck:31,netcmd:31,netcout:31,netexternalcompon:[16,21],neti0:31,neti1:31,netin:31,netinput:29,netlist:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],netnam:31,neton:31,netout:31,netq:31,nets:31,netv:31,netvdd:31,netvss:31,never:18,nevertheless:31,newer:36,newli:[16,31],newnet:31,newpag:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],next:[31,32,36],nimbu:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],nmux2_5:30,nmx2:31,no2:31,no3:31,no4:31,noflag:23,noindent:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],non:[1,9,11],none:[16,17,21,23,29,35,39,40],nor2:30,nor2_8:30,nor2mask_000111:30,nor3:30,nor3_3:30,nor4:30,nor4_15:30,nor:[9,30,31],normal:[23,40],north:[31,39],nosym:[30,31],notat:[29,31,40],note:[1,8,9,27,30,31,36],now:[8,21,38,40],nterfac:32,ntie:[16,27,31],ntran:[16,31],ntrans:[16,27,31],nul:30,nul_4:30,number:[9,11,13,16,27,29,30,31,32,39,40],nutshel:36,nwell:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,31,33,34,35,36,37,38,39,40,41,42,43,44,46,47],nword:[30,31],nxr2:31,nymous_:18,o2_1:[21,23],o2_x2:[21,23],ob_typ:[8,9,13],object:[8,9,10,11,13,16,17,18,20,21,27,31,35,40],observ:32,obsolet:38,obtain:[27,31,40],obviou:[13,40],obvious:[11,36,39],obviousli:[11,21,27,39],occur:[11,16,30,31],occurr:8,ocp:27,octal:32,odd:[27,39],off:[11,27,31],offset:[27,31],offsetx:31,offsety:31,often:[27,40],old:[11,23,38],older:[36,40],ommit:40,onc:[9,11,31],once:[16,39,40],one:[8,21,30,31,39,40],onli:[8,10,11,15,16,17,18,20,21,22,23,27,29,30,31,32,35,36,38,39,40],only:[9,29,30,31,36],open:[16,17,20,21,23,29,31,40],opencham:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],oper:[1,11,20,21,29,30],operand:30,operat:30,opt:36,optim:[30,36],option:[1,9,17,19,29,30,31,32],optional:32,optionn:[30,31],or2:[30,31],or2_8:30,or3:30,or3_5:30,or4:30,or4_16:30,order:[18,21,29,30,31,35,36,40,45],ordere:39,ordinari:[21,35,39],ored:30,organ:[9,18],orient:27,orientat:21,origin:[11,27,40],osu_soc:22,other:[9,10,11,16,17,20,21,27,31,32,35,36,37,39,40],otherwis:[11,29,30,31,40],ouput:30,our:[9,11,20,35],out:[11,29,30,31],out_lo:35,out_ph:35,outad:36,outil:31,outlin:40,output:[29,30,31,32,38,40],outsid:[7,16,18],over:[10,18,21,23,27],overflow:30,overhang:27,overlap:[27,40],overload:[9,16],overloard:[29,31],overrid:19,overwritten:40,own:[8,31,35,36,40],owner:16,p_a0:39,p_a1:39,p_a2:39,p_a3:39,p_b0:39,p_b1:39,p_b2:39,p_b3:39,p_cin:[31,39],p_ck:39,p_cout:[31,39],p_d0:39,p_d1:39,p_d2:39,p_d3:39,p_f3:39,p_i0:39,p_i1:39,p_i2:39,p_i3:39,p_i4:39,p_i5:39,p_i6:39,p_i7:39,p_i8:39,p_ng:[31,39],p_noe:39,p_np:[31,39],p_ovr:39,p_q0:39,p_q3:39,p_r0:39,p_r3:39,p_vddeck0:[31,39],p_vddeck1:[31,39],p_vddick0:39,p_vsseck0:39,p_vsseck1:[31,39],p_vssick0:[31,39],p_y0:39,p_y1:39,p_y2:39,p_y3:39,p_y:31,p_zero:39,packag:1,pad:[1,16],pad_east:29,pad_north:29,pad_south:29,pad_west:29,padeast:31,padlib:35,padnorth:31,padsouth:31,padwest:31,page:[21,45],pair:[16,31,39],paper:40,para:31,paradigm:35,parallel:36,param:[1,29,30],paramet:[1,9,11,13,21,23],parameterst:[19,23,35],parametertyp:35,paramid:35,paranoid:[19,35],parent:9,pars:[8,31],parser:[27,38],part:[1,8],partial:[8,11,38],particular:[9,17,20],partit:39,paseast:31,pass:[11,21,39],paswest:31,pat:32,patamet:31,path:1,pathnam:31,patli:27,pattern:[1,29],pattern_begin:1,pattern_end:1,patwrit:1,paul:37,pck:39,pck_px:39,pdf:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],pdif:[16,27,31],peopl:11,per:31,percentag:35,perform:[9,30,31,35,36,39,40],perhap:40,peripheri:31,permit:[30,31],persist:11,phfig:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],phseg:27,phvia:27,physic:[1,16,20],physical:31,physical_grid:27,pictur:[31,40],piec:31,pin:[20,21,31,46],pitch:[27,31],pixel:40,pixmap:40,place:[1,11,15,16,20],placeandrout:23,placebottom:1,placecentr:1,placecontact:1,placed:21,placeglu:1,placeleft:1,placement:[1,21,23,29,31,35,38],placementstatu:21,placepin:1,placer:1,placeref:1,placerengin:39,placeright:1,placeseg:1,placetop:1,plain:10,plane:39,pleas:[16,31],plot:31,plu:31,plug:[15,16,20],plugin:1,point1:31,point2:31,point:[9,10,11,13,16,20,21,27,31,32,35,39,40],pointer:[8,9,11,13],poli:[16,27,31],polici:35,poly:[16,27,31],polysilicium:27,pop:30,popup:40,port:[29,31,32,36,38],posit:[16,27,31,39,40],possibl:[9,17,20,21,27,31,35,39,40],postfix:39,power:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],powerr:1,practic:[7,27],pre:40,preced:32,precis:[11,16,31,46],predic:9,prefix:[27,39,40],preliminari:38,prepend:35,prerequisit:36,presenc:8,present:[8,18,20,36,40],press:40,pretti:[22,35],previou:[27,31,35,40],previous:[8,9,23,39],price:40,print:[1,18,20,35],printabl:[14,25,28,33,41],printer:40,prior:[16,22,23,40],problem:36,proce:36,procedur:[31,32,33,40],process:[18,19,21,31,35,38,40],produc:32,profil:36,progess:20,program:[9,11,31],programm:30,progress:17,project:36,propag:[39,40],properti:[9,32],proprieti:32,protocol:18,provid:[1,9,10,11,16,19],proxyerror:10,ptie:[27,31],ptran:[16,31],ptrans:[16,27,31],pub:36,pull:36,pure:[19,20,35,40],purist:27,purpos:[17,31,40],push:30,pust:31,put:[9,11,13,27,31,35,39,40],pvddeck:39,pvddeck_px:39,pvddick:39,pvddick_px:39,pvsseck:39,pvsseck_px:39,pvssick:39,pvssick_px:39,pwell:[27,31],pxlib:35,py_incref:[8,9],py_initmodul:[8,9],py_library_h:9,py_return_none:[8,10],pyany_aslong:[10,13],pyarg_parsetupl:[9,10,11,13],pycel:[8,9],pycell_link:[8,9],pycfunct:[8,9,13],pycompon:[8,11],pycomponent:8,pycomponent_destroi:8,pycomponent_getnet:8,pycomponent_getx:8,pycomponent_gety:8,pycomponent_link:8,pycomponent_linkpytyp:8,pycomponent_method:8,pycomponent_o:[8,11],pycontact:8,pycontact_cr:[8,11],pycontact_destroi:8,pycontact_getheight:8,pycontact_getwidth:8,pycontact_link:[8,11],pycontact_linkpytyp:8,pycontact_method:8,pycontact_o:8,pycpp:7,pydatabas:9,pydatabase_o:9,pydatabse_o:9,pydbu_fromlong:10,pyentiti:8,pyentity:8,pyentity_destroi:8,pyentity_getcel:8,pyentity_link:8,pyentity_linkpytyp:8,pyentity_method:8,pyentity_new:8,pyentity_o:8,pyerr_clear:11,pyerr_setstr:[8,9,10,11,13],pyhorizont:8,pyhorizontal_link:8,pyhorizontal_o:8,pyhurrican:[7,8,9,13],pyhurricane_method:[8,9],pyinclud:7,pyinstanc:11,pyinstance_link:11,pylay:11,pylayer_o:11,pylibrari:[7,9,11],pylibrary:9,pylibrary_cr:9,pylibrary_dealloc:9,pylibrary_destroi:9,pylibrary_getcel:9,pylibrary_link:9,pylibrary_linkpytyp:9,pylibrary_method:9,pylibrary_o:9,pymethoddef:[8,9,13],pymodule_addobject:[8,9],pynet:[8,11],pynet_link:8,pynet_o:11,pyobject:[8,9,10,11,13],pyobject_head:[8,9,13],pyobject_new:13,pypoint:[10,13],pypoint_dealloc:13,pypoint_getx:[10,13],pypoint_gety:13,pypoint_init:13,pypoint_link:13,pypoint_linkpytyp:13,pypoint_method:13,pypoint_new:13,pypoint_o:13,pypoint_setx:[10,13],pypoint_sety:13,pyseg:8,pystring_asstr:9,python27:36,python2:36,python:[0,1,2,3,4,5,6,7],pythoncpp:14,pythonpath:[19,40],pythontutori:25,pytype_ready:[8,9],pytype_ready_sub:8,pytypecompon:[8,11],pytypecontact:8,pytypeent:8,pytypeinheritedobjectdefinit:8,pytypelay:11,pytypelibrari:[7,9],pytypenet:11,pytypeobject:[8,9,13],pytypeobjectdefinit:[9,13],pytypeobjectlinkpytyp:[8,9],pytypeobjectlinkpytypenewinit:13,pytypepoint:13,pytyperootobjectdefinit:8,pyvert:8,pyvertical_link:8,pyvertical_o:8,qt5:36,quadri:39,quadruplet:35,quadtre:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],qualiti:40,quarter:39,queri:16,quit:[29,40],rail:1,ram:[30,39],ram_32_32:30,ram_clock:39,ramlib:35,rang:[31,32],rapidjson:36,rather:40,ratio:[23,35,40],rcw:27,rds:1,rds_activ:27,rds_alu1:27,rds_alu2:27,rds_alu3:27,rds_alu4:27,rds_alu5:27,rds_alu6:27,rds_cont:27,rds_gate:27,rds_ndif:27,rds_nimp:27,rds_pdif:27,rds_pimp:27,rds_poly:27,rds_via1:27,rds_via2:27,rds_via3:27,rds_via4:27,rds_via5:27,reach:[11,40],reachabl:40,read:[9,30,35,38,46],readabl:40,readi:16,real:[1,9,16,18],realli:40,reason:27,recent:[27,31],recommand:40,recommended:32,record:40,rectang:27,rectangl:27,recurs:1,red:40,redefin:[8,35],redefinit:8,redhat:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],redirect:40,redraw:40,redund:27,ref:30,refin:9,reflect:40,refnam:31,refresh:[29,31,40],reg:[29,31],regard:[20,31],regexp:35,regist:[1,7,9,29,30],regnumb:30,rel:[16,27,31,32,36],relat:[8,13,21,32,35,40],releas:[1,36,37],relev:[8,9,39],reli:[11,27,36,40],reload:40,remain:[8,9,13,18,40],remark:[8,35,40],rememb:8,remind:15,remov:[18,39,40],ren:30,renam:[39,46],render:40,reopen:17,reorganis:39,repeatedli:40,replac:[20,35,38,40],replic:9,repositori:[36,38],repres:[21,27,31,32,40,46],represent:40,request:[18,30,39],requir:[1,11,29,35],reserv:40,reset:[9,30,40],resizeab:1,resolut:[20,40],respect:[11,35,40],respons:[9,40],rest:[17,23],restart:[39,40],restructuredtext:36,result:[9,11,17,18,20,21,30,35,40],retain:11,retir:39,revers:[8,11],rewrit:[11,38],rewritten:38,rf1_4_16:30,rf1d_4_16:30,rf2lib:35,rflib:35,rhel6:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],rhel7:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],right:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,30,31,33,34,35,36,37,38,39,40,41,42,43,44,46,47],ring:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,31,33,34,35,36,37,38,39,40,41,42,43,44,46,47],rip:40,ripup:40,ripupcost:40,rise:[27,31],risk:27,rok:30,rom2_0b1010_0b1100:30,rom4_0b1010_0b1100_0b1111_0b0001:30,rom:30,romlib:35,root:[9,11,16,21,23,35,36],roselyn:32,rot_m:31,rot_p:31,rotat:[21,30,31],rotop:30,rout:[1,20,23,27,29],routabl:40,routag:40,routageck:31,routeck:1,router:[1,16],routingdriven:[35,40],row:21,rowend_x0:21,rp1:21,rp2:21,rpm:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],rsave:1,rubber:40,rule:[27,39,40],ruler:40,run:[16,17,19,22,23,31,35,36,39,40],runglobalrout:23,runnabl:16,runnegoci:23,runtim:40,s2r:27,safeti:40,sai:[11,19,21,36,39],said:16,sake:[8,16],same:[7,8,11,16,18,21,27,29,31,32,35,40],sarri:30,satur:40,saturateratio:40,saturaterp:40,save:[1,8,9],savecel:[16,21,23],scan:30,scarri:40,scheme:[39,40],scientif:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],scin:30,scn6m_deep_09:35,scope:20,scout:30,screen:40,script:[1,16],scriptmain:[16,17,21,23,39,40],scrub:9,search:[18,35,45],second:[1,11,16,21,27,30,31],section:[35,36,46],secur:35,see:[9,11,16,17,20,21,27,29,31,32,35,36,39,40],seem:[27,31,36,46],seen:[9,23],sefl:31,segment:[1,16,21],sel0:30,sel1:30,sel:30,select:[1,21,30],self:[8,9,10,13,20,29,30,31,32,35],selr:30,selram:30,selw:30,semant:20,send:27,sensit:31,sentinel:[8,9,13],separ:[9,11,27,29,36,39,40],sequenc:[23,31,40],sequenti:35,serv:[4,5],set:[1,7,9,10],setabutmentbox:[16,17,21],setadd:31,setand:31,setbuff:31,setcel:[16,17,21,23],setcomp:31,setdiv:31,seteditor:39,setextern:[16,21,23],setglob:[16,21,23],setmult:31,setmux:31,setnet:[21,23],setnot:31,setor:31,setplacementstatu:21,setrefin:1,setreg:31,setshift:31,settermin:[16,17],settransform:21,setup:[9,16,19,23,35,36],setx:[10,13],setxor:31,sety:13,seven:40,sever:[11,29,31,40],sff2:31,sff3:31,sff:31,sff_4:30,sfft_4:30,shadow:18,shamt:30,shape:[23,27],share:[1,7,8],she:8,shelf:11,shell:[19,31,36],shellsuccess:39,shift:[29,30,31,40],shifter:[1,29,30],shifter_4:30,ship:38,shortcut:1,should:[11,13,19,31,32,36,40],shouldn:27,show:[11,16,18,27,35,40],shown:[9,27,31,35,39],shrot_4:30,si2:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],side:[27,31,39,40],sig:29,sign:[30,31,35],signal:[1,4,5,21,29,30],signalin:[30,31,32],signalinout:[30,31,32],signalout:[30,31,32],signalunknown:31,signatur:[8,9,11],silli:27,similar:[8,40],similarli:32,simpl:[1,22,27,35],simplest:[16,35],simpli:[16,18,27,31],simplif:[21,36],simplifi:[19,31,36],simul:[31,32,38,39],sinc:18,singl:40,site:35,size:[27,30,31,32,39,40],skip:18,slanski:31,slice:31,slight:20,sligthli:36,slot:40,slow:40,slsoc6x:36,slsoc6x_64:36,small:[23,25,26,27,31,35,39,40],smallest:[30,46],smallskip:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],snapshot:1,snx:22,soc:[35,36],socket:40,softwar:1,sole:17,solut:40,solv:40,some:[1,11,16,18,20,27,29],someth:[16,20],sometim:21,somewhat:21,soon:39,sophi:[29,30,31,37],sourc:[16,27,31,36,38,40],sout:[21,23,31],sout_1:[21,23],south:[31,39],space:[23,27,31,35,39,40],spacemargin:[23,35,40],span:13,spec:36,special:[9,19,20],specif:[9,20,35,39,40],specifi:[30,31,40],speed:40,speedup:38,spl1:31,split:[11,39,40],spread:[23,40],squar:[23,27],src:36,sroka:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],st_config:31,stabl:36,stack:9,stage:1,stai:27,stamp:32,stand:40,standalon:1,standard:[9,11,13],standard_instances_list:29,standart:39,standpoint:27,start:[20,27,31,40],starter:15,state:[16,18,20,21,23,37,40],statement:46,static_cast:[8,10],statu:21,stechno:39,step:[8,9,27,31,35,36,39,40,46],still:[8,13,28,36,38,40],stimuli:1,stimulu:32,stl:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],stop:[16,17,21,23,39,40],storag:46,store:[9,10,16,20,30,40],straightforward:22,straigthforward:21,strap:40,strapripuplimit:40,strategi:39,stratu:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28],stratus1:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],stratus2:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],stratus:31,stratus_mapping_name:31,stream:40,strict:[21,27],string:[9,16,20,30,31,32,35],stroke:40,strongli:40,strongly:32,struct:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],structur:1,stuck:[27,30],stuff:29,style:[9,40],sub:[19,31,32,39],subject:40,subsequ:46,substract:[30,31],substractor:30,subtli:18,success:39,successful:40,successfulli:[36,40],suffer:40,suffic:[21,40],suffix:39,suit:40,summar:20,summari:39,superpos:40,supli:30,suppl:39,suppli:[9,16],support:[7,9,11,13,20,23,32,36,38,40],suppress:40,sure:39,svn:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],swig:11,swiss:40,sxlib:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,31,33,34,35,36,37,38,39,40,41,42,43,44,46,47],sy_rm:31,sy_rp:31,sym:31,sym_x:31,sym_y:31,symbol:[1,9,16,19,22],symetr:31,symetri:[29,31],symmetri:21,symxy:31,sync:40,synch:40,synonym:23,synopsi:1,syntact:35,syntax:[1,9,20],synthesi:[1,22],synthet:[1,22,38,39],system:[21,31,35,36],system_library:35,tab:[1,21,29,31,35],table:27,tailor:9,take:[9,16,17,23,31,32,40],taken:[11,31,32],talu1:31,talu2:31,talu3:31,talu4:31,talu5:31,talu6:31,talux:27,target:[16,27],task:[8,19,36],taxonomi:35,team:36,technic:1,technolog:[1,16,19,21,22,31],tediou:[19,21,36],tee:40,tell:[9,16,19,27,29,30,35,36,39],temp:31,temp_ext:31,tempext:31,templat:11,temporari:[40,46],ten:11,term:[31,37],termin:1,terminolog:16,test:[1,29],testbench:31,text:[31,39,40],textwidth:37,than:[11,27,31,38,40],thank:[11,29,31,39,40],thei:[9,11,16,18,19,20,27,29,31,35,38,39,40],them:[9,11,20,23,27,36,39,40],therefor:[21,30],thesi:40,thi:[8,9,11,13,14,15,16,18,19,20,21,23,25,26,27,28,29,30,31,32,33,35,36,38,39,40,41,46],thing:32,third:[21,27,30,36],thispagestyl:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],those:[8,9,18,19,21,27,29,30,31,35,36,39,40],though:11,three:[7,9,21,27,30,40],through:[9,11,15,16],througout:27,thu:[9,20,35,40],tie:27,tie_x0:21,time:[8,11,31,32,40],tmp:20,todai:16,todbu:[16,17,21,23],togeth:[30,38],toggl:40,tolambda:16,too:[11,23,27,31,40],tool:[1,11,17,19,20],toolchain:40,toolengin:23,top:[31,36,39,40],topolog:40,toproutinglay:40,total:40,toward:[11,19,31],tp_compar:9,tp_dealloc:9,tp_hash:9,tp_init:13,tp_method:9,tp_new:13,tp_repr:9,tp_str:9,trace:[9,40],track:40,track_spacing_alu1:27,track_spacing_alu2:27,track_spacing_alu3:27,track_spacing_alu4:27,track_spacing_alu5:27,track_spacing_alu6:27,track_spacing_alu7:27,track_spacing_alu8:27,track_width_alu1:27,track_width_alu2:27,track_width_alu3:27,track_width_alu4:27,track_width_alu5:27,track_width_alu6:27,track_width_alu7:27,track_width_alu8:27,transform:[9,20],transistor:27,transit:32,translat:[21,27],transmiss:11,transpar:27,tree:[1,8,11,31],tricki:11,trigger:[35,40],tristat:[29,30,31,32],tristate:29,trough:39,trought:35,truli:35,trunk:35,tty:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],tupl:35,turn:[16,21,40],tutori:1,tweak:40,twenti:31,twentu:31,twice:[11,18,31],two:[8,11,15,16,17,19,20,21,23,27,29,30,31,32,35,36,38,39,40],type:[1,7,8],typebool:[19,23,35,40],typedef:[8,9,10,13],typedoubl:35,typeenumer:[23,35],typeint:[35,39,40],typeopt:35,typepercentag:[23,35,40],typerul:35,typestr:[35,39,40],typetab:35,typetitl:35,typic:[9,35,39],ubuntu:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],uint64_t:10,unabl:36,unbound:10,uncheck:21,undef:[8,31],undefined:31,under:[1,9,11,16,17,19,21,22,23,27,35],underli:11,underscor:31,understand:[11,36,45],uneed:21,unexpectedli:18,unicorn:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33],unifi:40,uniform:[23,35],uniformdens:[23,35,40],uniquif:40,unit:[10,11],units:46,univers:37,unknown:29,unlik:36,unlike:[15,16,38],unlink:35,unmov:40,unplaced:29,unpredict:18,unrout:40,unselect:40,unsign:30,unsupport:40,until:[21,23,40],unzoom:40,updat:9,updatesess:[16,17,20,21,23],upmc:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],upon:[11,31,33],upper:[16,27,30,31,40],uppercas:16,usabl:[13,16,27],usage:[27,40],use:[19,31,32,36],used:[30,40],useful:[1,29],user:1,usersguid:41,using:16,usr:[16,21,23,31],usual:[8,9,16,20],utf:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],val0:30,val1:30,val2:30,val3:30,valid:[9,11,30,39],valu:[1,8,9,13,19],variabl:[9,16,19,27,31,35],variant:30,variou:[9,11,16],vbe:[29,40],vdd:[16,21,23,29,30,31,32,35],vdde:39,vddi:39,vddin:[29,30,31,32],vector:[18,31,32],verbos:40,verboselevel1:[19,35,40],verboselevel2:[19,35,40],veri:[23,35,39,40],version:[7,14,25,28,33,36,40,41,43,46,47],vertic:[8,16,21,27,31,39,40],vertiv:31,vhdl:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,31,33,34,35,36,37,38,39,40,41,42,43,44,46,47],via12:[21,31],via1:31,via23:[21,31],via24:31,via25:31,via26:31,via2:31,via34:31,via35:31,via36:31,via3:31,via45:31,via46:31,via4:31,via56:31,via5:31,via:27,view:[9,16,18,20],viewer:[0,1,16,17,21,35,38,39],vim:31,vimrc:31,violet:40,virtual:[1,15],visibl:[16,40],visual:[27,40],visualis:16,vlsi:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,31,33,34,35,36,37,38,39,40,41,42,43,44,46,47],vlsisapd:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],vspace:39,vss:[16,21,23,29,30,31,32,35],vsse:39,vssi:39,vssin:[29,30,31,32],vst:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,31,33,34,35,36,37,38,39,40,41,42,43,44,46,47],vtracksreservedloc:40,vwidth:39,w7_64:36,w8_64:36,wai:[9,10,11,16,20,23,27,31,36,39,40],walk:40,walkthrough:18,wallac:31,want:[8,9,11,16,17,18,19,21,29,31,35,36,40],warn:11,weak:40,weakli:16,weari:18,weekli:21,well:[15,16,18,21,27,29,31,39,40],wen:30,were:40,west:[31,39],wether:31,what:[9,11,17,21,27,31,40],whatev:[35,36,40],when:[10,11,19,27,29,30,31,35,36,39,40,46],where:[7,21,22,32,35,40],whether:[8,18,39,40],which:[7,8,9,13,16,17,19,20,21,27,29,31,32,35,36,37,38,39,40,46],white:40,whitespac:40,whithout:[35,39],whitout:40,whole:[8,27,30,38,39,40,46],whose:[20,35],why:[9,11],wich:31,wide:35,wider:40,width:[8,11,16,27,30,31,40],width_vdd:27,width_vss:27,wil:18,window:[35,36,40],wirelength:40,witch:17,within:[31,40],without:[16,17,27,29,30,31,40],wok:30,won:11,word:[30,31,32],word_length:32,work:[9,16,17,20],work_dir:16,work_lib:18,workhors:15,working_library:35,worklib:35,world:16,wors:40,would:[10,11,18,31,35],wrap:[7,9,11],wrapper:[9,11,23,35],write:[11,15,18,30,31,32,35,39,40],written:[9,11,12,13,16,18,20,35],wrong:31,www:[36,43,46,47],wysiwyg:40,x_grid:27,xml:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,31,33,34,35,36,37,38,39,40,41,42,43,44,46,47],xnor2:30,xnor2_8:30,xnor2mask_0b000111:30,xnor:30,xor2:[30,31],xor2_8:30,xor:30,xored:30,xoring:30,xr2:31,xr2_1:[21,23],xr2_2:[21,23],xr2_x1:[21,23],xr2_x2:[21,23],xxxx:36,y_grid:27,y_slice:27,yacc:36,year:[11,40],yet:[8,31,36,40],yield:31,yifei:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,33,34,35,36,37,38,39,40,41,42,43,44,46,47],yosi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21],you:[11,16,17,18,19,20,21,22,23,25,26,27,30,31,32,35,36,39,40],your:[1,11,16,17,19,22],zero:[11,27,30,31],zoom:40},titles:["Hurricane/Analog Reference","Comprenhensive Table of Contents","CRL Core Reference","Hurricane Reference","Katabatic Reference","Kite Reference","Oroshi Reference","2. Basic File Structure and CMake configuration","4. Case 2 - Hierarchy of DBo Derived Classes","3. Case 1 - DBo Derived, Standalone","6. Encapsulating DbU","1. Introduction","7. No C++ Hurricane::Name encapsulation","5. Case 3 - Non-DBo Standalone Classe","Hurricane Python/C++ API Tutorial","9. Advanced Topics","3. Making a Standard Cell – Layout","5. Make a script runnable through cgt","4. Manipulating Cells, Nets and Components","2. Setting up the Environment","1. Introduction","6. Making a hierarchical Cell – Netlist","7. Working in real mode","8. Tool Engines (CRL Core)","<no title>","Hurricane+Python Tutorial","Hurricane+Python Tutorial","Symbolic Layout","RDS – Symbolic to Real Conversion in Alliance","Stratus Developper’s Guide","DpGen generators manual","Stratus User’s Guide","Patterns module User’s Guide","Stratus : Netlist Capture Language","Unicorn Reference","Coriolis Configuration & Initialisation","Installation","Credits & License","Release Notes","Python Interface for Hurricane / Coriolis","CGT - The Graphical Interface","Coriolis User’s Guide","Viewer Reference","DEF API Reference","<no title>","Welcome to Coriolis’s documentation!","LEF API Reference","LEF/DEF Language Reference"],titleterms:{"boolean":31,"case":[8,9,13,21],"class":[8,9,13,29],"function":[15,31],"new":16,about:[11,18],abutment:16,add:31,addaccu:31,adding:16,additionn:36,addpat:32,advanc:15,affect:31,affect_ani:32,affect_fix:32,affect_int:32,aliment:31,allianc:[28,35,36,40],allianceframework:[16,18],am2901:39,analog:0,anoth:31,api:[14,43,46],architectur:35,argument:31,arithmet:31,associat:9,attribut:29,base:[8,40],basic:7,blif:22,botch:11,box:16,branch:36,breakpoint:17,buffer:31,build:36,call:46,callback:46,captur:[33,40],cell:[16,18,21,31],cgt:[17,40],chip:39,choic:11,circuit:31,clock:39,cmake:7,collect:18,command:40,comparison:31,complet:[16,21,23],compon:[16,18,27],comprenhens:1,configur:[7,19,31,35,40],connect:21,connector:31,constant:31,constructor:20,content:[1,26],control:40,convers:28,copyupseg:31,core:[2,16,23],corioli:[35,36,39,41,45],coriolisenv:36,creat:[16,21],creation:31,credit:37,crl:[2,16,23],data:[31,40],dbo:[8,9,13],dbu:[10,16],declar:32,declar_interfac:32,def:[43,47],defab:31,deriv:[8,9],descript:[29,31,32],design:[11,40],detail:40,devel:36,developp:29,directori:36,disclaim:11,disk:16,document:45,dpgen:[30,31],dpgenadsb2f:30,dpgenand2:30,dpgenand3:30,dpgenand4:30,dpgenbuff:30,dpgenbus:30,dpgenconst:30,dpgendff:30,dpgendfft:30,dpgenfifo:30,dpgeninv:30,dpgenmux2:30,dpgennand2:30,dpgennand2mask:30,dpgennand3:30,dpgennand4:30,dpgennbus:30,dpgennmux2:30,dpgennor2:30,dpgennor2mask:30,dpgennor3:30,dpgennor4:30,dpgennul:30,dpgenor2:30,dpgenor3:30,dpgenor4:30,dpgenram:30,dpgenrf1:30,dpgenrf1d:30,dpgenrom2:30,dpgenrom4:30,dpgensff:30,dpgensfft:30,dpgenshift:30,dpgenshrot:30,dpgenxnor2:30,dpgenxnor2mask:30,dpgenxor2:30,editor:31,encapsul:[10,12],engine:23,environ:[19,36],error:31,etesian:[23,40],exampl:[16,21,23,31,32,39],execut:[31,40],extens:31,facil:31,file:[7,8,9,13,16,19,21,22,27,31,35],fillcel:31,filter:40,first:[11,35],fix:36,from:21,gener:[20,30,31,35],get:16,getrefxy:31,global:40,graphic:40,grid:27,guid:[29,31,32,41],hack:35,head:9,header:[8,9,13],helper:35,hierarch:[15,21],hierarchi:8,highlight:31,hook:36,how:31,hurrican:[0,3,12,14,16,18,25,26,39,40],hypernet:15,implement:46,indice:45,initialis:35,inspector:40,installat:36,instanc:[21,29,31],instanci:31,instanciat:31,instanti:31,interfac:[39,40],intermedi:8,introduct:[11,20,31],katabat:4,katana:23,kind:20,kite:[5,40],knik:40,lambda:27,languag:[33,47],layer:[16,40],layout:[16,27,31],lef:[22,46,47],librari:[9,31],licens:37,line:40,link:[9,31],list:31,load:[18,22,35,40],look:40,macos:36,make:[16,17,21],manipul:18,manual:30,map:31,mbk_to_rds_bigvia_hole:27,mbk_to_rds_bigvia_metal:27,mbk_to_rds_segment:27,mbk_to_rds_via:27,mbk_wiresetting:27,measur:16,mechan:16,memento:40,method:[29,31,32],miscella:15,miscellan:40,mode:[22,40],model:29,modul:[8,9,31,32],multiplexor:31,name:[12,31],namespac:9,net:[16,18,21,29,31],netlist:[21,31,33,40],non:13,note:[38,46],occurrenc:15,oper:31,option:40,order:46,oroshi:6,packag:[31,36],pad:31,param:31,paramet:[29,31,32,40],part:[9,32],path:[19,31],pattern:[31,32],pattern_begin:32,pattern_end:32,patwrit:32,physic:[21,27],place:[21,31],placebottom:31,placecentr:31,placecontact:31,placeglu:31,placeleft:31,placement:39,placepin:31,placer:[23,40],placeref:31,placeright:31,placeseg:31,placetop:31,plug:21,plugin:39,power:21,powerr:31,print:40,provid:31,python:[8,9,14,25,26,39,40],rail:31,rds:[27,28],real:[22,28],recurs:39,refer:[0,2,3,4,5,6,34,42,43,46,47],regist:31,regular:21,releas:38,requir:36,resizeab:31,restrict:18,rout:31,routeck:31,router:[23,40],routingpad:[15,21],rsave:39,runnabl:17,save:[16,39],script:[17,40],second:35,segment:27,select:[35,40],session:16,set:[16,19,36,40],setrefin:31,share:9,shifter:31,shortcut:40,signal:31,simpl:39,snapshot:40,softwar:35,some:31,special:21,stage:35,standalon:[9,13],standard:16,stimuli:31,stratu:[29,31,33,40],structur:7,suppli:21,symbol:[27,28],synopsi:[29,31],syntax:[31,32],synthesi:40,synthet:40,tab:40,tabl:[1,27,45],technic:11,techno:19,technolog:35,termin:8,terminolog:20,test:31,through:17,tool:[23,35,40],topic:15,tran:15,transform:21,tree:[36,39],tutori:[14,25,26],type:9,under:[36,40],understand:46,unicorn:34,unit:[16,46],useful:31,user:[19,31,32,41],using:17,valu:[27,31],variou:20,view:21,viewer:[40,42],virtual:31,welcom:45,wire:21,work:22,yosi:[22,40],your:31}}) \ No newline at end of file +Search.setIndex({envversion:49,filenames:["Analog/Analog","ConfigurationTechnology/Architecture","ConfigurationTechnology/index","ConfigurationTechnology/pdfHeader","Contents","CrlCore/CrlCore","Hurricane/Hurricane","Katabatic/Katabatic","Kite/Kite","Oroshi/Oroshi","PythonCpp/Configuration","PythonCpp/DBoHierarchy","PythonCpp/DBoStandalone","PythonCpp/DbU","PythonCpp/Introduction","PythonCpp/Name","PythonCpp/NonDBo","PythonCpp/index","PythonTutorial/AdvancedTopics","PythonTutorial/CellNetComponent","PythonTutorial/CgtScript","PythonTutorial/Collections","PythonTutorial/Environment","PythonTutorial/Introduction","PythonTutorial/Netlist","PythonTutorial/RealDesigns","PythonTutorial/ToolEngines","PythonTutorial/definitions","PythonTutorial/index","PythonTutorial/pdfHeader","RDS/RDSpage","RDS/index","Stratus/Developper","Stratus/DpGen","Stratus/Language","Stratus/Patterns","Stratus/index","Unicorn/Unicorn","UsersGuide/Configuration","UsersGuide/DesignFlow","UsersGuide/Installation","UsersGuide/LicenseCredits","UsersGuide/Releases","UsersGuide/ScriptsPlugins","UsersGuide/ViewerTools","UsersGuide/index","Viewer/Viewer","defapi/defapi","etc/definitions","index","lefapi/lefapi","lefdef/lefdef"],objects:{},objnames:{},objtypes:{},terms:{"005\u00b5m":30,"01\u00b5m":50,"09\u00b5m":30,"0b0001":33,"0b000111":33,"0b0010":34,"0b0110":34,"0b10":34,"0b1001":34,"0b1010":33,"0b1100":33,"0b1110":34,"0b1111":33,"0cm":29,"0x0000ffff":33,"0x14":34,"100k":44,"150k":44,"180nm":38,"18\u00b5m":30,"1\u00b5m":30,"1cm":29,"2\u00b5m":30,"2cm":29,"32b":40,"32x32":44,"3cm":29,"45nm":[22,25],"4cm":29,"64b":40,"8cm":29,"abstract":11,"boolean":[4,12,32],"case":[1,4],"catch":12,"char":12,"class":[4,10],"const":[33,34],"default":[11,22,30,32,33,34,35,38,40,42,43,44,50],"else":33,"export":[10,11,12,23,40,42,43],"final":[19,30,40,42,44],"float":[19,35,38],"function":[4,10,11,12,13,14,16],"goto":44,"import":[1,11,12,14,19,23,24,25,26,33,34,38,40,41,42,43,44],"int":16,"long":[13,23,44],"new":[11,12,16],"null":[11,12,13,14,16,33],"public":[23,42],"r\u00e9my":41,"return":[11,12,13,14,16,19,20,21,23,24,26,33,34,38,43,44],"short":[14,40],"static":[11,12,13,14,16,23,25,33,40],"supp\u00e9rior":43,"switch":40,"transient":[19,50],"true":[1,19,20,22,24,26,30,32,33,34,38,43,44],"try":[19,34,38,44],"universit\u00e9":[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],"void":[11,12,16,23],"while":[13,19,21,23,24,39,44,50],__add__:32,__and__:32,__c:[11,12,14,16],__div__:32,__geslice__:32,__getitem__:32,__init__:32,__invert__:32,__le__:32,__main__:43,__mul__:32,__name__:43,__or__:32,__python_module:14,__python_module__:[11,14,16],__str__:23,__xor__:32,_add:32,_alia:32,_and:32,_ariti:32,_baseobject:11,_bl:43,_br:43,_buff:32,_clock:38,_comp:32,_ct:43,_db:32,_direct:32,_div:32,_ext:32,_h_type:32,_hur_cel:32,_hur_inst:32,_hur_mastercel:32,_hur_net:32,_ind:32,_insref:32,_ior:43,_lib0:32,_map:32,_model:32,_mult:32,_mux:32,_name:[32,35],_nb_alims_vertical:32,_nb_inst:32,_nb_pin:32,_nb_vdd_pin:32,_nb_vss_pin:32,_not:32,_object:[11,12,13,16],_or:32,_param:32,_plac:32,_px:38,_pyobject:11,_real_model:32,_real_net:32,_reg:32,_shift:32,_st_cell:32,_st_ck:32,_st_inst:32,_st_mastercel:32,_st_merg:32,_st_port:32,_st_sig:32,_st_vdd:32,_st_vsss:32,_stim:34,_sym:32,_tab_nets_cat:32,_tab_nets_out:32,_tl:43,_to_cat:32,_to_merg:32,_tr:43,_type:32,_undercel:32,_xor:32,a2_1:[24,26],a2_2:[24,26],a2_x2:[24,26,34],abc:42,abil:34,abl:[14,20,23,25],about:[4,12],abov:[12,19,20,34,38,44],absolut:[16,19,35],abtument:34,abut:[19,24,26,34,43,44],abutmentbox:34,accept:[35,44],access:[11,21,24,34,35,40,42,44],access_class:11,access_object:11,accessor:12,accessorili:43,accomod:43,accord:[1,30,38,43,44],accordingli:14,account:44,accross:14,accumul:35,accur:42,accuraci:44,achiev:42,acknowledg:33,across:[30,38,44],act:10,action:44,activ:[4,20,30],actual:[30,33,35,43,44],adapt:[22,43],add:[4,12,20,24],add_python_modul:[10,14],add_sub:33,addaccu:4,addd:34,added:42,adder:[33,34],adder_8:33,adding:12,addit:[22,33,34,38,39,40,44],addition:34,additionn:4,addmode:38,addon:[39,40],addpat:4,address:33,addtyp:[11,12],adjac:[18,43],adjust:42,adopt:19,adr:33,advantag:1,advis:44,adw:33,affect:4,affect_ani:4,affect_fix:4,affect_int:4,affili:42,after:[12,19,20,24,25,26,32,34,35,40,43,44],afterward:33,again:[11,12,22,25,40],against:[12,14,25,42,44],ago:14,aim:[23,42],alc_env:40,alexandr:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],algorithm:[21,42,44],alia:[22,32,34,40],alias:44,alim:34,alimconnector:34,aliment:[4,32],alimhorizontalrail:34,alimverticalrail:34,all:[12,14,18,19,21,23,24,26,30,32,34,35,38,40,41,42,43,44],allianc:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30],alliance_top:38,allianceconfig:38,alliancetop:38,alloc:[12,23,44],allow:[12,18,19,21,24,30,33,34,35,38,40,42,44],almost:[11,22,38,43,44],alon:[19,39],along:[16,44],alongsid:40,alpha:42,alphanumer:34,alreadi:[14,21,28,29,34,38,40,44],also:[8,19,21,23,24,25,30,34,40,43,44],altern:[38,42,44],alternat:40,although:[30,42,44],alu1:[30,34],alu2:34,alu3:34,alu4:34,alu5:34,alu6:34,alu:34,alux:30,alwai:[12,14,24,33,34,35,50],am2901:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42],amd2901:43,amd2901_ior:43,amd64:40,amend:38,among:19,amount:[33,50],amp:41,ana:8,anabat:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],analys:40,analysi:44,analyt:[42,44],and2:[33,34],and2_8:33,and3:33,and3_16:33,and4:33,and4_2:33,anded:33,ani:[1,14,16,19,20,21,22,23,24,25,30,34,35,40,43,44],anneal:42,anonym:21,anoth:[4,14,25,32],another:14,ansi:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],anti:44,any:44,anymor:30,anyth:[38,43,44],anywher:44,apach:[47,50,51],api:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16],appart:44,appear:[12,24,44],append:[21,34,38,43],appertur:44,appli:[14,24,30,33,34,35,38],applic:44,appropri:[12,34],approx:44,apt:40,architectur:4,archiv:25,area:[24,26,30,38,44],arg0:[12,13,16],arg1:[12,16],arg:[11,12,13,14,16,34],argument:[4,11,12,13,19,20,24,32,33],arith:34,arithmet:[4,32,33],ariti:[32,34,35],army:44,around:[13,26,34,43,44],arrow:44,art:44,articul:[19,24],aside:[38,43],asign:35,asim:[34,40],asimut:34,ask:[24,30],aspect:[14,26,38,44],aspectratio:[26,38,44],assembl:38,assign:44,assignment:44,associ:[10,11,12,14,16,24,30,44],associat:[4,11],assum:[25,28,29,44],assume:24,asymetr:30,attempt:13,attribut:[4,11,16,23,29],author:34,autocmd:34,automat:[22,26,32,34,35,40,43,44],automaticali:34,autotool:40,auxsc35:44,avail:[0,5,6,7,8,9,14,19,22,34,37,38,39,40,42,46,47,50,51],avala:[42,44],avoid:[24,30,43,44,50],avot:35,awar:[24,30,33,44],axi:30,back:[34,40,42],background:44,backquot:22,bad:11,balanc:44,base:[4,7,8],bashrc:[22,40],basi:33,basic:4,basiclay:44,bdo:16,becaus:[11,20,26,30,40,42,44],becom:[11,23,34,43,44],bee:[34,44],been:[12,14,19,20,21,23,24,32,33,34,38,42,43,44],befor:[20,24,32,34,35,40,44,50],before:35,beforehand:44,begin:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],behav:33,behavior:[12,14,16,32,33,34],behaviour:44,belloeil:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,32,33,34,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],belong:[19,34,38,50],below:[12,14,23,24,26,30,32,34,38,43,44],benchmark:44,bend:30,best:[16,44],better:24,between:[14,18,23,24,30,33,34,35,38,40,42,43,44],bewteen:24,bfd:40,big:[30,34,44],bigger:44,biggest:24,biggestarea:24,bigvia:30,biject:24,bin:[19,24,26,34,40],binari:[34,35,40,44],bind:38,binutil:40,bison:40,bit:[30,32,33,34,44],black:[22,38],bleugri:29,blif:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24],blink:44,blob:42,block:[14,23,33,43],blockag:[30,38,43],blockage:38,bluntli:16,blur:44,boil:30,bood:34,boost:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],booth:34,bootstrap:40,borrow:14,botch:4,both:[19,26,30,32,34,38,40,43,44],bother:12,bottom:[30,34,43],bound:[38,44],bourn:22,box:14,brace:23,branch:4,breakpoint:19,bring:14,brows:[38,44],buf:34,buf_x2:43,buff_32:33,buffer:[4,32,33],bufnewfil:34,bufread:34,bug:[22,38,40,42,44],build:[4,10,12,14,19,24,30,38,39],buildfulladd:[24,26],buildinvertor:[19,20],built:38,bull:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],bunch:12,bundl:40,buri:18,buse:[32,34],buse_8:33,buss:33,button:44,bzip2:40,c2r:[22,40],c30:33,c31:33,c_temp:34,c_x_n:30,c_x_p:30,ca2:[34,35],cach:43,cad:34,cadenc:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],calcul:[34,35],call:[11,12,13,14,16,19,20,21,22,23,24,25,26,32,33,34,35,40,43,44,49],callback:49,calu1:34,calu2:34,calu3:34,calu4:34,calu5:34,calu6:34,calu:34,calux:30,camel:12,can:[1,11,14,18,19,20,21,22,23,24,25,26,30,33,34,35,38,39,40,42,43,44,50],candid:24,cannot:[14,19,23,24,30,33,44],capabl:[14,38,40,43,44],capac:44,capacitor:33,capit:12,captur:4,care:[14,26,34,43,44],carry_1:[24,26],carry_2:[24,26],cast:[11,12],cat:34,catal:38,catalog:[19,21,24,26,38],catchcor:[1,22,38,44],categori:44,caus:[22,40],cbug:44,ccb:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],cdebug:44,ceil:33,cell:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],cell_1:34,cellnet:21,cellstop:38,cellview:[20,44],center:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,34,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],centerend:30,cerr:[11,12],certain:[16,35],cfg:38,cgt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],ch_htree_bl_tl:43,cham:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],chang:[11,16,23,24,33,34,38,42,43,44],chaput:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],charact:[33,38],check:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,33,34,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],checkbox:44,checker:30,checkout:40,chip:[4,34,42],chmod:34,choic:4,choos:[1,12,34,44],chosen:[32,34],chotin:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,35,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],chri:[40,41],christian:41,christoph:41,chu:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],cian:39,cif:30,cin:[24,26,34],cinfo:44,circuit:4,circular:34,ck_htree:43,ck_htree_bl:43,ck_htree_bl_bl:43,ckin:[32,34,35],ckok:33,clariti:[11,19],class_nam:34,classic:[14,22,38,40],clean:38,cleaner:24,cleanli:[12,42],clear:[16,43,44],clearer:34,clement:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],click:44,clifford:39,clock:[4,32,33,34,38],clocktre:[38,43],clone:[22,40,44],close:[12,19,20,23,24,26,38,40,42,43,44],closer:34,clue:14,cluster:44,clutter:44,cmake:[0,1,2,3,4,5,6,7,8,9],cmd0:34,cmd1:34,cmd2:34,cmd:[33,34],cmo:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],cnchu:41,cnrs:29,cobject:13,code:[11,12,14,16,19,22,23,24,38,42,43],coher:[23,44],collect:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],collector:23,coloquint:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],color:34,com:[40,47,50,51],combin:[24,40,42],come:44,command:[4,34,40,43],commit:40,common:[12,14,29,30,33,34,38,42,43,44],commpos:44,commun:[12,14,16],comp:11,compar:35,comparaison:34,comparison:[4,32],compat:4,compatibilti:42,compil:[14,40,44],complement:[33,35],complet:[4,10,12,14],completli:[14,19,42,44],complex:[1,14,30],compliant:40,compnent:44,compon:[4,11,14,18],compos:[24,44],compris:44,comput:[1,14,19,24,33,34,35,38,43,44],concaten:34,concept:[19,23,24,28,29],conceptor:[32,34],concret:[11,34],conditionn:33,conf:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],configurationtechnolog:2,confus:24,congest:44,conjunct:44,connect:[18,19,23],connectmap:34,connector:[4,19,30],connexion:[23,32,34],consecut:43,consequ:[11,24,30,42,50],consid:[10,24,30],consisti:40,const_0x0000ffff:33,constant:[4,30,33],construct:[16,23,24,34],constructor:[12,14,16],constructorerror:[12,14,16],constval0:33,constval1:33,constval2:33,constval3:33,constval:33,cont_body_n:[30,34],cont_body_p:[30,34],cont_dif_n:[19,30,34],cont_dif_p:[19,30,34],cont_poly:[19,30,34],cont_turn1:34,cont_turn2:34,cont_turn3:34,cont_turn4:34,cont_turn5:34,cont_turn6:34,cont_via2:30,cont_via3:30,cont_via4:30,cont_via5:30,cont_via:30,cont_viax:30,contact1:24,contact2:24,contact:[11,14,19,24,30,34,44],contain:[10,14,19,20,21,22,23,25,30,34,35,38,42,43,44],contdifn:19,contdifp:19,content:1,conterpart:[7,8,30],contest:44,context:43,contpoli:19,contributor:41,control:[4,14,23,24,30,33,34],conveni:12,convent:[14,19],convers:[4,12,19,21],convert:[12,13,16,19,23,30,35],coodin:34,coordin:[19,23,24,30,32,34,44],copi:[16,23,34,40,44],copuupseg:34,copyright:[41,47,50,51],copyupseg:4,copyupsegmentseccopi:34,cordin:34,core:4,corioli:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,34,36,37],coriolis2:[1,10,19,22,24,26,38,40,42,43],coriolis_install:22,coriolis_top:[1,22],coriolisconfigur:38,coriolisenv:[4,22],coriolisinit:38,corner:[19,24,30,34],corona:[42,43],correct:[34,44],correctli:[26,34],correspond:[32,34,35,44],corrioli:40,cost:44,cougar:30,could:[1,21,23,34,38,43,44],count:[14,43,44],coupl:44,cours:23,cout:[21,24,26,34],cover:30,cpp:[10,12,14],craft:43,crash:[40,44],creat:[10,11,12,14,16],createcel:[19,20,24,26],creation:[4,19,23,24,26,32],creativ:29,creativecommon:29,credit:4,crl:[0,1,2,3,4],crl_cata_lib:34,crlcore:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],crude:44,crypt:1,csh:40,ctrl:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],cumbersom:14,cumulu:40,current:[19,26,34,35,38,40,43,44],cursor:44,cwd:38,cycl:35,cyclop:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],cygwin:40,damien:41,dangl:14,darwin:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],data:[4,33],databas:[12,14,19,21,23,24,32,42,44,50],database:50,datain0:33,datain1:33,datain:33,dataout:33,date:35,dbit:34,dbo:4,dbodeletemethod:[11,12],dbodestroyattribut:[11,12],dbolinkcreatemethod:[11,12,16],dbu:4,debian:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39],debug:[4,20],decim:34,declar:[4,12,19],declar_interfac:4,decod:33,decor:44,decoupl:42,decreas:44,dedic:[1,11,23,34],deep:42,deeper:11,deepli:[18,44],def:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,33,34,35,36,37,38,39,40,41,42,43,44,45,46],defab:4,defaultstyl:[22,38],defaultvalu:38,defin:[10,11,12,14,16,19,30,32,33,34,35,38,42,43,44],define:30,definit:[10,11,12,22],degre:34,delet:[12,14,16,21,23,32,38,44],delta:[30,34],demo:39,demot:30,denser:44,densiti:[38,44],depend:[1,10,30,34,40,42,43],deplib:10,depth:44,deriv:4,derivedobject:11,describ:[25,30,34,35,38,43],descript:[4,11],descrob:34,design:4,design_r:44,desir:34,despit:38,destroi:[11,12,16,21,23],detail:[4,19,22,24,26,38,41,42],detector:33,deterior:34,determin:12,determinist:44,dev:40,devel:[40,42],devel_anabat:[40,42],develop:[4,26],developp:4,devic:44,devtoolset:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],dff:43,dff_4:33,dfft_4:33,diagon:40,dialog:44,dict:[21,34],dictionari:[12,20,21],dictionnari:[12,20,32,34,43],did:[14,25,40,44],differ:[11,16,21,24,30,32,33,34,38,43,44],differenti:44,difficult:[40,44],diffus:30,digit:[26,34],digitalinit:26,dimens:[30,34,44],direct:[11,12,14,16,30,32,34,35,38,44],directdeletemethod:16,directdestroymethod:16,directgetlongattribut:[11,13,16],directionn:16,directli:[14,20,23,25,26,35,40,43,44],directsetlongattribut:[13,16],disabl:[23,35,44],disambigu:30,disclaim:4,disconnect:24,discoupl:43,discrep:25,diseappear:30,displac:44,displai:[12,24,38,44],display:44,distanc:[25,30,50],distinguish:[30,44],distribut:[4,39],disturb:43,ditch:44,divid:35,divis:34,dksdir:25,dl_export:[11,12],dobreak:[19,20,24,26],doc:[16,19,24,26,34,40],dochip:43,document:[2,14,17,18,23,24,28,31,34,36,38,40,42,43,44,45],docutil:40,doe:[12,23,25,34,38,40,42],doesn:[34,44],dogleg:44,don:[12,22,23,40,43,44],done:[12,19,34,38,44],dosometh:[23,43],dot:[42,44],dotfil:41,doubl:14,down:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,34,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],download:[40,44],doxygen:[0,5,6,7,8,9,37,40,43,46],dozen:44,dp_sxlib:38,dpgen:4,dpgenadsb2f:4,dpgenand2:4,dpgenand3:4,dpgenand4:4,dpgenbuff:4,dpgenbus:4,dpgenconst:4,dpgendff:4,dpgendfft:4,dpgenfifo:4,dpgeninv:4,dpgenmux2:4,dpgennand2:4,dpgennand2mask:4,dpgennand3:4,dpgennand4:4,dpgennbus:4,dpgennmux2:4,dpgennor2:4,dpgennor2mask:4,dpgennor3:4,dpgennor4:4,dpgennul:4,dpgenor2:4,dpgenor3:4,dpgenor4:4,dpgenram:4,dpgenrf1:4,dpgenrf1d:4,dpgenrf1dr0:33,dpgenrf1r0:33,dpgenrom2:4,dpgenrom4:4,dpgensff:4,dpgensfft:4,dpgenshift:4,dpgenshrot:4,dpgenxnor2:4,dpgenxnor2mask:4,dpgenxor2:4,dpi:44,drain:30,draw:[19,30,44],drawback:42,drawn:44,drc:30,drive:[33,43],driven:38,drop:[40,42],druc:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,34,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],due:[38,44],dumb:38,dummi:[22,38,40,43],dump:[21,40,42,44],duplic:34,dupui:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],dure:[35,44],durole:41,dvipng:40,dx1:34,dx2:34,dy1:34,dy2:34,dyld_framework_path:40,dyld_library_path:22,dynam:[14,23,33,40],dynamic_cast:11,each:[1,12,14,16,24,30,32,33,34,35,38,43,44],eas:[20,38],easi:34,easier:[30,32,34],easiest:40,easili:[23,38,44],east:[34,43],edg:[30,43,44],edit:40,editor:[4,19,20,24,26,30,32],edu:41,effect:[33,35,44],effort:[26,38,44],egin:35,ego:20,eight:34,either:[12,30,33,34,35,40,43,44],el7_64:40,electr:23,electric:30,element:[1,19,21,32,44],elif:34,els:[1,11,12,14,16,34,38],emit:12,empti:[29,33,44],emul:[12,40],enabl:[4,33],encapsul:[4,11,12],encompass:14,encount:50,encrypt:1,end:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],endif:[11,12,14,16],endl:[11,12,21],endswith:[21,38],enforc:24,eng:41,engin:26,engineloadgrbynet:26,enginenonetlayerassign:26,enough:[24,34,43],enrich:23,ent:11,enter:44,entir:14,entiti:11,entitycast:11,entri:[22,38,43,44],enumer:[34,38],env:34,envelop:34,envenli:44,environ:[4,19],epel:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],eplac:44,eponym:[43,44],equal:[33,34,44],equip:39,equival:[23,24,34,44,50],eras:[43,44],error:[1,4,11,12,14,26,33],esc:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],escap:44,escassut:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],especi:19,essai:34,essenti:[40,44],etc:[1,19,22,29,34,38,40,43],etesian:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25],etesianengin:26,eval:[22,40],even:[24,30,33,42,43],event:[35,44],eventslimit:44,ever:21,everi:[12,32,34,38,44],everybodi:26,everyth:[12,38,44],exacltli:30,exact:[19,43],exactli:[20,30,40,43,44],examin:40,exampl:[1,4,10,11,12,13],except:[12,19,32,34],excess:44,execut:4,exempl:[32,34,44],exist:[1,21,22,34,38,44,50],exit:[43,44],expand:30,expansion:34,expect:[1,13,24,38,43],expens:13,experi:44,explain:24,explan:[19,44],explanat:30,explanatori:[12,23],explicit:[13,19,24],explicitli:23,expor:44,expos:[12,14,21],exposur:14,express:[19,23,25,30,34,38,44,50],ext:30,extand:34,extend:[30,32,34],extens:[4,19,20],extent:[38,43,44],extern:[11,12,14,16,19,23,24,32,34],extra:[38,40,44],extract:[12,35],extractor:30,extreme:38,face:34,facil:4,fact:[11,14,39],factor:[42,44,50],fail:[11,12,44],failsaf:44,failur:44,fairli:44,fall:40,fals:[1,11,12,22,32,33,34,38,44],familiar:[14,28,29],fanci:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],far:[14,31],fashion:14,fast:[38,44],fc13:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],fc23:40,fc_64:40,featur:44,fedora:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],feedthru:44,feel:23,fgr:44,fhs:40,field:[11,12,16,44],fifo:33,fifo_4_16:33,figur:[30,34,44],file_nam:34,filenam:[34,35,38],filesystem:[1,40],fillcel:4,filler:24,filler_1:24,filler_2:24,filter:[4,24],find:[24,34,38,40],fine:44,finger:44,finish:[19,32,34],first:[4,10,12],fit:[19,20,24,26,34,44],five:30,fix:[4,19,30,35],flag:[19,23,24,26,30,33,40,44],flatten:[18,43,44],flavor:[12,16],flex:40,flip:33,flop:33,flow:[4,34],flute:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],fly:24,follow:[10,11,12,14,19,23,30,33,34,35,38,40,43,44],fonction:34,font:40,footprint:44,forc:[12,35,43,44],forens:40,forget:22,forgot:1,forgotten:34,form:[1,34,38,44],format:[1,25,34,35,42,44],found:[14,19,24,26,34,38,40],founder:30,foundri:[19,30,42,43],four:[12,30,33,43,44],fourth:33,framework:[19,21,24,26,40,42],franck:30,free:[26,44],freebsd:40,freed:23,freedpk:22,freepdk45:25,freepdk:25,freepdk_45:[1,22],french:40,from:[11,12,13,14,16,19,21,23],fromlambda:[19,23,24,26],ftp:39,full:[1,33],fulladd:[24,26,34],fulli:[19,26,42,43],fuse:[19,23],futur:14,gabriel:41,gap:44,garbag:23,gate:[30,33,44],gaug:[30,38,43,44],gcc:40,gcell:44,gdb:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],gdsii:44,gener:[0,4,5,6,7,8,9],generic_method_head:[11,12,16],genlib:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],geometr:[30,34,43],get:[12,13,14,18],get_cata_lib:32,getcel:[11,12,21,24,26],getcompon:21,getdb:[19,24],getenv:38,getheight:11,gethostnam:1,getlay:[19,24],getmasternet:24,getnam:21,getnet:[11,21,24,26],getobjectid:[12,16],getplug:[24,26],getrefxy:4,getstr:[23,44],gettechnolog:[19,24],getwidth:11,getx:[11,13,16],gety:[11,16],ghdl:34,gigant:14,git:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],github:40,give:[10,11,19,30,32,33,34,42,44],given:[11,12,14,19,20,24,30,32,33,34,35,38,40,43,44],global:[4,12,24,30,38,41,42],globallengththreshold:44,globalripuplimit:44,gnu:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],goal:23,goe:14,good:[10,44],gouvin:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],gpl:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],graal:30,graphic:[4,22,38,40,42,43],graphviz:40,great:43,greater:[34,42],grew:44,grid:[4,19],ground:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,32,33,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],group:[23,42],gscl45nm:25,guarded:33,gui:40,guid:4,hack:4,had:30,halfadd:34,hand:30,handl:[19,34,43],hard:[33,38],has_kei:[19,20,24,26,38,43],hasn:44,have:[1,11,12,14,16,19,21,23,24,26,30,32,33,34,35,38,40,42,43,44,50],haven:34,hcatch:[11,12,13,14,16],head:4,header:4,hecadecim:34,height:[11,14,29,30,34,44],help:[20,40],helper:[4,12,22],here:[0,5,6,7,8,9,12,14,24,25,30,35,37,38,39,40,44,46,47,50,51],herit:32,hesit:43,hexa:34,hexadecim:[34,35],hfill:29,hidden:42,hide:44,hierach:34,hierarchi:4,high:[26,38,44],highest:44,highlight:4,highlit:44,himself:[32,34],histor:30,hmeti:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],hoc:[42,44],hold:[11,14,19,44],holder:18,hole:30,home:[1,20,25,34,38,40,41],homedir:38,hook:[4,12],hope:14,horizont:[11,19,23,24,30,34,43,44],hostnam:1,how:[4,18,19,21,23,24,30,33],howev:38,href:29,hspace:43,html:[34,39,40],htrackreservedloc:44,htracksreservedloc:44,htry:[11,12,13,14,16],http:[29,39,40,41,47,50,51],huge:29,hugo:41,hundredth:19,hur_techno_name:34,hurricaneerror:11,hurricaneplug:32,hwidth:43,hypernet:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17],i0_20:34,i386:40,iastat:41,idea:44,ident:[11,34,38,44],identifi:[38,43,44],ifndef:[11,12,16],illegal:34,illustr:[19,24,25,43],imag:[29,44],imcomplet:42,immediatli:44,implant:30,implement:[12,14,23,26,38,42,44,49],implemet:38,impli:[16,23],imposs:34,improv:44,improve:42,in0:34,in1:[33,34],in2:[33,34],in3:[33,34],in4:33,in_lo:38,in_ph:38,includ:[10,11,12,14,16,23,34,40,42,44],include:40,includegraph:29,inclus:44,incompat:34,increas:[30,44],inde:44,indeed:[32,34],indent:23,index:[30,34,49],indic:[32,34],indirect:11,individu:[30,44],infinit:[22,40,44],info:[22,38,44],inform:[14,19,20,30,44,50],inherit:[12,32],init:[12,16],inithurrican:[11,12],initi:[11,12,35,38,44],initialis:[4,12,22,32,34,35],innov:42,inout:[32,34],input:[32,33,34,35,42],insert:[19,38,43],insid:[12,19,20,26,30,43,44],inspect:44,inspector:4,inst:[32,33,34],inst_adsb2f:33,inst_and2:33,inst_and3:33,inst_and4:33,inst_buff:33,inst_bus:33,inst_const:33,inst_dff:33,inst_dfft:33,inst_fifo:33,inst_inv:33,inst_mux2:33,inst_nand2:33,inst_nand2mask:33,inst_nand3:33,inst_nand4:33,inst_nbus:33,inst_nmux2:33,inst_nor2:33,inst_nor2mask:33,inst_nor3:33,inst_nor4:33,inst_nul:33,inst_or2:33,inst_or3:33,inst_or4:33,inst_ram:33,inst_rf1:33,inst_rf1d:33,inst_rom2:33,inst_rom4:33,inst_sff:33,inst_sfft:33,inst_shift:33,inst_shrot:33,inst_xnor2:33,inst_xnor2mask:33,inst_xor2:33,instal:[1,10,19,22,24,25,26,38,40,44],install:4,installat:4,instanc:[4,14,19,23],instanci:[4,11,32],instanciat:[4,32],instanti:4,instantiat:[32,34],instead:[1,11,14,16,22,25,34,40,44],instens:38,insti:33,insto:33,instop:33,instruct:[34,40,44],instshamt:33,insul:12,integ:[19,35,38],integer_word_length:35,integr:[12,42,43],intend:44,interact:20,interfac:[4,12,14,19,22,23,24,32,33,34,35,38,42],intermedi:4,intern:[32,34,35],internat:29,interpret:[22,43],interrupt:12,intersect:30,intert:33,interv:34,introduc:[19,42,43,44],introduct:4,inv:34,inv_54:33,inv_x1:21,invalid:[11,12,14,16],inversor:34,invert:[30,33],inverter:33,invertor:[19,20],invok:34,iopadgaug:43,iowa:41,isdir:[1,38],isn:[34,35],isobar:[10,11,12,13,14,16],isobar_py_component_h:11,isobar_py_contact_h:11,isobar_py_entity_h:11,isobar_py_point_h:16,ispd:44,ispycompon:11,ispycontact:11,ispyentiti:11,ispyhorizont:11,ispylibrari:12,ispypoint:16,ispyvert:11,issu:[14,26],istself:10,ital:44,item:44,iter:[21,44],itself:[1,12,30],iwl:35,jean:[29,41],json:42,just:[13,14,20,21,24,25,30,34,38,40,44],katabat:[0,1,2,3,5,6],katana:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25],katanaengin:26,keep:[16,26],kei:[12,32,34,43,44],kept:30,keyword:20,kgr:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],kind:[1,19,21,22],kit:8,kite:[0,1,2,3,5,6,7],knife:44,knik:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],know:[12,40,43],known:[24,44,50],kwarg:16,laboratori:29,lambda:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29],lanch:22,lang:40,langag:1,languag:[4,34,35],larg:[29,44],last:[12,35,38,40,44],lastli:[1,12,16],latch:33,later:[16,19,24,42,44],latest:34,latex:40,lauch:43,launch:[20,22,40,43],layer:4,layerassign:26,layout:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],layoutt:38,lbd:19,lcw:30,ld_library_path:22,lead:44,leaf:[18,43,44],least:[38,40,43],lef:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24],lefconvertfactor:50,lefdef:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],lefimport:25,lefimporttmpcel:50,left:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,33,34,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],legal:[34,35,42],leght:34,lenght:34,length:[19,30,35],lepka:[22,40,43],less:[14,30,44],let:[16,24,44],letter:34,level:[11,12,13,14,18,19,20,24,30,38,40,42,43,44],lex:40,lgpl:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],lib:[12,25,40,44],libboost:40,libbz2:40,liberti:44,libisobar:14,libqt5svg5:40,libqwt5:40,libqwt:40,librari:[4,10,11],libstdc:40,libxml2:40,licens:[4,29],life:[16,30],like:[11,12,14,20,21,22,23,26,32,33,34,38,40],limit:[23,24,44],line:[4,40,43],linear:44,linebreak:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],link:4,linker:14,linux:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],lip6:[29,39,40],list:[4,10,21,24,32],listdir:38,littl:[20,30,44],live:[14,44],load:[4,19,20],loader:[25,42],loadglobalrout:26,local:[1,38,40,44],localinstal:40,localripuplimit:44,locat:[34,43,44],lofig:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],log2:33,log:44,logic:[8,19,23,24,25,34,35,42,44],logiciel:39,logicin:32,logicinout:32,logicout:32,logicunknown:32,logmod:[1,22,38,44],logo:29,logocc:29,longer:[14,40,44],longglobalripuplimit:44,look:[4,12,16,19,25,38,40],loop:[21,22,33,34,40,44],lot:[24,50],low:44,lower:[19,24,33,34,38,44],lowercas:[12,19],lsb:[32,34],lybrari:12,maco:40,macos:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39],macport:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],macro:[10,11,12,14,16,33,44,50],made:[14,24,25,26,30,32,33,34,40,43,44],mai:[14,16,19,20,21,22,23,24,30,34,38,40,43,44],mailto:29,main:[23,40,42,44],mainli:[38,42,44],maintain:44,make:[12,18],makefil:40,manag:[14,19,23,25,42,43],mandatori:[12,19,22,32,33,34,38],mani:[14,23,30,34],manipul:13,manual:[4,14],map:[4,21,32,33],marek:41,margin:[26,38,44],mark:35,mask:33,masson:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],master:[14,24,26,32,40,42,44],mastercel:[32,34],masterlibrari:12,masternet:24,match:[21,34,38,44],materi:44,matrix:30,mauka:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],max:38,maxim:44,maximum:44,maxtracelevel:[38,44],mayb:34,mbk:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],mbk_:19,mbk_to_rds_bigvia_hole:4,mbk_to_rds_bigvia_metal:4,mbk_to_rds_segment:4,mbk_to_rds_via:4,mbk_wiresetting:4,mean:[14,21,23,25,30,34,38,40,44,50],meaning:[30,33,34],mechan:[12,14,16,18],medskip:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],member:42,memento:4,memori:[19,21,23,43,44],menu:[20,42,44],merg:32,messag:[19,20,24,44],metal1:[19,30],metal2:[24,30],metal3:24,metal5:44,metal:[30,44],meth_noargs:[11,12,16],meth_static:[11,12],meth_varargs:[11,12,16],method:[4,12,13,14,16,23,30],method_head:[11,12,16],micromet:[30,50],micron:25,microns:50,middl:34,migrat:42,million:44,miloyip:40,mimic:[12,38],min:38,minim:30,minimum:[43,44],minimumsid:43,minipag:41,minor:[38,40,44],mintracelevel:[38,44],minut:44,mip:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],mirror:43,misc:[1,22,38,44],miscellan:4,miss:44,mistak:[12,19,34],mistral:34,mix:[7,8,14,26,40],mkdir:40,mode:4,model:[4,19,23,24,30],modelnam:[33,34],modif:[19,21,34,40,44],modifi:[16,21,22,34,40,43,44],modul:[4,10],modular:14,modules_stratu:34,mofi:20,monolith:14,more:[1,11,19,21,23,30,34,38,39,40,42,44],moreov:14,mosi:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],most:[34,38,44],mostli:[10,23,44],mount:1,mous:44,movabl:44,move:44,msb:[32,34],much:[14,32,34,38,44],multipl:[25,30,34,42,44,50],multiplex:33,multiplexor:[4,32],multipli:[30,34],must:[1,10,11,12,14,19,20,22,23,24,25,30,34,35,38,40,43,44],mutat:12,mux2_8:33,mux:[32,34],mx2:34,my_addaccu_:34,my_and2_4bit:34,my_dpgen_and2:34,my_inv:19,myclass:[32,34],myfunc:23,myinst1:34,myinst2:34,myinst3:34,myinst:34,mylib:38,mymap:32,mynet:34,myparam:32,myref:34,myself:18,na2:34,na3:34,na4:34,name:[4,10,11,12,14],namespac:[4,10,11],nand2:33,nand2_8:33,nand2mask_0x0000ffff:33,nand3:33,nand3_20:33,nand4:33,nand4_9:33,nand:33,narrow:44,navig:21,nbit:[33,34],nbit_cmd:33,nbsp:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],nbuse29:33,nck:38,ncsu:25,nda:1,ndadirectori:1,ndif:[19,30,34],nearest:43,need:[10,11,12,14,16,19,22,23,24,26,30,34,38,40,42,44],neg:34,neither:[12,34],nero:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],net8:34,net:[4,11,14,18],neta:34,netb:34,netc:34,netck:34,netcmd:34,netcout:34,netexternalcompon:[19,24],neti0:34,neti1:34,netin:34,netinput:32,netlist:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23],netnam:34,neton:34,netout:34,netq:34,nets:34,netv:34,netvdd:34,netvss:34,network:1,never:21,nevertheless:34,newli:[19,34],newnet:34,newpag:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],next:[34,35,40],nimbu:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],nmux2_5:33,nmx2:34,nnnn:44,no2:34,no3:34,no4:34,noflag:26,noindent:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],non:[4,12,14],noncommerci:29,none:[19,20,24,26,32,38,43,44],nor2:33,nor2_8:33,nor2mask_000111:33,nor3:33,nor3_3:33,nor4:33,nor4_15:33,nor:[12,33,34],normal:[26,44],normals:29,north:[34,43],nosym:[33,34],notat:[32,34,44],note:[4,11,12,30,33,34,40],now:[11,24,40,42,44],nterfac:35,ntie:[19,30,34],ntran:[19,34],ntrans:[19,30,34],nul:33,nul_4:33,number:[12,14,16,19,30,32,33,34,35,43,44],nutshel:40,nwell:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,34,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],nword:[33,34],nxr2:34,nymous_:21,o2_1:[24,26],o2_x2:[24,26],ob_typ:[11,12,16],object:[11,12,13,14,16,19,20,21,23,24,30,34,38,44],observ:35,obsolet:42,obtain:[30,34,44],obviou:[16,44],obvious:[14,43],obviousli:[14,24,30,43],occur:[14,19,33,34,40],occurr:11,ocp:30,octal:35,odd:[30,43],off:[14,30,34],offset:[30,34],offsetx:34,offsety:34,often:[30,44],old:[14,26,40,42],older:44,ommit:44,onc:[12,14,34],once:[19,43,44],one:[11,24,33,34,43,44],onli:[11,13,14,18,19,20,21,23,24,25,26,30,32,33,34,35,38,40,42,43,44],only:[12,32,33,34,40],open:[19,20,23,24,26,32,34,44],opencham:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],oper:[4,14,23,24,32,33],operand:33,operat:33,opt:40,optim:[33,40],option:[4,12,20,22,32,33,34,35],optional:35,optionali:1,optionn:[33,34],or2:[33,34],or2_8:33,or3:33,or3_5:33,or4:33,or4_16:33,order:[21,24,32,33,34,38,40,44,49],ordere:43,ordinari:[24,38,43],ored:33,org:29,organ:[12,21],organis:42,orient:30,orientat:24,origin:[14,30,44],osu_soc:25,other:[12,13,14,19,20,23,24,30,34,35,38,40,41,42,43,44],otherwis:[14,32,33,34,44],ouput:33,our:[12,14,23,38,40],out:[14,32,33,34],out_lo:38,out_ph:38,outdat:40,outer:42,outil:34,outlin:44,output:[32,33,34,35,42,44],outsid:[10,19,21],over:[13,21,24,26,30],overal:44,overflow:33,overhang:30,overlap:[30,44],overload:[12,19],overloard:[32,34],overrid:22,overwritten:44,own:[11,34,38,40,42,44],owner:19,p_a0:43,p_a1:43,p_a2:43,p_a3:43,p_b0:43,p_b1:43,p_b2:43,p_b3:43,p_cin:[34,43],p_ck:43,p_cout:[34,43],p_d0:43,p_d1:43,p_d2:43,p_d3:43,p_f3:43,p_i0:43,p_i1:43,p_i2:43,p_i3:43,p_i4:43,p_i5:43,p_i6:43,p_i7:43,p_i8:43,p_ng:[34,43],p_noe:43,p_np:[34,43],p_ovr:43,p_q0:43,p_q3:43,p_r0:43,p_r3:43,p_vddeck0:[34,43],p_vddeck1:[34,43],p_vddick0:43,p_vsseck0:43,p_vsseck1:[34,43],p_vssick0:[34,43],p_y0:43,p_y1:43,p_y2:43,p_y3:43,p_y:34,p_zero:43,packag:4,pad:[4,19],pad_east:32,pad_north:32,pad_south:32,pad_west:32,padeast:34,padlib:38,padnorth:34,padsouth:34,padwest:34,page:[24,49],pagestyl:29,pair:[19,34,43],paper:44,para:34,paradigm:38,parallel:40,param:[4,32,33],paramet:[4,12,14,16,24,26],parameterst:[1,22,26,38],parametertyp:38,paramid:38,paranoid:[22,38],parent:12,pars:[11,34],parser:[30,42],part:[4,11],partial:[11,14,42],particular:[12,20,23],partit:43,paseast:34,pass:[14,24,43],paswest:34,pat:35,patamet:34,path:[1,4],pathnam:34,patli:30,pattern:[4,32],pattern_begin:4,pattern_end:4,patwrit:4,paul:[29,41],pdf:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],pdif:[19,30,34],peopl:14,per:34,percentag:[38,44],perform:[12,33,34,38,40,42,43,44],perhap:44,peripheri:34,permit:[33,34],persist:14,phfig:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],phseg:30,phvia:30,physic:[4,19,23],physical:34,physical_grid:30,pictur:[34,44],piec:34,pin:[23,24,34,50],pitch:[30,34],pixel:44,pixmap:44,place:[4,14,18,19,23],placeandrout:26,placebottom:4,placecentr:4,placecontact:4,placed:24,placeglu:4,placeleft:4,placement:[4,24,26,32,34,38,42],placementstatu:24,placepin:4,placer:4,placeref:4,placeright:4,placeseg:4,placetop:4,plain:13,plane:43,pleas:[19,34,40],plot:34,plu:34,plug:[18,19,23],plugin:4,point1:34,point2:34,point:[12,13,14,16,19,23,24,30,34,35,38,43,44],pointer:[11,12,14,16],poli:[19,30,34],polici:38,poly:[19,30,34],polysilicium:30,pop:33,popup:44,port:[32,34,35,40,42],posit:[19,30,34,43,44],possibl:[12,20,23,24,30,34,38,40,43,44],postfix:43,power:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23],powerr:4,practic:[10,30],pre:[40,44],preced:35,precis:[14,19,34,50],preclud:42,predic:12,prefix:[30,43],preliminari:42,prepend:38,prerequisit:40,presenc:11,present:[11,21,23,44],press:44,pretti:[25,38],prevent:43,previou:[30,34,38,40,44],previous:[11,12,26,43],print:[1,4,21,23,38],printabl:[2,17,28,31,36,45],printer:44,prior:[19,25,26,44],problem:42,proce:40,procedur:[34,35,36,44],process:[21,22,24,34,38,42,44],produc:35,profil:40,progess:23,program:[12,14,34],programm:33,progress:20,project:40,propag:[43,44],properti:[12,35],proprieti:35,protocol:21,provid:[1,4,12,13,14,19,22],proxyerror:13,ptie:[30,34],ptqt4:40,ptran:[19,34],ptrans:[19,30,34],pub:[39,40],pull:40,pure:[22,23,38,44],purist:30,purpos:[20,34,44],push:33,pust:34,put:[12,14,16,30,34,38,42,43,44],pwell:[30,34],pxlib:[38,43],py_incref:[11,12],py_initmodul:[11,12],py_library_h:12,py_return_none:[11,13],pyany_aslong:[13,16],pyarg_parsetupl:[12,13,14,16],pycel:[11,12],pycell_link:[11,12],pycfunct:[11,12,16],pycompon:[11,14],pycomponent:11,pycomponent_destroi:11,pycomponent_getnet:11,pycomponent_getx:11,pycomponent_gety:11,pycomponent_link:11,pycomponent_linkpytyp:11,pycomponent_method:11,pycomponent_o:[11,14],pycontact:11,pycontact_cr:[11,14],pycontact_destroi:11,pycontact_getheight:11,pycontact_getwidth:11,pycontact_link:[11,14],pycontact_linkpytyp:11,pycontact_method:11,pycontact_o:11,pycpp:10,pydatabas:12,pydatabase_o:12,pydatabse_o:12,pydbu_fromlong:13,pyentiti:11,pyentity:11,pyentity_destroi:11,pyentity_getcel:11,pyentity_link:11,pyentity_linkpytyp:11,pyentity_method:11,pyentity_new:11,pyentity_o:11,pyerr_clear:14,pyerr_setstr:[11,12,13,14,16],pyhorizont:11,pyhorizontal_link:11,pyhorizontal_o:11,pyhurrican:[10,11,12,16],pyhurricane_method:[11,12],pyinclud:10,pyinstanc:14,pyinstance_link:14,pylay:14,pylayer_o:14,pylibrari:[10,12,14],pylibrary:12,pylibrary_cr:12,pylibrary_dealloc:12,pylibrary_destroi:12,pylibrary_getcel:12,pylibrary_link:12,pylibrary_linkpytyp:12,pylibrary_method:12,pylibrary_o:12,pymethoddef:[11,12,16],pymodule_addobject:[11,12],pynet:[11,14],pynet_link:11,pynet_o:14,pyobject:[11,12,13,14,16],pyobject_head:[11,12,16],pyobject_new:16,pypoint:[13,16],pypoint_dealloc:16,pypoint_getx:[13,16],pypoint_gety:16,pypoint_init:16,pypoint_link:16,pypoint_linkpytyp:16,pypoint_method:16,pypoint_new:16,pypoint_o:16,pypoint_setx:[13,16],pypoint_sety:16,pyqt4:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],pyqt5:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],pyqt:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],pyseg:11,pystring_asstr:12,python27:40,python2:40,python:[0,1,2,3,4,5,6,7,8,9,10],pythoncpp:17,pythonpath:[22,44],pythontutori:28,pytype_ready:[11,12],pytype_ready_sub:11,pytypecompon:[11,14],pytypecontact:11,pytypeent:11,pytypeinheritedobjectdefinit:11,pytypelay:14,pytypelibrari:[10,12],pytypenet:14,pytypeobject:[11,12,16],pytypeobjectdefinit:[12,16],pytypeobjectlinkpytyp:[11,12],pytypeobjectlinkpytypenewinit:16,pytypepoint:16,pytyperootobjectdefinit:11,pyvert:11,pyvertical_link:11,pyvertical_o:11,qt4:40,qt5:40,qtbase5:40,qtbase:40,qtsvg:40,quadri:43,quadruplet:38,quadtre:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],qualiti:44,quantiti:44,quarter:43,queri:19,quit:[32,44],qwt:40,rail:4,ram:[33,43],ram_32_32:33,ram_ct:43,ramlib:38,rang:[34,35],rapidjson:40,rather:44,ratio:[26,38,44],rcw:30,rds:4,rds_activ:30,rds_alu1:30,rds_alu2:30,rds_alu3:30,rds_alu4:30,rds_alu5:30,rds_alu6:30,rds_cont:30,rds_gate:30,rds_ndif:30,rds_nimp:30,rds_pdif:30,rds_pimp:30,rds_poly:30,rds_via1:30,rds_via2:30,rds_via3:30,rds_via4:30,rds_via5:30,reach:[14,44],reachabl:44,read:[12,33,38,42,50],readabl:44,readi:19,real:[4,12,19,21],realli:[40,44],reason:30,recent:[30,34],recommand:44,recommended:35,record:44,rectang:30,rectangl:30,recurs:4,red:44,redefin:[11,38],redefinit:11,redhat:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39],redirect:44,redraw:44,redund:30,ref:33,refin:12,reflect:44,refnam:34,refresh:[32,34,44],reg:[32,34],regard:[23,34],regener:40,regex:40,regexp:38,regist:[4,10,12,32,33],regnumb:33,rel:[19,30,34,35,40],relat:[11,16,24,35,38,40,44],releas:[4,40,41],relev:[11,12,43],reli:[14,30,40,44],reload:44,remain:[11,12,16,21,44],remark:[11,38,44],rememb:11,remind:18,remov:[21,43,44],ren:33,renam:[43,50],render:44,reopen:20,reorganis:43,repeatedli:44,replac:[23,38,42,44],replic:12,repositori:[39,40,42],repoview:39,repres:[24,30,34,35,44,50],represent:44,request:[21,33,43],requir:[4,14,32,38],reserv:44,reset:[12,33,44],resizeab:4,resolut:[23,44],respect:[14,38,44],respons:[12,44],rest:[20,26],restart:[43,44],restructuredtext:40,result:[12,14,20,21,23,24,33,38,44],retain:14,revers:[11,14],revert:[40,42],rewrit:[14,42],rewritten:[42,44],rf1_4_16:33,rf1d_4_16:33,rf2lib:38,rflib:38,rhel6:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],rhel7:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],rhel:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],right:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,33,34,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],ring:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,34,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],rip:44,ripup:44,ripupcost:44,rise:[30,34],risk:30,rok:33,rom2_0b1010_0b1100:33,rom4_0b1010_0b1100_0b1111_0b0001:33,rom:33,romlib:38,root:[1,12,14,19,24,26,38,40],roselyn:[35,41],rot_m:34,rot_p:34,rotat:[24,33,34],rotop:33,rout:[4,23,26,30,32],routabl:44,routag:44,routageck:34,routeck:4,router:[4,19],routingdriven:[38,44],row:24,rowend_x0:24,rp1:24,rp2:24,rpm:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],rsave:4,rubber:44,rule:[30,43,44],ruler:44,run:[19,20,22,25,26,34,38,40,43,44],runglobalrout:26,runnabl:19,runnegoci:26,runtim:44,s2r:30,safe:40,safeti:44,sai:[14,22,24,40,43],said:19,sake:[11,19],same:[10,11,14,19,21,24,30,32,34,35,38,44],sarri:33,satur:44,saturateratio:44,saturaterp:44,save:[4,11,12],savecel:[19,24,26],scale:29,scan:33,scarri:44,scheme:[40,43,44],scientif:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],scin:33,scn6m_deep_09:38,scope:23,scout:33,screen:44,script:[1,4,19],scriptmain:[19,20,24,26,43,44],scrub:12,search:[21,38,49],second:[1,4,14,19,24,30,33,34],section:[38,40,50],secur:38,see:[12,14,19,20,23,24,30,32,34,35,38,40,43,44],seem:[30,34,40,42,50],seen:[12,26],sefl:34,segment:[4,19,24],sel0:33,sel1:33,sel:33,select:[4,24,33],self:[11,12,13,16,23,32,33,34,35,38],selr:33,selram:33,selw:33,semant:23,send:30,sens:44,sensit:34,sentinel:[11,12,16],separ:[1,12,14,30,32,40,42,43,44],sequenc:[26,34,44],sequenti:38,serv:[7,8],set:[1,4,10,12,13],setabutmentbox:[19,20,24],setadd:34,setand:34,setbuff:34,setcel:[19,20,24,26],setcomp:34,setdiv:34,seteditor:43,setextern:[19,24,26],setglob:[19,24,26],setmult:34,setmux:34,setnet:[24,26],setnot:34,setor:34,setplacementstatu:24,setrefin:4,setreg:34,setshift:34,settermin:[19,20],settransform:24,setup:[12,19,22,26,38,40],setx:[13,16],setxor:34,sety:16,seven:44,sever:[14,32,34,44],sff2:34,sff3:34,sff:34,sff_4:33,sfft_4:33,shadow:21,shamt:33,shape:[26,30],share:[4,10,11],sharealik:29,she:11,shelf:14,shell:[22,34,40],shellsuccess:43,shift:[32,33,34,44],shifter:[4,32,33],shifter_4:33,ship:42,shortcut:4,should:[14,16,22,34,35,40,44],shouldn:30,show:[14,19,21,30,38,44],shown:[12,30,34,38,43],shrot_4:33,si2:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],side:[30,34,43,44],sig:32,sign:[33,34,38],signal:[4,7,8,24,32,33],signalin:[33,34,35],signalinout:[33,34,35],signalout:[33,34,35],signalunknown:34,signatur:[11,12,14],silli:30,similar:[11,44],similarli:35,simpl:[4,25,30,38],simpler:40,simplest:[1,19,38],simpli:[19,21,30,34],simplif:43,simplifi:[22,24,34,40],simul:[34,35,42],sinc:21,singl:44,site:38,size:[30,33,34,35,43,44],skip:21,slanski:34,slice:34,slight:23,sligthli:40,slot:44,slow:44,slsoc6x:40,slsoc6x_64:40,slsoc:39,small:[26,28,29,30,34,38,43,44],smallest:[33,50],smallskip:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],snapshot:4,snx:25,soc:[38,39,40],socket:[1,44],softwar:4,sole:20,solut:44,solv:44,some:[4,14,19,21,23,30,32],someth:[19,23],sometim:24,somewhat:24,sophi:[32,33,34,41],sorbonn:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],sourc:[19,30,34,40,42,44],sout:[24,26,34],sout_1:[24,26],south:[34,43],space:[26,30,34,38,43,44],spacemargin:[26,38,44],span:16,spec:40,special:[12,22,23],specif:[1,12,23,38,43,44],specifi:[33,34,44],speed:44,speedup:42,sphinx:40,spl1:34,split:[14,43,44],spread:[26,44],squar:[26,30],src:40,sroka:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],st_config:34,stabl:[40,42],stack:12,stage:4,stai:30,stamp:35,stand:[39,44],standalon:4,standard:[12,14,16],standard_instances_list:32,standart:[40,43],standpoint:30,start:[23,30,34,44],starter:18,startswith:1,state:[19,21,23,24,26,41,44],statement:50,static_cast:[11,13],statu:24,stechno:43,step:[11,12,30,34,38,40,43,44,50],still:[11,16,31,40,42,44],stimuli:4,stimulu:35,stl:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],stop:[19,20,24,26,43,44],storag:50,store:[12,13,19,23,33,44],straightforward:25,straigthforward:24,strap:44,strapripuplimit:44,strategi:43,stratu:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31],stratus1:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],stratus2:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],stratus:34,stratus_mapping_name:34,stream:44,strict:[24,30],string:[12,19,23,33,34,35,38],strip:40,stroke:44,strongli:44,strongly:35,struct:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],stuck:[30,33],stuf:43,stuff:32,stupid:1,style:[12,44],sub:[22,34,35,43],subject:44,subsequ:50,substract:[33,34,44],substractor:33,subtli:21,succe:44,success:43,successful:44,successfulli:[40,44],sudo:40,suffer:44,suffic:44,suffix:43,suit:44,summar:23,summari:43,superpos:44,supli:33,suppli:[12,19],support:[10,12,14,16,23,26,35,40,42,44],suppress:44,sure:43,svn:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],swig:14,swiss:44,sxlib:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,34,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],sy_rm:34,sy_rp:34,sym:34,sym_x:34,sym_y:34,symbol:[4,12,19,22,25],symetr:34,symetri:[32,34],symmetri:24,symxy:34,sync:44,synch:44,synonym:26,synopsi:4,syntact:38,syntax:[4,12,23],synthesi:[4,25],synthet:[4,25,42,43],system:[1,24,34,38,40],system_library:38,tab:[4,24,32,34,38],table:30,tailor:12,take:[1,12,19,20,26,34,35,44],taken:[14,34,35],talu1:34,talu2:34,talu3:34,talu4:34,talu5:34,talu6:34,talux:30,target:[19,30],task:[11,22,40,44],taxonomi:38,technic:4,techno:1,technolog:1,tediou:[22,24,40],tee:44,tell:[12,19,22,30,32,33,38,40,43],temp:34,temp_ext:34,tempext:34,templat:14,temporari:50,ten:14,term:[34,41],termin:4,terminolog:19,test:[4,32],testbench:34,texliv:40,text:[34,43,44],textbf:29,textsc:29,textwidth:41,than:[14,30,34,42,44],thank:[14,32,34,43,44],thei:[12,14,19,21,22,23,30,32,34,38,40,42,43,44],them:[12,14,23,26,30,40,43,44],therefor:[24,33],thesi:44,thi:[1,2,11,12,14,16,17,18,19,21,22,23,24,26,28,29,30,31,32,33,34,35,36,38,40,42,43,44,45,50],thing:35,third:[24,30,33,40],thispagestyl:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],those:[11,12,21,22,24,30,32,33,34,38,40,43,44],though:14,three:[1,10,12,24,30,33,44],through:[12,14,18,19],througout:30,thu:[12,23,38,44],tie:30,tie_x0:24,time:[11,14,34,35,44],tmp:23,todai:19,todbu:[19,20,24,26],togeth:[33,42],toggl:44,tolambda:19,too:[14,26,30,34,44],tool:[4,14,20,22,23],toolchain:44,toolengin:26,toolkit:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],top:[34,40,43,44],topolog:44,toproutinglay:44,total:44,toward:[14,22,34],tp_compar:12,tp_dealloc:12,tp_hash:12,tp_init:16,tp_method:12,tp_new:16,tp_repr:12,tp_str:12,trace:[12,44],track:44,track_spacing_alu1:30,track_spacing_alu2:30,track_spacing_alu3:30,track_spacing_alu4:30,track_spacing_alu5:30,track_spacing_alu6:30,track_spacing_alu7:30,track_spacing_alu8:30,track_width_alu1:30,track_width_alu2:30,track_width_alu3:30,track_width_alu4:30,track_width_alu5:30,track_width_alu6:30,track_width_alu7:30,track_width_alu8:30,transform:[12,23],transistor:30,transit:35,translat:[24,30],transmiss:14,transpar:30,tricki:14,trigger:[38,44],tristat:[32,33,34,35],tristate:32,trough:43,truli:38,trunk:38,tty:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],tupl:[1,38],turn:[19,24,43,44],tutori:4,tweak:44,twenti:34,twentu:34,twice:[14,21,34],two:[11,14,18,19,20,22,23,24,26,30,32,33,34,35,38,40,42,43,44],type:[1,4,10,11],typebool:[1,22,26,38,44],typedef:[11,12,13,16],typedoubl:38,typeenumer:[26,38],typeint:[38,43,44],typeopt:38,typepercentag:[26,38,44],typerul:38,typestr:[38,43,44],typetab:38,typetitl:38,typic:[12,38,43],ubuntu:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39],uint64_t:13,unabl:40,unbound:13,uncheck:24,undef:[11,34],undefined:34,under:[4,12,14,19,20,22,24,25,26,29,30,38],underli:14,underscor:34,understand:[14,40,49],uneed:24,unexpectedli:21,unicorn:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36],unifi:44,uniform:[26,38],uniformdens:[26,38,44],uniquif:44,uniquifi:44,unit:[13,14],units:50,univers:41,unknown:32,unlik:40,unlike:[18,19,42],unlink:38,unmov:44,unpackag:40,unplaced:32,unpredict:21,unrout:44,unselect:44,unsign:33,until:[24,26,44],unzoom:44,updat:12,updatesess:[19,20,23,24,26],upgrad:40,upmc:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],upon:[14,34,36,39,44],upper:[19,30,33,34,44],uppercas:19,usabl:[16,19,30],usage:[30,44],use:[22,34,35,40],used:[33,44],useful:[4,32],user:4,usersguid:45,using:19,usr:[19,24,26,34],usual:[11,12,19,23],utf:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],val0:33,val1:33,val2:33,val3:33,val:44,valgrind:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],valid:[12,14,33,43],valu:[1,4,11,12,16,22],variabl:[1,12,19,22,30,34,38],variable_nam:1,variant:33,variou:[12,14,19],vbe:[32,44],vdd:[19,24,26,32,33,34,35,38],vddin:[32,33,34,35],vector:[21,34,35],verbos:44,verboselevel1:[1,22,38,44],verboselevel2:[1,22,38,44],veri:[26,38,40,44],version:[2,4,10,17,28,31,36,39],vertic:[11,19,24,30,34,43,44],vertiv:34,vhdl:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,34,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],via12:[24,34],via1:34,via23:[24,34],via24:34,via25:34,via26:34,via2:34,via34:34,via35:34,via36:34,via3:34,via45:34,via46:34,via4:34,via56:34,via5:34,via:30,view:[12,19,21,23],viewer:[0,4,19,20,24,38,42,43],vim:34,vimrc:34,violet:44,virtual:[4,18],visibl:[19,44],visual:[30,44],visualis:19,vlsi:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,34,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],vlsisapd:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],vspace:43,vss:[19,24,26,32,33,34,35,38],vssin:[32,33,34,35],vst:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,34,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],vtrackreservedloc:44,vtracksreservedloc:44,vwidth:43,w7_64:40,w8_64:40,wai:[12,13,14,19,23,26,30,34,40,43,44],walk:44,walkthrough:21,wallac:34,want:[11,12,14,19,20,21,22,24,32,34,38,40,44],warn:14,wave:40,weak:44,weakli:19,weari:21,weekli:24,well:[18,24,30,32,34,43,44],wen:33,were:[40,44],west:[34,43],wether:34,what:[12,14,20,24,30,34,44],whatev:[38,40,44],when:[1,13,14,22,30,32,33,34,38,40,43,44,50],where:[10,24,25,35,38,40,44],whether:[11,21,43,44],which:[1,10,11,12,16,19,20,22,23,24,30,32,34,35,38,40,41,42,43,44,50],white:44,whitespac:44,whithout:[38,43],whitout:44,whole:[11,30,33,42,43,44,50],whose:[23,38],why:[12,14],wich:34,wide:38,widget:[40,42],width:[11,14,19,30,33,34,44],width_vdd:30,width_vss:30,wil:21,window:[38,40,44],witch:20,within:[34,44],without:[19,20,30,32,33,34,42,44],wok:33,won:14,word:[33,34,35],word_length:35,work_dir:19,work_lib:21,workhors:18,working_library:38,worklib:38,world:19,wors:44,would:[13,14,21,34,38],wrap:[10,12,14],wrapper:[12,14,26,38],write:[14,18,21,33,34,35,38,43,44],written:[12,14,15,16,19,21,23,38],wrong:34,www:[39,40,47,50,51],wysiwyg:44,x86_64:[39,40],x_grid:30,xml:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,34,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],xnor2:33,xnor2_8:33,xnor2mask_0b000111:33,xnor:33,xor2:[33,34],xor2_8:33,xor:33,xored:33,xoring:33,xr2:34,xr2_1:[24,26],xr2_2:[24,26],xr2_x1:[24,26],xr2_x2:[24,26],xxxx:40,y_grid:30,y_slice:30,yacc:40,year:[14,44],yet:[11,34,40,44],yield:34,yifei:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51],yosi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24],you:[1,14,19,20,21,22,23,24,25,26,28,29,30,33,34,35,38,40,43,44],your:[4,14,19,20,22,25],yum:40,zero:[14,30,33,34],zoom:44},titles:["Hurricane/Analog Reference","1. Configuration File Workings","Configuration & Technonology","Configuration & Technology","Comprenhensive Table of Contents","CRL Core Reference","Hurricane Reference","Katabatic Reference","Kite Reference","Oroshi Reference","2. Basic File Structure and CMake configuration","4. Case 2 - Hierarchy of DBo Derived Classes","3. Case 1 - DBo Derived, Standalone","6. Encapsulating DbU","1. Introduction","7. No C++ Hurricane::Name encapsulation","5. Case 3 - Non-DBo Standalone Classe","Hurricane Python/C++ API Tutorial","9. Advanced Topics","3. Making a Standard Cell – Layout","5. Make a script runnable through cgt","4. Manipulating Cells, Nets and Components","2. Setting up the Environment","1. Introduction","6. Making a hierarchical Cell – Netlist","7. Working in real mode","8. Tool Engines (CRL Core)","<no title>","Hurricane+Python Tutorial","<no title>","Symbolic Layout","RDS – Symbolic to Real Conversion in Alliance","Stratus Developper’s Guide","DpGen generators manual","Stratus User’s Guide","Patterns module User’s Guide","Stratus : Netlist Capture Language","Unicorn Reference","Coriolis Configuration & Initialisation","Complete Design Flow & Examples","Installation","Credits & License","Release Notes","Python Interface for Hurricane / Coriolis","CGT - The Graphical Interface","Coriolis User’s Guide","Viewer Reference","DEF API Reference","<no title>","Welcome to Coriolis’s documentation!","LEF API Reference","LEF/DEF Language Reference"],titleterms:{"boolean":34,"case":[11,12,16,24],"class":[11,12,16,32],"function":[18,34],"new":19,about:[14,21],abutment:19,activ:40,add:34,addaccu:34,adding:19,additionn:40,addpat:35,advanc:18,affect:34,affect_ani:35,affect_fix:35,affect_int:35,aliment:34,allianc:[31,38,40,44],allianceframework:[19,21],am2901:43,analog:0,anoth:34,api:[17,47,50],architectur:38,argument:34,arithmet:34,associat:12,attribut:32,base:[11,44],basic:10,blif:25,botch:14,box:19,branch:40,breakpoint:20,buffer:34,build:40,call:50,callback:50,captur:[36,44],cell:[19,21,24,34],cgt:[20,44],chip:43,choic:14,circuit:34,clock:43,cmake:10,collect:21,command:44,comparison:34,compat:40,complet:[19,24,26,39],compon:[19,21,30],comprenhens:4,configur:[1,2,3,10,22,34,38,44],connect:24,connector:34,constant:34,constructor:23,content:[3,4],control:44,convers:31,copyupseg:34,core:[5,19,26],corioli:[38,40,43,45,49],coriolisenv:40,creat:[19,24],creation:34,credit:41,crl:[5,19,26],data:[34,44],dbo:[11,12,16],dbu:[13,19],debian:40,debug:40,declar:35,declar_interfac:35,def:[47,51],defab:34,deriv:[11,12],descript:[32,34,35],design:[14,39,44],detail:44,develop:40,developp:32,directori:[1,40],disclaim:14,disk:19,distribut:40,document:49,dpgen:[33,34],dpgenadsb2f:33,dpgenand2:33,dpgenand3:33,dpgenand4:33,dpgenbuff:33,dpgenbus:33,dpgenconst:33,dpgendff:33,dpgendfft:33,dpgenfifo:33,dpgeninv:33,dpgenmux2:33,dpgennand2:33,dpgennand2mask:33,dpgennand3:33,dpgennand4:33,dpgennbus:33,dpgennmux2:33,dpgennor2:33,dpgennor2mask:33,dpgennor3:33,dpgennor4:33,dpgennul:33,dpgenor2:33,dpgenor3:33,dpgenor4:33,dpgenram:33,dpgenrf1:33,dpgenrf1d:33,dpgenrom2:33,dpgenrom4:33,dpgensff:33,dpgensfft:33,dpgenshift:33,dpgenshrot:33,dpgenxnor2:33,dpgenxnor2mask:33,dpgenxor2:33,editor:34,enabl:40,encapsul:[13,15],engine:26,environ:[22,40],error:34,etesian:[26,44],exampl:[19,24,26,34,35,39,43],execut:[34,44],extens:34,facil:34,file:[1,10,11,12,16,19,22,24,25,30,34,38],fillcel:34,filter:44,first:[14,38],fix:40,flow:39,from:24,gener:[23,33,34,38],get:19,getrefxy:34,global:44,graphic:44,grid:30,guid:[32,34,35,45],hack:38,head:12,header:[11,12,16],helper:38,hierarch:[18,24],hierarchi:11,highlight:34,hook:40,how:34,hurrican:[0,6,15,17,19,21,28,43,44],hypernet:18,implement:50,indice:49,initialis:38,inspector:44,install:40,installat:40,instanc:[24,32,34],instanci:34,instanciat:34,instanti:34,interfac:[43,44],intermedi:11,introduct:[14,23,34],katabat:7,katana:[26,44],kind:23,kite:8,lambda:30,languag:[36,51],layer:[19,44],layout:[19,30,34],lef:[25,50,51],librari:[12,34],licens:41,line:44,link:[12,34],list:34,load:[21,25,38,44],look:44,macos:40,make:[19,20,24],manipul:21,manual:33,map:34,mbk_to_rds_bigvia_hole:30,mbk_to_rds_bigvia_metal:30,mbk_to_rds_segment:30,mbk_to_rds_via:30,mbk_wiresetting:30,measur:19,mechan:19,memento:44,method:[32,34,35],miscella:18,miscellan:44,mode:[25,44],model:32,modul:[11,12,34,35],multiplexor:34,name:[15,34],namespac:12,net:[19,21,24,32,34],netlist:[24,34,36,44],non:16,note:[42,50],occurrenc:18,oper:34,option:44,order:50,oroshi:9,packag:[34,40],pad:34,param:34,paramet:[32,34,35,44],part:[12,35],path:[22,34],pattern:[34,35],pattern_begin:35,pattern_end:35,patwrit:35,physic:[24,30],place:[24,34],placebottom:34,placecentr:34,placecontact:34,placeglu:34,placeleft:34,placement:43,placepin:34,placer:[26,44],placeref:34,placeright:34,placeseg:34,placetop:34,plug:24,plugin:43,power:24,powerr:34,print:44,provid:34,python:[11,12,17,28,43,44],rail:34,rds:[30,31],real:[25,31],recurs:43,redhat:40,refer:[0,5,6,7,8,9,37,46,47,50,51],regist:34,regular:24,releas:42,requir:40,resizeab:34,restrict:21,rout:34,routeck:34,router:[26,44],routingpad:[18,24],rsave:43,runnabl:20,save:[19,43],script:[20,44],second:38,segment:30,select:[38,44],session:19,set:[19,22,40,44],setrefin:34,share:12,shifter:34,shortcut:44,signal:34,simpl:43,snapshot:44,softwar:38,some:34,special:24,stage:38,standalon:[12,16],standard:19,stimuli:34,stratu:[32,34,36,44],structur:[1,10],suppli:24,symbol:[30,31],synopsi:[32,34],syntax:[34,35],synthesi:44,synthet:44,tab:44,tabl:[4,30,49],technic:14,techno:22,technolog:[3,38],technonolog:2,termin:11,terminolog:23,test:34,through:20,tool:[26,38,44],topic:18,tran:18,transform:24,tree:[1,40,43],tutori:[17,28],type:12,ubuntu:40,under:[40,44],understand:50,unicorn:37,unit:[19,50],useful:34,user:[22,34,35,45],using:20,valu:[30,34],variou:23,version:40,view:24,viewer:[44,46],virtual:34,welcom:49,wire:24,work:[1,25],yosi:[25,44],your:34}}) \ No newline at end of file diff --git a/documentation/etc/definitions.rst b/documentation/etc/definitions.rst index 138d1cf0..e9fcc144 100644 --- a/documentation/etc/definitions.rst +++ b/documentation/etc/definitions.rst @@ -22,9 +22,11 @@ .. |bcenter| replace:: :raw-latex:`\begin{center}` .. |ecenter| replace:: :raw-latex:`\end{center}` .. |pagestylefancy| replace:: :raw-latex:`\thispagestyle{fancy}` +.. |lambda| replace:: :raw-latex:`$\lambda$` :raw-html:`λ` .. Acronyms & names. +.. |OS| replace:: :sc:`os` .. |GNU| replace:: :sc:`gnu` .. |LGPL| replace:: :sc:`lgpl` .. |GPL| replace:: :sc:`gpl` @@ -92,6 +94,7 @@ .. |Mauka| replace:: :sc:`Mauka` .. |Etesian| replace:: :sc:`Etesian` .. |Knik| replace:: :sc:`Knik` +.. |Anabatic| replace:: :sc:`Anabatic` .. |Katabatic| replace:: :sc:`Katabatic` .. |Kite| replace:: :sc:`Kite` .. |Katana| replace:: :sc:`Katana` @@ -114,6 +117,9 @@ .. |devtoolset| replace:: :cb:`devtoolset` .. |boost| replace:: :cb:`boost` .. |Qt| replace:: :sc:`qt` +.. |PyQt| replace:: :sc:`PyQt` +.. |PyQt4| replace:: :sc:`PyQt4` +.. |PyQt5| replace:: :sc:`PyQt5` .. |tty| replace:: :cb:`tty` .. |svn| replace:: :cb:`svn` .. |git| replace:: :cb:`git` diff --git a/documentation/etc/images/Logo-CNRS.png b/documentation/etc/images/Logo-CNRS.png new file mode 100644 index 0000000000000000000000000000000000000000..55f8870e9eff99ae07f140bbae8174a92cb61606 GIT binary patch literal 31307 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

          6YBcT2 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 MGpP5cw~m|fUzw5|$p8QV literal 0 HcmV?d00001 diff --git a/documentation/etc/images/Logo-SU.png b/documentation/etc/images/Logo-SU.png new file mode 100644 index 0000000000000000000000000000000000000000..32879c321379eaf34de4ab180e0098d7b314b30c GIT binary patch literal 61377 zcmV)1K+V62P)Px#AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF* zm;eA5aGbhPJOBUy24YJ`L;(K){{a7>y{D4^000SaNLh0L01m?d01m?e$8V@)004jh zNklfA*?Jh$)9uDaoak9hj~zU7C$^b@~3 z{=aY0Pu{P`gRVv$s&1%`RSVThwHB@YRO3{o)DX2+^{PQ9lUPddT2?w1Rh9qz+VzM* zW1%`xtyF`mYE+3DqQPz)OYn58P*E*_KmF5e_N^8+lwG@r= zUyjhuE6lE4->3OXTB}Y~$EqXMvFcP~sZy$xs%6mHYuvuU5H)z!+G|~E?KP^--b$Ju zJ4P=?m0G24-fHU-tySyU@a~wGuzL)>YOPvF^P5YZS0A;EI*nR1_vLrISii#iH+K|jjde42|Mi0b2e1-AK>Gs>ObgEh zW&{r+OEv>aXay^^Mq;R9Ji+D&Q4j@p+=2i1XSY1-S$}f&-vBg`rTLl(_7y9 zp7*}@=8t_!JeAdSacQuy00}Nj=kB@d_-$Xh@16hhp+9}aU;p@zzU-@?`lFA${zrfC zd;j6hZ#cGk8UjQ`6cEAMd^{g{Up(k5KgY9c*UM%PrJUAwEtl!&pv4Dd8VB& zrR^^@dnq@sIrodt8Z6%Vt+u}OYz%1Ucr*jC^cU4F~AB2 zNVgW{?m=t6g*ofr3?c$2unCZWEnvaTF9{&sH9*Z9HiNIbM!mU@*(VY2`e@>Zj?>vo zZtD$*a1IZKvI0N=JVUmIy_=g*hpK|Lv$f!A*vT{uk=RjuJx4q1TOJm=oNx$ZKCE8W~)cs`t2JauF}PYzf;fUp;SiR7Tg zHKQ|^{M*|nzwqPlx#6nc`koiO{XOp-8--IikOeH%K#hSl&C=AZ@o&~(yJX|mhD0-y-DT?*u+3iA zyt%*$Y=o`BHMj=0FWSB;-nzJCj${!Xyg@MV27wV6VRnPFO*Rq&ArR_j@OKX~0S3%F zw*zKahGW?O)Bv}pR|(qAi1}|UcI*CidxirL385LQ>1dQDHcbJ*$M&s9A+nt>6`bIn z!+6OLyyFp%{G~sB<-1qbmTdCyEPGg*UP={QJiqe9?FQ#&e(hyKjBl9Vb?>F+nL<8^uWI z4|;60C<}&3T@pS1M-SR@G;QyG&D?Aa;%q?UmZ@z$tGoV9+OALDVf6v6T?uyl?be?I zpw@H)5NFTnmhsc}m)TmOx?`6Ovz?;ZP^g*XnK3pGqdT@3{7;TT2p|LjM1e?%)GkwP zSEK=qzzR5^IYzj#^X8nG$R!C<_@CffGc)qv!0N8o2Q@_@3{5^HZMo<8OJ#=O{S@yMOBY6Q2)@ zWIW-jP6Pv(d6BNKEi~(Q($VT|Hao4r{IXAa57v4(#F4M-G);R8OEyWTWfd8{g~h_t zaGa;lv>{7QDHAjmEY z+-)NQC`1tyJ|gULftpXz01d4d9>oOMh$JA5NCgJlCPcd1(P<4#c5I!yF4?gRwk&Yx zBT{RPnjYwORVASfix{@*xQ&Be1%h}a&oW>Gd@GB)?COv*;t z%)Ex!{!whVDU!w-lxClzGjnh5QDFj%2h}hhCWr}QqF9kcC51S^?(j?_P%&zY+9FtJ zbG}*uHxnmNfk@-sSbZzg(xbVS=aBH zEQcz*g0rNP<=ukK@!$M|AAQk_pVH~z4_^7xPk735+B?>t^K5)oOvl5CuPbsK4b~?c zWkjdHzx4g8-rpVEaO)R}pZuA>`nDIm^5!p1Y9NBksvWO#JZ0-ZvfC-x`SUC6wK(ex z+}gZnW?~=&X?zw%Z2X_dP!<@0iQs0uV>_>qoja)6u_kr}2@G)Sl@fx5IEX{E5HmY` zFgqf6hiAHV!szx1Dedz+T--=s$$i~E56}H-zqLXIqU}Q4aaPP6a{fv#znry2^f9%Suu0*Z4;rh;N z|NaMm|5Yz8!aX8u){#pR7()qjs^Dm|baOPWR87{K6iMy(tZ$z8AD^6l&x>F2&u=>t zfNnqc5g=rp98q@rZo&BRi*v zqZ^NgxT32m#bUt!g5gs2Ejh;;LByM_bqItJ1DzD~(IGz20}9=hz7>wJU

          dC0Q$fm>Lh+U9rtxlR$JR$BwF_@mFf;03>a=bb*! zFDph_QKmpI)GSfSv4ldjg!M=X4$vA>fxXSDm;b>JUwI``!s;2^bmOS30N~r7cg?qa z>y!8I?}o`4P|Z%I9C^R)=3Iz%*6&b4A(oUS$mYZ^_;B#(k?#Nckw5#L-}?7y0b*1Y zz_cCG{#VYo{AU5;_8GW)h0RtW6WD^2hirtqRuj!eamVECFb@$(1Oj9i2GB+ueAY%m zTfbJc?$a!iX?|-VwmGHn&?PO~Z+8~rdag0y*5TPiRE@zmF`qodeGgDME2P}oL>{vD ziGdo301DQv5cVtWj8Fjr)B{0h!E*#6C~i&pRwSpp0&miGKc%gMZr9m0bKSv>XTh_r zM1VM(qqE_F#+ah)INEqNPqZ6bXm8BUwg5gSBa|lEjzCnQ#sXss1WphP3Q1fBABenRPck~VKmYotcMWj+EqL-HUiOmb z{mt{A^|!+@7#7l-=tKY8Ux zfAS~ZHypw`gb-n*S>`cnT?YU~SpXU({8!*igN4p4uHCbnxV{oZf-uwo*1)6znMYP5 ztvT_WL^f(ny8%$`>kxgj#VTTy89<;B5)ph1H8eEw-i|Pc0D=HP5TwP_W?oU$COVv< z7a<^eXcVo3pBesF?kC>ZO-#^&&ewFYhc*fzEc z2qh5PO;#9zQ7ZyS*?=t!MIT!fv3r<-b!ZnwlZvYMW z#7EBf@&1hy^GELqr;kSkuDA?|rBD|2#uPpa`zO9$bS!wjZb6EV=Am z@4W2?e&CH|4YH>87Rm%R#yFP(Y>WZOv{=A@`p~mZGu`q7xbYyPPz@8sq6Wei^3EV5 zYU_Y;86u2xxit=eN+5`_Gy@R@tT1GZHDnn?Fb&{70Z*a{uy77(iX>IzDz#%V6L0~p z$qJjOvuL$lTf#)CGXyd)O4c)`mTE>I7;6b=fOjB7#E3RN@$eo#And#%;#to$mmtng zfF?<@jWI4T;iSZ_^;1a#A_$^EV+}{h5?G3aTG|*B#(=F-W7w?hLgW|?;J_9zh(J&T zJ(r-6o1Cbj+}bXH-dsnynuJLJrUkz9J6?D5=jxM(+3R9=uoz{mrT`V7YTFKBA!#uZ zzfv0X67Es3q41e?h$R7u!GjMRPpO-yy|ptNbrI3T$$^%82RqrJPJXFz7eM9_0rH?~ z2bv+^5q5Hx^dVDU}sZ&yDr1AN0gMk`F@a%PIszUb51P58TfLenyi(R zp`V60uHdKKOF&^eL}(!R#C)@p_~AeN<9mEWR0J<=9!NoCV$}ck z7~CB(%1%GA*&HXp7&ryo4}3}S*(pA?S>L!(-!#P?z!BgKu->dNJSq)#@&^t=p2b=)bfMJ7)6M`|?L|6)_iVDE&I_lgR z;1qBYI0;M|hY%LRJ8y}B0Gxq226qJRDC|+#Bd|wdkHH@OO4kXXpe=UGEZhQl@MQLJ z$AOdW;VV9hoXCqck`HoCZz-t3U;q#O(@wo0(MspiBX%z!UHYyaqlEeh|1@ zahu1@V|;qUe|96>I>DWaBfx234VVDpxV>)$tOG?@RYL(h1=fIL0S^d{0*8V7f%_PT z8AlBsG&p8(#Nj@JBfwGMBrpXcjDa(NWowOtK!rmDgG*o?I11bmaLX8<+lZeX#?OuM z`2zO=4*(|!Ba4s#86jm@K9``7q23q}5F?VzL@>DTftS7P10VR%(dl?D?d-|=*~(5x>}!1PA<$r<+S*b6BJ_rL!rZwZ`*rtb2K^{ z0|;1L@YbCnI+bQ+cahNapoeDq2|`t##%v{IkFK@Y~)2 z5p=ukJtVd>5u^TB@$f7UyJNY=EznFD-eCl60`~)-orHh5|M=^U9{;B^$Ny#X%)f4) zdF$yDZ#aDF^@mUV+j?=c;50BIOn{1vlENjiWv^L)Ar^$jCEEZF1D_j(k36{X;lpP> zcI5OYPOjW|X7k1~o1Zwj^0A|*KXm_@51-ih+$0SWIlNg;L%TchE<0>eET#kxfzfQC-!!VX?fBa_SKhI?^43$Q-gMvTH{5gT{ii3N8%bj}HBeQ8vO%O&nWn7Ges}A1 z`rZ@A-*N20zkA@pzddsDua2Jni=(Ii{MgAqJO1GRJ^tXIA3OOM53K$5eJiiM|KywR zec;^>+;{6_V-2y8nv~o9xMGgzFag*E{$o`A+s5Qwr&iu|=E3)@oq6xt+Iv>l-g#>E z?Z?*NcV={BA$I^LfHRDdMP(a)!hh?Il4~(Lh60r!%k#f^^=*Iu`j0amKsF~#E647^ za=)lHk-AyJim^TP00GgnjV`U1_BzF>SNzG(eCVUU{j%SFF#)|CKk$P$eBk4M`0fw= z!JFUyhu1vp;>==c32%P$D?k2;U;TlXep6kpOin+DSc4QwPzyCPDBeLWl*`eGJ6RMD z!$|T;Nz>5#y+3%<;RgVPHPG4dX^cCI;Q1AgLfXbC1r))etihlJHh{Z5ZauYm%c+y6 zlXNBTt3pvjN2I}+`YiW(#2HrK`Nz9R+z8x(2!pvY0?GoFpgN?cQjitr)g{9TGrPIB^$*gtrHO18WgSCe^(~eUg*oHaq6hBS~^3NshSWfh0McB!`pqezwQh zJ_xfK$lEl5$vA7XMNt8$#h7rs!c8YPKEJy9rQz_NIvj;Nk>n?m{3s{)3*A-tyN2Z# zPOsd2a`pCUv4$4tIHx=z1a&zDkBu1zh+*7w2mbKo@AUQZ#GABBlhI+!k?S&I1&0=@ zChX+$k>+BnY}GgzhvwgBU2qg0!li5|Bbx>rX+9Y&ZuaNavbmF#-LYQY zHH5Zw0^a6|C_^y;hKhBUj0gQ`e{LhmMl;5V(e1oNvz!_d+ypo-xc$`RmcysMd}e%7 z)7V=^?AY3c!W0usraY<4Sh6v9CRzU!@og*XpFDj3t*aX+fmOzoTmEIPoB=t|F`bMD zxmz&kGkQk*R(nQ!PWw)CrY^azxH;GXD3{=jB-=be7#ON^oFUu;e7YFkJl$9)>$yYe z9CsHepQF5oyk|O#rn9WBKbq*t6YFPAZg}6ODCnGw5J?H+wc& zicza-h>nFJKb@E)#dy-hA3&I)GR^u3Re9278wW4e=Rfb^?|;P5oaM+GMoEY}sJZ-*6h*@i60_|WNwaZQz$$QbbNs-@WD~ACzc&*s z#IP^MLlVxHa6roCQ1?RUs^-QG((YU*OWSeq+t4B*GRA~cz}*|=O~=n{rkzQas!@)G zsW!98aA8s`SJhHob;~N9PF*>6zH%B3gNTkkcw&86H94zF+c>ky#Ycle%@pi831Bo> zaC;|BHNlR17S$+0MIlanHQM0R+D56`{3zKSjJYAlQ_KYWc#-oMtaIx52u8O^tU#vsV zYl_*zvCtGHumapYs_q$2*T@x|u$rz93*&NbV>rJyUK|zkWtEhLg*xY4lJt{g-oc?+ z1?OUfwgA;c{h}V!iub%9@A|jT!Od4Okc(`Xgvc9c7HdJ$K`qP{CV~oZKwVp=+;|js zf5X%EzV6j8ea&A!|6!LwO24nyvtR)yX-W~P+9cYpCXE%8al{C55})u0_fN0;+Q0ad zZ@=W~3F2+m4hglQHdZ(h#L^@V1d%wMjM43a2t@D!fh8+Fcpl37?m*v9t1vi-`Z_!r7oO5bbT+{tu`+98&4aA z7hf>=-XI$zsQuGQ+iVl-DwI>Dd6fA8X+v^j;mMPR8A1Elf% zta68X82JHP7b*aOw+zr2z#ueuZHClDlcilpGzj%GFP{I7OZUF$!iDd@bl*!a+4Dme zFaPi*%RhYS;tyQ9{Gv;ipL^xrWdzrNENTGD zW{fq!0}P4qQyHqOD%K8=kK>}|n6e-ZM44&H=n<$PzDZ^(qiz5syyw2-x0_^TZlQ2o z4c8Wnjmu^9qF;=7|$e(mJI(xv+k?aQ+s zkOQy=EH-Tt1+W$q$HSDTPB=~;zc>4yOS><*Z2tQ$TYm9nd%yRx<(FJE_@T?@UvkOZ zi>}=N?blp%-N5#M#6VcpU|L57QsD6YC+i|hl4Z4t_2p%?f8J8>r!O7+?4`XQzBvE( zi_#nB?4qqklhbO#h5MK0fE2?V1tFY+5yk?Lpw=Zkp5U)v^G=iPsXS|&!)}}nOX6nd z60$5qQMfcGXwoskpJtr+#b5l+SH1GPp8SM`YC5D)^fR)A>3FIwm2VgA5b&Adjp50( ztDInCH9r4am;UXYzxSjkUf`!k*i3pI3dK-FT(>I{QBJp!?beKl6woy2-rMgPzwblq z_0GbD5b%{4B{+-8rZc02Rd56f;N<$|L?|SAW!RE=)S-iqTj*Z{TmoDGxeR!0Fa7$9 z_FlJd?y7wY=MQYB<@h(_B>=256|e@}R)iCbRpN<|Mx8V6+Qp@(U3BQNgM~{F&X2fI za46z(;CjMS=hCNLxc|}T?Y}U~y53)~xVXTr$8Ryq#x-0H1uL_%6?OvF*l?F;6cpa# z0x1wf9b=T>)z>-Ve&7<|GQy?smy%pexKMGC;1b|6=*6HE6(O{9JtMwZ01^yo2ABwq zNYk{?Smnu`o4B)V7Fwd9#H1xErCkAhK*DlXL>4N32TI@YMu@?gefkTSRfE!Xgao&CPMf)DUcX@y6mJ@fNpDh4g z1*UCuN;C4d(U!sk(p+^va4~Q>a5-=V;Y!Fg@Yf(*0bD{jk1?+>0*w+81rnhGoT;F$ zHzhX-S{LP|dzQcE^2JBa;X>dd#g)MIz>}8KC!aU}RTp1$&Hnv+Em9!Hb7ZZx44V|{ z2>AHN{C|AtV`-ABs?J#XO1n-}&dqeVfn-U2uH!OsRpO5S#&3P+&;7!~_a6WQgU$ew z7ZdTm>hv1-vI2)KwqAq4M-+2|3{-)_!al={0|)SzfAy2!`~A;O+~#ifpA~;kG#RxbKe17%BDI1F< zidOSgbxqoT^uqjANcX~YV4IpT12jiX4>$;1HP^ZJ;DKuo9%$aVtH>iVMWRSVk}bOC zxjhu144evaKrDkV8lTo9)WJuI5zvOZ6G5mL^>%sG4&s{vs>;mFOi&ZB&@-4$6V?YO z8@I2NOkpM6YTWQOSttTVQQ5dQ!p0UojdyIQl*O29+wTsmvRplZs1XD|s*=-mZ%wUNOfH?ps#`PpK8@U~^b|mb#m5$ z{La(9`l(keEpV)d4s7yXab`8`W`MTd3wV|jRZvg_!|5mg<4Y$VZ0X#g@*oRss^KxK z-IJ~S1nsI=X}}B{p$b@_^fep9mV8t|nhIds(1rt2Xcs=iWFFXWF#vLf^DqjCrI%biwn?A`nNkdg8 z<>bo6xyv%_VdQ`lBpO+?Ee}*Af>e+J%fRKiy{zl{09S%)R(D3*wYRKb6|2FirlJXu z0vW>@mnB)6^sz>wv&e zkWzCXCdLvp)Rn|4IJ&FCNnpzD=7v$7s4M_ECK(C~-xk?6(-H|vN>~T(8;>V0pF%04 z6y^1M^UE#f6j440}%CTANiK7mq1@wRvu(7EVP*7}nn32wn54`IxD-IP33YDz_ zm%j0QD1xFvjZk7*qf~?@f&!VAxUqwb+~6(-K}9vPO3J#FV%f3rrB8X)@Rv?)o>q9q zG=O0vVg!Uk<8rzPE7YQ9O~oKXA%f@$CxHixT1*~_XzO|o@%rU#KQI6s(BY>3Gq$X5 z1R``9T|pmcwyGYGB@FgJ6&Zy^VAM_Ra2r)=^p%9TRSVVZeHsB`0XL3O4b-AU&7vo% z%EtBRW=U1oQ6ySkDXUYZUjYih0~!tLh^mHoM9CESEXnQSxuc`x6wrvzeCGIQ9M{(i zvKeis+IH@Y3@~an#)8VKIQ3PJx$rlB&%Ap#gG2)`g}`<(ffc)X*Ac zhfs+@NmvC=O)4b0Dv?w@BbVmrd6*i8;G98J3rU#JFe6)ls3B(7BsFQ>mJIQX_|H3P z2+sK=goTo_L<>^zw4nhQ1dEWO&RWJ+3HYe7j5EoMhe!qxH}YPLn5p&&moCiBF@pHQ z;QmQ@c!CX}WJK85GA9JeZ5gI8wk9Mt1SMr=0-XvN!}`Ef%YwCs`q@Ds1(JrfC;=g8 zteSb$SZXLWN=`@>wg&q^3Xn%4aO`LE-Q-$4w;C6CS_&3ubJ;!TmQ_d;;w)dVAHUq9b`EiHB?M+i^OyoR`lG^ zQD#vXgAac2(}`Ws=!|h7vr7kOd%ZHmSZiU%dA|ONKmN{gin%UwV+js{$O=p~o~)&r z=6N>+-dUL4Oaadnh+;9Dk{T|dg?^_fHykQMICucBdc`lVp1FI_H^KW(Iv{mW3kskb z>}T~4Rscm}dCxs}uHJJm8s;_`w*!~auUz1}`_4=o9OIJxd-ipbZmj1JBdQ}w_*5Ky zWV5=l#Qlt+!<2cXNkG;VaVSa4%cu6dFM%_KR)Lb>dg5$Z@9*bbz(xd_N!$cs?+F5i zAVx^7-lJATOJtfN4VG4&#sW#|Z4&+`_1ev@8NEawEv0E^PCET{;5cvsxEDAAJP4cw zR)G;fCNXJ;8vUpp1xngxAV^i&Q0v{*xME-qF9T5)sG zkVJ@BR6u|PctcFU%4QWgF~JQe?K5967<7Rw_-6Z5W^q=MG+GlZ#l%HtTKxjRSy(2~ zP{Y?ORhy#P!NXwn2BoFY%SU-~#^D%n6gUc;V4S4(zbAnqP&NUx#Na(tU@amtU_ax! zrKN*D42sZOSXwvv=ZD27PM4o9a653sV9oHRb%ljmh4s)8sDf4r1v-ZrV*q6VCVcwF z+v?iREgT3{t=_kX4sAPr%`> z*;X27mu#(ng0bzY-^VFw4Y&<&A%d^Sa5aQaHpka7ZY=Xm3 zRK}(nJF0`5Z$8$PebFvqmK~B2GqmZf8tSGLi4`eup~b;&zK5_FYgK-u_nV_@ujr0fz(iEI&Y-{!{0PmSJk|B*KwzW*Kf zAAZZdNB{Yr2mkqwBma8){hvL2;`CCi(uWJmaU{@yDy;b=5(Y1fOZ~gr% z<&70i0~>H7xEj_s2`}>7V8nlIgrZ0@eCf+rJyUc#%j1cMaY)Qg7=Py@)FnCy{=uLA z*>8ft5)c)23UnZjY;QD;3aj9(lYkMV5O@XF$I}2zLlsZ~1*k$2U=bB%9m#@F1Eqnt zC{zH&um8pi*^DOBVcuIHO`rx8KvjdOLY!&}W0eeXZ!*Cr|Kk=F@J<73=~UY%VIxPO zv~#0wm1A-Z4N7@kKYhZb=U-^4v$5VOLyE*Fo%LS#p2U54ee-P(j6bjzj{-v=NJ7Yc zSw{+mkx4^w0<4m$wF74>&7#SO8rc@#fU*u6JVaoOg0)Q!Gr&y=5Fsu4^Yc9wK`Y}g<6ssy ze^T`Rx?bybPW3uR()4(ioG|u`;&kc7C2m^;Okn{QBm|%XoCiGl;Nqj_2M4QqzV?8W znOht5?n}~7jf?jkJN?e%>t84vPPy~0@7c68-v2BH+NnF*4D`xrgqZqhrO|=Z9ipqn+=qk*za+rQ`y79w0(bBL&XK@_LecvQwtuM+`hQvu3)8vRtG zR|OnwW=4h9Z6O2uP$pK`;?m1--6Jk^R?4!R5hJDbNVg;f13JNP1Mee zu*seTu!4fdf+KpsMLBL*wvSruU!K|psa+_TKxtB>`MT}iHHx1-zW&LR(-XiDTp%C& z25vtW$wNj2jviZ8NmOjBPp5IGoPjpJS{rH?hRP>D=@H8d*oGq*oIwejBaFrvk71aN zfiW;-tnH!;fn%lB<7GFum`vz=f}-w zU$bZLle){-na+V4ox)Q<$!?Y1=hruGS|8mu#u^X|1LWW{gvJp{RWobKSO;TjHI=lA zBMrfsA#7NzjY1H1!}kpG={P6UiV@+K zV<%4oC7><`Q_!YLU8SjsjxdS@Y+zKW25e%Yl`_>LL&0X)TE0ak%?@d$)p2s*6l`^e zTFp#WDN&n(U9(17<7=HbR=7ZMqtuNeAH{`=mP*3LPMurKr_wS9X0x73~Bw?M_pq8f@MJGjr0UX@5lWx}NFzzzkn;sLk|k|xpSESXq?J?K_C>VSBDDHHJ`Alf z&N*XDqPk4>G5fQx**|#ph39|MMF*dA*#*zOZ0|Q-b>7!px$jX|T$B^i>?>$+HzUYO zP*!SXDM*!p6v%-qGhE*9?ln{nH@VX}Bl`LEunyGDMne&*9EnsZI*JdTeE5vR)rA=N?>IxSajL>o&1LL=AVAW z;xn#Xe%4j{zUlJiue)gRYcD_lDOX+e=!*_rG*6wzu?x|M;9(mH5aNUkRBJ{|R0hC> zz*qIsXP&qGjEfIEdeGljdtIB5Wtz`dYc=;v!2o3F-wxE|`fnWa3S8Z%|*Ei;W_jmsej9STZzPXM!yy2sF-RU>i z_x{tHKmDkxZM3SQ9`T0{dtqGDT0Y z7q}+FllI^#d);H_lM7tr>4xbi8yO$=GOWc*b;MH3FkVjTF|5Y=r^v#Djx6y7kP;VPKt68;M#| zBM&Jvt^6iCDh6s3V97aG7sO%gOHK0=83p zprR4jCID~(9gWRqu^e!T!Ii+n2#+9K3tS6a30%^_Tq{u+z$9!chzAL51RHitOi)HJ z;+@tDzy-h)6FlcY_SC)oD{@zFY!m^p-&wQfSXrHJqvCU#GH!4tA`{gJSXCh&8n?IK zv+U3lDK9Sp0JD-c0D_V2m=ZXTBY*oj>9F86tmgQhF?pb%BC~O^I z6RfOZIDyx}c-r-GX)?|7yxHn(mh@`xorQHc|HApmlNO9o3r(RZNdgiev>h2Jz(ixS z(`R-i$#&f4RvmB4PuSthAcBKHiJF!Y#KtjMprJmQLb8ZO#T6Yqd>&WtOO`tvtBElA zG+nL3rlM-{HzsXP=y^uwkfbK6fRc@AI0HKT9p5vn9D3&;_r1P3(;1aBI8 zk+cFu6#jn%h0*&el$BHgRrC`FB!W(bJfagY@K}mi5G)fMe7XYwk{xxoj9ETgITANa z#zu!A1-ig_z$5qUTZm!>L!~ui?=7$<@TP&-g&@tY?g^n0rxR_ma0jzw5lBb`k(^yG z{2DN11V-GFD{FI=jb@?1w33FJz_%O_fQYG;kJ%Per-o{)spV8dhgu%ooMNC@oaOr6 zRAx9svmslHoRKI@%U5a6eb4k51~PAQBOpj4LMWl!tCPF*|n>v5kwpg*XMkGq((f2Gp8CTf|~a0ht1o zMcH^Gmn?UZYSJaj$og8Uh!UvCz?g!y22x+yEv(ZA`VL1==uMSiv!pRD_Z+C5&07)Ut_; zF$p*YH}RoqeXe0^I z)*LkB&cw_yqAERLTX5a9OTDaOSu5LtAWgdn3d>y9Nb}xkR7Rx4&KMItysxdrq`FhimtW5lQsf~nvH6eQLbNPv#9sink1$WOvF%z6;15=Uux zdI#qgx=|9ZbsaR%?q1z|V5(=pCG|>9BF&2bAOfi&6JP>t07rqlipe@K29@9jET^-D zak!BSCb11Zs}Q{&nzG^m+Ld7B2sogLW` zumUGyG#Cv#R*xZx6spw00@t3Ob;BgL0MnVmZz@MPR<=-5opp?8^?({Jp+qnb?8{sd zCLLBUWnt*cE32m%>%bVOwszANf1?Q32w|K7jseFYCnan)_azY!qe8mXHKLKMii{{6 z;V3rYztM;aR8c)45ri7r5Q~WbNPu{w$_g?F4pWPD<2Kk-X(I*&jTJOPeKXzjfEFdk z2p6-d+Qt2)mHK2Q}yoMi_xhw(IWcTU)p!5fw)72EnWhQR8>6!kQnN%$M106H0> zN6LG{s843*DDnQ|4 z(-N;GJ-alShjbAvA|%v|7!jtZYQ_|x65T3xG&%%m-561fY$P#cEAkOIK)7yCcTX%$ zITf3&jN!PGNZN%>*hmKjAfN<28c+~iddYl$kcP>6RgRK82Z)qOiPf;!M&+e($~RY5=NAv$ zar-duLTW%MRx!`W0aCJ~K1(J+?e+$(A%HB2FI7XDxfs1+B+fBl9KcRs4Gcj-jo3Ow zo=^dB7Ob3@wCxn60VshI>RU-D;#dZ$6zY^HDp?CgB0HV&ZT@!HfsqE&GJ^vY#&WbM zfFl#!J|2H@GWq06`TkXZ2H6S*E67(kIR%^sPSzL)W0Slr%iybSYMabK+En$WDWYb; zKH&0sIxn+HoYuaqnU7cXr%$bYbk*MltOH|{uE3pwTZ0`D9S1%;!AFm+-MqGW41Cx6 z@c5`M(UPZO8u=(<0vQN_h!_MRLqtGC@J$)XHhw4(5a+~ZHpx5PdDoq+SOr#r zGr$?b8O9mLY1mEXvTZlRTN2+*e3c{+(qLjRzE&^Xl7JBvL`pEgJaBo>UD`?VVv;xq z$B|JKRWTi_uN(P4v&9COX=Z0Y54e8+{=G~(-2^0dvQvtiPvPTda0ECBtP!Ri7kX}* z;6dPi;C(CAr%sOVs^bx__YEfxOvW`paDecv7)u&0s-TEiP|AA}^sG|m*b)fdptK44Jqsh?$VR8dNEH%gTA<@#(3Q$bbp77E zO<^*?ltG38qbM~KMAxINrO7mLrL`4X&o;7+O}`&wat?{J{oHgD^iU@f5Y;hqAU&(e zPFuVekv6=~xSjK_5)6U+0=}?$`rf#{Hiu(ram#S!jd$Glwj*cWwoxzio-sBvcgB!!*QLMeVwg(h_zPxMO{C&)Vr# zimPezsrB+bXUcy*zWMqy<2PZW# ziAW5(9qivXKLA)jr@uen;oO9B3>M`|xl)cwtT0g5IP+;fm`v$EKKaGUBLZFmtVpBH z6%dQ4K8T;fPn?1@)PCw~_-Yezj5txL^28B=IkkjxiddA1BWqEX#dwUm0z@pk1h%1< z)y1YkrD39B0$-vIr~@iNrKr$JJE^gWYF*S)MU9ja9070)yNiq5x@bd87}v4n3X)u?wGoK~z6+6bAP4FNPaou^r9oiR?VE5Hw| z75A>M-M+eZ+uHC8>!VvYMz?H^ZrPaJyiwe=IlXmbd~Y#sD|A7m#){GV#k+Mj5JKr487bYD$XO@YSOZ^GjK#tungQV=sb4s zc?XneykV*2u8h;T-p%h*_qol<$4{?*^vtQ7$D{i}o1MJQ@<`UISx9;Z`iuKI3q1md z22-OZqLrp_&N=H+n5;J0nVRn3z#VJV7gzl)E9K4W<;|1obJOw7P z!3Yi6)W8tF=~+*kj@LVRiU^Y=;95CPM!@Og9JtPSvB%xwK znsCa3h2H#J-c5;8G8tU1SuVXy`?(Bq?Mzlz{B*-enV|0FX+j2qy1>~*aU2vQpa92R zji0GiLyu4b_8WWIc?S-4yV+!#Zf>MrY&s}hf88V-)~*?>N;&w1c(&7EP0(^gH?G(90EG_C}z z0SqdS8jHZy1G*r$JwGwiwZu=-P*5?Z%BNdx6}LDOO(lQ8z~choQ9XOZ{Njbq&c%wu z*oR3aG*+{zJXAA;84Bu1B#`xSKAh|gbVc63c46Vld9&PrZvujW&Oq)6sw-5bkzfre zs8rNR?z3*0416{hvtDo=&zXk}VpN!c46q90wJ9CGY;p1G<)sS}>ozySMpaEi5qPL> z70HU4F{~OZ({Vl-?+f+Sd46rqdw~Jag*E4rCv3b{@9}Nlerc#Tr7l2*(6Tg@D^Mes zWJny;z}hG@o!D2u`rQo}0dfi-0ik%wrDos$@u5TY!Goq4g46+A7FbxQ&p#x4_xlSD znQpGr3G$qrf%y8o167_MpIhA6f1WMMMkB>qlN(se2sI3E5S^HtA1=(VEzGSg&aceR zuPn^1F3zpYFPy&YG8{U8y0pCBpIhI%uTI>iA>=vuE0ixWz}u`$Zp8Ro(I*Q{fG%*A zbx%5U{*w+~bam3*U&U^yT__T%60Z75Sj@4M=&}tD-?Q+T1A{Ab%mJpDrPYjauB)(6 zwro-$0~Ua*EkF073m?5_d4F9FCZm3+Gl`)bk2a=BDARJ}CL=rA=oQ0@6MF1{{?}c$ zaFxXYpbt>(5d;9kHvN}#(m9raRQ>4ZS-YlXDAHNUeZT?T$#`)(S}2F}<#@rDo#}W^ zLdTcA==&k`Lg@Q2@Nv$|TrC5yb4hO60kN$XEx{=|H4eb+_p(^jdzHE|lC~tkRwKNr z)~+=b><6yfGk--V-6wvbE(bnzH9AtDWxcfGK5j;?WLRy_!$&WqPr2yewS&3y3Fk2n zYTpYw04+GXVBI`;K7^&By42W*cl(dq(|hb*y0VXj7Jm?psxY9ozi&rEKh(W?+AW6z zKk0-?;>#Y@9SV7@dJ_BNa$y`6$}s0;5aXhCI%_84B$|jWaB+f1EcYM1XYrBq{Yw*E zV00hpg2vqYq^i2XFDVW}uFC9J?OFV)J=yud9AIl8Fr8bn-V;RyF1Z+A`}9Xu)g~c{ zwSgu8z_psDKMtS?Nt)+CL_W+;xQQ6D!C$D_*&7b?FJMQ?Ek9_FYzUf()bh?0o7*BXY^5KvD?wxo3-ko>+ z!C(K?PxQLb*pUAjsDUEO@Oyvo{JZb}qc7h6(_g&f$G&*yPkiyNpSzCg9fuH@(@4kpF%5oF%vRz`SA*VI#M?^gApN zT~O{rFX&$2D&VQT?CbaKf6C&X>oUE}PWF{2=hhD|jgDPR!$&T|z z%jq*NS@^n(vajmla$p%4D5wsI0Z}2$V1l7oFB^Ns;=;rB?zv{)(q(%Vmpgg0;OH#I zH;@3=E_5Eh++t@0okleD^U6gU2om9zQ>L;#~hJgWgjHou~G* zC(g}X-5o3fIT~>%--rfe0f!imnp=88fBA9U#Tyou52Q&WvBn-L&z4dGq>6|Ra5dwx zi;It6-uI~a#p{=ruh_eHFqh1d8x#pOp(HI>D~r%5Kt*%~i@?>4CoK-XW@+Ekm-auQ z*MB(EMU%dFC3qSvVk3NWL z4dxCrMfjyXhy-#N%%dt42CmZ&Rnf`XiiL&w8GJ`lO*Sm5J-td~>VV}X!~kjv4nioa zsX>H}or5S`f+R(fAhC5~i^Nt*f+WG>0R0})1f3q1mYXIBRVO2Y-=*?2yWi~&xM14u ziY^=_XWIjHYGhLkDqQUFs0H)11HI>5xcpsLUG%-zUiqRcFaPF42cI<8y*4ukfdOEO z2tksVR$|hisiiV)IRX+xDUejyt2h8OVrNfUOrLkff$zBH&~q<4@WLxDeBNc}KkI@$ zPui1To8tmt8R$dPP(dqjglmpKqc9dGhnWMeTO2&5XCFOpuboQ{^t;KnXSeNvHyr+} z2H7K*vd7H3M=f<8J(oOY|J)-7?s0qjk6%iku;iY!WS+dtPu_#4?7>s_;>r8@;+$ss zapJXUzXc<>u!~3S$(}gxp19b3%<|w+0%rh%AuyndP?vCmL_neO;vSZo$1ijrx75F3 zu5;aadwT>g+x>T&WJ%LUEd^ zOXdj+c+w(2dBJ`4eDaLFooDRJzGlfjX@CBRz3G+9S<1o?=oD6w02GXbj>-aXKJe&; z^r?Hh&%9vqn=je-ZC9N4f-4R^|Kh#hbZGI0p1Is%0q6iIL%Xofkvj_N#Axa;v=+~P zPIk$~ZgF7ac#4o&JCB$oX^!a_h)HTROqxasstbfm9ymPr1KON|#wM_-=VMSP*dKB8?d2VG38fu+~snPXV7VH7`0SAB!q5C0wAq&8K zD=Q`r-lB%_AP?hVRE-AW&~SHQa=|h%4=ezEU;tP|yVX)!x6meK#2&B+^nnGS2Q1Bq z>HXO?2MmDu#!nCofJ9)Sif9rG$E_WDEJiE~_5lk(3b2VvkqlI!4DO`CXkcNh4zUj` z1ABnIzyiRuLNoa7hYo-_pf^+E$qA;Z`A>m_ zBS|1^mCz)X5P5NT)o6DoM2Sv(SL=C{^QiiWT}Tg-L6WUb4m)%Jgb=_w8-%8~sjHY0!x?TjBo&CXt#TTPJ-CQWkSZ*q zAV!i_Fo7_`w?I%9p(rLI5oC&vptDu#K1&Z;ZK{)6ytHX&FAXtmtBxva>a`oStJ;C4 zhza7XulUw92|y7X;TnZhn#Bf?=tQ~*J@^6qKz$mc4Us~$A*M095YB1<-arWv-1IX9 zIdB3pO{Fmu1hoh$LMAZ}=mvBH@`w~6fhUBBP$O25x@pvS4nZOR+5h`jA5kNjhRxjh zE3d@=`KfPRU;T1QK1sTM6wq1P*w|=5hN_+*I6ozqI-A>~CiRPV-I4z3AAjz9Uht;3 zym@m{G~j=xNF(*sbwLb<4*_Z%I|5(?s6b5;x@TySV;9kCob@2tisD+T8t;(E2n0{? zgo>zY+QKz)*z5&ODAZsg-R95RCV`ql({1uvLwwuPR^0;YjH+$>u||S4E#;#_NDxwl z6wyMPeVm06s3G=C(^W0fRA>w?fC}o{LV1Qd1c%Czw=50CCIFt{9lWK;+*J3#LL4N8 zCXHf=fC;b)7iQY4qAs8-=qNG)tIm3`?Mj0KATS3aPwdG?if zPx!Czx#de=M)0O%ml?Ih`WJrwhHv=#tLyTZGX;zc20b0ED{DUJ1z$mcI;zH|KA^jF z@nGSa@y6m8Zk_(@&;HGezU%e>@~^9Z~zq1 zt0>6s?w_tZImFUxv!daTG_7MSkP=dA>s{TB%YNl564M?OftrAXJvag~D-KYCk_t6F z<9GX(jX}2WZ?+q?Zey>_(hRL0MI#15fI-bD+cuQcmeDtzr{cCYInU}hn;i3&+)LZI zA?{f3swB#ywAH_U3mqkMOLYG;LMhwHj6oZ8h`Sp*35n6D6}lAF-W$YQCux-BtSxG-+ppnaT#W znOiw0jhQkmyy8#ZV;HJ7#$=EsX@Zx({DoIvmFDRx!s+44;iU@>$mT{>)p@7qj7hsL zOh&#aI`d1DQrAvxbQce9tcFQ3|FMsr`ra46^65|evzPz=t+(9?57Y`Vt= z;Q$gP351&39@t@fB4@h#t;l>+?8&;?{at zn^SVfMFInw$>+~1cxi`Z1EPU&qh{SYXj}XqGh2!j&=h9S*(x48gvNKQm3G||iD5CM zmfJ42?arcTHE-H84Q6Jd6sQUN+uu%skt+?a{75+ac}OifL0*Bf6CwmPYQ;z#G)Os~h^3;$EV# z0n}X5?kDZqn2oApM}>IvS!ylP1kS;vFzGppTL9dfKktoic+WfDUaLn!P6I4(&DD6# zYk!RRfvi6S2m$E&3B)D>_8UzwKH%Q~O8bT{LGbyU>p7R7f(PcIl-*HEL`R~2s zdC&W;XFTgKU;Wy{H+}}2V@v~vHG8CjzOl<>7RdBrEX0GwS{9&2(6&=u+!npx71upv z2f|rF*IAFSV{!z$3qj2;X+N~}IkVwz-nS`xZ#9rjyQK!+YO7%g%;2Vn6p3TxjE*1& z9H>!65urwNUw4J7wB-OpZ5!|ID(6)e;s}JM;F#NG(&*>IG`j8D^yJo^#{zU~-LxiV z9QQUS*Ikwx}?1*pFzPENX zv#Y2DE$q~)ytHMyfSR_~wE{+w2$H5L0AQP%W1KaM%_wkF8oKlOCcuu2NC@0^BHu9; zZ9~jmOKV3jfF|a4f~L29bBd~M^7^`Uypys~YZ^owIHx?}^8N$1v-jn{^Y?e%hH3(i zFdRt3)z{!7|Ngss_xog2%MPQmSBlE2rnz=-Us#l9F4}g%+m^Ytoezy5(KZfAXWO2U7D?Hf znc1HQt2H+}CfCX_a*U)+jZfq686lQtH4~IfG$cmE1ag5*Fh&TBkRo&u`Wm~cS>yjT z@RKc~8CR%kgwS}qt>$ZlkqS}(Q=piYu@;O9@a?CGP#es|nHxB>LusTwy^WQNm5biR z;51kjtHP~ow$&GaXC0Vbgo|V&aU{~lB{l?Olx(CnCJT-90vRROlm?1GTkcU{NTV*d zT?q~_;>-c5AvL5X2?oI+wso@v5DPgWCzJ{&$^@=R3P#1PhfA?hLx?0E>H!a`ltVNU zZSz*FWQ8~|$#(1S_AHcE+RhVdMrlybqQhVjn}Gy*Pyn~+Ic!wpg-c*UG-W6&h@wzk z@wB9A!Bxq=kMc<0-H_3F!# z%`;!;C@VzvG3!dG$3v^Nrv1`rrS9J8t|m?mvP$B1Tj`_2L9@*6EC0xMM4l789hcc%*g4 zlsqUXH60taj?l1MA#TTMxgAUhba$+>Lr@OdpnYN*0dJ|BvfIsO~<(g-|gnYP8i!8Xv6Dw$cV5N30m$Y~2zo9Mqvz|84rfrrARuI^<`NrmekliEX z6_vmXWUIu5RChqi)HJHmc0y;dC~4DdX2;~RKqF#kD~p0s!w-%^Q5&S1<4l2gJ2Pw$ zObhO8#lo}IHG?0TrbD|jP9jj9fx#k(g76hiyLOrMarN51a~6z<8A4IkD6Pb&?e4zwHVl#@B?4t!N1s0tZN zg1V|UqfU&egKU;`oVpW9vr_g%y`m_t{`8IEPhRz@@A{tCJmztK{OHI1#n1ifr*8b5 z4kr+88}LPFEv2AP8Y_mP>p&r)Yz{PnQ89oKHC6BmZLon>ZM_k>Yt=}iVt3`%wzgUX zc}1n?4jtJf%RK*BtpeejTa3qNpYt>i~Jh)*nM}Q!)0$1RP=gpGVgHA2M z3b+JSKrrx(rgdo(plWQW1mc}Rp28&X@MA&^7K8{Tf^je`-XT~>K&g-nk_ntpEC|6+ zFjkGzzz9ShF`^Fe3T+B?qYYJ#=tNSORLO$In_~mgrt*a(XsI+MDnV705?ZzT*1Bzq z2m*nO$~NPwQ*Z@BR9|3Ha{*Vu1nZHO;0EO=#rT*Zrp@AxVic)@JrZz&BEg8lW&&>; zJ!c?l0PD1_Dn(!vS_2_NZDf)lYV>M?+Pah>Y=c1(B-QAA9T*@~f@z3_uP2RxiHr!P z(p0HZ4ndTKtQZQ8gJZa+?7){}z^ewRtIOG1kOl@K0!N=fGDbp8h@k{w3Y;R%kYsQy zFpAK~t&&RE1bownap#Gk0nvLP5(SVal4&^s5kKo0bCb!L(R9>bIPVjmJN&HY{=uY1 z9RNWwuJR=G()xE^_U*5K-EVaAl`I{GVl~f_Zm)+b#_@<_G$NQxjB!k9j0S2pwI?z!vKVAB=)$PzAi3boX8*5V`?0V7+8@2{hM)P#pL)*+KDc@2G@=^f ztPVMl5lj>Y44V$r1+SAy?R{(rFNsZLws&nq0{@v0uuB(6v^CUO>{tN|%1yDcmiBUh z*Ecrvd{B%^z`~|rqtYhhW7uA$4MT%1>T)6wf=wuM#`$JGE#L)H4`X0cfJFc@YK>ad z9&9bt)t;iK#O12u%Mz(kYBiucoTV@X&j<#UK{OJhhjVS<<3j{d?MoGbHApQiZ)qQs z>H0zqTVK}_K!W)}e=;e!#am(6`T!q|sAX%_igJL3D5Ql-eX}p{AS;Gzh$T`|l44pL zc8osIiAZZ7+PI(=9oMi7c8DAU0Y*&%psHXDpr~UA(L0+!DU{MQFAxz0r+M1+w-fdR zKOT(|&I!yWDWle~lyqygksM4i+$<#`bGZ+m0Y-4fBuN^gdbP~`04GSIHgHy3KV<|A z12sfhsIAKufV8Sn*P5iR@LBteO-!V%zx<^ype$ir z8bZvnnCIc^zpnq~FaF$%zx%7t+qdY4lgX(Qj_bS&@oO=TdW-WK+1E_kbJ=p#WU{$l z*F!hgqcE`b0*4+)ONihCW+-+HI~k5vPp%GYTFe%2IK6rPtN-qc&wt^ce(l%(`7iz4 z=WhEVlrZ&n?7M6h$|?tv5MUj3dr6wnaI`iYuQQZE48tvouw{bW;C{5Tm)I^}(d;Tb zAlOcG1Q+>Yzb-0K)1Tk(;oRI@ZD}Id446FFZiJBtB zI06E!X%eF~P%}2lvI48?PGL7n9S0P^lu%e(o207PrJc#dyCfq8ZPZ*eU9~fmz&Jq7vYKU&yb?A!H*TWHtX^vhBS^$cDEqyAkaRk2ikqFl zC^Dt24v8vy{j5<7X2}SK;ikS8q|6zsLo}gER8vp}a0?r4xBRmZr|c>Zuc=G>CZ(0N z^~ABDZcu5L2vCR?K6oaZb$Wqhf^uA!0T2@fF#nk=J>ih;b4WD*l! zQq@NCuw=T{cA|ICrW*|7Ip6ZtwG{c%5@ax%41BoYx!?LH|MYf08iPzanncTxh)xH; z_RClN{olRl#V>l&frFB#8+kG&9csDhtFbc-QK@TR*Vd(WZjn3liWHhdbKdH2NkKV) zeLB}ezl*HrH7~1<#657Aq@9P||A70uzrXQozV2n;@~yA`_#9ebWk zD+S2n^chqhUJ$uEu6g2lQkzI54kclu#z@czer-;Wb@PqMCJcOeawWiwIQ>a zD>ViQ#-XZE1qdsdUc}zho1LP@+5~5+d^L1eDz{dqr$;!oiPZ_lHL8f!A&xwVK;SgP zw><9&N#=`U1d~MSL>a8Ex*zzF-+#e(z5f2g$g>_`Qv(PV7x0+J;gx^-uz&c+|NX3I zTx|42FY`-F9mHulIo0oTf6*b1!^TD^NXjg%dWDIkO=nOc(st>)YFuIJQ7P0S%aL^f zQxtV{owbRp!-fC;@1y5G@Asek&2NAAdwne}Sw<{emXJvUR2#kocsr?}JAQ8U9-JAW zo-Kmd00%AAD@qMhi}AGtAyd{!bA0x*_+LMI>o-38jbHQCzwzzg@#nwzi|_f>UwQv` zfA`-!{;|LPg6I9?YhQh0I>FM?fl0|hIZ4wPVB3whinKvo1?W^bpG(V#cfSuWe(?t$ zal;=y`cc39?azJH&;HE6z2c8=dFf04;XA+c&mZ&XSH19s@4xXzOe>5_M8c??#ulMz zYF!wiYk9HTnXf!P^r7RAdd!Ot9{RC;dw=oDOMmmi^MC8WzF#|d;8zcx_nQX}{N@Fh z{Q8r>`V~L)lka-f-+bxtNw_X*gkIO4Sw9KJ!a`D&wINDurTJ%tZi~5$lR+fKDQ(eb?OY_kQmOZ+PS%Kk8Ax@@>!glb`wNcfazLx4iVFulug= z`in!gt*GDNIU?CWwq-If+eZXh62X*SdxWNhdW9rN?)D*UK)wjiN}(#t34&07#FiBXbNMI!edA%*{_qVq{K^Fv{M5x4ec#=8BeuwQ z1yo=GAqI@c=*@r6NYM zF8HPWm;L4?4}Znw*T3q}ReyBeC4YG6@;~nF{iTZ@_S291nxA{aJH~7Y*Ite5ue&Jk zD!9^OiYj#XU!3+X{NkOXCp_twU-sLdY*wM;tZbnc>9{yyx_whdijt4*s~9u z7YIkXy5{$M9n}?uM*qx!?enNNGRqWJ)fUydM zs;-Ugj0>pZz3=ru{nM|1^P6wF=U$lfa$_#s81;t3d0(98tBbyH>*U9N@MX{V`j>tA z%SD=^(ZjV4V2n04f!ea$@S#92FmC-4zWy0+_}@SEx9@!C?W-%jUhnG8;EE8IS61xY z+|{S=o1Q$Dee7c=p8X9kd(Ly-c;k%-Kqv1+U~{snQUj1eQ3Jwd39^`5Iyf!oVJ;E9 zH28}rFE_Sn(nRj{D@08PVL=X+3%|h)9hhMe)a0g;G-XX@NfU_6OVrEkNxIvf2xew zw{MR#0|g}+aRLyA>l=`YVMd}AdSdYT+whEMy{Wn1wblNhe@%10tE+B){+iSGO-~)` ze*9ynpYx1gf6jB?^y$wa67sAsph>kUO~b|tC;)W`m=v%Uqj6IC<+9p094>DT7hmxw zZyr?uG6lPYw5g;Pq^T_{D9uf#owc=$%%OY+rq6;x6o(%et#2+1J>1!ckA_R#euJLZxl4Q%oBj*LAe?{Z z%=~bAXf(da+DAaH#N=SLxll}&qTlPQJ(J12vlof%KYd2Cw8v70UW(uUtsg*KF3+|YC5GcoM!^V5xaGYagsXBg6MMu;*Q>SP26C)QX(sA!OtafEJk zi)j%D$75Pfv$Rus zh~T!{@ZuN!@=Z6LNbDl1jlPOfbTXdn_cGV+&}#6XI4(1VAWoXT2vb%n=T!@WV(9#$ev5Co?kl1x;R+8{>G0S zd+87U(Qp6GCs#)hu*pzk1QWQ^!V1PA5`rLVCrY=DSrvJ1VZn#7_iJ^v9z)%6bDjPr z#$Bo9MYn!#^7OCyKa&Y2MWV1(Eylo?Q)X^b6KoULnRC6xK;3exOMCX_35RkT>WMMr zvK~youKJzcRe$mS-t|2%dR-l$z@)6V7!-qU58R0uDE0>6?f+Uo``Lf+xzDaP_bY<3 z-rT<5m7{wvy?SB!0;78eOON>UM~}bs2Ve2qzkTEB4G2yI!+to%)yoAV|}WCQFPnAV^Wc zi%U9tx(oY)m#{H)cFyjwT7Y3r?d4%P*cO;gV@Yu)WHGlj3kA3{- z-|@DWzvzXJ-McXAB_{{{&3Zqt04boA#)vdQ zUHH)uX=3{G!u?3gWwqyJzy10bedk|&@>Ao+;6_D*Orqr%A+%{$!dJ31ZVy4)k`dc# z1qc8khCJ&DEU`;cyy$y=gZWS=JyY!-qT|XaNo|MH# zn$mCl#?M31>ly%2RAZ#fO~z6N%LcD~-Q7R?(|@wD>6m+IVw@Q}vvTNA{dHe|;rGAf zaXJF+=qYFqxQ@X%22MyqN3PkK5sl({(djE(#wUe<-YfFsRz5dA0{miS@H*9mimPb49_lJJ?DbIi5!?Vuu;qc2v zeWIL9vi`owsQ>4G`p&=p%a5NKf@#3cf~&2(Yf-``AcjqQlTsp_P3ESP6nf~le&-+V zzaOTl-n6KzF<2OqrI<`Ht(06|dX7jczqK8^?OrAf7_4t>pg$)jT_4xeGGX5H^FRL= zRS8iP^|+CRtf^f3JO~b55mB(-X;Y2t$@E zISLX~KrxXd2m+F$l7k8;AVE-3jHrl;AVvg4Q4~x_kUUJD4wX*0!+t-Us-7P7`M>X% z_j>+)6-C4JR9856+Iy|v0xNhBgHa?AqC~X1lewGJiLV&D-6r$ibI{gDynBmxAF$4$ z2d;bY0qgC**LsJ&YpVnH+Wg@Cwpn{N1l)v{nRK}6y2D0Cqz+vuL;tK6{HV+_dK(e}DF4zq#VN%Rg}N z{%fx_cUd+17s5Xy`Bow)MbVNuS4BO-U@V3VYQ&lVDLttiB8T@V2&#s-1`ZwtjB{|g zuhr{YKK$U4Q%?NKPk&^+hlx>??KUu@%u6e5-U2Lw`!9RcRiRF9^`s2|AXy5KqAbO4 zew(cr<8E4&!f0Bw&z>WX{q_^z{^miS{meGE+_uZ_et*~l4}R=D@7)Ca%8^Ixx#0#N z0c$M*QWD7kMpTW2z~hhOx@+&9XcCc*;tcf0y6bkn_{EPt`S@91`N~1pU%%z2FW>B| zU)l3d&z$zn?;Zb+odT;@NVaVj75SVm-1zW!zx6@^<&ktkTP8(`n(5k15Oe~^ISI>@ zLM*@F;yu1}_s(~H>7Do7v)505^1i=4{jnc^|CG^zmXV#pMny5>=|8P_=4mh^iUhL- zJjf`iLV$^-4P9u7I8jk{=j~hGbI%TUeQC=te`VVTfAa2M|LW9Zj@g^JEm*b3S&PxH z-1+lr0x*Ij8AUKCU$0Vl@=08N+1<;Q7euzqZPn_|kFCBFK^;=$i z>HNFy-u*9sJN4T?IBDA*f)_99C<`v`c1Caf?9YDo;G#|t9*INlO}mt(>9{91lOpoo zlT?-oqV9@;tUG+pS@(`ll+G(>sv?9o-~$5!I@YbULxx<)S->#}V6VV&S)-H+E%(NdC~amGp(C%dY(PB86*&+$ZZ>hZWnQ)f?SDc1u!N>*GMpOO;Jz8;mf#9 zINvf!*V0=o-xU6}TR*$|UAJ!W)i3S#&95K!)vq3W`|bODpkH?zr}< z7his_U#~f{U5}Tz z?B&>u75SnpT|(%BY@T(T&7`RcJqR12DE(js@-Bikab4-*6>p@C#^y_x#3!C~?MseL|531{~ z`9LFq4?!cZC%MtsdK=t$)1E*1=@-vA`@MpYwyl<;Tuxa82u!vy*}}z_+-hxIAZgSi z@baB@ocpVvU-+T-uO&mbVIYGWFwVJ^b>$A;fAq&c{`e6`Z4+0zfT&j1O1m>}zU8Nj zmSAbiNs&0%PSF$*Vl4}cB1aO}jj3oY1r;2SM6h{b$R-AovHQ-r@w2A|yOfBv8BDw8 z*=Jh}Otw2Rk~Zsr<$s7ICCD~v2(}}H)dcS`dj>AOXzS78T18iC$qaVpt%YNySx*QV zT){qvKs!adiwiIMqP2BFmBE2zaKP@o)4U(uf58!l&w@>dD~N!>$VrUH$oAiR=#ihD z`r(i646!21vKb>Ag4e$4>TfT43*$K)1e5Dw#H9t`9Gvq?$4rW|0!&e5#Jc#YKfUAkL7HgX_QiJ}aKIMI*zskP-VVR=LVD|MPYl$n9u)^66As7) z5DFw3!A0%yB5!k^1p#QF7CVJ8h2@Ppl*Hb9LF<)Lrq*Y9tGRsnavz`#16C)|G^>{a zRL?vWKtP;8QR;ou$k3dGCTy_gdU@*7cHW+72kQV#PC5WWYY*!QCdLnbu;|&RUa(fj ziJ6#qWBqk2_kQ)GYt4mnm^l#H_C((47@!87c9uoRC2-S?2OM(9Hq|;UTey_{j5nUo zZ@c61N~A5cE#-`82eiwJ+&L$NAuj=%y~gakn6NG_a)0;T-+AhfS!UsT364E#3CIO< zCAl+*)swBJtEfUm(NMN{F_ew#q$875)>^TmaozO~tXKhuL{K9jNQG7tM$UvE7Iuhy zgM3v42v(~b?i4YEuL##5I|AQWx@_DANL@NaT!yCQt_NU%7!<=xh|)YNDwL+nl)&}Z z?6>F68=+V+I9iA87Au!?Q6P#CLSQEwwRV~p6c?d7*)}UyCQtum{NjtgK7Zr$&N}mF z4?nabOF@#-3~36>&<4(dIB0`7g3%Zq#eVzGxbVVVe)8bQfAy<#@4fd^#~!!m{P~r7 zBNcMO=S%X|8;U0*X*uuOP8-fbN(f~;lh6dMpp1@2#}2Ki3bnvCP5QEOyfPazqt&t0~3 zp+=ArS6{nNl;p#+8p>1#2G{<^*B|x)9V;BPfC}*5laYuNoby8KN+XFAS*yZ2XgDAT z3L;ltZ}ocO;ayS0gM*F(fY?Od`>DQ8c^US+lavz|0Bk{oM9Z3j7#cvNuz2xODZL7XvfvfumV#F1Yt=KkKA$h&;4~S3)}`07`?Aamc*ymK{Pt<{tyS26hVUHk2}^PJ|2f5aw(Rh|$%1AvP9LRh;-m0~`Yu|IvKac(BS9W~I%^y4Akp~}cO?F`=Qh*GC5H7Iwq42h_ z&XsjU!i+)ewFj=d>K%{$>X^rVea01^K6sDasxwDkuSTz`u*`6-0+E9vud5D8*N2s4 zT;b7bu^w2z-L2k!`wwrt=^sKO%Rmy5sXORyTC4&*(A$^3)r+)K)=%VVp*69C_c-WX zyJyAXN+XS`wqxmo$6WXIZ={~#S$eM3>+?J!AFNVVt6Yk%=kdUkQl~^7tYeK=U&6~T zwptTPhK9}ZLl50|qYZlc9j!!M833ylE5_qU!@{@3nlm?)5Z+;U7{?xeaAucCT}(D7 z^Hlu&;kIBXB!Q(ste_%=JcV~@RCA8TJKcrtES0KcrN`h#kt@%5eIc41yUA?*-4TZ-sIzY_TU<2 zxx8M-(I48E)VS2e%JE5?=|>(~ApnJ1*71ah++b;OVl;(l3N;BD9~kl1?|-_f<2DQT)uKmc0slY$HHTbplN-Sgn}+u2{K+KdMV zzjDumzxq|KmC8|c(q#|`ei9;u$U!MY7O0ozI(6$sRtXEr1zCu^-Cfe^Ac_%dNvHsI z0nyN+B2iV4zL3ZS4B9E{q~h5TY-})C!|k_zV3!?76)iF%uT*M&c?SiO!9ku_>d_6{ z@uAzz+nshhZx=4qWW0vsxy^L+)i=!#e)Nxzo^Z|9+h6d$4}AHCFFf_s-@@WC6oR}I zthCTd$SEZ|r~op^0vpZ4*(YxB@DD!x*sm_S@VtW-Y!=t5gTi<*0j=P?{>E@^J{PIg@e)7IEPQOa(T3U1lhU6am zZn^IPqYMP3X_{&U2E4~X(uXU zEC3ww{tYK4Um@9bor!97;O~F^w@pD1iK$b7mMA081?5V@2rjaT@rl=tIS%vIj*22} z49x3xW?XyCx1N6yLwF8v-Uaqu@dC zAQx4*DqujtGhTn=MGi&ONElh1@H*>I62lcxS^$E*iyIXS>rDm;)qrzjK*vZp#u{s3 z);bLzCT7m4r=3o7WlJ&0p=x4p^I%yJ2uP}e3DlT5XVw;Pz6zhi<``Rs*I&icf5B~E zT6Fi@u95;9VmC9Py_($ZHUpik@e%%;W+DdCRa2SLjtjc%^?`x zmj^0>H;SupWV4CP;`T3ne8z0iYE2F_Hn7FKW!aS|=Wm9X5;pbz z50x-v0f>T!S`%xX@u^34-s|(b?sECQ@4n-(_kV5ggKyho|LZ>Vu^WH(&Ug-ok~^L%(?Gs_Vad@L`v3z1_u!zxU3ouKDFN&*aON zmBx4BQUR&RM9Q!aPD)6^_S@of*Y5VKhtIm~lB3pL(<&^k4_M+3d=`(40J1x_QpPoo zW~5>0xRbsVSHO%SL!`8KjFPoZp>NL>Vv3Ht$|%geKw=S!tOF^cDCu^J8AF&i6F+_6 z%ws>ao1(WwG+C|1%idZk)yz&YeDAk@fA|qsAM?>4{{0^a0ci>jAg$5MMzXakI<2;~ zRwMi z7S{WYQo-475~JJhgb=jWdAFTr?KRd$?m!A)@3IV1B6t@v4akUq-1@c>T)Nxa9n|Vo z=QCzDGI{ym3u6OzC~FbDa65vOs>qpxiFJLTn$%;gzYb12`Cy|bSB@>IB%`mqj%%*} zSR$HB15pOQCxN zK`5aCXd?g&)RSN_GKiZ#`_7v`|IyK*S32WQ4bD(;@S+esE-(ucQkV!*l`Yi}IIw`O z3SH$OY{pzLxlno9-kb1^momhzWB_(2j95u&bJ(P^e^uGdi&+2NEx|6t`xM& z@=O4&KvKT~6#pwwod6xoYP`#2Ga*w=^%232&%DLM&%Q_G1;dLcph~Uwv7~`RG z%+UD!<$M3(kt;uX_&UbDREfLYY=sLP56;VYjbA-BvG4xZKm5xgD70*wMc(RqC@2|8 zkHl06+Ip(ihl?Oqjw4RW-z;2SxOP`S4McSjB&>ng0!9J^7XY6lxQdn|XA;nr6p%HG65tEFAYikA#pY)d*QSvyuMrTi0x|J{pk| z$Yn{6QUr2ke4is1WExb#3S=@LUL2jVq^{p=$hYe9)q(0FO|KAEFe*QJ=%2goaogih zz(Y$^l*~X)CAIX3b>b|#nM)cYmgTY)P#V?)LMb7UTO~{)A_;>uhOcTJp#DLr=ghIwi#7LI?)+ z4o+s67;C1Vy5hdY%a8*?MGOnJrRQD%0$tG?hb1_wTaq$}A>b6JWXI}pF7kykdqZY# z45$edOHG(;L}Y?f0SS?y)$FdT#(AtUIo^>9#~-`a=Wjf9?>*P`#iGvS(&0)&S`$f= zXv5u3$UE9F6hl(TbKh#Au%Qe_q(D8GnnH*;R5>(UnBl^#BFxFdnu}M~AO6KFr=N4% zE_+{d@cZul^4H&b{VhziAx+FcVG$>gGUT1H;X#~o-1a|z=#q=iJ1U8mc2+!BsZ%IY zIEIW6kJ!9^%dOve@kI>OE8sp{v^QUcsd;fV+Slsx(aaSSlM~e6xm0Tb!iA!}<)-?E zYmWNY-!8xCyd&0_o7Wo6$?-ReG|%l&YUdpN;Y)w}WQ$DALzqNb+tcRHTWf9yI{n#|{b@BxCbeA&uKMU_fLYdJD97#Kc)0U;@~ zIRlkSEQE-Zky8m?)Ka7@T;F+xx==xmWW_Ag!Ak& z8yP)yLhjcOb5Ib--+1G5zklNTKR$WY-=4YR&rf~svEST$$;BUvtL-9fYdzd)H_kur zo-Bj271*+|!QNxuT64AG0GsAr6W10k>h-}w$YBJOMnK*IoQ9O;r_f59DB)xhZ@#`H zQc)DEq@o4}E1+Jam{Lq-1OvcOp@)zV#6$rKX>4%qH76vM6$2v(El)J}%4@!s2P|3& zsTHU|$g*}z%N~eyHQGg~l;XfLNEHNm=~;U;G=>Lo&N=V5Sg0yFlv%P=fBI8@^$c5f zfziuCrXJ9$gr|VGFO23s9fGU~%a1%_hf6Lw`n>ZGKjX{;&b#2yPk;IYXPkNX8K-|> z^97?EkmrS%=7oJ5sW!|Qu7cqM_Sq--&UcQx=9)9-%&D$ex`Gh9JY?Ojs%cPaJImvS zf^>)^>Qz-sNWt2+4^7sVK@82DFjqL#m}7=wLR1mLFe{L%ciOezJ-+Os^M0_$t~Z`} z#xH*J8{`2Qw~D(aK`Dg z|M|BwuDa}?jW!MgLq!xtou=yMv#z}QJA#lF+DK4YvW~FXmct!8rYjCb%h~YrU;LQ? zr4TrW$Pp|UNgQ$BlSfWWj4N3!fWUa$2= zK#Ay@M8>U1x68E%V!+`ab$d2W;mhQoJ^8xj-m*7_>qY?i8|d0Dbu1@ zwAHqAO;qN7+Ym~#dif6lA&?6MhC)dnB+TC&=b!(<;NFzgz+L<76R+OznOA1dLE)(I zRz)ze4q^3Ae_GoxfFXz^ASifIR>-OmPCRkJ4%=@?NRwK9#j^BU_dfXa)6h|a5iv)B zBj$twpoUO^7yY774FP3AD8R6AwUPYDkF0mBb8H1sPe<$A5{pg`#t?-e*!E(f~mjy!XAM5B~Jb_Z+p|%vl{$i?x|_>54cpjiHfj z=>$3sxrb#}6zs|n1(JqXa34T4#qX0$!a7(Rtd)-AfCghEw~c0d;AcO7<&gJWxbto| zeeZ!KgEI{bS{a-`iG7-AV$C&i*PVxa?%Go}S|@g`*W<*&Th~>Z=6>f}zkB{g=xPa9 zE188-f+V~^;8j&=hhA-25LD?%?516Yw?0FU1SA--gN|Zt;RPXypn#K(-{42zKWmds zMw{Jbs8r^xwecUGe*USaGh<%|z#tUDjoL8qb&RUO#;N;L$HUzGUb;CqazwKu}xC`A=3V&S~{*-!uQ z=IdaFkg+gA*1#b^K*lJkxz$EJ13MTgaPt?wCNTh(K%sPJ=UwKID1UXZnVr^8P~1nP z2PkGRj3C!;`;$&xcdtD*Ah*IOQ)_H|<7dA&F$V87gFqyWwys|_>7j$&w1C*l!Qw#xM;=vaW=6>zZH8DxMX*_DbzHh) zoQtr=t8XSB|HK^|Z+h8nUwVxVIv$SD$-~G{k27<^M`z#n_0zW7Ja+Au$#rH7%xaB` zEE~P+E6-R$8hq#hjRdjkk$!t+tCCmW%SM~JRg;(iDIbg3)x*(zb6p9jt6M!?FyXsTzPg?|Ac#S6K4QT4l7;X&tctJ7AkV>!G_yVwKr>*10IgB21erhzJ2AODuw_DKK?YtF4u~o^>VtcB(#0UB z#mMp{@t42!e7Cde^%i>ZWHI41oV1f}c?Wrcn1FlkdF#zrMbRCpCbP4&*n98o=dA%B zAd!P*lnj&tFqCD*g6QxOP( z0!`aw^#-FXg3MTC1e*lZ8O9-jjnRZ(k|2$Mh@mYE8^y{0L}U?=1hzm?ixEd5I9P`y zLZWcMUZeMZ{rIna{h~eIIj@o|uh+XA#I2T^O`DOTnfHG6vAge@=yXx7t&<~SXdR1o81KLuJ)HU)fQNn(uD$X*GR&1U&}lc5 z#20b(B{iHKQ>RgSlk)W*|VQxUxMC`ehQSx5*0Nu(JP`0$5E_uFraz~gCqEV#-a z{_uR68_&XmJf^O&RdiEVE`TfwkOcw?)*cB#LmSAtj1_`Jpwa+o0Vn=vC?X4xL~wx% zi9Aw8VxSNTJ1&t|CHCE8@cZBY@Q;3c!TXM!H$3ucV`RDTZ)MG8oLk{FQU$Lo(GYwU zzKT%thynOAO2E1n3{Z<8QM6m#@v$uH1|f^gciIJn@jg=<)crm>^Eim*)P-n#l17|+hl~E1dNU= zNiEV~hbun)$5T$c>!go8+8RfI@+=C7cCN>}@WA80`*+?AoXe^ih|O>;>a_~I1zRs5 z$^fbL=HZkR-#c?g{1KmX&Ehkv;k3Z4*E0Lk99A-WJb1RzQXdd}p^bbzi!=3p6>WM*K!awYEj=9}Xy zyi1`#)q%!_>u(?!Ix06`A~9M4YmDM!#~nI*Zk=txMKZpkcH{LA-F?@>W*Zp>+o%_a zb0jWQ9fWuEt#6Kn>FxgFub|ElaPoT-_Afo6yVpj^)%N ztwrQ=eB^^O4m)J~fdMf&vDCz|chXyFR9(qPh$(@_Do|pd4H<(Czz`Wk2L!=T3{7AM z0o?S3cMp$tM&~BPac70^b^j4St|WS|;$`$A2+&7P1CX`KXr6){Yz`X+ISdD`7FjQS z)ibPLCE)sxm5>D>KuVAVf`Dh=k?;*&iy;)80T8hLHu9F6-}SpEF1qZ~hwrt|tV-og z3a?bnWD;5FvLfpUc4e{y1wmyZ2WznG(Y(Ba5Qt(V4X6g#$Rt8=q_s%~*e4+jGRDwh1(qWv0bW-vAE(=>wb9uughBEv`O^;DC90_ zSkCuq*NlfBwqO0qgOzywAKdrntrnbn!P$@g;QQl${4?5_dEphDb?zfKe(tLx=tPn4 zOw5@vxL{L345>gWCddI(Q$U{KqH}lLa+6VQno_35B<*f=%{AZId6&=Jc;la5c*(rH zNOg1d+za^9ov$5s@Liw2Jv#LE%I?CNx*Q>c{eXf+|wZLt74rbp{%!poe$YmER|qrf+o}(xZ#E~x}Dcu zkq!*cLg-PX`^&Oe{R-;~pL!<4YO`H=<{$XoAMnSg@$_Hthd+lWp3I*5i~sHKiYK13 zzyC}7>A!UZ{%d9h1Ej$k6!+t+gp!6JC2Pgn1Z5Z%0Rw1Y-b|cw(%Sdm|DNAIe#!Y4 z?7ZQI-NY=6<)m<9TCR*uGnQVmB3BW17{w5>1Xf9D5G;Z-$sl|MO(W$_9|0L=rpx4c~b33@0B z5yyk<4f$%`X&n9j&+fg?B?ldJ-Fx42!y)g!>G)eR_q?#M9p{HvE}L`H=l=B0ovz$xReBsv9((E}Y$Kku7@M)_%d-lAn14U(ytLcSyF`R<{f}e!UB?rMU zkt(}EWdp-V2sk6K&wkbSAH92=DPlAICmw>Q z!pTY;dYR2LmG1)?%7Bhw;5zM40Vl!A!z>t>bwn-sI2Er0+iT zqTfDIl({Ye7#IYA+rD_zdK)E5wwe>IfBt=1Q;5p6Cq@60fuginOVMt(rG&M(>dJFx z&QzWkN!1ZT+oICx)Y|Rgc6U}cpF=deS{rKALZp`NwBwBT9X?MBv^%Nyz334H7%d_J z^4M@aocYOjo`1n1N%hU7F-|gVcWv4oP*@*+gYLxaMrC8ysrej{32FYC3opFqi21+x z^=XYE)M8J_L{I8b_MPCf9E71kY9ypN)tuXIGttOXn5ZI>Iy|Rc)N9ywOS8xBTNP}MN#v{*RSgud&YC#s0&oy&ad_Vn0!< z_W3jK~KU81@C6p|?UN&ScpSQhm zRtP657K1j-D*S94=GZXWDe9T4XMP|JgC(o8pW*Z$6!+EWfMqpydc&=x3Nwh+NOhzp zwPuv~myI{VDW|RR^=}>eujjA+{`W6B@#GyBERfa8LJF_h^!0S&4WCaKa+&}lL<($u zHU>LMlu9^aNkR8mk)i|Hgm!5&6=L4R^1)VX?Sl`!=$>!B*|F&6U<8SF*XBRG|6C=O z$AbUy?BX6zrWgBF21}L~av!2DrZ?_YyVb4LY9ORpc-OmU{N&;D&pB^jt^Z|`Maqmt zHCr1@D)k0PWqCWzmO1~@b)Wsnm+$`Yj2QshwJP^Ya1;QC;JNUTgeGjX0X})oHb4C7 z#k=oQYiEDf$&wi}WY!(C6O+S3^~td}hlcV>b-Cw%9`LT2-@X5wtFPO)T0vEosP+ob z04IPd4@9!687PX>7R$QL*QH-+xa%`#B)|erL7F&%1lCytryPH%5p6|TbHyUI_R7mY zOF(XWWc&cQ0&sZ}S)vJFEX_MhjrKZ%jzKE7JdwM_4sQwl+M4UMzW>u}@3`~bwK@c# zWS-kp8Us$DJveaT6`%>5ZGzLz*t~qbo%}C4Su#4R(saC-m>eEztX%$bz21qFrH=n` zz(KR_yZ^%LK6`MZj;gQ{UZMgF!mo;v)EeHE|J9_hLeg?qEX?!8vM2x4;HbCd5mt~L zuH(3m?zYK>F=0`jzFy>u8+EQkQ`fZybm>HAf>J2*S5Ukrxm_{ZW;V+Jz^`=Vkn= zj25bBnTp1wUMbDEFcTu0RHiB9q-(kTPqTYDD zQdu~EzB=-V?Jv6U=x3h2;h1ALA{ne3Qxv?nMatHeylM+?i30$ar)hV*YTP@vYkckN zC;t7pyRN+YBRlOnbB7&gZL(D@F$=fduC~K2!{?rN@Iw#Z@U?Fov)?{5hHEfAkF6$7 z*eA?-D%lI{nKCs!Qv%4vbLf{?=TPp0l^9G;%#Nn4*eAI>K9(LB52cB`pK_{QQ?=i>j zbj-0ked3J$uldYz_kQ!!5C81?U;X;RefAqEECjJaP!tPP!BMbfD0*OL0kA7<(W+?o zj%{jRz2}6#{qv41uKMtfyNvF*!^};$swL*lt+%f2u=B_{=N|ab!`I*Y&7%+4e`rQM zMCb?<5{iOi*H7CKJur}z5QKx@waYo@eDK_}KXA@jANb%=`w2i!)!0^P^b3V_qqWp^ zSD$w2g&#frwD)}M_;+1$(TO8NWizIP@AglF3MR%UPk-<3v_g-+$;ir9k*V8_}(nIGThj8hIg z<%E4t_{bh*w_3f8kXyPlc&hcW%8TV7IuMb9fh7^d)<$6XPHG{N+ z9d^KNx9{`Bljq!e+flpkoz&{Dndq&=jCYs46w`>ir0s<=5|iVuUf=eLPv3v%ov%6ziH3xdj05&u^U#BL`uB@}F1v#L$jg3?G>5V^ z-xHS7s=zR*6p_7ax88x$|Cr@vO&x`=L8-eaAUx ztvNJ=!a{1H)o?&Pk^@OZ0swi00!G2;qLW2R4^(1Tj4L!X{CaEQtVgV1feRFc}qO=}PXsopc&Odwi^UvAv ztWT_e{@FXNxh4WY8d1Gg`h%2$1ZoDKIAz|s=d5$yIcuJI`i`Ia)Q79pwxCqYR3Hu9 zG&0|H=b4}Q#DeqBUFU)e=3IKoI_ICa?q!#4e9bkRUUS{%pT2zlDIcGAzyWH(W=IT- z;(7!_G`=!TJ37Ur({PWkm?9*GEe)`saj|x^Rp0&YgeenVXz) z>JEymKwc(Lxex-ED*VoZ1&z~B-~asc=AVDghF4#*+qD<%eeET?UVF(7*Iv5SwU=&w z?Wg8nd+DavT(aQWOSZo1g6%FjV@vTi2om=px!m7GV_MP}gFVVv>%gloo5AIPBPBo_ z0*ahDNC||Txqt#@G++RD->CD!2e19z@0|McpWkuFp<89et3z|+`he_AEN`s2R)7hl zf+!<`d{27HS|mxj_|4j&(L*MkTn>?pE%wH2aL#$R{QB4Jv;zty;sGZg_ny||LRviv zwtvbMQ%*((7>;`{8F_A<4c-Gm#8Sf+g7d++Q~?HsW{imnT6IdR8b%3M#>>GP#Q|~63O~k zB!MaO$jS+Y11bp=KmnB)d1ebPN|mf-1V9LY3nCkfFkFQQ7_38ZC#G_jrwCej0%r8Yk#xAPt6wu9Q1Q(vp+{L?j~t zmM9Dm(W=)Q36vHYEkh)%M$RFP5yzq?n0l{QPAMszhjZ)z5lPB7;f=QXq*SsP7|PGpny!EJ!2R~B35M;sGqb>HX>()HN+9Y0NO*k zRh=~Sm1_)y05?6psecOr7TN=45*5fnIAL^eVGK%;ij0;3dl*Ang{gd>m}H_T zBDfq2HpiFm{?N}Kxn-Me*6uWyXoFUBf`#MWDJ}w6z)9Je3APi>8fY(i+1hqAJgllU zM0IB?wd(rkp7X^;ufwO10ZELVcAUM*#&gOwykAA?3lMwZ$!e-;8DIl^K!6lcq)Rof z&xH{cWQKy0j2NPZ#6T%eItU%09NMka14_A^no8LycEPm(c&I>8vsLJ4bp+iSYh!9lCIiR@bQw7#WSn{U-pG`Qw1rIL zsBL87kb7{M8iY{5wt)_z>9ggUp#t(|fe=$jT&Cfa5p~H8K#_OkQi+a4ha8brhGhl1 zE=*k}2^j;G$SOf9p{WEQiD0TON0BoilY&*JTe9Uv-tkkf7e)W|hFpfG;-+F>M#QmW zc&(`pue%ejOmc>F5Gkk~&|+8yDIoy}$$}s;1}rAwv|5z}$b^6nBlqRl^-*lr*NDQiAN#zfs#R%;9Zjsqe?5^1-)SfQ2~w;>h>!-Jeg( zVpX}Lo8F9Zt0L)ptPxqFJ)*^H0}G;4`K zSx2907qa7E%Rpl93ld&OK_C=9?LCGI04lW@BzzG_06^i3dL?0`KnmDqYm8wE*T32s z-T^EKS_lO&heAaCC&?v{LFG2iTwHjaS~x!ynKCWyyce!g>gyrI^gO@*|JP-K36Q-X z>jfW^P`yXg(54@vPJmP>qot+{8xlkyh6d^}44?y!dXN6bS3h#}5pyE-FUdw+KmiCq3up;JHYgb&+7P*S0D(Eclr&+-?4c4+0-?&x`H-T*GKPqtV$?%O zfCz%ha|uEQN@e6xI51=%CJh1Sa}a|}-jzU&5qTyL6wJcFPi>ZRMi9satP+TVPaNW$ z%V|Y8n?nak2T2eE;06Vb;K^nQ`e0_I0m-6lMV=EfiCn@7w2Qz3g=413 zxf-M9%TPK-0F;qX4x(TL--8iG9+87$7!Tv1iF7|EUJ)8V9iTvt1-yVIIKZJ6Pz8d3 zgUZ1cK}u2ahzJpbxX0B1175&|LJC4*U=txLZR;I`gD|oV2E)HHlx#*_HwXjl!;CZk^(5;ns7}S1B4*GN0z&0;W}B7hdyW>O87i4$CXP{u#-{> z(ciR}Qk^oAh5;!N01Iez)4biCkQ&`Q1!R;Alx3~F=rDp16ab+B0h?||F)SggX>8ofdvGSfQ*pma78W+v?k`Xn_6oT%1aFq zC=yEbGUtIQ`F1zCT&9>aQjGp{|57hqu=_`sNB67|F z2qCmuEdVoy#j(fjcIv4|RI44(3L%<|CPE%UzMAT9`pDM`&IS_8mX3en)(0S<^Z=lH zA?2$^em}XshaO2v*~GNg3qx@4N-NKkLNb(Akx?dzBLJ=!(kx`0l(UIRG{`a1EHu+F z7AO}25+I6P%5bW;S4iN=CpD2&wTFwMq}|DVkMCrawB>W`bc*u2(iO#21nwfXFnMm9 zY2M78C5T{w0B4CIVpEkuflw3xC*8JShrA0gbQFUU&#Lg;YIl4kD5s2V?**TTncDv|y1O+fScT_++gtnBnN^X#RgM8eRMovZ47ZG=rOId_a0cm6g zR>L97MVZ3uK^zhtVns4285EU&JveXy6yU<99TLzQk_av+4;4rTM3Eo?&+r~>Jr@B5 z!3#;!0EQ7UOn~+zt$<@x2t1iP&jM0v&#K74IaI8ac0!j=+yz+395VCim_kRBtC-%D zP0*1}5FA1d4`#pzgq%1-2*?w-2wt)6Ge zdg<9eKGvRmty*b+=*az!|L`_71+v~{-T$>g2tZ0nL;#F2^?KcVpXEF>h?7p*f0k0f)*Ju{>bLTQB1)3yZ*?|X+_4+9aCtOUq3%dKUwP^JbcK}a*}7^$}w zvVfkAr z0x|+qh^i4uL!0=F@3dvfnJ`4eqAh)@577`?l5D`HKE<6_=ETv*d=S8*JFmaV# z4rD^)P!5bZnVPB;gn|nF8+-<6Py`ieNfCj94P_LvDwl!&itdANx4RHDP3%!Bfec9M zN&-S~-ennaney9{R4|yCr3M*ECW4AV8dz1E>7~GUAZX4Qs-j{UfWiey+L(xR1cbo8 z{A3HnfvOM!WMvWoC?}!3!&%#*ym-nkrE(-eQjmy138*^ta>`O|***aS(jy{B0h7qM z3K#@c6af;GP2@Q)zw!bdHRsO7jytaP>C1NpBX}q!qp0$~HVD1<(+)f-ghd0N+W zkWeOe5CJBM2UkqkGN{XkZgAG9M6%#sa3zvzEvXJzKt>gZDD~9L+BW18Jw`y`yBRk< zaxLR(wP68Eu$Zv4G7m)|U5FDL6hhDLToh;)7_-#0G8F@0gSK@A!vWSQr7As{eiXs_Qpd+EAfmX| z$U;%TTY?L)URYoAT=S@T5(R@JsVXtF>E*KqgaQPTk{G>psw{H!=BKb~f`tNS)^c{VphksCnoYUc{4sz_WkFKmTc;{?k$ffFcvi@+|{- zkoU}GF=Jv<{^rr8fBp;p^hf;VnJoC;=9dJV51tT!l`V8F7A}T$Sh56-0o^Oql4TG0 z2n==z0o}p{VBykq*-CV}m}o+XN;RHAB!g#S2oXG3Qe&cJCOVDWR@xnS4@ROOEjuA$ zBI=|Vn?SRLEQPa3s#S)~UDiME!|!FtWNIet;DntqnGa58$wYw_9W-;52V?~nErSn8yKsevKxR7-@Cq-!o-Uh2(_*}1 zCc3iOMJq)oMK?#+iY%ZDbQ$ri>Y zv2qgQ9klYwWYL%`8k4!1%rKFbFC3F8CNoT?7)#O0(8|ziqnp7ItcY1?NMUM;NbtsD zbTV`;ni*OS8!y=5oC{7l=3{%GfAImc=3uf7>rptou?U&N|K@fy&vO7;Ya&ug#c>RH ziM(OZn#7Su3~#;Vdfv7P!CSZ5z$=vm2tZIu!2962S{+GKwQy1TkLTd*lxNfSJB9re zm~xvTdLe54@<1R0K?hVOo4Dq>@4fGci}pM4!h;V!{jy8%n4DO(eI)^)u&yH|>qt7r z?|=X1DJOp6(1Wi%VBc#FdDr>>{QI(QYn%fhAQe2&E%4)?Jh@=OX#Bfz5+jc_|@&UI&qT?Ke_XEpWkN7D=)a< zCjbHhq;j4?2!TQH9)&|>>J0k%Z=QMAyDpwP=b}xwxOVgH&b;aNhhACgpyoIo?it#;v!xbIUEiw$9q0-(tZn>#lp{dh1CX*KSj- zCUrFN*0Q0IHM^O4?D2m&o(5Y(K#z+&CBZAzY~_9LFyUNaKuT4q!TMU}hFlm8m_5-H zwK_`kbGz+(%dsL4+gn93ylk1uv$;eYD!FbP4_4~+@()s*GoTHYudrid6|FZ}{8oL% zvVkkF_{!Kg3RcE6z!DCmArySz!i5>5$(yfd6XOHT*675!-Qz^iZJ3t#;6 z``&-)t8Zb^3e)N~3R=U-bpqBdiZ#YNvu?TV;bV@u_43OeTe1Yz$S}L2-7FC`jRF1Y ztEr^51F!x1>%OpclCX>*kkrs@%VxW3-5TBQ8p~FUOg3jtHfK+^W=}R}O|)iBv}TXD zW{kH7$2;}Oc6GATXmy4rCL0qIgIPXGa+U=$2n(em6kPw;zgx>ED?)GNX_JZZ*^?79 zo2{Ytm=0msyP>Q*pyYbXm&!#;D5*C7mkTrHeWg+<2O)tBB@)O}RAU@`@TPgz)jA3V zPeU7oUM4*`Ae4n-UpO&1JU&^}8nb`>>p%6GB2&k9A^5*Im!~$Q1XfCf(EI5?6%utH z8rIj8Zh#>KJW#7i=H97vl^dF39nA>75ipRuC`)bG%LxHSC*>SKqM`L{o6qoWPOZAh zn{WCv&$x#f9tnsL10K#n3Q|&d2NI*qv+``1#O%CCT!7J~tiqA(3WXrxJQ+ROYRBDN znYiizpbezfhiU@{9K5HAD}_tIbN}^x_fLQ7#A+x&dAJY?kY!lzY22Zdy7%5+RBQ8_ zO|7DM{wC}0yi27B077hF17svUlnZfiTAC`mF3F53HQKvuJgyM9P#QvVnzf9Al8A(4 zKq3i1@X&fz2*X9*2!7D|N?tfdQK?a!AcUgG7+i;#_s_q#PXELWPy8WeK#CZiVFLgq zqs+ns=bZDkFMjbyBtYZsKQFL^@&V^IDIyT<<;%#?Kj2F&BkT%su`PsMH zs5Rzwx^b2_l4Q*+lT4+J6d(v`o$Cq_n7vj?YYi6=3_^|MEUD*mCt(aikmn3!NjM)0 zVk^jV=qYkagMFIGD4r|ioNijrQWIB4IE3I+8ChGb2zFd4n{}JD!2xC;@V~kp{U1hz z08}*s2s4H;Iy!t!$T=r&VA4w(qAD2UB9A-hc}I z^I?Drq)WtW53MzA_9#_vWkelQV1lQ>WJ~zZDumRk60GdDy|tRCI=-|yZ;b^HKm6>y z_rB=@vYa8Dr$R;OW^GAmw?U!dx$2Pwl4aTf10dHc!GO!(>q&X&K$0PpK#mTfh*j_& zhaa|w^-UtqbCnm32Y>QRX&F~S2*K=}5Td;Pti$h~7@M4|2OjdQ*=PIixq|{K0urnM zLtyWeGR7DXyYBKm58Qg!UDnv~9m6~BFtFRcbGO|l*=d)d?Y6D$yz}gR_MWdrPry-n z>v~khK*Rt%P;9lu+6NpkfBPNk3$}FIY)fmel?S`fjV~D(oQ1UBnHae2g4@TI!AZ@mp=WcH%&CpW|XHBy58P;L9)j#gYP|jqn&o2&FMem%1V;UJdYiJ!Us2= zZ;S+3Azu}E5J-6{HGHz1n#)2P2W++F$liOcyXWrncG_X+9oyEn+qSXG?rZI_=cdEM z5qCNwD44;K;i27j-C*~3uCe>BbKkk^>^=9GyVss;?y}>YEf^^g+chq;@X~vE_%-VC$jT`m<>jt5K(||4oMuUTx zH*YQnfMtI-8m2-NsBFPA2n1#ZNEu(aWy>d;ttlrYO$Pz@hD9kKWko#g$9hX^3GJ~g zY!KE9&%*Y4BCCS6G_hR8s1qHCW>90^EDd^`$@hMWr$H_`)N01rR&6jswX$&W`0((i zS6zPJ^Up)Y1j@b08MYEviUPF+ArL5laxc>$(op`U9$82N!~$LxUKA{BAR9_dlcUnR z90Io44x2BS#bVOJ3N`TKAOEG@D&IQ`2+xF`I1eD)|NW=Z&T!$CQWzc3?>%ty$RlQG zC$&Qypj_ZQhtG_$BeUr1U)}eC@4f#QKRxWB2ljvP{zHHG{X-sk=zWhobmWikKk`do zJZ8PMpaAj^E>@-N#Y3a3X}K0})sv+kK6=5u-`MHlpB?_QpB?$|Lx=zNH^)5s>kAfa zJu9`oaG9rleo z-tp6K?f25t=U#c<4)f+Mmhr2H9ln#I-i8Ui%LHD)3+rXZA_ZlHTmXtgj80YMr=Pmp zSMGYx1NZOq$WQlqT{Nwlii?e71<0YCo1Q9u6S`ycq; zdw=%e(Ledokw5*(5kLCjQQ!Q=QTy)wf7>ABvgaj0$O|Zqq2U2WkVe041Wqe$LP-e% zLavm8GVM;@Z1(@0ML7t|!B8%AtF;PO;kp^*d(oogN^KgG3;oQ7RZAPIevhO#Hdy8? zJCIElomG$DKeqx9@U}>G#I4Q>lfZU6<4rr+s$Ox`FEfjd6;j75C&w8u2F)fSlYndx zIYh=HU$qYhra9;=i`>hcg$1zys%k)RB%u-mB7FFx2RL3vI**h38?U8LJqZRfmjgnn z3Ic*hQDCx(Cmwr&FvEHW)!BK+b+_CUrhE@P$|!cQQv$@^+oCzKsHzbGIzTfb&J0=! z@(9+D8y&GIRqE`@o`&?049QMXDyid&$=Ku-4TDZZZx}2Z9SZN*3ZJ{?gla^wtcE<+ zH1e|t|5U!)A$1^#h}vDe@b9;DGRnT9DLLeTy${`gowa88ki8ir9ZJHy0e|+XJ3aF7 z=Wo3EtetioCcu~I;4&|Z%BYsW!Vg*~I|F^A#t1jQdAqbdQgwiws*H<)zJ~KvuiGmOeD27WtSrr>*?zGFcpy-)n z`9FNgZ`-C41A(~20-~1^Q+~H9Qf69@qqL>1(q5rAbjg=W;&Ry(J$E<=j@U+;gKG{9 z>FVsdwOtVpKKSq-?*8gOq)s}87#x`4*#oFokY^oG4v_{bn8IrPm7vR~7E1c1$b%^Q zsl$;B3KkNs)3%2kHoHFD^ailmFz4MSG0eFR=MdMGDFRF*>rzaDWPsMstNxUK!)>;t2F4&9|K?>im zVwOQx{lVr?mNci|rY(sy^@)K36nY+i)nA4JrUEUdKjomwClnHdByhygy#u5GV2KI> zB(qUba9pWINk#5^z;1d#wZ|4km7y=({J>wIg_JTt2omiUjDZifuSG4Rl&4QpQy^Q{ z%gXCNG0`_*5{kjP92&%qJ8l$YtJ_^6Rs860|1>rMO%-NQGQ~<2!*{>?Q=n2fZz^GQ zUbNdja~%RuKmrhua1vJ90=C<2k2gD>R5wE;G)TZBbODb@ORW_tBTWn=K>@-+cnEj_ zC*Vm0G9FRxM71^;N01Z)2@v_5yY2Fb?;U3_PSqn((}jcwpipWXhh`viEeKzDZ$tF8 zum3#HzyY=$!6fj#V`!RoW)4;aP_JsC0(=32ccK3wYe3NyE{)+V7!^hgNS|drO^ARX zsfG3q-EQu@%&jA>bfoN5&#M5kfWjg;urK#qfqI)>C#{vRB%3YYY#{_l8G#k&3LZi# z?>N90Trk4_eJf$F`eKy=3$)USAiU?I*Lk11G)w&&E2VVE3Lya_;S1-j5W<*g``doZ z2EhyD0Vz`s%6m?t5*N_Bjs-zd34{#^LIO?#>+rT|q9?%#J#~Mm!w>2@gj5a1>bcRg@bjzUdPH67_2t{h+q(^ z2(^A0Q>;SPV%mupqF4TP{b?oS5;*}!f9UX}0g5hl(dr;G$Hmg6%YXgL7Xdii(_4YD zXd!<8yT6l=kj`TA-G}cRSHL6~2}He&a!v^@;&?_CjTl;5sY*XQ0C1SP zp=B7tiBL%73WbD~(o*Dv?AlfrSs~FWMBX(BLsFTjipdl?r6EZt+poK%J7c|(j)d0$ zLusA4R-=k{?zI(?%!VvT_4}t^{N(w+``5pbGMK;-+M!!eK{6u1<|r~3Y%BP2$hNHb zUfr7$gbG3;LPS1701Fflq-HP@5!XPXANLu`DIlrOs1DBbvdSu%%=4aMn@Yr#fYDG2 zswWb55>6u5z7WDv;zg_*5gVuq0*b)MEJA_c0A)N3lX3X(@ZY|PcXdW}sT1nQoxbh% z|80}`pZEXyV?C_{F<>n^os@`#cst3P`l=YMHJp+97gmBQ@v3v1LG1cLxw(s4rX_|aPpB}1^NRfe+6#fgmL zVuST?!g22^vXzRZlp|07W$_(%z91wDhycV@q*;rCCe|`gzXY{vBV9V@1Pc)au@Ef4 zWCNt`4?>}RD7?kN2R4T4RH>4I9qna;ai1L z5f(%*MpJ+TgiP9#V-PvCn{1}9zK&;Kz_ZWcmACNn8~D@T(wE=DD~s(|3MYhvbWlB{ z5>{UGB^cOWBVGUCZhWXOQ8eRE>r;w+$wD6(PYF1u|))3z#A6+7?GIPLxL z3r)2R$^s?dyzf^B9sa4aFS!4Yf5q|^$W$CmY!m{b2vIDBk)onezCCPph2of8|}*^!3G>T zHvfJdfBP4neLnrii+<5cyz&e;|QrG4lt<3htDE_~U*y*>>ucxdooBr>A3xIcEu#4d#8E?F@IEfoB^F8;&6n{;0 zKm{mt(ykd8vhBjBA+8P!XbL=gX8$12kB97!dclwZQ9#7dy!NluCg~i?~(+8|k&;Tv1aBP#I>@uLemE>7!l^ zpk&1>ScK9j0z^twss<6`xFZkB#+I2lE>M5q;pbLPpppQ{fwtE8*7qLD!?4GYw|K{b zwRYJYRf1+n0=yG47XcB2I!R&@xE4hzEbYA8T|4b^<1Pn&e*TVE&)@MgJ0E!C{O!-$ zWxrGZ`qC2Hy8s0tQeH+5%0gQxFEzSK6tI-FMR3R*+5uw@Z*_3(&Hwt$jX%NUTGFqV z=$UKIiuT!kW&)_t6V%#vQ4`o_$APOadB1iqYPr|^bkvGOG;VZTnJo%)%_Soyn-S__Nj(c1=f14|| z+WCun?03sJ9L!U(`EZ_x_d-6c9&% z%$kz|e&%q)lxqU{60+6bLzY#N9?dOa+C%`5(d7c^1C;QEO^FzRA{CQ|fQl&YZ3fF} z3mnM^K<=#8y(n{M^RoHapK3_J5W_pckYnR59YwW7L;{T%H(YbF&Pj_0RwjoC1zGWV1%q7DW!HJ4NHM zCy{0-5!B1a@Vlp81Pywy5ZTf1+Y31)O{r?jc@`8Pe1$VY>Nrb52H60xcEB8mxg^$7 zdR?W~&a*}w&tQO=LG=*Ut10g62L{vcd{Dkwg3E= z=9y=FX|KI*`u4Y8Exnx<5hH=9Oo80Vzj&X9=mhB+<=q_0>Ol;|;Vs z$b8w5%9B9@EdU5fk<`H}f&pu0#jKb`|JGaKS1oc=jJ8#vzH;wpfxMTDLwS$?`L=OL zfRX`l4uAN=Tg|quR2ylQ^=(__)-f*Q$QcrXTyRp7kPPmS>~1)JHbgJ_tT*g?ZVF$Qil+PP;9m4*}hXYca(&AhK8%Mihonl~&21bPwlN z03DD6Be)2hXw`s=d?6zVS77%&@$u95O}lRzDe{hZ^pStudFx*o7+;BMW5kPssR*DR z*%kmt@gdXqoi|^7YsJ!{Gd`NGTpQ^ou~-YmB=F+e8;@W2 znIqr1>#zcry)lUZs@hbqbVx01?m7hQu@~;U@1)aCJ!tJUwP{eb8Z$ve!Sh=Z)>wxk=2-ZxVRkL5@a(#Y;g~&m!Oc3tttrYicsO41$VD&S? zszSLhd$}we3&-SH__RG1Cq$8zY7(?m>!ne=EUAo{Xwv4(dhuW$vX%NJOL6;c4;*>a z^{>4SGDulB3tPIS^R!R!wD84$DG&CmmDBEf11hZAW)fC+wPPBhCQMInbl#dMDLkyh zFMs(IbE1@CSM+*!JzJn=ju;VGk=9`6oh4y)jRQ|^v)x86Oedpq-!>rx^c12?OdWuy zgiAs&Km_l-Qi_>_=OS~71{WYkY5Xh0cLWguAx9+=Stk<~F;z52B_vfM7bTGrKmZ3V z$i#7lg9rr&3r!(-oc+mdcHeW;=GYsRxLU2Qb;r#Q{_*!92~(+gX}!#YK!E8LZv()h z1ZM_95C!*S=wa0rF}?YTo|)t559|lmiK7Uj^5|oKSuueE@B&}G=NFawIxGal*v>nz zGiww|lqcsBwJ7jx9kU!M!5moa9vz<-a6m^&IiBt)eCpseO9;mOuPG9rQQ&7 zZkEk{nV8v9@{7M#% zTCIpkt3oeBFX4j$AIO1n(&@hYY;)2H2cK}<{_lVP_8&U>9mgKCJ0}r|4@6W+9lo?&o4V|KhYUDiFLmSeXAg1wSrrrJ^ug%UuDWN3FMq!Muwbz4YusF+Ti;EF4b92j9OSyR2a zvU<(ck5+4#Ynrx@#6(d)t+-A;} z+s)i`^BJ3MzLp4nbac(4<6A4c6DvdcX|yI+A^b*y=lNYapTw`QTJh=Ave)#D3f4HnZ1Wy2L)DVI}4CV+SVK#xIUJ$@) zpoS^2F$aWlvSZ>f)iegtYGGah@ckiBazM+oU0@Md1c-e0s5tH;8(eeM#@Ai5<7cnk z|8t+&|N5)mdBvx8x#;ZOcih&*0wS~o2fXwGzJBk+^}+RvFuZhyJm`>5J@C_s0;p65 zRbrk;&t5?msFg@RJBX`YYIn^)g><3X|701N$O(%#`@+FoKRqYo^Y0mmo` zM3H7V_Jua=kOl!2_rf?rk88yMJhM<(v9c9Mq$F&f6N^gRL+X?n63ik1tl%kQ(Jg!z zaBrEG46Yy?Zs%GGgO!}SM9pXsN|lLed>Li8bTo3 z>9(x3fn9UrtvH4dkRl^x6N3<-C6Wrd-4cqCBe&=mNc&SnSpu*FL*~Sjj{Melj`_j; z$3OV+hraQx_YTj%^0!{rqH0rf-PO03PoO?fwW&p1o~&dzZFG&>9S(7CF0t;-D2eU6R)}H=I35~6)qqzKnf(`!z70`%H9h1@M(QGa9JU6 z1Sen#wtt@!asf-^N;zn643wMaUTsx@rxevu08)!5pTd3L`;F2w2@PXvD7&b=eFCQS z5(HQw2qhyBN#q9{xa+K0|9K(0vM?$_{~aXIRHLH&Pbs{IAP`~Q_12P`q&fFNJz&atyj(PQ27}fj~J)`@PwcWueu_!%uUOgF-SYk z=O&gq&v4SIYwoqr{93KZ^HiGJ=We(!t_-3VEiQPf03cEz5Agk}^As<~l)xy$+h|%6 z&?ra*eB|ie2L~l61L)6xed*Oj`1TKf9oI)85l8m0L*Lnm%gd*14R(MoCtUj znFS@)fvA!MLMNZ_q3AcRLQ#?ns{#ZvHK;*w4WSVb1@1q2*@T#wT=7!1l2&2_hK{iI z1~~R(yUdttvXm*zdF|i+OLxBB_3-d|2;S#5_X!|9LKhN{O2D-d#)RnvH%aUh7>RU7 zf{%QlvD5bTXg1GUb7cAJZ#CQ2dO&a#QK!8Oun>UAKq*8DV&;V3R>tpD4dm)27gvVc z66K}zV%oC8ysD@{n38s|43J2W1|h$kg5Q8*xB(3^~4|E$Qc>X1#+N+P(Y`sd5BJi zN1ynchxA-PWsMQt7y<~+3*X}pl`}?Q=|j<>Na@HlCy^wv%@u%Z1w^>|nxm6yN60kN zYT+vjUw(ceLV{4{4NZ~n%3Veu)f_Z95+MR>;$F2$OfN^3dIq5cW2YT3JmizQ0#Um~ zzx)ked38mW2MFiG#0TDgpzN)hC0S4rB=M>mU=TL0M_Hb=JE@N203=aOn+CJ72&6$8 z9S=_^9181uHCCEd`Jz-Hm&hB9NQO)T#9ktJkCRSWd&bOAZy1QE)l@g#{LOBTHmL2o zG7-i|E*K19khk#qOMdAR1u+w72sHq%l_^UK7^z~`a9v7z>*asz88e#gOiC!Iz*Ma@ zfC2=F4vDPXP~dHQG)w{7#gqZH_f~T+kWBQQZ2fyT?J*RfOGzNuh`zem`m8*x34tU@ z00CwQ4Iv=_D0nS|#-*P+!Mcvtah^+5X1YQJmkf?>a{sp;{qToxz57e;v;zRSPk?B( zgBEk}uo_MyXp}(CuqrFHWaUkXUZ%>Y&IM*nHgUp9-+1NKmXM=D z)U1;*NtWe6Nmwp95Ggo^bfjQ(gd*gfmKJu)O*hza+j>8*r=P;~w!QnRF6C6yqW6{O zdHG!S*>}xqY?GuAPzW1cb>+_={3&~&>(PbqP$m0qqJ@v0^w8^X1QU;RCYRMm+};Ol zUG(a!Dj;Hr+`XX!9AZ&^q4lmBX}Hl%zVBnp9X!KKG`i&u-VlHz!xjmxgSk5M5tFp=i~ zy6q-p@Bwcv#rxiW<$;IZ@ckckJ6^Sd$^~*@a$Lb-S@m|#)$P=%$!GDCo*^W;1Mf}~uvJWe5~e1DZA3HWwgFB&)>8SU@-qS=O9@ z3NuHmMYi(eCw^$CiXuZr>0VJ}TDRxFse)*FnPzynQOcTU&A^8~c%aSR60n_CrQ4qQ ziBH^g+zAi-?#cGDF)SX#%dg|kyB8hwuCM&$N6%zwQusm-vcp^FT)0hAFL{H-Ksz_Q0Fr);$IP8;T(Wr;Gj>EMk-#YiI<-oiQtlrmNCL$DBx ztebZ`9by)Q$dn+^(rxH_ZG~wUR<(-#_S>LQcajTO{o-F=ca}^&N$TN!hws5a#fYg; z&M4}ojs%ZjAp}BjwSii0i>#GZl39QLD_&cO7hb~Cf5rZQC8^#l2OQG>)Bc^Y$pDn_O3L_s_IIAXS~CEuU=JA1t=03 z6bwN`f(!yODI$ZjIAN4Q1QkRAiXsJ7qKIa~kZCP58Ix!yD@mKdZj%n_w4G&=j)_Ur zQKLpo9Ez!`UcLA3aHjroUrm^-)%`E7#a{16)vCJh-h0m3_wKXz_wA1{Mto{ul5%Z* z3laMwKejmRU%_`$6^xM1@(8bO4+pkizH`POH>-xgr1antAbmaNuPe zcpcBb5dG@+$?smmFJHv-zr(NpfEQl|1v)(+Ej!LWeGC_(JwL>Y4jl$Ba?un;p63nn zg68l4==n=8-+a?ePw(HKL@Mjo%eoUN2P!$?v{a28aoQPewQ;WYR?qs_DkKTCQXn>8 zkacyOGo?`W14BNMWmmz#aPQAC_G)d+9=-15DQn#J!<}JHFe0zo$iy2O3pl<5fyv6kG3^J$=du zt&TY72&wPxs(bo72d=&9p$Q+{GGXk!lgHkB_u4PL`acfI4^rf?@aW%ZHy5<~_y<EC`k(N~h&x#audL zT9H}sEV8PBFEnUOL<~fXfjMxHN@vMx0J)BL>1B%_K6moYIWu=JS+IB3lt<2=vG1aJ zpIdtVXXej%Xu<4VpL%3}rOFAKD2f?rlRG43h1l~^L@KCe#DM`G<<=zGC~dy$3QOM% zhc%T;BE?M%iYJrA<-wh&9nNj0)k~lGbq1asCI zDMUe8QjJYeI9cXK{^;3*mtWO(^|haS>RYc=V{m~=igJX+LIi;Z0cDPJL$!i3NF7m@ zIqpGvU{a*cL`GGui9ifOg@QuZoxl-vbYcA+`{!S<@sBTq(NiIsD^+8RW;x2Z0kP5# z(yAszFzGpKZ4yDJ;6zH6ucOtYj3)Kq%T1Ltz!Tl=?QiXoQ^n+IIZZki<8t@NCD>}Kxq~GLZ}o;jMGPA+t$@q z9Wu$$kXIQxC^-sJA^>MlDS=_IBzqcBR#y6u!(oSGQbavLc$O@!qabkL7RKm|gy$THW6bgFF{YASXag_yLfz0@A9X5g zii|W73@-R%nEgOfZb;*1sFTuagG%fCT8T(72kO8ad`>x>AYjzw^BMCv);jVS5wOHz z-W-3y1rw^>Zxd~k68+V4ul(S9C0{~2k~NdR@WP%tj)upX$1Syr!`QgW94Hi!)}%su z_IR1NB_m)Cf-0-JohcDlk}UmuX=r2m3f`PWoK~c$QX1!n4vVUc(ZNKXnx;eIxH*a& zHBO4s`Y6doX~Ce83goPg3ju}?$G*?38`OBzq;E^EtV&gy8lq*+b6l1p-W?4BoAC4J zqP6S3I(7P^_qP20g%_cEFx_1dsul)tM1T-Oj6q@%Yl4Iz0UYrOYaq1Qp(#e8s)Vw5 z`A@jx&fiWxXYbdZcqI(yRVt%P$9yQ^2w@UTq^a%%5>H6Pnp(*rsiPp21%VL0vuPB+ zTVG#o-MR9NF%Se^rhUo!Z>p)SrM&EW!qI-f0%N2nC`Gwk$qDN;>g({0Z`^qAeHRWL z-tOF=oj%(A)OF(`%LurBh1pa3yCAD~*r^6MHdoIkFi&`HSajQu&xwF7TklWhV$ z5bl)C2;;dhqV(+~c}qXsF_e-VwfeQB`rB&tcRc6}f(qg7%Dho7zoOHF zj=W9j;V_JgMM7y@?uJUUmI5#eQG`KF!t*NHv|D=Eki(XM(Uda~7zPzEaA4E=YZ{BH z7;0`KRqFWCzR#p32#QoYj-*&0f9A6bzx>ZPpFX~tuj@jrQ4MT2cZm#qS&ch7x(^OM z*-bdhf8oC#JZUgIR6<#$P)W5m5S0q@1%Mm_X|KyC5;jZL^s5u{T5A#ls}&(I7D13w zax_g23URoQj|aj|Y95=-2<_>IPtjE(=G}XNS>#NlQ^0?JOB7sTl0m^sPsBxRnOy$@=7&{Q^$e^77VJUVQfy0^eL~r zX7=v;;i4t2Q_lV5nsv{9;juT~dJBgRp*zZalBYVTCi!w47zb^Ts#<%qYJ!(u!N2df zJ9qwa`i##`pLXBlUwb2n7*6Td_XNP!@b3M9vOO@PaZ1*tAkD_vB&QG#dDj-jfIU+6rd(1jxxdt z9D}8Xz#`{i;`k4&S}||k+W8wcELwTfg@LR!z+i*|wp!^9eNGG-3g8qwS}xwOVadvs zGuGTPd)2C0lP8~)C1$9gAePjas+d1-!tHk~yKTc|D_1XFw0H*1;6#@8A?9HnlqIo) z*2)rxK;ZUum*0E$HEY*iu+OE%uQXj{vb+qW;fZT$tyZ=89}_2n?ap3H;=zUwSzjf{T_uac} z&5HSRXP$BR?Xv0F;fF}Ie)F;gr~c|^>%aKvwQHBpU%dFkV@J_IyphkpGj2S+Vb!!x z?7jJ!XFhW3a1?wS>!TbhRi&Ch7(+uNuKUOZE7r_ivu@^!6|>HnG@4V?RPW*S2^|4& zkep<>{(18zu3vxE`t?_=x_QCUB~$z5_6BTcn5dy6IL9f&>y|HHw0hMg8*aP2t>wDS zo0r_Wa`uYr&Ru=O?Avcyc*llCYgf-*w|360>*lSydG3mjOr>xh5Eg>@ z-7)HeKIO+$+NqS2!62DyG|m~_2^wkZSgtv2{D7A~#n7Q|x6AK;|Gh@@ zTr}^?*In_<#?9G673X$BTd4wq3Y==k%SeGuN$~1sDQ4kXvQ|MF|BcqaL%647c2T z&ZbS1+FH+RZJo7c^ZCU(FoMAI;XI{Sl4fw;jF+Q96`TUW%xOa(eqd2+%dD1dbK17g zZ)-j8fd^*Z-!}E`t>f$0K|ayfkTu6aA#CbvB}dCRtQr%!LrFlZKm%P16?n0jq#C?KNDELnPH%g!0w zTPC))&0lx>95MiwG+=c(ryU|elW}L{?%8@->&`j5TBmJTGy35jXMe2itdH-Su%~T8 z%iUui+A)65uCwoNnYeq$l>4_&+P3Kon(>GU;W~~uECtRxmpt{&O=Cxk#)b&?s7gvE zO`r`J5P0BRmn+rIu0#_{f;48;IB;x;qr;DO77x6ne)7}5KKaz|zwr5=Km5ou_doER zPd@siNB8~f7r*@TAO6dq{`)|5tfM|nhA2I_qf>BsQdF{0S4( z^~b{3kgF5~R0u#MY1&u}3jy+;GP+Cwt92kz%p-}boWeQy9vHx>RY^A?4oM2I45?c4 zz#d?Lm&>pimIH+l03bQx0W4)q0wB~0k7kJhV-bd+1RPc(VyGBpC<6qo#n}Ybq`t5` zO9Rke>VxQ?EXZzLIioEog;rn;f`RmC0OtZ2<Xie@`HRz&aZT0T_ceV6>+Ui~ewkK4}d?oH52aMF~*3J3Y0h;Q4&>y zv+n2U%Bjh1eBhgt3*8MQpXA7TgJsX_J70 z3*TzMdLRW;RaR?5y??G&@lM_p~w)jB-b4g_9$N;*l#a9r4uH7ZgL($OZ6$ z9B2s7>pwWO&lPDeZ@LzHkbWo=0E~lB5D64KIVe+TWMCl=1yGPYTY`h~p#Xdi3NQ+Q z3O@(J;QPHTWon{v5|Fixh5&M)wM*^2CRW3Cky_P45HKk~Yu85wJcdm57=QrtGLW_4 zAp_+=&V$DwNOlI%M=T?tU<|%T>I4lyz%w!?0cY@drYQ;O5$TJX%pC*myWVWLd@zsr z$YjBMQ48Hd29aS7X)mjddEf!do`%`&3rc+ua4seC0=@vvfo2MiESoV7_*qJpF)Ao1 z145q>P)dDJ52UB4&A{>;@WC2DL@(HpQ{mB2KuCBw5^zugD!qV!5(vqP1R)5RM<}UX zd>!C{3a}bGp43#$jwk&<0G`K#Ot(De)uPot4k4-OdG>pbGtLT(_}TP%457^anTnjK zEerw*1k$5m6pVmT!jBUPwG37QoT8}_pWb`%-cQ~&VmNoYJ?|wP-JGPkpy2bINr|p1 zqrrIq?l}z}<{<-1MPd+Z7%H9g6!kTHMM6yiO@t;wQ)($JwP1z{2WquVOq#$MDmnLM zn3L9}X`(;^@FI+d)WJDXC#j5u=!&{tsV{czYQ1UC?sG#Ayzf2GLvS8ge(m>TKc&Q8 zgb_KO(9{Qd?9pH({eUP8@0D8Yx3eb$*=YSHmGtEQ2ZGBe`n9p?4R89Lf|KL^+H+v< z7qULBNZz+ZYFC~CbO*fi$=@tc_l!Z`MfN5t$nm$p-ZKtlpmybPIQi@@7$_U?{R0+s zf3y#dJNxldL*H|ol=XZDj-;rK2^oMZX_}hky6GEf-yMcAUQE$##NcmCnSehCmJ@7>tV4 zB_I`Gfvzg(TEUVC&ZTgaDQ&Wtu z5-~^0L79+Nb-hl^n`wODqD5nW@bts0SB=#v1p9|;oO;4e*#Fn)z%&JF2rpR9F{lA) zg40gJ<6ph_OOI{;(3wFPb}&&*((WX#ctYmt2YZD^N_?aYh655*fKum-CE8L2l7iZd zC0S!$^*;Hmb#OI&Jp*B`#(YwSao-E`!k65qerUMsP~}(a>pRDe!YB5u{n}Sq(bwMvQclu zZd_x6c0h<6G9Q8e0rt6{rDoD1`YFQ+UGO_fF{g zasT_j59{*2pxQcRwaw(bn;NiqVeZF2UG|B+*DbmH)Kf-Q3%Ns{cT}(rxRR=N=yIov zD7{nx+v zn}@dDHDml3Z~|xq0*nr94|T#$*!$NB?Enwy12iW|oOMSIgs$_oB%0XN=T@82#f!xg zk6-@n@2tOL)0DH%c7@!VFt0W>CPI{9yE$<_^O*CY0;pV#l4Anc044_$)IQ3GlFWHN z4LKMwPEgTM%;$qxuy=+Ji&x$_<>~LW{p8t=YgU~>p(KTl4RhcWy(ndsI-H0{PuTn2 z2?zelT@QxW^TJG_h`=~ob+#gD3UuaqMdC0=`OGo?){oBq$uk>%^uyMDpI$qCTEpnk zCJYZd`&X5|Yjh`}+V}auUH};hP!UAFuLvz!)2`Elum^MD;nPNuX;TNa+)aSJ|~zk9yeUq^v!Qv@{3>G^87EiJ@Le*?JZX>zhTC#S)<2{X&gEv$c0o2 z75Fv?(=e=_bTTGPY@9T?xa{ijw{MvFv5znN?$cX-{lb>#e|^I@pFDrvy5ff?z+>jPf|J{XJjpEaAjv8b}=q6ASiWnX>MmANlHf`N>D{dAa*t~DJ&pybzy92 zba@~>AUHA#M1fX(0000bbVXQnWMOn=I%9HWVRU5xGB7bYEig4LGB;E)GCDLkIyE#a zFfuwYFpH*rumAu6C3HntbYx+4WjbwdWNBu305UK!IV~_XEiyM$F)}(dH###oD=;!T zFfa-~{c->R01G1GI%m9F?ca7F?caa`lhr10000 i(3), ck => cki ); - core : coeur + corona : corona PORT MAP ( a_from_pads => a_from_pads, b_from_pads => b_from_pads, diff --git a/documentation/examples/AM2901/amd2901_chip.py b/documentation/examples/AM2901/amd2901_chip.py deleted file mode 100644 index ba638662..00000000 --- a/documentation/examples/AM2901/amd2901_chip.py +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env python - - -chip = { 'pads.south' : [ 'p_a3' , 'p_a2', 'p_a1', 'p_r0', 'p_vddick0', 'p_vssick0', 'p_a0' , 'p_i6', 'p_i8' , 'p_i7' , 'p_r3' ] - , 'pads.east' : [ 'p_zero', 'p_i0', 'p_i1', 'p_i2', 'p_vddeck0', 'p_vsseck0', 'p_q3' , 'p_b0', 'p_b1' , 'p_b2' , 'p_b3' ] - , 'pads.north' : [ 'p_noe' , 'p_y3', 'p_y2', 'p_y1', 'p_y0' , 'p_vddeck1', 'p_vsseck1', 'p_np', 'p_ovr', 'p_cout', 'p_ng' ] - #, 'pads.west' : [ 'p_i5', 'p_i3', 'p_ck' , 'p_d0' , 'p_d1' , 'p_d2', 'p_d3' , 'p_q0' , 'p_f3' ] - , 'pads.west' : [ 'p_cin' , 'p_i4', 'p_i5', 'p_i3', 'p_ck' , 'p_d0' , 'p_d1' , 'p_d2', 'p_d3' , 'p_q0' , 'p_f3' ] - , 'core.size' : ( 1500, 1500 ) - , 'chip.size' : ( 3000, 3000 ) - , 'chip.clockTree' : True - } diff --git a/documentation/examples/AM2901/amd2901_ioring.py b/documentation/examples/AM2901/amd2901_ioring.py new file mode 100644 index 00000000..0ff19ab1 --- /dev/null +++ b/documentation/examples/AM2901/amd2901_ioring.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python + +from helpers import l, u, n + + +chip = { 'pads.ioPadGauge' : 'pxlib' + , 'pads.south' : [ 'p_a3' , 'p_a2', 'p_a1', 'p_r0', 'p_vddick0', 'p_vssick0', 'p_a0' , 'p_i6', 'p_i8' , 'p_i7' , 'p_r3' ] + , 'pads.east' : [ 'p_zero', 'p_i0', 'p_i1', 'p_i2', 'p_vddeck0', 'p_vsseck0', 'p_q3' , 'p_b0', 'p_b1' , 'p_b2' , 'p_b3' ] + , 'pads.north' : [ 'p_noe' , 'p_y3', 'p_y2', 'p_y1', 'p_y0' , 'p_vddeck1', 'p_vsseck1', 'p_np', 'p_ovr', 'p_cout', 'p_ng' ] + #, 'pads.west' : [ 'p_i5', 'p_i3', 'p_ck' , 'p_d0' , 'p_d1' , 'p_d2', 'p_d3' , 'p_q0' , 'p_f3' ] + , 'pads.west' : [ 'p_cin' , 'p_i4', 'p_i5', 'p_i3', 'p_ck' , 'p_d0' , 'p_d1' , 'p_d2', 'p_d3' , 'p_q0' , 'p_f3' ] + , 'core.size' : ( l(1500), l(1500) ) + , 'chip.size' : ( l(3000), l(3000) ) + , 'chip.clockTree' : True + } diff --git a/documentation/examples/AM2901/corona.vst b/documentation/examples/AM2901/corona.vst new file mode 100644 index 00000000..5583bdb1 --- /dev/null +++ b/documentation/examples/AM2901/corona.vst @@ -0,0 +1,102 @@ +-- +-- Generated by VASY +-- +ENTITY corona IS +PORT( + a_from_pads : IN BIT_VECTOR(3 DOWNTO 0); + b_from_pads : IN BIT_VECTOR(3 DOWNTO 0); + cin_from_pads : IN BIT; + ck : IN BIT; + cout_to_pads : OUT BIT; + d_from_pads : IN BIT_VECTOR(3 DOWNTO 0); + i_from_pads : IN BIT_VECTOR(8 DOWNTO 0); + ng_to_pads : OUT BIT; + noe_from_pads : IN BIT; + np_to_pads : OUT BIT; + ovr_to_pads : OUT BIT; + q0_from_pads : IN BIT; + q0_to_pads : OUT BIT; + q3_from_pads : IN BIT; + q3_to_pads : OUT BIT; + r0_from_pads : IN BIT; + r0_to_pads : OUT BIT; + r3_from_pads : IN BIT; + r3_to_pads : OUT BIT; + shift_l : OUT BIT; + shift_r : OUT BIT; + f3_to_pads : OUT BIT; + vdd : IN BIT; + vss : IN BIT; + y_oe : OUT BIT; + y_to_pads : OUT BIT_VECTOR(3 DOWNTO 0); + zero_to_pads : OUT BIT +); +END corona; + +ARCHITECTURE VST OF corona IS + + COMPONENT coeur + PORT( + a_from_pads : IN BIT_VECTOR(3 DOWNTO 0); + b_from_pads : IN BIT_VECTOR(3 DOWNTO 0); + cin_from_pads : IN BIT; + ck : IN BIT; + cout_to_pads : OUT BIT; + d_from_pads : IN BIT_VECTOR(3 DOWNTO 0); + i_from_pads : IN BIT_VECTOR(8 DOWNTO 0); + ng_to_pads : OUT BIT; + noe_from_pads : IN BIT; + np_to_pads : OUT BIT; + ovr_to_pads : OUT BIT; + q0_from_pads : IN BIT; + q0_to_pads : OUT BIT; + q3_from_pads : IN BIT; + q3_to_pads : OUT BIT; + r0_from_pads : IN BIT; + r0_to_pads : OUT BIT; + r3_from_pads : IN BIT; + r3_to_pads : OUT BIT; + shift_l : OUT BIT; + shift_r : OUT BIT; + f3_to_pads : OUT BIT; + vdd : IN BIT; + vss : IN BIT; + y_oe : OUT BIT; + y_to_pads : OUT BIT_VECTOR(3 DOWNTO 0); + zero_to_pads : OUT BIT + ); + END COMPONENT; + +BEGIN + + core : coeur + PORT MAP ( a_from_pads => a_from_pads + , b_from_pads => b_from_pads + , cin_from_pads => cin_from_pads + , ck => ck + , cout_to_pads => cout_to_pads + , d_from_pads => d_from_pads + , i_from_pads => i_from_pads + , ng_to_pads => ng_to_pads + , noe_from_pads => noe_from_pads + , np_to_pads => np_to_pads + , ovr_to_pads => ovr_to_pads + , q0_from_pads => q0_from_pads + , q0_to_pads => q0_to_pads + , q3_from_pads => q3_from_pads + , q3_to_pads => q3_to_pads + , r0_from_pads => r0_from_pads + , r0_to_pads => r0_to_pads + , r3_from_pads => r3_from_pads + , r3_to_pads => r3_to_pads + , shift_l => shift_l + , shift_r => shift_r + , f3_to_pads => f3_to_pads + , vdd => vdd + , vss => vss + , y_oe => y_oe + , y_to_pads => y_to_pads + , zero_to_pads => zero_to_pads + ); + +END VST; diff --git a/documentation/examples/AM2901/doChip.py b/documentation/examples/AM2901/doChip.py index b5b981c8..96ef5d35 100755 --- a/documentation/examples/AM2901/doChip.py +++ b/documentation/examples/AM2901/doChip.py @@ -7,24 +7,21 @@ try: import optparse import Cfg import Hurricane - from Hurricane import DbU - from Hurricane import UpdateSession - from Hurricane import Breakpoint - from Hurricane import Transformation - from Hurricane import Instance + from Hurricane import DbU + from Hurricane import UpdateSession + from Hurricane import Breakpoint + from Hurricane import Transformation + from Hurricane import Instance import Viewer import CRL - from helpers import ErrorMessage - #import Nimbus - #import Metis - #import Mauka + import helpers import Etesian - import Katabatic - import Kite + import Anabatic + import Katana import Unicorn import clocktree.ClockTree import plugins.ClockTreePlugin - import plugins.ChipPlugin + import plugins.ChipPlace import plugins.RSavePlugin except ImportError, e: serror = str(e) @@ -66,7 +63,7 @@ def ScriptMain ( **kw ): if doStages & DoPlacement: if doStages & DoChip: - success = plugins.ChipPlugin.ScriptMain( **kw ) + success = plugins.ChipPlace.ScriptMain( **kw ) if not success: return False else: if cell.getAbutmentBox().isEmpty(): @@ -80,34 +77,28 @@ def ScriptMain ( **kw ): success = plugins.ClockTreePlugin.ScriptMain( **kw ) #if not success: return False else: - if Cfg.getParamString('clockTree.placerEngine').asString() != 'Etesian': - mauka = Mauka.MaukaEngine.create( cell ) - mauka.run() - mauka.destroy() - else: - etesian = Etesian.EtesianEngine.create( cell ) - etesian.place() - etesian.destroy() + etesian = Etesian.EtesianEngine.create( cell ) + etesian.place() + etesian.destroy() if editor: editor.refresh() if doStages & DoRouting: - routingNets = [] - kite = Kite.KiteEngine.create( cell ) - - kite.runGlobalRouter ( Kite.KtBuildGlobalRouting ) - kite.loadGlobalRouting( Katabatic.EngineLoadGrByNet, routingNets ) - kite.layerAssign ( Katabatic.EngineNoNetLayerAssign ) - kite.runNegociate () - success = kite.getToolSuccess() - kite.finalizeLayout() - kite.destroy() - cell.setName( cell.getName()+'_kite' ) + katana = Katana.KatanaEngine.create( cell.getInstance('corona').getMasterCell() ) + katana.digitalInit () + katana.runGlobalRouter () + katana.loadGlobalRouting( Anabatic.EngineLoadGrByNet ) + katana.layerAssign ( Anabatic.EngineNoNetLayerAssign ) + katana.runNegociate ( Katana.Flags.NoFlags ) + success = katana.getToolSuccess() + katana.finalizeLayout() + katana.destroy() + cell.setName( cell.getName()+'_r' ) framework.saveCell( cell, CRL.Catalog.State.Logical ) plugins.RSavePlugin.ScriptMain( **kw ) except Exception, e: - print e + print helpers.io.catch( e ) return success diff --git a/hurricane/doc/analog/html/graph_legend.html b/hurricane/doc/analog/html/graph_legend.html index e3707dc1..52cd60c5 100644 --- a/hurricane/doc/analog/html/graph_legend.html +++ b/hurricane/doc/analog/html/graph_legend.html @@ -74,7 +74,7 @@ A yellow dashed arrow denotes a relation between a template instance and the tem


          Katabatic Parameters
          Anabatic Parameters
          katabatic.topRoutingLayer
          anabatic.topRoutingLayer TypeString METAL5
          Define the highest metal layer that will be used for routing (inclusive).
          katabatic.globalLengthThreshold
          anabatic.globalLengthThreshold TypeInt 1450
          katabatic.saturateRatio
          anabatic.saturateRatio TypePercentage 80
          katabatic.saturateRp
          anabatic.saturateRp TypeInt 8
          Knik Parameters
          Katana Parameters
          kite.hTracksReservedLocal
          katana.hTracksReservedLocal TypeInt 3
          kite.vTracksReservedLocal
          katana.vTracksReservedLocal TypeInt 3
          cf. kite.hTracksReservedLocal
          Kite Parameters
          kite.eventsLimit
          katana.eventsLimit TypeInt 4000002
          The maximum number of segment displacements, +
          The maximum number of segment displacements, this is a last ditch safety against infinite loop. It’s perhaps a little too low for big designs
          kite.ripupCost
          katana.ripupCost TypeInt 3
          Differential introduced between two ripup +
          Differential introduced between two ripup cost to avoid a loop between two ripped up segments
          kite.strapRipupLimit
          katana.strapRipupLimit TypeInt 16
          Maximum number of ripup for strap segments
          Maximum number of ripup for strap segments
          kite.localRipupLimit
          katana.localRipupLimit TypeInt 9
          Maximum number of ripup for local segments
          Maximum number of ripup for local segments
          kite.globalRipupLimit
          katana.globalRipupLimit TypeInt 5
          Maximum number of ripup for global segments, +
          Maximum number of ripup for global segments, when this limit is reached, triggers topologic modification
          kite.longGlobalRipupLimit
          katana.longGlobalRipupLimit TypeInt 5
          Maximum number of ripup for long global +
          Maximum number of ripup for long global segments, when this limit is reached, triggers topological modification
          The name of the design to load, without leading path or extention.
          -g|–load-globalReload a global routing solution from disk. -The file containing the solution must be named -<cell>.kgr.
          -m <val>|–margin=<val>Percentage val of white space for the placer +(Etesian).
          –save-globalSave the global routing solution, into a file -named <design>.kgr.
          -e <ratio>|–edge=<ratio>Change the edge capacity for the global -router, between 0 and 1 (Knik).
          -G|–global-routeRun the global router (Knik).
          -R|–detailed-routeRun the detailed router (Kite).
          -s|–save-design=<routed>The design into which the routed layout will -be saved. It is strongly recommanded to choose -a different name from the source (unrouted) -design.
          –events-limit=<count>
          –events-limit=<count> The maximal number of events after which the router will stops. This is mainly a failsafe against looping. The limit is sets to 4 @@ -1147,6 +1123,18 @@ millions of iteration which should suffice to any design of 100K. gates. For bigger designs you may wants to increase this limit.
          -G|–global-routeRun the global router (Katana).
          -R|–detailed-routeRun the detailed router (Katana).
          -s|–save-design=<routed>The design into which the routed layout will +be saved. It is strongly recommanded to choose +a different name from the source (unrouted) +design.
          –stratus-script=<module> Run the Python/Stratus script module. See Python Scripts in Cgt.
          Generated by Sphinx - using a RTD theme on Mar 04, 2019. + using a RTD theme on May 27, 2019.
          Generated by Sphinx - using a RTD theme on Mar 04, 2019. + using a RTD theme on May 27, 2019.
          Generated by Sphinx - using a RTD theme on Mar 04, 2019. + using a RTD theme on May 27, 2019.
          Generated by Sphinx - using a RTD theme on Mar 04, 2019. + using a RTD theme on May 27, 2019.
          Generated by Sphinx - using a RTD theme on Mar 04, 2019. + using a RTD theme on May 27, 2019.
          Generated by Sphinx - using a RTD theme on Mar 04, 2019. + using a RTD theme on May 27, 2019.
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/analog/html/index.html b/hurricane/doc/analog/html/index.html index 1f273d75..7248bd16 100644 --- a/hurricane/doc/analog/html/index.html +++ b/hurricane/doc/analog/html/index.html @@ -92,7 +92,7 @@ Open questions
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/analog/latex/refman.tex b/hurricane/doc/analog/latex/refman.tex index 55e5eb0b..868679b6 100644 --- a/hurricane/doc/analog/latex/refman.tex +++ b/hurricane/doc/analog/latex/refman.tex @@ -34,7 +34,7 @@ \vspace*{1cm} {\large Generated by Doxygen 1.8.14}\\ \vspace*{0.5cm} - {\small Fri Oct 19 2018 09:33:20}\\ + {\small Sun May 26 2019 17:26:52}\\ \end{center} \end{titlepage} diff --git a/hurricane/doc/hurricane/html/BasicLayer_8h_source.html b/hurricane/doc/hurricane/html/BasicLayer_8h_source.html index 7098482b..b0dc686c 100644 --- a/hurricane/doc/hurricane/html/BasicLayer_8h_source.html +++ b/hurricane/doc/hurricane/html/BasicLayer_8h_source.html @@ -44,7 +44,7 @@ $(function() {
          BasicLayer.h
          -
          1 
          2 // -*- C++ -*-
          3 //
          4 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
          5 //
          6 // This file is part of Hurricane.
          7 //
          8 // Hurricane is free software: you can redistribute it and/or modify
          9 // it under the terms of the GNU Lesser General Public License as
          10 // published by the Free Software Foundation, either version 3 of the
          11 // License, or (at your option) any later version.
          12 //
          13 // Hurricane is distributed in the hope that it will be useful, but
          14 // WITHOUT ANY WARRANTY; without even the implied warranty of MERCHAN-
          15 // TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU
          16 // General Public License for more details.
          17 //
          18 // You should have received a copy of the Lesser GNU General Public
          19 // License along with Hurricane. If not, see
          20 // <http://www.gnu.org/licenses/>.
          21 //
          22 // +-----------------------------------------------------------------+
          23 // | H U R R I C A N E |
          24 // | V L S I B a c k e n d D a t a - B a s e |
          25 // | |
          26 // | Author : Remy Escassut |
          27 // | E-mail : Jean-Paul.Chaput@lip6.fr |
          28 // | =============================================================== |
          29 // | C++ Header : "./hurricane/BasicLayer.h" |
          30 // +-----------------------------------------------------------------+
          31 
          32 
          33 # ifndef HURRICANE_BASIC_LAYER_H
          34 # define HURRICANE_BASIC_LAYER_H
          35 
          36 # include "hurricane/Layer.h"
          37 # include "hurricane/BasicLayers.h"
          38 # include "hurricane/Box.h"
          39 
          40 
          41 namespace Hurricane {
          42 
          43 
          44  class BasicLayer : public Layer {
          45  public:
          46  typedef Layer Super;
          47 
          48  public:
          49  // Subclass: Material.
          50  class Material {
          51  // Enum: Code.
          52  public:
          53  enum Code { nWell =0
          58  , poly
          59  , cut
          63  };
          64  // Constructors.
          65  Material ( const Code& code = other );
          66  Material ( const Material& material );
          67  // Methods.
          68  Material& operator= ( const Material& material );
          69  inline operator const Code& () const;
          70  inline const Code& getCode () const;
          71  static Material fromString ( const string& );
          72  inline string _getTypeName () const;
          73  string _getString () const;
          74  Record* _getRecord () const;
          75 
          76  // Internal: Attributes.
          77  private:
          78  Code _code;
          79  };
          80 
          81  public:
          82  // Constructor.
          83  static BasicLayer* create ( Technology* technology
          84  , const Name& name
          85  , const Material& material
          86  , unsigned gds2Layer
          87  , unsigned gds2Datatype
          88  , const DbU::Unit& minimalSize = 0
          89  , const DbU::Unit& minimalSpacing = 0
          90  );
          91  // Accessors.
          92  inline const Material& getMaterial () const;
          93  inline unsigned getGds2Layer () const;
          94  inline unsigned getGds2Datatype () const;
          95  virtual BasicLayers getBasicLayers () const;
          96  virtual BasicLayer* getBlockageLayer () const;
          97  inline const Name& getRealName () const;
          98  // Updators
          99  inline void setBlockageLayer ( BasicLayer* layer);
          100  inline void setGds2Layer ( unsigned int );
          101  inline void setGds2Datatype ( unsigned int );
          102  inline void setRealName ( const char* realName);
          103  // Hurricane Managment.
          104  virtual void _toJson ( JsonWriter* writer ) const;
          105  virtual BasicLayer* _getSymbolicBasicLayer ();
          106  virtual string _getTypeName () const;
          107  virtual string _getString () const;
          108  virtual Record* _getRecord () const;
          109 
          110  private:
          111  // Internal: Attributes
          112  Material _material;
          113  unsigned _gds2Layer;
          114  unsigned _gds2Datatype;
          115  BasicLayer* _blockageLayer;
          116  Name _realName;
          117 
          118  protected:
          119  // Internal: Constructors & Destructors.
          120  BasicLayer ( Technology* technology
          121  , const Name& name
          122  , const Material& material
          123  , unsigned gds2Layer
          124  , unsigned gds2Datatype
          125  , const DbU::Unit& minimalSize = 0
          126  , const DbU::Unit& minimalSpacing = 0
          127  );
          128  virtual void _postCreate ();
          129  virtual void _preDestroy ();
          130  };
          131 
          132 
          133 // Inline Functions.
          134  inline BasicLayer::Material::operator const Code& () const { return _code; }
          135  inline const BasicLayer::Material::Code&
          136  BasicLayer::Material::getCode () const { return _code; }
          137  inline string BasicLayer::Material::_getTypeName () const { return _TName("BasicLayer::Material"); }
          138  inline const BasicLayer::Material&
          139  BasicLayer::getMaterial () const { return _material; }
          140  inline unsigned BasicLayer::getGds2Layer () const { return _gds2Layer; }
          141  inline unsigned BasicLayer::getGds2Datatype () const { return _gds2Datatype; }
          142  inline const Name& BasicLayer::getRealName () const { return _realName; }
          143  inline void BasicLayer::setBlockageLayer ( BasicLayer* layer) { _blockageLayer = layer; }
          144  inline void BasicLayer::setGds2Layer ( unsigned int number ) { _gds2Layer=number; }
          145  inline void BasicLayer::setGds2Datatype ( unsigned int number ) { _gds2Datatype=number; }
          146  inline void BasicLayer::setRealName ( const char* realName) { _realName = realName; }
          147 
          148 
          149 // -------------------------------------------------------------------
          150 // Class : "Hurricane::JsonBasicLayer".
          151 
          152  class JsonBasicLayer : public JsonLayer {
          153  public:
          154  static void initialize ();
          155  JsonBasicLayer ( unsigned long flags );
          156  ~JsonBasicLayer ();
          157  virtual string getTypeName () const;
          158  virtual JsonBasicLayer* clone ( unsigned long ) const;
          159  virtual void toData ( JsonStack& );
          160  };
          161 
          162 
          163 } // End of Hurricane namespace.
          164 
          165 
          166 // -------------------------------------------------------------------
          167 // Inspector Support for : BasicLayer::Material::Code.
          168 
          169 
          170 template<>
          171 inline std::string getString<const Hurricane::BasicLayer::Material::Code*>
          172  ( const Hurricane::BasicLayer::Material::Code* object )
          173 {
          174  switch ( *object ) {
          175  case Hurricane::BasicLayer::Material::nWell: return "nWell";
          176  case Hurricane::BasicLayer::Material::pWell: return "pWell";
          177  case Hurricane::BasicLayer::Material::nImplant: return "nImplant";
          178  case Hurricane::BasicLayer::Material::pImplant: return "pImplant";
          179  case Hurricane::BasicLayer::Material::active: return "active";
          180  case Hurricane::BasicLayer::Material::poly: return "poly";
          181  case Hurricane::BasicLayer::Material::cut: return "cut";
          182  case Hurricane::BasicLayer::Material::metal: return "metal";
          183  case Hurricane::BasicLayer::Material::blockage: return "blockage";
          184  case Hurricane::BasicLayer::Material::other: return "other";
          185  }
          186  return "abnormal";
          187 }
          188 
          189 
          190 template<>
          191 inline Hurricane::Record* getRecord<const Hurricane::BasicLayer::Material::Code*>
          192  ( const Hurricane::BasicLayer::Material::Code* object )
          193 {
          194  Hurricane::Record* record = new Hurricane::Record(getString(object));
          195  record->add(getSlot("Code", (unsigned int*)object));
          196  return record;
          197 }
          198 
          199 
          200 INSPECTOR_P_SUPPORT(Hurricane::BasicLayer);
          201 INSPECTOR_P_SUPPORT(Hurricane::BasicLayer::Material);
          202 IOSTREAM_POINTER_SUPPORT(Hurricane::BasicLayer::Material::Code);
          203 
          204 
          205 # endif
          +
          1 
          2 // -*- C++ -*-
          3 //
          4 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
          5 //
          6 // This file is part of Hurricane.
          7 //
          8 // Hurricane is free software: you can redistribute it and/or modify
          9 // it under the terms of the GNU Lesser General Public License as
          10 // published by the Free Software Foundation, either version 3 of the
          11 // License, or (at your option) any later version.
          12 //
          13 // Hurricane is distributed in the hope that it will be useful, but
          14 // WITHOUT ANY WARRANTY; without even the implied warranty of MERCHAN-
          15 // TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU
          16 // General Public License for more details.
          17 //
          18 // You should have received a copy of the Lesser GNU General Public
          19 // License along with Hurricane. If not, see
          20 // <http://www.gnu.org/licenses/>.
          21 //
          22 // +-----------------------------------------------------------------+
          23 // | H U R R I C A N E |
          24 // | V L S I B a c k e n d D a t a - B a s e |
          25 // | |
          26 // | Author : Remy Escassut |
          27 // | E-mail : Jean-Paul.Chaput@lip6.fr |
          28 // | =============================================================== |
          29 // | C++ Header : "./hurricane/BasicLayer.h" |
          30 // +-----------------------------------------------------------------+
          31 
          32 
          33 # ifndef HURRICANE_BASIC_LAYER_H
          34 # define HURRICANE_BASIC_LAYER_H
          35 
          36 # include "hurricane/Layer.h"
          37 # include "hurricane/BasicLayers.h"
          38 # include "hurricane/Box.h"
          39 
          40 
          41 namespace Hurricane {
          42 
          43 
          44  class BasicLayer : public Layer {
          45  public:
          46  typedef Layer Super;
          47 
          48  public:
          49  // Subclass: Material.
          50  class Material {
          51  // Enum: Code.
          52  public:
          53  enum Code { nWell =0
          58  , poly
          59  , cut
          63  };
          64  // Constructors.
          65  Material ( const Code& code = other );
          66  Material ( const Material& material );
          67  // Methods.
          68  Material& operator= ( const Material& material );
          69  inline operator const Code& () const;
          70  inline const Code& getCode () const;
          71  static Material fromString ( const string& );
          72  inline string _getTypeName () const;
          73  string _getString () const;
          74  Record* _getRecord () const;
          75 
          76  // Internal: Attributes.
          77  private:
          78  Code _code;
          79  };
          80 
          81  public:
          82  // Constructor.
          83  static BasicLayer* create ( Technology* technology
          84  , const Name& name
          85  , const Material& material
          86  , unsigned gds2Layer
          87  , unsigned gds2Datatype
          88  , const DbU::Unit& minimalSize = 0
          89  , const DbU::Unit& minimalSpacing = 0
          90  );
          91  // Accessors.
          92  inline const Material& getMaterial () const;
          93  inline unsigned getGds2Layer () const;
          94  inline unsigned getGds2Datatype () const;
          95  virtual BasicLayers getBasicLayers () const;
          96  virtual BasicLayer* getBlockageLayer () const;
          97  inline const Name& getRealName () const;
          98  // Updators
          99  inline void setBlockageLayer ( BasicLayer* layer);
          100  inline void setGds2Layer ( unsigned int );
          101  inline void setGds2Datatype ( unsigned int );
          102  inline void setRealName ( const char* realName);
          103  // Hurricane Managment.
          104  virtual void _toJson ( JsonWriter* writer ) const;
          105  virtual BasicLayer* _getSymbolicBasicLayer ();
          106  virtual string _getTypeName () const;
          107  virtual string _getString () const;
          108  virtual Record* _getRecord () const;
          109 
          110  private:
          111  // Internal: Attributes
          112  Material _material;
          113  unsigned _gds2Layer;
          114  unsigned _gds2Datatype;
          115  BasicLayer* _blockageLayer;
          116  Name _realName;
          117 
          118  protected:
          119  // Internal: Constructors & Destructors.
          120  BasicLayer ( Technology* technology
          121  , const Name& name
          122  , const Material& material
          123  , unsigned gds2Layer
          124  , unsigned gds2Datatype
          125  , const DbU::Unit& minimalSize = 0
          126  , const DbU::Unit& minimalSpacing = 0
          127  );
          128  virtual void _postCreate ();
          129  virtual void _preDestroy ();
          130  };
          131 
          132 
          133 // Inline Functions.
          134  inline BasicLayer::Material::operator const Code& () const { return _code; }
          135  inline const BasicLayer::Material::Code&
          136  BasicLayer::Material::getCode () const { return _code; }
          137  inline string BasicLayer::Material::_getTypeName () const { return _TName("BasicLayer::Material"); }
          138  inline const BasicLayer::Material&
          139  BasicLayer::getMaterial () const { return _material; }
          140  inline unsigned BasicLayer::getGds2Layer () const { return _gds2Layer; }
          141  inline unsigned BasicLayer::getGds2Datatype () const { return _gds2Datatype; }
          142  inline const Name& BasicLayer::getRealName () const { return _realName; }
          143  inline void BasicLayer::setBlockageLayer ( BasicLayer* layer) { _blockageLayer = layer; layer->setBlockage(true); }
          144  inline void BasicLayer::setGds2Layer ( unsigned int number ) { _gds2Layer=number; }
          145  inline void BasicLayer::setGds2Datatype ( unsigned int number ) { _gds2Datatype=number; }
          146  inline void BasicLayer::setRealName ( const char* realName) { _realName = realName; }
          147 
          148 
          149 // -------------------------------------------------------------------
          150 // Class : "Hurricane::JsonBasicLayer".
          151 
          152  class JsonBasicLayer : public JsonLayer {
          153  public:
          154  static void initialize ();
          155  JsonBasicLayer ( unsigned long flags );
          156  ~JsonBasicLayer ();
          157  virtual string getTypeName () const;
          158  virtual JsonBasicLayer* clone ( unsigned long ) const;
          159  virtual void toData ( JsonStack& );
          160  };
          161 
          162 
          163 } // End of Hurricane namespace.
          164 
          165 
          166 // -------------------------------------------------------------------
          167 // Inspector Support for : BasicLayer::Material::Code.
          168 
          169 
          170 template<>
          171 inline std::string getString<const Hurricane::BasicLayer::Material::Code*>
          172  ( const Hurricane::BasicLayer::Material::Code* object )
          173 {
          174  switch ( *object ) {
          175  case Hurricane::BasicLayer::Material::nWell: return "nWell";
          176  case Hurricane::BasicLayer::Material::pWell: return "pWell";
          177  case Hurricane::BasicLayer::Material::nImplant: return "nImplant";
          178  case Hurricane::BasicLayer::Material::pImplant: return "pImplant";
          179  case Hurricane::BasicLayer::Material::active: return "active";
          180  case Hurricane::BasicLayer::Material::poly: return "poly";
          181  case Hurricane::BasicLayer::Material::cut: return "cut";
          182  case Hurricane::BasicLayer::Material::metal: return "metal";
          183  case Hurricane::BasicLayer::Material::blockage: return "blockage";
          184  case Hurricane::BasicLayer::Material::other: return "other";
          185  }
          186  return "abnormal";
          187 }
          188 
          189 
          190 template<>
          191 inline Hurricane::Record* getRecord<const Hurricane::BasicLayer::Material::Code*>
          192  ( const Hurricane::BasicLayer::Material::Code* object )
          193 {
          194  Hurricane::Record* record = new Hurricane::Record(getString(object));
          195  record->add(getSlot("Code", (unsigned int*)object));
          196  return record;
          197 }
          198 
          199 
          200 INSPECTOR_P_SUPPORT(Hurricane::BasicLayer);
          201 INSPECTOR_P_SUPPORT(Hurricane::BasicLayer::Material);
          202 IOSTREAM_POINTER_SUPPORT(Hurricane::BasicLayer::Material::Code);
          203 
          204 
          205 # endif
          Definition: BasicLayer.h:59
          static BasicLayer * create(Technology *technology, const Name &name, const Material &material, unsigned gds2Layer, unsigned gds2Datatype, const DbU::Unit &minimalSize=0, const DbU::Unit &minimalSpacing=0)
          BasicLayer description (API)
          Definition: BasicLayer.h:44
          @@ -74,7 +74,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Box_8h_source.html b/hurricane/doc/hurricane/html/Box_8h_source.html index ed4799bf..72598651 100644 --- a/hurricane/doc/hurricane/html/Box_8h_source.html +++ b/hurricane/doc/hurricane/html/Box_8h_source.html @@ -80,7 +80,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Boxes_8h_source.html b/hurricane/doc/hurricane/html/Boxes_8h_source.html index c7aa0b30..df71793e 100644 --- a/hurricane/doc/hurricane/html/Boxes_8h_source.html +++ b/hurricane/doc/hurricane/html/Boxes_8h_source.html @@ -50,7 +50,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Cell_8h_source.html b/hurricane/doc/hurricane/html/Cell_8h_source.html index 40c7e59c..a219ed55 100644 --- a/hurricane/doc/hurricane/html/Cell_8h_source.html +++ b/hurricane/doc/hurricane/html/Cell_8h_source.html @@ -44,7 +44,7 @@ $(function() {
          Cell.h
          -
          1 // ****************************************************************************************************
          2 // File: ./hurricane/Cell.h
          3 // Authors: R. Escassut
          4 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
          5 //
          6 // This file is part of Hurricane.
          7 //
          8 // Hurricane is free software: you can redistribute it and/or modify it under the terms of the GNU
          9 // Lesser General Public License as published by the Free Software Foundation, either version 3 of the
          10 // License, or (at your option) any later version.
          11 //
          12 // Hurricane is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
          13 // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU
          14 // General Public License for more details.
          15 //
          16 // You should have received a copy of the Lesser GNU General Public License along with Hurricane. If
          17 // not, see <http://www.gnu.org/licenses/>.
          18 // ****************************************************************************************************
          19 
          20 #ifndef HURRICANE_CELL_H
          21 #define HURRICANE_CELL_H
          22 
          23 #include <limits>
          24 #include "hurricane/Flags.h"
          25 #include "hurricane/Observer.h"
          26 #include "hurricane/Signature.h"
          27 #include "hurricane/Relation.h"
          28 #include "hurricane/Pathes.h"
          29 #include "hurricane/Entity.h"
          30 #include "hurricane/Cells.h"
          31 #include "hurricane/DeepNet.h"
          32 #include "hurricane/Instance.h"
          33 #include "hurricane/Pin.h"
          34 #include "hurricane/Pins.h"
          35 #include "hurricane/Slices.h"
          36 #include "hurricane/ExtensionSlice.h"
          37 #include "hurricane/Rubbers.h"
          38 #include "hurricane/Markers.h"
          39 #include "hurricane/Marker.h"
          40 #include "hurricane/Reference.h"
          41 #include "hurricane/Components.h"
          42 #include "hurricane/Occurrences.h"
          43 #include "hurricane/Transformation.h"
          44 #include "hurricane/Layer.h"
          45 #include "hurricane/QuadTree.h"
          46 //#include "hurricane/IntrusiveMap.h"
          47 #include "hurricane/IntrusiveSet.h"
          48 #include "hurricane/MapCollection.h"
          49 #include "hurricane/NetAlias.h"
          50 
          51 
          52 
          53 namespace Hurricane {
          54 
          55 class Library;
          56 class BasicLayer;
          57 
          58 typedef multimap<Entity*,Entity*> SlaveEntityMap;
          59 
          60 
          61 
          62 // ****************************************************************************************************
          63 // Cell declaration
          64 // ****************************************************************************************************
          65 
          66 class Cell : public Entity {
          67 // *************************
          68 
          69 // Types
          70 // *****
          71 
          72  public: typedef Entity Inherit;
          73  public: typedef map<Name,ExtensionSlice*> ExtensionSliceMap;
          74 
          75  public: class Flags : public BaseFlags {
          76  public:
          77  enum Flag { NoFlags = (1 << 0)
          78  , BuildRings = (1 << 1)
          79  , BuildClockRings = (1 << 2)
          80  , BuildSupplyRings = (1 << 3)
          81  , NoClockFlatten = (1 << 4)
          82  , WarnOnUnplacedInstances = (1 << 5)
          83  , StayOnPlugs = (1 << 6)
          84  , MaskRings = BuildRings|BuildClockRings|BuildSupplyRings
          85  // Flags set for Observers.
          86  , CellAboutToChange = (1 << 10)
          87  , CellChanged = (1 << 11)
          88  , CellDestroyed = (1 << 12)
          89  // Cell states
          90  , Terminal = (1 << 20)
          91  , FlattenLeaf = (1 << 21)
          92  , Pad = (1 << 22)
          93  , Feed = (1 << 23)
          94  , FlattenedNets = (1 << 24)
          95  , Placed = (1 << 25)
          96  , Routed = (1 << 26)
          97  , MergedQuadTree = (1 << 27)
          98  , SlavedAb = (1 << 28)
          99  , Materialized = (1 << 29)
          100  };
          101 
          102  public:
          103  Flags ( uint64_t flags = NoFlags );
          104  virtual ~Flags ();
          105  virtual std::string _getTypeName () const;
          106  virtual std::string _getString () const;
          107  };
          108 
          109  class UniquifyRelation : public Relation {
          110  public:
          111  static UniquifyRelation* create ( Cell* );
          112  static UniquifyRelation* get ( const Cell* );
          113  virtual Name getName () const;
          114  static Name staticGetName ();
          115  Name getUniqueName ();
          116  static std::string getTrunkName ( Name name );
          117  virtual bool hasJson () const;
          118  virtual void toJson ( JsonWriter*, const DBo* ) const;
          119  inline void _setOwner ( Cell* );
          120  inline void _setDuplicates ( unsigned int );
          121  virtual string _getTypeName () const;
          122  virtual Record* _getRecord () const;
          123  private:
          124  static const Name _name;
          125  unsigned int _duplicates;
          126  private:
          127  UniquifyRelation ( Cell* );
          128  protected:
          129  virtual void _preDestroy ();
          130 
          131  public:
          132  class JsonProperty : public JsonObject {
          133  public:
          134  static void initialize ();
          135  JsonProperty ( unsigned long flags );
          136  virtual string getTypeName () const;
          137  virtual JsonProperty* clone ( unsigned long ) const;
          138  virtual void toData ( JsonStack& );
          139  };
          140  public:
          141  class JsonPropertyRef : public JsonObject {
          142  public:
          143  static void initialize ();
          144  JsonPropertyRef ( unsigned long flags );
          145  virtual string getTypeName () const;
          146  virtual JsonPropertyRef* clone ( unsigned long ) const;
          147  virtual void toData ( JsonStack& );
          148  };
          149  };
          150 
          151  class ClonedSet : public Collection<Cell*> {
          152  public:
          153  // Sub-Class: Locator.
          154  class Locator : public Hurricane::Locator<Cell*> {
          155  public:
          156  Locator ( const Cell* );
          157  inline Locator ( const Locator& );
          158  virtual Cell* getElement () const;
          159  virtual Hurricane::Locator<Cell*>* getClone () const;
          160  virtual bool isValid () const;
          161  virtual void progress ();
          162  virtual string _getString () const;
          163  protected:
          164  Hurricane::Locator<DBo*>* _dboLocator;
          165  };
          166 
          167  public:
          168  inline ClonedSet ( const Cell* cell );
          169  inline ClonedSet ( const ClonedSet& );
          170  virtual Hurricane::Collection<Cell*>* getClone () const;
          171  virtual Hurricane::Locator<Cell*>* getLocator () const;
          172  virtual string _getString () const;
          173  protected:
          174  const Cell* _cell;
          175  };
          176 
          177  class SlavedsRelation : public Relation {
          178  public:
          179  static SlavedsRelation* create ( Cell* );
          180  static SlavedsRelation* get ( const Cell* );
          181  virtual Name getName () const;
          182  static Name staticGetName ();
          183  virtual bool hasJson () const;
          184  virtual void toJson ( JsonWriter*, const DBo* ) const;
          185  inline void _setOwner ( Cell* );
          186  virtual string _getTypeName () const;
          187  virtual Record* _getRecord () const;
          188  private:
          189  static const Name _name;
          190  private:
          191  SlavedsRelation ( Cell* );
          192  protected:
          193  virtual void _preDestroy ();
          194 
          195  public:
          196  class JsonProperty : public JsonObject {
          197  public:
          198  static void initialize ();
          199  JsonProperty ( unsigned long flags );
          200  virtual string getTypeName () const;
          201  virtual JsonProperty* clone ( unsigned long ) const;
          202  virtual void toData ( JsonStack& );
          203  };
          204  public:
          205  class JsonPropertyRef : public JsonObject {
          206  public:
          207  static void initialize ();
          208  JsonPropertyRef ( unsigned long flags );
          209  virtual string getTypeName () const;
          210  virtual JsonPropertyRef* clone ( unsigned long ) const;
          211  virtual void toData ( JsonStack& );
          212  };
          213  };
          214 
          215  class SlavedsSet : public Collection<Cell*> {
          216  public:
          217  // Sub-Class: Locator.
          218  class Locator : public Hurricane::Locator<Cell*> {
          219  public:
          220  Locator ( const Cell* );
          221  inline Locator ( const Locator& );
          222  virtual Cell* getElement () const;
          223  virtual Hurricane::Locator<Cell*>* getClone () const;
          224  virtual bool isValid () const;
          225  virtual void progress ();
          226  virtual string _getString () const;
          227  protected:
          228  Hurricane::Locator<DBo*>* _dboLocator;
          229  };
          230 
          231  public:
          232  inline SlavedsSet ( const Cell* cell );
          233  inline SlavedsSet ( const SlavedsSet& );
          234  virtual Hurricane::Collection<Cell*>* getClone () const;
          235  virtual Hurricane::Locator<Cell*>* getLocator () const;
          236  virtual string _getString () const;
          237  protected:
          238  const Cell* _cell;
          239  };
          240 
          241  class InstanceMap : public IntrusiveMap<Name, Instance> {
          242  // ****************************************************
          243 
          244  public: typedef IntrusiveMap<Name, Instance> Inherit;
          245 
          246  public: InstanceMap();
          247 
          248  public: virtual Name _getKey(Instance* instance) const;
          249  public: virtual unsigned _getHashValue(Name name) const;
          250  public: virtual Instance* _getNextElement(Instance* instance) const;
          251  public: virtual void _setNextElement(Instance* instance, Instance* nextInstance) const;
          252 
          253  };
          254 
          255  public: class SlaveInstanceSet : public IntrusiveSet<Instance> {
          256  // ***********************************************************
          257 
          258  public: typedef IntrusiveSet<Instance> Inherit;
          259 
          260  public: SlaveInstanceSet();
          261 
          262  public: virtual unsigned _getHashValue(Instance* slaveInstance) const;
          263  public: virtual Instance* _getNextElement(Instance* slaveInstance) const;
          264  public: virtual void _setNextElement(Instance* slaveInstance, Instance* nextSlaveInstance) const;
          265 
          266  };
          267 
          268  public: class NetMap : public IntrusiveMap<Name, Net> {
          269  // **************************************************
          270 
          271  public: typedef IntrusiveMap<Name, Net> Inherit;
          272 
          273  public: NetMap();
          274 
          275  public: virtual Name _getKey(Net* net) const;
          276  public: virtual unsigned _getHashValue(Name name) const;
          277  public: virtual Net* _getNextElement(Net* net) const;
          278  public: virtual void _setNextElement(Net* net, Net* nextNet) const;
          279 
          280  };
          281 
          282  class PinMap : public IntrusiveMap<Name, Pin> {
          283  // *******************************************
          284 
          285  public: typedef IntrusiveMap<Name, Pin> Inherit;
          286 
          287  public: PinMap();
          288 
          289  public: virtual Name _getKey(Pin* pin) const;
          290  public: virtual unsigned _getHashValue(Name name) const;
          291  public: virtual Pin* _getNextElement(Pin* pin) const;
          292  public: virtual void _setNextElement(Pin* pin, Pin* nextPin) const;
          293 
          294  };
          295 
          296  public: class SliceMap : public IntrusiveMap<const Layer*, Slice> {
          297  // **************************************************************
          298 
          299  public: typedef IntrusiveMap<const Layer*, Slice> Inherit;
          300 
          301  public: SliceMap();
          302 
          303  public: virtual const Layer* _getKey(Slice* slice) const;
          304  public: virtual unsigned _getHashValue(const Layer* layer) const;
          305  public: virtual Slice* _getNextElement(Slice* slice) const;
          306  public: virtual void _setNextElement(Slice* slice, Slice* nextSlice) const;
          307 
          308  };
          309 
          310  public: class MarkerSet : public IntrusiveSet<Marker> {
          311  // **************************************************
          312 
          313  public: typedef IntrusiveSet<Marker> Inherit;
          314 
          315  public: MarkerSet();
          316 
          317  public: virtual unsigned _getHashValue(Marker* marker) const;
          318  public: virtual Marker* _getNextElement(Marker* marker) const;
          319  public: virtual void _setNextElement(Marker* marker, Marker* nextMarker) const;
          320 
          321  };
          322 
          323 // Attributes
          324 // **********
          325 
          326  private: Library* _library;
          327  private: Name _name;
          328  private: Path _shuntedPath;
          329  private: InstanceMap _instanceMap;
          330  private: QuadTree* _quadTree;
          331  private: SlaveInstanceSet _slaveInstanceSet;
          332  private: NetMap _netMap;
          333  private: PinMap _pinMap;
          334  private: SliceMap* _sliceMap;
          335  private: ExtensionSliceMap _extensionSlices;
          336  private: MarkerSet _markerSet;
          337  private: Box _abutmentBox;
          338  private: Box _boundingBox;
          339  private: Cell* _nextOfLibraryCellMap;
          340  private: Cell* _nextOfSymbolCellSet;
          341  private: SlaveEntityMap _slaveEntityMap;
          342  private: AliasNameSet _netAliasSet;
          343  private: Observable _observers;
          344  private: Flags _flags;
          345 
          346 // Constructors
          347 // ************
          348 
          349  protected: Cell(Library* library, const Name& name);
          350 
          351 // Others
          352 // ******
          353 
          354  protected: virtual void _postCreate();
          355 
          356  protected: virtual void _preDestroy();
          357 
          358  public: virtual string _getTypeName() const {return _TName("Cell");};
          359  public: virtual string _getString() const;
          360  public: virtual Record* _getRecord() const;
          361  public: static string getFlagString( uint64_t );
          362  public: static Record* getFlagRecord( uint64_t );
          363  public: static Slot* getFlagSlot( uint64_t );
          364 
          365  public: InstanceMap& _getInstanceMap() {return _instanceMap;};
          366  public: QuadTree* _getQuadTree() {return _quadTree;};
          367  public: SlaveInstanceSet& _getSlaveInstanceSet() {return _slaveInstanceSet;};
          368  public: NetMap& _getNetMap() {return _netMap;};
          369  public: PinMap& _getPinMap() {return _pinMap;};
          370  public: SliceMap* _getSliceMap() {return _sliceMap;};
          371  public: ExtensionSliceMap& _getExtensionSliceMap() {return _extensionSlices;};
          372  public: MarkerSet& _getMarkerSet() {return _markerSet;};
          373  public: Cell* _getNextOfLibraryCellMap() const {return _nextOfLibraryCellMap;};
          374  public: Cell* _getNextOfSymbolCellSet() const {return _nextOfSymbolCellSet;};
          375  public: AliasNameSet& _getNetAliasSet() { return _netAliasSet; }
          376 
          377  public: void _setNextOfLibraryCellMap(Cell* cell) {_nextOfLibraryCellMap = cell;};
          378  public: void _setNextOfSymbolCellSet(Cell* cell) {_nextOfSymbolCellSet = cell;};
          379 
          380  public: void _addNetAlias(NetAliasName* alias) { _netAliasSet.insert(alias); }
          381  public: void _removeNetAlias(NetAliasName* alias) { _netAliasSet.erase(alias); }
          382 
          383  public: void _fit(const Box& box);
          384  public: void _unfit(const Box& box);
          385 
          386  public: void _addSlaveEntity(Entity* entity, Entity* slaveEntity);
          387  public: void _removeSlaveEntity(Entity* entity, Entity* slaveEntity);
          388  public: void _getSlaveEntities(SlaveEntityMap::iterator& begin, SlaveEntityMap::iterator& end);
          389  public: void _getSlaveEntities(Entity* entity, SlaveEntityMap::iterator& begin, SlaveEntityMap::iterator& end);
          390  public: void _insertSlice(ExtensionSlice*);
          391  public: void _removeSlice(ExtensionSlice*);
          392  public: void _slaveAbutmentBox(Cell*);
          393  public: void _changeQuadTree(Cell*);
          394  public: void _setShuntedPath(Path path) { _shuntedPath=path; }
          395  protected: void _setAbutmentBox(const Box& abutmentBox);
          396 
          397  public: virtual void _toJson(JsonWriter*) const;
          398  public: virtual void _toJsonCollections(JsonWriter*) const;
          399 
          400 // Constructors
          401 // ************
          402 
          403  public: static Cell* create(Library* library, const Name& name);
          404  public: static Cell* fromJson(const string& filename);
          405 
          406 // Accessors
          407 // *********
          408 
          409  public: virtual Cell* getCell() const {return (Cell*)this;};
          410  public: virtual Box getBoundingBox() const;
          411  public: Library* getLibrary() const {return _library;};
          412  public: string getHierarchicalName() const;
          413  public: const Name& getName() const {return _name;};
          414  public: const Flags& getFlags() const { return _flags; }
          415  public: Path getShuntedPath() const { return _shuntedPath; }
          416  public: Entity* getEntity(const Signature&) const;
          417  public: Instance* getInstance(const Name& name) const {return _instanceMap.getElement(name);};
          418  public: Instances getInstances() const {return _instanceMap.getElements();};
          419  public: Instances getPlacedInstances() const;
          420  public: Instances getFixedInstances() const;
          421  public: Instances getUnplacedInstances() const;
          422  public: Instances getNotUnplacedInstances() const;
          423  public: Instances getInstancesUnder(const Box& area) const;
          424  public: Instances getPlacedInstancesUnder(const Box& area) const;
          425  public: Instances getFixedInstancesUnder(const Box& area) const;
          426  public: Instances getUnplacedInstancesUnder(const Box& area) const;
          427  public: Instances getNotUnplacedInstancesUnder(const Box& area) const;
          428  public: Instances getSlaveInstances() const; // {return _slaveInstanceSet.getElements();}; NOON!!
          429  public: Instances getTerminalInstances() const;
          430  public: Instances getTerminalInstancesUnder(const Box& area) const;
          431  public: Instances getNonTerminalInstances() const;
          432  public: Instances getNonTerminalInstancesUnder(const Box& area) const;
          433  public: Instances getLeafInstances() const;
          434  public: Instances getLeafInstancesUnder(const Box& area) const;
          435  public: Instances getNonLeafInstances() const;
          436  public: Instances getNonLeafInstancesUnder(const Box& area) const;
          437  public: Net* getNet(const Name& name) const;
          438  public: DeepNet* getDeepNet( Path, const Net* ) const;
          439  public: Nets getNets() const {return _netMap.getElements();};
          440  public: Nets getGlobalNets() const;
          441  public: Nets getExternalNets() const;
          442  public: Nets getInternalNets() const;
          443  public: Nets getClockNets() const;
          444  public: Nets getSupplyNets() const;
          445  public: Nets getPowerNets() const;
          446  public: Nets getGroundNets() const;
          447  public: Pin* getPin(const Name& name) const {return _pinMap.getElement(name);};
          448  public: Pins getPins() const {return _pinMap.getElements();};
          449  public: Slice* getSlice(const Layer* layer) const {return _sliceMap->getElement(layer);};
          450  public: Slices getSlices(const Layer::Mask& mask = ~0) const;
          451  public: const ExtensionSliceMap& getExtensionSliceMap() const { return _extensionSlices; };
          452  public: ExtensionSlice* getExtensionSlice(const Name& name) const;
          453  public: ExtensionSlices getExtensionSlices(ExtensionSlice::Mask mask=~0) const;
          454  public: Rubbers getRubbers() const;
          455  public: Rubbers getRubbersUnder(const Box& area) const;
          456  public: Markers getMarkers() const {return _markerSet.getElements();};
          457  public: Markers getMarkersUnder(const Box& area) const;
          458  public: References getReferences() const;
          459  public: Components getComponents(const Layer::Mask& mask = ~0) const;
          460  public: Components getComponentsUnder(const Box& area, const Layer::Mask& mask = ~0) const;
          461  public: Occurrences getOccurrences(unsigned searchDepth = std::numeric_limits<unsigned int>::max()) const;
          462  public: Occurrences getOccurrencesUnder(const Box& area, unsigned searchDepth = std::numeric_limits<unsigned int>::max()) const;
          463  public: Occurrences getTerminalInstanceOccurrences() const;
          464  public: Occurrences getTerminalInstanceOccurrencesUnder(const Box& area) const;
          465  public: Occurrences getLeafInstanceOccurrences() const;
          466  public: Occurrences getLeafInstanceOccurrencesUnder(const Box& area) const;
          467  public: Occurrences getNonLeafInstanceOccurrences() const;
          468  public: Occurrences getComponentOccurrences(const Layer::Mask& mask = ~0) const;
          469  public: Occurrences getComponentOccurrencesUnder(const Box& area, const Layer::Mask& mask = ~0) const;
          470  public: Occurrences getHyperNetRootNetOccurrences() const;
          471  public: ExtensionSlice::Mask getExtensionSliceMask ( const Name& name ) const;
          472  public: Gos getExtensionGos ( const Name& name ) const;
          473  public: Gos getExtensionGos ( ExtensionSlice::Mask mask = ~0 ) const;
          474  public: Gos getExtensionGosUnder ( const Box& area, const Name& name ) const;
          475  public: Gos getExtensionGosUnder ( const Box& area, ExtensionSlice::Mask mask = ~0 ) const;
          476  public: Cells getSubCells() const;
          477  public: Cells getClonedCells() const;
          478  public: Cell* getCloneMaster() const;
          479  public: Pathes getRecursiveSlavePathes() const;
          480  public: const Box& getAbutmentBox() const {return _abutmentBox;};
          481 
          482 // Predicates
          483 // **********
          484 
          485  public: bool isCalledBy(Cell* cell) const;
          486  public: bool isTerminal() const {return _flags.isset(Flags::Terminal);};
          487  public: bool isFlattenLeaf() const {return _flags.isset(Flags::FlattenLeaf);};
          488  public: bool isLeaf() const;
          489  public: bool isUnique() const;
          490  public: bool isUniquified() const;
          491  public: bool isUniquifyMaster() const;
          492  public: bool isPad() const {return _flags.isset(Flags::Pad);};
          493  public: bool isFeed() const {return _flags.isset(Flags::Feed);};
          494  public: bool isFlattenedNets() const {return _flags.isset(Flags::FlattenedNets);};
          495  public: bool isPlaced() const {return _flags.isset(Flags::Placed);};
          496  public: bool isRouted() const {return _flags.isset(Flags::Routed);};
          497  public: bool isNetAlias(const Name& name) const;
          498 
          499 // Updators
          500 // ********
          501 
          502  public: void setName(const Name& name);
          503  public: void setAbutmentBox(const Box& abutmentBox);
          504  public: void slaveAbutmentBox(Cell*);
          505  public: void unslaveAbutmentBox(Cell*);
          506  public: void setTerminal(bool isTerminal) {_flags.set(Flags::Terminal,isTerminal);};
          507  public: void setFlattenLeaf(bool isFlattenLeaf) {_flags.set(Flags::FlattenLeaf,isFlattenLeaf);};
          508  public: void setPad(bool isPad) {_flags.set(Flags::Pad,isPad);};
          509  public: void setFeed(bool isFeed) {_flags.set(Flags::Feed,isFeed);};
          510  public: void flattenNets(uint64_t flags=Flags::BuildRings);
          511  public: void flattenNets(const Instance* instance, uint64_t flags=Flags::BuildRings);
          512  public: void createRoutingPadRings(uint64_t flags=Flags::BuildRings);
          513  public: void setFlags(uint64_t flags) { _flags |= flags; }
          514  public: void resetFlags(uint64_t flags) { _flags &= ~flags; }
          515  public: bool updatePlacedFlag();
          516  public: void materialize();
          517  public: void unmaterialize();
          518  public: Cell* getClone();
          519  public: void uniquify(unsigned int depth=std::numeric_limits<unsigned int>::max());
          520  public: void addObserver(BaseObserver*);
          521  public: void removeObserver(BaseObserver*);
          522  public: void notify(unsigned flags);
          523 
          524 };
          525 
          526 
          527 inline Cell::ClonedSet::Locator::Locator ( const Locator& other )
          528  : Hurricane::Locator<Cell*>()
          529  , _dboLocator(other._dboLocator)
          530 { }
          531 
          532 inline Cell::ClonedSet::ClonedSet ( const Cell* cell )
          533  : Hurricane::Collection<Cell*>()
          534  , _cell(cell)
          535 { }
          536 
          537 inline Cell::ClonedSet::ClonedSet ( const ClonedSet& other )
          538  : Hurricane::Collection<Cell*>()
          539  , _cell(other._cell)
          540 { }
          541 
          542 
          543 inline void Cell::UniquifyRelation::_setOwner ( Cell* owner ) { _setMasterOwner(owner); }
          544 inline void Cell::UniquifyRelation::_setDuplicates ( unsigned int duplicates ) { _duplicates=duplicates; }
          545 
          546 
          547 inline Cell::SlavedsSet::Locator::Locator ( const Locator& other )
          548  : Hurricane::Locator<Cell*>()
          549  , _dboLocator(other._dboLocator)
          550 { }
          551 
          552 inline Cell::SlavedsSet::SlavedsSet ( const Cell* cell )
          553  : Hurricane::Collection<Cell*>()
          554  , _cell(cell)
          555 { }
          556 
          557 inline Cell::SlavedsSet::SlavedsSet ( const SlavedsSet& other )
          558  : Hurricane::Collection<Cell*>()
          559  , _cell(other._cell)
          560 { }
          561 
          562 
          563 inline void Cell::SlavedsRelation::_setOwner ( Cell* owner ) { _setMasterOwner(owner); }
          564 
          565 
          566 class JsonCell : public JsonEntity {
          567 // *********************************
          568 
          569  public: static void initialize();
          570  public: JsonCell(unsigned long flags);
          571  public: virtual ~JsonCell();
          572  public: virtual string getTypeName() const;
          573  public: virtual JsonCell* clone(unsigned long) const;
          574  public: virtual void toData(JsonStack&);
          575  private: Cell* _cell;
          576  private: bool _materializationState;
          577 };
          578 
          579 } // End of Hurricane namespace.
          580 
          581 
          582 INSPECTOR_P_SUPPORT(Hurricane::Cell);
          583 INSPECTOR_P_SUPPORT(Hurricane::Cell::Flags);
          584 INSPECTOR_P_SUPPORT(Hurricane::Cell::InstanceMap);
          585 INSPECTOR_P_SUPPORT(Hurricane::Cell::SlaveInstanceSet);
          586 INSPECTOR_P_SUPPORT(Hurricane::Cell::NetMap);
          587 INSPECTOR_P_SUPPORT(Hurricane::Cell::PinMap);
          588 INSPECTOR_P_SUPPORT(Hurricane::Cell::SliceMap);
          589 INSPECTOR_P_SUPPORT(Hurricane::Cell::MarkerSet);
          590 
          591 
          592 #endif // HURRICANE_CELL_H
          593 
          594 
          595 // ****************************************************************************************************
          596 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
          597 // ****************************************************************************************************
          Path description (API)
          Definition: Path.h:37
          +
          1 // ****************************************************************************************************
          2 // File: ./hurricane/Cell.h
          3 // Authors: R. Escassut
          4 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
          5 //
          6 // This file is part of Hurricane.
          7 //
          8 // Hurricane is free software: you can redistribute it and/or modify it under the terms of the GNU
          9 // Lesser General Public License as published by the Free Software Foundation, either version 3 of the
          10 // License, or (at your option) any later version.
          11 //
          12 // Hurricane is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
          13 // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU
          14 // General Public License for more details.
          15 //
          16 // You should have received a copy of the Lesser GNU General Public License along with Hurricane. If
          17 // not, see <http://www.gnu.org/licenses/>.
          18 // ****************************************************************************************************
          19 
          20 #ifndef HURRICANE_CELL_H
          21 #define HURRICANE_CELL_H
          22 
          23 #include <limits>
          24 #include "hurricane/Flags.h"
          25 #include "hurricane/Observer.h"
          26 #include "hurricane/Signature.h"
          27 #include "hurricane/Relation.h"
          28 #include "hurricane/Pathes.h"
          29 #include "hurricane/Entity.h"
          30 #include "hurricane/Cells.h"
          31 #include "hurricane/DeepNet.h"
          32 #include "hurricane/Instance.h"
          33 #include "hurricane/Pin.h"
          34 #include "hurricane/Pins.h"
          35 #include "hurricane/Slices.h"
          36 #include "hurricane/ExtensionSlice.h"
          37 #include "hurricane/Rubbers.h"
          38 #include "hurricane/Markers.h"
          39 #include "hurricane/Marker.h"
          40 #include "hurricane/Reference.h"
          41 #include "hurricane/Components.h"
          42 #include "hurricane/Occurrences.h"
          43 #include "hurricane/Transformation.h"
          44 #include "hurricane/Layer.h"
          45 #include "hurricane/QuadTree.h"
          46 //#include "hurricane/IntrusiveMap.h"
          47 #include "hurricane/IntrusiveSet.h"
          48 #include "hurricane/MapCollection.h"
          49 #include "hurricane/NetAlias.h"
          50 
          51 
          52 
          53 namespace Hurricane {
          54 
          55 class Library;
          56 class BasicLayer;
          57 
          58 typedef multimap<Entity*,Entity*> SlaveEntityMap;
          59 
          60 
          61 
          62 // ****************************************************************************************************
          63 // Cell declaration
          64 // ****************************************************************************************************
          65 
          66 class Cell : public Entity {
          67 // *************************
          68 
          69 // Types
          70 // *****
          71 
          72  public: typedef Entity Inherit;
          73  public: typedef map<Name,ExtensionSlice*> ExtensionSliceMap;
          74 
          75  public: class Flags : public BaseFlags {
          76  public:
          77  enum Flag { NoFlags = (1 << 0)
          78  , BuildRings = (1 << 1)
          79  , BuildClockRings = (1 << 2)
          80  , BuildSupplyRings = (1 << 3)
          81  , NoClockFlatten = (1 << 4)
          82  , WarnOnUnplacedInstances = (1 << 5)
          83  , StayOnPlugs = (1 << 6)
          84  , MaskRings = BuildRings|BuildClockRings|BuildSupplyRings
          85  // Flags set for Observers.
          86  , CellAboutToChange = (1 << 10)
          87  , CellChanged = (1 << 11)
          88  , CellDestroyed = (1 << 12)
          89  // Cell states
          90  , Terminal = (1 << 20)
          91  , FlattenLeaf = (1 << 21)
          92  , Pad = (1 << 22)
          93  , Feed = (1 << 23)
          94  , FlattenedNets = (1 << 24)
          95  , Placed = (1 << 25)
          96  , Routed = (1 << 26)
          97  , MergedQuadTree = (1 << 27)
          98  , SlavedAb = (1 << 28)
          99  , Materialized = (1 << 29)
          100  };
          101 
          102  public:
          103  Flags ( uint64_t flags = NoFlags );
          104  virtual ~Flags ();
          105  virtual std::string _getTypeName () const;
          106  virtual std::string _getString () const;
          107  };
          108 
          109  class UniquifyRelation : public Relation {
          110  public:
          111  static UniquifyRelation* create ( Cell* );
          112  static UniquifyRelation* get ( const Cell* );
          113  virtual Name getName () const;
          114  static Name staticGetName ();
          115  Name getUniqueName ();
          116  static std::string getTrunkName ( Name name );
          117  virtual bool hasJson () const;
          118  virtual void toJson ( JsonWriter*, const DBo* ) const;
          119  inline void _setOwner ( Cell* );
          120  inline void _setDuplicates ( unsigned int );
          121  virtual string _getTypeName () const;
          122  virtual Record* _getRecord () const;
          123  private:
          124  static const Name _name;
          125  unsigned int _duplicates;
          126  private:
          127  UniquifyRelation ( Cell* );
          128  protected:
          129  virtual void _preDestroy ();
          130 
          131  public:
          132  class JsonProperty : public JsonObject {
          133  public:
          134  static void initialize ();
          135  JsonProperty ( unsigned long flags );
          136  virtual string getTypeName () const;
          137  virtual JsonProperty* clone ( unsigned long ) const;
          138  virtual void toData ( JsonStack& );
          139  };
          140  public:
          141  class JsonPropertyRef : public JsonObject {
          142  public:
          143  static void initialize ();
          144  JsonPropertyRef ( unsigned long flags );
          145  virtual string getTypeName () const;
          146  virtual JsonPropertyRef* clone ( unsigned long ) const;
          147  virtual void toData ( JsonStack& );
          148  };
          149  };
          150 
          151  class ClonedSet : public Collection<Cell*> {
          152  public:
          153  // Sub-Class: Locator.
          154  class Locator : public Hurricane::Locator<Cell*> {
          155  public:
          156  Locator ( const Cell* );
          157  inline Locator ( const Locator& );
          158  virtual Cell* getElement () const;
          159  virtual Hurricane::Locator<Cell*>* getClone () const;
          160  virtual bool isValid () const;
          161  virtual void progress ();
          162  virtual string _getString () const;
          163  protected:
          164  Hurricane::Locator<DBo*>* _dboLocator;
          165  };
          166 
          167  public:
          168  inline ClonedSet ( const Cell* cell );
          169  inline ClonedSet ( const ClonedSet& );
          170  virtual Hurricane::Collection<Cell*>* getClone () const;
          171  virtual Hurricane::Locator<Cell*>* getLocator () const;
          172  virtual string _getString () const;
          173  protected:
          174  const Cell* _cell;
          175  };
          176 
          177  class SlavedsRelation : public Relation {
          178  public:
          179  static SlavedsRelation* create ( Cell* );
          180  static SlavedsRelation* get ( const Cell* );
          181  virtual Name getName () const;
          182  static Name staticGetName ();
          183  virtual bool hasJson () const;
          184  virtual void toJson ( JsonWriter*, const DBo* ) const;
          185  inline void _setOwner ( Cell* );
          186  virtual string _getTypeName () const;
          187  virtual Record* _getRecord () const;
          188  private:
          189  static const Name _name;
          190  private:
          191  SlavedsRelation ( Cell* );
          192  protected:
          193  virtual void _preDestroy ();
          194 
          195  public:
          196  class JsonProperty : public JsonObject {
          197  public:
          198  static void initialize ();
          199  JsonProperty ( unsigned long flags );
          200  virtual string getTypeName () const;
          201  virtual JsonProperty* clone ( unsigned long ) const;
          202  virtual void toData ( JsonStack& );
          203  };
          204  public:
          205  class JsonPropertyRef : public JsonObject {
          206  public:
          207  static void initialize ();
          208  JsonPropertyRef ( unsigned long flags );
          209  virtual string getTypeName () const;
          210  virtual JsonPropertyRef* clone ( unsigned long ) const;
          211  virtual void toData ( JsonStack& );
          212  };
          213  };
          214 
          215  class SlavedsSet : public Collection<Cell*> {
          216  public:
          217  // Sub-Class: Locator.
          218  class Locator : public Hurricane::Locator<Cell*> {
          219  public:
          220  Locator ( const Cell* );
          221  inline Locator ( const Locator& );
          222  virtual Cell* getElement () const;
          223  virtual Hurricane::Locator<Cell*>* getClone () const;
          224  virtual bool isValid () const;
          225  virtual void progress ();
          226  virtual string _getString () const;
          227  protected:
          228  Hurricane::Locator<DBo*>* _dboLocator;
          229  };
          230 
          231  public:
          232  inline SlavedsSet ( const Cell* cell );
          233  inline SlavedsSet ( const SlavedsSet& );
          234  virtual Hurricane::Collection<Cell*>* getClone () const;
          235  virtual Hurricane::Locator<Cell*>* getLocator () const;
          236  virtual string _getString () const;
          237  protected:
          238  const Cell* _cell;
          239  };
          240 
          241  class InstanceMap : public IntrusiveMap<Name, Instance> {
          242  // ****************************************************
          243 
          244  public: typedef IntrusiveMap<Name, Instance> Inherit;
          245 
          246  public: InstanceMap();
          247 
          248  public: virtual Name _getKey(Instance* instance) const;
          249  public: virtual unsigned _getHashValue(Name name) const;
          250  public: virtual Instance* _getNextElement(Instance* instance) const;
          251  public: virtual void _setNextElement(Instance* instance, Instance* nextInstance) const;
          252 
          253  };
          254 
          255  public: class SlaveInstanceSet : public IntrusiveSet<Instance> {
          256  // ***********************************************************
          257 
          258  public: typedef IntrusiveSet<Instance> Inherit;
          259 
          260  public: SlaveInstanceSet();
          261 
          262  public: virtual unsigned _getHashValue(Instance* slaveInstance) const;
          263  public: virtual Instance* _getNextElement(Instance* slaveInstance) const;
          264  public: virtual void _setNextElement(Instance* slaveInstance, Instance* nextSlaveInstance) const;
          265 
          266  };
          267 
          268  public: class NetMap : public IntrusiveMapConst<Name, Net> {
          269  // *********************************************************
          270 
          271  public: typedef IntrusiveMapConst<Name, Net> Inherit;
          272 
          273  public: NetMap();
          274 
          275  public: virtual const Name& _getKey(Net* net) const;
          276  public: virtual unsigned _getHashValue(const Name& name) const;
          277  public: virtual Net* _getNextElement(Net* net) const;
          278  public: virtual void _setNextElement(Net* net, Net* nextNet) const;
          279 
          280  };
          281 
          282  class PinMap : public IntrusiveMap<Name, Pin> {
          283  // *******************************************
          284 
          285  public: typedef IntrusiveMap<Name, Pin> Inherit;
          286 
          287  public: PinMap();
          288 
          289  public: virtual Name _getKey(Pin* pin) const;
          290  public: virtual unsigned _getHashValue(Name name) const;
          291  public: virtual Pin* _getNextElement(Pin* pin) const;
          292  public: virtual void _setNextElement(Pin* pin, Pin* nextPin) const;
          293 
          294  };
          295 
          296  public: class SliceMap : public IntrusiveMap<const Layer*, Slice> {
          297  // **************************************************************
          298 
          299  public: typedef IntrusiveMap<const Layer*, Slice> Inherit;
          300 
          301  public: SliceMap();
          302 
          303  public: virtual const Layer* _getKey(Slice* slice) const;
          304  public: virtual unsigned _getHashValue(const Layer* layer) const;
          305  public: virtual Slice* _getNextElement(Slice* slice) const;
          306  public: virtual void _setNextElement(Slice* slice, Slice* nextSlice) const;
          307 
          308  };
          309 
          310  public: class MarkerSet : public IntrusiveSet<Marker> {
          311  // **************************************************
          312 
          313  public: typedef IntrusiveSet<Marker> Inherit;
          314 
          315  public: MarkerSet();
          316 
          317  public: virtual unsigned _getHashValue(Marker* marker) const;
          318  public: virtual Marker* _getNextElement(Marker* marker) const;
          319  public: virtual void _setNextElement(Marker* marker, Marker* nextMarker) const;
          320 
          321  };
          322 
          323 // Attributes
          324 // **********
          325 
          326  private: Library* _library;
          327  private: Name _name;
          328  private: Path _shuntedPath;
          329  private: InstanceMap _instanceMap;
          330  private: QuadTree* _quadTree;
          331  private: SlaveInstanceSet _slaveInstanceSet;
          332  private: NetMap _netMap;
          333  private: PinMap _pinMap;
          334  private: SliceMap* _sliceMap;
          335  private: ExtensionSliceMap _extensionSlices;
          336  private: MarkerSet _markerSet;
          337  private: Box _abutmentBox;
          338  private: Box _boundingBox;
          339  private: Cell* _nextOfLibraryCellMap;
          340  private: Cell* _nextOfSymbolCellSet;
          341  private: SlaveEntityMap _slaveEntityMap;
          342  private: AliasNameSet _netAliasSet;
          343  private: Observable _observers;
          344  private: Flags _flags;
          345 
          346 // Constructors
          347 // ************
          348 
          349  protected: Cell(Library* library, const Name& name);
          350 
          351 // Others
          352 // ******
          353 
          354  protected: virtual void _postCreate();
          355 
          356  protected: virtual void _preDestroy();
          357 
          358  public: virtual string _getTypeName() const {return _TName("Cell");};
          359  public: virtual string _getString() const;
          360  public: virtual Record* _getRecord() const;
          361  public: static string getFlagString( uint64_t );
          362  public: static Record* getFlagRecord( uint64_t );
          363  public: static Slot* getFlagSlot( uint64_t );
          364 
          365  public: InstanceMap& _getInstanceMap() {return _instanceMap;};
          366  public: QuadTree* _getQuadTree() {return _quadTree;};
          367  public: SlaveInstanceSet& _getSlaveInstanceSet() {return _slaveInstanceSet;};
          368  public: NetMap& _getNetMap() {return _netMap;};
          369  public: PinMap& _getPinMap() {return _pinMap;};
          370  public: SliceMap* _getSliceMap() {return _sliceMap;};
          371  public: ExtensionSliceMap& _getExtensionSliceMap() {return _extensionSlices;};
          372  public: MarkerSet& _getMarkerSet() {return _markerSet;};
          373  public: Cell* _getNextOfLibraryCellMap() const {return _nextOfLibraryCellMap;};
          374  public: Cell* _getNextOfSymbolCellSet() const {return _nextOfSymbolCellSet;};
          375  public: AliasNameSet& _getNetAliasSet() { return _netAliasSet; }
          376 
          377  public: void _setNextOfLibraryCellMap(Cell* cell) {_nextOfLibraryCellMap = cell;};
          378  public: void _setNextOfSymbolCellSet(Cell* cell) {_nextOfSymbolCellSet = cell;};
          379 
          380  public: void _addNetAlias(NetAliasName* alias) { _netAliasSet.insert(alias); }
          381  public: void _removeNetAlias(NetAliasName* alias) { _netAliasSet.erase(alias); }
          382 
          383  public: void _fit(const Box& box);
          384  public: void _unfit(const Box& box);
          385 
          386  public: void _addSlaveEntity(Entity* entity, Entity* slaveEntity);
          387  public: void _removeSlaveEntity(Entity* entity, Entity* slaveEntity);
          388  public: void _getSlaveEntities(SlaveEntityMap::iterator& begin, SlaveEntityMap::iterator& end);
          389  public: void _getSlaveEntities(Entity* entity, SlaveEntityMap::iterator& begin, SlaveEntityMap::iterator& end);
          390  public: void _insertSlice(ExtensionSlice*);
          391  public: void _removeSlice(ExtensionSlice*);
          392  public: void _slaveAbutmentBox(Cell*);
          393  public: void _changeQuadTree(Cell*);
          394  public: void _setShuntedPath(Path path) { _shuntedPath=path; }
          395  protected: void _setAbutmentBox(const Box& abutmentBox);
          396 
          397  public: virtual void _toJson(JsonWriter*) const;
          398  public: virtual void _toJsonCollections(JsonWriter*) const;
          399 
          400 // Constructors
          401 // ************
          402 
          403  public: static Cell* create(Library* library, const Name& name);
          404  public: static Cell* fromJson(const string& filename);
          405 
          406 // Accessors
          407 // *********
          408 
          409  public: virtual Cell* getCell() const {return (Cell*)this;};
          410  public: virtual Box getBoundingBox() const;
          411  public: Library* getLibrary() const {return _library;};
          412  public: string getHierarchicalName() const;
          413  public: const Name& getName() const {return _name;};
          414  public: const Flags& getFlags() const { return _flags; }
          415  public: Path getShuntedPath() const { return _shuntedPath; }
          416  public: Entity* getEntity(const Signature&) const;
          417  public: Instance* getInstance(const Name& name) const {return _instanceMap.getElement(name);};
          418  public: Instances getInstances() const {return _instanceMap.getElements();};
          419  public: Instances getPlacedInstances() const;
          420  public: Instances getFixedInstances() const;
          421  public: Instances getUnplacedInstances() const;
          422  public: Instances getNotUnplacedInstances() const;
          423  public: Instances getInstancesUnder(const Box& area) const;
          424  public: Instances getPlacedInstancesUnder(const Box& area) const;
          425  public: Instances getFixedInstancesUnder(const Box& area) const;
          426  public: Instances getUnplacedInstancesUnder(const Box& area) const;
          427  public: Instances getNotUnplacedInstancesUnder(const Box& area) const;
          428  public: Instances getSlaveInstances() const; // {return _slaveInstanceSet.getElements();}; NOON!!
          429  public: Instances getTerminalInstances() const;
          430  public: Instances getTerminalInstancesUnder(const Box& area) const;
          431  public: Instances getNonTerminalInstances() const;
          432  public: Instances getNonTerminalInstancesUnder(const Box& area) const;
          433  public: Instances getLeafInstances() const;
          434  public: Instances getLeafInstancesUnder(const Box& area) const;
          435  public: Instances getNonLeafInstances() const;
          436  public: Instances getNonLeafInstancesUnder(const Box& area) const;
          437  public: Net* getNet(const Name& name) const;
          438  public: DeepNet* getDeepNet( Path, const Net* ) const;
          439  public: Nets getNets() const {return _netMap.getElements();};
          440  public: Nets getGlobalNets() const;
          441  public: Nets getExternalNets() const;
          442  public: Nets getInternalNets() const;
          443  public: Nets getClockNets() const;
          444  public: Nets getSupplyNets() const;
          445  public: Nets getPowerNets() const;
          446  public: Nets getGroundNets() const;
          447  public: Pin* getPin(const Name& name) const {return _pinMap.getElement(name);};
          448  public: Pins getPins() const {return _pinMap.getElements();};
          449  public: Slice* getSlice(const Layer* layer) const {return _sliceMap->getElement(layer);};
          450  public: Slices getSlices(const Layer::Mask& mask = ~0) const;
          451  public: const ExtensionSliceMap& getExtensionSliceMap() const { return _extensionSlices; };
          452  public: ExtensionSlice* getExtensionSlice(const Name& name) const;
          453  public: ExtensionSlices getExtensionSlices(ExtensionSlice::Mask mask=~0) const;
          454  public: Rubbers getRubbers() const;
          455  public: Rubbers getRubbersUnder(const Box& area) const;
          456  public: Markers getMarkers() const {return _markerSet.getElements();};
          457  public: Markers getMarkersUnder(const Box& area) const;
          458  public: References getReferences() const;
          459  public: Components getComponents(const Layer::Mask& mask = ~0) const;
          460  public: Components getComponentsUnder(const Box& area, const Layer::Mask& mask = ~0) const;
          461  public: Occurrences getOccurrences(unsigned searchDepth = std::numeric_limits<unsigned int>::max()) const;
          462  public: Occurrences getOccurrencesUnder(const Box& area, unsigned searchDepth = std::numeric_limits<unsigned int>::max()) const;
          463  public: Occurrences getTerminalInstanceOccurrences() const;
          464  public: Occurrences getTerminalInstanceOccurrencesUnder(const Box& area) const;
          465  public: Occurrences getLeafInstanceOccurrences() const;
          466  public: Occurrences getLeafInstanceOccurrencesUnder(const Box& area) const;
          467  public: Occurrences getNonLeafInstanceOccurrences() const;
          468  public: Occurrences getComponentOccurrences(const Layer::Mask& mask = ~0) const;
          469  public: Occurrences getComponentOccurrencesUnder(const Box& area, const Layer::Mask& mask = ~0) const;
          470  public: Occurrences getHyperNetRootNetOccurrences() const;
          471  public: ExtensionSlice::Mask getExtensionSliceMask ( const Name& name ) const;
          472  public: Gos getExtensionGos ( const Name& name ) const;
          473  public: Gos getExtensionGos ( ExtensionSlice::Mask mask = ~0 ) const;
          474  public: Gos getExtensionGosUnder ( const Box& area, const Name& name ) const;
          475  public: Gos getExtensionGosUnder ( const Box& area, ExtensionSlice::Mask mask = ~0 ) const;
          476  public: Cells getSubCells() const;
          477  public: Cells getClonedCells() const;
          478  public: Cell* getCloneMaster() const;
          479  public: Pathes getRecursiveSlavePathes() const;
          480  public: const Box& getAbutmentBox() const {return _abutmentBox;};
          481 
          482 // Predicates
          483 // **********
          484 
          485  public: bool isCalledBy(Cell* cell) const;
          486  public: bool isTerminal() const {return _flags.isset(Flags::Terminal);};
          487  public: bool isFlattenLeaf() const {return _flags.isset(Flags::FlattenLeaf);};
          488  public: bool isLeaf() const;
          489  public: bool isUnique() const;
          490  public: bool isUniquified() const;
          491  public: bool isUniquifyMaster() const;
          492  public: bool isPad() const {return _flags.isset(Flags::Pad);};
          493  public: bool isFeed() const {return _flags.isset(Flags::Feed);};
          494  public: bool isFlattenedNets() const {return _flags.isset(Flags::FlattenedNets);};
          495  public: bool isPlaced() const {return _flags.isset(Flags::Placed);};
          496  public: bool isRouted() const {return _flags.isset(Flags::Routed);};
          497  public: bool isNetAlias(const Name& name) const;
          498 
          499 // Updators
          500 // ********
          501 
          502  public: void setName(const Name& name);
          503  public: void setAbutmentBox(const Box& abutmentBox);
          504  public: void slaveAbutmentBox(Cell*);
          505  public: void unslaveAbutmentBox(Cell*);
          506  public: void setTerminal(bool isTerminal) {_flags.set(Flags::Terminal,isTerminal);};
          507  public: void setFlattenLeaf(bool isFlattenLeaf) {_flags.set(Flags::FlattenLeaf,isFlattenLeaf);};
          508  public: void setPad(bool isPad) {_flags.set(Flags::Pad,isPad);};
          509  public: void setFeed(bool isFeed) {_flags.set(Flags::Feed,isFeed);};
          510  public: void setRouted(bool isRouted) {_flags.set(Flags::Routed,isRouted);};
          511  public: void flattenNets(uint64_t flags=Flags::BuildRings);
          512  public: void flattenNets(const Instance* instance, uint64_t flags=Flags::BuildRings);
          513  public: void createRoutingPadRings(uint64_t flags=Flags::BuildRings);
          514  public: void setFlags(uint64_t flags) { _flags |= flags; }
          515  public: void resetFlags(uint64_t flags) { _flags &= ~flags; }
          516  public: bool updatePlacedFlag();
          517  public: void materialize();
          518  public: void unmaterialize();
          519  public: Cell* getClone();
          520  public: void uniquify(unsigned int depth=std::numeric_limits<unsigned int>::max());
          521  public: void addObserver(BaseObserver*);
          522  public: void removeObserver(BaseObserver*);
          523  public: void notify(unsigned flags);
          524 
          525 };
          526 
          527 
          528 inline Cell::ClonedSet::Locator::Locator ( const Locator& other )
          529  : Hurricane::Locator<Cell*>()
          530  , _dboLocator(other._dboLocator)
          531 { }
          532 
          533 inline Cell::ClonedSet::ClonedSet ( const Cell* cell )
          534  : Hurricane::Collection<Cell*>()
          535  , _cell(cell)
          536 { }
          537 
          538 inline Cell::ClonedSet::ClonedSet ( const ClonedSet& other )
          539  : Hurricane::Collection<Cell*>()
          540  , _cell(other._cell)
          541 { }
          542 
          543 
          544 inline void Cell::UniquifyRelation::_setOwner ( Cell* owner ) { _setMasterOwner(owner); }
          545 inline void Cell::UniquifyRelation::_setDuplicates ( unsigned int duplicates ) { _duplicates=duplicates; }
          546 
          547 
          548 inline Cell::SlavedsSet::Locator::Locator ( const Locator& other )
          549  : Hurricane::Locator<Cell*>()
          550  , _dboLocator(other._dboLocator)
          551 { }
          552 
          553 inline Cell::SlavedsSet::SlavedsSet ( const Cell* cell )
          554  : Hurricane::Collection<Cell*>()
          555  , _cell(cell)
          556 { }
          557 
          558 inline Cell::SlavedsSet::SlavedsSet ( const SlavedsSet& other )
          559  : Hurricane::Collection<Cell*>()
          560  , _cell(other._cell)
          561 { }
          562 
          563 
          564 inline void Cell::SlavedsRelation::_setOwner ( Cell* owner ) { _setMasterOwner(owner); }
          565 
          566 
          567 class JsonCell : public JsonEntity {
          568 // *********************************
          569 
          570  public: static void initialize();
          571  public: JsonCell(unsigned long flags);
          572  public: virtual ~JsonCell();
          573  public: virtual string getTypeName() const;
          574  public: virtual JsonCell* clone(unsigned long) const;
          575  public: virtual void toData(JsonStack&);
          576  private: Cell* _cell;
          577  private: bool _materializationState;
          578 };
          579 
          580 } // End of Hurricane namespace.
          581 
          582 
          583 INSPECTOR_P_SUPPORT(Hurricane::Cell);
          584 INSPECTOR_P_SUPPORT(Hurricane::Cell::Flags);
          585 INSPECTOR_P_SUPPORT(Hurricane::Cell::InstanceMap);
          586 INSPECTOR_P_SUPPORT(Hurricane::Cell::SlaveInstanceSet);
          587 INSPECTOR_P_SUPPORT(Hurricane::Cell::NetMap);
          588 INSPECTOR_P_SUPPORT(Hurricane::Cell::PinMap);
          589 INSPECTOR_P_SUPPORT(Hurricane::Cell::SliceMap);
          590 INSPECTOR_P_SUPPORT(Hurricane::Cell::MarkerSet);
          591 
          592 
          593 #endif // HURRICANE_CELL_H
          594 
          595 
          596 // ****************************************************************************************************
          597 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
          598 // ****************************************************************************************************
          Path description (API)
          Definition: Path.h:37
          Collection description (API)
          Definition: Collection.h:39
          Pad description (API)
          Definition: Pad.h:36
          Library description (API)
          Definition: Library.h:38
          @@ -71,7 +71,6 @@ $(function() {
          DataBase object root class (API).
          Definition: DBo.h:46
          Hurricane::Mask< unsigned long long > Mask
          Definition: Layer.h:65
          Nets getExternalNets() const
          -
          Occurrenceable objects root class (API).
          Definition: Entity.h:38
          Nets getNets() const
          Definition: Cell.h:439
          Library * getLibrary() const
          Definition: Cell.h:411
          Cell * getClone()
          @@ -93,6 +92,7 @@ $(function() {
          bool isCalledBy(Cell *cell) const
          Rubbers getRubbersUnder(const Box &area) const
          Slice * getSlice(const Layer *layer) const
          Definition: Cell.h:449
          +
          Slice description (API)
          Definition: Slice.h:40
          GenericCollection< Path > Pathes
          Definition: Pathes.h:34
          void setName(const Name &name)
          @@ -112,7 +112,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Cells_8h_source.html b/hurricane/doc/hurricane/html/Cells_8h_source.html index b3b3b79a..1c817db5 100644 --- a/hurricane/doc/hurricane/html/Cells_8h_source.html +++ b/hurricane/doc/hurricane/html/Cells_8h_source.html @@ -57,7 +57,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Collection_8h_source.html b/hurricane/doc/hurricane/html/Collection_8h_source.html index c4a4fce3..6ceaacd2 100644 --- a/hurricane/doc/hurricane/html/Collection_8h_source.html +++ b/hurricane/doc/hurricane/html/Collection_8h_source.html @@ -44,39 +44,39 @@ $(function() {
          Collection.h
          -
          1 // ****************************************************************************************************
          2 // File: ./hurricane/Collection.h
          3 // Authors: R. Escassut
          4 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
          5 //
          6 // This file is part of Hurricane.
          7 //
          8 // Hurricane is free software: you can redistribute it and/or modify it under the terms of the GNU
          9 // Lesser General Public License as published by the Free Software Foundation, either version 3 of the
          10 // License, or (at your option) any later version.
          11 //
          12 // Hurricane is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
          13 // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU
          14 // General Public License for more details.
          15 //
          16 // You should have received a copy of the Lesser GNU General Public License along with Hurricane. If
          17 // not, see <http://www.gnu.org/licenses/>.
          18 // ****************************************************************************************************
          19 
          20 #ifndef HURRICANE_COLLECTION
          21 #define HURRICANE_COLLECTION
          22 
          23 #include "hurricane/Locator.h"
          24 #include "hurricane/Filter.h"
          25 
          26 namespace Hurricane {
          27 
          28 template<class Type> class GenericCollection;
          29 template<class Type, class SubType> class SubTypeCollection;
          30 template<class Type, class SubType> class NotSubTypeCollection;
          31 template<class Type> class SubSetCollection;
          32 
          33 
          34 
          35 // ****************************************************************************************************
          36 // Collection declaration
          37 // ****************************************************************************************************
          38 
          39 template<class Type> class Collection {
          40 // ************************************
          41 
          42 // Constructors
          43 // ************
          44 
          45  protected: Collection()
          46  // ********************
          47  {
          48  }
          49 
          50  private: Collection(const Collection& collection);
          51  // ***********************************************
          52  // not implemented to forbid copy construction
          53  // ***********************************************
          54 
          55 // Destructor
          56 // **********
          57 
          58  public: virtual ~Collection()
          59  // **************************
          60  {
          61  }
          62 
          63 // Operators
          64 // *********
          65 
          66  private: Collection& operator=(const Collection& collection);
          67  // **********************************************************
          68  // not implemented to forbid assignment
          69  // **********************************************************
          70 
          71 // Accessors
          72 // *********
          73 
          74  public: virtual Collection<Type>* getClone() const = 0;
          75 
          76  public: virtual Locator<Type>* getLocator() const = 0;
          77 
          78  public: virtual unsigned getSize() const
          79  // *************************************
          80  {
          81  unsigned size = 0;
          82  // we use a GenericLocator to delete the locator allocated by getLocator()
          83  GenericLocator<Type> locator = getLocator();
          84  while (locator.isValid()) {
          85  size++;
          86  locator.progress();
          87  }
          88  return size;
          89  }
          90 
          91  public: Type getFirst() const
          92  // **************************
          93  {
          94  // we use a GenericLocator to delete the locator allocated by getLocator()
          95  return GenericLocator<Type>(getLocator()).getElement();
          96  }
          97 
          98  public: GenericCollection<Type> getSubSet(const Filter<Type>& filter) const
          99  // ************************************************************************
          100  {
          101  return SubSetCollection<Type>(*this, filter);
          102  }
          103 
          104  public: template<class SubType> GenericCollection<SubType> getSubSet() const
          105  // *************************************************************************
          106  {
          108  }
          109 
          110  public: template<class SubType>
          112  // ******************************************************************************
          113  {
          114  return getSubSet<SubType>().getSubSet(filter);
          115  }
          116 
          117  public: template<class SubType> GenericCollection<SubType> getNotSubSet() const
          118  // ****************************************************************************
          119  {
          120  return NotSubTypeCollection<Type, SubType>(this);
          121  }
          122 
          123 // Predicates
          124 // **********
          125 
          126  public: bool isEmpty() const
          127  // *************************
          128  {
          129  // we use a GenericLocator to delete the locator allocated by getLocator()
          130  return !GenericLocator<Type>(getLocator()).isValid();
          131  }
          132 
          133 // Utilitarians
          134 // ************
          135 
          136  public: void fill(list<Type>& list) const
          137  // **************************************
          138  {
          139  GenericLocator<Type> locator = getLocator();
          140  while (locator.isValid()) {
          141  list.push_back(locator.getElement());
          142  locator.progress();
          143  }
          144  }
          145 
          146  public: void fill(set<Type>& set) const
          147  // ************************************
          148  {
          149  GenericLocator<Type> locator = getLocator();
          150  while (locator.isValid()) {
          151  set.insert(locator.getElement());
          152  locator.progress();
          153  }
          154  }
          155 
          156  public: template<class Compare> void fill(set<Type, Compare>& set) const
          157  // *********************************************************************
          158  {
          159  GenericLocator<Type> locator = getLocator();
          160  while (locator.isValid()) {
          161  set.insert(locator.getElement());
          162  locator.progress();
          163  }
          164  }
          165 
          166  public: void fill(vector<Type>& vector) const
          167  // ******************************************
          168  {
          169  GenericLocator<Type> locator = getLocator();
          170  while (locator.isValid()) {
          171  vector.push_back(locator.getElement());
          172  locator.progress();
          173  }
          174  }
          175 
          176 // Others
          177 // ******
          178 
          179  public: virtual string _getTypeName() const
          180  // **************************************
          181  {
          182  return _TName("Collection<Type>");
          183  };
          184 
          185  public: virtual string _getString() const = 0;
          186 
          187  public: Record* _getRecord() const
          188  // *************************
          189  {
          190  Record* record = NULL;
          191  if (!isEmpty()) {
          192  record = new Record(getString(this));
          193  unsigned n = 1;
          194  GenericLocator<Type> locator = getLocator();
          195  while (locator.isValid()) {
          196  string slotName = getString(n++);
          197  Type slotRecord = locator.getElement();
          198  record->add(getSlot(slotName, slotRecord));
          199  locator.progress();
          200  }
          201  }
          202  return record;
          203  }
          204 
          205  public:
          206  class iterator {
          207  public:
          208  iterator ( Locator<Type>* l ) : _locator(l) {}
          209  bool operator== ( const iterator& o) const { return not (*this != o); }
          210  iterator& operator++ () { _locator->progress(); return *this; }
          211  Type operator* () { return _locator->getElement(); }
          212  bool operator!= ( const iterator& o ) const
          213  {
          214  bool invalidA = ( _locator == NULL) or not ( _locator->isValid());
          215  bool invalidB = (o._locator == NULL) or not (o._locator->isValid());
          216  return invalidA != invalidB or (not invalidA and not invalidB and _locator != o._locator);
          217  }
          218  private:
          219  Locator<Type>* _locator;
          220  };
          221 
          222  public:
          223  iterator begin() { return iterator(getLocator()); }
          224  iterator end() { return iterator(NULL); }
          225  bool empty() { return begin() == end(); }
          226 };
          227 
          228 
          229 
          230 // ****************************************************************************************************
          231 // GenericCollection declaration
          232 // ****************************************************************************************************
          233 
          234 template<class Type> class GenericCollection : public Collection<Type> {
          235 // *******************************************************************
          236 
          237 // Types
          238 // *****
          239 
          240  public: typedef Collection<Type> Inherit;
          241 
          242 // Attributes
          243 // **********
          244 
          245  private: Collection<Type>* _collection;
          246 
          247 // Constructors
          248 // ************
          249 
          250  public: GenericCollection()
          251  // ***********************
          252  : Inherit(),
          253  _collection(NULL)
          254  {
          255  }
          256 
          257  public: GenericCollection(const Collection<Type>& collection)
          258  // **********************************************************
          259  : Inherit(),
          260  _collection(collection.getClone())
          261  {
          262  }
          263 
          264  public: GenericCollection(const GenericCollection<Type>& genericCollection)
          265  // ************************************************************************
          266  : Inherit(),
          267  _collection(genericCollection.getClone())
          268  {
          269  }
          270 
          271  public: GenericCollection(Collection<Type>* collection)
          272  // *************************************************************
          273  // CAUTION : collection will be deleted by the GenericCollection
          274  // *************************************************************
          275  : Inherit(),
          276  _collection(collection)
          277  {
          278  }
          279 
          280 // Destructor
          281 // **********
          282 
          283  public: virtual ~GenericCollection()
          284  // *********************************
          285  {
          286  if (_collection) delete _collection;
          287  }
          288 
          289 // Operators
          290 // *********
          291 
          292  public: GenericCollection& operator=(const Collection<Type>& collection)
          293  // *********************************************************************
          294  {
          295  if (_collection) delete _collection;
          296  _collection = collection.getClone();
          297  return *this;
          298  }
          299 
          300  public: GenericCollection& operator=(const GenericCollection& genericCollection)
          301  // *****************************************************************************
          302  {
          303  if (_collection) delete _collection;
          304  _collection = genericCollection.getClone();
          305  return *this;
          306  }
          307 
          308  public: GenericCollection& operator=(Collection<Type>* collection)
          309  // ***************************************************************
          310  // CAUTION : collection will be deleted by the GenericCollection
          311  // ***************************************************************
          312  {
          313  if (_collection) delete _collection;
          314  _collection = collection;
          315  return *this;
          316  }
          317 
          318 // Accessors
          319 // *********
          320 
          321  public: virtual Collection<Type>* getClone() const
          322  // ***********************************************
          323  {
          324  return (_collection) ? _collection->getClone() : NULL;
          325  }
          326 
          327  public: virtual Locator<Type>* getLocator() const
          328  // **********************************************
          329  {
          330  return (_collection) ? _collection->getLocator() : NULL;
          331  }
          332 
          333  public: virtual unsigned getSize() const
          334  // *************************************
          335  {
          336  return (_collection) ? _collection->getSize() : 0;
          337  }
          338 
          339 // Others
          340 // ******
          341 
          342  public: virtual string _getTypeName() const
          343  // **************************************
          344  {
          345  return _TName("GenericCollection");
          346  };
          347 
          348  public: virtual string _getString() const
          349  // **************************************
          350  {
          351  if (!_collection)
          352  return "<" + _getTypeName() + " unbound>";
          353  else
          354  return "<" + _getTypeName()+ " " + getString(_collection) + ">";
          355  }
          356 
          357 };
          358 
          359 
          360 
          361 // ****************************************************************************************************
          362 // ElementCollection declaration
          363 // ****************************************************************************************************
          364 
          365 template<class Type> class ElementCollection : public Collection<Type> {
          366 // *********************************************************************
          367 
          368  // -----------------------------------------------------------------
          369  // Sub-Class : "::ElementCollection::Locator".
          370  public: template<class ElType> class Locator : public Hurricane::Locator<ElType> {
          371 
          372  // Attributes
          373  // **********
          374  protected: const ElType _element;
          375  protected: bool _done;
          376 
          377  // Constructors
          378  // ************
          379  public: Locator ( const ElType _element ) : _element(_element), _done(false) {};
          380  public: Locator ( const Locator &locator ) : _element(locator._element), _done(locator._done) {};
          381 
          382  // Accessors
          383  // *********
          384  public: virtual ElType getElement () const { return const_cast<ElType>(_element); };
          385  public: virtual Locator<ElType>* getClone () const { return new Locator(*this); };
          386  public: virtual bool isValid () const { return !_done; };
          387  public: virtual void progress () { _done = true; };
          388 
          389  // Hurricane Management
          390  // ********************
          391  public: virtual string _getString () const {
          392  if (!_element)
          393  return "<" + _TName("ElementCollection::Locator") + " unbound>";
          394  else
          395  return "<" + _TName("ElementCollection::Locator") + " " + getString(_element) + ">";
          396  }
          397 
          398  };
          399 
          400 // Types
          401 // *****
          402 
          403  public: typedef Collection<Type> Inherit;
          404 
          405 // Attributes
          406 // **********
          407 
          408  private: Type _element;
          409 
          410 // Constructors
          411 // ************
          412 
          413  public: ElementCollection()
          414  // ***********************
          415  : Inherit(),
          416  _element(NULL)
          417  {
          418  }
          419 
          420  public: ElementCollection(const Type element)
          421  // **********************************************************
          422  : Inherit(),
          423  _element(element)
          424  {
          425  }
          426 
          427  public: ElementCollection(const ElementCollection<Type>& elementCollection)
          428  // ************************************************************************
          429  : Inherit(),
          430  _element(elementCollection._element)
          431  {
          432  }
          433 
          434 // Accessors
          435 // *********
          436 
          437  public: virtual Collection<Type>* getClone() const
          438  // ***********************************************
          439  {
          440  return ( new ElementCollection (*this) );
          441  }
          442 
          443  public: virtual Locator<Type>* getLocator() const
          444  // **********************************************
          445  {
          446  return ( new Locator<Type> (_element) );
          447  }
          448 
          449  public: virtual unsigned getSize() const
          450  // *************************************
          451  {
          452  return (_element) ? 1 : 0;
          453  }
          454 
          455 // Others
          456 // ******
          457 
          458  public: virtual string _getString() const
          459  // **************************************
          460  {
          461  if (!_element)
          462  return "<" + _TName("ElementCollection") + " unbound>";
          463  else
          464  return "<" + _TName("ElementCollection") + " " + getString(_element) + ">";
          465  }
          466 
          467 };
          468 
          469 
          470 
          471 // ****************************************************************************************************
          472 // SubTypeCollection declaration
          473 // ****************************************************************************************************
          474 
          475 template<class Type, class SubType> class SubTypeCollection : public Collection<SubType> {
          476 // *************************************************************************************
          477 
          478 // Types
          479 // *****
          480 
          481  public: typedef Collection<SubType> Inherit;
          482 
          483  public: class Locator : public Hurricane::Locator<SubType> {
          484  // *******************************************************
          485 
          486  // Types
          487  // *****
          488 
          489  public: typedef Hurricane::Locator<SubType> Inherit;
          490 
          491  // Attributes
          492  // **********
          493 
          494  private: GenericLocator<Type> _locator;
          495 
          496  // Constructors
          497  // ************
          498 
          499  public: Locator(const GenericCollection<Type>& collection)
          500  // ********************************************************
          501  : Inherit(),
          502  _locator(collection.getLocator())
          503  {
          504  while (_locator.isValid() && !dynamic_cast<SubType>(_locator.getElement()))
          505  _locator.progress();
          506  }
          507 
          508  public: Locator(const GenericLocator<Type>& genericLocator)
          509  // ********************************************************
          510  : Inherit(),
          511  _locator(genericLocator.getClone())
          512  {
          513  while (_locator.isValid() && !dynamic_cast<SubType>(_locator.getElement()))
          514  _locator.progress();
          515  }
          516 
          517  // Accessors
          518  // *********
          519 
          520  public: virtual SubType getElement() const
          521  // ***************************************
          522  {
          523  return (_locator.isValid()) ? (SubType)_locator.getElement() : SubType();
          524  }
          525 
          526  public: virtual Hurricane::Locator<SubType>* getClone() const
          527  // **********************************************************
          528  {
          529  return new Locator(_locator);
          530  }
          531 
          532  public: virtual Hurricane::Locator<SubType>* getLocator() // 21-10-03
          533  // *************************************************
          534  {
          535  return dynamic_cast<Hurricane::Locator<SubType>*> (
          536  _locator.getLocator()->getLocator() );
          537  }
          538 
          539 
          540  // Predicates
          541  // **********
          542 
          543  public: virtual bool isValid() const
          544  // *********************************
          545  {
          546  return _locator.isValid();
          547  }
          548 
          549  // Updators
          550  // ********
          551 
          552  public: virtual void progress()
          553  // ****************************
          554  {
          555  if (_locator.isValid()) {
          556  do {
          557  _locator.progress();
          558  } while (_locator.isValid() && !dynamic_cast<SubType>(_locator.getElement()));
          559  }
          560  }
          561 
          562  };
          563 
          564 // Attributes
          565 // **********
          566 
          567  private: GenericCollection<Type> _collection;
          568 
          569 // Constructors
          570 // ************
          571 
          572  public: SubTypeCollection()
          573  // ********************
          574  : Inherit(),
          575  _collection()
          576  {
          577  }
          578 
          579  public: SubTypeCollection(const Collection<Type>* collection)
          580  // **********************************************************
          581  : Inherit(),
          582  _collection(collection->getClone())
          583  {
          584  }
          585 
          586  public: SubTypeCollection(const GenericCollection<Type>& collection)
          587  // *****************************************************************
          588  : Inherit(),
          589  _collection(collection)
          590  {
          591  }
          592 
          593  public: SubTypeCollection(const SubTypeCollection& subTypeCollection)
          594  // ******************************************************************
          595  : Inherit(),
          596  _collection(subTypeCollection._collection)
          597  {
          598  }
          599 
          600 // Operators
          601 // *********
          602 
          603  public: SubTypeCollection& operator=(const SubTypeCollection& subTypeCollection)
          604  // *****************************************************************************
          605  {
          606  _collection = subTypeCollection._collection;
          607  return *this;
          608  }
          609 
          610 // Accessors
          611 // *********
          612 
          613  public: virtual Collection<SubType>* getClone() const
          614  // **************************************************
          615  {
          616  return new SubTypeCollection(_collection);
          617  }
          618 
          619  public: virtual Hurricane::Locator<SubType>* getLocator() const
          620  // ************************************************************
          621  {
          622  return new Locator(_collection);
          623  }
          624 
          625 // Accessors
          626 // *********
          627 
          628  public: virtual string _getString() const
          629  // **************************************
          630  {
          631  return "<" + _TName("SubTypeCollection") + " " + getString(_collection) + ">";
          632  }
          633 
          634 };
          635 
          636 
          637 // ****************************************************************************************************
          638 // NotSubTypeCollection declaration
          639 // ****************************************************************************************************
          640 
          641 template<class Type, class SubType> class NotSubTypeCollection : public Collection<SubType> {
          642 // ******************************************************************************************
          643 
          644 // Types
          645 // *****
          646 
          647  public: typedef Collection<SubType> Inherit;
          648 
          649  public: class Locator : public Hurricane::Locator<SubType> {
          650  // *******************************************************
          651 
          652  // Types
          653  // *****
          654 
          655  public: typedef Hurricane::Locator<SubType> Inherit;
          656 
          657  // Attributes
          658  // **********
          659 
          660  private: GenericLocator<Type> _locator;
          661 
          662  // Constructors
          663  // ************
          664 
          665  public: Locator(const GenericCollection<Type>& collection)
          666  // ********************************************************
          667  : Inherit(),
          668  _locator(collection.getLocator())
          669  {
          670  while (_locator.isValid() && dynamic_cast<SubType>(_locator.getElement()))
          671  _locator.progress();
          672  }
          673 
          674  public: Locator(const GenericLocator<Type>& genericLocator)
          675  // ********************************************************
          676  : Inherit(),
          677  _locator(genericLocator.getClone())
          678  {
          679  while (_locator.isValid() && !dynamic_cast<SubType>(_locator.getElement()))
          680  _locator.progress();
          681  }
          682 
          683  // Accessors
          684  // *********
          685 
          686  public: virtual SubType getElement() const
          687  // ***************************************
          688  {
          689  return (_locator.isValid()) ? (SubType)_locator.getElement() : SubType();
          690  }
          691 
          692  public: virtual Hurricane::Locator<SubType>* getClone() const
          693  // **********************************************************
          694  {
          695  return new Locator(_locator);
          696  }
          697 
          698  public: virtual Hurricane::Locator<SubType>* getLocator() // 21-10-03
          699  // *************************************************
          700  {
          701  return dynamic_cast<Hurricane::Locator<SubType>*> (
          702  _locator.getLocator()->getLocator() );
          703  }
          704 
          705 
          706  // Predicates
          707  // **********
          708 
          709  public: virtual bool isValid() const
          710  // *********************************
          711  {
          712  return _locator.isValid();
          713  }
          714 
          715  // Updators
          716  // ********
          717 
          718  public: virtual void progress()
          719  // ****************************
          720  {
          721  if (_locator.isValid()) {
          722  do {
          723  _locator.progress();
          724  } while (_locator.isValid() && !dynamic_cast<SubType>(_locator.getElement()));
          725  }
          726  }
          727 
          728  };
          729 
          730 // Attributes
          731 // **********
          732 
          733  private: GenericCollection<Type> _collection;
          734 
          735 // Constructors
          736 // ************
          737 
          738  public: NotSubTypeCollection()
          739  // ********************
          740  : Inherit(),
          741  _collection()
          742  {
          743  }
          744 
          745  public: NotSubTypeCollection(const Collection<Type>* collection)
          746  // **********************************************************
          747  : Inherit(),
          748  _collection(collection->getClone())
          749  {
          750  }
          751 
          752  public: NotSubTypeCollection(const GenericCollection<Type>& collection)
          753  // *****************************************************************
          754  : Inherit(),
          755  _collection(collection)
          756  {
          757  }
          758 
          759  public: NotSubTypeCollection(const NotSubTypeCollection& subTypeCollection)
          760  // ******************************************************************
          761  : Inherit(),
          762  _collection(subTypeCollection._collection)
          763  {
          764  }
          765 
          766 // Operators
          767 // *********
          768 
          769  public: NotSubTypeCollection& operator=(const NotSubTypeCollection& subTypeCollection)
          770  // *****************************************************************************
          771  {
          772  _collection = subTypeCollection._collection;
          773  return *this;
          774  }
          775 
          776 // Accessors
          777 // *********
          778 
          779  public: virtual Collection<SubType>* getClone() const
          780  // **************************************************
          781  {
          782  return new NotSubTypeCollection(_collection);
          783  }
          784 
          785  public: virtual Hurricane::Locator<SubType>* getLocator() const
          786  // ************************************************************
          787  {
          788  return new Locator(_collection);
          789  }
          790 
          791 // Accessors
          792 // *********
          793 
          794  public: virtual string _getString() const
          795  // **************************************
          796  {
          797  return "<" + _TName("NotSubTypeCollection") + " " + getString(_collection) + ">";
          798  }
          799 
          800 };
          801 
          802 
          803 // ****************************************************************************************************
          804 // SubSetCollection implementation
          805 // ****************************************************************************************************
          806 
          807 template<class Type> class SubSetCollection : public Collection<Type> {
          808 // ******************************************************************
          809 
          810 // Types
          811 // *****
          812 
          813  public: typedef Collection<Type> Inherit;
          814 
          815  public: class Locator : public Hurricane::Locator<Type> {
          816  // ****************************************************
          817 
          818  // Types
          819  // *****
          820 
          821  public: typedef Hurricane::Locator<Type> Inherit;
          822 
          823  // Attributes
          824  // **********
          825 
          826  private: GenericLocator<Type> _locator;
          827  private: GenericFilter<Type> _filter;
          828 
          829  // Constructors
          830  // ************
          831 
          832  public: Locator(const SubSetCollection<Type>& collection, const Filter<Type>& filter)
          833  // **********************************************************************************
          834  : Inherit(),
          835  _locator(collection.getLocator()),
          836  _filter(filter)
          837  {
          838  while (_locator.isValid() && !_filter.accept(_locator.getElement()))
          839  _locator.progress();
          840  }
          841 
          842  public: Locator(const Collection<Type>& collection, const Filter<Type>& filter)
          843  // ****************************************************************************
          844  : Inherit(),
          845  _locator(collection.getLocator()),
          846  _filter(filter)
          847  {
          848  while (_locator.isValid() && !_filter.accept(_locator.getElement()))
          849  _locator.progress();
          850  }
          851 
          852  public: Locator(const GenericCollection<Type>& genericCollection, const Filter<Type>& filter)
          853  // ******************************************************************************************
          854  : Inherit(),
          855  _locator(genericCollection.getLocator()),
          856  _filter(filter)
          857  {
          858  while (_locator.isValid() && !_filter.accept(_locator.getElement()))
          859  _locator.progress();
          860  }
          861 
          862  public: Locator(const GenericLocator<Type>& genericLocator, const Filter<Type>& filter)
          863  // ************************************************************************************
          864  : Inherit(),
          865  _locator(genericLocator),
          866  _filter(filter)
          867  {
          868  while (_locator.isValid() && !_filter.accept(_locator.getElement()))
          869  _locator.progress();
          870  }
          871 
          872  // Accessors
          873  // *********
          874 
          875  public: virtual Type getElement() const
          876  // ************************************
          877  {
          878  return (_locator.isValid()) ? _locator.getElement() : Type();
          879  }
          880 
          881  public: virtual Hurricane::Locator<Type>* getClone() const
          882  // *******************************************************
          883  {
          884  return new Locator(_locator, _filter);
          885  }
          886 
          887  public: virtual Hurricane::Locator<Type>* getLocator() // 21-10-03
          888  // ***************************************************
          889  {
          890  return ( _locator.getLocator()->getLocator() );
          891  }
          892 
          893  // Predicates
          894  // **********
          895 
          896  public: virtual bool isValid() const
          897  // *********************************
          898  {
          899  return _locator.isValid();
          900  }
          901 
          902  // Updators
          903  // ********
          904 
          905  public: virtual void progress()
          906  // ****************************
          907  {
          908  if (_locator.isValid()) {
          909  do {
          910  _locator.progress();
          911  } while (_locator.isValid() && !_filter.accept(_locator.getElement()));
          912  }
          913  }
          914 
          915  };
          916 
          917 // Attributes
          918 // **********
          919 
          920  private: GenericCollection<Type> _collection;
          921  private: GenericFilter<Type> _filter;
          922 
          923 // Constructors
          924 // ************
          925 
          926  public: SubSetCollection()
          927  // ***********************
          928  : Inherit(),
          929  _collection(),
          930  _filter()
          931  {
          932  }
          933 
          934  public: SubSetCollection(const Collection<Type>& collection, const Filter<Type>& filter)
          935  // *************************************************************************************
          936  : Inherit(),
          937  _collection(collection),
          938  _filter(filter)
          939  {
          940  }
          941 
          942  public: SubSetCollection(const SubSetCollection& subSetCollection)
          943  // ***************************************************************
          944  : Inherit(),
          945  _collection(subSetCollection._collection),
          946  _filter(subSetCollection._filter)
          947  {
          948  }
          949 
          950 // Operators
          951 // *********
          952 
          953  public: SubSetCollection& operator=(const SubSetCollection& subSetCollection)
          954  // **************************************************************************
          955  {
          956  _collection = subSetCollection._collection;
          957  _filter = subSetCollection._filter;
          958  return *this;
          959  }
          960 
          961 // Accessors
          962 // *********
          963 
          964  public: virtual Collection<Type>* getClone() const
          965  // ***********************************************
          966  {
          967  return new SubSetCollection(_collection, _filter);
          968  }
          969 
          970  public: virtual Hurricane::Locator<Type>* getLocator() const
          971  // *********************************************************
          972  {
          973  return new Locator(_collection, _filter);
          974  }
          975 
          976 // Accessors
          977 // *********
          978 
          979  public: virtual string _getString() const
          980  // **************************************
          981  {
          982  return "<" + _TName("SubSetCollection") + " " + getString(_collection) + ">";
          983  }
          984 
          985 };
          986 
          987 
          988 
          989 // ****************************************************************************************************
          990 // Generic functions
          991 // ****************************************************************************************************
          992 
          993 
          994 
          995 // ****************************************************************************************************
          996 // Macros declaration
          997 // ****************************************************************************************************
          998 
          999 #define end_for\
          1000 /**************/\
          1001  }\
          1002  }
          1003 
          1004 #define for_each_object(Type, element, collection)\
          1005 /*************************************************/\
          1006 {\
          1007  GenericLocator<Type> _locator = collection.getLocator();\
          1008  while (_locator.isValid()) {\
          1009  Type element = _locator.getElement();\
          1010  _locator.progress();
          1011 
          1012 #define for_each_element(Type, element, collection)\
          1013 /*************************************************/\
          1014 {\
          1015  ElementCollection<Type>::Locator<Type>* _locator = collection.getLocator();\
          1016  while (_locator->isValid()) {\
          1017  Type element = _locator->getElement();\
          1018  _locator->progress();
          1019 
          1020 
          1021 // -------------------------------------------------------------------
          1022 // Template Class : "ForEachIterator"
          1023 
          1024 
          1025 template<typename Element>
          1026 class ForEachIterator {
          1027  public:
          1028  inline ForEachIterator ( GenericCollection<Element> coll );
          1029  inline bool isValid ();
          1030  inline Element operator* ();
          1031  inline Element operator-> ();
          1032  inline ForEachIterator& operator++ (int);
          1033  public:
          1034  GenericCollection<Element> collection;
          1035  GenericLocator<Element> locator;
          1036  Element element;
          1037 };
          1038 
          1039 
          1040 template<typename Element>
          1041 inline ForEachIterator<Element>::ForEachIterator ( GenericCollection<Element> coll )
          1042  : collection(coll)
          1043  , locator(collection.getLocator())
          1044  , element()
          1045 {
          1046  if ( locator.isValid() ) element = locator.getElement();
          1047 }
          1048 
          1049 
          1050 template< typename Element >
          1051 inline bool ForEachIterator<Element>::isValid ()
          1052 {
          1053  if ( locator.isValid() ) element = locator.getElement();
          1054  return locator.isValid();
          1055 }
          1056 
          1057 
          1058 template< typename Element >
          1059 inline Element ForEachIterator<Element>::operator* ()
          1060 {
          1061  return element;
          1062 }
          1063 
          1064 
          1065 template< typename Element >
          1066 inline Element ForEachIterator<Element>::operator-> ()
          1067 {
          1068  return element;
          1069 }
          1070 
          1071 
          1072 template< typename Element >
          1073 inline ForEachIterator<Element>& ForEachIterator<Element>::operator++ (int)
          1074 {
          1075  locator.progress ();
          1076  return *this;
          1077 }
          1078 
          1079 
          1080 #define forEach(type,iterator,collection) \
          1081  for ( ForEachIterator<type> iterator(collection); iterator.isValid() ; iterator++ )
          1082 
          1083 
          1084 } // End of Hurricane namespace.
          1085 
          1086 
          1087 template<typename Type> inline std::string getString ( Hurricane::Collection<Type>& collection )
          1088 { return collection._getString(); }
          1089 
          1090 template<typename Type> inline std::string getString ( Hurricane::Collection<Type>* collection )
          1091 { return collection->_getString(); }
          1092 
          1093 template<typename Type> inline std::string getString ( const Hurricane::Collection<Type>* collection )
          1094 { return collection->_getString(); }
          1095 
          1096 template<typename Type> inline Hurricane::Record* getRecord ( Hurricane::Collection<Type>& collection )
          1097 { return collection._getRecord(); }
          1098 
          1099 template<typename Type> inline Hurricane::Record* getRecord ( Hurricane::Collection<Type>* collection )
          1100 { return collection->_getRecord(); }
          1101 
          1102 template<typename Type> inline Hurricane::Record* getRecord ( const Hurricane::Collection<Type>* collection )
          1103 { return collection->_getRecord(); }
          1104 
          1105 
          1106 template<typename Type>
          1107 inline void jsonWrite ( JsonWriter* w, const std::string& key, Hurricane::GenericCollection<Type> collection )
          1108 {
          1109  if (cdebug.enabled(19))
          1110  cdebug_log(19,0) << "jsonWrite< GenericCollection<" << Hurricane::demangle(typeid(Type).name())
          1111  << "> >(w,key,coll)" << " key:\"" << key << "\"" << std::endl;
          1112  cdebug_tabw(19,1);
          1113 
          1114  w->key( key );
          1115  w->startArray();
          1116  for ( Type element : collection ) jsonWrite( w, element );
          1117  w->endArray();
          1118 
          1119  cdebug_tabw(19,-1);
          1120 }
          1121 
          1122 
          1123 #include "hurricane/MultisetCollection.h"
          1124 #include "hurricane/SetCollection.h"
          1125 #include "hurricane/MapCollection.h"
          1126 #include "hurricane/MultimapCollection.h"
          1127 #include "hurricane/ListCollection.h"
          1128 #include "hurricane/VectorCollection.h"
          1129 
          1130 
          1131 
          1132 
          1133 #endif // HURRICANE_COLLECTION
          1134 
          1135 
          1136 // ****************************************************************************************************
          1137 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
          1138 // ****************************************************************************************************
          Collection description (API)
          Definition: Collection.h:39
          +
          1 // ****************************************************************************************************
          2 // File: ./hurricane/Collection.h
          3 // Authors: R. Escassut
          4 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
          5 //
          6 // This file is part of Hurricane.
          7 //
          8 // Hurricane is free software: you can redistribute it and/or modify it under the terms of the GNU
          9 // Lesser General Public License as published by the Free Software Foundation, either version 3 of the
          10 // License, or (at your option) any later version.
          11 //
          12 // Hurricane is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
          13 // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU
          14 // General Public License for more details.
          15 //
          16 // You should have received a copy of the Lesser GNU General Public License along with Hurricane. If
          17 // not, see <http://www.gnu.org/licenses/>.
          18 // ****************************************************************************************************
          19 
          20 #ifndef HURRICANE_COLLECTION
          21 #define HURRICANE_COLLECTION
          22 
          23 #include "hurricane/Locator.h"
          24 #include "hurricane/Filter.h"
          25 
          26 namespace Hurricane {
          27 
          28 template<class Type> class GenericCollection;
          29 template<class Type, class SubType> class SubTypeCollection;
          30 template<class Type, class SubType> class NotSubTypeCollection;
          31 template<class Type> class SubSetCollection;
          32 
          33 
          34 
          35 // ****************************************************************************************************
          36 // Collection declaration
          37 // ****************************************************************************************************
          38 
          39 template<class Type> class Collection {
          40 // ************************************
          41 
          42 // Constructors
          43 // ************
          44 
          45  protected: Collection()
          46  // ********************
          47  {
          48  }
          49 
          50  private: Collection(const Collection& collection);
          51  // ***********************************************
          52  // not implemented to forbid copy construction
          53  // ***********************************************
          54 
          55 // Destructor
          56 // **********
          57 
          58  public: virtual ~Collection()
          59  // **************************
          60  {
          61  }
          62 
          63 // Operators
          64 // *********
          65 
          66  private: Collection& operator=(const Collection& collection);
          67  // **********************************************************
          68  // not implemented to forbid assignment
          69  // **********************************************************
          70 
          71 // Accessors
          72 // *********
          73 
          74  public: virtual Collection<Type>* getClone() const = 0;
          75 
          76  public: virtual Locator<Type>* getLocator() const = 0;
          77 
          78  public: virtual unsigned getSize() const
          79  // *************************************
          80  {
          81  unsigned size = 0;
          82  // we use a GenericLocator to delete the locator allocated by getLocator()
          83  GenericLocator<Type> locator = getLocator();
          84  while (locator.isValid()) {
          85  size++;
          86  locator.progress();
          87  }
          88  return size;
          89  }
          90 
          91  public: Type getFirst() const
          92  // **************************
          93  {
          94  // we use a GenericLocator to delete the locator allocated by getLocator()
          95  return GenericLocator<Type>(getLocator()).getElement();
          96  }
          97 
          98  public: GenericCollection<Type> getSubSet(const Filter<Type>& filter) const
          99  // ************************************************************************
          100  {
          101  return SubSetCollection<Type>(*this, filter);
          102  }
          103 
          104  public: template<class SubType> GenericCollection<SubType> getSubSet() const
          105  // *************************************************************************
          106  {
          108  }
          109 
          110  public: template<class SubType>
          112  // ******************************************************************************
          113  {
          114  return getSubSet<SubType>().getSubSet(filter);
          115  }
          116 
          117  public: template<class SubType> GenericCollection<SubType> getNotSubSet() const
          118  // ****************************************************************************
          119  {
          120  return NotSubTypeCollection<Type, SubType>(this);
          121  }
          122 
          123 // Predicates
          124 // **********
          125 
          126  public: bool isEmpty() const
          127  // *************************
          128  {
          129  // we use a GenericLocator to delete the locator allocated by getLocator()
          130  return !GenericLocator<Type>(getLocator()).isValid();
          131  }
          132 
          133 // Utilitarians
          134 // ************
          135 
          136  public: void fill(list<Type>& list) const
          137  // **************************************
          138  {
          139  GenericLocator<Type> locator = getLocator();
          140  while (locator.isValid()) {
          141  list.push_back(locator.getElement());
          142  locator.progress();
          143  }
          144  }
          145 
          146  public: void fill(set<Type>& set) const
          147  // ************************************
          148  {
          149  GenericLocator<Type> locator = getLocator();
          150  while (locator.isValid()) {
          151  set.insert(locator.getElement());
          152  locator.progress();
          153  }
          154  }
          155 
          156  public: template<class Compare> void fill(set<Type, Compare>& set) const
          157  // *********************************************************************
          158  {
          159  GenericLocator<Type> locator = getLocator();
          160  while (locator.isValid()) {
          161  set.insert(locator.getElement());
          162  locator.progress();
          163  }
          164  }
          165 
          166  public: void fill(vector<Type>& vector) const
          167  // ******************************************
          168  {
          169  GenericLocator<Type> locator = getLocator();
          170  while (locator.isValid()) {
          171  vector.push_back(locator.getElement());
          172  locator.progress();
          173  }
          174  }
          175 
          176 // Others
          177 // ******
          178 
          179  public: virtual string _getTypeName() const
          180  // **************************************
          181  {
          182  return _TName("Collection<Type>");
          183  };
          184 
          185  public: virtual string _getString() const = 0;
          186 
          187  public: Record* _getRecord() const
          188  // *************************
          189  {
          190  Record* record = NULL;
          191  if (!isEmpty()) {
          192  record = new Record(getString(this));
          193  unsigned n = 1;
          194  GenericLocator<Type> locator = getLocator();
          195  while (locator.isValid()) {
          196  string slotName = getString(n++);
          197  Type slotRecord = locator.getElement();
          198  record->add(getSlot(slotName, slotRecord));
          199  locator.progress();
          200  }
          201  }
          202  return record;
          203  }
          204 
          205  public:
          206  class iterator {
          207  public:
          208  iterator ( Locator<Type>* l ) : _locator(l) {}
          209  ~iterator () { delete _locator; }
          210  bool operator== ( const iterator& o) const { return not (*this != o); }
          211  iterator& operator++ () { _locator->progress(); return *this; }
          212  Type operator* () { return _locator->getElement(); }
          213  bool operator!= ( const iterator& o ) const
          214  {
          215  bool invalidA = ( _locator == NULL) or not ( _locator->isValid());
          216  bool invalidB = (o._locator == NULL) or not (o._locator->isValid());
          217  return invalidA != invalidB or (not invalidA and not invalidB and _locator != o._locator);
          218  }
          219  private:
          220  Locator<Type>* _locator;
          221  };
          222 
          223  public:
          224  iterator begin() { return iterator(getLocator()); }
          225  iterator end() { return iterator(NULL); }
          226  bool empty() { return begin() == end(); }
          227 };
          228 
          229 
          230 
          231 // ****************************************************************************************************
          232 // GenericCollection declaration
          233 // ****************************************************************************************************
          234 
          235 template<class Type> class GenericCollection : public Collection<Type> {
          236 // *******************************************************************
          237 
          238 // Types
          239 // *****
          240 
          241  public: typedef Collection<Type> Inherit;
          242 
          243 // Attributes
          244 // **********
          245 
          246  private: Collection<Type>* _collection;
          247 
          248 // Constructors
          249 // ************
          250 
          251  public: GenericCollection()
          252  // ***********************
          253  : Inherit(),
          254  _collection(NULL)
          255  {
          256  }
          257 
          258  public: GenericCollection(const Collection<Type>& collection)
          259  // **********************************************************
          260  : Inherit(),
          261  _collection(collection.getClone())
          262  {
          263  }
          264 
          265  public: GenericCollection(const GenericCollection<Type>& genericCollection)
          266  // ************************************************************************
          267  : Inherit(),
          268  _collection(genericCollection.getClone())
          269  {
          270  }
          271 
          272  public: GenericCollection(Collection<Type>* collection)
          273  // *************************************************************
          274  // CAUTION : collection will be deleted by the GenericCollection
          275  // *************************************************************
          276  : Inherit(),
          277  _collection(collection)
          278  {
          279  }
          280 
          281 // Destructor
          282 // **********
          283 
          284  public: virtual ~GenericCollection()
          285  // *********************************
          286  {
          287  if (_collection) delete _collection;
          288  }
          289 
          290 // Operators
          291 // *********
          292 
          293  public: GenericCollection& operator=(const Collection<Type>& collection)
          294  // *********************************************************************
          295  {
          296  if (_collection) delete _collection;
          297  _collection = collection.getClone();
          298  return *this;
          299  }
          300 
          301  public: GenericCollection& operator=(const GenericCollection& genericCollection)
          302  // *****************************************************************************
          303  {
          304  if (_collection) delete _collection;
          305  _collection = genericCollection.getClone();
          306  return *this;
          307  }
          308 
          309  public: GenericCollection& operator=(Collection<Type>* collection)
          310  // ***************************************************************
          311  // CAUTION : collection will be deleted by the GenericCollection
          312  // ***************************************************************
          313  {
          314  if (_collection) delete _collection;
          315  _collection = collection;
          316  return *this;
          317  }
          318 
          319 // Accessors
          320 // *********
          321 
          322  public: virtual Collection<Type>* getClone() const
          323  // ***********************************************
          324  {
          325  return (_collection) ? _collection->getClone() : NULL;
          326  }
          327 
          328  public: virtual Locator<Type>* getLocator() const
          329  // **********************************************
          330  {
          331  return (_collection) ? _collection->getLocator() : NULL;
          332  }
          333 
          334  public: virtual unsigned getSize() const
          335  // *************************************
          336  {
          337  return (_collection) ? _collection->getSize() : 0;
          338  }
          339 
          340 // Others
          341 // ******
          342 
          343  public: virtual string _getTypeName() const
          344  // **************************************
          345  {
          346  return _TName("GenericCollection");
          347  };
          348 
          349  public: virtual string _getString() const
          350  // **************************************
          351  {
          352  if (!_collection)
          353  return "<" + _getTypeName() + " unbound>";
          354  else
          355  return "<" + _getTypeName()+ " " + getString(_collection) + ">";
          356  }
          357 
          358 };
          359 
          360 
          361 
          362 // ****************************************************************************************************
          363 // ElementCollection declaration
          364 // ****************************************************************************************************
          365 
          366 template<class Type> class ElementCollection : public Collection<Type> {
          367 // *********************************************************************
          368 
          369  // -----------------------------------------------------------------
          370  // Sub-Class : "::ElementCollection::Locator".
          371  public: template<class ElType> class Locator : public Hurricane::Locator<ElType> {
          372 
          373  // Attributes
          374  // **********
          375  protected: const ElType _element;
          376  protected: bool _done;
          377 
          378  // Constructors
          379  // ************
          380  public: Locator ( const ElType _element ) : _element(_element), _done(false) {};
          381  public: Locator ( const Locator &locator ) : _element(locator._element), _done(locator._done) {};
          382 
          383  // Accessors
          384  // *********
          385  public: virtual ElType getElement () const { return const_cast<ElType>(_element); };
          386  public: virtual Locator<ElType>* getClone () const { return new Locator(*this); };
          387  public: virtual bool isValid () const { return !_done; };
          388  public: virtual void progress () { _done = true; };
          389 
          390  // Hurricane Management
          391  // ********************
          392  public: virtual string _getString () const {
          393  if (!_element)
          394  return "<" + _TName("ElementCollection::Locator") + " unbound>";
          395  else
          396  return "<" + _TName("ElementCollection::Locator") + " " + getString(_element) + ">";
          397  }
          398 
          399  };
          400 
          401 // Types
          402 // *****
          403 
          404  public: typedef Collection<Type> Inherit;
          405 
          406 // Attributes
          407 // **********
          408 
          409  private: Type _element;
          410 
          411 // Constructors
          412 // ************
          413 
          414  public: ElementCollection()
          415  // ***********************
          416  : Inherit(),
          417  _element(NULL)
          418  {
          419  }
          420 
          421  public: ElementCollection(const Type element)
          422  // **********************************************************
          423  : Inherit(),
          424  _element(element)
          425  {
          426  }
          427 
          428  public: ElementCollection(const ElementCollection<Type>& elementCollection)
          429  // ************************************************************************
          430  : Inherit(),
          431  _element(elementCollection._element)
          432  {
          433  }
          434 
          435 // Accessors
          436 // *********
          437 
          438  public: virtual Collection<Type>* getClone() const
          439  // ***********************************************
          440  {
          441  return ( new ElementCollection (*this) );
          442  }
          443 
          444  public: virtual Locator<Type>* getLocator() const
          445  // **********************************************
          446  {
          447  return ( new Locator<Type> (_element) );
          448  }
          449 
          450  public: virtual unsigned getSize() const
          451  // *************************************
          452  {
          453  return (_element) ? 1 : 0;
          454  }
          455 
          456 // Others
          457 // ******
          458 
          459  public: virtual string _getString() const
          460  // **************************************
          461  {
          462  if (!_element)
          463  return "<" + _TName("ElementCollection") + " unbound>";
          464  else
          465  return "<" + _TName("ElementCollection") + " " + getString(_element) + ">";
          466  }
          467 
          468 };
          469 
          470 
          471 
          472 // ****************************************************************************************************
          473 // SubTypeCollection declaration
          474 // ****************************************************************************************************
          475 
          476 template<class Type, class SubType> class SubTypeCollection : public Collection<SubType> {
          477 // *************************************************************************************
          478 
          479 // Types
          480 // *****
          481 
          482  public: typedef Collection<SubType> Inherit;
          483 
          484  public: class Locator : public Hurricane::Locator<SubType> {
          485  // *******************************************************
          486 
          487  // Types
          488  // *****
          489 
          490  public: typedef Hurricane::Locator<SubType> Inherit;
          491 
          492  // Attributes
          493  // **********
          494 
          495  private: GenericLocator<Type> _locator;
          496 
          497  // Constructors
          498  // ************
          499 
          500  public: Locator(const GenericCollection<Type>& collection)
          501  // ********************************************************
          502  : Inherit(),
          503  _locator(collection.getLocator())
          504  {
          505  while (_locator.isValid() && !dynamic_cast<SubType>(_locator.getElement()))
          506  _locator.progress();
          507  }
          508 
          509  public: Locator(const GenericLocator<Type>& genericLocator)
          510  // ********************************************************
          511  : Inherit(),
          512  _locator(genericLocator.getClone())
          513  {
          514  while (_locator.isValid() && !dynamic_cast<SubType>(_locator.getElement()))
          515  _locator.progress();
          516  }
          517 
          518  // Accessors
          519  // *********
          520 
          521  public: virtual SubType getElement() const
          522  // ***************************************
          523  {
          524  return (_locator.isValid()) ? (SubType)_locator.getElement() : SubType();
          525  }
          526 
          527  public: virtual Hurricane::Locator<SubType>* getClone() const
          528  // **********************************************************
          529  {
          530  return new Locator(_locator);
          531  }
          532 
          533  public: virtual Hurricane::Locator<SubType>* getLocator() // 21-10-03
          534  // *************************************************
          535  {
          536  return dynamic_cast<Hurricane::Locator<SubType>*> (
          537  _locator.getLocator()->getLocator() );
          538  }
          539 
          540 
          541  // Predicates
          542  // **********
          543 
          544  public: virtual bool isValid() const
          545  // *********************************
          546  {
          547  return _locator.isValid();
          548  }
          549 
          550  // Updators
          551  // ********
          552 
          553  public: virtual void progress()
          554  // ****************************
          555  {
          556  if (_locator.isValid()) {
          557  do {
          558  _locator.progress();
          559  } while (_locator.isValid() && !dynamic_cast<SubType>(_locator.getElement()));
          560  }
          561  }
          562 
          563  };
          564 
          565 // Attributes
          566 // **********
          567 
          568  private: GenericCollection<Type> _collection;
          569 
          570 // Constructors
          571 // ************
          572 
          573  public: SubTypeCollection()
          574  // ********************
          575  : Inherit(),
          576  _collection()
          577  {
          578  }
          579 
          580  public: SubTypeCollection(const Collection<Type>* collection)
          581  // **********************************************************
          582  : Inherit(),
          583  _collection(collection->getClone())
          584  {
          585  }
          586 
          587  public: SubTypeCollection(const GenericCollection<Type>& collection)
          588  // *****************************************************************
          589  : Inherit(),
          590  _collection(collection)
          591  {
          592  }
          593 
          594  public: SubTypeCollection(const SubTypeCollection& subTypeCollection)
          595  // ******************************************************************
          596  : Inherit(),
          597  _collection(subTypeCollection._collection)
          598  {
          599  }
          600 
          601 // Operators
          602 // *********
          603 
          604  public: SubTypeCollection& operator=(const SubTypeCollection& subTypeCollection)
          605  // *****************************************************************************
          606  {
          607  _collection = subTypeCollection._collection;
          608  return *this;
          609  }
          610 
          611 // Accessors
          612 // *********
          613 
          614  public: virtual Collection<SubType>* getClone() const
          615  // **************************************************
          616  {
          617  return new SubTypeCollection(_collection);
          618  }
          619 
          620  public: virtual Hurricane::Locator<SubType>* getLocator() const
          621  // ************************************************************
          622  {
          623  return new Locator(_collection);
          624  }
          625 
          626 // Accessors
          627 // *********
          628 
          629  public: virtual string _getString() const
          630  // **************************************
          631  {
          632  return "<" + _TName("SubTypeCollection") + " " + getString(_collection) + ">";
          633  }
          634 
          635 };
          636 
          637 
          638 // ****************************************************************************************************
          639 // NotSubTypeCollection declaration
          640 // ****************************************************************************************************
          641 
          642 template<class Type, class SubType> class NotSubTypeCollection : public Collection<SubType> {
          643 // ******************************************************************************************
          644 
          645 // Types
          646 // *****
          647 
          648  public: typedef Collection<SubType> Inherit;
          649 
          650  public: class Locator : public Hurricane::Locator<SubType> {
          651  // *******************************************************
          652 
          653  // Types
          654  // *****
          655 
          656  public: typedef Hurricane::Locator<SubType> Inherit;
          657 
          658  // Attributes
          659  // **********
          660 
          661  private: GenericLocator<Type> _locator;
          662 
          663  // Constructors
          664  // ************
          665 
          666  public: Locator(const GenericCollection<Type>& collection)
          667  // ********************************************************
          668  : Inherit(),
          669  _locator(collection.getLocator())
          670  {
          671  while (_locator.isValid() && dynamic_cast<SubType>(_locator.getElement()))
          672  _locator.progress();
          673  }
          674 
          675  public: Locator(const GenericLocator<Type>& genericLocator)
          676  // ********************************************************
          677  : Inherit(),
          678  _locator(genericLocator.getClone())
          679  {
          680  while (_locator.isValid() && !dynamic_cast<SubType>(_locator.getElement()))
          681  _locator.progress();
          682  }
          683 
          684  // Accessors
          685  // *********
          686 
          687  public: virtual SubType getElement() const
          688  // ***************************************
          689  {
          690  return (_locator.isValid()) ? (SubType)_locator.getElement() : SubType();
          691  }
          692 
          693  public: virtual Hurricane::Locator<SubType>* getClone() const
          694  // **********************************************************
          695  {
          696  return new Locator(_locator);
          697  }
          698 
          699  public: virtual Hurricane::Locator<SubType>* getLocator() // 21-10-03
          700  // *************************************************
          701  {
          702  return dynamic_cast<Hurricane::Locator<SubType>*> (
          703  _locator.getLocator()->getLocator() );
          704  }
          705 
          706 
          707  // Predicates
          708  // **********
          709 
          710  public: virtual bool isValid() const
          711  // *********************************
          712  {
          713  return _locator.isValid();
          714  }
          715 
          716  // Updators
          717  // ********
          718 
          719  public: virtual void progress()
          720  // ****************************
          721  {
          722  if (_locator.isValid()) {
          723  do {
          724  _locator.progress();
          725  } while (_locator.isValid() && !dynamic_cast<SubType>(_locator.getElement()));
          726  }
          727  }
          728 
          729  };
          730 
          731 // Attributes
          732 // **********
          733 
          734  private: GenericCollection<Type> _collection;
          735 
          736 // Constructors
          737 // ************
          738 
          739  public: NotSubTypeCollection()
          740  // ********************
          741  : Inherit(),
          742  _collection()
          743  {
          744  }
          745 
          746  public: NotSubTypeCollection(const Collection<Type>* collection)
          747  // **********************************************************
          748  : Inherit(),
          749  _collection(collection->getClone())
          750  {
          751  }
          752 
          753  public: NotSubTypeCollection(const GenericCollection<Type>& collection)
          754  // *****************************************************************
          755  : Inherit(),
          756  _collection(collection)
          757  {
          758  }
          759 
          760  public: NotSubTypeCollection(const NotSubTypeCollection& subTypeCollection)
          761  // ******************************************************************
          762  : Inherit(),
          763  _collection(subTypeCollection._collection)
          764  {
          765  }
          766 
          767 // Operators
          768 // *********
          769 
          770  public: NotSubTypeCollection& operator=(const NotSubTypeCollection& subTypeCollection)
          771  // *****************************************************************************
          772  {
          773  _collection = subTypeCollection._collection;
          774  return *this;
          775  }
          776 
          777 // Accessors
          778 // *********
          779 
          780  public: virtual Collection<SubType>* getClone() const
          781  // **************************************************
          782  {
          783  return new NotSubTypeCollection(_collection);
          784  }
          785 
          786  public: virtual Hurricane::Locator<SubType>* getLocator() const
          787  // ************************************************************
          788  {
          789  return new Locator(_collection);
          790  }
          791 
          792 // Accessors
          793 // *********
          794 
          795  public: virtual string _getString() const
          796  // **************************************
          797  {
          798  return "<" + _TName("NotSubTypeCollection") + " " + getString(_collection) + ">";
          799  }
          800 
          801 };
          802 
          803 
          804 // ****************************************************************************************************
          805 // SubSetCollection implementation
          806 // ****************************************************************************************************
          807 
          808 template<class Type> class SubSetCollection : public Collection<Type> {
          809 // ******************************************************************
          810 
          811 // Types
          812 // *****
          813 
          814  public: typedef Collection<Type> Inherit;
          815 
          816  public: class Locator : public Hurricane::Locator<Type> {
          817  // ****************************************************
          818 
          819  // Types
          820  // *****
          821 
          822  public: typedef Hurricane::Locator<Type> Inherit;
          823 
          824  // Attributes
          825  // **********
          826 
          827  private: GenericLocator<Type> _locator;
          828  private: GenericFilter<Type> _filter;
          829 
          830  // Constructors
          831  // ************
          832 
          833  public: Locator(const SubSetCollection<Type>& collection, const Filter<Type>& filter)
          834  // **********************************************************************************
          835  : Inherit(),
          836  _locator(collection.getLocator()),
          837  _filter(filter)
          838  {
          839  while (_locator.isValid() && !_filter.accept(_locator.getElement()))
          840  _locator.progress();
          841  }
          842 
          843  public: Locator(const Collection<Type>& collection, const Filter<Type>& filter)
          844  // ****************************************************************************
          845  : Inherit(),
          846  _locator(collection.getLocator()),
          847  _filter(filter)
          848  {
          849  while (_locator.isValid() && !_filter.accept(_locator.getElement()))
          850  _locator.progress();
          851  }
          852 
          853  public: Locator(const GenericCollection<Type>& genericCollection, const Filter<Type>& filter)
          854  // ******************************************************************************************
          855  : Inherit(),
          856  _locator(genericCollection.getLocator()),
          857  _filter(filter)
          858  {
          859  while (_locator.isValid() && !_filter.accept(_locator.getElement()))
          860  _locator.progress();
          861  }
          862 
          863  public: Locator(const GenericLocator<Type>& genericLocator, const Filter<Type>& filter)
          864  // ************************************************************************************
          865  : Inherit(),
          866  _locator(genericLocator),
          867  _filter(filter)
          868  {
          869  while (_locator.isValid() && !_filter.accept(_locator.getElement()))
          870  _locator.progress();
          871  }
          872 
          873  // Accessors
          874  // *********
          875 
          876  public: virtual Type getElement() const
          877  // ************************************
          878  {
          879  return (_locator.isValid()) ? _locator.getElement() : Type();
          880  }
          881 
          882  public: virtual Hurricane::Locator<Type>* getClone() const
          883  // *******************************************************
          884  {
          885  return new Locator(_locator, _filter);
          886  }
          887 
          888  public: virtual Hurricane::Locator<Type>* getLocator() // 21-10-03
          889  // ***************************************************
          890  {
          891  return ( _locator.getLocator()->getLocator() );
          892  }
          893 
          894  // Predicates
          895  // **********
          896 
          897  public: virtual bool isValid() const
          898  // *********************************
          899  {
          900  return _locator.isValid();
          901  }
          902 
          903  // Updators
          904  // ********
          905 
          906  public: virtual void progress()
          907  // ****************************
          908  {
          909  if (_locator.isValid()) {
          910  do {
          911  _locator.progress();
          912  } while (_locator.isValid() && !_filter.accept(_locator.getElement()));
          913  }
          914  }
          915 
          916  };
          917 
          918 // Attributes
          919 // **********
          920 
          921  private: GenericCollection<Type> _collection;
          922  private: GenericFilter<Type> _filter;
          923 
          924 // Constructors
          925 // ************
          926 
          927  public: SubSetCollection()
          928  // ***********************
          929  : Inherit(),
          930  _collection(),
          931  _filter()
          932  {
          933  }
          934 
          935  public: SubSetCollection(const Collection<Type>& collection, const Filter<Type>& filter)
          936  // *************************************************************************************
          937  : Inherit(),
          938  _collection(collection),
          939  _filter(filter)
          940  {
          941  }
          942 
          943  public: SubSetCollection(const SubSetCollection& subSetCollection)
          944  // ***************************************************************
          945  : Inherit(),
          946  _collection(subSetCollection._collection),
          947  _filter(subSetCollection._filter)
          948  {
          949  }
          950 
          951 // Operators
          952 // *********
          953 
          954  public: SubSetCollection& operator=(const SubSetCollection& subSetCollection)
          955  // **************************************************************************
          956  {
          957  _collection = subSetCollection._collection;
          958  _filter = subSetCollection._filter;
          959  return *this;
          960  }
          961 
          962 // Accessors
          963 // *********
          964 
          965  public: virtual Collection<Type>* getClone() const
          966  // ***********************************************
          967  {
          968  return new SubSetCollection(_collection, _filter);
          969  }
          970 
          971  public: virtual Hurricane::Locator<Type>* getLocator() const
          972  // *********************************************************
          973  {
          974  return new Locator(_collection, _filter);
          975  }
          976 
          977 // Accessors
          978 // *********
          979 
          980  public: virtual string _getString() const
          981  // **************************************
          982  {
          983  return "<" + _TName("SubSetCollection") + " " + getString(_collection) + ">";
          984  }
          985 
          986 };
          987 
          988 
          989 
          990 // ****************************************************************************************************
          991 // Generic functions
          992 // ****************************************************************************************************
          993 
          994 
          995 
          996 // ****************************************************************************************************
          997 // Macros declaration
          998 // ****************************************************************************************************
          999 
          1000 #define end_for\
          1001 /**************/\
          1002  }\
          1003  }
          1004 
          1005 #define for_each_object(Type, element, collection)\
          1006 /*************************************************/\
          1007 {\
          1008  GenericLocator<Type> _locator = collection.getLocator();\
          1009  while (_locator.isValid()) {\
          1010  Type element = _locator.getElement();\
          1011  _locator.progress();
          1012 
          1013 #define for_each_element(Type, element, collection)\
          1014 /*************************************************/\
          1015 {\
          1016  ElementCollection<Type>::Locator<Type>* _locator = collection.getLocator();\
          1017  while (_locator->isValid()) {\
          1018  Type element = _locator->getElement();\
          1019  _locator->progress();
          1020 
          1021 
          1022 // -------------------------------------------------------------------
          1023 // Template Class : "ForEachIterator"
          1024 
          1025 
          1026 template<typename Element>
          1027 class ForEachIterator {
          1028  public:
          1029  inline ForEachIterator ( GenericCollection<Element> coll );
          1030  inline bool isValid ();
          1031  inline Element operator* ();
          1032  inline Element operator-> ();
          1033  inline ForEachIterator& operator++ (int);
          1034  public:
          1035  GenericCollection<Element> collection;
          1036  GenericLocator<Element> locator;
          1037  Element element;
          1038 };
          1039 
          1040 
          1041 template<typename Element>
          1042 inline ForEachIterator<Element>::ForEachIterator ( GenericCollection<Element> coll )
          1043  : collection(coll)
          1044  , locator(collection.getLocator())
          1045  , element()
          1046 {
          1047  if ( locator.isValid() ) element = locator.getElement();
          1048 }
          1049 
          1050 
          1051 template< typename Element >
          1052 inline bool ForEachIterator<Element>::isValid ()
          1053 {
          1054  if ( locator.isValid() ) element = locator.getElement();
          1055  return locator.isValid();
          1056 }
          1057 
          1058 
          1059 template< typename Element >
          1060 inline Element ForEachIterator<Element>::operator* ()
          1061 {
          1062  return element;
          1063 }
          1064 
          1065 
          1066 template< typename Element >
          1067 inline Element ForEachIterator<Element>::operator-> ()
          1068 {
          1069  return element;
          1070 }
          1071 
          1072 
          1073 template< typename Element >
          1074 inline ForEachIterator<Element>& ForEachIterator<Element>::operator++ (int)
          1075 {
          1076  locator.progress ();
          1077  return *this;
          1078 }
          1079 
          1080 
          1081 #define forEach(type,iterator,collection) \
          1082  for ( ForEachIterator<type> iterator(collection); iterator.isValid() ; iterator++ )
          1083 
          1084 
          1085 } // End of Hurricane namespace.
          1086 
          1087 
          1088 template<typename Type> inline std::string getString ( Hurricane::Collection<Type>& collection )
          1089 { return collection._getString(); }
          1090 
          1091 template<typename Type> inline std::string getString ( Hurricane::Collection<Type>* collection )
          1092 { return collection->_getString(); }
          1093 
          1094 template<typename Type> inline std::string getString ( const Hurricane::Collection<Type>* collection )
          1095 { return collection->_getString(); }
          1096 
          1097 template<typename Type> inline Hurricane::Record* getRecord ( Hurricane::Collection<Type>& collection )
          1098 { return collection._getRecord(); }
          1099 
          1100 template<typename Type> inline Hurricane::Record* getRecord ( Hurricane::Collection<Type>* collection )
          1101 { return collection->_getRecord(); }
          1102 
          1103 template<typename Type> inline Hurricane::Record* getRecord ( const Hurricane::Collection<Type>* collection )
          1104 { return collection->_getRecord(); }
          1105 
          1106 
          1107 template<typename Type>
          1108 inline void jsonWrite ( JsonWriter* w, const std::string& key, Hurricane::GenericCollection<Type> collection )
          1109 {
          1110  if (cdebug.enabled(19))
          1111  cdebug_log(19,0) << "jsonWrite< GenericCollection<" << Hurricane::demangle(typeid(Type).name())
          1112  << "> >(w,key,coll)" << " key:\"" << key << "\"" << std::endl;
          1113  cdebug_tabw(19,1);
          1114 
          1115  w->key( key );
          1116  w->startArray();
          1117  for ( Type element : collection ) jsonWrite( w, element );
          1118  w->endArray();
          1119 
          1120  cdebug_tabw(19,-1);
          1121 }
          1122 
          1123 
          1124 #include "hurricane/MultisetCollection.h"
          1125 #include "hurricane/SetCollection.h"
          1126 #include "hurricane/MapCollection.h"
          1127 #include "hurricane/MultimapCollection.h"
          1128 #include "hurricane/ListCollection.h"
          1129 #include "hurricane/VectorCollection.h"
          1130 
          1131 
          1132 
          1133 
          1134 #endif // HURRICANE_COLLECTION
          1135 
          1136 
          1137 // ****************************************************************************************************
          1138 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
          1139 // ****************************************************************************************************
          Collection description (API)
          Definition: Collection.h:39
          virtual bool isValid() const =0
          Applies a Type Filter to a Collection.
          Definition: Collection.h:29
          Type getFirst() const
          Definition: Collection.h:91
          Generic Locator auto-pointer.
          Definition: Locator.h:113
          string demangle(const char *symbol)
          Applies a Filter to a Collection.
          Definition: Collection.h:31
          -
          SubSetCollection(const SubSetCollection &subSetCollection)
          Definition: Collection.h:942
          +
          SubSetCollection(const SubSetCollection &subSetCollection)
          Definition: Collection.h:943
          virtual Locator< Type > * getLocator() const =0
          -
          SubTypeCollection(const SubTypeCollection &subTypeCollection)
          Definition: Collection.h:593
          +
          SubTypeCollection(const SubTypeCollection &subTypeCollection)
          Definition: Collection.h:594
          GenericCollection< SubType > getSubSet(const Filter< SubType > &filter) const
          Definition: Collection.h:111
          Generic Collection auto-pointer.
          Definition: Collection.h:28
          virtual ~Collection()
          Definition: Collection.h:58
          -
          SubTypeCollection(const Collection< Type > *collection)
          Definition: Collection.h:579
          +
          SubTypeCollection(const Collection< Type > *collection)
          Definition: Collection.h:580
          virtual unsigned getSize() const
          Definition: Collection.h:78
          Locator description (API)
          Definition: Locator.h:33
          GenericCollection< Type > getSubSet(const Filter< Type > &filter) const
          Definition: Collection.h:98
          GenericCollection< SubType > getSubSet() const
          Definition: Collection.h:104
          -
          GenericCollection(Collection< Type > *collection)
          Definition: Collection.h:271
          -
          GenericCollection(const GenericCollection< Type > &genericCollection)
          Definition: Collection.h:264
          -
          GenericCollection(const Collection< Type > &collection)
          Definition: Collection.h:257
          +
          GenericCollection(Collection< Type > *collection)
          Definition: Collection.h:272
          +
          GenericCollection(const GenericCollection< Type > &genericCollection)
          Definition: Collection.h:265
          +
          GenericCollection(const Collection< Type > &collection)
          Definition: Collection.h:258
          Filter description (API)
          Definition: Filter.h:36
          virtual Collection< Type > * getClone() const =0
          The namespace dedicated to Hurricane.
          Definition: Generalities.dox:5
          -
          SubSetCollection(const Collection< Type > &collection, const Filter< Type > &filter)
          Definition: Collection.h:934
          -
          SubTypeCollection(const GenericCollection< Type > &collection)
          Definition: Collection.h:586
          +
          SubSetCollection(const Collection< Type > &collection, const Filter< Type > &filter)
          Definition: Collection.h:935
          +
          SubTypeCollection(const GenericCollection< Type > &collection)
          Definition: Collection.h:587
          bool enabled() const
          Definition: Commons.h:1001


          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Commons_8h_source.html b/hurricane/doc/hurricane/html/Commons_8h_source.html index d420ead5..7db56f32 100644 --- a/hurricane/doc/hurricane/html/Commons_8h_source.html +++ b/hurricane/doc/hurricane/html/Commons_8h_source.html @@ -63,7 +63,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Component_8h_source.html b/hurricane/doc/hurricane/html/Component_8h_source.html index b77f2e60..74ff4473 100644 --- a/hurricane/doc/hurricane/html/Component_8h_source.html +++ b/hurricane/doc/hurricane/html/Component_8h_source.html @@ -76,7 +76,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Components_8h_source.html b/hurricane/doc/hurricane/html/Components_8h_source.html index 7ca63813..cab03c9d 100644 --- a/hurricane/doc/hurricane/html/Components_8h_source.html +++ b/hurricane/doc/hurricane/html/Components_8h_source.html @@ -57,7 +57,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/ContactLayer_8h_source.html b/hurricane/doc/hurricane/html/ContactLayer_8h_source.html index e342eb69..5fb7e559 100644 --- a/hurricane/doc/hurricane/html/ContactLayer_8h_source.html +++ b/hurricane/doc/hurricane/html/ContactLayer_8h_source.html @@ -59,7 +59,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Contact_8h_source.html b/hurricane/doc/hurricane/html/Contact_8h_source.html index 7bea29ad..29af1af7 100644 --- a/hurricane/doc/hurricane/html/Contact_8h_source.html +++ b/hurricane/doc/hurricane/html/Contact_8h_source.html @@ -81,7 +81,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Contacts_8h_source.html b/hurricane/doc/hurricane/html/Contacts_8h_source.html index 70f485fe..dc75c463 100644 --- a/hurricane/doc/hurricane/html/Contacts_8h_source.html +++ b/hurricane/doc/hurricane/html/Contacts_8h_source.html @@ -57,7 +57,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/DBo_8h_source.html b/hurricane/doc/hurricane/html/DBo_8h_source.html index 5a2963c9..aa6131bf 100644 --- a/hurricane/doc/hurricane/html/DBo_8h_source.html +++ b/hurricane/doc/hurricane/html/DBo_8h_source.html @@ -44,14 +44,12 @@ $(function() {
          DBo.h
          -
          1 // -*- C++ -*-
          2 //
          3 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
          4 //
          5 // This file is part of Hurricane.
          6 //
          7 // Hurricane is free software: you can redistribute it and/or modify
          8 // it under the terms of the GNU Lesser General Public License as
          9 // published by the Free Software Foundation, either version 3 of the
          10 // License, or (at your option) any later version.
          11 //
          12 // Hurricane is distributed in the hope that it will be useful, but
          13 // WITHOUT ANY WARRANTY; without even the implied warranty of MERCHAN-
          14 // TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU
          15 // General Public License for more details.
          16 //
          17 // You should have received a copy of the Lesser GNU General Public
          18 // License along with Hurricane. If not, see
          19 // <http://www.gnu.org/licenses/>.
          20 //
          21 // +-----------------------------------------------------------------+
          22 // | H U R R I C A N E |
          23 // | V L S I B a c k e n d D a t a - B a s e |
          24 // | |
          25 // | Author : Remy Escassut |
          26 // | E-mail : Jean-Paul.Chaput@lip6.fr |
          27 // | =============================================================== |
          28 // | C++ Header : "./hurricane/DBo.h" |
          29 // +-----------------------------------------------------------------+
          30 
          31 
          32 #ifndef HURRICANE_DBO_H
          33 #define HURRICANE_DBO_H
          34 
          35 #include "hurricane/DBos.h"
          36 #include "hurricane/Name.h"
          37 #include "hurricane/Properties.h"
          38 
          39 
          40 namespace Hurricane {
          41 
          42 
          43 // -------------------------------------------------------------------
          44 // Class : "Hurricane::DBo".
          45 
          46  class DBo {
          47  public:
          48  virtual void destroy ();
          49  inline set<Property*>& _getPropertySet ();
          50  void _onDestroyed ( Property* property );
          51  Property* getProperty ( const Name& ) const;
          52  Properties getProperties () const;
          53  inline bool hasProperty () const;
          54  void put ( Property* );
          55  void remove ( Property* );
          56  void removeProperty ( const Name& );
          57  void clearProperties ();
          58  virtual string _getTypeName () const;
          59  virtual string _getString () const;
          60  virtual Record* _getRecord () const;
          61  virtual void _toJson ( JsonWriter* ) const;
          62  virtual void _toJsonCollections ( JsonWriter* ) const;
          63  virtual void _toJsonSignature ( JsonWriter* ) const;
          64  void toJson ( JsonWriter* ) const;
          65  void toJsonSignature ( JsonWriter* ) const;
          66 
          67  private:
          68  mutable set<Property*> _propertySet;
          69 
          70  protected:
          71  DBo ();
          72  virtual ~DBo ();
          73  virtual void _postCreate ();
          74  virtual void _preDestroy ();
          75 
          76  private:
          77  DBo ( const DBo& );
          78  DBo& operator= ( const DBo& );
          79  };
          80 
          81 
          82 // Inline Functions.
          83  inline set<Property*>& DBo::_getPropertySet () { return _propertySet; }
          84  inline bool DBo::hasProperty () const { return !_propertySet.empty(); }
          85 
          86 
          87 // -------------------------------------------------------------------
          88 // Class : "Hurricane::JsonDBo".
          89 
          90  class JsonDBo : public JsonObject {
          91  public:
          92  JsonDBo ( unsigned int flags );
          93  template<typename T> inline void update ( JsonStack&, T );
          94  };
          95 
          96 
          97  template<typename T> inline void JsonDBo::update ( JsonStack& stack, T hobject )
          98  {
          99  JsonObject::update<T>( stack, hobject );
          100  stack.push_back_dbo( dynamic_cast<DBo*>(hobject) );
          101  }
          102 
          103 
          104 } // Hurricane namespace.
          105 
          106 INSPECTOR_P_SUPPORT(Hurricane::DBo);
          107 
          108 #endif // HURRICANE_DBO_H
          Support for JSON export.
          Definition: JsonObject.h:83
          -
          void removeProperty(const Name &)
          +
          1 // -*- C++ -*-
          2 //
          3 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
          4 //
          5 // This file is part of Hurricane.
          6 //
          7 // Hurricane is free software: you can redistribute it and/or modify
          8 // it under the terms of the GNU Lesser General Public License as
          9 // published by the Free Software Foundation, either version 3 of the
          10 // License, or (at your option) any later version.
          11 //
          12 // Hurricane is distributed in the hope that it will be useful, but
          13 // WITHOUT ANY WARRANTY; without even the implied warranty of MERCHAN-
          14 // TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU
          15 // General Public License for more details.
          16 //
          17 // You should have received a copy of the Lesser GNU General Public
          18 // License along with Hurricane. If not, see
          19 // <http://www.gnu.org/licenses/>.
          20 //
          21 // +-----------------------------------------------------------------+
          22 // | H U R R I C A N E |
          23 // | V L S I B a c k e n d D a t a - B a s e |
          24 // | |
          25 // | Author : Remy Escassut |
          26 // | E-mail : Jean-Paul.Chaput@lip6.fr |
          27 // | =============================================================== |
          28 // | C++ Header : "./hurricane/DBo.h" |
          29 // +-----------------------------------------------------------------+
          30 
          31 
          32 #ifndef HURRICANE_DBO_H
          33 #define HURRICANE_DBO_H
          34 
          35 #include "hurricane/DBos.h"
          36 #include "hurricane/Name.h"
          37 #include "hurricane/Properties.h"
          38 
          39 
          40 namespace Hurricane {
          41 
          42 
          43 // -------------------------------------------------------------------
          44 // Class : "Hurricane::DBo".
          45 
          46  class DBo {
          47  public:
          48  enum DBoFlags { ForcedIdMode = (1<<0)
          49  , NextIdSet = (1<<1)
          50  };
          51  public:
          52  static void setMemoryLimit ( unsigned int );
          53  static void setIdCounterLimit ( unsigned int );
          54  static unsigned int getIdCounter ();
          55  unsigned int getNextId ();
          56  static void setNextId ( unsigned int );
          57  static bool inForcedIdMode ();
          58  static void enableForcedIdMode ();
          59  static void disableForcedIdMode ();
          60  static void useIdCounter2 ();
          61  public:
          62  virtual void destroy ();
          63  inline set<Property*>& _getPropertySet ();
          64  void _onDestroyed ( Property* property );
          65  inline unsigned int getId () const;
          66  Property* getProperty ( const Name& ) const;
          67  Properties getProperties () const;
          68  inline bool hasProperty () const;
          69  void setId ( unsigned int );
          70  void put ( Property* );
          71  void remove ( Property* );
          72  void removeProperty ( const Name& );
          73  void clearProperties ();
          74  virtual string _getTypeName () const;
          75  virtual string _getString () const;
          76  virtual Record* _getRecord () const;
          77  virtual void _toJson ( JsonWriter* ) const;
          78  virtual void _toJsonCollections ( JsonWriter* ) const;
          79  virtual void _toJsonSignature ( JsonWriter* ) const;
          80  void toJson ( JsonWriter* ) const;
          81  void toJsonSignature ( JsonWriter* ) const;
          82  protected:
          83  DBo ();
          84  virtual ~DBo ();
          85  virtual void _postCreate ();
          86  virtual void _preDestroy ();
          87  private:
          88  DBo ( const DBo& );
          89  DBo& operator= ( const DBo& );
          90  private:
          91  static unsigned int _memoryLimit;
          92  static unsigned long _flags;
          93  static unsigned int _nextId;
          94  static unsigned int _idCounter;
          95  static unsigned int _idCounterLimit;
          96  unsigned int _id;
          97  mutable set<Property*> _propertySet;
          98  public:
          99  struct CompareById : public std::binary_function<const DBo*,const DBo*,bool> {
          100  inline bool operator() ( const DBo* lhs, const DBo* rhs ) const;
          101  };
          102  };
          103 
          104 
          105 // Inline Functions.
          106  inline set<Property*>& DBo::_getPropertySet () { return _propertySet; }
          107  inline bool DBo::hasProperty () const { return !_propertySet.empty(); }
          108  inline unsigned int DBo::getId () const { return _id; }
          109 
          110  inline bool DBo::CompareById::operator() ( const DBo* lhs, const DBo* rhs ) const
          111  { return ((lhs)?lhs->getId():0) < ((rhs)?rhs->getId():0); }
          112 
          113 
          114 // -------------------------------------------------------------------
          115 // Class : "Hurricane::JsonDBo".
          116 
          117  class JsonDBo : public JsonObject {
          118  public:
          119  JsonDBo ( unsigned int flags );
          120  template<typename T> inline void update ( JsonStack&, T );
          121  };
          122 
          123 
          124  template<typename T> inline void JsonDBo::update ( JsonStack& stack, T hobject )
          125  {
          126  JsonObject::update<T>( stack, hobject );
          127  stack.push_back_dbo( dynamic_cast<DBo*>(hobject) );
          128  }
          129 
          130 
          131 } // Hurricane namespace.
          132 
          133 INSPECTOR_P_SUPPORT(Hurricane::DBo);
          134 
          135 #endif // HURRICANE_DBO_H
          void removeProperty(const Name &)
          Name description (API)
          Definition: Name.h:36
          DataBase object root class (API).
          Definition: DBo.h:46
          void clearProperties()
          -
          bool hasProperty() const
          Definition: DBo.h:84
          +
          bool hasProperty() const
          Definition: DBo.h:107
          Generic Collection auto-pointer.
          Definition: Collection.h:28
          -
          JSON Parser Stack.
          Definition: JsonObject.h:249
          virtual void destroy()
          Property description (API)
          Definition: Property.h:58
          Property * getProperty(const Name &) const
          @@ -63,7 +61,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/DBos_8h_source.html b/hurricane/doc/hurricane/html/DBos_8h_source.html index 77040f19..045e2398 100644 --- a/hurricane/doc/hurricane/html/DBos_8h_source.html +++ b/hurricane/doc/hurricane/html/DBos_8h_source.html @@ -57,7 +57,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/DataBase_8h_source.html b/hurricane/doc/hurricane/html/DataBase_8h_source.html index f15c7324..6083619c 100644 --- a/hurricane/doc/hurricane/html/DataBase_8h_source.html +++ b/hurricane/doc/hurricane/html/DataBase_8h_source.html @@ -59,7 +59,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/DbU_8h_source.html b/hurricane/doc/hurricane/html/DbU_8h_source.html index 4be4e898..24de6f41 100644 --- a/hurricane/doc/hurricane/html/DbU_8h_source.html +++ b/hurricane/doc/hurricane/html/DbU_8h_source.html @@ -98,7 +98,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/DebugSession_8h_source.html b/hurricane/doc/hurricane/html/DebugSession_8h_source.html index f8a94c2b..554efac9 100644 --- a/hurricane/doc/hurricane/html/DebugSession_8h_source.html +++ b/hurricane/doc/hurricane/html/DebugSession_8h_source.html @@ -62,7 +62,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Diagonal_8h_source.html b/hurricane/doc/hurricane/html/Diagonal_8h_source.html index b9fd9aec..84c68ca7 100644 --- a/hurricane/doc/hurricane/html/Diagonal_8h_source.html +++ b/hurricane/doc/hurricane/html/Diagonal_8h_source.html @@ -62,7 +62,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/DiffusionLayer_8h_source.html b/hurricane/doc/hurricane/html/DiffusionLayer_8h_source.html index 40e2e4a8..b1ec678e 100644 --- a/hurricane/doc/hurricane/html/DiffusionLayer_8h_source.html +++ b/hurricane/doc/hurricane/html/DiffusionLayer_8h_source.html @@ -59,7 +59,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Entities_8h_source.html b/hurricane/doc/hurricane/html/Entities_8h_source.html index 81c020d8..cda4af08 100644 --- a/hurricane/doc/hurricane/html/Entities_8h_source.html +++ b/hurricane/doc/hurricane/html/Entities_8h_source.html @@ -44,12 +44,12 @@ $(function() {
          Entities.h
          -
          1 // ****************************************************************************************************
          2 // File: ./hurricane/Entities.h
          3 // Authors: R. Escassut
          4 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
          5 //
          6 // This file is part of Hurricane.
          7 //
          8 // Hurricane is free software: you can redistribute it and/or modify it under the terms of the GNU
          9 // Lesser General Public License as published by the Free Software Foundation, either version 3 of the
          10 // License, or (at your option) any later version.
          11 //
          12 // Hurricane is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
          13 // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU
          14 // General Public License for more details.
          15 //
          16 // You should have received a copy of the Lesser GNU General Public License along with Hurricane. If
          17 // not, see <http://www.gnu.org/licenses/>.
          18 // ****************************************************************************************************
          19 
          20 #ifndef HURRICANE_ENTITIES
          21 #define HURRICANE_ENTITIES
          22 
          23 #include "hurricane/Collection.h"
          24 
          25 namespace Hurricane {
          26 
          27 class Entity;
          28 
          29 
          30 
          31 // ****************************************************************************************************
          32 // Entities declaration
          33 // ****************************************************************************************************
          34 
          36 
          37 
          38 
          39 // ****************************************************************************************************
          40 // EntityLocator declaration
          41 // ****************************************************************************************************
          42 
          44 
          45 
          46 
          47 // ****************************************************************************************************
          48 // EntityFilter declaration
          49 // ****************************************************************************************************
          50 
          52 
          53 
          54 
          55 // ****************************************************************************************************
          56 // for_each_entity declaration
          57 // ****************************************************************************************************
          58 
          59 #define for_each_entity(entity, entities)\
          60 /****************************************/\
          61 {\
          62  EntityLocator _locator = entities.getLocator();\
          63  while (_locator.isValid()) {\
          64  Entity* entity = _locator.getElement();\
          65  _locator.progress();
          66 
          67 
          68 
          69 } // End of Hurricane namespace.
          70 
          71 #endif // HURRICANE_ENTITIES
          72 
          73 
          74 // ****************************************************************************************************
          75 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
          76 // ****************************************************************************************************
          Generic Locator auto-pointer.
          Definition: Locator.h:113
          +
          1 // ****************************************************************************************************
          2 // File: ./hurricane/Entities.h
          3 // Authors: R. Escassut
          4 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
          5 //
          6 // This file is part of Hurricane.
          7 //
          8 // Hurricane is free software: you can redistribute it and/or modify it under the terms of the GNU
          9 // Lesser General Public License as published by the Free Software Foundation, either version 3 of the
          10 // License, or (at your option) any later version.
          11 //
          12 // Hurricane is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
          13 // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU
          14 // General Public License for more details.
          15 //
          16 // You should have received a copy of the Lesser GNU General Public License along with Hurricane. If
          17 // not, see <http://www.gnu.org/licenses/>.
          18 // ****************************************************************************************************
          19 
          20 #ifndef HURRICANE_ENTITIES
          21 #define HURRICANE_ENTITIES
          22 
          23 #include "hurricane/Collection.h"
          24 
          25 namespace Hurricane {
          26 
          27 class Entity;
          28 
          29 
          30 
          31 // ****************************************************************************************************
          32 // Entities declaration
          33 // ****************************************************************************************************
          34 
          36 
          37 
          38 
          39 // ****************************************************************************************************
          40 // EntityLocator declaration
          41 // ****************************************************************************************************
          42 
          44 
          45 
          46 
          47 // ****************************************************************************************************
          48 // EntityFilter declaration
          49 // ****************************************************************************************************
          50 
          52 
          53 
          54 
          55 // ****************************************************************************************************
          56 // for_each_entity declaration
          57 // ****************************************************************************************************
          58 
          59 #define for_each_entity(entity, entities)\
          60 /****************************************/\
          61 {\
          62  EntityLocator _locator = entities.getLocator();\
          63  while (_locator.isValid()) {\
          64  Entity* entity = _locator.getElement();\
          65  _locator.progress();
          66 
          67 
          68 
          69 } // End of Hurricane namespace.
          70 
          71 #endif // HURRICANE_ENTITIES
          72 
          73 
          74 // ****************************************************************************************************
          75 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
          76 // ****************************************************************************************************
          Generic Locator auto-pointer.
          Definition: Locator.h:113
          Generic Filter auto-pointer.
          Definition: Filter.h:27
          -
          Occurrenceable objects root class (API).
          Definition: Entity.h:38
          Generic Collection auto-pointer.
          Definition: Collection.h:28
          GenericFilter< Entity * > EntityFilter
          Definition: Entities.h:51
          GenericCollection< Entity * > Entities
          Definition: Entities.h:27
          +
          The namespace dedicated to Hurricane.
          Definition: Generalities.dox:5
          GenericLocator< Entity * > EntityLocator
          Definition: Entities.h:43
          @@ -57,7 +57,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Entity_8h_source.html b/hurricane/doc/hurricane/html/Entity_8h_source.html index 7bcaeabf..1aa30286 100644 --- a/hurricane/doc/hurricane/html/Entity_8h_source.html +++ b/hurricane/doc/hurricane/html/Entity_8h_source.html @@ -44,22 +44,22 @@ $(function() {
          Entity.h
          -
          1 // ****************************************************************************************************
          2 // File: ./hurricane/Entity.h
          3 // Authors: R. Escassut
          4 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
          5 //
          6 // This file is part of Hurricane.
          7 //
          8 // Hurricane is free software: you can redistribute it and/or modify it under the terms of the GNU
          9 // Lesser General Public License as published by the Free Software Foundation, either version 3 of the
          10 // License, or (at your option) any later version.
          11 //
          12 // Hurricane is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
          13 // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU
          14 // General Public License for more details.
          15 //
          16 // You should have received a copy of the Lesser GNU General Public License along with Hurricane. If
          17 // not, see <http://www.gnu.org/licenses/>.
          18 // ****************************************************************************************************
          19 
          20 #ifndef HURRICANE_ENTITY
          21 #define HURRICANE_ENTITY
          22 
          23 #include <functional>
          24 #include "hurricane/DBo.h"
          25 #include "hurricane/Entities.h"
          26 #include "hurricane/Box.h"
          27 
          28 namespace Hurricane {
          29 
          30  class Cell;
          31  class Quark;
          32  class SharedPath;
          33 
          34 
          35 // -------------------------------------------------------------------
          36 // Class : "Hurricane::Entity".
          37 
          38  class Entity : public DBo
          39  {
          40  public:
          41  typedef DBo Inherit;
          42  public:
          43  enum EntityFlags { ForcedIdMode = (1<<0)
          44  , NextIdSet = (1<<1)
          45  };
          46  public:
          47  static void setMemoryLimit ( unsigned int );
          48  static void setIdCounterLimit ( unsigned int );
          49  static unsigned int getIdCounter ();
          50  unsigned int getNextId ();
          51  static void setNextId ( unsigned int );
          52  static bool inForcedIdMode ();
          53  static void enableForcedIdMode ();
          54  static void disableForcedIdMode ();
          55  public:
          56  inline unsigned int getId () const;
          57  virtual Cell* getCell () const = 0;
          58  virtual Box getBoundingBox () const = 0;
          59  void setId ( unsigned int );
          60  virtual void _toJson ( JsonWriter* ) const;
          61  virtual string _getString () const;
          62  virtual Record* _getRecord () const;
          63  Quark* _getQuark ( SharedPath* sharedPath = NULL ) const;
          64  protected:
          65  Entity ();
          66  virtual void _preDestroy ();
          67  private:
          68  static unsigned int _memoryLimit;
          69  static unsigned long _flags;
          70  static unsigned int _nextId;
          71  static unsigned int _idCounter;
          72  static unsigned int _idCounterLimit;
          73  unsigned int _id;
          74 
          75  public:
          76  struct CompareById : public std::binary_function<const Entity*,const Entity*,bool> {
          77  inline bool operator() ( const Entity* lhs, const Entity* rhs ) const;
          78  };
          79  };
          80 
          81 
          82  inline unsigned int Entity::getId () const { return _id; }
          83  inline bool Entity::CompareById::operator() ( const Entity* lhs, const Entity* rhs ) const
          84  { return ((lhs)?lhs->getId():0) < ((rhs)?rhs->getId():0); }
          85 
          86 
          87 // -------------------------------------------------------------------
          88 // Class : "Hurricane::JsonEntity".
          89 
          90  class JsonEntity : public JsonDBo {
          91  public:
          92  JsonEntity ( unsigned long flags );
          93  template<typename T> inline void update ( JsonStack&, T );
          94  };
          95 
          96 
          97  template<typename T> inline void JsonEntity::update ( JsonStack& stack, T hobject )
          98  {
          99  unsigned int jsonId = get<int64_t>(stack,"_id");
          100 
          101  JsonDBo::update<T>( stack, hobject );
          102  stack.addEntity( jsonId, hobject );
          103  }
          104 
          105 
          106 // -------------------------------------------------------------------
          107 // Class : "JsonEntityRef".
          108 
          109  class JsonEntityRef : public JsonObject {
          110  public:
          111  static void initialize ();
          112  JsonEntityRef ( unsigned long flags );
          113  virtual string getTypeName () const;
          114  virtual JsonEntityRef* clone ( unsigned long ) const;
          115  virtual void toData ( JsonStack& );
          116  };
          117 
          118 
          119 } // Hurricane namespace.
          120 
          121 
          122 INSPECTOR_P_SUPPORT(Hurricane::Entity);
          123 
          124 
          125 #endif // HURRICANE_ENTITY
          126 
          127 // ****************************************************************************************************
          128 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
          129 // ****************************************************************************************************
          Quark description (API)
          Definition: Quark.h:35
          +
          1 // ****************************************************************************************************
          2 // File: ./hurricane/Entity.h
          3 // Authors: R. Escassut
          4 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
          5 //
          6 // This file is part of Hurricane.
          7 //
          8 // Hurricane is free software: you can redistribute it and/or modify it under the terms of the GNU
          9 // Lesser General Public License as published by the Free Software Foundation, either version 3 of the
          10 // License, or (at your option) any later version.
          11 //
          12 // Hurricane is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
          13 // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU
          14 // General Public License for more details.
          15 //
          16 // You should have received a copy of the Lesser GNU General Public License along with Hurricane. If
          17 // not, see <http://www.gnu.org/licenses/>.
          18 // ****************************************************************************************************
          19 
          20 #ifndef HURRICANE_ENTITY
          21 #define HURRICANE_ENTITY
          22 
          23 #include <functional>
          24 #include "hurricane/DBo.h"
          25 #include "hurricane/Entities.h"
          26 #include "hurricane/Box.h"
          27 
          28 namespace Hurricane {
          29 
          30  class Cell;
          31  class Quark;
          32  class SharedPath;
          33 
          34 
          35 // -------------------------------------------------------------------
          36 // Class : "Hurricane::Entity".
          37 
          38  class Entity : public DBo
          39  {
          40  public:
          41  typedef DBo Inherit;
          42  public:
          43  virtual Cell* getCell () const = 0;
          44  virtual Box getBoundingBox () const = 0;
          45  virtual void _toJson ( JsonWriter* ) const;
          46  virtual string _getString () const;
          47  virtual Record* _getRecord () const;
          48  Quark* _getQuark ( SharedPath* sharedPath = NULL ) const;
          49  protected:
          50  Entity ();
          51  virtual void _postCreate ();
          52  virtual void _preDestroy ();
          53  };
          54 
          55 
          56 // -------------------------------------------------------------------
          57 // Class : "Hurricane::JsonEntity".
          58 
          59  class JsonEntity : public JsonDBo {
          60  public:
          61  JsonEntity ( unsigned long flags );
          62  template<typename T> inline void update ( JsonStack&, T );
          63  };
          64 
          65 
          66  template<typename T> inline void JsonEntity::update ( JsonStack& stack, T hobject )
          67  {
          68  unsigned int jsonId = get<int64_t>(stack,"_id");
          69 
          70  JsonDBo::update<T>( stack, hobject );
          71  stack.addEntity( jsonId, hobject );
          72  }
          73 
          74 
          75 // -------------------------------------------------------------------
          76 // Class : "JsonEntityRef".
          77 
          78  class JsonEntityRef : public JsonObject {
          79  public:
          80  static void initialize ();
          81  JsonEntityRef ( unsigned long flags );
          82  virtual string getTypeName () const;
          83  virtual JsonEntityRef* clone ( unsigned long ) const;
          84  virtual void toData ( JsonStack& );
          85  };
          86 
          87 
          88 } // Hurricane namespace.
          89 
          90 
          91 INSPECTOR_P_SUPPORT(Hurricane::Entity);
          92 
          93 
          94 #endif // HURRICANE_ENTITY
          95 
          96 // ****************************************************************************************************
          97 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
          98 // ****************************************************************************************************
          Quark description (API)
          Definition: Quark.h:35
          The model (API).
          Definition: Cell.h:66
          DataBase object root class (API).
          Definition: DBo.h:46
          Occurrenceable objects root class (API).
          Definition: Entity.h:38
          +
          JSON Parser Stack.
          Definition: JsonObject.h:249
          Box description (API)
          Definition: Box.h:31
          +
          virtual Box getBoundingBox() const =0
          -
          unsigned int getId() const
          Definition: Entity.h:82
          virtual Cell * getCell() const =0
          The namespace dedicated to Hurricane.
          Definition: Generalities.dox:5
          -
          Entity comparison criterion for STL container.
          Definition: Entity.h:76


          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Error_8h_source.html b/hurricane/doc/hurricane/html/Error_8h_source.html index 97299d7c..8bf06491 100644 --- a/hurricane/doc/hurricane/html/Error_8h_source.html +++ b/hurricane/doc/hurricane/html/Error_8h_source.html @@ -57,7 +57,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Exception_8h_source.html b/hurricane/doc/hurricane/html/Exception_8h_source.html index 403005e1..bc7dcab9 100644 --- a/hurricane/doc/hurricane/html/Exception_8h_source.html +++ b/hurricane/doc/hurricane/html/Exception_8h_source.html @@ -56,7 +56,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Filter_8h_source.html b/hurricane/doc/hurricane/html/Filter_8h_source.html index bae82eaa..a4778c45 100644 --- a/hurricane/doc/hurricane/html/Filter_8h_source.html +++ b/hurricane/doc/hurricane/html/Filter_8h_source.html @@ -61,7 +61,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Go_8h_source.html b/hurricane/doc/hurricane/html/Go_8h_source.html index cc40b38e..b7812075 100644 --- a/hurricane/doc/hurricane/html/Go_8h_source.html +++ b/hurricane/doc/hurricane/html/Go_8h_source.html @@ -44,15 +44,15 @@ $(function() {
          Go.h
          -
          1 // ****************************************************************************************************
          2 // File: ./hurricane/Go.h
          3 // Authors: R. Escassut
          4 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
          5 //
          6 // This file is part of Hurricane.
          7 //
          8 // Hurricane is free software: you can redistribute it and/or modify it under the terms of the GNU
          9 // Lesser General Public License as published by the Free Software Foundation, either version 3 of the
          10 // License, or (at your option) any later version.
          11 //
          12 // Hurricane is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
          13 // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU
          14 // General Public License for more details.
          15 //
          16 // You should have received a copy of the Lesser GNU General Public License along with Hurricane. If
          17 // not, see <http://www.gnu.org/licenses/>.
          18 // ****************************************************************************************************
          19 
          20 #ifndef HURRICANE_GO
          21 #define HURRICANE_GO
          22 
          23 #include "hurricane/Entity.h"
          24 #include "hurricane/Gos.h"
          25 #include "hurricane/Transformation.h"
          26 
          27 namespace Hurricane {
          28 
          29 class BasicLayer;
          30 class QuadTree;
          31 
          32 // ****************************************************************************************************
          33 // Go declaration
          34 // ****************************************************************************************************
          35 
          36 class Go : public Entity {
          37 // *********************
          38 
          39 // Friends
          40 // *******
          41 
          42  friend class QuadTree;
          43 
          44 // Types
          45 // *****
          46 
          47  public: typedef Entity Inherit;
          48 
          49 // Attributes
          50 // **********
          51 
          52  private: QuadTree* _quadTree;
          53  private: Go* _nextOfQuadTreeGoSet;
          54 
          55 // Constructors
          56 // ************
          57 
          58  protected: Go();
          59 
          60 // Predicates
          61 // **********
          62 
          63  public: static bool autoMaterializationIsDisabled();
          64 
          65  public: bool isMaterialized() const {return (_quadTree != NULL);};
          66 
          67 // Updators
          68 // ********
          69 
          70  public: static void enableAutoMaterialization();
          71  public: static void disableAutoMaterialization();
          72 
          73  public: virtual void materialize() = 0;
          74  public: virtual void unmaterialize() = 0;
          75 
          76  public: virtual void invalidate(bool propagateFlag = true);
          77  // implementation located on file UpdateSession.cpp to access local variables
          78 
          79  public: virtual void translate(const DbU::Unit& dx, const DbU::Unit& dy) = 0;
          80 
          81 // Others
          82 // ******
          83 
          84  protected: virtual void _postCreate();
          85 
          86  protected: virtual void _preDestroy();
          87 
          88  public: virtual string _getString() const;
          89  public: virtual Record* _getRecord() const;
          90  public: Go* _getNextOfQuadTreeGoSet() const {return _nextOfQuadTreeGoSet;};
          91 
          92  public: void _setNextOfQuadTreeGoSet(Go* go) {_nextOfQuadTreeGoSet = go;};
          93 
          94 };
          95 
          96 
          97 } // End of Hurricane namespace.
          98 
          99 
          100 INSPECTOR_P_SUPPORT(Hurricane::Go);
          101 
          102 
          103 #endif // HURRICANE_GO
          104 
          105 
          106 // ****************************************************************************************************
          107 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
          108 // ****************************************************************************************************
          Go description (API)
          Definition: Go.h:36
          +
          1 // ****************************************************************************************************
          2 // File: ./hurricane/Go.h
          3 // Authors: R. Escassut
          4 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
          5 //
          6 // This file is part of Hurricane.
          7 //
          8 // Hurricane is free software: you can redistribute it and/or modify it under the terms of the GNU
          9 // Lesser General Public License as published by the Free Software Foundation, either version 3 of the
          10 // License, or (at your option) any later version.
          11 //
          12 // Hurricane is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
          13 // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU
          14 // General Public License for more details.
          15 //
          16 // You should have received a copy of the Lesser GNU General Public License along with Hurricane. If
          17 // not, see <http://www.gnu.org/licenses/>.
          18 // ****************************************************************************************************
          19 
          20 #ifndef HURRICANE_GO
          21 #define HURRICANE_GO
          22 
          23 #include "hurricane/Entity.h"
          24 #include "hurricane/Gos.h"
          25 #include "hurricane/Transformation.h"
          26 
          27 namespace Hurricane {
          28 
          29 class BasicLayer;
          30 class QuadTree;
          31 
          32 // ****************************************************************************************************
          33 // Go declaration
          34 // ****************************************************************************************************
          35 
          36 class Go : public Entity {
          37 // *********************
          38 
          39 // Friends
          40 // *******
          41 
          42  friend class QuadTree;
          43 
          44 // Types
          45 // *****
          46 
          47  public: typedef Entity Inherit;
          48 
          49 // Attributes
          50 // **********
          51 
          52  private: QuadTree* _quadTree;
          53  private: Go* _nextOfQuadTreeGoSet;
          54 
          55 // Constructors
          56 // ************
          57 
          58  protected: Go();
          59 
          60 // Predicates
          61 // **********
          62 
          63  public: static bool autoMaterializationIsDisabled();
          64 
          65  public: bool isMaterialized() const {return (_quadTree != NULL);};
          66 
          67 // Updators
          68 // ********
          69 
          70  public: static void enableAutoMaterialization();
          71  public: static void disableAutoMaterialization();
          72 
          73  public: virtual void materialize() = 0;
          74  public: virtual void unmaterialize() = 0;
          75 
          76  public: virtual void invalidate(bool propagateFlag = true);
          77  // implementation located on file UpdateSession.cpp to access local variables
          78 
          79  public: virtual void translate(const DbU::Unit& dx, const DbU::Unit& dy) = 0;
          80 
          81 // Others
          82 // ******
          83 
          84  protected: virtual void _postCreate();
          85 
          86  protected: virtual void _preDestroy();
          87 
          88  public: virtual string _getString() const;
          89  public: virtual Record* _getRecord() const;
          90  public: Go* _getNextOfQuadTreeGoSet() const {return _nextOfQuadTreeGoSet;};
          91 
          92  public: void _setNextOfQuadTreeGoSet(Go* go) {_nextOfQuadTreeGoSet = go;};
          93 
          94 };
          95 
          96 
          97 } // End of Hurricane namespace.
          98 
          99 
          100 INSPECTOR_P_SUPPORT(Hurricane::Go);
          101 
          102 
          103 #endif // HURRICANE_GO
          104 
          105 
          106 // ****************************************************************************************************
          107 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
          108 // ****************************************************************************************************
          Go description (API)
          Definition: Go.h:36
          static bool autoMaterializationIsDisabled()
          virtual void translate(const DbU::Unit &dx, const DbU::Unit &dy)=0
          virtual void invalidate(bool propagateFlag=true)
          std::int64_t Unit
          Definition: DbU.h:70
          DataBase object root class (API).
          Definition: DBo.h:46
          static void disableAutoMaterialization()
          -
          Occurrenceable objects root class (API).
          Definition: Entity.h:38
          virtual void unmaterialize()=0
          +
          The namespace dedicated to Hurricane.
          Definition: Generalities.dox:5
          bool isMaterialized() const
          Definition: Go.h:65
          QuadTree description (API)
          Definition: QuadTree.h:35
          @@ -63,7 +63,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Gos_8h_source.html b/hurricane/doc/hurricane/html/Gos_8h_source.html index a1be8c4a..b1430960 100644 --- a/hurricane/doc/hurricane/html/Gos_8h_source.html +++ b/hurricane/doc/hurricane/html/Gos_8h_source.html @@ -57,7 +57,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Hook_8h_source.html b/hurricane/doc/hurricane/html/Hook_8h_source.html index 882f250a..c0b64373 100644 --- a/hurricane/doc/hurricane/html/Hook_8h_source.html +++ b/hurricane/doc/hurricane/html/Hook_8h_source.html @@ -67,7 +67,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Hooks_8h_source.html b/hurricane/doc/hurricane/html/Hooks_8h_source.html index 88078c30..ed9a0472 100644 --- a/hurricane/doc/hurricane/html/Hooks_8h_source.html +++ b/hurricane/doc/hurricane/html/Hooks_8h_source.html @@ -57,7 +57,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Horizontal_8h_source.html b/hurricane/doc/hurricane/html/Horizontal_8h_source.html index 2fd61b59..42d7b985 100644 --- a/hurricane/doc/hurricane/html/Horizontal_8h_source.html +++ b/hurricane/doc/hurricane/html/Horizontal_8h_source.html @@ -65,7 +65,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Horizontals_8h_source.html b/hurricane/doc/hurricane/html/Horizontals_8h_source.html index 919ae4a5..6fb48f8b 100644 --- a/hurricane/doc/hurricane/html/Horizontals_8h_source.html +++ b/hurricane/doc/hurricane/html/Horizontals_8h_source.html @@ -57,7 +57,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/HyperNet_8h_source.html b/hurricane/doc/hurricane/html/HyperNet_8h_source.html index 03690385..c1337d25 100644 --- a/hurricane/doc/hurricane/html/HyperNet_8h_source.html +++ b/hurricane/doc/hurricane/html/HyperNet_8h_source.html @@ -63,7 +63,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Initializer_8h_source.html b/hurricane/doc/hurricane/html/Initializer_8h_source.html index f1c3ff82..1904e888 100644 --- a/hurricane/doc/hurricane/html/Initializer_8h_source.html +++ b/hurricane/doc/hurricane/html/Initializer_8h_source.html @@ -52,7 +52,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Instance_8h_source.html b/hurricane/doc/hurricane/html/Instance_8h_source.html index 9a504b26..430f4594 100644 --- a/hurricane/doc/hurricane/html/Instance_8h_source.html +++ b/hurricane/doc/hurricane/html/Instance_8h_source.html @@ -86,7 +86,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Instances_8h_source.html b/hurricane/doc/hurricane/html/Instances_8h_source.html index d50033dd..55b3ecd8 100644 --- a/hurricane/doc/hurricane/html/Instances_8h_source.html +++ b/hurricane/doc/hurricane/html/Instances_8h_source.html @@ -57,7 +57,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Interruption_8h_source.html b/hurricane/doc/hurricane/html/Interruption_8h_source.html index 971b2985..845ef036 100644 --- a/hurricane/doc/hurricane/html/Interruption_8h_source.html +++ b/hurricane/doc/hurricane/html/Interruption_8h_source.html @@ -55,7 +55,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Interval_8h_source.html b/hurricane/doc/hurricane/html/Interval_8h_source.html index 13293de2..2b73585d 100644 --- a/hurricane/doc/hurricane/html/Interval_8h_source.html +++ b/hurricane/doc/hurricane/html/Interval_8h_source.html @@ -44,35 +44,35 @@ $(function() {
          Interval.h
          -
          1 // ****************************************************************************************************
          2 // File: ./hurricane/Interval.h
          3 // Authors: R. Escassut
          4 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
          5 //
          6 // This file is part of Hurricane.
          7 //
          8 // Hurricane is free software: you can redistribute it and/or modify it under the terms of the GNU
          9 // Lesser General Public License as published by the Free Software Foundation, either version 3 of the
          10 // License, or (at your option) any later version.
          11 //
          12 // Hurricane is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
          13 // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU
          14 // General Public License for more details.
          15 //
          16 // You should have received a copy of the Lesser GNU General Public License along with Hurricane. If
          17 // not, see <http://www.gnu.org/licenses/>.
          18 // ****************************************************************************************************
          19 
          20 #ifndef HURRICANE_INTERVAL
          21 #define HURRICANE_INTERVAL
          22 
          23 #include "hurricane/DbU.h"
          24 
          25 namespace Hurricane {
          26 
          27 
          28 
          29 // ****************************************************************************************************
          30 // Interval declaration
          31 // ****************************************************************************************************
          32 
          33 class Interval {
          34 // ***********
          35 
          36 // Attributes
          37 // **********
          38 
          39  private: DbU::Unit _vMin;
          40  private: DbU::Unit _vMax;
          41 
          42 // Constructors
          43 // ************
          44 
          45  public: Interval(bool makeEmpty=true);
          46  public: Interval(const DbU::Unit& v);
          47  public: Interval(const DbU::Unit& v1, const DbU::Unit& v2);
          48  public: Interval(const Interval& interval);
          49 
          50 // Operators
          51 // *********
          52 
          53  public: Interval& operator=(const Interval& interval);
          54 
          55  public: bool operator==(const Interval& interval) const;
          56  public: bool operator!=(const Interval& interval) const;
          57 
          58 // Accessors
          59 // *********
          60 
          61  public: const DbU::Unit& getVMin() const {return _vMin;};
          62  public: const DbU::Unit& getVMax() const {return _vMax;};
          63  public: DbU::Unit& getVMin() {return _vMin;};
          64  public: DbU::Unit& getVMax() {return _vMax;};
          65  public: DbU::Unit getCenter() const {return ((_vMin + _vMax) / 2);};
          66  public: DbU::Unit getSize() const;
          67  public: DbU::Unit getHalfSize() const {return (getSize() / 2);};
          68  public: Interval getUnion(const Interval& interval) const;
          69  public: Interval getIntersection(const Interval& interval) const;
          70 
          71 // Predicates
          72 // **********
          73 
          74  public: bool isEmpty() const { return (_vMax < _vMin);};
          75  public: bool isFull() const { return (_vMin == DbU::Min) and (_vMax == DbU::Max); };
          76  public: bool isPonctual() const { return (_vMax == _vMin);};
          77  public: bool contains(const DbU::Unit& v) const;
          78  public: bool contains(const Interval& interval) const;
          79  public: bool intersect(const Interval& interval) const;
          80  public: bool inferior(const Interval& interval, bool strict=true) const;
          81  public: bool superior(const Interval& interval, bool strict=true) const;
          82  public: bool isConstrainedBy(const Interval& interval) const;
          83 
          84 // Updators
          85 // ********
          86 
          87  public: Interval& makeEmpty();
          88  public: Interval& shrinkVMin(const DbU::Unit& vMin);
          89  public: Interval& shrinkVMax(const DbU::Unit& vMax);
          90  public: Interval& inflate(const DbU::Unit& dv);
          91  public: Interval& inflate(const DbU::Unit& dvMin, const DbU::Unit& dvMax);
          92  public: Interval& merge(const DbU::Unit& v);
          93  public: Interval& merge(const Interval& interval);
          94  public: Interval& intersection(const DbU::Unit& vMin, const DbU::Unit& vMax);
          95  public: Interval& intersection(const Interval& interval);
          96  public: Interval& translate(const DbU::Unit& dv);
          97 
          98 // Others
          99 // ******
          100 
          101  public: string _getTypeName() const { return _TName("Interval"); };
          102  public: string _getString() const;
          103  public: Record* _getRecord() const;
          104 
          105 };
          106 
          107 
          108  inline DbU::Unit Interval::getSize () const
          109  {
          110  if (isEmpty()) return 0;
          111  if (isFull ()) return DbU::Max;
          112  return _vMax - _vMin;
          113  }
          114 
          115 
          116 
          117 } // End of Hurricane namespace.
          118 
          119 
          120 inline void jsonWrite ( JsonWriter* w, const std::string& key, const Hurricane::Interval* interval )
          121 {
          122  w->key( key );
          123  w->startArray();
          124  w->write( &interval->getVMin() );
          125  w->write( &interval->getVMax() );
          126  w->endArray();
          127 }
          128 
          129 INSPECTOR_PV_SUPPORT(Hurricane::Interval);
          130 
          131 
          132 #endif // HURRICANE_INTERVAL
          133 
          134 
          135 // ****************************************************************************************************
          136 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
          137 // ****************************************************************************************************
          const DbU::Unit & getVMax() const
          Definition: Interval.h:62
          -
          const DbU::Unit & getVMin() const
          Definition: Interval.h:61
          -
          bool operator==(const Interval &interval) const
          -
          bool isPonctual() const
          Definition: Interval.h:76
          +
          1 // -*- C++ -*-
          2 //
          3 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
          4 //
          5 // This file is part of Hurricane.
          6 //
          7 // Hurricane is free software: you can redistribute it and/or modify
          8 // it under the terms of the GNU Lesser General Public License as
          9 // published by the Free Software Foundation, either version 3 of the
          10 // License, or (at your option) any later version.
          11 //
          12 // Hurricane is distributed in the hope that it will be useful, but
          13 // WITHOUT ANY WARRANTY; without even the implied warranty of MERCHAN-
          14 // TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU
          15 // General Public License for more details.
          16 //
          17 // You should have received a copy of the Lesser GNU General Public
          18 // License along with Hurricane. If not, see
          19 // <http://www.gnu.org/licenses/>.
          20 //
          21 // +-----------------------------------------------------------------+
          22 // | H U R R I C A N E |
          23 // | V L S I B a c k e n d D a t a - B a s e |
          24 // | |
          25 // | Author : Rémy Escassut |
          26 // | E-mail : Jean-Paul.Chaput@lip6.fr |
          27 // | =============================================================== |
          28 // | C++ Header : "./hurricane/Interval.h" |
          29 // +-----------------------------------------------------------------+
          30 
          31 
          32 #ifndef HURRICANE_INTERVAL_H
          33 #define HURRICANE_INTERVAL_H
          34 
          35 #include "hurricane/DbU.h"
          36 
          37 namespace Hurricane {
          38 
          39 
          40 // -------------------------------------------------------------------
          41 // Class : "Hurricane::Interval".
          42 
          43 
          44  class Interval {
          45  public:
          46  class CompareByMin {
          47  public:
          48  inline bool operator() ( const Interval& rhs, const Interval& lhs ) const;
          49  inline bool operator() ( const Interval* rhs, const Interval* lhs ) const;
          50  };
          51  public:
          52  Interval ( bool makeEmpty=true );
          53  Interval ( const DbU::Unit& );
          54  Interval ( const DbU::Unit& v1, const DbU::Unit& v2 );
          55  Interval ( const Interval& );
          56  public:
          57  Interval& operator= ( const Interval& );
          58  bool operator== ( const Interval& ) const;
          59  bool operator!= ( const Interval& ) const;
          60  public:
          61  inline const DbU::Unit& getVMin () const;
          62  inline const DbU::Unit& getVMax () const;
          63  inline DbU::Unit& getVMin ();
          64  inline DbU::Unit& getVMax ();
          65  inline DbU::Unit getCenter () const;
          66  inline DbU::Unit getSize () const;
          67  inline DbU::Unit getHalfSize () const;
          68  Interval getUnion ( const Interval& ) const;
          69  Interval getIntersection ( const Interval& ) const;
          70  inline bool isEmpty () const;
          71  inline bool isFull () const;
          72  inline bool isPonctual () const;
          73  bool contains ( const DbU::Unit& ) const;
          74  bool contains ( const Interval& ) const;
          75  bool intersect ( const Interval& , bool strict=false ) const;
          76  bool inferior ( const Interval& , bool strict=true ) const;
          77  bool superior ( const Interval& , bool strict=true ) const;
          78  bool isConstrainedBy ( const Interval& ) const;
          79  public:
          80  Interval& makeEmpty ();
          81  Interval& shrinkVMin ( const DbU::Unit& vMin );
          82  Interval& shrinkVMax ( const DbU::Unit& vMax );
          83  Interval& inflate ( const DbU::Unit& dv );
          84  Interval& inflate ( const DbU::Unit& dvMin, const DbU::Unit& dvMax );
          85  Interval& merge ( const DbU::Unit& );
          86  Interval& merge ( const Interval& );
          87  Interval& intersection ( const DbU::Unit& vMin, const DbU::Unit& vMax );
          88  Interval& intersection ( const Interval& );
          89  Interval& translate ( const DbU::Unit& );
          90  public:
          91  inline string _getTypeName () const;
          92  string _getString () const;
          93  Record* _getRecord () const;
          94  private:
          95  DbU::Unit _vMin;
          96  DbU::Unit _vMax;
          97  };
          98 
          99 
          100  inline const DbU::Unit& Interval::getVMin () const {return _vMin;};
          101  inline const DbU::Unit& Interval::getVMax () const {return _vMax;};
          102  inline DbU::Unit& Interval::getVMin () {return _vMin;};
          103  inline DbU::Unit& Interval::getVMax () {return _vMax;};
          104  inline DbU::Unit Interval::getCenter () const {return ((_vMin + _vMax) / 2);};
          105  inline DbU::Unit Interval::getHalfSize () const {return (getSize() / 2);};
          106  inline bool Interval::isEmpty () const { return (_vMax < _vMin);};
          107  inline bool Interval::isFull () const { return (_vMin == DbU::Min) and (_vMax == DbU::Max); };
          108  inline bool Interval::isPonctual () const { return (_vMax == _vMin);};
          109  inline string Interval::_getTypeName () const { return _TName("Interval"); };
          110 
          111  inline DbU::Unit Interval::getSize () const
          112  {
          113  if (isEmpty()) return 0;
          114  if (isFull ()) return DbU::Max;
          115  return _vMax - _vMin;
          116  }
          117 
          118 
          119  inline bool Interval::CompareByMin::operator() ( const Interval& lhs, const Interval& rhs ) const
          120  { return lhs.getVMin() < rhs.getVMin(); }
          121 
          122 
          123  inline bool Interval::CompareByMin::operator() ( const Interval* lhs, const Interval* rhs ) const
          124  { return lhs->getVMin() < rhs->getVMin(); }
          125 
          126 
          127 } // Hurricane namespace.
          128 
          129 
          130 inline void jsonWrite ( JsonWriter* w, const std::string& key, const Hurricane::Interval* interval )
          131 {
          132  w->key( key );
          133  w->startArray();
          134  w->write( &interval->getVMin() );
          135  w->write( &interval->getVMax() );
          136  w->endArray();
          137 }
          138 
          139 INSPECTOR_PV_SUPPORT(Hurricane::Interval);
          140 
          141 
          142 #endif // HURRICANE_INTERVAL_H
          const DbU::Unit & getVMax() const
          Definition: Interval.h:101
          +
          Interval getIntersection(const Interval &) const
          +
          const DbU::Unit & getVMin() const
          Definition: Interval.h:100
          +
          Interval & merge(const DbU::Unit &)
          +
          bool isPonctual() const
          Definition: Interval.h:108
          std::int64_t Unit
          Definition: DbU.h:70
          -
          Interval getIntersection(const Interval &interval) const
          -
          bool contains(const DbU::Unit &v) const
          -
          Interval description (API)
          Definition: Interval.h:33
          +
          Interval description (API)
          Definition: Interval.h:44
          Interval & makeEmpty()
          -
          Interval & operator=(const Interval &interval)
          -
          bool isEmpty() const
          Definition: Interval.h:74
          -
          Interval & merge(const DbU::Unit &v)
          +
          bool isEmpty() const
          Definition: Interval.h:106
          Interval(bool makeEmpty=true)
          -
          DbU::Unit getSize() const
          Definition: Interval.h:108
          -
          Interval getUnion(const Interval &interval) const
          -
          DbU::Unit getCenter() const
          Definition: Interval.h:65
          -
          bool operator!=(const Interval &interval) const
          +
          DbU::Unit getSize() const
          Definition: Interval.h:111
          +
          bool operator!=(const Interval &) const
          +
          DbU::Unit getCenter() const
          Definition: Interval.h:104
          +
          bool contains(const DbU::Unit &) const
          +
          Interval getUnion(const Interval &) const
          The namespace dedicated to Hurricane.
          Definition: Generalities.dox:5
          -
          DbU::Unit getHalfSize() const
          Definition: Interval.h:67
          +
          DbU::Unit getHalfSize() const
          Definition: Interval.h:105
          Interval & inflate(const DbU::Unit &dv)
          -
          bool intersect(const Interval &interval) const
          -
          Interval & translate(const DbU::Unit &dv)
          +
          Interval & operator=(const Interval &)
          +
          Interval & translate(const DbU::Unit &)
          +
          bool intersect(const Interval &, bool strict=false) const
          +
          bool operator==(const Interval &) const
          Interval & intersection(const DbU::Unit &vMin, const DbU::Unit &vMax)


          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Intervals_8h_source.html b/hurricane/doc/hurricane/html/Intervals_8h_source.html index a5d0bfed..2e24d84e 100644 --- a/hurricane/doc/hurricane/html/Intervals_8h_source.html +++ b/hurricane/doc/hurricane/html/Intervals_8h_source.html @@ -50,7 +50,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/JsonObject_8h_source.html b/hurricane/doc/hurricane/html/JsonObject_8h_source.html index 4860d789..53eb3794 100644 --- a/hurricane/doc/hurricane/html/JsonObject_8h_source.html +++ b/hurricane/doc/hurricane/html/JsonObject_8h_source.html @@ -44,7 +44,7 @@ $(function() {
          JsonObject.h
          -
          1 // -*- C++ -*-
          2 //
          3 // Copyright (c) BULL S.A. 2015-2018, All Rights Reserved
          4 //
          5 // This file is part of Hurricane.
          6 //
          7 // Hurricane is free software: you can redistribute it and/or modify
          8 // it under the terms of the GNU Lesser General Public License as
          9 // published by the Free Software Foundation, either version 3 of the
          10 // License, or (at your option) any later version.
          11 //
          12 // Hurricane is distributed in the hope that it will be useful, but
          13 // WITHOUT ANY WARRANTY; without even the implied warranty of MERCHAN-
          14 // TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU
          15 // General Public License for more details.
          16 //
          17 // You should have received a copy of the Lesser GNU General Public
          18 // License along with Hurricane. If not, see
          19 // <http://www.gnu.org/licenses/>.
          20 //
          21 // +-----------------------------------------------------------------+
          22 // | H U R R I C A N E |
          23 // | V L S I B a c k e n d D a t a - B a s e |
          24 // | |
          25 // | Author : Jean-Paul Chaput |
          26 // | E-mail : Jean-Paul.Chaput@lip6.fr |
          27 // | =============================================================== |
          28 // | C++ Header : "./hurricane/JsonObject.h" |
          29 // +-----------------------------------------------------------------+
          30 
          31 
          32 #ifndef HURRICANE_JSON_OBJECT_H
          33 #define HURRICANE_JSON_OBJECT_H
          34 
          35 #ifndef HURRICANE_SLOT_H
          36 #error "JsonObject.h must be included through Commons.h"
          37 #endif
          38 
          39 #include <iostream>
          40 #include <typeinfo>
          41 #include <typeindex>
          42 #include <type_traits>
          43 #include <set>
          44 #include <map>
          45 #include <string>
          46 #include <functional>
          47 #include <boost/any.hpp>
          48 
          49 
          50 namespace Hurricane {
          51 
          52  class DBo;
          53  class Hook;
          54  class Entity;
          55  class Cell;
          56  class Component;
          57  class JsonStack;
          58 
          59  class JsonArray { };
          60 
          61 
          62 // -------------------------------------------------------------------
          63 // Class : "JsonAttribute".
          64 
          65  class JsonAttribute {
          66  public:
          67  inline JsonAttribute ( const std::string& key, std::type_index tid );
          68  inline std::string key () const;
          69  inline std::type_index tid () const;
          70  private:
          71  std::string _key;
          72  std::type_index _tid;
          73  };
          74 
          75  inline JsonAttribute::JsonAttribute ( const std::string& key, std::type_index tid ) : _key(key), _tid(tid) { }
          76  inline std::string JsonAttribute::key () const { return _key; }
          77  inline std::type_index JsonAttribute::tid () const { return _tid; }
          78 
          79 
          80 // -------------------------------------------------------------------
          81 // Class : "JsonObject".
          82 
          83  class JsonObject {
          84  public:
          85  JsonObject ( unsigned long flags );
          86  virtual ~JsonObject ();
          87  virtual bool isDummy () const;
          88  virtual std::string getTypeName () const = 0;
          89  inline std::string getStackName () const;
          90  bool check ( JsonStack&, std::string fname ) const;
          91  void print ( std::ostream& ) const;
          92  bool has ( const std::string& key ) const;
          93  void add ( const std::string& key, std::type_index tid );
          94  void remove ( const std::string& key );
          95  template<typename T> inline T get ( JsonStack&, const std::string& key ) const;
          96  template<typename T> inline T* jget ( JsonStack& ) const;
          97  inline void copyAttrs ( const JsonObject*, bool reset=false );
          98  inline void clear ();
          99  inline std::string getName () const;
          100  inline void setName ( const std::string& );
          101  template<typename T> inline T getObject () const;
          102  template<typename T> inline void setObject ( T ) ;
          103  inline bool isBound () const;
          104  virtual JsonObject* clone ( unsigned long flags ) const = 0;
          105  virtual void toData ( JsonStack& );
          106  unsigned int presetId ( JsonStack& );
          107  template<typename T> inline void update ( JsonStack&, T );
          108  inline JsonObject* setFlags ( unsigned long mask );
          109  inline JsonObject* resetFlags ( unsigned long mask );
          110  inline bool issetFlags ( unsigned long mask ) const;
          111  protected:
          112  unsigned long _flags;
          113  std::string _name;
          114  std::vector<JsonAttribute> _stackeds;
          115  std::vector<JsonAttribute> _attributes;
          116  std::vector<JsonAttribute> _collections;
          117  boost::any _object;
          118  };
          119 
          120 
          121  inline bool JsonObject::isBound () const { return not _object.empty(); }
          122  inline std::string JsonObject::getName () const { return _name; }
          123  inline void JsonObject::setName ( const string& name ) { _name=name; }
          124  inline JsonObject* JsonObject::setFlags ( unsigned long mask ) { _flags |= mask; return this; }
          125  inline JsonObject* JsonObject::resetFlags ( unsigned long mask ) { _flags &= ~mask; return this; }
          126  inline bool JsonObject::issetFlags ( unsigned long mask ) const { return _flags & mask; }
          127 
          128  inline std::string JsonObject::getStackName () const
          129  { return (_name.empty()) ? std::string(".")+getTypeName(): _name; }
          130 
          131  template<typename T> inline T JsonObject::getObject () const
          132  { return boost::any_cast<T>(_object); }
          133 
          134  template<typename T> inline void JsonObject::setObject ( T t )
          135  { _object = t; }
          136 
          137  inline void JsonObject::copyAttrs ( const JsonObject* other, bool reset )
          138  {
          139  if (reset) _attributes.clear();
          140  for ( size_t i=0 ; i<other->_attributes.size() ; ++i )
          141  _attributes.push_back( other->_attributes[i] );
          142  }
          143 
          145  {
          146  _stackeds.clear();
          147  _attributes.clear();
          148  _collections.clear();
          149  boost::any emptyAny;
          150  _object.swap( emptyAny );
          151  }
          152 
          153 
          154 // -------------------------------------------------------------------
          155 // Class : "JsonKey".
          156 
          157  class JsonKey : public JsonObject {
          158  public:
          159  inline JsonKey ( const std::string& );
          160  virtual std::string getTypeName () const;
          161  virtual JsonKey* clone ( unsigned long ) const;
          162  private:
          163  std::string _key;
          164  };
          165 
          166 
          167 // -------------------------------------------------------------------
          168 // Class : "JsonDummy".
          169 
          170  class JsonDummy : public JsonObject {
          171  public:
          172  JsonDummy ();
          173  virtual bool isDummy () const;
          174  virtual std::string getTypeName () const;
          175  void setTypeName ( const std::string& name );
          176  virtual JsonDummy* clone ( unsigned long ) const;
          177  private:
          178  std::string _typename;
          179  };
          180 
          181 
          182 // -------------------------------------------------------------------
          183 // Class : "JsonBaseArray".
          184 
          185  template<typename T>
          186  class JsonBaseArray : public JsonObject {
          187  public:
          188  inline JsonBaseArray ( unsigned long flags );
          189  inline const std::vector<T>& array () const;
          190  inline void push_back ( T );
          191  private:
          192  std::vector<T> _array;
          193  };
          194 
          195 
          196  template<typename T>
          197  inline JsonBaseArray<T>::JsonBaseArray ( unsigned long flags )
          198  : JsonObject(flags)
          199  , _array()
          200  { }
          201 
          202  template<typename T>
          203  inline const std::vector<T>& JsonBaseArray<T>::array () const { return _array; }
          204 
          205  template<typename T>
          206  inline void JsonBaseArray<T>::push_back ( T element )
          207  { _array.push_back(element); }
          208 
          209 
          210 } // Hurricane namespace.
          211 
          212 
          213 namespace std {
          214 
          215  template<>
          216  struct less<Hurricane::JsonObject*> {
          217  inline bool operator() ( const Hurricane::JsonObject* lhs, const Hurricane::JsonObject* rhs )
          218  { return lhs->getTypeName() < rhs->getTypeName(); }
          219  };
          220 
          221 } // std namespace.
          222 
          223 
          224 namespace Hurricane {
          225 
          226 // -------------------------------------------------------------------
          227 // Class : "JsonTypes".
          228 
          229  class JsonTypes {
          230  public:
          231  static void initialize ();
          232  static void registerType ( JsonObject* );
          233  static JsonObject* find ( const std::string& tname );
          234  private:
          235  JsonTypes ();
          236  ~JsonTypes ();
          237  JsonTypes ( const JsonTypes& );
          238  void _registerType ( JsonObject* );
          239  JsonObject* _find ( const std::string& tname );
          240  private:
          241  static JsonTypes* _jsonTypes;
          242  std::set<JsonObject*> _jsonObjects;
          243  };
          244 
          245 
          246 // -------------------------------------------------------------------
          247 // Class : "JsonStack".
          248 
          249  class JsonStack {
          250  public:
          251  typedef std::pair<std::string, boost::any> Element;
          252  public:
          253  inline JsonStack ();
          254  inline size_t size () const;
          255  template<typename T> inline void push_back ( const std::string&, T );
          256  inline void pop_back ( size_t count=1 );
          257  inline int rhas ( const std::string& ) const;
          258  template<typename T> inline T as ( const std::string& ) const;
          259  template<typename T> inline T as ( int ) const;
          260  inline void push_back_dbo ( DBo* );
          261  inline void pop_back_dbo ();
          262  inline DBo* back_dbo () const;
          263  inline vector<JsonObject*>& jobjects ();
          264  template<typename T> inline T getEntity ( unsigned int ) const;
          265  void addEntity ( unsigned int jsonId, Entity* );
          266  void print ( std::ostream& ) const;
          267  inline unsigned long getFlags () const;
          268  inline JsonStack* setFlags ( unsigned long mask );
          269  inline JsonStack* resetFlags ( unsigned long mask );
          270  inline bool issetFlags ( unsigned long mask ) const;
          271  inline const Element& operator[] ( int index ) const;
          272  private:
          273  unsigned long _flags;
          274  vector<Element> _stack;
          275  vector<JsonObject*> _jstack;
          276  vector<DBo*> _dbos;
          277  std::map<unsigned int,Entity*> _entities;
          278  };
          279 
          280 
          281  inline JsonStack::JsonStack ()
          282  : _flags(0), _stack(), _jstack(), _dbos(), _entities()
          283  { }
          284 
          285  template<typename T> inline void JsonStack::push_back ( const std::string& key, T t )
          286  {
          287  cdebug_log(19,0) << "JsonStack::push_back(T) key:" << key << " value:" << t
          288  << " (" << demangle(typeid(T)) << ")." << endl;
          289  _stack.push_back(std::make_pair(key,boost::any(t)));
          290  }
          291 
          292  inline void JsonStack::pop_back ( size_t count )
          293  {
          294  while (count--) {
          295  if (_stack.empty()) {
          296  std::cerr << "[ERROR] JsonStack::pop_back(): Stack is empty, but "
          297  << (count+1) << " elements remains to pop." << std::endl;
          298  break;
          299  }
          300  cdebug_log(19,0) << "| _stack.pop_back() \"" << _stack.back().first
          301  << "\", size:" << _stack.size() << ", dbos:" << _dbos.size() << endl;
          302  _stack.pop_back();
          303  }
          304  }
          305 
          306  inline const JsonStack::Element& JsonStack::operator[] ( int index ) const
          307  {
          308  if (index < 0) return _stack[_stack.size()+index];
          309  return _stack[index];
          310  }
          311 
          312  inline int JsonStack::rhas ( const std::string& key ) const
          313  {
          314  if (_stack.empty()) return 0;
          315 
          316  int i = _stack.size()-1;
          317  do {
          318  if (_stack[i].first == key) {
          319  cdebug_log(19,0) << "JsonStack::rhas(): key \"" << key << "\" found at index:"
          320  << (i-(int)_stack.size()) << " (i:" << i << ") "
          321  << "(" << demangle(_stack[i].second.type().name()) << ")."
          322  << endl;
          323  return i-(int)_stack.size();
          324  }
          325  if (i == 0) break;
          326  --i;
          327  } while ( true );
          328 
          329  cdebug_log(19,0) << "JsonStack::rhas(): key \"" << key << "\" not found (returning index: 0)." << endl;
          330  return 0;
          331  }
          332 
          333  template<typename T> inline T JsonStack::as ( const std::string& key ) const
          334  {
          335  if (not _stack.empty()) {
          336  int i = _stack.size()-1;
          337  do {
          338  if (_stack[i].first == key) {
          339  cdebug_log(19,0) << "JsonStack::as<T>() k:" << key
          340  << " value:" << demangle(_stack[i].second.type().name()) << std::endl;
          341  return boost::any_cast<T>( _stack[i].second );
          342  }
          343  if (i == 0) break;
          344  --i;
          345  } while ( true );
          346 
          347  std::cerr << "[ERROR] JsonStack::as<T>(key): No element with key \""
          348  << key << "\" in stack." << std::endl;
          349  } else {
          350  std::cerr << "[ERROR] JsonStack::as<T>(key): Stack is empty while searching for key \""
          351  << key << "\"." << std::endl;
          352  }
          353 
          354  return T();
          355  }
          356 
          357  template<typename T> inline T JsonStack::as ( int index ) const
          358  {
          359  size_t i = (index >= 0) ? index : (_stack.size()+index);
          360  return boost::any_cast<T>( _stack[i].second );
          361  }
          362 
          363 
          364  template<typename T> inline T JsonStack::getEntity ( unsigned int id ) const
          365  {
          366  std::map<unsigned int,Entity*>::const_iterator it = _entities.find(id);
          367  if (it == _entities.end()) return NULL;
          368  return dynamic_cast<T>((*it).second);
          369  }
          370 
          371  inline void JsonStack::push_back_dbo ( DBo* dbo ) { _dbos.push_back(dbo); }
          372  inline void JsonStack::pop_back_dbo () { _dbos.pop_back(); }
          373  inline DBo* JsonStack::back_dbo () const { return (_dbos.empty()) ? NULL : _dbos.back(); }
          374  inline vector<JsonObject*>& JsonStack::jobjects () { return _jstack; }
          375  inline size_t JsonStack::size () const { return _stack.size(); }
          376  inline unsigned long JsonStack::getFlags () const { return _flags; }
          377  inline JsonStack* JsonStack::setFlags ( unsigned long mask ) { _flags |= mask; return this; }
          378  inline JsonStack* JsonStack::resetFlags ( unsigned long mask ) { _flags &= ~mask; return this; }
          379  inline bool JsonStack::issetFlags ( unsigned long mask ) const { return _flags & mask; }
          380 
          381  template<typename T>
          382  T JsonObject::get ( JsonStack& stack, const std::string& key ) const
          383  {
          384  int index = stack.rhas(key);
          385  if (index == 0) return T();;
          386  if (stack[index].second.type() == typeid(void*)) return T();
          387 
          388  return stack.as<T>( index );
          389  }
          390 
          391  template<typename T>
          392  T* JsonObject::jget ( JsonStack& stack ) const
          393  {
          394  vector<JsonObject*>& jobjects = stack.jobjects();
          395  vector<JsonObject*>::reverse_iterator rit = jobjects.rbegin();
          396 
          397  for ( ; rit != jobjects.rend() ; ++rit ) {
          398  T* jobject = dynamic_cast<T*>( *rit );
          399  if (jobject) return jobject;
          400  }
          401 
          402  return NULL;
          403  }
          404 
          405  template<typename T>
          406  inline void JsonObject::update ( JsonStack& stack, T hobject )
          407  {
          408  cdebug_log(19,0) << "JsonObject::update<T>()" << endl;
          409  stack.pop_back( _attributes.size() );
          410  stack.push_back<T>( getStackName(), hobject );
          411  setObject<T>( hobject );
          412  }
          413 
          414 
          415 // -------------------------------------------------------------------
          416 // Function : Json Parsers.
          417 
          418  Cell* jsonCellParse ( std::string filename );
          419  Cell* jsonBlobParse ( std::string filename );
          420 
          421 
          422 } // Hurricane namespace.
          423 
          424 #endif // HURRICANE_JSON_OBJECT_H
          T getEntity(unsigned int) const
          Definition: JsonObject.h:364
          +
          1 // -*- C++ -*-
          2 //
          3 // Copyright (c) BULL S.A. 2015-2018, All Rights Reserved
          4 //
          5 // This file is part of Hurricane.
          6 //
          7 // Hurricane is free software: you can redistribute it and/or modify
          8 // it under the terms of the GNU Lesser General Public License as
          9 // published by the Free Software Foundation, either version 3 of the
          10 // License, or (at your option) any later version.
          11 //
          12 // Hurricane is distributed in the hope that it will be useful, but
          13 // WITHOUT ANY WARRANTY; without even the implied warranty of MERCHAN-
          14 // TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU
          15 // General Public License for more details.
          16 //
          17 // You should have received a copy of the Lesser GNU General Public
          18 // License along with Hurricane. If not, see
          19 // <http://www.gnu.org/licenses/>.
          20 //
          21 // +-----------------------------------------------------------------+
          22 // | H U R R I C A N E |
          23 // | V L S I B a c k e n d D a t a - B a s e |
          24 // | |
          25 // | Author : Jean-Paul Chaput |
          26 // | E-mail : Jean-Paul.Chaput@lip6.fr |
          27 // | =============================================================== |
          28 // | C++ Header : "./hurricane/JsonObject.h" |
          29 // +-----------------------------------------------------------------+
          30 
          31 
          32 #ifndef HURRICANE_JSON_OBJECT_H
          33 #define HURRICANE_JSON_OBJECT_H
          34 
          35 #ifndef HURRICANE_SLOT_H
          36 #error "JsonObject.h must be included through Commons.h"
          37 #endif
          38 
          39 #include <iostream>
          40 #include <typeinfo>
          41 #include <typeindex>
          42 #include <type_traits>
          43 #include <set>
          44 #include <map>
          45 #include <string>
          46 #include <functional>
          47 #include <boost/any.hpp>
          48 
          49 
          50 namespace Hurricane {
          51 
          52  class DBo;
          53  class Hook;
          54  class Entity;
          55  class Cell;
          56  class Component;
          57  class JsonStack;
          58 
          59  class JsonArray { };
          60 
          61 
          62 // -------------------------------------------------------------------
          63 // Class : "JsonAttribute".
          64 
          65  class JsonAttribute {
          66  public:
          67  inline JsonAttribute ( const std::string& key, std::type_index tid );
          68  inline std::string key () const;
          69  inline std::type_index tid () const;
          70  private:
          71  std::string _key;
          72  std::type_index _tid;
          73  };
          74 
          75  inline JsonAttribute::JsonAttribute ( const std::string& key, std::type_index tid ) : _key(key), _tid(tid) { }
          76  inline std::string JsonAttribute::key () const { return _key; }
          77  inline std::type_index JsonAttribute::tid () const { return _tid; }
          78 
          79 
          80 // -------------------------------------------------------------------
          81 // Class : "JsonObject".
          82 
          83  class JsonObject {
          84  public:
          85  JsonObject ( unsigned long flags );
          86  virtual ~JsonObject ();
          87  virtual bool isDummy () const;
          88  virtual std::string getTypeName () const = 0;
          89  inline std::string getStackName () const;
          90  bool check ( JsonStack&, std::string fname ) const;
          91  void print ( std::ostream& ) const;
          92  bool has ( const std::string& key ) const;
          93  void add ( const std::string& key, std::type_index tid );
          94  void remove ( const std::string& key );
          95  template<typename T> inline T get ( JsonStack&, const std::string& key ) const;
          96  template<typename T> inline T* jget ( JsonStack& ) const;
          97  inline void copyAttrs ( const JsonObject*, bool reset=false );
          98  inline void clear ();
          99  inline std::string getName () const;
          100  inline void setName ( const std::string& );
          101  template<typename T> inline T getObject () const;
          102  template<typename T> inline void setObject ( T ) ;
          103  inline bool isBound () const;
          104  virtual JsonObject* clone ( unsigned long flags ) const = 0;
          105  virtual void toData ( JsonStack& );
          106  unsigned int presetId ( JsonStack& );
          107  template<typename T> inline void update ( JsonStack&, T );
          108  inline JsonObject* setFlags ( unsigned long mask );
          109  inline JsonObject* resetFlags ( unsigned long mask );
          110  inline bool issetFlags ( unsigned long mask ) const;
          111  protected:
          112  unsigned long _flags;
          113  std::string _name;
          114  std::vector<JsonAttribute> _stackeds;
          115  std::vector<JsonAttribute> _attributes;
          116  std::vector<JsonAttribute> _collections;
          117  boost::any _object;
          118  };
          119 
          120 
          121  inline bool JsonObject::isBound () const { return not _object.empty(); }
          122  inline std::string JsonObject::getName () const { return _name; }
          123  inline void JsonObject::setName ( const string& name ) { _name=name; }
          124  inline JsonObject* JsonObject::setFlags ( unsigned long mask ) { _flags |= mask; return this; }
          125  inline JsonObject* JsonObject::resetFlags ( unsigned long mask ) { _flags &= ~mask; return this; }
          126  inline bool JsonObject::issetFlags ( unsigned long mask ) const { return _flags & mask; }
          127 
          128  inline std::string JsonObject::getStackName () const
          129  { return (_name.empty()) ? std::string(".")+getTypeName(): _name; }
          130 
          131  template<typename T> inline T JsonObject::getObject () const
          132  { return boost::any_cast<T>(_object); }
          133 
          134  template<typename T> inline void JsonObject::setObject ( T t )
          135  { _object = t; }
          136 
          137  inline void JsonObject::copyAttrs ( const JsonObject* other, bool reset )
          138  {
          139  if (reset) _attributes.clear();
          140  for ( size_t i=0 ; i<other->_attributes.size() ; ++i )
          141  _attributes.push_back( other->_attributes[i] );
          142  }
          143 
          145  {
          146  _stackeds.clear();
          147  _attributes.clear();
          148  _collections.clear();
          149  boost::any emptyAny;
          150  _object.swap( emptyAny );
          151  }
          152 
          153 
          154 // -------------------------------------------------------------------
          155 // Class : "JsonKey".
          156 
          157  class JsonKey : public JsonObject {
          158  public:
          159  inline JsonKey ( const std::string& );
          160  virtual std::string getTypeName () const;
          161  virtual JsonKey* clone ( unsigned long ) const;
          162  private:
          163  std::string _key;
          164  };
          165 
          166 
          167 // -------------------------------------------------------------------
          168 // Class : "JsonDummy".
          169 
          170  class JsonDummy : public JsonObject {
          171  public:
          172  JsonDummy ();
          173  virtual bool isDummy () const;
          174  virtual std::string getTypeName () const;
          175  void setTypeName ( const std::string& name );
          176  virtual JsonDummy* clone ( unsigned long ) const;
          177  private:
          178  std::string _typename;
          179  };
          180 
          181 
          182 // -------------------------------------------------------------------
          183 // Class : "JsonBaseArray".
          184 
          185  template<typename T>
          186  class JsonBaseArray : public JsonObject {
          187  public:
          188  inline JsonBaseArray ( unsigned long flags );
          189  inline const std::vector<T>& array () const;
          190  inline void push_back ( T );
          191  private:
          192  std::vector<T> _array;
          193  };
          194 
          195 
          196  template<typename T>
          197  inline JsonBaseArray<T>::JsonBaseArray ( unsigned long flags )
          198  : JsonObject(flags)
          199  , _array()
          200  { }
          201 
          202  template<typename T>
          203  inline const std::vector<T>& JsonBaseArray<T>::array () const { return _array; }
          204 
          205  template<typename T>
          206  inline void JsonBaseArray<T>::push_back ( T element )
          207  { _array.push_back(element); }
          208 
          209 
          210 } // Hurricane namespace.
          211 
          212 
          213 namespace std {
          214 
          215  template<>
          216  struct less<Hurricane::JsonObject*> {
          217  inline bool operator() ( const Hurricane::JsonObject* lhs, const Hurricane::JsonObject* rhs )
          218  { return lhs->getTypeName() < rhs->getTypeName(); }
          219  };
          220 
          221 } // std namespace.
          222 
          223 
          224 namespace Hurricane {
          225 
          226 // -------------------------------------------------------------------
          227 // Class : "JsonTypes".
          228 
          229  class JsonTypes {
          230  public:
          231  static void initialize ();
          232  static void registerType ( JsonObject* );
          233  static JsonObject* find ( const std::string& tname );
          234  private:
          235  JsonTypes ();
          236  ~JsonTypes ();
          237  JsonTypes ( const JsonTypes& );
          238  void _registerType ( JsonObject* );
          239  JsonObject* _find ( const std::string& tname );
          240  private:
          241  static JsonTypes* _jsonTypes;
          242  std::set<JsonObject*> _jsonObjects;
          243  };
          244 
          245 
          246 // -------------------------------------------------------------------
          247 // Class : "JsonStack".
          248 
          249  class JsonStack {
          250  public:
          251  typedef std::pair<std::string, boost::any> Element;
          252  public:
          253  inline JsonStack ();
          254  inline size_t size () const;
          255  template<typename T> inline void push_back ( const std::string&, T );
          256  inline void pop_back ( size_t count=1 );
          257  inline int rhas ( const std::string& ) const;
          258  template<typename T> inline T as ( const std::string& ) const;
          259  template<typename T> inline T as ( int ) const;
          260  inline void push_back_dbo ( DBo* );
          261  inline void pop_back_dbo ();
          262  inline DBo* back_dbo () const;
          263  inline vector<JsonObject*>& jobjects ();
          264  template<typename T> inline T getEntity ( unsigned int ) const;
          265  void addEntity ( unsigned int jsonId, Entity* );
          266  void print ( std::ostream& ) const;
          267  inline unsigned long getFlags () const;
          268  inline JsonStack* setFlags ( unsigned long mask );
          269  inline JsonStack* resetFlags ( unsigned long mask );
          270  inline bool issetFlags ( unsigned long mask ) const;
          271  inline const Element& operator[] ( int index ) const;
          272  private:
          273  unsigned long _flags;
          274  vector<Element> _stack;
          275  vector<JsonObject*> _jstack;
          276  vector<DBo*> _dbos;
          277  std::map<unsigned int,Entity*> _entities;
          278  };
          279 
          280 
          281  inline JsonStack::JsonStack ()
          282  : _flags(0), _stack(), _jstack(), _dbos(), _entities()
          283  { }
          284 
          285  template<typename T> inline void JsonStack::push_back ( const std::string& key, T t )
          286  {
          287  cdebug_log(19,0) << "JsonStack::push_back(T) key:" << key << " value:" << t
          288  << " (" << demangle(typeid(T)) << ")." << endl;
          289  _stack.push_back(std::make_pair(key,boost::any(t)));
          290  }
          291 
          292  inline void JsonStack::pop_back ( size_t count )
          293  {
          294  while (count--) {
          295  if (_stack.empty()) {
          296  std::cerr << "[ERROR] JsonStack::pop_back(): Stack is empty, but "
          297  << (count+1) << " elements remains to pop." << std::endl;
          298  break;
          299  }
          300  cdebug_log(19,0) << "| _stack.pop_back() \"" << _stack.back().first
          301  << "\", size:" << _stack.size() << ", dbos:" << _dbos.size() << endl;
          302  _stack.pop_back();
          303  }
          304  }
          305 
          306  inline const JsonStack::Element& JsonStack::operator[] ( int index ) const
          307  {
          308  if (index < 0) return _stack[_stack.size()+index];
          309  return _stack[index];
          310  }
          311 
          312  inline int JsonStack::rhas ( const std::string& key ) const
          313  {
          314  if (_stack.empty()) return 0;
          315 
          316  int i = _stack.size()-1;
          317  do {
          318  if (_stack[i].first == key) {
          319  cdebug_log(19,0) << "JsonStack::rhas(): key \"" << key << "\" found at index:"
          320  << (i-(int)_stack.size()) << " (i:" << i << ") "
          321  << "(" << demangle(_stack[i].second.type().name()) << ")."
          322  << endl;
          323  return i-(int)_stack.size();
          324  }
          325  if (i == 0) break;
          326  --i;
          327  } while ( true );
          328 
          329  cdebug_log(19,0) << "JsonStack::rhas(): key \"" << key << "\" not found (returning index: 0)." << endl;
          330  return 0;
          331  }
          332 
          333  template<typename T> inline T JsonStack::as ( const std::string& key ) const
          334  {
          335  if (not _stack.empty()) {
          336  int i = _stack.size()-1;
          337  do {
          338  if (_stack[i].first == key) {
          339  cdebug_log(19,0) << "JsonStack::as<T>() k:" << key
          340  << " value:" << demangle(_stack[i].second.type().name()) << std::endl;
          341  return boost::any_cast<T>( _stack[i].second );
          342  }
          343  if (i == 0) break;
          344  --i;
          345  } while ( true );
          346 
          347  std::cerr << "[ERROR] JsonStack::as<T>(key): No element with key \""
          348  << key << "\" in stack." << std::endl;
          349  } else {
          350  std::cerr << "[ERROR] JsonStack::as<T>(key): Stack is empty while searching for key \""
          351  << key << "\"." << std::endl;
          352  }
          353 
          354  return T();
          355  }
          356 
          357  template<typename T> inline T JsonStack::as ( int index ) const
          358  {
          359  size_t i = (index >= 0) ? index : (_stack.size()+index);
          360  return boost::any_cast<T>( _stack[i].second );
          361  }
          362 
          363 
          364  template<typename T> inline T JsonStack::getEntity ( unsigned int id ) const
          365  {
          366  std::map<unsigned int,Entity*>::const_iterator it = _entities.find(id);
          367  if (it == _entities.end()) return NULL;
          368  return dynamic_cast<T>((*it).second);
          369  }
          370 
          371  inline void JsonStack::push_back_dbo ( DBo* dbo ) { _dbos.push_back(dbo); }
          372  inline void JsonStack::pop_back_dbo () { _dbos.pop_back(); }
          373  inline DBo* JsonStack::back_dbo () const { return (_dbos.empty()) ? NULL : _dbos.back(); }
          374  inline vector<JsonObject*>& JsonStack::jobjects () { return _jstack; }
          375  inline size_t JsonStack::size () const { return _stack.size(); }
          376  inline unsigned long JsonStack::getFlags () const { return _flags; }
          377  inline JsonStack* JsonStack::setFlags ( unsigned long mask ) { _flags |= mask; return this; }
          378  inline JsonStack* JsonStack::resetFlags ( unsigned long mask ) { _flags &= ~mask; return this; }
          379  inline bool JsonStack::issetFlags ( unsigned long mask ) const { return _flags & mask; }
          380 
          381  template<typename T>
          382  T JsonObject::get ( JsonStack& stack, const std::string& key ) const
          383  {
          384  int index = stack.rhas(key);
          385  if (index == 0) return T();;
          386  if (stack[index].second.type() == typeid(void*)) return T();
          387 
          388  return stack.as<T>( index );
          389  }
          390 
          391  template<typename T>
          392  T* JsonObject::jget ( JsonStack& stack ) const
          393  {
          394  vector<JsonObject*>& jobjects = stack.jobjects();
          395  vector<JsonObject*>::reverse_iterator rit = jobjects.rbegin();
          396 
          397  for ( ; rit != jobjects.rend() ; ++rit ) {
          398  T* jobject = dynamic_cast<T*>( *rit );
          399  if (jobject) return jobject;
          400  }
          401 
          402  return NULL;
          403  }
          404 
          405  template<typename T>
          406  inline void JsonObject::update ( JsonStack& stack, T hobject )
          407  {
          408  cdebug_log(19,0) << "JsonObject::update<T>()" << endl;
          409  stack.pop_back( _attributes.size() );
          410  stack.push_back<T>( getStackName(), hobject );
          411  setObject<T>( hobject );
          412  }
          413 
          414 
          415 // -------------------------------------------------------------------
          416 // Function : Json Parsers.
          417 
          418  Cell* jsonCellParse ( std::string filename );
          419  Cell* jsonBlobParse ( std::string filename );
          420 
          421 
          422 } // Hurricane namespace.
          423 
          424 #endif // HURRICANE_JSON_OBJECT_H
          T getEntity(unsigned int) const
          Definition: JsonObject.h:364
          std::string getName() const
          Definition: JsonObject.h:122
          std::string getStackName() const
          Definition: JsonObject.h:128
          virtual void toData(JsonStack &)
          @@ -59,7 +59,6 @@ $(function() {
          DataBase object root class (API).
          Definition: DBo.h:46
          size_t size() const
          Definition: JsonObject.h:375
          void print(std::ostream &) const
          -
          Occurrenceable objects root class (API).
          Definition: Entity.h:38
          void addEntity(unsigned int jsonId, Entity *)
          unsigned int presetId(JsonStack &)
          JsonObject * setFlags(unsigned long mask)
          Definition: JsonObject.h:124
          @@ -74,6 +73,7 @@ $(function() {
          void clear()
          Definition: JsonObject.h:144
          T get(JsonStack &, const std::string &key) const
          Definition: JsonObject.h:382
          DBo * back_dbo() const
          Definition: JsonObject.h:373
          +
          void setName(const std::string &)
          Definition: JsonObject.h:123
          void copyAttrs(const JsonObject *, bool reset=false)
          Definition: JsonObject.h:137
          T * jget(JsonStack &) const
          Definition: JsonObject.h:392
          @@ -92,7 +92,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/JsonReader_8h_source.html b/hurricane/doc/hurricane/html/JsonReader_8h_source.html index 6a6ea74a..e2b8deaa 100644 --- a/hurricane/doc/hurricane/html/JsonReader_8h_source.html +++ b/hurricane/doc/hurricane/html/JsonReader_8h_source.html @@ -50,7 +50,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Layer_8h_source.html b/hurricane/doc/hurricane/html/Layer_8h_source.html index 9237549f..ee4ae742 100644 --- a/hurricane/doc/hurricane/html/Layer_8h_source.html +++ b/hurricane/doc/hurricane/html/Layer_8h_source.html @@ -44,11 +44,11 @@ $(function() {
          Layer.h
          -
          1 
          2 // -*- C++ -*-
          3 //
          4 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
          5 //
          6 // This file is part of Hurricane.
          7 //
          8 // Hurricane is free software: you can redistribute it and/or modify
          9 // it under the terms of the GNU Lesser General Public License as
          10 // published by the Free Software Foundation, either version 3 of the
          11 // License, or (at your option) any later version.
          12 //
          13 // Hurricane is distributed in the hope that it will be useful, but
          14 // WITHOUT ANY WARRANTY; without even the implied warranty of MERCHAN-
          15 // TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU
          16 // General Public License for more details.
          17 //
          18 // You should have received a copy of the Lesser GNU General Public
          19 // License along with Hurricane. If not, see
          20 // <http://www.gnu.org/licenses/>.
          21 //
          22 // +-----------------------------------------------------------------+
          23 // | H U R R I C A N E |
          24 // | V L S I B a c k e n d D a t a - B a s e |
          25 // | |
          26 // | Author : Remy Escassut |
          27 // | E-mail : Jean-Paul.Chaput@lip6.fr |
          28 // | =============================================================== |
          29 // | C++ Header : "./hurricane/Layer.h" |
          30 // +-----------------------------------------------------------------+
          31 
          32 
          33 #ifndef HURRICANE_LAYER_H
          34 #define HURRICANE_LAYER_H
          35 
          36 #include "hurricane/Mask.h"
          37 #include "hurricane/DBo.h"
          38 #include "hurricane/Layers.h"
          39 #include "hurricane/DbU.h"
          40 #include "hurricane/BasicLayers.h"
          41 
          42 
          43 namespace Hurricane {
          44 
          45 
          46  class Technology;
          47 
          48 
          49 // -------------------------------------------------------------------
          50 // Class : "Hurricane::Layer".
          51 
          52  class Layer : public DBo {
          53  public:
          54  typedef DBo Super;
          55  public:
          56  static const uint32_t NoFlags = 0;
          57  static const uint32_t EnclosureH = (1 << 0);
          58  static const uint32_t EnclosureV = (1 << 1);
          59  static const uint32_t EnclosureMax = (1 << 2);
          60  static const uint32_t ExtensionCap = (1 << 3);
          61  static const uint32_t ExtensionWidth = (1 << 4);
          62 
          63  public:
          64  // Types.
          65  typedef Hurricane::Mask<unsigned long long> Mask;
          66  // Accessors.
          67  inline Technology* getTechnology () const;
          68  inline const Name& getName () const;
          69  inline const Mask& getMask () const;
          70  inline const Mask& getExtractMask () const;
          71  inline const DbU::Unit& getMinimalSize () const;
          72  inline const DbU::Unit& getMinimalSpacing () const;
          73  virtual BasicLayers getBasicLayers () const = 0;
          74  virtual const Layer* getBlockageLayer () const;
          75  virtual const Layer* getTop () const;
          76  virtual const Layer* getBottom () const;
          77  virtual const Layer* getOpposite ( const Layer* ) const;
          78  Layer* getMetalAbove ( bool useSymbolic=true ) const;
          79  Layer* getMetalBelow ( bool useSymbolic=true ) const;
          80  Layer* getCutAbove ( bool useSymbolic=true ) const;
          81  Layer* getCutBelow ( bool useSymbolic=true ) const;
          82  virtual DbU::Unit getEnclosure ( uint32_t flags ) const;
          83  virtual DbU::Unit getExtentionCap () const;
          84  virtual DbU::Unit getExtentionWidth () const;
          85  virtual DbU::Unit getEnclosure ( const BasicLayer* layer, uint32_t flags ) const;
          86  virtual DbU::Unit getExtentionCap ( const BasicLayer* layer ) const;
          87  virtual DbU::Unit getExtentionWidth ( const BasicLayer* layer ) const;
          88  virtual DbU::Unit getTopEnclosure ( uint32_t flags ) const;
          89  virtual DbU::Unit getBottomEnclosure ( uint32_t flags ) const;
          90  // Predicates
          91  inline bool above ( const Layer* layer ) const;
          92  inline bool below ( const Layer* layer ) const;
          93  bool contains ( const Layer* layer ) const;
          94  bool intersect ( const Layer* layer ) const;
          95  inline bool isSymbolic () const;
          96  // Updators
          97  void setName ( const Name& name );
          98  inline void setSymbolic ( bool );
          99  void setMinimalSize ( const DbU::Unit& minimalSize );
          100  void setMinimalSpacing ( const DbU::Unit& minimalSpacing );
          101  virtual void setEnclosure ( const BasicLayer* layer, DbU::Unit, uint32_t flags );
          102  virtual void setExtentionCap ( const BasicLayer* layer, DbU::Unit );
          103  virtual void setExtentionWidth ( const BasicLayer* layer, DbU::Unit );
          104  // Hurricane Managment.
          105  virtual void _toJson ( JsonWriter* ) const;
          106  virtual string _getString () const;
          107  virtual Record* _getRecord () const;
          108  inline Layer* _getNextOfTechnologyLayerMap () const;
          109  inline void _setMask ( const Mask& mask );
          110  inline void _setExtractMask ( const Mask& extractMask );
          111  inline void _setNextOfTechnologyLayerMap ( Layer* layer );
          112  virtual void _onDbuChange ( float scale );
          113  static const Name& _sgetName ( const Layer* );
          114 
          115  private:
          116  // Internal: Attributes
          117  Technology* _technology;
          118  Name _name;
          119  Mask _mask;
          120  Mask _extractMask;
          121  DbU::Unit _minimalSize;
          122  DbU::Unit _minimalSpacing;
          123  Layer* _nextOfTechnologyLayerMap;
          124  bool _symbolic;
          125 
          126  protected:
          127  // Internal: Constructors & Destructors.
          128  Layer ( Technology* technology
          129  , const Name& name
          130  , const DbU::Unit& minimalSize = 0
          131  , const DbU::Unit& minimalSpacing = 0
          132  , const DbU::Unit& pitch = 0
          133  );
          134  virtual void _postCreate ();
          135  virtual void _preDestroy ();
          136 
          137  public:
          138  struct CompareByMask : public binary_function<const Layer*,const Layer*,bool> {
          139  inline bool operator() ( const Layer* lhs, const Layer* rhs ) const;
          140  };
          141  };
          142 
          143 
          144 // Inline Functions.
          145  inline bool Layer::isSymbolic () const { return _symbolic; }
          146  inline bool Layer::above ( const Layer* layer ) const { return _mask > layer->getMask(); }
          147  inline bool Layer::below ( const Layer* layer ) const { return _mask < layer->getMask(); }
          148  inline Technology* Layer::getTechnology () const { return _technology; }
          149  inline const Name& Layer::getName () const { return _name; }
          150  inline const Layer::Mask& Layer::getMask () const { return _mask; }
          151  inline const Layer::Mask& Layer::getExtractMask () const { return _extractMask; }
          152  inline const DbU::Unit& Layer::getMinimalSize () const { return _minimalSize; }
          153  inline const DbU::Unit& Layer::getMinimalSpacing () const { return _minimalSpacing; }
          154  inline void Layer::setSymbolic ( bool state ) { _symbolic = state; }
          155  inline Layer* Layer::_getNextOfTechnologyLayerMap () const { return _nextOfTechnologyLayerMap; }
          156  inline void Layer::_setMask ( const Mask& mask ) { _mask = mask; }
          157  inline void Layer::_setExtractMask ( const Mask& extractMask ) { _extractMask = extractMask; }
          158  inline void Layer::_setNextOfTechnologyLayerMap ( Layer* layer ) { _nextOfTechnologyLayerMap = layer; }
          159 
          160  inline bool Layer::CompareByMask::operator() ( const Layer* lhs, const Layer* rhs ) const
          161  { return (lhs?lhs->getMask():Layer::Mask()) < (rhs?rhs->getMask():Layer::Mask()); }
          162 
          163 
          164 // -------------------------------------------------------------------
          165 // Class : "Hurricane::JsonLayer".
          166 
          167  class JsonLayer : public JsonDBo {
          168  public:
          169  JsonLayer ( unsigned long flags );
          170  Technology* lookupTechnology ( JsonStack&, const string& fname ) const;
          171  };
          172 
          173 
          174 } // Hurricane namespace.
          175 
          176 
          177 INSPECTOR_P_SUPPORT(Hurricane::Layer);
          178 INSPECTOR_PV_SUPPORT(Hurricane::Layer::Mask);
          179 
          180 
          181 #endif // HURRICANE_LAYER_H
          void setName(const Name &name)
          +
          1 
          2 // -*- C++ -*-
          3 //
          4 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
          5 //
          6 // This file is part of Hurricane.
          7 //
          8 // Hurricane is free software: you can redistribute it and/or modify
          9 // it under the terms of the GNU Lesser General Public License as
          10 // published by the Free Software Foundation, either version 3 of the
          11 // License, or (at your option) any later version.
          12 //
          13 // Hurricane is distributed in the hope that it will be useful, but
          14 // WITHOUT ANY WARRANTY; without even the implied warranty of MERCHAN-
          15 // TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU
          16 // General Public License for more details.
          17 //
          18 // You should have received a copy of the Lesser GNU General Public
          19 // License along with Hurricane. If not, see
          20 // <http://www.gnu.org/licenses/>.
          21 //
          22 // +-----------------------------------------------------------------+
          23 // | H U R R I C A N E |
          24 // | V L S I B a c k e n d D a t a - B a s e |
          25 // | |
          26 // | Author : Remy Escassut |
          27 // | E-mail : Jean-Paul.Chaput@lip6.fr |
          28 // | =============================================================== |
          29 // | C++ Header : "./hurricane/Layer.h" |
          30 // +-----------------------------------------------------------------+
          31 
          32 
          33 #ifndef HURRICANE_LAYER_H
          34 #define HURRICANE_LAYER_H
          35 
          36 #include "hurricane/Mask.h"
          37 #include "hurricane/DBo.h"
          38 #include "hurricane/Layers.h"
          39 #include "hurricane/DbU.h"
          40 #include "hurricane/BasicLayers.h"
          41 
          42 
          43 namespace Hurricane {
          44 
          45 
          46  class Technology;
          47 
          48 
          49 // -------------------------------------------------------------------
          50 // Class : "Hurricane::Layer".
          51 
          52  class Layer : public DBo {
          53  public:
          54  typedef DBo Super;
          55  public:
          56  static const uint32_t NoFlags = 0;
          57  static const uint32_t EnclosureH = (1 << 0);
          58  static const uint32_t EnclosureV = (1 << 1);
          59  static const uint32_t EnclosureMax = (1 << 2);
          60  static const uint32_t ExtensionCap = (1 << 3);
          61  static const uint32_t ExtensionWidth = (1 << 4);
          62 
          63  public:
          64  // Types.
          65  typedef Hurricane::Mask<unsigned long long> Mask;
          66  // Accessors.
          67  inline Technology* getTechnology () const;
          68  inline const Name& getName () const;
          69  inline const Mask& getMask () const;
          70  inline const Mask& getExtractMask () const;
          71  inline const DbU::Unit& getMinimalSize () const;
          72  inline const DbU::Unit& getMinimalSpacing () const;
          73  virtual BasicLayers getBasicLayers () const = 0;
          74  virtual const Layer* getBlockageLayer () const;
          75  virtual const Layer* getTop () const;
          76  virtual const Layer* getBottom () const;
          77  virtual const Layer* getOpposite ( const Layer* ) const;
          78  Layer* getMetalAbove ( bool useSymbolic=true ) const;
          79  Layer* getMetalBelow ( bool useSymbolic=true ) const;
          80  Layer* getCutAbove ( bool useSymbolic=true ) const;
          81  Layer* getCutBelow ( bool useSymbolic=true ) const;
          82  virtual DbU::Unit getEnclosure ( uint32_t flags ) const;
          83  virtual DbU::Unit getExtentionCap () const;
          84  virtual DbU::Unit getExtentionWidth () const;
          85  virtual DbU::Unit getEnclosure ( const BasicLayer* layer, uint32_t flags ) const;
          86  virtual DbU::Unit getExtentionCap ( const BasicLayer* layer ) const;
          87  virtual DbU::Unit getExtentionWidth ( const BasicLayer* layer ) const;
          88  virtual DbU::Unit getTopEnclosure ( uint32_t flags ) const;
          89  virtual DbU::Unit getBottomEnclosure ( uint32_t flags ) const;
          90  // Predicates
          91  inline bool above ( const Layer* layer ) const;
          92  inline bool below ( const Layer* layer ) const;
          93  bool contains ( const Layer* layer ) const;
          94  bool intersect ( const Layer* layer ) const;
          95  inline bool isSymbolic () const;
          96  inline bool isBlockage () const;
          97  // Updators
          98  void setName ( const Name& name );
          99  inline void setSymbolic ( bool );
          100  inline void setBlockage ( bool );
          101  void setMinimalSize ( const DbU::Unit& minimalSize );
          102  void setMinimalSpacing ( const DbU::Unit& minimalSpacing );
          103  virtual void setEnclosure ( const BasicLayer* layer, DbU::Unit, uint32_t flags );
          104  virtual void setExtentionCap ( const BasicLayer* layer, DbU::Unit );
          105  virtual void setExtentionWidth ( const BasicLayer* layer, DbU::Unit );
          106  // Hurricane Managment.
          107  virtual void _toJson ( JsonWriter* ) const;
          108  virtual string _getString () const;
          109  virtual Record* _getRecord () const;
          110  inline Layer* _getNextOfTechnologyLayerMap () const;
          111  inline void _setMask ( const Mask& mask );
          112  inline void _setExtractMask ( const Mask& extractMask );
          113  inline void _setNextOfTechnologyLayerMap ( Layer* layer );
          114  virtual void _onDbuChange ( float scale );
          115  static const Name& _sgetName ( const Layer* );
          116 
          117  private:
          118  // Internal: Attributes
          119  Technology* _technology;
          120  Name _name;
          121  Mask _mask;
          122  Mask _extractMask;
          123  DbU::Unit _minimalSize;
          124  DbU::Unit _minimalSpacing;
          125  Layer* _nextOfTechnologyLayerMap;
          126  bool _symbolic;
          127  bool _blockage;
          128 
          129  protected:
          130  // Internal: Constructors & Destructors.
          131  Layer ( Technology* technology
          132  , const Name& name
          133  , const DbU::Unit& minimalSize = 0
          134  , const DbU::Unit& minimalSpacing = 0
          135  , const DbU::Unit& pitch = 0
          136  );
          137  virtual void _postCreate ();
          138  virtual void _preDestroy ();
          139 
          140  public:
          141  struct CompareByMask : public binary_function<const Layer*,const Layer*,bool> {
          142  inline bool operator() ( const Layer* lhs, const Layer* rhs ) const;
          143  };
          144  };
          145 
          146 
          147 // Inline Functions.
          148  inline bool Layer::isSymbolic () const { return _symbolic; }
          149  inline bool Layer::isBlockage () const { return _blockage; }
          150  inline bool Layer::above ( const Layer* layer ) const { return _mask > layer->getMask(); }
          151  inline bool Layer::below ( const Layer* layer ) const { return _mask < layer->getMask(); }
          152  inline Technology* Layer::getTechnology () const { return _technology; }
          153  inline const Name& Layer::getName () const { return _name; }
          154  inline const Layer::Mask& Layer::getMask () const { return _mask; }
          155  inline const Layer::Mask& Layer::getExtractMask () const { return _extractMask; }
          156  inline const DbU::Unit& Layer::getMinimalSize () const { return _minimalSize; }
          157  inline const DbU::Unit& Layer::getMinimalSpacing () const { return _minimalSpacing; }
          158  inline void Layer::setSymbolic ( bool state ) { _symbolic = state; }
          159  inline void Layer::setBlockage ( bool state ) { _blockage = state; }
          160  inline Layer* Layer::_getNextOfTechnologyLayerMap () const { return _nextOfTechnologyLayerMap; }
          161  inline void Layer::_setMask ( const Mask& mask ) { _mask = mask; }
          162  inline void Layer::_setExtractMask ( const Mask& extractMask ) { _extractMask = extractMask; }
          163  inline void Layer::_setNextOfTechnologyLayerMap ( Layer* layer ) { _nextOfTechnologyLayerMap = layer; }
          164 
          165  inline bool Layer::CompareByMask::operator() ( const Layer* lhs, const Layer* rhs ) const
          166  { return (lhs?lhs->getMask():Layer::Mask()) < (rhs?rhs->getMask():Layer::Mask()); }
          167 
          168 
          169 // -------------------------------------------------------------------
          170 // Class : "Hurricane::JsonLayer".
          171 
          172  class JsonLayer : public JsonDBo {
          173  public:
          174  JsonLayer ( unsigned long flags );
          175  Technology* lookupTechnology ( JsonStack&, const string& fname ) const;
          176  };
          177 
          178 
          179 } // Hurricane namespace.
          180 
          181 
          182 INSPECTOR_P_SUPPORT(Hurricane::Layer);
          183 INSPECTOR_PV_SUPPORT(Hurricane::Layer::Mask);
          184 
          185 
          186 #endif // HURRICANE_LAYER_H
          void setName(const Name &name)
          bool intersect(const Layer *layer) const
          BasicLayer description (API)
          Definition: BasicLayer.h:44
          -
          Technology * getTechnology() const
          Definition: Layer.h:148
          -
          const DbU::Unit & getMinimalSpacing() const
          Definition: Layer.h:153
          +
          Technology * getTechnology() const
          Definition: Layer.h:152
          +
          const DbU::Unit & getMinimalSpacing() const
          Definition: Layer.h:157
          bool contains(const Layer *layer) const
          Name description (API)
          Definition: Name.h:36
          Layer * getCutBelow(bool useSymbolic=true) const
          @@ -63,25 +63,25 @@ $(function() {
          void setMinimalSize(const DbU::Unit &minimalSize)
          virtual const Layer * getTop() const
          Layer description (API)
          Definition: Layer.h:52
          -
          const Mask & getMask() const
          Definition: Layer.h:150
          -
          bool above(const Layer *layer) const
          Definition: Layer.h:146
          -
          const Mask & getExtractMask() const
          Definition: Layer.h:151
          +
          const Mask & getMask() const
          Definition: Layer.h:154
          +
          bool above(const Layer *layer) const
          Definition: Layer.h:150
          +
          const Mask & getExtractMask() const
          Definition: Layer.h:155
          Layer * getCutAbove(bool useSymbolic=true) const
          void setMinimalSpacing(const DbU::Unit &minimalSpacing)
          -
          const Name & getName() const
          Definition: Layer.h:149
          +
          const Name & getName() const
          Definition: Layer.h:153
          The namespace dedicated to Hurricane.
          Definition: Generalities.dox:5
          virtual const Layer * getBottom() const
          -
          const DbU::Unit & getMinimalSize() const
          Definition: Layer.h:152
          +
          const DbU::Unit & getMinimalSize() const
          Definition: Layer.h:156
          Layer * getMetalBelow(bool useSymbolic=true) const
          virtual void setExtentionCap(const BasicLayer *layer, DbU::Unit)
          Technological rules description (API).
          Definition: Technology.h:66
          -
          bool below(const Layer *layer) const
          Definition: Layer.h:147
          +
          bool below(const Layer *layer) const
          Definition: Layer.h:151


          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Layers_8h_source.html b/hurricane/doc/hurricane/html/Layers_8h_source.html index 9b3b12ac..129cc848 100644 --- a/hurricane/doc/hurricane/html/Layers_8h_source.html +++ b/hurricane/doc/hurricane/html/Layers_8h_source.html @@ -57,7 +57,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Libraries_8h_source.html b/hurricane/doc/hurricane/html/Libraries_8h_source.html index c8ccb675..d792f1df 100644 --- a/hurricane/doc/hurricane/html/Libraries_8h_source.html +++ b/hurricane/doc/hurricane/html/Libraries_8h_source.html @@ -57,7 +57,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Library_8h_source.html b/hurricane/doc/hurricane/html/Library_8h_source.html index 18e0fa68..327fe42a 100644 --- a/hurricane/doc/hurricane/html/Library_8h_source.html +++ b/hurricane/doc/hurricane/html/Library_8h_source.html @@ -66,7 +66,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/ListCollection_8h_source.html b/hurricane/doc/hurricane/html/ListCollection_8h_source.html index bf5e876a..7b252c51 100644 --- a/hurricane/doc/hurricane/html/ListCollection_8h_source.html +++ b/hurricane/doc/hurricane/html/ListCollection_8h_source.html @@ -54,7 +54,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Locator_8h_source.html b/hurricane/doc/hurricane/html/Locator_8h_source.html index 483e07a1..c14d2880 100644 --- a/hurricane/doc/hurricane/html/Locator_8h_source.html +++ b/hurricane/doc/hurricane/html/Locator_8h_source.html @@ -59,7 +59,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/MapCollection_8h_source.html b/hurricane/doc/hurricane/html/MapCollection_8h_source.html index 561049cf..26502798 100644 --- a/hurricane/doc/hurricane/html/MapCollection_8h_source.html +++ b/hurricane/doc/hurricane/html/MapCollection_8h_source.html @@ -54,7 +54,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Name_8h_source.html b/hurricane/doc/hurricane/html/Name_8h_source.html index 005456ef..7397700a 100644 --- a/hurricane/doc/hurricane/html/Name_8h_source.html +++ b/hurricane/doc/hurricane/html/Name_8h_source.html @@ -62,7 +62,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Names_8h_source.html b/hurricane/doc/hurricane/html/Names_8h_source.html index 122f81aa..ba7aff89 100644 --- a/hurricane/doc/hurricane/html/Names_8h_source.html +++ b/hurricane/doc/hurricane/html/Names_8h_source.html @@ -50,7 +50,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Net_8h_source.html b/hurricane/doc/hurricane/html/Net_8h_source.html index a9311ffd..b96e2712 100644 --- a/hurricane/doc/hurricane/html/Net_8h_source.html +++ b/hurricane/doc/hurricane/html/Net_8h_source.html @@ -44,7 +44,7 @@ $(function() {
          Net.h
          -
          1 // ****************************************************************************************************
          2 // File: ./hurricane/Net.h
          3 // Authors: R. Escassut
          4 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
          5 //
          6 // This file is part of Hurricane.
          7 //
          8 // Hurricane is free software: you can redistribute it and/or modify it under the terms of the GNU
          9 // Lesser General Public License as published by the Free Software Foundation, either version 3 of the
          10 // License, or (at your option) any later version.
          11 //
          12 // Hurricane is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
          13 // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU
          14 // General Public License for more details.
          15 //
          16 // You should have received a copy of the Lesser GNU General Public License along with Hurricane. If
          17 // not, see <http://www.gnu.org/licenses/>.
          18 // ****************************************************************************************************
          19 
          20 #ifndef HURRICANE_NET
          21 #define HURRICANE_NET
          22 
          23 #include <functional>
          24 #include "hurricane/Entity.h"
          25 #include "hurricane/Nets.h"
          26 #include "hurricane/Component.h"
          27 #include "hurricane/Rubbers.h"
          28 #include "hurricane/Rubber.h"
          29 #include "hurricane/RoutingPads.h"
          30 #include "hurricane/Plugs.h"
          31 #include "hurricane/Pins.h"
          32 #include "hurricane/Contacts.h"
          33 #include "hurricane/Segments.h"
          34 #include "hurricane/Verticals.h"
          35 #include "hurricane/Horizontals.h"
          36 #include "hurricane/Pads.h"
          37 #include "hurricane/IntrusiveSet.h"
          38 #include "hurricane/Path.h"
          39 #include "hurricane/NetAlias.h"
          40 
          41 namespace Hurricane {
          42 
          43 
          44 // ****************************************************************************************************
          45 // Net declaration
          46 // ****************************************************************************************************
          47 
          48 class Net : public Entity {
          49 // **********************
          50 
          51 // Types
          52 // *****
          53 
          54  public: typedef Entity Inherit;
          55 
          56  public: typedef unsigned Arity;
          57 
          58  public: class Type {
          59  // ***************
          60 
          61  public: enum Code {UNDEFINED=0, LOGICAL=1, CLOCK=2, POWER=3, GROUND=4, BLOCKAGE=5};
          62 
          63  private: Code _code;
          64 
          65  public: Type(const Code& code = UNDEFINED);
          66  public: Type(const Type& type);
          67  public: Type(string);
          68 
          69  public: Type& operator=(const Type& type);
          70 
          71  public: operator const Code&() const {return _code;};
          72 
          73  public: const Code& getCode() const {return _code;};
          74 
          75  public: string _getTypeName() const { return _TName("Net::type"); };
          76  public: string _getString() const;
          77  public: Record* _getRecord() const;
          78 
          79  };
          80 
          81  public: class Direction {
          82  // ********************
          83 
          84  public: enum Code { DirIn = 0x0001
          85  , DirOut = 0x0002
          86  , DirUndefined = 0x0000
          87  , ConnTristate = 0x0100
          88  , ConnWiredOr = 0x0200
          90  , IN = DirIn
          91  , OUT = DirOut
          97  , DirMask = DirIn | DirOut | DirUndefined
          98  };
          99 
          100  private: Code _code;
          101 
          102  public: Direction(const Code& code = UNDEFINED);
          103  public: Direction(const Direction& direction);
          104  public: Direction(string);
          105 
          106  public: Direction& operator =(const Direction& direction);
          107  public: Direction& operator|=(const Direction& direction);
          108 
          109  public: operator const Code&() const {return _code;};
          110 
          111  public: const Code& getCode() const {return _code;};
          112 
          113  public: string _getTypeName() const { return _TName("Net::Direction"); };
          114  public: string _getString() const;
          115  public: Record* _getRecord() const;
          116 
          117  };
          118 
          119  class ComponentSet : public IntrusiveSet<Component> {
          120  // ************************************************
          121 
          122  public: typedef IntrusiveSet<Component> Inherit;
          123 
          124  public: ComponentSet();
          125 
          126  public: virtual unsigned _getHashValue(Component* component) const;
          127  public: virtual Component* _getNextElement(Component* component) const;
          128  public: virtual void _setNextElement(Component* component, Component* nextComponent) const;
          129 
          130  };
          131 
          132  class RubberSet : public IntrusiveSet<Rubber> {
          133  // ******************************************
          134 
          135  public: typedef IntrusiveSet<Rubber> Inherit;
          136 
          137  public: RubberSet();
          138 
          139  public: virtual unsigned _getHashValue(Rubber* rubber) const;
          140  public: virtual Rubber* _getNextElement(Rubber* rubber) const;
          141  public: virtual void _setNextElement(Rubber* rubber, Rubber* nextRubber) const;
          142 
          143  };
          144 
          145 // Attributes
          146 // **********
          147 
          148  private: Cell* _cell;
          149  private: Name _name;
          150  private: Arity _arity;
          151  private: bool _isGlobal;
          152  private: bool _isExternal;
          153  private: bool _isAutomatic;
          154  private: Type _type;
          155  private: Direction _direction;
          156  private: Point _position;
          157  private: ComponentSet _componentSet;
          158  private: RubberSet _rubberSet;
          159  private: Net* _nextOfCellNetMap;
          160  private: NetMainName _mainName;
          161 
          162 // Constructors
          163 // ************
          164 
          165  protected: Net(Cell* cell, const Name& name);
          166 
          167  public: static Net* create(Cell* cell, const Name& name);
          168 
          169 // Accessors
          170 // *********
          171 
          172  public: virtual Cell* getCell() const {return _cell;};
          173  public: virtual Box getBoundingBox() const;
          174  public: const Name& getName() const {return _name;};
          175  public: const NetMainName* getMainName() const { return &_mainName; }
          176  public: const Arity& getArity() const {return _arity;};
          177  public: const Type& getType() const {return _type;};
          178  public: const Direction& getDirection() const {return _direction;};
          179  public: const Point& getPosition() const {return _position;};
          180  public: const DbU::Unit& getX() const {return _position.getX();};
          181  public: const DbU::Unit& getY() const {return _position.getY();};
          182  public: Components getComponents() const {return _componentSet.getElements();};
          183  public: Rubbers getRubbers() const {return _rubberSet.getElements();};
          184  public: RoutingPads getRoutingPads() const;
          185  public: Plugs getPlugs() const;
          186  public: Pins getPins() const;
          187  public: Contacts getContacts() const;
          188  public: Segments getSegments() const;
          189  public: Verticals getVerticals() const;
          190  public: Horizontals getHorizontals() const;
          191  public: Pads getPads() const;
          192  public: Plugs getSlavePlugs() const;
          193  public: Plugs getConnectedSlavePlugs() const;
          194  public: Plugs getUnconnectedSlavePlugs() const;
          195  public: Aliases getAliases() const { return new AliasList(this); };
          196 
          197 // Filters
          198 // *******
          199 
          200  public: static NetFilter getIsCellNetFilter();
          201  public: static NetFilter getIsDeepNetFilter();
          202  public: static NetFilter getIsGlobalFilter();
          203  public: static NetFilter getIsExternalFilter();
          204  public: static NetFilter getIsInternalFilter();
          205  public: static NetFilter getIsClockFilter();
          206  public: static NetFilter getIsSupplyFilter();
          207  public: static NetFilter getIsPowerFilter();
          208  public: static NetFilter getIsGroundFilter();
          209 
          210 // Predicates
          211 // **********
          212 
          213  public: virtual bool isDeepNet () const {return false;};
          214  public: bool isGlobal () const {return _isGlobal;};
          215  public: bool isExternal () const {return _isExternal;};
          216  public: bool isAutomatic() const {return _isAutomatic;};
          217  public: bool isBlockage () const {return (_type == Type::BLOCKAGE);};
          218  public: bool isLogical () const {return (_type == Type::LOGICAL);};
          219  public: bool isClock () const {return (_type == Type::CLOCK);};
          220  public: bool isPower () const {return (_type == Type::POWER);};
          221  public: bool isGround () const {return (_type == Type::GROUND);};
          222  public: bool isSupply () const {return (isPower() || isGround());};
          223  public: bool hasAlias (const Name& name) const;
          224 
          225 // Updators
          226 // ********
          227 
          228  public: void setName(Name name);
          229  public: void setArity(const Arity& arity);
          230  public: void setGlobal(bool isGlobal);
          231  public: void setExternal(bool isExternal);
          232  public: void setAutomatic(bool isAutomatic);
          233  public: void setType(const Type& type);
          234  public: void setDirection(const Direction& direction);
          235  public: void setPosition(const Point& position);
          236  public: void setRoutingState(uint32_t state);
          237  public: void materialize();
          238  public: void unmaterialize();
          239  public: bool addAlias(const Name& name);
          240  public: bool removeAlias(const Name& name);
          241  public: void merge(Net* net);
          242  public: Net* getClone(Cell* cloneCell);
          243 
          244 // Others
          245 // ******
          246 
          247  protected: virtual void _postCreate();
          248  protected: virtual void _preDestroy();
          249 
          250  public: virtual void _toJson(JsonWriter*) const;
          251  public: virtual void _toJsonSignature(JsonWriter*) const;
          252  public: virtual void _toJsonCollections(JsonWriter*) const;
          253  public: virtual string _getTypeName() const {return _TName("Net");};
          254  public: virtual string _getString() const;
          255  public: virtual Record* _getRecord() const;
          256  public: NetMainName& _getMainName() { return _mainName; }
          257  public: ComponentSet& _getComponentSet() {return _componentSet;};
          258  public: RubberSet& _getRubberSet() {return _rubberSet;};
          259  public: Net* _getNextOfCellNetMap() const {return _nextOfCellNetMap;};
          260 
          261  public: void _setNextOfCellNetMap(Net* net) {_nextOfCellNetMap = net;};
          262 
          263  public: struct CompareByName {
          264  inline bool operator() ( const Net* lhs, const Net* rhs ) const { return lhs->getName() < rhs->getName(); }
          265  };
          266 
          267 };
          268 
          269 
          270 // -------------------------------------------------------------------
          271 // Class : "HookKey".
          272 
          273  class HookKey {
          274  public:
          275  inline HookKey ( unsigned int id, const std::string& tname );
          276  inline unsigned int id () const;
          277  inline std::string tname () const;
          278  private:
          279  unsigned int _id;
          280  std::string _tname;
          281  };
          282 
          283 
          284  inline HookKey::HookKey ( unsigned int id, const std::string& tname ) : _id(id), _tname(tname) { }
          285  inline unsigned int HookKey::id () const { return _id; }
          286  inline std::string HookKey::tname () const { return _tname; }
          287 
          288  inline bool operator< ( const HookKey& lhs, const HookKey& rhs )
          289  {
          290  if (lhs.id() != rhs.id()) return lhs.id() < rhs.id();
          291  return lhs.tname() < rhs.tname();
          292  }
          293 
          294 
          295 // -------------------------------------------------------------------
          296 // Class : "HookElement".
          297 
          298  class HookElement {
          299  public:
          300  enum Flags { OpenRingStart = (1<<0)
          301  , ClosedRing = (1<<1)
          302  };
          303  public:
          304  inline HookElement ( Hook*, unsigned long flags=0 );
          305  inline Hook* hook () const;
          306  inline HookElement* next () const;
          307  inline void setHook ( Hook* );
          308  inline void setNext ( HookElement* );
          309  inline unsigned long flags () const;
          310  inline HookElement& setFlags ( unsigned long mask );
          311  inline HookElement& resetFlags ( unsigned long mask );
          312  inline bool issetFlags ( unsigned long mask ) const;
          313  private:
          314  Hook* _hook;
          315  HookElement* _next;
          316  unsigned long _flags;
          317  };
          318 
          319 
          320  inline HookElement::HookElement ( Hook* hook, unsigned long flags ) : _hook(hook), _next(NULL), _flags(flags) { }
          321  inline Hook* HookElement::hook () const { return _hook; }
          322  inline HookElement* HookElement::next () const { return _next; }
          323  inline void HookElement::setHook ( Hook* hook ) { _hook = hook; }
          324  inline void HookElement::setNext ( HookElement* element ) { _next = element; }
          325  inline unsigned long HookElement::flags () const { return _flags; }
          326  inline HookElement& HookElement::setFlags ( unsigned long mask ) { _flags |= mask; return *this; }
          327  inline HookElement& HookElement::resetFlags ( unsigned long mask ) { _flags &= ~mask; return *this; }
          328  inline bool HookElement::issetFlags ( unsigned long mask ) const { return _flags & mask; }
          329 
          330 
          331  typedef map<HookKey,HookElement> HookLut;
          332 
          333 
          334 // -------------------------------------------------------------------
          335 // Class : "JsonNet".
          336 
          337  class JsonNet : public JsonEntity {
          338  public:
          339  static bool hookFromString ( std::string s, unsigned int& id, std::string& tname );
          340  static void initialize ();
          341  JsonNet ( unsigned long flags );
          342  virtual ~JsonNet ();
          343  virtual string getTypeName () const;
          344  virtual JsonNet* clone ( unsigned long ) const;
          345  virtual void toData ( JsonStack& );
          346  void addHookLink ( Hook*, unsigned int jsonId, const std::string& jsonNext );
          347  Hook* getHook ( unsigned int jsonId, const std::string& tname ) const;
          348  bool checkRings () const;
          349  void buildRings () const;
          350  inline void clearHookLinks ();
          351  protected:
          352  bool _autoMaterialize;
          353  Net* _net;
          354  HookLut _hooks;
          355  };
          356 
          357 
          358  inline void JsonNet::clearHookLinks () { _hooks.clear(); }
          359 
          360 
          361 } // Hurricane namespace.
          362 
          363 
          364 // -------------------------------------------------------------------
          365 // Inspector Support for : Net::Type::Code*".
          366 
          367 template<>
          368 inline std::string getString<const Hurricane::Net::Type::Code*>
          369  ( const Hurricane::Net::Type::Code* object )
          370  {
          371  switch ( *object ) {
          372  case Hurricane::Net::Type::UNDEFINED: return "UNDEFINED";
          373  case Hurricane::Net::Type::LOGICAL: return "LOGICAL";
          374  case Hurricane::Net::Type::CLOCK: return "CLOCK";
          375  case Hurricane::Net::Type::POWER: return "POWER";
          376  case Hurricane::Net::Type::GROUND: return "GROUND";
          377  case Hurricane::Net::Type::BLOCKAGE: return "BLOCKAGE";
          378  }
          379  return "ABNORMAL";
          380  }
          381 
          382 template<>
          383 inline Hurricane::Record* getRecord<const Hurricane::Net::Type::Code*>
          384  ( const Hurricane::Net::Type::Code* object )
          385  {
          386  Hurricane::Record* record = new Hurricane::Record(getString(object));
          387  record->add(getSlot("Code", (unsigned int*)object));
          388  return record;
          389  }
          390 
          391 
          392 // -------------------------------------------------------------------
          393 // Inspector Support for : "const Net::Direction::Code*".
          394 
          395 template<>
          396 inline std::string getString<const Hurricane::Net::Direction::Code*>
          397  ( const Hurricane::Net::Direction::Code* object )
          398  {
          399  std::ostringstream s;
          400  s << (((*object) & Hurricane::Net::Direction::DirIn ) ? 'i' : '-');
          401  s << (((*object) & Hurricane::Net::Direction::DirOut ) ? 'o' : '-');
          402  s << (((*object) & Hurricane::Net::Direction::ConnTristate) ? 't' : '-');
          403  s << (((*object) & Hurricane::Net::Direction::ConnWiredOr ) ? 'w' : '-');
          404 
          405  switch ( (int)*object ) {
          406  case Hurricane::Net::Direction::UNDEFINED: s << " (UNDEFINED)"; break;
          407  case Hurricane::Net::Direction::IN: s << " (IN)"; break;
          408  case Hurricane::Net::Direction::OUT: s << " (OUT)"; break;
          409  case Hurricane::Net::Direction::INOUT: s << " (INOUT)"; break;
          410  case Hurricane::Net::Direction::TRISTATE: s << " (TRISTATE)"; break;
          411  case Hurricane::Net::Direction::TRANSCV: s << " (TRANSCV)"; break;
          412  case Hurricane::Net::Direction::WOR_OUT: s << " (WOR_OUT)"; break;
          413  case Hurricane::Net::Direction::WOR_INOUT: s << " (WOR_INOUT)"; break;
          414  }
          415  return s.str();
          416  }
          417 
          418 template<>
          419 inline Hurricane::Record* getRecord<const Hurricane::Net::Direction::Code*>
          420  ( const Hurricane::Net::Direction::Code* object )
          421  {
          422  Hurricane::Record* record = new Hurricane::Record(getString(object));
          423  record->add(getSlot("Code", (unsigned int*)object));
          424  return record;
          425  }
          426 
          427 
          428 INSPECTOR_P_SUPPORT(Hurricane::Net);
          429 INSPECTOR_P_SUPPORT(Hurricane::Net::ComponentSet);
          430 INSPECTOR_P_SUPPORT(Hurricane::Net::RubberSet);
          431 INSPECTOR_PV_SUPPORT(Hurricane::Net::Type);
          432 INSPECTOR_PV_SUPPORT(Hurricane::Net::Direction);
          433 IOSTREAM_POINTER_SUPPORT(Hurricane::Net::Type::Code);
          434 IOSTREAM_VALUE_SUPPORT(Hurricane::Net::Type::Code);
          435 IOSTREAM_POINTER_SUPPORT(Hurricane::Net::Direction::Code);
          436 IOSTREAM_VALUE_SUPPORT(Hurricane::Net::Direction::Code);
          437 
          438 
          439 namespace Hurricane {
          440 
          441 // Force SlotTemplate<> expansion on Net* type.
          442 // Because sometimes it didn't happens (?).
          443  const SlotTemplate<Net*> dummyNetSlot ( string("dummyNetSlot"), NULL );
          444 
          445 }
          446 
          447 #endif // HURRICANE_NET
          448 
          449 
          450 // ****************************************************************************************************
          451 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
          452 // ****************************************************************************************************
          static NetFilter getIsGlobalFilter()
          +
          1 // ****************************************************************************************************
          2 // File: ./hurricane/Net.h
          3 // Authors: R. Escassut
          4 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
          5 //
          6 // This file is part of Hurricane.
          7 //
          8 // Hurricane is free software: you can redistribute it and/or modify it under the terms of the GNU
          9 // Lesser General Public License as published by the Free Software Foundation, either version 3 of the
          10 // License, or (at your option) any later version.
          11 //
          12 // Hurricane is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
          13 // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU
          14 // General Public License for more details.
          15 //
          16 // You should have received a copy of the Lesser GNU General Public License along with Hurricane. If
          17 // not, see <http://www.gnu.org/licenses/>.
          18 // ****************************************************************************************************
          19 
          20 #ifndef HURRICANE_NET
          21 #define HURRICANE_NET
          22 
          23 #include <functional>
          24 #include "hurricane/Entity.h"
          25 #include "hurricane/Nets.h"
          26 #include "hurricane/Component.h"
          27 #include "hurricane/Rubbers.h"
          28 #include "hurricane/Rubber.h"
          29 #include "hurricane/RoutingPads.h"
          30 #include "hurricane/Plugs.h"
          31 #include "hurricane/Pins.h"
          32 #include "hurricane/Contacts.h"
          33 #include "hurricane/Segments.h"
          34 #include "hurricane/Verticals.h"
          35 #include "hurricane/Horizontals.h"
          36 #include "hurricane/Pads.h"
          37 #include "hurricane/IntrusiveSet.h"
          38 #include "hurricane/Path.h"
          39 #include "hurricane/NetAlias.h"
          40 
          41 namespace Hurricane {
          42 
          43 
          44 // ****************************************************************************************************
          45 // Net declaration
          46 // ****************************************************************************************************
          47 
          48 class Net : public Entity {
          49 // **********************
          50 
          51 // Types
          52 // *****
          53 
          54  public: typedef Entity Inherit;
          55 
          56  public: typedef unsigned Arity;
          57 
          58  public: class Type {
          59  // ***************
          60 
          61  public: enum Code {UNDEFINED=0, LOGICAL=1, CLOCK=2, POWER=3, GROUND=4, BLOCKAGE=5, FUSED=6};
          62 
          63  private: Code _code;
          64 
          65  public: Type(const Code& code = UNDEFINED);
          66  public: Type(const Type& type);
          67  public: Type(string);
          68 
          69  public: Type& operator=(const Type& type);
          70 
          71  public: operator const Code&() const {return _code;};
          72 
          73  public: const Code& getCode() const {return _code;};
          74 
          75  public: string _getTypeName() const { return _TName("Net::type"); };
          76  public: string _getString() const;
          77  public: Record* _getRecord() const;
          78 
          79  };
          80 
          81  public: class Direction {
          82  // ********************
          83 
          84  public: enum Code { DirIn = 0x0001
          85  , DirOut = 0x0002
          86  , DirUndefined = 0x0000
          87  , ConnTristate = 0x0100
          88  , ConnWiredOr = 0x0200
          90  , IN = DirIn
          91  , OUT = DirOut
          97  , DirMask = DirIn | DirOut | DirUndefined
          98  };
          99 
          100  private: Code _code;
          101 
          102  public: Direction(const Code& code = UNDEFINED);
          103  public: Direction(const Direction& direction);
          104  public: Direction(string);
          105 
          106  public: Direction& operator =(const Direction& direction);
          107  public: Direction& operator|=(const Direction& direction);
          108 
          109  public: operator const Code&() const {return _code;};
          110 
          111  public: const Code& getCode() const {return _code;};
          112 
          113  public: string _getTypeName() const { return _TName("Net::Direction"); };
          114  public: string _getString() const;
          115  public: Record* _getRecord() const;
          116 
          117  };
          118 
          119  class ComponentSet : public IntrusiveSet<Component> {
          120  // ************************************************
          121 
          122  public: typedef IntrusiveSet<Component> Inherit;
          123 
          124  public: ComponentSet();
          125 
          126  public: virtual unsigned _getHashValue(Component* component) const;
          127  public: virtual Component* _getNextElement(Component* component) const;
          128  public: virtual void _setNextElement(Component* component, Component* nextComponent) const;
          129 
          130  };
          131 
          132  class RubberSet : public IntrusiveSet<Rubber> {
          133  // ******************************************
          134 
          135  public: typedef IntrusiveSet<Rubber> Inherit;
          136 
          137  public: RubberSet();
          138 
          139  public: virtual unsigned _getHashValue(Rubber* rubber) const;
          140  public: virtual Rubber* _getNextElement(Rubber* rubber) const;
          141  public: virtual void _setNextElement(Rubber* rubber, Rubber* nextRubber) const;
          142 
          143  };
          144 
          145 // Attributes
          146 // **********
          147 
          148  private: Cell* _cell;
          149  private: Name _name;
          150  private: Arity _arity;
          151  private: bool _isGlobal;
          152  private: bool _isExternal;
          153  private: bool _isAutomatic;
          154  private: Type _type;
          155  private: Direction _direction;
          156  private: Point _position;
          157  private: ComponentSet _componentSet;
          158  private: RubberSet _rubberSet;
          159  private: Net* _nextOfCellNetMap;
          160  private: NetMainName _mainName;
          161 
          162 // Constructors
          163 // ************
          164 
          165  protected: Net(Cell* cell, const Name& name);
          166 
          167  public: static Net* create(Cell* cell, const Name& name);
          168 
          169 // Accessors
          170 // *********
          171 
          172  public: virtual Cell* getCell() const {return _cell;};
          173  public: virtual Box getBoundingBox() const;
          174  public: const Name& getName() const {return _name;};
          175  public: const NetMainName* getMainName() const { return &_mainName; }
          176  public: const Arity& getArity() const {return _arity;};
          177  public: const Type& getType() const {return _type;};
          178  public: const Direction& getDirection() const {return _direction;};
          179  public: const Point& getPosition() const {return _position;};
          180  public: const DbU::Unit& getX() const {return _position.getX();};
          181  public: const DbU::Unit& getY() const {return _position.getY();};
          182  public: Components getComponents() const {return _componentSet.getElements();};
          183  public: Rubbers getRubbers() const {return _rubberSet.getElements();};
          184  public: RoutingPads getRoutingPads() const;
          185  public: Plugs getPlugs() const;
          186  public: Pins getPins() const;
          187  public: Contacts getContacts() const;
          188  public: Segments getSegments() const;
          189  public: Verticals getVerticals() const;
          190  public: Horizontals getHorizontals() const;
          191  public: Pads getPads() const;
          192  public: Plugs getSlavePlugs() const;
          193  public: Plugs getConnectedSlavePlugs() const;
          194  public: Plugs getUnconnectedSlavePlugs() const;
          195  public: Aliases getAliases() const { return new AliasList(this); };
          196 
          197 // Filters
          198 // *******
          199 
          200  public: static NetFilter getIsCellNetFilter();
          201  public: static NetFilter getIsDeepNetFilter();
          202  public: static NetFilter getIsGlobalFilter();
          203  public: static NetFilter getIsExternalFilter();
          204  public: static NetFilter getIsInternalFilter();
          205  public: static NetFilter getIsClockFilter();
          206  public: static NetFilter getIsSupplyFilter();
          207  public: static NetFilter getIsPowerFilter();
          208  public: static NetFilter getIsGroundFilter();
          209 
          210 // Predicates
          211 // **********
          212 
          213  public: virtual bool isDeepNet () const {return false;};
          214  public: bool isGlobal () const {return _isGlobal;};
          215  public: bool isExternal () const {return _isExternal;};
          216  public: bool isAutomatic() const {return _isAutomatic;};
          217  public: bool isBlockage () const {return (_type == Type::BLOCKAGE);};
          218  public: bool isFused () const {return (_type == Type::FUSED);};
          219  public: bool isLogical () const {return (_type == Type::LOGICAL);};
          220  public: bool isClock () const {return (_type == Type::CLOCK);};
          221  public: bool isPower () const {return (_type == Type::POWER);};
          222  public: bool isGround () const {return (_type == Type::GROUND);};
          223  public: bool isSupply () const {return (isPower() || isGround());};
          224  public: bool hasAlias (const Name& name) const;
          225 
          226 // Updators
          227 // ********
          228 
          229  public: void setName(Name name);
          230  public: void setArity(const Arity& arity);
          231  public: void setGlobal(bool isGlobal);
          232  public: void setExternal(bool isExternal);
          233  public: void setAutomatic(bool isAutomatic);
          234  public: void setType(const Type& type);
          235  public: void setDirection(const Direction& direction);
          236  public: void setPosition(const Point& position);
          237  public: void setRoutingState(uint32_t state);
          238  public: void materialize();
          239  public: void unmaterialize();
          240  public: bool addAlias(const Name& name);
          241  public: bool removeAlias(const Name& name);
          242  public: void merge(Net* net);
          243  public: Net* getClone(Cell* cloneCell);
          244 
          245 // Others
          246 // ******
          247 
          248  protected: virtual void _postCreate();
          249  protected: virtual void _preDestroy();
          250 
          251  public: virtual void _toJson(JsonWriter*) const;
          252  public: virtual void _toJsonSignature(JsonWriter*) const;
          253  public: virtual void _toJsonCollections(JsonWriter*) const;
          254  public: virtual string _getTypeName() const {return _TName("Net");};
          255  public: virtual string _getString() const;
          256  public: virtual Record* _getRecord() const;
          257  public: NetMainName& _getMainName() { return _mainName; }
          258  public: ComponentSet& _getComponentSet() {return _componentSet;};
          259  public: RubberSet& _getRubberSet() {return _rubberSet;};
          260  public: Net* _getNextOfCellNetMap() const {return _nextOfCellNetMap;};
          261 
          262  public: void _setNextOfCellNetMap(Net* net) {_nextOfCellNetMap = net;};
          263 
          264  public: struct CompareByName {
          265  inline bool operator() ( const Net* lhs, const Net* rhs ) const { return lhs->getName() < rhs->getName(); }
          266  };
          267 
          268 };
          269 
          270 
          271 // -------------------------------------------------------------------
          272 // Class : "HookKey".
          273 
          274  class HookKey {
          275  public:
          276  inline HookKey ( unsigned int id, const std::string& tname );
          277  inline unsigned int id () const;
          278  inline std::string tname () const;
          279  private:
          280  unsigned int _id;
          281  std::string _tname;
          282  };
          283 
          284 
          285  inline HookKey::HookKey ( unsigned int id, const std::string& tname ) : _id(id), _tname(tname) { }
          286  inline unsigned int HookKey::id () const { return _id; }
          287  inline std::string HookKey::tname () const { return _tname; }
          288 
          289  inline bool operator< ( const HookKey& lhs, const HookKey& rhs )
          290  {
          291  if (lhs.id() != rhs.id()) return lhs.id() < rhs.id();
          292  return lhs.tname() < rhs.tname();
          293  }
          294 
          295 
          296 // -------------------------------------------------------------------
          297 // Class : "HookElement".
          298 
          299  class HookElement {
          300  public:
          301  enum Flags { OpenRingStart = (1<<0)
          302  , ClosedRing = (1<<1)
          303  };
          304  public:
          305  inline HookElement ( Hook*, unsigned long flags=0 );
          306  inline Hook* hook () const;
          307  inline HookElement* next () const;
          308  inline void setHook ( Hook* );
          309  inline void setNext ( HookElement* );
          310  inline unsigned long flags () const;
          311  inline HookElement& setFlags ( unsigned long mask );
          312  inline HookElement& resetFlags ( unsigned long mask );
          313  inline bool issetFlags ( unsigned long mask ) const;
          314  private:
          315  Hook* _hook;
          316  HookElement* _next;
          317  unsigned long _flags;
          318  };
          319 
          320 
          321  inline HookElement::HookElement ( Hook* hook, unsigned long flags ) : _hook(hook), _next(NULL), _flags(flags) { }
          322  inline Hook* HookElement::hook () const { return _hook; }
          323  inline HookElement* HookElement::next () const { return _next; }
          324  inline void HookElement::setHook ( Hook* hook ) { _hook = hook; }
          325  inline void HookElement::setNext ( HookElement* element ) { _next = element; }
          326  inline unsigned long HookElement::flags () const { return _flags; }
          327  inline HookElement& HookElement::setFlags ( unsigned long mask ) { _flags |= mask; return *this; }
          328  inline HookElement& HookElement::resetFlags ( unsigned long mask ) { _flags &= ~mask; return *this; }
          329  inline bool HookElement::issetFlags ( unsigned long mask ) const { return _flags & mask; }
          330 
          331 
          332  typedef map<HookKey,HookElement> HookLut;
          333 
          334 
          335 // -------------------------------------------------------------------
          336 // Class : "JsonNet".
          337 
          338  class JsonNet : public JsonEntity {
          339  public:
          340  static bool hookFromString ( std::string s, unsigned int& id, std::string& tname );
          341  static void initialize ();
          342  JsonNet ( unsigned long flags );
          343  virtual ~JsonNet ();
          344  virtual string getTypeName () const;
          345  virtual JsonNet* clone ( unsigned long ) const;
          346  virtual void toData ( JsonStack& );
          347  void addHookLink ( Hook*, unsigned int jsonId, const std::string& jsonNext );
          348  Hook* getHook ( unsigned int jsonId, const std::string& tname ) const;
          349  bool checkRings () const;
          350  void buildRings () const;
          351  inline void clearHookLinks ();
          352  protected:
          353  bool _autoMaterialize;
          354  Net* _net;
          355  HookLut _hooks;
          356  };
          357 
          358 
          359  inline void JsonNet::clearHookLinks () { _hooks.clear(); }
          360 
          361 
          362 } // Hurricane namespace.
          363 
          364 
          365 // -------------------------------------------------------------------
          366 // Inspector Support for : Net::Type::Code*".
          367 
          368 template<>
          369 inline std::string getString<const Hurricane::Net::Type::Code*>
          370  ( const Hurricane::Net::Type::Code* object )
          371  {
          372  switch ( *object ) {
          373  case Hurricane::Net::Type::UNDEFINED: return "UNDEFINED";
          374  case Hurricane::Net::Type::LOGICAL: return "LOGICAL";
          375  case Hurricane::Net::Type::CLOCK: return "CLOCK";
          376  case Hurricane::Net::Type::POWER: return "POWER";
          377  case Hurricane::Net::Type::GROUND: return "GROUND";
          378  case Hurricane::Net::Type::BLOCKAGE: return "BLOCKAGE";
          379  case Hurricane::Net::Type::FUSED: return "FUSED";
          380  }
          381  return "ABNORMAL";
          382  }
          383 
          384 template<>
          385 inline Hurricane::Record* getRecord<const Hurricane::Net::Type::Code*>
          386  ( const Hurricane::Net::Type::Code* object )
          387  {
          388  Hurricane::Record* record = new Hurricane::Record(getString(object));
          389  record->add(getSlot("Code", (unsigned int*)object));
          390  return record;
          391  }
          392 
          393 
          394 // -------------------------------------------------------------------
          395 // Inspector Support for : "const Net::Direction::Code*".
          396 
          397 template<>
          398 inline std::string getString<const Hurricane::Net::Direction::Code*>
          399  ( const Hurricane::Net::Direction::Code* object )
          400  {
          401  std::ostringstream s;
          402  s << (((*object) & Hurricane::Net::Direction::DirIn ) ? 'i' : '-');
          403  s << (((*object) & Hurricane::Net::Direction::DirOut ) ? 'o' : '-');
          404  s << (((*object) & Hurricane::Net::Direction::ConnTristate) ? 't' : '-');
          405  s << (((*object) & Hurricane::Net::Direction::ConnWiredOr ) ? 'w' : '-');
          406 
          407  switch ( (int)*object ) {
          408  case Hurricane::Net::Direction::UNDEFINED: s << " (UNDEFINED)"; break;
          409  case Hurricane::Net::Direction::IN: s << " (IN)"; break;
          410  case Hurricane::Net::Direction::OUT: s << " (OUT)"; break;
          411  case Hurricane::Net::Direction::INOUT: s << " (INOUT)"; break;
          412  case Hurricane::Net::Direction::TRISTATE: s << " (TRISTATE)"; break;
          413  case Hurricane::Net::Direction::TRANSCV: s << " (TRANSCV)"; break;
          414  case Hurricane::Net::Direction::WOR_OUT: s << " (WOR_OUT)"; break;
          415  case Hurricane::Net::Direction::WOR_INOUT: s << " (WOR_INOUT)"; break;
          416  }
          417  return s.str();
          418  }
          419 
          420 template<>
          421 inline Hurricane::Record* getRecord<const Hurricane::Net::Direction::Code*>
          422  ( const Hurricane::Net::Direction::Code* object )
          423  {
          424  Hurricane::Record* record = new Hurricane::Record(getString(object));
          425  record->add(getSlot("Code", (unsigned int*)object));
          426  return record;
          427  }
          428 
          429 
          430 INSPECTOR_P_SUPPORT(Hurricane::Net);
          431 INSPECTOR_P_SUPPORT(Hurricane::Net::ComponentSet);
          432 INSPECTOR_P_SUPPORT(Hurricane::Net::RubberSet);
          433 INSPECTOR_PV_SUPPORT(Hurricane::Net::Type);
          434 INSPECTOR_PV_SUPPORT(Hurricane::Net::Direction);
          435 IOSTREAM_POINTER_SUPPORT(Hurricane::Net::Type::Code);
          436 IOSTREAM_VALUE_SUPPORT(Hurricane::Net::Type::Code);
          437 IOSTREAM_POINTER_SUPPORT(Hurricane::Net::Direction::Code);
          438 IOSTREAM_VALUE_SUPPORT(Hurricane::Net::Direction::Code);
          439 
          440 
          441 namespace Hurricane {
          442 
          443 // Force SlotTemplate<> expansion on Net* type.
          444 // Because sometimes it didn't happens (?).
          445  const SlotTemplate<Net*> dummyNetSlot ( string("dummyNetSlot"), NULL );
          446 
          447 }
          448 
          449 #endif // HURRICANE_NET
          450 
          451 
          452 // ****************************************************************************************************
          453 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
          454 // ****************************************************************************************************
          static NetFilter getIsGlobalFilter()
          static NetFilter getIsExternalFilter()
          const Type & getType() const
          Definition: Net.h:177
          Definition: Net.h:61
          @@ -67,7 +67,6 @@ $(function() {
          void setPosition(const Point &position)
          Definition: Net.h:61
          void setExternal(bool isExternal)
          -
          Occurrenceable objects root class (API).
          Definition: Entity.h:38
          const Arity & getArity() const
          Definition: Net.h:176
          @@ -84,7 +83,7 @@ $(function() {
          Definition: Net.h:91
          void materialize()
          -
          bool isLogical() const
          Definition: Net.h:218
          +
          bool isLogical() const
          Definition: Net.h:219
          Code
          Definition: Net.h:61
          Plugs getPlugs() const
          @@ -97,8 +96,9 @@ $(function() {
          Verticals getVerticals() const
          Plugs getConnectedSlavePlugs() const
          +
          Components getComponents() const
          Definition: Net.h:182
          -
          bool isSupply() const
          Definition: Net.h:222
          +
          bool isSupply() const
          Definition: Net.h:223
          Rubbers getRubbers() const
          Definition: Net.h:183
          static NetFilter getIsInternalFilter()
          unsigned Arity
          Definition: Net.h:56
          @@ -111,7 +111,7 @@ $(function() {
          void unmaterialize()
          Definition: Net.h:90
          Net description (API)
          Definition: Net.h:48
          -
          bool isClock() const
          Definition: Net.h:219
          +
          bool isClock() const
          Definition: Net.h:220
          const Name & getName() const
          Definition: Net.h:174
          Net * getClone(Cell *cloneCell)
          const Point & getPosition() const
          Definition: Net.h:179
          @@ -123,7 +123,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Nets_8h_source.html b/hurricane/doc/hurricane/html/Nets_8h_source.html index 10e806ec..ddf4e839 100644 --- a/hurricane/doc/hurricane/html/Nets_8h_source.html +++ b/hurricane/doc/hurricane/html/Nets_8h_source.html @@ -57,7 +57,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Occurrence_8h_source.html b/hurricane/doc/hurricane/html/Occurrence_8h_source.html index cddfd4bc..36c09df1 100644 --- a/hurricane/doc/hurricane/html/Occurrence_8h_source.html +++ b/hurricane/doc/hurricane/html/Occurrence_8h_source.html @@ -44,7 +44,7 @@ $(function() {
          Occurrence.h
          -
          1 // ****************************************************************************************************
          2 // File: ./hurricane/Occurrence.h
          3 // Authors: R. Escassut
          4 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
          5 //
          6 // This file is part of Hurricane.
          7 //
          8 // Hurricane is free software: you can redistribute it and/or modify it under the terms of the GNU
          9 // Lesser General Public License as published by the Free Software Foundation, either version 3 of the
          10 // License, or (at your option) any later version.
          11 //
          12 // Hurricane is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
          13 // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU
          14 // General Public License for more details.
          15 //
          16 // You should have received a copy of the Lesser GNU General Public License along with Hurricane. If
          17 // not, see <http://www.gnu.org/licenses/>.
          18 // ****************************************************************************************************
          19 
          20 #ifndef HURRICANE_OCCURENCE
          21 #define HURRICANE_OCCURENCE
          22 
          23 #include "hurricane/Path.h"
          24 #include "hurricane/Name.h"
          25 #include "hurricane/Properties.h"
          26 
          27 namespace Hurricane {
          28 
          29 class Entity;
          30 class SharedPath;
          31 class Quark;
          32 class BasicLayer;
          33 
          34 
          35 // ****************************************************************************************************
          36 // Occurrence declaration
          37 // ****************************************************************************************************
          38 
          39 class Occurrence {
          40 // *************
          41 
          42 // Attributes
          43 // **********
          44 
          45  private: Entity* _entity;
          46  private: SharedPath* _sharedPath;
          47 
          48 // Constructors
          49 // ************
          50 
          51  public: Occurrence(const Entity* entity = NULL);
          52  public: Occurrence(const Entity* entity, const Path& path);
          53  public: Occurrence(const Occurrence& occurrence);
          54 
          55 // Operators
          56 // *********
          57 
          58  public: Occurrence& operator=(const Occurrence& occurrence);
          59 
          60  public: bool operator==(const Occurrence& occurrence) const;
          61  public: bool operator!=(const Occurrence& occurrence) const;
          62 
          63  public: bool operator<(const Occurrence& occurrence) const; // for stl set -> less predicate
          64 
          65 // Accessors
          66 // *********
          67 
          68  public: Entity* getEntity() const {return _entity;};
          69  public: Path getPath() const {return Path(_sharedPath);};
          70  public: Cell* getOwnerCell() const;
          71  public: Cell* getMasterCell() const;
          72  public: Property* getProperty(const Name& name) const;
          73  public: Properties getProperties() const;
          74  public: Occurrence getNetOccurrence() const;
          75  public: Box getBoundingBox() const;
          76  public: Box getBoundingBox(const BasicLayer*) const;
          77 
          78 // Predicates
          79 // **********
          80 
          81  public: bool isValid() const {return (_entity != NULL);};
          82  public: bool hasProperty() const;
          83 
          84 // Updators
          85 // ********
          86 
          87  public: void makeInvalid();
          88  public: void put(Property* property);
          89  public: void remove(Property* property);
          90  public: void removeProperty(const Name& name);
          91  public: void clearProperties();
          92 
          93 // Others
          94 // ******
          95 
          96  public: string getName() const;
          97  public: string _getTypeName() const { return _TName("Occurrence"); };
          98  public: string _getString() const;
          99  public: string getCompactString() const;
          100  public: void toJson(JsonWriter*) const;
          101  public: Record* _getRecord() const;
          102  public: SharedPath* _getSharedPath() const {return _sharedPath;};
          103  public: Quark* _getQuark() const;
          104 
          105 };
          106 
          107 
          108 // ****************************************************************************************************
          109 // JsonOccurrence declaration
          110 // ****************************************************************************************************
          111 
          112 
          113 class JsonOccurrence : public JsonObject {
          114 // **********************************
          115 
          116  public: static void initialize();
          117  public: JsonOccurrence(unsigned long);
          118  public: virtual string getTypeName() const;
          119  public: virtual JsonOccurrence* clone(unsigned long) const;
          120  public: virtual void toData(JsonStack&);
          121 };
          122 
          123 } // End of Hurricane namespace.
          124 
          125 
          126 INSPECTOR_PV_SUPPORT(Hurricane::Occurrence);
          127 
          128 
          129 #endif // HURRICANE_OCCURENCE
          130 
          131 
          132 // ****************************************************************************************************
          133 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
          134 // ****************************************************************************************************
          Entity * getEntity() const
          Definition: Occurrence.h:68
          +
          1 // ****************************************************************************************************
          2 // File: ./hurricane/Occurrence.h
          3 // Authors: R. Escassut
          4 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
          5 //
          6 // This file is part of Hurricane.
          7 //
          8 // Hurricane is free software: you can redistribute it and/or modify it under the terms of the GNU
          9 // Lesser General Public License as published by the Free Software Foundation, either version 3 of the
          10 // License, or (at your option) any later version.
          11 //
          12 // Hurricane is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
          13 // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU
          14 // General Public License for more details.
          15 //
          16 // You should have received a copy of the Lesser GNU General Public License along with Hurricane. If
          17 // not, see <http://www.gnu.org/licenses/>.
          18 // ****************************************************************************************************
          19 
          20 #ifndef HURRICANE_OCCURENCE
          21 #define HURRICANE_OCCURENCE
          22 
          23 #include "hurricane/Path.h"
          24 #include "hurricane/Name.h"
          25 #include "hurricane/Properties.h"
          26 
          27 namespace Hurricane {
          28 
          29 class Entity;
          30 class SharedPath;
          31 class Quark;
          32 class BasicLayer;
          33 
          34 
          35 // ****************************************************************************************************
          36 // Occurrence declaration
          37 // ****************************************************************************************************
          38 
          39 class Occurrence {
          40 // *************
          41 
          42 // Attributes
          43 // **********
          44 
          45  private: Entity* _entity;
          46  private: SharedPath* _sharedPath;
          47 
          48 // Constructors
          49 // ************
          50 
          51  public: Occurrence(const Entity* entity = NULL);
          52  public: Occurrence(const Entity* entity, const Path& path);
          53  public: Occurrence(const Occurrence& occurrence);
          54 
          55 // Operators
          56 // *********
          57 
          58  public: Occurrence& operator=(const Occurrence& occurrence);
          59 
          60  public: bool operator==(const Occurrence& occurrence) const;
          61  public: bool operator!=(const Occurrence& occurrence) const;
          62 
          63  public: bool operator<(const Occurrence& occurrence) const; // for stl set -> less predicate
          64 
          65 // Accessors
          66 // *********
          67 
          68  public: Entity* getEntity() const {return _entity;};
          69  public: Path getPath() const {return Path(_sharedPath);};
          70  public: Cell* getOwnerCell() const;
          71  public: Cell* getMasterCell() const;
          72  public: Property* getProperty(const Name& name) const;
          73  public: Properties getProperties() const;
          74  public: Occurrence getNetOccurrence() const;
          75  public: Box getBoundingBox() const;
          76  public: Box getBoundingBox(const BasicLayer*) const;
          77 
          78 // Predicates
          79 // **********
          80 
          81  public: bool isValid() const {return (_entity != NULL);};
          82  public: bool hasProperty() const;
          83 
          84 // Updators
          85 // ********
          86 
          87  public: void makeInvalid();
          88  public: void put(Property* property);
          89  public: void remove(Property* property);
          90  public: void removeProperty(const Name& name);
          91  public: void clearProperties();
          92 
          93 // Others
          94 // ******
          95 
          96  public: string getName() const;
          97  public: string _getTypeName() const { return _TName("Occurrence"); };
          98  public: string _getString() const;
          99  public: string getCompactString() const;
          100  public: void toJson(JsonWriter*) const;
          101  public: Record* _getRecord() const;
          102  public: SharedPath* _getSharedPath() const {return _sharedPath;};
          103  public: Quark* _getQuark() const;
          104 
          105 };
          106 
          107 
          108 // ****************************************************************************************************
          109 // JsonOccurrence declaration
          110 // ****************************************************************************************************
          111 
          112 
          113 class JsonOccurrence : public JsonObject {
          114 // **********************************
          115 
          116  public: static void initialize();
          117  public: JsonOccurrence(unsigned long);
          118  public: virtual string getTypeName() const;
          119  public: virtual JsonOccurrence* clone(unsigned long) const;
          120  public: virtual void toData(JsonStack&);
          121 };
          122 
          123 } // End of Hurricane namespace.
          124 
          125 
          126 INSPECTOR_PV_SUPPORT(Hurricane::Occurrence);
          127 
          128 
          129 #endif // HURRICANE_OCCURENCE
          130 
          131 
          132 // ****************************************************************************************************
          133 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
          134 // ****************************************************************************************************
          Entity * getEntity() const
          Definition: Occurrence.h:68
          Path description (API)
          Definition: Path.h:37
          Occurrence description (API)
          Definition: Occurrence.h:39
          void put(Property *property)
          @@ -58,7 +58,6 @@ $(function() {
          bool hasProperty() const
          The model (API).
          Definition: Cell.h:66
          bool operator<(const Occurrence &occurrence) const
          -
          Occurrenceable objects root class (API).
          Definition: Entity.h:38
          Generic Collection auto-pointer.
          Definition: Collection.h:28
          Property description (API)
          Definition: Property.h:58
          bool operator!=(const Occurrence &occurrence) const
          @@ -67,6 +66,7 @@ $(function() {
          Occurrence(const Entity *entity=NULL)
          Occurrence & operator=(const Occurrence &occurrence)
          +
          The namespace dedicated to Hurricane.
          Definition: Generalities.dox:5
          Path getPath() const
          Definition: Occurrence.h:69
          void removeProperty(const Name &name)
          @@ -76,7 +76,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Occurrences_8h_source.html b/hurricane/doc/hurricane/html/Occurrences_8h_source.html index 78955ad6..9915e2b8 100644 --- a/hurricane/doc/hurricane/html/Occurrences_8h_source.html +++ b/hurricane/doc/hurricane/html/Occurrences_8h_source.html @@ -58,7 +58,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Pad_8h_source.html b/hurricane/doc/hurricane/html/Pad_8h_source.html index 7b66c5dd..de9e1a73 100644 --- a/hurricane/doc/hurricane/html/Pad_8h_source.html +++ b/hurricane/doc/hurricane/html/Pad_8h_source.html @@ -60,7 +60,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Pads_8h_source.html b/hurricane/doc/hurricane/html/Pads_8h_source.html index cad181c0..f115f173 100644 --- a/hurricane/doc/hurricane/html/Pads_8h_source.html +++ b/hurricane/doc/hurricane/html/Pads_8h_source.html @@ -57,7 +57,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Path_8h_source.html b/hurricane/doc/hurricane/html/Path_8h_source.html index 7fd77b81..258b2f09 100644 --- a/hurricane/doc/hurricane/html/Path_8h_source.html +++ b/hurricane/doc/hurricane/html/Path_8h_source.html @@ -73,7 +73,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Pathes_8h_source.html b/hurricane/doc/hurricane/html/Pathes_8h_source.html index 1798054d..4a2177b0 100644 --- a/hurricane/doc/hurricane/html/Pathes_8h_source.html +++ b/hurricane/doc/hurricane/html/Pathes_8h_source.html @@ -56,7 +56,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Pin_8h_source.html b/hurricane/doc/hurricane/html/Pin_8h_source.html index 14fbb12f..1586f24e 100644 --- a/hurricane/doc/hurricane/html/Pin_8h_source.html +++ b/hurricane/doc/hurricane/html/Pin_8h_source.html @@ -57,7 +57,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Pins_8h_source.html b/hurricane/doc/hurricane/html/Pins_8h_source.html index f32d3ba8..58553725 100644 --- a/hurricane/doc/hurricane/html/Pins_8h_source.html +++ b/hurricane/doc/hurricane/html/Pins_8h_source.html @@ -50,7 +50,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Plug_8h_source.html b/hurricane/doc/hurricane/html/Plug_8h_source.html index e8cd20f9..f94575e2 100644 --- a/hurricane/doc/hurricane/html/Plug_8h_source.html +++ b/hurricane/doc/hurricane/html/Plug_8h_source.html @@ -69,7 +69,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Plugs_8h_source.html b/hurricane/doc/hurricane/html/Plugs_8h_source.html index fbfa135a..173fe642 100644 --- a/hurricane/doc/hurricane/html/Plugs_8h_source.html +++ b/hurricane/doc/hurricane/html/Plugs_8h_source.html @@ -57,7 +57,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Point_8h_source.html b/hurricane/doc/hurricane/html/Point_8h_source.html index 2c223620..2603776c 100644 --- a/hurricane/doc/hurricane/html/Point_8h_source.html +++ b/hurricane/doc/hurricane/html/Point_8h_source.html @@ -59,7 +59,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Points_8h_source.html b/hurricane/doc/hurricane/html/Points_8h_source.html index f9aea6eb..839134c3 100644 --- a/hurricane/doc/hurricane/html/Points_8h_source.html +++ b/hurricane/doc/hurricane/html/Points_8h_source.html @@ -50,7 +50,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Polygon_8h_source.html b/hurricane/doc/hurricane/html/Polygon_8h_source.html index 1a646863..252d8274 100644 --- a/hurricane/doc/hurricane/html/Polygon_8h_source.html +++ b/hurricane/doc/hurricane/html/Polygon_8h_source.html @@ -60,7 +60,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Properties_8h_source.html b/hurricane/doc/hurricane/html/Properties_8h_source.html index 054225bd..14dd7b2c 100644 --- a/hurricane/doc/hurricane/html/Properties_8h_source.html +++ b/hurricane/doc/hurricane/html/Properties_8h_source.html @@ -57,7 +57,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Property_8h_source.html b/hurricane/doc/hurricane/html/Property_8h_source.html index 3250285d..741d1b31 100644 --- a/hurricane/doc/hurricane/html/Property_8h_source.html +++ b/hurricane/doc/hurricane/html/Property_8h_source.html @@ -44,7 +44,7 @@ $(function() {
          Property.h
          -
          1 // -*- C++ -*-
          2 //
          3 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
          4 //
          5 // This file is part of Hurricane.
          6 //
          7 // Hurricane is free software: you can redistribute it and/or modify
          8 // it under the terms of the GNU Lesser General Public License as
          9 // published by the Free Software Foundation, either version 3 of the
          10 // License, or (at your option) any later version.
          11 //
          12 // Hurricane is distributed in the hope that it will be useful, but
          13 // WITHOUT ANY WARRANTY; without even the implied warranty of MERCHAN-
          14 // TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU
          15 // General Public License for more details.
          16 //
          17 // You should have received a copy of the Lesser GNU General Public
          18 // License along with Hurricane. If not, see
          19 // <http://www.gnu.org/licenses/>.
          20 //
          21 // +-----------------------------------------------------------------+
          22 // | H U R R I C A N E |
          23 // | V L S I B a c k e n d D a t a - B a s e |
          24 // | |
          25 // | Author : Remy Escassut |
          26 // | E-mail : Jean-Paul.Chaput@lip6.fr |
          27 // | =============================================================== |
          28 // | C++ Header : "./hurricane/Property.h" |
          29 // +-----------------------------------------------------------------+
          30 
          31 
          32 #ifndef HURRICANE_PROPERTY_H
          33 #define HURRICANE_PROPERTY_H
          34 
          35 #include "hurricane/Name.h"
          36 #include "hurricane/Properties.h"
          37 #include "hurricane/DBo.h"
          38 #include "hurricane/Error.h"
          39 
          40 
          41 namespace Hurricane {
          42 
          43 
          44  extern const char* propertyTypeNameError;
          45 
          46 
          47 // -------------------------------------------------------------------
          48 // Classes : template enable/disable Json support.
          49 
          50  struct JsonEnabled { enum State { enabled=1 }; };
          51  struct JsonDisabled { enum State { enabled=0 }; };
          52 
          53 
          54 // -------------------------------------------------------------------
          55 // Class : "Hurricane::Property".
          56 
          57 
          58  class Property {
          59 
          60  public:
          61  // Static Method.
          62  template<typename DerivedProperty>
          63  static DerivedProperty* get ( const DBo* );
          64  static Name staticGetName ();
          65  // Constructor.
          66  template<typename DerivedProperty>
          67  static DerivedProperty* create ();
          68  template<typename DerivedProperty, typename Value>
          69  static DerivedProperty* create ( const Value& );
          70  // Destructor.
          71  virtual void destroy ();
          72  // Methods.
          73  virtual Name getName () const = 0;
          74  virtual void onCapturedBy ( DBo* owner ) = 0;
          75  virtual void onReleasedBy ( DBo* owner ) = 0;
          76  // Hurricane Managment.
          77  virtual bool hasJson () const;
          78  virtual void toJson ( JsonWriter*, const DBo* ) const;
          79  virtual string _getTypeName () const = 0;
          80  virtual string _getString () const;
          81  virtual Record* _getRecord () const;
          82 
          83  private:
          84  static Name _baseName;
          85  protected:
          86  // Internal: Constructors & Destructors.
          87  Property ();
          88  virtual ~Property ();
          89  virtual void _postCreate () {};
          90  virtual void _preDestroy () {};
          91  private:
          92  Property ( const Property& );
          93  Property& operator= ( const Property& );
          94  };
          95 
          96 
          97  template<typename DerivedProperty>
          98  DerivedProperty* Property::create ()
          99  {
          100  DerivedProperty* property = new DerivedProperty();
          101  property->_postCreate();
          102  return property;
          103  }
          104 
          105 
          106  template<typename DerivedProperty, typename Value>
          107  DerivedProperty* Property::create ( const Value& value )
          108  {
          109  DerivedProperty* property = new DerivedProperty(value);
          110  property->_postCreate();
          111  return property;
          112  }
          113 
          114 
          115  template<typename DerivedProperty>
          116  DerivedProperty* Property::get ( const DBo* object )
          117  {
          118  Property* property1 = object->getProperty ( DerivedProperty::staticGetName() );
          119  DerivedProperty* property2 = dynamic_cast<DerivedProperty*> ( property1 );
          120 
          121  if ( property1 && !property2 )
          122  throw Error ( propertyTypeNameError
          123  , getString(DerivedProperty::staticGetName()).c_str()
          124  , getString(object).c_str() );
          125 
          126  return property2;
          127  }
          128 
          129 
          130 // -------------------------------------------------------------------
          131 // Class : "Hurricane::PrivateProperty".
          132 
          133 
          134  class PrivateProperty : public Property {
          135 
          136  public:
          137  // Methods.
          138  inline DBo* getOwner () const;
          139  virtual void onCapturedBy ( DBo* owner );
          140  virtual void onReleasedBy ( DBo* owner );
          141  virtual void onNotOwned ();
          142  virtual string _getString () const;
          143  virtual Record* _getRecord () const;
          144 
          145  private:
          146  // Internal: Attributes.
          147  DBo* _owner;
          148  protected:
          149  // Internal: Constructor & Destructors.
          150  PrivateProperty ();
          151  virtual void _preDestroy ();
          152  };
          153 
          154 
          155 // Inline Functions.
          156  inline DBo* PrivateProperty::getOwner () const { return _owner; };
          157 
          158 
          159 // -------------------------------------------------------------------
          160 // Template Class : "Hurricane::StandardPrivateProperty".
          161 
          162 
          163  template<typename Value, typename JsonState=JsonDisabled>
          165  public:
          166  static Name staticGetName ();
          167  static Value* staticGetValue ( const DBo* );
          168  static StandardPrivateProperty* get ( const DBo*, bool create=false );
          169  // Constructors.
          170  static StandardPrivateProperty* create ();
          171  static StandardPrivateProperty* create ( const Value& );
          172  // Methods.
          173  virtual Name getName () const;
          174  Value& getValue () const;
          175  void setValue ( const Value& );
          176  virtual bool hasJson () const;
          177  virtual void toJson ( JsonWriter*, const DBo* ) const;
          178  virtual string _getTypeName () const;
          179  virtual string _getString () const;
          180  virtual Record* _getRecord () const;
          181  private:
          182  // Internal: Attributes.
          183  static Name _name;
          184  static DBo* _owner;
          185  static StandardPrivateProperty* _cache;
          186  mutable Value _value;
          187  protected:
          188  // Internal: Constructor.
          190  StandardPrivateProperty ( const Value& );
          191  public:
          192  class JsonProperty : public JsonObject {
          193  public:
          194  static void initialize ();
          195  JsonProperty ( unsigned long flags );
          196  virtual string getTypeName () const;
          197  virtual JsonProperty* clone ( unsigned long ) const;
          198  virtual void toData ( JsonStack& );
          199  };
          200  };
          201 
          202 
          203  template<typename Value, typename JsonState>
          205  : JsonObject(flags)
          206  {
          207  if (flags & JsonWriter::RegisterMode)
          208  cerr << "Registering JsonProperty" << endl;
          209  add( "_value", typeid(Value) );
          210  }
          211 
          212 
          213  template<typename Value, typename JsonState>
          214  string StandardPrivateProperty<Value,JsonState>::JsonProperty::getTypeName () const
          215  { return getString(StandardPrivateProperty<Value,JsonState>::staticGetName()); }
          216 
          217 
          218  template<typename Value, typename JsonState>
          219  void StandardPrivateProperty<Value,JsonState>::JsonProperty::initialize ()
          220  { JsonTypes::registerType( new JsonProperty (JsonWriter::RegisterMode) ); }
          221 
          222 
          223  template<typename Value, typename JsonState>
          224  typename StandardPrivateProperty<Value,JsonState>::JsonProperty*
          225  StandardPrivateProperty<Value,JsonState>::JsonProperty::clone ( unsigned long flags ) const
          226  { return new JsonProperty ( flags ); }
          227 
          228 
          229  template<typename Value, typename JsonState>
          230  void StandardPrivateProperty<Value,JsonState>::JsonProperty::toData ( JsonStack& stack )
          231  {
          232  check( stack, "JsonProperty::toData" );
          233 
          234  DBo* dbo = stack.back_dbo();
          235  Value value = get<string>(stack,"_value");
          236  StandardPrivateProperty<Value,JsonState>* property
          237  = StandardPrivateProperty<Value,JsonState>::create(value);
          238  if (dbo) dbo->put( property );
          239 
          240  update( stack, property );
          241  }
          242 
          243 
          244  template<typename Value, typename JsonState>
          245  DBo* StandardPrivateProperty<Value,JsonState>::_owner = NULL;
          246 
          247 
          248  template<typename Value, typename JsonState>
          249  StandardPrivateProperty<Value,JsonState>* StandardPrivateProperty<Value,JsonState>::_cache = NULL;
          250 
          251 
          252  template<typename Value, typename JsonState>
          253  Name StandardPrivateProperty<Value,JsonState>::staticGetName ()
          254  {
          255  return _name;
          256  }
          257 
          258 
          259  template<typename Value, typename JsonState>
          260  Value* StandardPrivateProperty<Value,JsonState>::staticGetValue ( const DBo* object )
          261  {
          262  if ( ( object == _owner ) || get(object) ) return _cache->getValue();
          263  return NULL;
          264  }
          265 
          266 
          267  template<typename Value, typename JsonState>
          268  StandardPrivateProperty<Value,JsonState>* StandardPrivateProperty<Value,JsonState>::create ()
          269  {
          270  _cache = new StandardPrivateProperty<Value>();
          271  _cache->_postCreate();
          272  return _cache;
          273  }
          274 
          275 
          276  template<typename Value, typename JsonState>
          277  StandardPrivateProperty<Value,JsonState>* StandardPrivateProperty<Value,JsonState>::create ( const Value& value )
          278  {
          279  _cache = new StandardPrivateProperty<Value>(value);
          280  _cache->_postCreate();
          281  return _cache;
          282  }
          283 
          284 
          285  template<typename Value, typename JsonState>
          286  StandardPrivateProperty<Value,JsonState>* StandardPrivateProperty<Value,JsonState>::get ( const DBo* object, bool create )
          287  {
          288  if ( object == _owner ) return _cache;
          289 
          290  Property* property = object->getProperty ( StandardPrivateProperty<Value>::staticGetName() );
          291  _cache = dynamic_cast<StandardPrivateProperty<Value>*> ( property );
          292 
          293  if ( !_cache ) {
          294  if ( property )
          295  throw Error ( propertyTypeNameError
          296  , getString(StandardPrivateProperty<Value>::staticGetName()).c_str()
          297  , getString(object).c_str() );
          298  else if ( create )
          299  const_cast<DBo*>(object)->put ( StandardPrivateProperty<Value>::create() );
          300  }
          301 
          302  return _cache;
          303  }
          304 
          305 
          306  template<typename Value, typename JsonState>
          307  StandardPrivateProperty<Value,JsonState>::StandardPrivateProperty ()
          308  : PrivateProperty(), _value()
          309  { }
          310 
          311 
          312  template<typename Value, typename JsonState>
          313  StandardPrivateProperty<Value,JsonState>::StandardPrivateProperty ( const Value& value )
          314  : PrivateProperty(), _value(value)
          315  { }
          316 
          317 
          318  template<typename Value, typename JsonState>
          319  Name StandardPrivateProperty<Value,JsonState>::getName() const
          320  {
          321  return staticGetName();
          322  }
          323 
          324 
          325  template<typename Value, typename JsonState>
          326  Value& StandardPrivateProperty<Value,JsonState>::getValue () const
          327  {
          328  return _value;
          329  }
          330 
          331 
          332  template<typename Value, typename JsonState>
          333  void StandardPrivateProperty<Value,JsonState>::setValue ( const Value& value )
          334  {
          335  _value = value;
          336  }
          337 
          338 
          339  template<typename Value, typename JsonState>
          340  bool StandardPrivateProperty<Value,JsonState>::hasJson () const
          341  {
          342  return JsonState::enabled;
          343  }
          344 
          345 
          346  template<typename Value, typename JsonState>
          347  void StandardPrivateProperty<Value,JsonState>::toJson ( JsonWriter* w, const DBo* ) const
          348  {
          349  w->startObject();
          350  std::string tname = getString(staticGetName());
          351  jsonWrite( w, "@typename", tname );
          352  jsonWrite( w, "_value", _value );
          353  w->endObject();
          354  }
          355 
          356 
          357  template<typename Value, typename JsonState>
          358  string StandardPrivateProperty<Value,JsonState>::_getTypeName () const
          359  {
          360  return _TName("StandardPrivateProperty");
          361  }
          362 
          363  template<typename Value, typename JsonState>
          364  string StandardPrivateProperty<Value,JsonState>::_getString () const
          365  {
          366  string s = PrivateProperty::_getString();
          367  s.insert(s.length() - 1, " " + getString(_value));
          368  return s;
          369  }
          370 
          371  template<typename Value, typename JsonState>
          372  Record* StandardPrivateProperty<Value,JsonState>::_getRecord () const
          373  {
          374  Record* record = PrivateProperty::_getRecord();
          375  if (record) {
          376  record->add ( getSlot("_name" , staticGetName()) );
          377  record->add ( getSlot("_value" ,&_value) );
          378  record->add ( getSlot("JSON support", JsonState::enabled) );
          379  }
          380  return record;
          381  }
          382 
          383 
          384 // -------------------------------------------------------------------
          385 // Class : "Hurricane::SharedProperty".
          386 
          387 
          388  class SharedProperty : public Property {
          389  private:
          390  class Orphaned {
          391  public:
          392  inline Orphaned ( SharedProperty* );
          393  public:
          394  SharedProperty* _property;
          395  unsigned int _refcount;
          396  unsigned int _count;
          397  };
          398  public:
          399  typedef vector<DBo*> DBoSet;
          400  typedef map<string,Orphaned> OrphanedMap;
          401  public:
          402  static const OrphanedMap& getOrphaneds ();
          403  static SharedProperty* getOrphaned ( const string& );
          404  static void addOrphaned ( const string&, SharedProperty* );
          405  static void refOrphaned ( const string& );
          406  static void countOrphaned ( const string&, unsigned int );
          407  static void removeOrphaned ( const string& );
          408  static void clearOrphaneds ();
          409  public:
          410  inline DBos getOwners () const;
          411  virtual void onCapturedBy ( DBo* owner );
          412  virtual void onReleasedBy ( DBo* owner );
          413  virtual void onNotOwned ();
          414  void _erase ( DBo* owner );
          415  inline DBoSet& _getOwnerSet ();
          416  virtual string _getString () const;
          417  virtual Record* _getRecord () const;
          418  private:
          419  static OrphanedMap _orphaneds;
          420  private:
          421  DBoSet _ownerSet;
          422  protected:
          423  SharedProperty ();
          424  virtual void _preDestroy ();
          425  };
          426 
          427 
          428 // Inline Functions.
          429  inline SharedProperty::Orphaned::Orphaned ( SharedProperty* property )
          430  : _property(property), _refcount(0), _count(0)
          431  { }
          432 
          433  inline DBos SharedProperty::getOwners () const { return getCollection(_ownerSet); }
          434  inline SharedProperty::DBoSet& SharedProperty::_getOwnerSet () { return _ownerSet; }
          435 
          436 
          437 // -------------------------------------------------------------------
          438 // Template Class : "Hurricane::StandardSharedProperty".
          439 
          440 
          441  template<typename Value> class StandardSharedProperty : public SharedProperty {
          442 
          443  public:
          444  static Name staticGetName ();
          445  static Value* staticGetValue ( const DBo* );
          446  static StandardSharedProperty* get ( const DBo*, bool create=false );
          447  // Constructors.
          448  static StandardSharedProperty* create ();
          449  static StandardSharedProperty* create ( const Value& );
          450  // Methods.
          451  virtual Name getName () const;
          452  Value& getValue () const;
          453  void setValue ( const Value& );
          454  virtual string _getTypeName () const;
          455  virtual string _getString () const;
          456  virtual Record* _getRecord () const;
          457 
          458  private:
          459  // Internal: Attributes.
          460  static Name _name;
          461  static DBo* _owner;
          462  static StandardSharedProperty* _cache;
          463  mutable Value _value;
          464 
          465  protected:
          466  // Internal: Constructor.
          468  StandardSharedProperty ( const Value& );
          469  };
          470 
          471 
          472 // Template function members.
          473  template<typename Value>
          475 
          476 
          477  template<typename Value>
          479 
          480 
          481  template<typename Value>
          483  {
          484  return _name;
          485  }
          486 
          487 
          488  template<typename Value>
          489  Value* StandardSharedProperty<Value>::staticGetValue ( const DBo* object )
          490  {
          491  if ( ( object == _owner ) || get(object) ) return _cache->getValue();
          492  return NULL;
          493  }
          494 
          495 
          496  template<typename Value>
          497  StandardSharedProperty<Value>* StandardSharedProperty<Value>::create ()
          498  {
          499  _cache = new StandardSharedProperty<Value>();
          500  _cache->_postCreate();
          501  return _cache;
          502  }
          503 
          504 
          505  template<typename Value>
          506  StandardSharedProperty<Value>* StandardSharedProperty<Value>::create ( const Value& value )
          507  {
          508  _cache = new StandardPrivateProperty<Value>(value);
          509  _cache->_postCreate();
          510  return _cache;
          511  }
          512 
          513 
          514  template<typename Value>
          515  StandardSharedProperty<Value>* StandardSharedProperty<Value>::get ( const DBo* object, bool create )
          516  {
          517  if ( _owner == object ) return _cache;
          518 
          519  Property* property = object->getProperty ( StandardSharedProperty<Value>::staticGetName() );
          520  _cache = dynamic_cast<StandardSharedProperty<Value>*> ( property );
          521 
          522  if ( !_cache ) {
          523  if ( property )
          524  throw Error ( propertyTypeNameError
          525  , getString(StandardSharedProperty<Value>::staticGetName()).c_str()
          526  , getString(object).c_str() );
          527  else if ( create )
          528  const_cast<DBo*>(object)->put ( StandardSharedProperty<Value>::create() );
          529  }
          530 
          531  return _cache;
          532  }
          533 
          534 
          535  template<typename Value>
          536  StandardSharedProperty<Value>::StandardSharedProperty ()
          537  : SharedProperty(), _value()
          538  { }
          539 
          540 
          541  template<typename Value>
          542  StandardSharedProperty<Value>::StandardSharedProperty ( const Value& value )
          543  : SharedProperty(), _value(value)
          544  { }
          545 
          546 
          547  template<typename Value>
          548  Name StandardSharedProperty<Value>::getName() const
          549  {
          550  return staticGetName();
          551  }
          552 
          553 
          554  template<typename Value>
          555  Value& StandardSharedProperty<Value>::getValue() const
          556  {
          557  return _value;
          558  }
          559 
          560 
          561  template<typename Value>
          562  void StandardSharedProperty<Value>::setValue(const Value& value)
          563  {
          564  _value = value;
          565  }
          566 
          567 
          568  template<typename Value>
          569  string StandardSharedProperty<Value>::_getTypeName() const
          570  {
          571  return _TName("StandardSharedProperty");
          572  }
          573 
          574 
          575  template<typename Value>
          576  string StandardSharedProperty<Value>::_getString() const
          577  {
          578  string s = SharedProperty::_getString();
          579  s.insert(s.length() - 1, " " + getString(_value));
          580  return s;
          581  }
          582 
          583 
          584  template<typename Value>
          585  Record* StandardSharedProperty<Value>::_getRecord() const
          586  {
          587  Record* record = SharedProperty::_getRecord();
          588  if (record) {
          589  record->add ( getSlot("Name" , staticGetName()) );
          590  record->add ( getSlot("Value", &_value) );
          591  }
          592  return record;
          593  }
          594 
          595 
          596 } // Hurricane namespace.
          597 
          598 
          599 INSPECTOR_P_SUPPORT(Hurricane::Property);
          600 
          601 
          602 #endif // HURRICANE_PROPERTY_H
          PrivateProperty description (API)
          Definition: Property.h:134
          +
          1 // -*- C++ -*-
          2 //
          3 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
          4 //
          5 // This file is part of Hurricane.
          6 //
          7 // Hurricane is free software: you can redistribute it and/or modify
          8 // it under the terms of the GNU Lesser General Public License as
          9 // published by the Free Software Foundation, either version 3 of the
          10 // License, or (at your option) any later version.
          11 //
          12 // Hurricane is distributed in the hope that it will be useful, but
          13 // WITHOUT ANY WARRANTY; without even the implied warranty of MERCHAN-
          14 // TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU
          15 // General Public License for more details.
          16 //
          17 // You should have received a copy of the Lesser GNU General Public
          18 // License along with Hurricane. If not, see
          19 // <http://www.gnu.org/licenses/>.
          20 //
          21 // +-----------------------------------------------------------------+
          22 // | H U R R I C A N E |
          23 // | V L S I B a c k e n d D a t a - B a s e |
          24 // | |
          25 // | Author : Remy Escassut |
          26 // | E-mail : Jean-Paul.Chaput@lip6.fr |
          27 // | =============================================================== |
          28 // | C++ Header : "./hurricane/Property.h" |
          29 // +-----------------------------------------------------------------+
          30 
          31 
          32 #ifndef HURRICANE_PROPERTY_H
          33 #define HURRICANE_PROPERTY_H
          34 
          35 #include "hurricane/Name.h"
          36 #include "hurricane/Properties.h"
          37 #include "hurricane/DBo.h"
          38 #include "hurricane/Error.h"
          39 
          40 
          41 namespace Hurricane {
          42 
          43 
          44  extern const char* propertyTypeNameError;
          45 
          46 
          47 // -------------------------------------------------------------------
          48 // Classes : template enable/disable Json support.
          49 
          50  struct JsonEnabled { enum State { enabled=1 }; };
          51  struct JsonDisabled { enum State { enabled=0 }; };
          52 
          53 
          54 // -------------------------------------------------------------------
          55 // Class : "Hurricane::Property".
          56 
          57 
          58  class Property {
          59 
          60  public:
          61  // Static Method.
          62  template<typename DerivedProperty>
          63  static DerivedProperty* get ( const DBo* );
          64  static Name staticGetName ();
          65  // Constructor.
          66  template<typename DerivedProperty>
          67  static DerivedProperty* create ();
          68  template<typename DerivedProperty, typename Value>
          69  static DerivedProperty* create ( const Value& );
          70  // Destructor.
          71  virtual void destroy ();
          72  // Methods.
          73  virtual Name getName () const = 0;
          74  virtual void onCapturedBy ( DBo* owner ) = 0;
          75  virtual void onReleasedBy ( DBo* owner ) = 0;
          76  // Hurricane Managment.
          77  virtual bool hasJson () const;
          78  virtual void toJson ( JsonWriter*, const DBo* ) const;
          79  virtual string _getTypeName () const = 0;
          80  virtual string _getString () const;
          81  virtual Record* _getRecord () const;
          82 
          83  private:
          84  static Name _baseName;
          85  protected:
          86  // Internal: Constructors & Destructors.
          87  Property ();
          88  virtual ~Property ();
          89  virtual void _postCreate () {};
          90  virtual void _preDestroy () {};
          91  private:
          92  Property ( const Property& );
          93  Property& operator= ( const Property& );
          94  };
          95 
          96 
          97  template<typename DerivedProperty>
          98  DerivedProperty* Property::create ()
          99  {
          100  DerivedProperty* property = new DerivedProperty();
          101  property->_postCreate();
          102  return property;
          103  }
          104 
          105 
          106  template<typename DerivedProperty, typename Value>
          107  DerivedProperty* Property::create ( const Value& value )
          108  {
          109  DerivedProperty* property = new DerivedProperty(value);
          110  property->_postCreate();
          111  return property;
          112  }
          113 
          114 
          115  template<typename DerivedProperty>
          116  DerivedProperty* Property::get ( const DBo* object )
          117  {
          118  Property* property1 = object->getProperty ( DerivedProperty::staticGetName() );
          119  DerivedProperty* property2 = dynamic_cast<DerivedProperty*> ( property1 );
          120 
          121  if ( property1 && !property2 )
          122  throw Error ( propertyTypeNameError
          123  , getString(DerivedProperty::staticGetName()).c_str()
          124  , getString(object).c_str() );
          125 
          126  return property2;
          127  }
          128 
          129 
          130 // -------------------------------------------------------------------
          131 // Class : "Hurricane::PrivateProperty".
          132 
          133 
          134  class PrivateProperty : public Property {
          135 
          136  public:
          137  // Methods.
          138  inline DBo* getOwner () const;
          139  virtual void onCapturedBy ( DBo* owner );
          140  virtual void onReleasedBy ( DBo* owner );
          141  virtual void onNotOwned ();
          142  virtual string _getString () const;
          143  virtual Record* _getRecord () const;
          144 
          145  private:
          146  // Internal: Attributes.
          147  DBo* _owner;
          148  protected:
          149  // Internal: Constructor & Destructors.
          150  PrivateProperty ();
          151  virtual void _preDestroy ();
          152  };
          153 
          154 
          155 // Inline Functions.
          156  inline DBo* PrivateProperty::getOwner () const { return _owner; };
          157 
          158 
          159 // -------------------------------------------------------------------
          160 // Template Class : "Hurricane::StandardPrivateProperty".
          161 
          162 
          163  template<typename Value, typename JsonState=JsonDisabled>
          165  public:
          166  static Name staticGetName ();
          167  static Value* staticGetValue ( const DBo* );
          168  static StandardPrivateProperty* get ( const DBo*, bool create=false );
          169  // Constructors.
          170  static StandardPrivateProperty* create ();
          171  static StandardPrivateProperty* create ( const Value& );
          172  // Methods.
          173  virtual Name getName () const;
          174  Value& getValue () const;
          175  void setValue ( const Value& );
          176  virtual bool hasJson () const;
          177  virtual void toJson ( JsonWriter*, const DBo* ) const;
          178  virtual string _getTypeName () const;
          179  virtual string _getString () const;
          180  virtual Record* _getRecord () const;
          181  private:
          182  // Internal: Attributes.
          183  static Name _name;
          184  static DBo* _owner;
          185  static StandardPrivateProperty* _cache;
          186  mutable Value _value;
          187  protected:
          188  // Internal: Constructor.
          190  StandardPrivateProperty ( const Value& );
          191  public:
          192  class JsonProperty : public JsonObject {
          193  public:
          194  static void initialize ();
          195  JsonProperty ( unsigned long flags );
          196  virtual string getTypeName () const;
          197  virtual JsonProperty* clone ( unsigned long ) const;
          198  virtual void toData ( JsonStack& );
          199  };
          200  };
          201 
          202 
          203  template<typename Value, typename JsonState>
          205  : JsonObject(flags)
          206  {
          207  if (flags & JsonWriter::RegisterMode)
          208  cerr << "Registering JsonProperty" << endl;
          209  add( "_value", typeid(Value) );
          210  }
          211 
          212 
          213  template<typename Value, typename JsonState>
          214  string StandardPrivateProperty<Value,JsonState>::JsonProperty::getTypeName () const
          215  { return getString(StandardPrivateProperty<Value,JsonState>::staticGetName()); }
          216 
          217 
          218  template<typename Value, typename JsonState>
          219  void StandardPrivateProperty<Value,JsonState>::JsonProperty::initialize ()
          220  { JsonTypes::registerType( new JsonProperty (JsonWriter::RegisterMode) ); }
          221 
          222 
          223  template<typename Value, typename JsonState>
          224  typename StandardPrivateProperty<Value,JsonState>::JsonProperty*
          225  StandardPrivateProperty<Value,JsonState>::JsonProperty::clone ( unsigned long flags ) const
          226  { return new JsonProperty ( flags ); }
          227 
          228 
          229  template<typename Value, typename JsonState>
          230  void StandardPrivateProperty<Value,JsonState>::JsonProperty::toData ( JsonStack& stack )
          231  {
          232  check( stack, "JsonProperty::toData" );
          233 
          234  DBo* dbo = stack.back_dbo();
          235  Value value = get<string>(stack,"_value");
          236  StandardPrivateProperty<Value,JsonState>* property
          237  = StandardPrivateProperty<Value,JsonState>::create(value);
          238  if (dbo) dbo->put( property );
          239 
          240  update( stack, property );
          241  }
          242 
          243 
          244  template<typename Value, typename JsonState>
          245  DBo* StandardPrivateProperty<Value,JsonState>::_owner = NULL;
          246 
          247 
          248  template<typename Value, typename JsonState>
          249  StandardPrivateProperty<Value,JsonState>* StandardPrivateProperty<Value,JsonState>::_cache = NULL;
          250 
          251 
          252  template<typename Value, typename JsonState>
          253  Name StandardPrivateProperty<Value,JsonState>::staticGetName ()
          254  {
          255  return _name;
          256  }
          257 
          258 
          259  template<typename Value, typename JsonState>
          260  Value* StandardPrivateProperty<Value,JsonState>::staticGetValue ( const DBo* object )
          261  {
          262  if ( ( object == _owner ) || get(object) ) return _cache->getValue();
          263  return NULL;
          264  }
          265 
          266 
          267  template<typename Value, typename JsonState>
          268  StandardPrivateProperty<Value,JsonState>* StandardPrivateProperty<Value,JsonState>::create ()
          269  {
          270  _cache = new StandardPrivateProperty<Value>();
          271  _cache->_postCreate();
          272  return _cache;
          273  }
          274 
          275 
          276  template<typename Value, typename JsonState>
          277  StandardPrivateProperty<Value,JsonState>* StandardPrivateProperty<Value,JsonState>::create ( const Value& value )
          278  {
          279  _cache = new StandardPrivateProperty<Value>(value);
          280  _cache->_postCreate();
          281  return _cache;
          282  }
          283 
          284 
          285  template<typename Value, typename JsonState>
          286  StandardPrivateProperty<Value,JsonState>* StandardPrivateProperty<Value,JsonState>::get ( const DBo* object, bool create )
          287  {
          288  if ( object == _owner ) return _cache;
          289 
          290  Property* property = object->getProperty ( StandardPrivateProperty<Value>::staticGetName() );
          291  _cache = dynamic_cast<StandardPrivateProperty<Value>*> ( property );
          292 
          293  if ( !_cache ) {
          294  if ( property )
          295  throw Error ( propertyTypeNameError
          296  , getString(StandardPrivateProperty<Value>::staticGetName()).c_str()
          297  , getString(object).c_str() );
          298  else if ( create )
          299  const_cast<DBo*>(object)->put ( StandardPrivateProperty<Value>::create() );
          300  }
          301 
          302  return _cache;
          303  }
          304 
          305 
          306  template<typename Value, typename JsonState>
          307  StandardPrivateProperty<Value,JsonState>::StandardPrivateProperty ()
          308  : PrivateProperty(), _value()
          309  { }
          310 
          311 
          312  template<typename Value, typename JsonState>
          313  StandardPrivateProperty<Value,JsonState>::StandardPrivateProperty ( const Value& value )
          314  : PrivateProperty(), _value(value)
          315  { }
          316 
          317 
          318  template<typename Value, typename JsonState>
          319  Name StandardPrivateProperty<Value,JsonState>::getName() const
          320  {
          321  return staticGetName();
          322  }
          323 
          324 
          325  template<typename Value, typename JsonState>
          326  Value& StandardPrivateProperty<Value,JsonState>::getValue () const
          327  {
          328  return _value;
          329  }
          330 
          331 
          332  template<typename Value, typename JsonState>
          333  void StandardPrivateProperty<Value,JsonState>::setValue ( const Value& value )
          334  {
          335  _value = value;
          336  }
          337 
          338 
          339  template<typename Value, typename JsonState>
          340  bool StandardPrivateProperty<Value,JsonState>::hasJson () const
          341  {
          342  return JsonState::enabled;
          343  }
          344 
          345 
          346  template<typename Value, typename JsonState>
          347  void StandardPrivateProperty<Value,JsonState>::toJson ( JsonWriter* w, const DBo* ) const
          348  {
          349  w->startObject();
          350  std::string tname = getString(staticGetName());
          351  jsonWrite( w, "@typename", tname );
          352  jsonWrite( w, "_value", _value );
          353  w->endObject();
          354  }
          355 
          356 
          357  template<typename Value, typename JsonState>
          358  string StandardPrivateProperty<Value,JsonState>::_getTypeName () const
          359  {
          360  return _TName("StandardPrivateProperty");
          361  }
          362 
          363  template<typename Value, typename JsonState>
          364  string StandardPrivateProperty<Value,JsonState>::_getString () const
          365  {
          366  string s = PrivateProperty::_getString();
          367  s.insert(s.length() - 1, " " + getString(_value));
          368  return s;
          369  }
          370 
          371  template<typename Value, typename JsonState>
          372  Record* StandardPrivateProperty<Value,JsonState>::_getRecord () const
          373  {
          374  Record* record = PrivateProperty::_getRecord();
          375  if (record) {
          376  record->add ( getSlot("_name" , staticGetName()) );
          377  record->add ( getSlot("_value" ,&_value) );
          378  record->add ( getSlot("JSON support", JsonState::enabled) );
          379  }
          380  return record;
          381  }
          382 
          383 
          384 // -------------------------------------------------------------------
          385 // Class : "Hurricane::SharedProperty".
          386 
          387 
          388  class SharedProperty : public Property {
          389  private:
          390  class Orphaned {
          391  public:
          392  inline Orphaned ( SharedProperty* );
          393  public:
          394  SharedProperty* _property;
          395  unsigned int _refcount;
          396  unsigned int _count;
          397  };
          398  public:
          399  typedef set<DBo*,DBo::CompareById> DBoSet;
          400  typedef map<string,Orphaned> OrphanedMap;
          401  public:
          402  static const OrphanedMap& getOrphaneds ();
          403  static SharedProperty* getOrphaned ( const string& );
          404  static void addOrphaned ( const string&, SharedProperty* );
          405  static void refOrphaned ( const string& );
          406  static void countOrphaned ( const string&, unsigned int );
          407  static void removeOrphaned ( const string& );
          408  static void clearOrphaneds ();
          409  public:
          410  inline DBos getOwners () const;
          411  virtual void onCapturedBy ( DBo* owner );
          412  virtual void onReleasedBy ( DBo* owner );
          413  virtual void onNotOwned ();
          414  void _erase ( DBo* owner );
          415  inline DBoSet& _getOwnerSet ();
          416  virtual string _getString () const;
          417  virtual Record* _getRecord () const;
          418  private:
          419  static OrphanedMap _orphaneds;
          420  private:
          421  DBoSet _ownerSet;
          422  protected:
          423  SharedProperty ();
          424  virtual void _preDestroy ();
          425  };
          426 
          427 
          428 // Inline Functions.
          429  inline SharedProperty::Orphaned::Orphaned ( SharedProperty* property )
          430  : _property(property), _refcount(0), _count(0)
          431  { }
          432 
          433  inline DBos SharedProperty::getOwners () const { return getCollection(_ownerSet); }
          434  inline SharedProperty::DBoSet& SharedProperty::_getOwnerSet () { return _ownerSet; }
          435 
          436 
          437 // -------------------------------------------------------------------
          438 // Template Class : "Hurricane::StandardSharedProperty".
          439 
          440 
          441  template<typename Value> class StandardSharedProperty : public SharedProperty {
          442 
          443  public:
          444  static Name staticGetName ();
          445  static Value* staticGetValue ( const DBo* );
          446  static StandardSharedProperty* get ( const DBo*, bool create=false );
          447  // Constructors.
          448  static StandardSharedProperty* create ();
          449  static StandardSharedProperty* create ( const Value& );
          450  // Methods.
          451  virtual Name getName () const;
          452  Value& getValue () const;
          453  void setValue ( const Value& );
          454  virtual string _getTypeName () const;
          455  virtual string _getString () const;
          456  virtual Record* _getRecord () const;
          457 
          458  private:
          459  // Internal: Attributes.
          460  static Name _name;
          461  static DBo* _owner;
          462  static StandardSharedProperty* _cache;
          463  mutable Value _value;
          464 
          465  protected:
          466  // Internal: Constructor.
          468  StandardSharedProperty ( const Value& );
          469  };
          470 
          471 
          472 // Template function members.
          473  template<typename Value>
          475 
          476 
          477  template<typename Value>
          479 
          480 
          481  template<typename Value>
          483  {
          484  return _name;
          485  }
          486 
          487 
          488  template<typename Value>
          489  Value* StandardSharedProperty<Value>::staticGetValue ( const DBo* object )
          490  {
          491  if ( ( object == _owner ) || get(object) ) return _cache->getValue();
          492  return NULL;
          493  }
          494 
          495 
          496  template<typename Value>
          497  StandardSharedProperty<Value>* StandardSharedProperty<Value>::create ()
          498  {
          499  _cache = new StandardSharedProperty<Value>();
          500  _cache->_postCreate();
          501  return _cache;
          502  }
          503 
          504 
          505  template<typename Value>
          506  StandardSharedProperty<Value>* StandardSharedProperty<Value>::create ( const Value& value )
          507  {
          508  _cache = new StandardPrivateProperty<Value>(value);
          509  _cache->_postCreate();
          510  return _cache;
          511  }
          512 
          513 
          514  template<typename Value>
          515  StandardSharedProperty<Value>* StandardSharedProperty<Value>::get ( const DBo* object, bool create )
          516  {
          517  if ( _owner == object ) return _cache;
          518 
          519  Property* property = object->getProperty ( StandardSharedProperty<Value>::staticGetName() );
          520  _cache = dynamic_cast<StandardSharedProperty<Value>*> ( property );
          521 
          522  if ( !_cache ) {
          523  if ( property )
          524  throw Error ( propertyTypeNameError
          525  , getString(StandardSharedProperty<Value>::staticGetName()).c_str()
          526  , getString(object).c_str() );
          527  else if ( create )
          528  const_cast<DBo*>(object)->put ( StandardSharedProperty<Value>::create() );
          529  }
          530 
          531  return _cache;
          532  }
          533 
          534 
          535  template<typename Value>
          536  StandardSharedProperty<Value>::StandardSharedProperty ()
          537  : SharedProperty(), _value()
          538  { }
          539 
          540 
          541  template<typename Value>
          542  StandardSharedProperty<Value>::StandardSharedProperty ( const Value& value )
          543  : SharedProperty(), _value(value)
          544  { }
          545 
          546 
          547  template<typename Value>
          548  Name StandardSharedProperty<Value>::getName() const
          549  {
          550  return staticGetName();
          551  }
          552 
          553 
          554  template<typename Value>
          555  Value& StandardSharedProperty<Value>::getValue() const
          556  {
          557  return _value;
          558  }
          559 
          560 
          561  template<typename Value>
          562  void StandardSharedProperty<Value>::setValue(const Value& value)
          563  {
          564  _value = value;
          565  }
          566 
          567 
          568  template<typename Value>
          569  string StandardSharedProperty<Value>::_getTypeName() const
          570  {
          571  return _TName("StandardSharedProperty");
          572  }
          573 
          574 
          575  template<typename Value>
          576  string StandardSharedProperty<Value>::_getString() const
          577  {
          578  string s = SharedProperty::_getString();
          579  s.insert(s.length() - 1, " " + getString(_value));
          580  return s;
          581  }
          582 
          583 
          584  template<typename Value>
          585  Record* StandardSharedProperty<Value>::_getRecord() const
          586  {
          587  Record* record = SharedProperty::_getRecord();
          588  if (record) {
          589  record->add ( getSlot("Name" , staticGetName()) );
          590  record->add ( getSlot("Value", &_value) );
          591  }
          592  return record;
          593  }
          594 
          595 
          596 } // Hurricane namespace.
          597 
          598 
          599 INSPECTOR_P_SUPPORT(Hurricane::Property);
          600 
          601 
          602 #endif // HURRICANE_PROPERTY_H
          PrivateProperty description (API)
          Definition: Property.h:134
          virtual void onReleasedBy(DBo *owner)=0
          DBo * getOwner() const
          Definition: Property.h:156
          Support for JSON export.
          Definition: JsonObject.h:83
          @@ -66,7 +66,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/QuadTree_8h_source.html b/hurricane/doc/hurricane/html/QuadTree_8h_source.html index d3d86e18..5ac6597e 100644 --- a/hurricane/doc/hurricane/html/QuadTree_8h_source.html +++ b/hurricane/doc/hurricane/html/QuadTree_8h_source.html @@ -62,7 +62,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Quark_8h_source.html b/hurricane/doc/hurricane/html/Quark_8h_source.html index 5873c143..5ec84991 100644 --- a/hurricane/doc/hurricane/html/Quark_8h_source.html +++ b/hurricane/doc/hurricane/html/Quark_8h_source.html @@ -54,7 +54,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Quarks_8h_source.html b/hurricane/doc/hurricane/html/Quarks_8h_source.html index 0a941a89..a4b560bf 100644 --- a/hurricane/doc/hurricane/html/Quarks_8h_source.html +++ b/hurricane/doc/hurricane/html/Quarks_8h_source.html @@ -50,7 +50,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Query_8h_source.html b/hurricane/doc/hurricane/html/Query_8h_source.html index bb3eb8ec..3b4b4847 100644 --- a/hurricane/doc/hurricane/html/Query_8h_source.html +++ b/hurricane/doc/hurricane/html/Query_8h_source.html @@ -98,7 +98,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/RegularLayer_8h_source.html b/hurricane/doc/hurricane/html/RegularLayer_8h_source.html index ce53fe99..7f9a55a8 100644 --- a/hurricane/doc/hurricane/html/RegularLayer_8h_source.html +++ b/hurricane/doc/hurricane/html/RegularLayer_8h_source.html @@ -60,7 +60,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Relation_8h_source.html b/hurricane/doc/hurricane/html/Relation_8h_source.html index 7e473c66..6b0ebaad 100644 --- a/hurricane/doc/hurricane/html/Relation_8h_source.html +++ b/hurricane/doc/hurricane/html/Relation_8h_source.html @@ -56,7 +56,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/RoutingPad_8h_source.html b/hurricane/doc/hurricane/html/RoutingPad_8h_source.html index d35b9e5d..0aeef0bf 100644 --- a/hurricane/doc/hurricane/html/RoutingPad_8h_source.html +++ b/hurricane/doc/hurricane/html/RoutingPad_8h_source.html @@ -90,7 +90,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Rubber_8h_source.html b/hurricane/doc/hurricane/html/Rubber_8h_source.html index 0bdcd62b..9854247b 100644 --- a/hurricane/doc/hurricane/html/Rubber_8h_source.html +++ b/hurricane/doc/hurricane/html/Rubber_8h_source.html @@ -65,7 +65,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Rubbers_8h_source.html b/hurricane/doc/hurricane/html/Rubbers_8h_source.html index 53ed618c..4c8ec061 100644 --- a/hurricane/doc/hurricane/html/Rubbers_8h_source.html +++ b/hurricane/doc/hurricane/html/Rubbers_8h_source.html @@ -57,7 +57,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Segment_8h_source.html b/hurricane/doc/hurricane/html/Segment_8h_source.html index c651592c..953db325 100644 --- a/hurricane/doc/hurricane/html/Segment_8h_source.html +++ b/hurricane/doc/hurricane/html/Segment_8h_source.html @@ -80,7 +80,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Segments_8h_source.html b/hurricane/doc/hurricane/html/Segments_8h_source.html index 61ef53a1..950a7d39 100644 --- a/hurricane/doc/hurricane/html/Segments_8h_source.html +++ b/hurricane/doc/hurricane/html/Segments_8h_source.html @@ -57,7 +57,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/SetCollection_8h_source.html b/hurricane/doc/hurricane/html/SetCollection_8h_source.html index fbe8093e..448f9a7d 100644 --- a/hurricane/doc/hurricane/html/SetCollection_8h_source.html +++ b/hurricane/doc/hurricane/html/SetCollection_8h_source.html @@ -54,7 +54,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Slice_8h_source.html b/hurricane/doc/hurricane/html/Slice_8h_source.html index ebdedb40..3aab9a3e 100644 --- a/hurricane/doc/hurricane/html/Slice_8h_source.html +++ b/hurricane/doc/hurricane/html/Slice_8h_source.html @@ -67,7 +67,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Slices_8h_source.html b/hurricane/doc/hurricane/html/Slices_8h_source.html index 13ac844b..54b86f8a 100644 --- a/hurricane/doc/hurricane/html/Slices_8h_source.html +++ b/hurricane/doc/hurricane/html/Slices_8h_source.html @@ -57,7 +57,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Tabulation_8h_source.html b/hurricane/doc/hurricane/html/Tabulation_8h_source.html index 6e0651fa..cd752ccb 100644 --- a/hurricane/doc/hurricane/html/Tabulation_8h_source.html +++ b/hurricane/doc/hurricane/html/Tabulation_8h_source.html @@ -56,7 +56,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Technology_8h_source.html b/hurricane/doc/hurricane/html/Technology_8h_source.html index 6c00e0c6..74c0e4b4 100644 --- a/hurricane/doc/hurricane/html/Technology_8h_source.html +++ b/hurricane/doc/hurricane/html/Technology_8h_source.html @@ -44,7 +44,7 @@ $(function() {
          Technology.h
          -
          1 // -*- C++ -*-
          2 //
          3 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
          4 //
          5 // This file is part of Hurricane.
          6 //
          7 // Hurricane is free software: you can redistribute it and/or modify
          8 // it under the terms of the GNU Lesser General Public License as
          9 // published by the Free Software Foundation, either version 3 of the
          10 // License, or (at your option) any later version.
          11 //
          12 // Hurricane is distributed in the hope that it will be useful, but
          13 // WITHOUT ANY WARRANTY; without even the implied warranty of MERCHAN-
          14 // TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU
          15 // General Public License for more details.
          16 //
          17 // You should have received a copy of the Lesser GNU General Public
          18 // License along with Hurricane. If not, see
          19 // <http://www.gnu.org/licenses/>.
          20 //
          21 // +-----------------------------------------------------------------+
          22 // | H U R R I C A N E |
          23 // | V L S I B a c k e n d D a t a - B a s e |
          24 // | |
          25 // | Author : Remy Escassut |
          26 // | E-mail : Jean-Paul.Chaput@lip6.fr |
          27 // | =============================================================== |
          28 // | C++ Header : "./hurricane/Technology.h" |
          29 // +-----------------------------------------------------------------+
          30 
          31 
          32 #ifndef HURRICANE_TECHNOLOGY_H
          33 #define HURRICANE_TECHNOLOGY_H
          34 
          35 #include <set>
          36 #include <map>
          37 #include "hurricane/Mask.h"
          38 #include "hurricane/DBo.h"
          39 #include "hurricane/Layer.h"
          40 #include "hurricane/BasicLayers.h"
          41 #include "hurricane/RegularLayers.h"
          42 #include "hurricane/ViaLayers.h"
          43 #include "hurricane/IntrusiveMap.h"
          44 #include "hurricane/DeviceDescriptor.h"
          45 #include "hurricane/ModelDescriptor.h"
          46 #include "hurricane/Rule.h"
          47 
          48 
          49 namespace Hurricane {
          50 
          51  using std::set;
          52  using std::multimap;
          53 
          54  class DataBase;
          55  class BasicLayer;
          56  class RegularLayer;
          57  class ViaLayer;
          58  class UnitRule;
          59  class PhysicalRule;
          60  class TwoLayersPhysicalRule;
          61 
          62 
          63 // -------------------------------------------------------------------
          64 // Class : "Hurricane::Technology".
          65 
          66  class Technology : public DBo {
          67 
          68  public:
          69  typedef DBo Super;
          70  typedef multimap<Layer::Mask,Layer*> LayerMaskMap;
          71  typedef set<DeviceDescriptor*, DeviceDescriptor::DeviceDescriptorComp> DeviceDescriptors;
          72  typedef set<ModelDescriptor* , ModelDescriptor::ModelDescriptorComp> ModelDescriptors;
          73  public:
          74  struct RuleNameCompare:
          75  public std::binary_function<const Rule*, const Rule*, bool> {
          76  bool operator() ( const Rule* rule1, const Rule* rule2 ) const
          77  { return rule1->getName() < rule2->getName(); }
          78  };
          79  public:
          80  typedef std::pair<const Hurricane::Layer*, const Hurricane::Layer*> LayerPair;
          81  typedef std::set<UnitRule* , RuleNameCompare> UnitRules;
          82  typedef std::set<PhysicalRule* , RuleNameCompare> PhysicalRules;
          83  typedef std::set<TwoLayersPhysicalRule* , RuleNameCompare> TwoLayersRulesSet;
          84  typedef std::map<const Hurricane::Layer* , PhysicalRules> OneLayerRules;
          85  typedef std::map<LayerPair , TwoLayersRulesSet> TwoLayersRules;
          86 
          87  public:
          88  // Sub-class : LayerMap.
          89  class LayerMap : public IntrusiveMap<Name,Layer> {
          90  public:
          91  typedef IntrusiveMap<Name,Layer> Super;
          92  public:
          93  LayerMap ();
          94  virtual Name _getKey ( Layer* ) const;
          95  virtual unsigned _getHashValue ( Name ) const;
          96  virtual Layer* _getNextElement ( Layer* ) const;
          97  virtual void _setNextElement ( Layer* , Layer* nextLayer) const;
          98  };
          99 
          100  public:
          101  // Constructor.
          102  static Technology* create ( DataBase* , const Name& );
          103  // Accessors.
          104  inline bool isMetal ( const Layer* ) const;
          105  inline DataBase* getDataBase () const;
          106  inline const Name& getName () const;
          107  inline Layer* getLayer ( const Name& ) const;
          108  BasicLayer* getBasicLayer ( const Name& ) const;
          109  RegularLayer* getRegularLayer ( const Name& ) const;
          110  ViaLayer* getViaLayer ( const Name& ) const;
          111  inline Layers getLayers () const;
          112  BasicLayers getBasicLayers () const;
          113  BasicLayers getBasicLayers ( const Layer::Mask& ) const;
          114  RegularLayers getRegularLayers () const;
          115  ViaLayers getViaLayers () const;
          116  Layer* getLayer ( const Layer::Mask&, bool useSymbolic=true ) const;
          117  Layer* getMetalAbove ( const Layer*, bool useSymbolic=true ) const;
          118  Layer* getMetalBelow ( const Layer*, bool useSymbolic=true ) const;
          119  Layer* getCutAbove ( const Layer*, bool useSymbolic=true ) const;
          120  Layer* getCutBelow ( const Layer*, bool useSymbolic=true ) const;
          121  Layer* getViaBetween ( const Layer*, const Layer*, bool useSymbolic=true ) const;
          122  Layer* getNthMetal ( int ) const;
          123  Layer* getNthCut ( int ) const;
          124  DeviceDescriptor* getDeviceDescriptor ( const Name& );
          125  ModelDescriptor* getModelDescriptor (const Name& );
          126  inline ModelDescriptors& getModelDescriptors ();
          127  UnitRule getUnitRule ( const std::string& ruleName ) const;
          128  PhysicalRule getPhysicalRule ( const std::string& ruleName ) const;
          129  PhysicalRule getPhysicalRule ( const std::string& ruleName
          130  , const std::string& layerName ) const;
          131  PhysicalRule getPhysicalRule ( const std::string& ruleName
          132  , const std::string& layer1Name
          133  , const std::string& layer2Name ) const;
          134  inline const UnitRules& getUnitRules () const;
          135  inline const PhysicalRules& getNoLayerRules () const;
          136  inline const OneLayerRules& getOneLayerRules () const;
          137  inline const TwoLayersRules& getTwoLayersRules () const;
          138  void toDtr ( std::ostream& );
          139  inline void setName ( const std::string& name );
          140  // Updators.
          141  void setName ( const Name& );
          142  bool setSymbolicLayer ( const Name& );
          143  bool setSymbolicLayer ( const Layer* );
          144  DeviceDescriptor* addDeviceDescriptor ( const Name& );
          145  ModelDescriptor* addModelDescriptor ( const Name& name
          146  , const Name& simul
          147  , const Name& model
          148  , std::string netlist
          149  , const Name& name_n
          150  , const Name& name_p
          151  , bool precise );
          152  void addUnitRule ( const std::string& ruleName
          153  , double value
          154  , const std::string& reference );
          155  void addPhysicalRule ( const std::string& ruleName
          156  , DbU::Unit value
          157  , const std::string& reference );
          158  void addPhysicalRule ( const std::string& ruleName
          159  , const std::string& layerName
          160  , DbU::Unit value
          161  , const std::string& reference);
          162  void addPhysicalRule ( const std::string& ruleName
          163  , const std::string& layer1Name
          164  , const std::string& layer2Name
          165  , bool symetric
          166  , DbU::Unit value
          167  , const std::string& reference );
          168  // Others.
          169  inline LayerMap& _getLayerMap ();
          170  inline LayerMaskMap& _getLayerMaskMap ();
          171  void _insertInLayerMaskMap ( Layer* );
          172  void _removeFromLayerMaskMap ( Layer* );
          173  inline Layer::Mask& _getCutMask ();
          174  inline Layer::Mask& _getMetalMask ();
          175  void _onDbuChange ( float scale );
          176  // Hurricane Managment.
          177  virtual void _toJson ( JsonWriter* ) const;
          178  virtual void _toJsonCollections ( JsonWriter* ) const;
          179  virtual string _getTypeName () const;
          180  virtual string _getString () const;
          181  virtual Record* _getRecord () const;
          182 
          183  private:
          184  // Internal: Attributes.
          185  DataBase* _dataBase;
          186  Name _name;
          187  LayerMap _layerMap;
          188  LayerMaskMap _layerMaskMap;
          189  Layer::Mask _cutMask;
          190  Layer::Mask _metalMask;
          191  DeviceDescriptors _deviceDescriptors;
          192  ModelDescriptors _modelDescriptors;
          193  UnitRules _unitRules;
          194  PhysicalRules _noLayerRules;
          195  OneLayerRules _oneLayerRules;
          196  TwoLayersRules _twoLayersRules;
          197 
          198  protected:
          199  // Constructors & Destructors.
          200  Technology ( DataBase* , const Name& );
          201  virtual void _postCreate ();
          202  virtual void _preDestroy ();
          203  };
          204 
          205 
          206 // Inline Functions.
          207  inline bool Technology::isMetal ( const Layer* layer ) const { return _metalMask.contains(layer->getMask()); }
          208  inline DataBase* Technology::getDataBase () const { return _dataBase; }
          209  inline const Name& Technology::getName () const { return _name; }
          210  inline Layer* Technology::getLayer ( const Name& name ) const { return _layerMap.getElement(name); }
          211  inline Layers Technology::getLayers () const { return getCollection(&_layerMaskMap); }
          212  inline Technology::ModelDescriptors& Technology::getModelDescriptors () { return _modelDescriptors; }
          213  inline Technology::LayerMap& Technology::_getLayerMap () { return _layerMap; }
          214  inline Technology::LayerMaskMap& Technology::_getLayerMaskMap () { return _layerMaskMap; }
          215  inline Layer::Mask& Technology::_getCutMask () { return _cutMask; }
          216  inline Layer::Mask& Technology::_getMetalMask () { return _metalMask; }
          217 
          218 
          219 // -------------------------------------------------------------------
          220 // Class : "Hurricane::JsonTechnology".
          221 
          222  class JsonTechnology : public JsonDBo {
          223  public:
          224  static void initialize ();
          225  JsonTechnology ( unsigned long flags );
          226  virtual ~JsonTechnology ();
          227  virtual string getTypeName () const;
          228  virtual JsonTechnology* clone ( unsigned long ) const;
          229  virtual void toData ( JsonStack& );
          230  void addBlockageRef ( const std::string&, BasicLayer* );
          231  private:
          232  std::map< string, vector<BasicLayer*> > _blockagesMap;
          233  };
          234 
          235 
          236 } // Hurricane namespace.
          237 
          238 
          239 // -------------------------------------------------------------------
          240 // Inspector Support for : Hurricane::Technology::LayerPair".
          241 
          242 template<>
          243 inline std::string getString<Hurricane::Technology::LayerPair>( Hurricane::Technology::LayerPair lp )
          244 { return "<LayerPair layer1=" + getString(lp.first) + ", layer2=" + getString(lp.second) + ">"; }
          245 
          246 
          247 INSPECTOR_P_SUPPORT(Hurricane::Technology);
          248 
          249 
          250 #endif // HURRICANE_TECHNOLOGY_H
          const Name & getName() const
          Definition: Technology.h:209
          +
          1 // -*- C++ -*-
          2 //
          3 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
          4 //
          5 // This file is part of Hurricane.
          6 //
          7 // Hurricane is free software: you can redistribute it and/or modify
          8 // it under the terms of the GNU Lesser General Public License as
          9 // published by the Free Software Foundation, either version 3 of the
          10 // License, or (at your option) any later version.
          11 //
          12 // Hurricane is distributed in the hope that it will be useful, but
          13 // WITHOUT ANY WARRANTY; without even the implied warranty of MERCHAN-
          14 // TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU
          15 // General Public License for more details.
          16 //
          17 // You should have received a copy of the Lesser GNU General Public
          18 // License along with Hurricane. If not, see
          19 // <http://www.gnu.org/licenses/>.
          20 //
          21 // +-----------------------------------------------------------------+
          22 // | H U R R I C A N E |
          23 // | V L S I B a c k e n d D a t a - B a s e |
          24 // | |
          25 // | Author : Remy Escassut |
          26 // | E-mail : Jean-Paul.Chaput@lip6.fr |
          27 // | =============================================================== |
          28 // | C++ Header : "./hurricane/Technology.h" |
          29 // +-----------------------------------------------------------------+
          30 
          31 
          32 #ifndef HURRICANE_TECHNOLOGY_H
          33 #define HURRICANE_TECHNOLOGY_H
          34 
          35 #include <set>
          36 #include <map>
          37 #include "hurricane/Mask.h"
          38 #include "hurricane/DBo.h"
          39 #include "hurricane/Layer.h"
          40 #include "hurricane/BasicLayers.h"
          41 #include "hurricane/RegularLayers.h"
          42 #include "hurricane/ViaLayers.h"
          43 #include "hurricane/IntrusiveMap.h"
          44 #include "hurricane/DeviceDescriptor.h"
          45 #include "hurricane/ModelDescriptor.h"
          46 #include "hurricane/Rule.h"
          47 #include "hurricane/UnitRule.h"
          48 #include "hurricane/PhysicalRule.h"
          49 #include "hurricane/TwoLayersPhysicalRule.h"
          50 
          51 
          52 namespace Hurricane {
          53 
          54  using std::set;
          55  using std::multimap;
          56 
          57  class DataBase;
          58  class BasicLayer;
          59  class RegularLayer;
          60  class ViaLayer;
          61 
          62 
          63 // -------------------------------------------------------------------
          64 // Class : "Hurricane::Technology".
          65 
          66  class Technology : public DBo {
          67 
          68  public:
          69  typedef DBo Super;
          70  typedef multimap<Layer::Mask,Layer*> LayerMaskMap;
          71  typedef set<DeviceDescriptor*, DeviceDescriptor::DeviceDescriptorComp> DeviceDescriptors;
          72  typedef set<ModelDescriptor* , ModelDescriptor::ModelDescriptorComp> ModelDescriptors;
          73  public:
          74  struct RuleNameCompare {
          75  inline bool operator() ( const PhysicalRule* rule1 , const PhysicalRule* rule2 ) const
          76  { return rule1->getName() < rule2->getName(); }
          77  inline bool operator() ( const UnitRule* rule1 , const UnitRule* rule2 ) const
          78  { return rule1->getName() < rule2->getName(); }
          79  inline bool operator() ( const Rule* rule1 , const Rule* rule2 ) const
          80  { return rule1->getName() < rule2->getName(); }
          81  };
          82  public:
          83  typedef std::pair<const Hurricane::Layer*, const Hurricane::Layer*> LayerPair;
          84  typedef std::set<UnitRule* , RuleNameCompare> UnitRules;
          85  typedef std::set<PhysicalRule* , RuleNameCompare> PhysicalRules;
          86  typedef std::set<TwoLayersPhysicalRule* , RuleNameCompare> TwoLayersRulesSet;
          87  typedef std::map<const Hurricane::Layer* , PhysicalRules> OneLayerRules;
          88  typedef std::map<LayerPair , TwoLayersRulesSet> TwoLayersRules;
          89 
          90  public:
          91  // Sub-class : LayerMap.
          92  class LayerMap : public IntrusiveMap<Name,Layer> {
          93  public:
          94  typedef IntrusiveMap<Name,Layer> Super;
          95  public:
          96  LayerMap ();
          97  virtual Name _getKey ( Layer* ) const;
          98  virtual unsigned _getHashValue ( Name ) const;
          99  virtual Layer* _getNextElement ( Layer* ) const;
          100  virtual void _setNextElement ( Layer* , Layer* nextLayer) const;
          101  };
          102 
          103  public:
          104  // Constructor.
          105  static Technology* create ( DataBase* , const Name& );
          106  // Accessors.
          107  inline bool isMetal ( const Layer* ) const;
          108  inline DataBase* getDataBase () const;
          109  inline const Name& getName () const;
          110  inline Layer* getLayer ( const Name& ) const;
          111  BasicLayer* getBasicLayer ( const Name& ) const;
          112  RegularLayer* getRegularLayer ( const Name& ) const;
          113  ViaLayer* getViaLayer ( const Name& ) const;
          114  inline Layers getLayers () const;
          115  BasicLayers getBasicLayers () const;
          116  BasicLayers getBasicLayers ( const Layer::Mask& ) const;
          117  RegularLayers getRegularLayers () const;
          118  ViaLayers getViaLayers () const;
          119  Layer* getLayer ( const Layer::Mask&, bool useSymbolic=true ) const;
          120  Layer* getMetalAbove ( const Layer*, bool useSymbolic=true ) const;
          121  Layer* getMetalBelow ( const Layer*, bool useSymbolic=true ) const;
          122  Layer* getCutAbove ( const Layer*, bool useSymbolic=true ) const;
          123  Layer* getCutBelow ( const Layer*, bool useSymbolic=true ) const;
          124  Layer* getViaBetween ( const Layer*, const Layer*, bool useSymbolic=true ) const;
          125  Layer* getNthMetal ( int ) const;
          126  Layer* getNthCut ( int ) const;
          127  DeviceDescriptor* getDeviceDescriptor ( const Name& );
          128  ModelDescriptor* getModelDescriptor (const Name& );
          129  inline ModelDescriptors& getModelDescriptors ();
          130  UnitRule getUnitRule ( const std::string& ruleName ) const;
          131  PhysicalRule getPhysicalRule ( const std::string& ruleName ) const;
          132  PhysicalRule getPhysicalRule ( const std::string& ruleName
          133  , const std::string& layerName ) const;
          134  PhysicalRule getPhysicalRule ( const std::string& ruleName
          135  , const std::string& layer1Name
          136  , const std::string& layer2Name ) const;
          137  inline const UnitRules& getUnitRules () const;
          138  inline const PhysicalRules& getNoLayerRules () const;
          139  inline const OneLayerRules& getOneLayerRules () const;
          140  inline const TwoLayersRules& getTwoLayersRules () const;
          141  void toDtr ( std::ostream& );
          142  inline void setName ( const std::string& name );
          143  // Updators.
          144  void setName ( const Name& );
          145  bool setSymbolicLayer ( const Name& );
          146  bool setSymbolicLayer ( const Layer* );
          147  DeviceDescriptor* addDeviceDescriptor ( const Name& );
          148  ModelDescriptor* addModelDescriptor ( const Name& name
          149  , const Name& simul
          150  , const Name& model
          151  , std::string netlist
          152  , const Name& name_n
          153  , const Name& name_p
          154  , bool precise );
          155  void addUnitRule ( const std::string& ruleName
          156  , double value
          157  , const std::string& reference );
          158  void addPhysicalRule ( const std::string& ruleName
          159  , DbU::Unit value
          160  , const std::string& reference );
          161  void addPhysicalRule ( const std::string& ruleName
          162  , const std::string& layerName
          163  , DbU::Unit value
          164  , const std::string& reference);
          165  void addPhysicalRule ( const std::string& ruleName
          166  , const std::string& layer1Name
          167  , const std::string& layer2Name
          168  , bool symetric
          169  , DbU::Unit value
          170  , const std::string& reference );
          171  // Others.
          172  inline LayerMap& _getLayerMap ();
          173  inline LayerMaskMap& _getLayerMaskMap ();
          174  void _insertInLayerMaskMap ( Layer* );
          175  void _removeFromLayerMaskMap ( Layer* );
          176  inline Layer::Mask& _getCutMask ();
          177  inline Layer::Mask& _getMetalMask ();
          178  void _onDbuChange ( float scale );
          179  // Hurricane Managment.
          180  virtual void _toJson ( JsonWriter* ) const;
          181  virtual void _toJsonCollections ( JsonWriter* ) const;
          182  virtual string _getTypeName () const;
          183  virtual string _getString () const;
          184  virtual Record* _getRecord () const;
          185 
          186  private:
          187  // Internal: Attributes.
          188  DataBase* _dataBase;
          189  Name _name;
          190  LayerMap _layerMap;
          191  LayerMaskMap _layerMaskMap;
          192  Layer::Mask _cutMask;
          193  Layer::Mask _metalMask;
          194  DeviceDescriptors _deviceDescriptors;
          195  ModelDescriptors _modelDescriptors;
          196  UnitRules _unitRules;
          197  PhysicalRules _noLayerRules;
          198  OneLayerRules _oneLayerRules;
          199  TwoLayersRules _twoLayersRules;
          200 
          201  protected:
          202  // Constructors & Destructors.
          203  Technology ( DataBase* , const Name& );
          204  virtual void _postCreate ();
          205  virtual void _preDestroy ();
          206  };
          207 
          208 
          209 // Inline Functions.
          210  inline bool Technology::isMetal ( const Layer* layer ) const { return _metalMask.contains(layer->getMask()); }
          211  inline DataBase* Technology::getDataBase () const { return _dataBase; }
          212  inline const Name& Technology::getName () const { return _name; }
          213  inline Layer* Technology::getLayer ( const Name& name ) const { return _layerMap.getElement(name); }
          214  inline Layers Technology::getLayers () const { return getCollection(&_layerMaskMap); }
          215  inline Technology::ModelDescriptors& Technology::getModelDescriptors () { return _modelDescriptors; }
          216  inline Technology::LayerMap& Technology::_getLayerMap () { return _layerMap; }
          217  inline Technology::LayerMaskMap& Technology::_getLayerMaskMap () { return _layerMaskMap; }
          218  inline Layer::Mask& Technology::_getCutMask () { return _cutMask; }
          219  inline Layer::Mask& Technology::_getMetalMask () { return _metalMask; }
          220 
          221 
          222 // -------------------------------------------------------------------
          223 // Class : "Hurricane::JsonTechnology".
          224 
          225  class JsonTechnology : public JsonDBo {
          226  public:
          227  static void initialize ();
          228  JsonTechnology ( unsigned long flags );
          229  virtual ~JsonTechnology ();
          230  virtual string getTypeName () const;
          231  virtual JsonTechnology* clone ( unsigned long ) const;
          232  virtual void toData ( JsonStack& );
          233  void addBlockageRef ( const std::string&, BasicLayer* );
          234  private:
          235  std::map< string, vector<BasicLayer*> > _blockagesMap;
          236  };
          237 
          238 
          239 } // Hurricane namespace.
          240 
          241 
          242 // -------------------------------------------------------------------
          243 // Inspector Support for : Hurricane::Technology::LayerPair".
          244 
          245 template<>
          246 inline std::string getString<Hurricane::Technology::LayerPair>( Hurricane::Technology::LayerPair lp )
          247 { return "<LayerPair layer1=" + getString(lp.first) + ", layer2=" + getString(lp.second) + ">"; }
          248 
          249 
          250 INSPECTOR_P_SUPPORT(Hurricane::Technology);
          251 
          252 
          253 #endif // HURRICANE_TECHNOLOGY_H
          const Name & getName() const
          Definition: Technology.h:212
          BasicLayer * getBasicLayer(const Name &) const
          RegularLayer description (API)
          Definition: RegularLayer.h:45
          ViaLayer * getViaLayer(const Name &) const
          @@ -55,17 +55,17 @@ $(function() {
          std::int64_t Unit
          Definition: DbU.h:70
          ViaLayers getViaLayers() const
          DataBase object root class (API).
          Definition: DBo.h:46
          -
          bool isMetal(const Layer *) const
          Definition: Technology.h:207
          +
          bool isMetal(const Layer *) const
          Definition: Technology.h:210
          Hurricane::Mask< unsigned long long > Mask
          Definition: Layer.h:65
          -
          Layers getLayers() const
          Definition: Technology.h:211
          +
          Layers getLayers() const
          Definition: Technology.h:214
          Generic Collection auto-pointer.
          Definition: Collection.h:28
          -
          Layer * getLayer(const Name &) const
          Definition: Technology.h:210
          +
          Layer * getLayer(const Name &) const
          Definition: Technology.h:213
          static Technology * create(DataBase *, const Name &)
          The whole DataBase (API).
          Definition: DataBase.h:40
          Layer * getCutBelow(const Layer *, bool useSymbolic=true) const
          Layer description (API)
          Definition: Layer.h:52
          -
          const Mask & getMask() const
          Definition: Layer.h:150
          -
          DataBase * getDataBase() const
          Definition: Technology.h:208
          +
          const Mask & getMask() const
          Definition: Layer.h:154
          +
          DataBase * getDataBase() const
          Definition: Technology.h:211
          Layer * getNthMetal(int) const
          The namespace dedicated to Hurricane.
          Definition: Generalities.dox:5
          RegularLayer * getRegularLayer(const Name &) const
          @@ -80,7 +80,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Transformation_8h_source.html b/hurricane/doc/hurricane/html/Transformation_8h_source.html index 6e07da1e..6fecef10 100644 --- a/hurricane/doc/hurricane/html/Transformation_8h_source.html +++ b/hurricane/doc/hurricane/html/Transformation_8h_source.html @@ -73,7 +73,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/TransistorLayer_8h_source.html b/hurricane/doc/hurricane/html/TransistorLayer_8h_source.html index 3ea16e37..7a1e617b 100644 --- a/hurricane/doc/hurricane/html/TransistorLayer_8h_source.html +++ b/hurricane/doc/hurricane/html/TransistorLayer_8h_source.html @@ -59,7 +59,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/UpdateSession_8h_source.html b/hurricane/doc/hurricane/html/UpdateSession_8h_source.html index 9d80614f..31a6c83d 100644 --- a/hurricane/doc/hurricane/html/UpdateSession_8h_source.html +++ b/hurricane/doc/hurricane/html/UpdateSession_8h_source.html @@ -44,7 +44,7 @@ $(function() {
          UpdateSession.h
          -
          1 // ****************************************************************************************************
          2 // File: ./hurricane/UpdateSession.h
          3 // Authors: R. Escassut
          4 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
          5 //
          6 // This file is part of Hurricane.
          7 //
          8 // Hurricane is free software: you can redistribute it and/or modify it under the terms of the GNU
          9 // Lesser General Public License as published by the Free Software Foundation, either version 3 of the
          10 // License, or (at your option) any later version.
          11 //
          12 // Hurricane is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
          13 // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU
          14 // General Public License for more details.
          15 //
          16 // You should have received a copy of the Lesser GNU General Public License along with Hurricane. If
          17 // not, see <http://www.gnu.org/licenses/>.
          18 // ****************************************************************************************************
          19 
          20 #ifndef HURRICANE_UPDATE_SESSION
          21 #define HURRICANE_UPDATE_SESSION
          22 
          23 #include "hurricane/Property.h"
          24 
          25 namespace Hurricane {
          26 
          27 class Go;
          28 
          29 
          30 
          31 // ****************************************************************************************************
          32 // UpdateSession declaration
          33 // ****************************************************************************************************
          34 
          35 class UpdateSession : public SharedProperty {
          36 // ****************************************
          37 
          38 // Types
          39 // *****
          40 
          41  public: typedef SharedProperty Inherit;
          42 
          43 // Constructors
          44 // ************
          45 
          46  protected: UpdateSession();
          47 
          48  public: virtual void destroy();
          49 
          50 // Accessors
          51 // *********
          52 
          53  public: static const Name& getPropertyName();
          54  public: virtual Name getName() const {return getPropertyName();};
          55 
          56 // Managers
          57 // ********
          58 
          59  public: virtual void onCapturedBy(DBo* owner);
          60  public: virtual void onNotOwned();
          61 
          62 // Ohers
          63 // *****
          64 
          65  public: static UpdateSession* _create();
          66  protected: virtual void _postCreate();
          67 
          68  public: void _destroy();
          69  protected: virtual void _preDestroy();
          70 
          71  public: virtual string _getTypeName() const {return _TName("UpdateSession");};
          72  public: virtual string _getString() const;
          73  public: virtual Record* _getRecord() const;
          74 
          75  public: static void open();
          76  public: static void close();
          77  public: static void reset();
          78 
          79 
          80 };
          81 
          82 
          83 // ****************************************************************************************************
          84 // Generic functions
          85 // ****************************************************************************************************
          86 
          87 //void openUpdateSession();
          88 //
          89 //void closeUpdateSession();
          90 //
          91 
          92 
          93 } // End of Hurricane namespace.
          94 
          95 
          96 #endif // HURRICANE_UPDATE_SESSION
          97 
          98 
          99 // ****************************************************************************************************
          100 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
          101 // ****************************************************************************************************
          Name description (API)
          Definition: Name.h:36
          +
          1 // ****************************************************************************************************
          2 // File: ./hurricane/UpdateSession.h
          3 // Authors: R. Escassut
          4 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
          5 //
          6 // This file is part of Hurricane.
          7 //
          8 // Hurricane is free software: you can redistribute it and/or modify it under the terms of the GNU
          9 // Lesser General Public License as published by the Free Software Foundation, either version 3 of the
          10 // License, or (at your option) any later version.
          11 //
          12 // Hurricane is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
          13 // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU
          14 // General Public License for more details.
          15 //
          16 // You should have received a copy of the Lesser GNU General Public License along with Hurricane. If
          17 // not, see <http://www.gnu.org/licenses/>.
          18 // ****************************************************************************************************
          19 
          20 #ifndef HURRICANE_UPDATE_SESSION
          21 #define HURRICANE_UPDATE_SESSION
          22 
          23 #include "hurricane/Property.h"
          24 
          25 namespace Hurricane {
          26 
          27 class Go;
          28 
          29 
          30 
          31 // ****************************************************************************************************
          32 // UpdateSession declaration
          33 // ****************************************************************************************************
          34 
          35 class UpdateSession : public SharedProperty {
          36 // ****************************************
          37 
          38 // Types
          39 // *****
          40 
          41  public: typedef SharedProperty Inherit;
          42 
          43 // Constructors
          44 // ************
          45 
          46  protected: UpdateSession();
          47 
          48  public: virtual void destroy();
          49 
          50 // Accessors
          51 // *********
          52 
          53  public: static const Name& getPropertyName();
          54  public: virtual Name getName() const {return getPropertyName();};
          55 
          56 // Managers
          57 // ********
          58 
          59  public: virtual void onCapturedBy(DBo* owner);
          60  public: virtual void onNotOwned();
          61 
          62 // Ohers
          63 // *****
          64 
          65  public: static UpdateSession* _create();
          66  protected: virtual void _postCreate();
          67 
          68  public: void _destroy();
          69  protected: virtual void _preDestroy();
          70 
          71  public: virtual string _getTypeName() const {return _TName("UpdateSession");};
          72  public: virtual string _getString() const;
          73  public: virtual Record* _getRecord() const;
          74 
          75  public: static void open();
          76  public: static void close();
          77  public: static void reset();
          78  public: static size_t getStackSize();
          79 
          80 
          81 };
          82 
          83 
          84 // ****************************************************************************************************
          85 // Generic functions
          86 // ****************************************************************************************************
          87 
          88 //void openUpdateSession();
          89 //
          90 //void closeUpdateSession();
          91 //
          92 
          93 
          94 } // End of Hurricane namespace.
          95 
          96 
          97 #endif // HURRICANE_UPDATE_SESSION
          98 
          99 
          100 // ****************************************************************************************************
          101 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
          102 // ****************************************************************************************************
          Name description (API)
          Definition: Name.h:36
          SharedProperty description (API)
          Definition: Property.h:388
          DataBase object root class (API).
          Definition: DBo.h:46
          UpdateSession description (API)
          Definition: UpdateSession.h:35
          @@ -54,7 +54,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/VectorCollection_8h_source.html b/hurricane/doc/hurricane/html/VectorCollection_8h_source.html index 802a64a9..1de91f46 100644 --- a/hurricane/doc/hurricane/html/VectorCollection_8h_source.html +++ b/hurricane/doc/hurricane/html/VectorCollection_8h_source.html @@ -54,7 +54,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Vertical_8h_source.html b/hurricane/doc/hurricane/html/Vertical_8h_source.html index 17a04cf5..23c1a5d0 100644 --- a/hurricane/doc/hurricane/html/Vertical_8h_source.html +++ b/hurricane/doc/hurricane/html/Vertical_8h_source.html @@ -65,7 +65,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Verticals_8h_source.html b/hurricane/doc/hurricane/html/Verticals_8h_source.html index b9e0510a..70842ded 100644 --- a/hurricane/doc/hurricane/html/Verticals_8h_source.html +++ b/hurricane/doc/hurricane/html/Verticals_8h_source.html @@ -57,7 +57,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/ViaLayer_8h_source.html b/hurricane/doc/hurricane/html/ViaLayer_8h_source.html index 875ac5b1..59e1cddb 100644 --- a/hurricane/doc/hurricane/html/ViaLayer_8h_source.html +++ b/hurricane/doc/hurricane/html/ViaLayer_8h_source.html @@ -59,7 +59,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/Warning_8h_source.html b/hurricane/doc/hurricane/html/Warning_8h_source.html index 59bab406..103d5f37 100644 --- a/hurricane/doc/hurricane/html/Warning_8h_source.html +++ b/hurricane/doc/hurricane/html/Warning_8h_source.html @@ -56,7 +56,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/annotated.html b/hurricane/doc/hurricane/html/annotated.html index dabc942a..8d1c382b 100644 --- a/hurricane/doc/hurricane/html/annotated.html +++ b/hurricane/doc/hurricane/html/annotated.html @@ -42,90 +42,91 @@ $(function() {
          Here are the classes, structs, unions and interfaces with brief descriptions:
          [detail level 123]
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
           NHurricaneThe namespace dedicated to Hurricane
           CBasicLayerBasicLayer description (API)
           CMaterial
           CBoxBox description (API)
           CCellThe model (API)
           CCollectionCollection description (API)
           CComponentComponent description (API)
           CBodyHook
           CContactContact description (API)
           CAnchorHook
           CContactLayerContactLayer description (API)
           CDataBaseThe whole DataBase (API)
           CDBoDataBase object root class (API)
           CDbUDataBase Unit managment (API)
           CDebugSessionEnable/Disable trace information (API)
           CDiagonalDiagonal description (API)
           CDiffusionLayerDiffusionLayer description (API)
           CEntityOccurrenceable objects root class (API)
           CCompareByIdEntity comparison criterion for STL container
           CErrorError description (API)
           CExceptionException description (API)
           CFilterFilter description (API)
           CGenericCollectionGeneric Collection auto-pointer
           CGenericFilterGeneric Filter auto-pointer
           CGenericLocatorGeneric Locator auto-pointer
           CGoGo description (API)
           CHookHook description (API)
           CHorizontalHorizontal description (API)
           CHyperNetHyperNet description (API)
           CInitializerRegister a static initialization function
           CInstanceInstance description (API)
           CPlacementStatusInstance Placement Status (API)
           CInterruptionInterruption description (API)
           CIntervalInterval description (API)
           CJsonObjectSupport for JSON export
           CJsonStackJSON Parser Stack
           CLayerLayer description (API)
           CLibraryLibrary description (API)
           CListCollectionHurricane Collection wrapper around a std::list
           CLocatorLocator description (API)
           CMapCollectionHurricane Collection wrapper around a std::map
           CNameName description (API)
           CNetNet description (API)
           CDirection
           CType
           CNotFilterFilter negation
           COccurrenceOccurrence description (API)
           CPadPad description (API)
           CPathPath description (API)
           CPinPin description (API)
           CPlugPlug description (API)
           CPointPoint description (API)
           CPolygonPolygon description (API)
           CPrivatePropertyPrivateProperty description (API)
           CPropertyProperty description (API)
           CQuadTreeQuadTree description (API)
           CQuarkQuark description (API)
           CQueryQuery description (API)
           CRegularLayerRegularLayer description (API)
           CRelationRelation description (API)
           CRoutingPadRoutingPad description (API)
           CRubberRubber description (API)
           CSegmentSegment description (API)
           CSourceHook
           CTargetHook
           CSetCollectionHurricane Collection wrapper around a std::set
           CSharedPropertySharedProperty description (API)
           CSliceSlice description (API)
           CStandardPrivatePropertyStandardPrivateProperty description (API)
           CStandardRelationStandardRelation description (API)
           CStandardSharedPropertyStandardSharedProperty description (API)
           CSubSetCollectionApplies a Filter to a Collection
           CSubTypeCollectionApplies a Type Filter to a Collection
           CTabulationTabulation description (API)
           CTechnologyTechnological rules description (API)
           CTransformationTransformation description (API)
           COrientation
           CTransistorLayerTransistorLayer description (API)
           CUpdateSessionUpdateSession description (API)
           CVectorCollectionHurricane Collection wrapper around a std::vector
           CVerticalVertical description (API)
           CViaLayerViaLayer description (API)
           CWarningWarning description (API)
           CtstreamTrace & indentation enabled stream
           NEntity
           CCompareByIdEntity comparison criterion for STL container
           NHurricaneThe namespace dedicated to Hurricane
           CBasicLayerBasicLayer description (API)
           CMaterial
           CBoxBox description (API)
           CCellThe model (API)
           CCollectionCollection description (API)
           CComponentComponent description (API)
           CBodyHook
           CContactContact description (API)
           CAnchorHook
           CContactLayerContactLayer description (API)
           CDataBaseThe whole DataBase (API)
           CDBoDataBase object root class (API)
           CDbUDataBase Unit managment (API)
           CDebugSessionEnable/Disable trace information (API)
           CDiagonalDiagonal description (API)
           CDiffusionLayerDiffusionLayer description (API)
           CEntityOccurrenceable objects root class (API)
           CErrorError description (API)
           CExceptionException description (API)
           CFilterFilter description (API)
           CGenericCollectionGeneric Collection auto-pointer
           CGenericFilterGeneric Filter auto-pointer
           CGenericLocatorGeneric Locator auto-pointer
           CGoGo description (API)
           CHookHook description (API)
           CHorizontalHorizontal description (API)
           CHyperNetHyperNet description (API)
           CInitializerRegister a static initialization function
           CInstanceInstance description (API)
           CPlacementStatusInstance Placement Status (API)
           CInterruptionInterruption description (API)
           CIntervalInterval description (API)
           CJsonObjectSupport for JSON export
           CJsonStackJSON Parser Stack
           CLayerLayer description (API)
           CLibraryLibrary description (API)
           CListCollectionHurricane Collection wrapper around a std::list
           CLocatorLocator description (API)
           CMapCollectionHurricane Collection wrapper around a std::map
           CNameName description (API)
           CNetNet description (API)
           CDirection
           CType
           CNotFilterFilter negation
           COccurrenceOccurrence description (API)
           CPadPad description (API)
           CPathPath description (API)
           CPinPin description (API)
           CPlugPlug description (API)
           CPointPoint description (API)
           CPolygonPolygon description (API)
           CPrivatePropertyPrivateProperty description (API)
           CPropertyProperty description (API)
           CQuadTreeQuadTree description (API)
           CQuarkQuark description (API)
           CQueryQuery description (API)
           CRegularLayerRegularLayer description (API)
           CRelationRelation description (API)
           CRoutingPadRoutingPad description (API)
           CRubberRubber description (API)
           CSegmentSegment description (API)
           CSourceHook
           CTargetHook
           CSetCollectionHurricane Collection wrapper around a std::set
           CSharedPropertySharedProperty description (API)
           CSliceSlice description (API)
           CStandardPrivatePropertyStandardPrivateProperty description (API)
           CStandardRelationStandardRelation description (API)
           CStandardSharedPropertyStandardSharedProperty description (API)
           CSubSetCollectionApplies a Filter to a Collection
           CSubTypeCollectionApplies a Type Filter to a Collection
           CTabulationTabulation description (API)
           CTechnologyTechnological rules description (API)
           CTransformationTransformation description (API)
           COrientation
           CTransistorLayerTransistorLayer description (API)
           CUpdateSessionUpdateSession description (API)
           CVectorCollectionHurricane Collection wrapper around a std::vector
           CVerticalVertical description (API)
           CViaLayerViaLayer description (API)
           CWarningWarning description (API)
           CtstreamTrace & indentation enabled stream
          @@ -133,7 +134,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/classEntity_1_1CompareById.html b/hurricane/doc/hurricane/html/classEntity_1_1CompareById.html new file mode 100644 index 00000000..80b7cb1f --- /dev/null +++ b/hurricane/doc/hurricane/html/classEntity_1_1CompareById.html @@ -0,0 +1,72 @@ + + + + + Hurricane Documentation + + + + + +

          Hurricane VLSI Database

          + +
          + + + + + + + +
          +
          +
          +
          Entity::CompareById Class Reference
          +
          +
          + +

          Entity comparison criterion for STL container. + More...

          +

          Detailed Description

          +

          Entity comparison criterion for STL container.

          +

          This class is a functor to be used in STL containers of Entity* whenever determinism is required (as an alternative to the object's pointer). If a NULL pointer is passed as argument, it's id is computed as zero, it is a failsafe and should be avoided.

          +
          typedef std::map<Net*,SomeValue,Entity::CompareById> NetMap;
          NetMap netMap;
          forEach( Net*, inet, cell->getNets() ) {
          netMap.insert( std::make_pair(*inet,computeSomeValue(*inet)) );
          }
          for ( NetMap::iterator imap=netMap.begin() ; imap!=netMap.end() ; ++imap ) {
          // Show the Net ordering
          cout << (*imap).first->getId() << ":" << (*imap).first << endl;
          // Do something
          // ...
          }

          The documentation for this class was generated from the following file:
            +
          • Entity.dox
          • +
          +
          +
          +
          + + + + + +
          Generated by doxygen 1.8.14 on Sun May 26 2019Return to top of page
          + + + + + +
          Hurricane VLSI DatabaseCopyright © 2000-2016 Bull S.A. All rights reserved
          + + diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1BasicLayer-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1BasicLayer-members.html index 6ee79a9c..6ef83a92 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1BasicLayer-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1BasicLayer-members.html @@ -89,7 +89,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1BasicLayer.html b/hurricane/doc/hurricane/html/classHurricane_1_1BasicLayer.html index 71bea737..27c0a40e 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1BasicLayer.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1BasicLayer.html @@ -342,7 +342,7 @@ Additional Inherited Members
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1BasicLayer_1_1Material-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1BasicLayer_1_1Material-members.html index 14946141..9f1e7360 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1BasicLayer_1_1Material-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1BasicLayer_1_1Material-members.html @@ -63,7 +63,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1BasicLayer_1_1Material.html b/hurricane/doc/hurricane/html/classHurricane_1_1BasicLayer_1_1Material.html index f0f12a65..a817a8da 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1BasicLayer_1_1Material.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1BasicLayer_1_1Material.html @@ -123,7 +123,7 @@ Public Types
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Box-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Box-members.html index 36d65c33..a70166bc 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Box-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Box-members.html @@ -91,7 +91,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Box.html b/hurricane/doc/hurricane/html/classHurricane_1_1Box.html index bea2d34c..03ed86af 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Box.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Box.html @@ -1104,7 +1104,7 @@ Remark on Modifiers
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Cell-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Cell-members.html index e44653e6..8bf4b070 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Cell-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Cell-members.html @@ -57,46 +57,45 @@ $(function() { getComponentsUnder(const Box &area, const Layer::Mask &mask=~0) constHurricane::Cell getExternalNets() constHurricane::Cell getGlobalNets() constHurricane::Cell - getId() constHurricane::Entityinline - getInstance(const Name &name) constHurricane::Cellinline - getInstances() constHurricane::Cellinline - getInstancesUnder(const Box &area) constHurricane::Cell - getInternalNets() constHurricane::Cell - getLibrary() constHurricane::Cellinline - getName() constHurricane::Cellinline - getNet(const Name &name) constHurricane::Cell - getNets() constHurricane::Cellinline - getOccurrences(unsigned searchDepth=std::numeric_limits< unsigned int >::max()) constHurricane::Cell - getOccurrencesUnder(const Box &area, unsigned searchDepth=std::numeric_limits< unsigned int >::max()) constHurricane::Cell - getProperties() constHurricane::DBo - getProperty(const Name &) constHurricane::DBo - getRubbers() constHurricane::Cell - getRubbersUnder(const Box &area) constHurricane::Cell - getSlaveInstances() constHurricane::Cell - getSlice(const Layer *layer) constHurricane::Cellinline - getSlices(const Layer::Mask &mask=~0) constHurricane::Cell - getSupplyNets() constHurricane::Cell - hasProperty() constHurricane::DBoinline - isCalledBy(Cell *cell) constHurricane::Cell - isTerminal() constHurricane::Cellinline - isUnique() constHurricane::Cell - isUniquified() constHurricane::Cell - isUniquifyMaster() constHurricane::Cell - materialize()Hurricane::Cell - put(Property *)Hurricane::DBo - remove(Property *)Hurricane::DBo - removeProperty(const Name &)Hurricane::DBo - setAbutmentBox(const Box &abutmentBox)Hurricane::Cell - setName(const Name &name)Hurricane::Cell - setTerminal(bool isTerminal)Hurricane::Cellinline - uniquify(unsigned int depth=std::numeric_limits< unsigned int >::max())Hurricane::Cell - unmaterialize()Hurricane::Cell + getInstance(const Name &name) constHurricane::Cellinline + getInstances() constHurricane::Cellinline + getInstancesUnder(const Box &area) constHurricane::Cell + getInternalNets() constHurricane::Cell + getLibrary() constHurricane::Cellinline + getName() constHurricane::Cellinline + getNet(const Name &name) constHurricane::Cell + getNets() constHurricane::Cellinline + getOccurrences(unsigned searchDepth=std::numeric_limits< unsigned int >::max()) constHurricane::Cell + getOccurrencesUnder(const Box &area, unsigned searchDepth=std::numeric_limits< unsigned int >::max()) constHurricane::Cell + getProperties() constHurricane::DBo + getProperty(const Name &) constHurricane::DBo + getRubbers() constHurricane::Cell + getRubbersUnder(const Box &area) constHurricane::Cell + getSlaveInstances() constHurricane::Cell + getSlice(const Layer *layer) constHurricane::Cellinline + getSlices(const Layer::Mask &mask=~0) constHurricane::Cell + getSupplyNets() constHurricane::Cell + hasProperty() constHurricane::DBoinline + isCalledBy(Cell *cell) constHurricane::Cell + isTerminal() constHurricane::Cellinline + isUnique() constHurricane::Cell + isUniquified() constHurricane::Cell + isUniquifyMaster() constHurricane::Cell + materialize()Hurricane::Cell + put(Property *)Hurricane::DBo + remove(Property *)Hurricane::DBo + removeProperty(const Name &)Hurricane::DBo + setAbutmentBox(const Box &abutmentBox)Hurricane::Cell + setName(const Name &name)Hurricane::Cell + setTerminal(bool isTerminal)Hurricane::Cellinline + uniquify(unsigned int depth=std::numeric_limits< unsigned int >::max())Hurricane::Cell + unmaterialize()Hurricane::Cell


          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Cell.html b/hurricane/doc/hurricane/html/classHurricane_1_1Cell.html index 1c3b0177..fcb37d2f 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Cell.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Cell.html @@ -131,9 +131,6 @@ Public Member Functions   void uniquify (unsigned int depth=std::numeric_limits< unsigned int >::max())   -- Public Member Functions inherited from Hurricane::Entity -unsigned int getId () const -  - Public Member Functions inherited from Hurricane::DBo virtual void destroy ()   @@ -946,7 +943,7 @@ Static Public Member Functions
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Collection-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Collection-members.html index 942da7d9..39481d45 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Collection-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Collection-members.html @@ -60,7 +60,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Collection.html b/hurricane/doc/hurricane/html/classHurricane_1_1Collection.html index dc275a87..8ef6580f 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Collection.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Collection.html @@ -376,7 +376,7 @@ template<class SubType >

          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Component-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Component-members.html index 701dd97d..f72cbf05 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Component-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Component-members.html @@ -56,30 +56,29 @@ $(function() { getBoundingBox(const BasicLayer *) const =0Hurricane::Componentpure virtual getConnexComponents() constHurricane::Component getHooks() constHurricane::Componentvirtual - getId() constHurricane::Entityinline - getIsUnderFilter(const Box &area)Hurricane::Componentstatic - getLayer() const =0Hurricane::Componentpure virtual - getNet() constHurricane::Componentinline - getPosition() constHurricane::Componentinlinevirtual - getProperties() constHurricane::DBo - getProperty(const Name &) constHurricane::DBo - getRubber() constHurricane::Componentinline - getSlaveComponents() constHurricane::Component - getX() const =0Hurricane::Componentpure virtual - getY() const =0Hurricane::Componentpure virtual - hasProperty() constHurricane::DBoinline - Inherit typedefHurricane::Component - isMaterialized() constHurricane::Goinline - put(Property *)Hurricane::DBo - remove(Property *)Hurricane::DBo - removeProperty(const Name &)Hurricane::DBo - translate(const DbU::Unit &dx, const DbU::Unit &dy)=0Hurricane::Gopure virtual + getIsUnderFilter(const Box &area)Hurricane::Componentstatic + getLayer() const =0Hurricane::Componentpure virtual + getNet() constHurricane::Componentinline + getPosition() constHurricane::Componentinlinevirtual + getProperties() constHurricane::DBo + getProperty(const Name &) constHurricane::DBo + getRubber() constHurricane::Componentinline + getSlaveComponents() constHurricane::Component + getX() const =0Hurricane::Componentpure virtual + getY() const =0Hurricane::Componentpure virtual + hasProperty() constHurricane::DBoinline + Inherit typedefHurricane::Component + isMaterialized() constHurricane::Goinline + put(Property *)Hurricane::DBo + remove(Property *)Hurricane::DBo + removeProperty(const Name &)Hurricane::DBo + translate(const DbU::Unit &dx, const DbU::Unit &dy)=0Hurricane::Gopure virtual


          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Component.html b/hurricane/doc/hurricane/html/classHurricane_1_1Component.html index 5e6bdc16..d3b2b917 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Component.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Component.html @@ -113,9 +113,6 @@ Public Member Functions   virtual void translate (const DbU::Unit &dx, const DbU::Unit &dy)=0   -- Public Member Functions inherited from Hurricane::Entity -unsigned int getId () const -  - Public Member Functions inherited from Hurricane::DBo virtual void destroy ()   @@ -507,7 +504,7 @@ Predefined filters
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Component_1_1BodyHook-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Component_1_1BodyHook-members.html index b7258e2a..385a8758 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Component_1_1BodyHook-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Component_1_1BodyHook-members.html @@ -63,7 +63,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Component_1_1BodyHook.html b/hurricane/doc/hurricane/html/classHurricane_1_1Component_1_1BodyHook.html index db5384e0..1930c38d 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Component_1_1BodyHook.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Component_1_1BodyHook.html @@ -91,7 +91,7 @@ Additional Inherited Members
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Contact-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Contact-members.html index fc2d89a6..b5cf3a4a 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Contact-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Contact-members.html @@ -63,37 +63,36 @@ $(function() { getHalfHeight() constHurricane::Contactinline getHalfWidth() constHurricane::Contactinline getHeight() constHurricane::Contactinline - getId() constHurricane::Entityinline - getIsUnderFilter(const Box &area)Hurricane::Componentstatic - getNet() constHurricane::Componentinline - getProperties() constHurricane::DBo - getProperty(const Name &) constHurricane::DBo - getRubber() constHurricane::Componentinline - getSlaveComponents() constHurricane::Component - getWidth() constHurricane::Contactinline - hasProperty() constHurricane::DBoinline - Inherit typedefHurricane::Contact - isMaterialized() constHurricane::Goinline - put(Property *)Hurricane::DBo - remove(Property *)Hurricane::DBo - removeProperty(const Name &)Hurricane::DBo - setDx(const DbU::Unit &dx)Hurricane::Contact - setDy(const DbU::Unit &dy)Hurricane::Contact - setHeight(const DbU::Unit &height)Hurricane::Contact - setLayer(const Layer *layer)Hurricane::Contact - setOffset(const DbU::Unit &dx, const DbU::Unit &dy)Hurricane::Contact - setPosition(const DbU::Unit &x, const DbU::Unit &y)Hurricane::Contact - setPosition(const Point &position)Hurricane::Contact - setSizes(const DbU::Unit &width, const DbU::Unit &height)Hurricane::Contact - setWidth(const DbU::Unit &width)Hurricane::Contact - setX(const DbU::Unit &x)Hurricane::Contact - setY(const DbU::Unit &y)Hurricane::Contact + getIsUnderFilter(const Box &area)Hurricane::Componentstatic + getNet() constHurricane::Componentinline + getProperties() constHurricane::DBo + getProperty(const Name &) constHurricane::DBo + getRubber() constHurricane::Componentinline + getSlaveComponents() constHurricane::Component + getWidth() constHurricane::Contactinline + hasProperty() constHurricane::DBoinline + Inherit typedefHurricane::Contact + isMaterialized() constHurricane::Goinline + put(Property *)Hurricane::DBo + remove(Property *)Hurricane::DBo + removeProperty(const Name &)Hurricane::DBo + setDx(const DbU::Unit &dx)Hurricane::Contact + setDy(const DbU::Unit &dy)Hurricane::Contact + setHeight(const DbU::Unit &height)Hurricane::Contact + setLayer(const Layer *layer)Hurricane::Contact + setOffset(const DbU::Unit &dx, const DbU::Unit &dy)Hurricane::Contact + setPosition(const DbU::Unit &x, const DbU::Unit &y)Hurricane::Contact + setPosition(const Point &position)Hurricane::Contact + setSizes(const DbU::Unit &width, const DbU::Unit &height)Hurricane::Contact + setWidth(const DbU::Unit &width)Hurricane::Contact + setX(const DbU::Unit &x)Hurricane::Contact + setY(const DbU::Unit &y)Hurricane::Contact


          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Contact.html b/hurricane/doc/hurricane/html/classHurricane_1_1Contact.html index 86b48c24..ad83c8f6 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Contact.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Contact.html @@ -133,9 +133,6 @@ Public Member Functions - Public Member Functions inherited from Hurricane::Go bool isMaterialized () const   -- Public Member Functions inherited from Hurricane::Entity -unsigned int getId () const -  - Public Member Functions inherited from Hurricane::DBo virtual void destroy ()   @@ -771,7 +768,7 @@ Introduction
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1ContactLayer-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1ContactLayer-members.html index 15de5d7c..345eb0d0 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1ContactLayer-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1ContactLayer-members.html @@ -84,7 +84,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1ContactLayer.html b/hurricane/doc/hurricane/html/classHurricane_1_1ContactLayer.html index 62c57030..878ae80a 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1ContactLayer.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1ContactLayer.html @@ -225,7 +225,7 @@ Additional Inherited Members
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Contact_1_1AnchorHook-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Contact_1_1AnchorHook-members.html index db0b32d2..415238fb 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Contact_1_1AnchorHook-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Contact_1_1AnchorHook-members.html @@ -63,7 +63,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Contact_1_1AnchorHook.html b/hurricane/doc/hurricane/html/classHurricane_1_1Contact_1_1AnchorHook.html index 281509c2..29b00624 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Contact_1_1AnchorHook.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Contact_1_1AnchorHook.html @@ -92,7 +92,7 @@ Additional Inherited Members
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1DBo-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1DBo-members.html index 45d63b58..cc5e88f2 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1DBo-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1DBo-members.html @@ -60,7 +60,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1DBo.html b/hurricane/doc/hurricane/html/classHurricane_1_1DBo.html index fae860c1..47676d13 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1DBo.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1DBo.html @@ -317,7 +317,7 @@ Remark
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1DataBase-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1DataBase-members.html index e451b4c9..fa890c61 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1DataBase-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1DataBase-members.html @@ -64,7 +64,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1DataBase.html b/hurricane/doc/hurricane/html/classHurricane_1_1DataBase.html index c50bb5ff..caed41b8 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1DataBase.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1DataBase.html @@ -213,7 +213,7 @@ Static Public Member Functions
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1DbU-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1DbU-members.html index 6fa999d4..f482ae6f 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1DbU-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1DbU-members.html @@ -98,7 +98,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1DbU.html b/hurricane/doc/hurricane/html/classHurricane_1_1DbU.html index 8592522c..0efe46b3 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1DbU.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1DbU.html @@ -168,7 +168,7 @@ Static Public Member Functions
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1DebugSession-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1DebugSession-members.html index f6a7bd2a..a9082b68 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1DebugSession-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1DebugSession-members.html @@ -58,7 +58,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1DebugSession.html b/hurricane/doc/hurricane/html/classHurricane_1_1DebugSession.html index 1d7ac7df..eb8add0a 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1DebugSession.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1DebugSession.html @@ -378,7 +378,7 @@ Trace Levels
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Diagonal-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Diagonal-members.html index 57bd9a29..ad920590 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Diagonal-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Diagonal-members.html @@ -56,27 +56,26 @@ $(function() { getBodyHook()Hurricane::Componentinline getConnexComponents() constHurricane::Component getHooks() constHurricane::Componentvirtual - getId() constHurricane::Entityinline - getIsUnderFilter(const Box &area)Hurricane::Componentstatic - getNet() constHurricane::Componentinline - getPosition() constHurricane::Componentinlinevirtual - getProperties() constHurricane::DBo - getProperty(const Name &) constHurricane::DBo - getRubber() constHurricane::Componentinline - getSlaveComponents() constHurricane::Component - hasProperty() constHurricane::DBoinline - Inherit typedefHurricane::Component - isMaterialized() constHurricane::Goinline - put(Property *)Hurricane::DBo - remove(Property *)Hurricane::DBo - removeProperty(const Name &)Hurricane::DBo - Super typedefHurricane::Diagonal + getIsUnderFilter(const Box &area)Hurricane::Componentstatic + getNet() constHurricane::Componentinline + getPosition() constHurricane::Componentinlinevirtual + getProperties() constHurricane::DBo + getProperty(const Name &) constHurricane::DBo + getRubber() constHurricane::Componentinline + getSlaveComponents() constHurricane::Component + hasProperty() constHurricane::DBoinline + Inherit typedefHurricane::Component + isMaterialized() constHurricane::Goinline + put(Property *)Hurricane::DBo + remove(Property *)Hurricane::DBo + removeProperty(const Name &)Hurricane::DBo + Super typedefHurricane::Diagonal


          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Diagonal.html b/hurricane/doc/hurricane/html/classHurricane_1_1Diagonal.html index f8167ee7..4c420cad 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Diagonal.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Diagonal.html @@ -106,9 +106,6 @@ Additional Inherited Members - Public Member Functions inherited from Hurricane::Go bool isMaterialized () const   -- Public Member Functions inherited from Hurricane::Entity -unsigned int getId () const -  - Public Member Functions inherited from Hurricane::DBo virtual void destroy ()   @@ -214,7 +211,7 @@ Introduction
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1DiffusionLayer-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1DiffusionLayer-members.html index 334460d2..e21c00bf 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1DiffusionLayer-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1DiffusionLayer-members.html @@ -83,7 +83,7 @@ $(function() {
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1DiffusionLayer.html b/hurricane/doc/hurricane/html/classHurricane_1_1DiffusionLayer.html index c2eb9e47..7660f9ce 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1DiffusionLayer.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1DiffusionLayer.html @@ -211,7 +211,7 @@ Additional Inherited Members
          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Entity-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Entity-members.html index fa00c66a..348acadd 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Entity-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Entity-members.html @@ -51,19 +51,18 @@ $(function() { destroy()Hurricane::DBovirtual getBoundingBox() const =0Hurricane::Entitypure virtual getCell() const =0Hurricane::Entitypure virtual - getId() constHurricane::Entityinline - getProperties() constHurricane::DBo - getProperty(const Name &) constHurricane::DBo - hasProperty() constHurricane::DBoinline - put(Property *)Hurricane::DBo - remove(Property *)Hurricane::DBo - removeProperty(const Name &)Hurricane::DBo + getProperties() constHurricane::DBo + getProperty(const Name &) constHurricane::DBo + hasProperty() constHurricane::DBoinline + put(Property *)Hurricane::DBo + remove(Property *)Hurricane::DBo + removeProperty(const Name &)Hurricane::DBo


          - +
          Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Entity.html b/hurricane/doc/hurricane/html/classHurricane_1_1Entity.html index 63b1da71..e1872e37 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Entity.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Entity.html @@ -42,7 +42,6 @@ $(function() {
          Hurricane::Entity Class Referenceabstract
          @@ -76,16 +75,8 @@ Inheritance diagram for Hurricane::Entity:
          [legend]
        - - - - -

        -Classes

        class  CompareById
         Entity comparison criterion for STL container. More...
         
        - - @@ -115,36 +106,10 @@ Introduction

        Entities are abstract objects representing the category of occurrenceable objects.

        Unique Identifier

        -

        Each Entity is associated with a unique identifier (see Entity::getId()). This identifier is used as a sorting key in the various IntrusiveMap throughout Hurricane to ensure determinism. It came as a replacement of the object's own address which is not suitable for this purpose.

        -

        For STL container, the Entity::CompareById functor is provided.

        +

        Each Entity is associated with a unique identifier (see Entity::getId()). This identifier is used as a sorting key in the various IntrusiveMap throughout Hurricane to ensure determinism. It came as a replacement of the object's own address which is not suitable for this purpose.

        +

        For STL container, the Entity::CompareById functor is provided.

        The identifier is generated from an ever incrementing counter on 32 bits or 64 bits, depending on the target system architecture. If the 32/64 bit capacity is reached an exception is thrown.

        Member Function Documentation

        - -

        ◆ getId()

        - -
        -
        -

        Public Member Functions

        unsigned int getId () const
         
        virtual CellgetCell () const =0
         
        virtual Box getBoundingBox () const =0
        - - - - -
        - - - - - - - -
        unsigned int Hurricane::Entity::getId () const
        -
        -inline
        -
        -

        Returns: Returns the unique identifier of this Entity.

        - -
        -

        ◆ getCell()

        @@ -209,7 +174,7 @@ Unique Identifier
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Error-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Error-members.html index 1b583ebb..ea0455b4 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Error-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Error-members.html @@ -66,7 +66,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Error.html b/hurricane/doc/hurricane/html/classHurricane_1_1Error.html index 6adc14c8..293c6b74 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Error.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Error.html @@ -345,7 +345,7 @@ Printing format
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Exception-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Exception-members.html index 7d282b25..7038a0c6 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Exception-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Exception-members.html @@ -57,7 +57,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Exception.html b/hurricane/doc/hurricane/html/classHurricane_1_1Exception.html index c62e1e4b..738ff1a8 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Exception.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Exception.html @@ -234,7 +234,7 @@ Example
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Filter-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Filter-members.html index 1231a929..0136ef08 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Filter-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Filter-members.html @@ -55,7 +55,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Filter.html b/hurricane/doc/hurricane/html/classHurricane_1_1Filter.html index 7a40f744..1bf18c27 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Filter.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Filter.html @@ -185,7 +185,7 @@ template<class Type>
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1GenericCollection-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1GenericCollection-members.html index b4f635a8..0bf0cfe1 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1GenericCollection-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1GenericCollection-members.html @@ -60,7 +60,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1GenericCollection.html b/hurricane/doc/hurricane/html/classHurricane_1_1GenericCollection.html index 9adedd62..bc2e83dc 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1GenericCollection.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1GenericCollection.html @@ -188,7 +188,7 @@ template<class Type>
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1GenericFilter-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1GenericFilter-members.html index fa0dc7e8..f4510e66 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1GenericFilter-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1GenericFilter-members.html @@ -56,7 +56,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1GenericFilter.html b/hurricane/doc/hurricane/html/classHurricane_1_1GenericFilter.html index 3b40a6f1..7036bcbc 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1GenericFilter.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1GenericFilter.html @@ -178,7 +178,7 @@ template<class Type >
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1GenericLocator-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1GenericLocator-members.html index 9bf6a752..6de107eb 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1GenericLocator-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1GenericLocator-members.html @@ -55,7 +55,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1GenericLocator.html b/hurricane/doc/hurricane/html/classHurricane_1_1GenericLocator.html index 525c7789..a2d5f0a3 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1GenericLocator.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1GenericLocator.html @@ -175,7 +175,7 @@ template<class Type>
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Go-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Go-members.html index d2932617..d0fa2f5c 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Go-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Go-members.html @@ -54,24 +54,23 @@ $(function() { enableAutoMaterialization()Hurricane::Gostatic getBoundingBox() const =0Hurricane::Entitypure virtual getCell() const =0Hurricane::Entitypure virtual - getId() constHurricane::Entityinline - getProperties() constHurricane::DBo - getProperty(const Name &) constHurricane::DBo - hasProperty() constHurricane::DBoinline - invalidate(bool propagateFlag=true)Hurricane::Govirtual - isMaterialized() constHurricane::Goinline - materialize()=0Hurricane::Gopure virtual - put(Property *)Hurricane::DBo - remove(Property *)Hurricane::DBo - removeProperty(const Name &)Hurricane::DBo - translate(const DbU::Unit &dx, const DbU::Unit &dy)=0Hurricane::Gopure virtual - unmaterialize()=0Hurricane::Gopure virtual + getProperties() constHurricane::DBo + getProperty(const Name &) constHurricane::DBo + hasProperty() constHurricane::DBoinline + invalidate(bool propagateFlag=true)Hurricane::Govirtual + isMaterialized() constHurricane::Goinline + materialize()=0Hurricane::Gopure virtual + put(Property *)Hurricane::DBo + remove(Property *)Hurricane::DBo + removeProperty(const Name &)Hurricane::DBo + translate(const DbU::Unit &dx, const DbU::Unit &dy)=0Hurricane::Gopure virtual + unmaterialize()=0Hurricane::Gopure virtual

        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Go.html b/hurricane/doc/hurricane/html/classHurricane_1_1Go.html index 67931811..66bcbdbe 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Go.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Go.html @@ -87,8 +87,6 @@ Public Member Functions virtual void translate (const DbU::Unit &dx, const DbU::Unit &dy)=0   - Public Member Functions inherited from Hurricane::Entity -unsigned int getId () const -  virtual CellgetCell () const =0   virtual Box getBoundingBox () const =0 @@ -388,7 +386,7 @@ Construction and destruction
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Hook-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Hook-members.html index 6c9a65f2..e39d9942 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Hook-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Hook-members.html @@ -65,7 +65,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Hook.html b/hurricane/doc/hurricane/html/classHurricane_1_1Hook.html index 42a430bc..a6c82099 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Hook.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Hook.html @@ -420,7 +420,7 @@ Constructor and Destructor
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Horizontal-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Horizontal-members.html index 89449cfb..8afe4ded 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Horizontal-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Horizontal-members.html @@ -60,40 +60,39 @@ $(function() { getDxSource() constHurricane::Horizontalinline getDxTarget() constHurricane::Horizontalinline getHalfWidth() constHurricane::Segmentinline - getId() constHurricane::Entityinline - getIsUnderFilter(const Box &area)Hurricane::Componentstatic - getNet() constHurricane::Componentinline - getOppositeAnchor(Component *anchor) constHurricane::Segment - getOppositeHook(const Hook *hook) constHurricane::Segment - getPosition() constHurricane::Componentinlinevirtual - getProperties() constHurricane::DBo - getProperty(const Name &) constHurricane::DBo - getRubber() constHurricane::Componentinline - getSlaveComponents() constHurricane::Component - getSource() constHurricane::Segment - getSourceHook()Hurricane::Segmentinline - getSourcePosition() constHurricane::Segmentvirtual - getTarget() constHurricane::Segment - getTargetHook()Hurricane::Segmentinline - getTargetPosition() constHurricane::Segmentvirtual - getWidth() constHurricane::Segmentinline - hasProperty() constHurricane::DBoinline - Inherit typedefHurricane::Horizontal - invert()Hurricane::Segment - isMaterialized() constHurricane::Goinline - put(Property *)Hurricane::DBo - remove(Property *)Hurricane::DBo - removeProperty(const Name &)Hurricane::DBo - setLayer(const Layer *layer)Hurricane::Segment - setWidth(const DbU::Unit &width)Hurricane::Segment - setY(const DbU::Unit &y)Hurricane::Horizontal - translate(const DbU::Unit &dy)Hurricane::Horizontal + getIsUnderFilter(const Box &area)Hurricane::Componentstatic + getNet() constHurricane::Componentinline + getOppositeAnchor(Component *anchor) constHurricane::Segment + getOppositeHook(const Hook *hook) constHurricane::Segment + getPosition() constHurricane::Componentinlinevirtual + getProperties() constHurricane::DBo + getProperty(const Name &) constHurricane::DBo + getRubber() constHurricane::Componentinline + getSlaveComponents() constHurricane::Component + getSource() constHurricane::Segment + getSourceHook()Hurricane::Segmentinline + getSourcePosition() constHurricane::Segmentvirtual + getTarget() constHurricane::Segment + getTargetHook()Hurricane::Segmentinline + getTargetPosition() constHurricane::Segmentvirtual + getWidth() constHurricane::Segmentinline + hasProperty() constHurricane::DBoinline + Inherit typedefHurricane::Horizontal + invert()Hurricane::Segment + isMaterialized() constHurricane::Goinline + put(Property *)Hurricane::DBo + remove(Property *)Hurricane::DBo + removeProperty(const Name &)Hurricane::DBo + setLayer(const Layer *layer)Hurricane::Segment + setWidth(const DbU::Unit &width)Hurricane::Segment + setY(const DbU::Unit &y)Hurricane::Horizontal + translate(const DbU::Unit &dy)Hurricane::Horizontal

        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Horizontal.html b/hurricane/doc/hurricane/html/classHurricane_1_1Horizontal.html index d8dc23c0..2d061005 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Horizontal.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Horizontal.html @@ -131,9 +131,6 @@ Public Member Functions - Public Member Functions inherited from Hurricane::Go bool isMaterialized () const   -- Public Member Functions inherited from Hurricane::Entity -unsigned int getId () const -  - Public Member Functions inherited from Hurricane::DBo virtual void destroy ()   @@ -422,7 +419,7 @@ Introduction
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1HyperNet-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1HyperNet-members.html index e9964e88..0c11d250 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1HyperNet-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1HyperNet-members.html @@ -58,7 +58,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1HyperNet.html b/hurricane/doc/hurricane/html/classHurricane_1_1HyperNet.html index fd7d258b..d45e5388 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1HyperNet.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1HyperNet.html @@ -272,7 +272,7 @@ Introduction
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Initializer-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Initializer-members.html index 66cb28ac..ec371ea0 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Initializer-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Initializer-members.html @@ -53,7 +53,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Initializer.html b/hurricane/doc/hurricane/html/classHurricane_1_1Initializer.html index f059ecb0..956fdd75 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Initializer.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Initializer.html @@ -105,7 +105,7 @@ template<typename T >
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Instance-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Instance-members.html index 166cf6f4..6d092828 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Instance-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Instance-members.html @@ -57,33 +57,32 @@ $(function() { getAbutmentBox() constHurricane::Instance getClone(Cell *cloneCell) constHurricane::Instance getConnectedPlugs() constHurricane::Instance - getId() constHurricane::Entityinline - getIsUnderFilter(const Box &area)Hurricane::Instancestatic - getMasterCell() constHurricane::Instanceinline - getName() constHurricane::Instanceinline - getPath(const Path &tailPath=Path()) constHurricane::Instance - getPlug(const Net *masterNet) constHurricane::Instanceinline - getPlugs() constHurricane::Instanceinline - getProperties() constHurricane::DBo - getProperty(const Name &) constHurricane::DBo - getTransformation() constHurricane::Instanceinline - getUnconnectedPlugs() constHurricane::Instance - hasProperty() constHurricane::DBoinline - Inherit typedefHurricane::Instance - isMaterialized() constHurricane::Goinline - put(Property *)Hurricane::DBo - remove(Property *)Hurricane::DBo - removeProperty(const Name &)Hurricane::DBo - setMasterCell(Cell *masterCell, bool secureFlag=true)Hurricane::Instance - setName(const Name &name)Hurricane::Instance - setTransformation(const Transformation &transformation)Hurricane::Instance - uniquify()Hurricane::Instance + getIsUnderFilter(const Box &area)Hurricane::Instancestatic + getMasterCell() constHurricane::Instanceinline + getName() constHurricane::Instanceinline + getPath(const Path &tailPath=Path()) constHurricane::Instance + getPlug(const Net *masterNet) constHurricane::Instanceinline + getPlugs() constHurricane::Instanceinline + getProperties() constHurricane::DBo + getProperty(const Name &) constHurricane::DBo + getTransformation() constHurricane::Instanceinline + getUnconnectedPlugs() constHurricane::Instance + hasProperty() constHurricane::DBoinline + Inherit typedefHurricane::Instance + isMaterialized() constHurricane::Goinline + put(Property *)Hurricane::DBo + remove(Property *)Hurricane::DBo + removeProperty(const Name &)Hurricane::DBo + setMasterCell(Cell *masterCell, bool secureFlag=true)Hurricane::Instance + setName(const Name &name)Hurricane::Instance + setTransformation(const Transformation &transformation)Hurricane::Instance + uniquify()Hurricane::Instance

        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Instance.html b/hurricane/doc/hurricane/html/classHurricane_1_1Instance.html index 92040ae8..45cc3465 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Instance.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Instance.html @@ -108,9 +108,6 @@ Public Member Functions - Public Member Functions inherited from Hurricane::Go bool isMaterialized () const   -- Public Member Functions inherited from Hurricane::Entity -unsigned int getId () const -  - Public Member Functions inherited from Hurricane::DBo virtual void destroy ()   @@ -649,7 +646,7 @@ Instance Destruction
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Instance_1_1PlacementStatus-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Instance_1_1PlacementStatus-members.html index c92e960b..6313bb73 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Instance_1_1PlacementStatus-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Instance_1_1PlacementStatus-members.html @@ -60,7 +60,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Instance_1_1PlacementStatus.html b/hurricane/doc/hurricane/html/classHurricane_1_1Instance_1_1PlacementStatus.html index 4b72191f..acfb5ac5 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Instance_1_1PlacementStatus.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Instance_1_1PlacementStatus.html @@ -209,7 +209,7 @@ Instance Placement Status
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Interruption-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Interruption-members.html index 4c376ea1..e1cddc74 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Interruption-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Interruption-members.html @@ -61,7 +61,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Interruption.html b/hurricane/doc/hurricane/html/classHurricane_1_1Interruption.html index b9e8fbf2..d746a624 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Interruption.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Interruption.html @@ -188,7 +188,7 @@ Introduction
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Interval-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Interval-members.html index 774e00a2..11ac5bc5 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Interval-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Interval-members.html @@ -47,39 +47,39 @@ $(function() {

        This is the complete list of members for Hurricane::Interval, including all inherited members.

        - - + + - + - + - + - + - + - + - - - - - - + + + + + +
        contains(const DbU::Unit &v) constHurricane::Interval
        contains(const Interval &interval) constHurricane::Interval
        contains(const DbU::Unit &) constHurricane::Interval
        contains(const Interval &) constHurricane::Interval
        getCenter() constHurricane::Intervalinline
        getHalfSize() constHurricane::Intervalinline
        getIntersection(const Interval &interval) constHurricane::Interval
        getIntersection(const Interval &) constHurricane::Interval
        getSize() constHurricane::Intervalinline
        getUnion(const Interval &interval) constHurricane::Interval
        getUnion(const Interval &) constHurricane::Interval
        getVMax() constHurricane::Intervalinline
        getVMin() constHurricane::Intervalinline
        inflate(const DbU::Unit &dv)Hurricane::Interval
        inflate(const DbU::Unit &dvMin, const DbU::Unit &dvMax)Hurricane::Interval
        intersect(const Interval &interval) constHurricane::Interval
        intersect(const Interval &, bool strict=false) constHurricane::Interval
        intersection(const DbU::Unit &vMin, const DbU::Unit &vMax)Hurricane::Interval
        intersection(const Interval &interval)Hurricane::Interval
        intersection(const Interval &)Hurricane::Interval
        Interval(bool makeEmpty=true)Hurricane::Interval
        Interval(const DbU::Unit &v)Hurricane::Interval
        Interval(const DbU::Unit &)Hurricane::Interval
        Interval(const DbU::Unit &v1, const DbU::Unit &v2)Hurricane::Interval
        Interval(const Interval &interval)Hurricane::Interval
        Interval(const Interval &)Hurricane::Interval
        isEmpty() constHurricane::Intervalinline
        isPonctual() constHurricane::Intervalinline
        makeEmpty()Hurricane::Interval
        merge(const DbU::Unit &v)Hurricane::Interval
        merge(const Interval &interval)Hurricane::Interval
        operator!=(const Interval &interval) constHurricane::Interval
        operator=(const Interval &interval)Hurricane::Interval
        operator==(const Interval &interval) constHurricane::Interval
        translate(const DbU::Unit &dv)Hurricane::Interval
        merge(const DbU::Unit &)Hurricane::Interval
        merge(const Interval &)Hurricane::Interval
        operator!=(const Interval &) constHurricane::Interval
        operator=(const Interval &)Hurricane::Interval
        operator==(const Interval &) constHurricane::Interval
        translate(const DbU::Unit &)Hurricane::Interval


        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Interval.html b/hurricane/doc/hurricane/html/classHurricane_1_1Interval.html index 72bcbaa3..dec1e3fe 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Interval.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Interval.html @@ -55,18 +55,18 @@ $(function() { Public Member Functions  Interval (bool makeEmpty=true)   - Interval (const DbU::Unit &v) -  + Interval (const DbU::Unit &) +   Interval (const DbU::Unit &v1, const DbU::Unit &v2)   - Interval (const Interval &interval) -  -Intervaloperator= (const Interval &interval) -  -bool operator== (const Interval &interval) const -  -bool operator!= (const Interval &interval) const -  + Interval (const Interval &) +  +Intervaloperator= (const Interval &) +  +bool operator== (const Interval &) const +  +bool operator!= (const Interval &) const +  const DbU::UnitgetVMin () const   const DbU::UnitgetVMax () const @@ -77,36 +77,36 @@ Public Member Functions   DbU::Unit getHalfSize () const   -Interval getUnion (const Interval &interval) const -  -Interval getIntersection (const Interval &interval) const -  +Interval getUnion (const Interval &) const +  +Interval getIntersection (const Interval &) const +  bool isEmpty () const   bool isPonctual () const   -bool contains (const DbU::Unit &v) const -  -bool contains (const Interval &interval) const -  -bool intersect (const Interval &interval) const -  +bool contains (const DbU::Unit &) const +  +bool contains (const Interval &) const +  +bool intersect (const Interval &, bool strict=false) const +  IntervalmakeEmpty ()   Intervalinflate (const DbU::Unit &dv)   Intervalinflate (const DbU::Unit &dvMin, const DbU::Unit &dvMax)   -Intervalmerge (const DbU::Unit &v) -  -Intervalmerge (const Interval &interval) -  +Intervalmerge (const DbU::Unit &) +  +Intervalmerge (const Interval &) +  Intervalintersection (const DbU::Unit &vMin, const DbU::Unit &vMax)   -Intervalintersection (const Interval &interval) -  -Intervaltranslate (const DbU::Unit &dv) -  +Intervalintersection (const Interval &) +  +Intervaltranslate (const DbU::Unit &) + 

        Detailed Description

        Interval description (API)

        @@ -136,8 +136,8 @@ Remark
        - -

        ◆ Interval() [2/4]

        + +

        ◆ Interval() [2/4]

        @@ -184,8 +184,8 @@ Remark
        - -

        ◆ Interval() [4/4]

        + +

        ◆ Interval() [4/4]

        @@ -204,8 +204,8 @@ Remark

        Member Function Documentation

        - -

        ◆ operator=()

        + +

        ◆ operator=()

        @@ -223,8 +223,8 @@ Remark
        - -

        ◆ operator==()

        + +

        ◆ operator==()

        @@ -243,8 +243,8 @@ Remark
        - -

        ◆ operator!=()

        + +

        ◆ operator!=()

        @@ -398,8 +398,8 @@ Remark
        - -

        ◆ getUnion()

        + +

        ◆ getUnion()

        @@ -417,8 +417,8 @@ Remark
        - -

        ◆ getIntersection()

        + +

        ◆ getIntersection()

        @@ -490,8 +490,8 @@ Remark
        - -

        ◆ contains() [1/2]

        + +

        ◆ contains() [1/2]

        @@ -509,8 +509,8 @@ Remark
        - -

        ◆ contains() [2/2]

        + +

        ◆ contains() [2/2]

        @@ -528,8 +528,8 @@ Remark
        - -

        ◆ intersect()

        + +

        ◆ intersect()

        @@ -538,8 +538,18 @@ Remark bool Hurricane::Interval::intersect ( const Interval &  - interval) - const + , + + + + + bool  + strict = false  + + + + ) + const
        @@ -613,8 +623,8 @@ Remark
        - -

        ◆ merge() [1/2]

        + +

        ◆ merge() [1/2]

        @@ -632,8 +642,8 @@ Remark
        - -

        ◆ merge() [2/2]

        + +

        ◆ merge() [2/2]

        @@ -680,8 +690,8 @@ Remark
        - -

        ◆ intersection() [2/2]

        + +

        ◆ intersection() [2/2]

        @@ -699,8 +709,8 @@ Remark
        - -

        ◆ translate()

        + +

        ◆ translate()

        @@ -727,7 +737,7 @@ Remark
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1JsonObject-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1JsonObject-members.html index 0a964566..b48ea94f 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1JsonObject-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1JsonObject-members.html @@ -76,7 +76,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1JsonObject.html b/hurricane/doc/hurricane/html/classHurricane_1_1JsonObject.html index 664bbb2a..054eb925 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1JsonObject.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1JsonObject.html @@ -917,7 +917,7 @@ template<typename T >

        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1JsonStack-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1JsonStack-members.html index 70e5c518..1e5837e9 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1JsonStack-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1JsonStack-members.html @@ -65,7 +65,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1JsonStack.html b/hurricane/doc/hurricane/html/classHurricane_1_1JsonStack.html index 0316c3fe..7927baac 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1JsonStack.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1JsonStack.html @@ -528,7 +528,7 @@ template<typename T >

        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Layer-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Layer-members.html index 4403c377..e84615e2 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Layer-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Layer-members.html @@ -85,7 +85,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Layer.html b/hurricane/doc/hurricane/html/classHurricane_1_1Layer.html index 101447da..8fb78f49 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Layer.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Layer.html @@ -834,7 +834,7 @@ Looking Up a Layer from a Mask
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Library-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Library-members.html index 26ab5d04..72f5e759 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Library-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Library-members.html @@ -71,7 +71,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Library.html b/hurricane/doc/hurricane/html/classHurricane_1_1Library.html index 38645ad5..46700219 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Library.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Library.html @@ -421,7 +421,7 @@ Introduction
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1ListCollection-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1ListCollection-members.html index 5f3a487f..a3a78ed6 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1ListCollection-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1ListCollection-members.html @@ -58,7 +58,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1ListCollection.html b/hurricane/doc/hurricane/html/classHurricane_1_1ListCollection.html index 3c8b9780..6cf59aeb 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1ListCollection.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1ListCollection.html @@ -120,7 +120,7 @@ template<class Element >
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Locator-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Locator-members.html index 82569a04..3b2b581e 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Locator-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Locator-members.html @@ -56,7 +56,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Locator.html b/hurricane/doc/hurricane/html/classHurricane_1_1Locator.html index 5aa0e001..b8ce4f73 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Locator.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Locator.html @@ -211,7 +211,7 @@ template<class Type>
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1MapCollection-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1MapCollection-members.html index 25b70d8d..aadb17a9 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1MapCollection-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1MapCollection-members.html @@ -58,7 +58,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1MapCollection.html b/hurricane/doc/hurricane/html/classHurricane_1_1MapCollection.html index f9aa7a08..618c5227 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1MapCollection.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1MapCollection.html @@ -120,7 +120,7 @@ template<class Key , class Element , class Compare = less<Key>> - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Name-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Name-members.html index 11e134c2..cc35a910 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Name-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Name-members.html @@ -66,7 +66,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Name.html b/hurricane/doc/hurricane/html/classHurricane_1_1Name.html index ac029eec..a362f2dd 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Name.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Name.html @@ -363,7 +363,7 @@ Introduction
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Net-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Net-members.html index de0d234e..8227a266 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Net-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Net-members.html @@ -58,53 +58,52 @@ $(function() { getContacts() constHurricane::Net getDirection() constHurricane::Netinline getHorizontals() constHurricane::Net - getId() constHurricane::Entityinline - getIsClockFilter()Hurricane::Netstatic - getIsExternalFilter()Hurricane::Netstatic - getIsGlobalFilter()Hurricane::Netstatic - getIsInternalFilter()Hurricane::Netstatic - getIsSupplyFilter()Hurricane::Netstatic - getName() constHurricane::Netinline - getPads() constHurricane::Net - getPlugs() constHurricane::Net - getPosition() constHurricane::Netinline - getProperties() constHurricane::DBo - getProperty(const Name &) constHurricane::DBo - getRoutingPads() constHurricane::Net - getRubbers() constHurricane::Netinline - getSegments() constHurricane::Net - getSlavePlugs() constHurricane::Net - getType() constHurricane::Netinline - getUnconnectedSlavePlugs() constHurricane::Net - getVerticals() constHurricane::Net - getX() constHurricane::Netinline - getY() constHurricane::Netinline - hasProperty() constHurricane::DBoinline - Inherit typedefHurricane::Net - isClock() constHurricane::Netinline - isExternal() constHurricane::Netinline - isGlobal() constHurricane::Netinline - isLogical() constHurricane::Netinline - isSupply() constHurricane::Netinline - materialize()Hurricane::Net - merge(Net *net)Hurricane::Net - put(Property *)Hurricane::DBo - remove(Property *)Hurricane::DBo - removeProperty(const Name &)Hurricane::DBo - setArity(const Arity &arity)Hurricane::Net - setDirection(const Direction &direction)Hurricane::Net - setExternal(bool isExternal)Hurricane::Net - setGlobal(bool isGlobal)Hurricane::Net - setName(Name name)Hurricane::Net - setPosition(const Point &position)Hurricane::Net - setType(const Type &type)Hurricane::Net - unmaterialize()Hurricane::Net + getIsClockFilter()Hurricane::Netstatic + getIsExternalFilter()Hurricane::Netstatic + getIsGlobalFilter()Hurricane::Netstatic + getIsInternalFilter()Hurricane::Netstatic + getIsSupplyFilter()Hurricane::Netstatic + getName() constHurricane::Netinline + getPads() constHurricane::Net + getPlugs() constHurricane::Net + getPosition() constHurricane::Netinline + getProperties() constHurricane::DBo + getProperty(const Name &) constHurricane::DBo + getRoutingPads() constHurricane::Net + getRubbers() constHurricane::Netinline + getSegments() constHurricane::Net + getSlavePlugs() constHurricane::Net + getType() constHurricane::Netinline + getUnconnectedSlavePlugs() constHurricane::Net + getVerticals() constHurricane::Net + getX() constHurricane::Netinline + getY() constHurricane::Netinline + hasProperty() constHurricane::DBoinline + Inherit typedefHurricane::Net + isClock() constHurricane::Netinline + isExternal() constHurricane::Netinline + isGlobal() constHurricane::Netinline + isLogical() constHurricane::Netinline + isSupply() constHurricane::Netinline + materialize()Hurricane::Net + merge(Net *net)Hurricane::Net + put(Property *)Hurricane::DBo + remove(Property *)Hurricane::DBo + removeProperty(const Name &)Hurricane::DBo + setArity(const Arity &arity)Hurricane::Net + setDirection(const Direction &direction)Hurricane::Net + setExternal(bool isExternal)Hurricane::Net + setGlobal(bool isGlobal)Hurricane::Net + setName(Name name)Hurricane::Net + setPosition(const Point &position)Hurricane::Net + setType(const Type &type)Hurricane::Net + unmaterialize()Hurricane::Net

        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Net.html b/hurricane/doc/hurricane/html/classHurricane_1_1Net.html index bc59c14d..3916b988 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Net.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Net.html @@ -149,9 +149,6 @@ Public Member Functions   NetgetClone (Cell *cloneCell)   -- Public Member Functions inherited from Hurricane::Entity -unsigned int getId () const -  - Public Member Functions inherited from Hurricane::DBo virtual void destroy ()   @@ -1170,7 +1167,7 @@ Predefined filters
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Net_1_1Direction-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Net_1_1Direction-members.html index 49e43909..cbd9c0c4 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Net_1_1Direction-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Net_1_1Direction-members.html @@ -66,7 +66,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Net_1_1Direction.html b/hurricane/doc/hurricane/html/classHurricane_1_1Net_1_1Direction.html index 1b5dc1ae..64b98c6b 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Net_1_1Direction.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Net_1_1Direction.html @@ -135,7 +135,7 @@ Public Types
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Net_1_1Type-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Net_1_1Type-members.html index 65e23ba9..89c2ebc3 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Net_1_1Type-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Net_1_1Type-members.html @@ -58,7 +58,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Net_1_1Type.html b/hurricane/doc/hurricane/html/classHurricane_1_1Net_1_1Type.html index 81a5a390..8539e072 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Net_1_1Type.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Net_1_1Type.html @@ -103,7 +103,7 @@ Public Types
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1NotFilter-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1NotFilter-members.html index 7277c459..116d6436 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1NotFilter-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1NotFilter-members.html @@ -55,7 +55,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1NotFilter.html b/hurricane/doc/hurricane/html/classHurricane_1_1NotFilter.html index e5e5adc9..356fb13c 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1NotFilter.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1NotFilter.html @@ -146,7 +146,7 @@ template<class Type>
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Occurrence-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Occurrence-members.html index b49b65c9..7e9278b4 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Occurrence-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Occurrence-members.html @@ -72,7 +72,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Occurrence.html b/hurricane/doc/hurricane/html/classHurricane_1_1Occurrence.html index 128e258c..a39c6682 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Occurrence.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Occurrence.html @@ -538,7 +538,7 @@ Remarks
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Pad-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Pad-members.html index 2f1e4069..8b7836d1 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Pad-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Pad-members.html @@ -56,26 +56,25 @@ $(function() { getBodyHook()Hurricane::Componentinline getConnexComponents() constHurricane::Component getHooks() constHurricane::Componentvirtual - getId() constHurricane::Entityinline - getIsUnderFilter(const Box &area)Hurricane::Componentstatic - getNet() constHurricane::Componentinline - getPosition() constHurricane::Componentinlinevirtual - getProperties() constHurricane::DBo - getProperty(const Name &) constHurricane::DBo - getRubber() constHurricane::Componentinline - getSlaveComponents() constHurricane::Component - hasProperty() constHurricane::DBoinline - Inherit typedefHurricane::Pad - isMaterialized() constHurricane::Goinline - put(Property *)Hurricane::DBo - remove(Property *)Hurricane::DBo - removeProperty(const Name &)Hurricane::DBo + getIsUnderFilter(const Box &area)Hurricane::Componentstatic + getNet() constHurricane::Componentinline + getPosition() constHurricane::Componentinlinevirtual + getProperties() constHurricane::DBo + getProperty(const Name &) constHurricane::DBo + getRubber() constHurricane::Componentinline + getSlaveComponents() constHurricane::Component + hasProperty() constHurricane::DBoinline + Inherit typedefHurricane::Pad + isMaterialized() constHurricane::Goinline + put(Property *)Hurricane::DBo + remove(Property *)Hurricane::DBo + removeProperty(const Name &)Hurricane::DBo

        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Pad.html b/hurricane/doc/hurricane/html/classHurricane_1_1Pad.html index acb39f61..8410a567 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Pad.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Pad.html @@ -106,9 +106,6 @@ Additional Inherited Members - Public Member Functions inherited from Hurricane::Go bool isMaterialized () const   -- Public Member Functions inherited from Hurricane::Entity -unsigned int getId () const -  - Public Member Functions inherited from Hurricane::DBo virtual void destroy ()   @@ -201,7 +198,7 @@ Introduction
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Path-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Path-members.html index 92d8aa13..30a2a893 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Path-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Path-members.html @@ -75,7 +75,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Path.html b/hurricane/doc/hurricane/html/classHurricane_1_1Path.html index 8c87a5d6..af23c421 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Path.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Path.html @@ -605,7 +605,7 @@ Remarks
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Pin-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Pin-members.html index 7d7b7f6d..f226d4fc 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Pin-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Pin-members.html @@ -63,36 +63,35 @@ $(function() { getHalfHeight() constHurricane::Contactinline getHalfWidth() constHurricane::Contactinline getHeight() constHurricane::Contactinline - getId() constHurricane::Entityinline - getIsUnderFilter(const Box &area)Hurricane::Componentstatic - getNet() constHurricane::Componentinline - getProperties() constHurricane::DBo - getProperty(const Name &) constHurricane::DBo - getRubber() constHurricane::Componentinline - getSlaveComponents() constHurricane::Component - getWidth() constHurricane::Contactinline - hasProperty() constHurricane::DBoinline - isMaterialized() constHurricane::Goinline - put(Property *)Hurricane::DBo - remove(Property *)Hurricane::DBo - removeProperty(const Name &)Hurricane::DBo - setDx(const DbU::Unit &dx)Hurricane::Contact - setDy(const DbU::Unit &dy)Hurricane::Contact - setHeight(const DbU::Unit &height)Hurricane::Contact - setLayer(const Layer *layer)Hurricane::Contact - setOffset(const DbU::Unit &dx, const DbU::Unit &dy)Hurricane::Contact - setPosition(const DbU::Unit &x, const DbU::Unit &y)Hurricane::Contact - setPosition(const Point &position)Hurricane::Contact - setSizes(const DbU::Unit &width, const DbU::Unit &height)Hurricane::Contact - setWidth(const DbU::Unit &width)Hurricane::Contact - setX(const DbU::Unit &x)Hurricane::Contact - setY(const DbU::Unit &y)Hurricane::Contact + getIsUnderFilter(const Box &area)Hurricane::Componentstatic + getNet() constHurricane::Componentinline + getProperties() constHurricane::DBo + getProperty(const Name &) constHurricane::DBo + getRubber() constHurricane::Componentinline + getSlaveComponents() constHurricane::Component + getWidth() constHurricane::Contactinline + hasProperty() constHurricane::DBoinline + isMaterialized() constHurricane::Goinline + put(Property *)Hurricane::DBo + remove(Property *)Hurricane::DBo + removeProperty(const Name &)Hurricane::DBo + setDx(const DbU::Unit &dx)Hurricane::Contact + setDy(const DbU::Unit &dy)Hurricane::Contact + setHeight(const DbU::Unit &height)Hurricane::Contact + setLayer(const Layer *layer)Hurricane::Contact + setOffset(const DbU::Unit &dx, const DbU::Unit &dy)Hurricane::Contact + setPosition(const DbU::Unit &x, const DbU::Unit &y)Hurricane::Contact + setPosition(const Point &position)Hurricane::Contact + setSizes(const DbU::Unit &width, const DbU::Unit &height)Hurricane::Contact + setWidth(const DbU::Unit &width)Hurricane::Contact + setX(const DbU::Unit &x)Hurricane::Contact + setY(const DbU::Unit &y)Hurricane::Contact

        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Pin.html b/hurricane/doc/hurricane/html/classHurricane_1_1Pin.html index 05e389b8..a9cd588c 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Pin.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Pin.html @@ -123,9 +123,6 @@ Additional Inherited Members - Public Member Functions inherited from Hurricane::Go bool isMaterialized () const   -- Public Member Functions inherited from Hurricane::Entity -unsigned int getId () const -  - Public Member Functions inherited from Hurricane::DBo virtual void destroy ()   @@ -169,7 +166,7 @@ Additional Inherited Members
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Plug-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Plug-members.html index ddb7dba8..91629fee 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Plug-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Plug-members.html @@ -54,31 +54,30 @@ $(function() { getBodyHook()Hurricane::Componentinline getConnexComponents() constHurricane::Component getHooks() constHurricane::Componentvirtual - getId() constHurricane::Entityinline - getInstance() constHurricane::Pluginline - getIsConnectedFilter()Hurricane::Plugstatic - getIsUnconnectedFilter()Hurricane::Plugstatic - getIsUnderFilter(const Box &area)Hurricane::Componentstatic - getMasterNet() constHurricane::Pluginline - getNet() constHurricane::Componentinline - getProperties() constHurricane::DBo - getProperty(const Name &) constHurricane::DBo - getRubber() constHurricane::Componentinline - getSlaveComponents() constHurricane::Component - hasProperty() constHurricane::DBoinline - Inherit typedefHurricane::Plug - isConnected() constHurricane::Pluginline - isMaterialized() constHurricane::Goinline - put(Property *)Hurricane::DBo - remove(Property *)Hurricane::DBo - removeProperty(const Name &)Hurricane::DBo - setNet(Net *net)Hurricane::Plug + getInstance() constHurricane::Pluginline + getIsConnectedFilter()Hurricane::Plugstatic + getIsUnconnectedFilter()Hurricane::Plugstatic + getIsUnderFilter(const Box &area)Hurricane::Componentstatic + getMasterNet() constHurricane::Pluginline + getNet() constHurricane::Componentinline + getProperties() constHurricane::DBo + getProperty(const Name &) constHurricane::DBo + getRubber() constHurricane::Componentinline + getSlaveComponents() constHurricane::Component + hasProperty() constHurricane::DBoinline + Inherit typedefHurricane::Plug + isConnected() constHurricane::Pluginline + isMaterialized() constHurricane::Goinline + put(Property *)Hurricane::DBo + remove(Property *)Hurricane::DBo + removeProperty(const Name &)Hurricane::DBo + setNet(Net *net)Hurricane::Plug

        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Plug.html b/hurricane/doc/hurricane/html/classHurricane_1_1Plug.html index 6b5f71c8..0f28849f 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Plug.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Plug.html @@ -98,9 +98,6 @@ Public Member Functions - Public Member Functions inherited from Hurricane::Go bool isMaterialized () const   -- Public Member Functions inherited from Hurricane::Entity -unsigned int getId () const -  - Public Member Functions inherited from Hurricane::DBo PropertygetProperty (const Name &) const   @@ -330,7 +327,7 @@ Predefined filters
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Point-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Point-members.html index efa63c78..f0896b83 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Point-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Point-members.html @@ -61,7 +61,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Point.html b/hurricane/doc/hurricane/html/classHurricane_1_1Point.html index f185ab9a..6c7c1ca0 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Point.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Point.html @@ -291,7 +291,7 @@ Public Member Functions
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Polygon-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Polygon-members.html index 0c8b9b73..01b61048 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Polygon-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Polygon-members.html @@ -56,27 +56,26 @@ $(function() { getBodyHook()Hurricane::Componentinline getConnexComponents() constHurricane::Component getHooks() constHurricane::Componentvirtual - getId() constHurricane::Entityinline - getIsUnderFilter(const Box &area)Hurricane::Componentstatic - getNet() constHurricane::Componentinline - getPosition() constHurricane::Componentinlinevirtual - getProperties() constHurricane::DBo - getProperty(const Name &) constHurricane::DBo - getRubber() constHurricane::Componentinline - getSlaveComponents() constHurricane::Component - hasProperty() constHurricane::DBoinline - Inherit typedefHurricane::Component - isMaterialized() constHurricane::Goinline - put(Property *)Hurricane::DBo - remove(Property *)Hurricane::DBo - removeProperty(const Name &)Hurricane::DBo - Super typedefHurricane::Polygon + getIsUnderFilter(const Box &area)Hurricane::Componentstatic + getNet() constHurricane::Componentinline + getPosition() constHurricane::Componentinlinevirtual + getProperties() constHurricane::DBo + getProperty(const Name &) constHurricane::DBo + getRubber() constHurricane::Componentinline + getSlaveComponents() constHurricane::Component + hasProperty() constHurricane::DBoinline + Inherit typedefHurricane::Component + isMaterialized() constHurricane::Goinline + put(Property *)Hurricane::DBo + remove(Property *)Hurricane::DBo + removeProperty(const Name &)Hurricane::DBo + Super typedefHurricane::Polygon

        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Polygon.html b/hurricane/doc/hurricane/html/classHurricane_1_1Polygon.html index 88cc956d..71ff9083 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Polygon.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Polygon.html @@ -106,9 +106,6 @@ Additional Inherited Members - Public Member Functions inherited from Hurricane::Go bool isMaterialized () const   -- Public Member Functions inherited from Hurricane::Entity -unsigned int getId () const -  - Public Member Functions inherited from Hurricane::DBo virtual void destroy ()   @@ -202,7 +199,7 @@ Introduction
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1PrivateProperty-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1PrivateProperty-members.html index c7c1b64b..69c58e78 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1PrivateProperty-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1PrivateProperty-members.html @@ -55,7 +55,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1PrivateProperty.html b/hurricane/doc/hurricane/html/classHurricane_1_1PrivateProperty.html index 1e458193..3248895c 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1PrivateProperty.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1PrivateProperty.html @@ -121,7 +121,7 @@ Destruction
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Property-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Property-members.html index 54e8f89d..91aee7aa 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Property-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Property-members.html @@ -56,7 +56,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Property.html b/hurricane/doc/hurricane/html/classHurricane_1_1Property.html index bfd08a79..4c57e37d 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Property.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Property.html @@ -258,7 +258,7 @@ Remarks
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1QuadTree-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1QuadTree-members.html index d3cd0bbf..efae8213 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1QuadTree-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1QuadTree-members.html @@ -60,7 +60,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1QuadTree.html b/hurricane/doc/hurricane/html/classHurricane_1_1QuadTree.html index 20b9a4b7..a10296ec 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1QuadTree.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1QuadTree.html @@ -250,7 +250,7 @@ Introduction
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Quark-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Quark-members.html index 3cb36850..65aea7fc 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Quark-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Quark-members.html @@ -61,7 +61,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Quark.html b/hurricane/doc/hurricane/html/classHurricane_1_1Quark.html index 064edcfc..3c51e04f 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Quark.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Quark.html @@ -136,7 +136,7 @@ Example
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Query-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Query-members.html index b0719f92..a6776c07 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Query-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Query-members.html @@ -91,7 +91,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Query.html b/hurricane/doc/hurricane/html/classHurricane_1_1Query.html index ea72af65..5310e77b 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Query.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Query.html @@ -1050,7 +1050,7 @@ secQueryParameters
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1RegularLayer-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1RegularLayer-members.html index 83a14fd7..ef6bec6a 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1RegularLayer-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1RegularLayer-members.html @@ -81,7 +81,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1RegularLayer.html b/hurricane/doc/hurricane/html/classHurricane_1_1RegularLayer.html index 984926e0..47fd3e41 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1RegularLayer.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1RegularLayer.html @@ -218,7 +218,7 @@ RegularLayer::getOpposite()
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Relation-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Relation-members.html index 317e4927..ac6a7c32 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Relation-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Relation-members.html @@ -54,7 +54,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Relation.html b/hurricane/doc/hurricane/html/classHurricane_1_1Relation.html index 197d5659..098850b1 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Relation.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Relation.html @@ -78,7 +78,7 @@ Additional Inherited Members
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1RoutingPad-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1RoutingPad-members.html index 7ee33987..49178b4a 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1RoutingPad-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1RoutingPad-members.html @@ -62,44 +62,43 @@ $(function() { getCenter() constHurricane::RoutingPadvirtual getConnexComponents() constHurricane::Component getHooks() constHurricane::Componentvirtual - getId() constHurricane::Entityinline - getIsUnderFilter(const Box &area)Hurricane::Componentstatic - getLayer() constHurricane::RoutingPadvirtual - getNet() constHurricane::Componentinline - getOccurrence() constHurricane::RoutingPadinline - getPlugOccurrence()Hurricane::RoutingPad - getProperties() constHurricane::DBo - getProperty(const Name &) constHurricane::DBo - getRubber() constHurricane::Componentinline - getSlaveComponents() constHurricane::Component - getSourcePosition() constHurricane::RoutingPad - getSourceX() constHurricane::RoutingPad - getSourceY() constHurricane::RoutingPad - getTargetPosition() constHurricane::RoutingPad - getTargetX() constHurricane::RoutingPad - getTargetY() constHurricane::RoutingPad - getX() constHurricane::RoutingPadvirtual - getY() constHurricane::RoutingPadvirtual - hasProperty() constHurricane::DBoinline - HighestLayer enum valueHurricane::RoutingPad - Inherit typedefHurricane::RoutingPad - isMaterialized() constHurricane::Goinline - isPlacedOccurrence(unsigned int flags) constHurricane::RoutingPad - LowestLayer enum valueHurricane::RoutingPad - put(Property *)Hurricane::DBo - remove(Property *)Hurricane::DBo - removeProperty(const Name &)Hurricane::DBo - restorePlugOccurrence()Hurricane::RoutingPad - setExternalComponent(Component *)Hurricane::RoutingPad - setOnBestComponent(unsigned int flags)Hurricane::RoutingPad - ShowWarning enum valueHurricane::RoutingPad - translate(const DbU::Unit &dx, const DbU::Unit &dy)Hurricane::RoutingPadvirtual + getIsUnderFilter(const Box &area)Hurricane::Componentstatic + getLayer() constHurricane::RoutingPadvirtual + getNet() constHurricane::Componentinline + getOccurrence() constHurricane::RoutingPadinline + getPlugOccurrence()Hurricane::RoutingPad + getProperties() constHurricane::DBo + getProperty(const Name &) constHurricane::DBo + getRubber() constHurricane::Componentinline + getSlaveComponents() constHurricane::Component + getSourcePosition() constHurricane::RoutingPad + getSourceX() constHurricane::RoutingPad + getSourceY() constHurricane::RoutingPad + getTargetPosition() constHurricane::RoutingPad + getTargetX() constHurricane::RoutingPad + getTargetY() constHurricane::RoutingPad + getX() constHurricane::RoutingPadvirtual + getY() constHurricane::RoutingPadvirtual + hasProperty() constHurricane::DBoinline + HighestLayer enum valueHurricane::RoutingPad + Inherit typedefHurricane::RoutingPad + isMaterialized() constHurricane::Goinline + isPlacedOccurrence(unsigned int flags) constHurricane::RoutingPad + LowestLayer enum valueHurricane::RoutingPad + put(Property *)Hurricane::DBo + remove(Property *)Hurricane::DBo + removeProperty(const Name &)Hurricane::DBo + restorePlugOccurrence()Hurricane::RoutingPad + setExternalComponent(Component *)Hurricane::RoutingPad + setOnBestComponent(unsigned int flags)Hurricane::RoutingPad + ShowWarning enum valueHurricane::RoutingPad + translate(const DbU::Unit &dx, const DbU::Unit &dy)Hurricane::RoutingPadvirtual

        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1RoutingPad.html b/hurricane/doc/hurricane/html/classHurricane_1_1RoutingPad.html index 4cbdec0e..a83be79f 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1RoutingPad.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1RoutingPad.html @@ -139,9 +139,6 @@ Public Member Functions - Public Member Functions inherited from Hurricane::Go bool isMaterialized () const   -- Public Member Functions inherited from Hurricane::Entity -unsigned int getId () const -  - Public Member Functions inherited from Hurricane::DBo virtual void destroy ()   @@ -724,7 +721,7 @@ Introduction
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Rubber-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Rubber-members.html index ae41f871..e6395bab 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Rubber-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Rubber-members.html @@ -55,22 +55,21 @@ $(function() { getCount() constHurricane::Rubberinline getHook() constHurricane::Rubberinline getHooks() constHurricane::Rubber - getId() constHurricane::Entityinline - getNet() constHurricane::Rubberinline - getProperties() constHurricane::DBo - getProperty(const Name &) constHurricane::DBo - hasProperty() constHurricane::DBoinline - Inherit typedefHurricane::Rubber - isMaterialized() constHurricane::Goinline - put(Property *)Hurricane::DBo - remove(Property *)Hurricane::DBo - removeProperty(const Name &)Hurricane::DBo + getNet() constHurricane::Rubberinline + getProperties() constHurricane::DBo + getProperty(const Name &) constHurricane::DBo + hasProperty() constHurricane::DBoinline + Inherit typedefHurricane::Rubber + isMaterialized() constHurricane::Goinline + put(Property *)Hurricane::DBo + remove(Property *)Hurricane::DBo + removeProperty(const Name &)Hurricane::DBo

        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Rubber.html b/hurricane/doc/hurricane/html/classHurricane_1_1Rubber.html index fc414607..604a7270 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Rubber.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Rubber.html @@ -82,9 +82,6 @@ Public Member Functions - Public Member Functions inherited from Hurricane::Go bool isMaterialized () const   -- Public Member Functions inherited from Hurricane::Entity -unsigned int getId () const -  - Public Member Functions inherited from Hurricane::DBo PropertygetProperty (const Name &) const   @@ -260,7 +257,7 @@ Constructors & Destructors
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Segment-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Segment-members.html index cc9a381f..19972945 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Segment-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Segment-members.html @@ -57,44 +57,43 @@ $(function() { getBoundingBox(const BasicLayer *) const =0Hurricane::Componentpure virtual getConnexComponents() constHurricane::Component getHalfWidth() constHurricane::Segmentinline - getId() constHurricane::Entityinline - getIsUnderFilter(const Box &area)Hurricane::Componentstatic - getLength() const =0Hurricane::Segmentpure virtual - getNet() constHurricane::Componentinline - getOppositeAnchor(Component *anchor) constHurricane::Segment - getOppositeHook(const Hook *hook) constHurricane::Segment - getPosition() constHurricane::Componentinlinevirtual - getProperties() constHurricane::DBo - getProperty(const Name &) constHurricane::DBo - getRubber() constHurricane::Componentinline - getSlaveComponents() constHurricane::Component - getSource() constHurricane::Segment - getSourceHook()Hurricane::Segmentinline - getSourcePosition() constHurricane::Segmentvirtual - getSourceX() const =0Hurricane::Segmentpure virtual - getSourceY() const =0Hurricane::Segmentpure virtual - getTarget() constHurricane::Segment - getTargetHook()Hurricane::Segmentinline - getTargetPosition() constHurricane::Segmentvirtual - getTargetX() const =0Hurricane::Segmentpure virtual - getTargetY() const =0Hurricane::Segmentpure virtual - getWidth() constHurricane::Segmentinline - hasProperty() constHurricane::DBoinline - Inherit typedefHurricane::Segment - invert()Hurricane::Segment - isMaterialized() constHurricane::Goinline - put(Property *)Hurricane::DBo - remove(Property *)Hurricane::DBo - removeProperty(const Name &)Hurricane::DBo - setLayer(const Layer *layer)Hurricane::Segment - setWidth(const DbU::Unit &width)Hurricane::Segment - translate(const DbU::Unit &dx, const DbU::Unit &dy)=0Hurricane::Gopure virtual + getIsUnderFilter(const Box &area)Hurricane::Componentstatic + getLength() const =0Hurricane::Segmentpure virtual + getNet() constHurricane::Componentinline + getOppositeAnchor(Component *anchor) constHurricane::Segment + getOppositeHook(const Hook *hook) constHurricane::Segment + getPosition() constHurricane::Componentinlinevirtual + getProperties() constHurricane::DBo + getProperty(const Name &) constHurricane::DBo + getRubber() constHurricane::Componentinline + getSlaveComponents() constHurricane::Component + getSource() constHurricane::Segment + getSourceHook()Hurricane::Segmentinline + getSourcePosition() constHurricane::Segmentvirtual + getSourceX() const =0Hurricane::Segmentpure virtual + getSourceY() const =0Hurricane::Segmentpure virtual + getTarget() constHurricane::Segment + getTargetHook()Hurricane::Segmentinline + getTargetPosition() constHurricane::Segmentvirtual + getTargetX() const =0Hurricane::Segmentpure virtual + getTargetY() const =0Hurricane::Segmentpure virtual + getWidth() constHurricane::Segmentinline + hasProperty() constHurricane::DBoinline + Inherit typedefHurricane::Segment + invert()Hurricane::Segment + isMaterialized() constHurricane::Goinline + put(Property *)Hurricane::DBo + remove(Property *)Hurricane::DBo + removeProperty(const Name &)Hurricane::DBo + setLayer(const Layer *layer)Hurricane::Segment + setWidth(const DbU::Unit &width)Hurricane::Segment + translate(const DbU::Unit &dx, const DbU::Unit &dy)=0Hurricane::Gopure virtual

        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Segment.html b/hurricane/doc/hurricane/html/classHurricane_1_1Segment.html index 202459f1..275a446c 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Segment.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Segment.html @@ -141,9 +141,6 @@ Public Member Functions   virtual void translate (const DbU::Unit &dx, const DbU::Unit &dy)=0   -- Public Member Functions inherited from Hurricane::Entity -unsigned int getId () const -  - Public Member Functions inherited from Hurricane::DBo virtual void destroy ()   @@ -647,7 +644,7 @@ Introduction
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Segment_1_1SourceHook-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Segment_1_1SourceHook-members.html index 389ac9f4..e9df78f9 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Segment_1_1SourceHook-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Segment_1_1SourceHook-members.html @@ -63,7 +63,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Segment_1_1SourceHook.html b/hurricane/doc/hurricane/html/classHurricane_1_1Segment_1_1SourceHook.html index 4e4442f2..73d6fc36 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Segment_1_1SourceHook.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Segment_1_1SourceHook.html @@ -91,7 +91,7 @@ Additional Inherited Members
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Segment_1_1TargetHook-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Segment_1_1TargetHook-members.html index add3720d..5fbaa453 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Segment_1_1TargetHook-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Segment_1_1TargetHook-members.html @@ -63,7 +63,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Segment_1_1TargetHook.html b/hurricane/doc/hurricane/html/classHurricane_1_1Segment_1_1TargetHook.html index fd32bd74..5cb13538 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Segment_1_1TargetHook.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Segment_1_1TargetHook.html @@ -91,7 +91,7 @@ Additional Inherited Members
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1SetCollection-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1SetCollection-members.html index c2a87d9d..ebde58f5 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1SetCollection-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1SetCollection-members.html @@ -58,7 +58,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1SetCollection.html b/hurricane/doc/hurricane/html/classHurricane_1_1SetCollection.html index 4d9de149..47e4f84f 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1SetCollection.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1SetCollection.html @@ -120,7 +120,7 @@ template<class Element , class Compare = less<Element>>
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1SharedProperty-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1SharedProperty-members.html index f01bb368..239bbf35 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1SharedProperty-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1SharedProperty-members.html @@ -54,7 +54,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1SharedProperty.html b/hurricane/doc/hurricane/html/classHurricane_1_1SharedProperty.html index 18cf772b..7c7f3b84 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1SharedProperty.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1SharedProperty.html @@ -89,7 +89,7 @@ Introduction
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Slice-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Slice-members.html index df6243ec..81892c11 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Slice-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Slice-members.html @@ -58,7 +58,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Slice.html b/hurricane/doc/hurricane/html/classHurricane_1_1Slice.html index 86105234..1b25d03f 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Slice.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Slice.html @@ -233,7 +233,7 @@ Example
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1StandardPrivateProperty-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1StandardPrivateProperty-members.html index b2267750..82f8a3cd 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1StandardPrivateProperty-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1StandardPrivateProperty-members.html @@ -54,7 +54,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1StandardPrivateProperty.html b/hurricane/doc/hurricane/html/classHurricane_1_1StandardPrivateProperty.html index 584dc081..46845313 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1StandardPrivateProperty.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1StandardPrivateProperty.html @@ -84,7 +84,7 @@ Introduction
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1StandardRelation-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1StandardRelation-members.html index 47364bdf..3df93a5a 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1StandardRelation-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1StandardRelation-members.html @@ -53,7 +53,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1StandardRelation.html b/hurricane/doc/hurricane/html/classHurricane_1_1StandardRelation.html index 3fc11106..96aa39ab 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1StandardRelation.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1StandardRelation.html @@ -76,7 +76,7 @@ Additional Inherited Members
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1StandardSharedProperty-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1StandardSharedProperty-members.html index 701b0170..cbcc9693 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1StandardSharedProperty-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1StandardSharedProperty-members.html @@ -53,7 +53,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1StandardSharedProperty.html b/hurricane/doc/hurricane/html/classHurricane_1_1StandardSharedProperty.html index 2ab1399a..9b210185 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1StandardSharedProperty.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1StandardSharedProperty.html @@ -81,7 +81,7 @@ Introduction
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1SubSetCollection-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1SubSetCollection-members.html index c538876b..ab2ca9aa 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1SubSetCollection-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1SubSetCollection-members.html @@ -60,7 +60,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1SubSetCollection.html b/hurricane/doc/hurricane/html/classHurricane_1_1SubSetCollection.html index 7f3c2f87..0b5a107a 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1SubSetCollection.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1SubSetCollection.html @@ -165,7 +165,7 @@ template<class Type >
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1SubTypeCollection-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1SubTypeCollection-members.html index c622f85d..cda0f6da 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1SubTypeCollection-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1SubTypeCollection-members.html @@ -61,7 +61,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1SubTypeCollection.html b/hurricane/doc/hurricane/html/classHurricane_1_1SubTypeCollection.html index a742b67e..1b55e06b 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1SubTypeCollection.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1SubTypeCollection.html @@ -184,7 +184,7 @@ template<class Type , class SubType >
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Tabulation-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Tabulation-members.html index da3a3f99..202920b8 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Tabulation-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Tabulation-members.html @@ -60,7 +60,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Tabulation.html b/hurricane/doc/hurricane/html/classHurricane_1_1Tabulation.html index a4ba964f..2e5a7f43 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Tabulation.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Tabulation.html @@ -243,7 +243,7 @@ Remark
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Technology-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Technology-members.html index 03ad7a2a..23787c1d 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Technology-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Technology-members.html @@ -81,7 +81,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Technology.html b/hurricane/doc/hurricane/html/classHurricane_1_1Technology.html index f377f104..37b4bd5c 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Technology.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Technology.html @@ -662,7 +662,7 @@ Introduction
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Transformation-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Transformation-members.html index 5f3cec6f..e88412ba 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Transformation-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Transformation-members.html @@ -81,7 +81,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Transformation.html b/hurricane/doc/hurricane/html/classHurricane_1_1Transformation.html index 9621b27f..f5771178 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Transformation.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Transformation.html @@ -840,7 +840,7 @@ Transformers
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Transformation_1_1Orientation-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Transformation_1_1Orientation-members.html index 36151bad..dc3e97cf 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Transformation_1_1Orientation-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Transformation_1_1Orientation-members.html @@ -52,7 +52,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Transformation_1_1Orientation.html b/hurricane/doc/hurricane/html/classHurricane_1_1Transformation_1_1Orientation.html index 8b39aac9..b2d71be8 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Transformation_1_1Orientation.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Transformation_1_1Orientation.html @@ -106,7 +106,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1TransistorLayer-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1TransistorLayer-members.html index 7a8c4fb6..fbb557a2 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1TransistorLayer-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1TransistorLayer-members.html @@ -83,7 +83,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1TransistorLayer.html b/hurricane/doc/hurricane/html/classHurricane_1_1TransistorLayer.html index 85b0102d..77213338 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1TransistorLayer.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1TransistorLayer.html @@ -217,7 +217,7 @@ Additional Inherited Members
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1UpdateSession-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1UpdateSession-members.html index 01a5d6b3..6f5b50d8 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1UpdateSession-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1UpdateSession-members.html @@ -52,7 +52,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1UpdateSession.html b/hurricane/doc/hurricane/html/classHurricane_1_1UpdateSession.html index b082efdb..f47f47fa 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1UpdateSession.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1UpdateSession.html @@ -87,7 +87,7 @@ Update Session Mechanism
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1VectorCollection-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1VectorCollection-members.html index e4ff674e..105bf2af 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1VectorCollection-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1VectorCollection-members.html @@ -58,7 +58,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1VectorCollection.html b/hurricane/doc/hurricane/html/classHurricane_1_1VectorCollection.html index ef367eb7..287b84d8 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1VectorCollection.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1VectorCollection.html @@ -120,7 +120,7 @@ template<class Element >
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Vertical-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Vertical-members.html index 8f0bf9e3..43e2f327 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Vertical-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Vertical-members.html @@ -60,40 +60,39 @@ $(function() { getDySource() constHurricane::Verticalinline getDyTarget() constHurricane::Verticalinline getHalfWidth() constHurricane::Segmentinline - getId() constHurricane::Entityinline - getIsUnderFilter(const Box &area)Hurricane::Componentstatic - getNet() constHurricane::Componentinline - getOppositeAnchor(Component *anchor) constHurricane::Segment - getOppositeHook(const Hook *hook) constHurricane::Segment - getPosition() constHurricane::Componentinlinevirtual - getProperties() constHurricane::DBo - getProperty(const Name &) constHurricane::DBo - getRubber() constHurricane::Componentinline - getSlaveComponents() constHurricane::Component - getSource() constHurricane::Segment - getSourceHook()Hurricane::Segmentinline - getSourcePosition() constHurricane::Segmentvirtual - getTarget() constHurricane::Segment - getTargetHook()Hurricane::Segmentinline - getTargetPosition() constHurricane::Segmentvirtual - getWidth() constHurricane::Segmentinline - hasProperty() constHurricane::DBoinline - Inherit typedefHurricane::Vertical - invert()Hurricane::Segment - isMaterialized() constHurricane::Goinline - put(Property *)Hurricane::DBo - remove(Property *)Hurricane::DBo - removeProperty(const Name &)Hurricane::DBo - setLayer(const Layer *layer)Hurricane::Segment - setWidth(const DbU::Unit &width)Hurricane::Segment - setX(const DbU::Unit &x)Hurricane::Vertical - translate(const DbU::Unit &dx)Hurricane::Vertical + getIsUnderFilter(const Box &area)Hurricane::Componentstatic + getNet() constHurricane::Componentinline + getOppositeAnchor(Component *anchor) constHurricane::Segment + getOppositeHook(const Hook *hook) constHurricane::Segment + getPosition() constHurricane::Componentinlinevirtual + getProperties() constHurricane::DBo + getProperty(const Name &) constHurricane::DBo + getRubber() constHurricane::Componentinline + getSlaveComponents() constHurricane::Component + getSource() constHurricane::Segment + getSourceHook()Hurricane::Segmentinline + getSourcePosition() constHurricane::Segmentvirtual + getTarget() constHurricane::Segment + getTargetHook()Hurricane::Segmentinline + getTargetPosition() constHurricane::Segmentvirtual + getWidth() constHurricane::Segmentinline + hasProperty() constHurricane::DBoinline + Inherit typedefHurricane::Vertical + invert()Hurricane::Segment + isMaterialized() constHurricane::Goinline + put(Property *)Hurricane::DBo + remove(Property *)Hurricane::DBo + removeProperty(const Name &)Hurricane::DBo + setLayer(const Layer *layer)Hurricane::Segment + setWidth(const DbU::Unit &width)Hurricane::Segment + setX(const DbU::Unit &x)Hurricane::Vertical + translate(const DbU::Unit &dx)Hurricane::Vertical

        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Vertical.html b/hurricane/doc/hurricane/html/classHurricane_1_1Vertical.html index e635db90..5cc17254 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Vertical.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Vertical.html @@ -131,9 +131,6 @@ Public Member Functions - Public Member Functions inherited from Hurricane::Go bool isMaterialized () const   -- Public Member Functions inherited from Hurricane::Entity -unsigned int getId () const -  - Public Member Functions inherited from Hurricane::DBo virtual void destroy ()   @@ -423,7 +420,7 @@ Introduction
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1ViaLayer-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1ViaLayer-members.html index f66cf179..c18f8269 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1ViaLayer-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1ViaLayer-members.html @@ -81,7 +81,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1ViaLayer.html b/hurricane/doc/hurricane/html/classHurricane_1_1ViaLayer.html index 883e1463..826335f6 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1ViaLayer.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1ViaLayer.html @@ -207,7 +207,7 @@ ViaLayer::getOpposite()
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Warning-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Warning-members.html index efe0a2fc..742393dc 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Warning-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Warning-members.html @@ -65,7 +65,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Warning.html b/hurricane/doc/hurricane/html/classHurricane_1_1Warning.html index e694520c..1c444b27 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Warning.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Warning.html @@ -317,7 +317,7 @@ Remark
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/classes.html b/hurricane/doc/hurricane/html/classes.html index 70792664..137ffe66 100644 --- a/hurricane/doc/hurricane/html/classes.html +++ b/hurricane/doc/hurricane/html/classes.html @@ -60,7 +60,7 @@ $(function() { Cell (Hurricane)    Collection (Hurricane)   Pad (Hurricane)    -Entity::CompareById (Hurricane)   Path (Hurricane)    +CompareById (Entity)   Path (Hurricane)    Component (Hurricane)   Pin (Hurricane)    Contact (Hurricane)   Instance::PlacementStatus (Hurricane)    ContactLayer (Hurricane)   Plug (Hurricane)    @@ -136,7 +136,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/clasststream-members.html b/hurricane/doc/hurricane/html/clasststream-members.html index 9382133a..eba649ff 100644 --- a/hurricane/doc/hurricane/html/clasststream-members.html +++ b/hurricane/doc/hurricane/html/clasststream-members.html @@ -58,7 +58,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/clasststream.html b/hurricane/doc/hurricane/html/clasststream.html index 7d4dfaaa..76bca28d 100644 --- a/hurricane/doc/hurricane/html/clasststream.html +++ b/hurricane/doc/hurricane/html/clasststream.html @@ -404,7 +404,7 @@ Public Member Functions
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/dir_2450e9a649c497a3424377400b95054f.html b/hurricane/doc/hurricane/html/dir_2450e9a649c497a3424377400b95054f.html index a4af57cd..ba1f444f 100644 --- a/hurricane/doc/hurricane/html/dir_2450e9a649c497a3424377400b95054f.html +++ b/hurricane/doc/hurricane/html/dir_2450e9a649c497a3424377400b95054f.html @@ -49,7 +49,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/hurricane/doc/hurricane/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html index 07a3c33e..3ffb0058 100644 --- a/hurricane/doc/hurricane/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html +++ b/hurricane/doc/hurricane/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html @@ -49,7 +49,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/dir_84a91669594ac5e20f6d730a15331f7a.html b/hurricane/doc/hurricane/html/dir_84a91669594ac5e20f6d730a15331f7a.html index 78b310c9..c177291c 100644 --- a/hurricane/doc/hurricane/html/dir_84a91669594ac5e20f6d730a15331f7a.html +++ b/hurricane/doc/hurricane/html/dir_84a91669594ac5e20f6d730a15331f7a.html @@ -53,7 +53,7 @@ Directories
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/files.html b/hurricane/doc/hurricane/html/files.html index 83db3ccb..d726197e 100644 --- a/hurricane/doc/hurricane/html/files.html +++ b/hurricane/doc/hurricane/html/files.html @@ -138,7 +138,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/functions.html b/hurricane/doc/hurricane/html/functions.html index 782da26a..d0b9a3b1 100644 --- a/hurricane/doc/hurricane/html/functions.html +++ b/hurricane/doc/hurricane/html/functions.html @@ -78,7 +78,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/functions_0x7e.html b/hurricane/doc/hurricane/html/functions_0x7e.html index 7b662cb4..33f14e6d 100644 --- a/hurricane/doc/hurricane/html/functions_0x7e.html +++ b/hurricane/doc/hurricane/html/functions_0x7e.html @@ -63,7 +63,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/functions_b.html b/hurricane/doc/hurricane/html/functions_b.html index b00a47a1..3332361e 100644 --- a/hurricane/doc/hurricane/html/functions_b.html +++ b/hurricane/doc/hurricane/html/functions_b.html @@ -60,7 +60,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/functions_c.html b/hurricane/doc/hurricane/html/functions_c.html index a7e7eb14..4c4312a2 100644 --- a/hurricane/doc/hurricane/html/functions_c.html +++ b/hurricane/doc/hurricane/html/functions_c.html @@ -75,7 +75,7 @@ $(function() {
      • contains() : Hurricane::Box -, Hurricane::Interval +, Hurricane::Interval , Hurricane::Layer
      • copyAttrs() @@ -111,7 +111,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/functions_d.html b/hurricane/doc/hurricane/html/functions_d.html index d90b4a75..a96ddb9d 100644 --- a/hurricane/doc/hurricane/html/functions_d.html +++ b/hurricane/doc/hurricane/html/functions_d.html @@ -94,7 +94,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/functions_e.html b/hurricane/doc/hurricane/html/functions_e.html index 4ac8b10b..e983c038 100644 --- a/hurricane/doc/hurricane/html/functions_e.html +++ b/hurricane/doc/hurricane/html/functions_e.html @@ -57,7 +57,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/functions_enum.html b/hurricane/doc/hurricane/html/functions_enum.html index 4cf65b61..68740a1e 100644 --- a/hurricane/doc/hurricane/html/functions_enum.html +++ b/hurricane/doc/hurricane/html/functions_enum.html @@ -64,7 +64,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/functions_eval.html b/hurricane/doc/hurricane/html/functions_eval.html index 4bcbd4f4..946b05b5 100644 --- a/hurricane/doc/hurricane/html/functions_eval.html +++ b/hurricane/doc/hurricane/html/functions_eval.html @@ -276,7 +276,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/functions_f.html b/hurricane/doc/hurricane/html/functions_f.html index a99da034..db5e550f 100644 --- a/hurricane/doc/hurricane/html/functions_f.html +++ b/hurricane/doc/hurricane/html/functions_f.html @@ -63,7 +63,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/functions_func.html b/hurricane/doc/hurricane/html/functions_func.html index 572d721f..f0848d00 100644 --- a/hurricane/doc/hurricane/html/functions_func.html +++ b/hurricane/doc/hurricane/html/functions_func.html @@ -72,7 +72,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/functions_func_0x7e.html b/hurricane/doc/hurricane/html/functions_func_0x7e.html index 7b2cc770..f673431d 100644 --- a/hurricane/doc/hurricane/html/functions_func_0x7e.html +++ b/hurricane/doc/hurricane/html/functions_func_0x7e.html @@ -63,7 +63,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/functions_func_b.html b/hurricane/doc/hurricane/html/functions_func_b.html index eae0c2d9..fe9db6e4 100644 --- a/hurricane/doc/hurricane/html/functions_func_b.html +++ b/hurricane/doc/hurricane/html/functions_func_b.html @@ -54,7 +54,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/functions_func_c.html b/hurricane/doc/hurricane/html/functions_func_c.html index 9d2a2a98..2ec4860e 100644 --- a/hurricane/doc/hurricane/html/functions_func_c.html +++ b/hurricane/doc/hurricane/html/functions_func_c.html @@ -57,7 +57,7 @@ $(function() {
      • contains() : Hurricane::Box -, Hurricane::Interval +, Hurricane::Interval , Hurricane::Layer
      • copyAttrs() @@ -90,7 +90,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/functions_func_d.html b/hurricane/doc/hurricane/html/functions_func_d.html index 357220fd..0f5a7dd6 100644 --- a/hurricane/doc/hurricane/html/functions_func_d.html +++ b/hurricane/doc/hurricane/html/functions_func_d.html @@ -61,7 +61,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/functions_func_e.html b/hurricane/doc/hurricane/html/functions_func_e.html index 1905b67c..5eb573fc 100644 --- a/hurricane/doc/hurricane/html/functions_func_e.html +++ b/hurricane/doc/hurricane/html/functions_func_e.html @@ -57,7 +57,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/functions_func_f.html b/hurricane/doc/hurricane/html/functions_func_f.html index 4d61814d..fd841b95 100644 --- a/hurricane/doc/hurricane/html/functions_func_f.html +++ b/hurricane/doc/hurricane/html/functions_func_f.html @@ -57,7 +57,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/functions_func_g.html b/hurricane/doc/hurricane/html/functions_func_g.html index 6d2bde7e..8a3bc7e8 100644 --- a/hurricane/doc/hurricane/html/functions_func_g.html +++ b/hurricane/doc/hurricane/html/functions_func_g.html @@ -263,9 +263,6 @@ $(function() {
      • getHorizontals() : Hurricane::Net
      • -
      • getId() -: Hurricane::Entity -
      • getInstance() : Hurricane::Cell , Hurricane::Plug @@ -283,7 +280,7 @@ $(function() {
      • getIntersection() : Hurricane::Box -, Hurricane::Interval +, Hurricane::Interval
      • getInvert() : Hurricane::Transformation @@ -667,7 +664,7 @@ $(function() {
      • getUnion() : Hurricane::Box -, Hurricane::Interval +, Hurricane::Interval
      • getValueString() : Hurricane::DbU @@ -714,7 +711,7 @@ $(function() { : Hurricane::Component , Hurricane::Net , Hurricane::RoutingPad -, Hurricane::Transformation +, Hurricane::Transformation
      • getYCenter() : Hurricane::Box @@ -737,7 +734,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/functions_func_h.html b/hurricane/doc/hurricane/html/functions_func_h.html index 9a736d6a..d5b972cc 100644 --- a/hurricane/doc/hurricane/html/functions_func_h.html +++ b/hurricane/doc/hurricane/html/functions_func_h.html @@ -76,7 +76,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/functions_func_i.html b/hurricane/doc/hurricane/html/functions_func_i.html index 91bdf3e2..c66f567f 100644 --- a/hurricane/doc/hurricane/html/functions_func_i.html +++ b/hurricane/doc/hurricane/html/functions_func_i.html @@ -54,14 +54,14 @@ $(function() {
      • intersect() : Hurricane::Box -, Hurricane::Interval +, Hurricane::Interval , Hurricane::Layer
      • intersection() : Hurricane::Interval
      • Interval() -: Hurricane::Interval +: Hurricane::Interval
      • invalidate() : Hurricane::Go @@ -157,7 +157,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/functions_func_j.html b/hurricane/doc/hurricane/html/functions_func_j.html index e7b0922d..f607fabe 100644 --- a/hurricane/doc/hurricane/html/functions_func_j.html +++ b/hurricane/doc/hurricane/html/functions_func_j.html @@ -54,7 +54,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/functions_func_l.html b/hurricane/doc/hurricane/html/functions_func_l.html index 15cd56ae..a5512b03 100644 --- a/hurricane/doc/hurricane/html/functions_func_l.html +++ b/hurricane/doc/hurricane/html/functions_func_l.html @@ -54,7 +54,7 @@ $(function() {
        - +
        Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
        diff --git a/hurricane/doc/hurricane/html/functions_func_m.html b/hurricane/doc/hurricane/html/functions_func_m.html index 7a06e0c4..9988b937 100644 --- a/hurricane/doc/hurricane/html/functions_func_m.html +++ b/hurricane/doc/hurricane/html/functions_func_m.html @@ -60,7 +60,7 @@ $(function() {
      • merge() : Hurricane::Box , Hurricane::Hook -, Hurricane::Interval +, Hurricane::Interval , Hurricane::Net
      @@ -69,7 +69,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/hurricane/html/functions_func_n.html b/hurricane/doc/hurricane/html/functions_func_n.html index 1d41364f..7d5c6312 100644 --- a/hurricane/doc/hurricane/html/functions_func_n.html +++ b/hurricane/doc/hurricane/html/functions_func_n.html @@ -51,7 +51,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/hurricane/html/functions_func_o.html b/hurricane/doc/hurricane/html/functions_func_o.html index 379da418..e8e65c86 100644 --- a/hurricane/doc/hurricane/html/functions_func_o.html +++ b/hurricane/doc/hurricane/html/functions_func_o.html @@ -59,7 +59,7 @@ $(function() {
    • operator!=() : Hurricane::Box -, Hurricane::Interval +, Hurricane::Interval , Hurricane::Name , Hurricane::Occurrence , Hurricane::Path @@ -83,7 +83,7 @@ $(function() {
    • operator=() : Hurricane::Box , Hurricane::Interruption -, Hurricane::Interval +, Hurricane::Interval , Hurricane::Name , Hurricane::Occurrence , Hurricane::Path @@ -94,7 +94,7 @@ $(function() {
    • operator==() : Hurricane::Box -, Hurricane::Interval +, Hurricane::Interval , Hurricane::Name , Hurricane::Occurrence , Hurricane::Path @@ -116,7 +116,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/hurricane/html/functions_func_p.html b/hurricane/doc/hurricane/html/functions_func_p.html index 52cc71ed..9fc39cfa 100644 --- a/hurricane/doc/hurricane/html/functions_func_p.html +++ b/hurricane/doc/hurricane/html/functions_func_p.html @@ -79,7 +79,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/hurricane/html/functions_func_q.html b/hurricane/doc/hurricane/html/functions_func_q.html index a6644806..ddb6c8c4 100644 --- a/hurricane/doc/hurricane/html/functions_func_q.html +++ b/hurricane/doc/hurricane/html/functions_func_q.html @@ -51,7 +51,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/hurricane/html/functions_func_r.html b/hurricane/doc/hurricane/html/functions_func_r.html index 696c6d17..b02da8d7 100644 --- a/hurricane/doc/hurricane/html/functions_func_r.html +++ b/hurricane/doc/hurricane/html/functions_func_r.html @@ -67,7 +67,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/hurricane/html/functions_func_s.html b/hurricane/doc/hurricane/html/functions_func_s.html index 9f4bdbb9..28d8afab 100644 --- a/hurricane/doc/hurricane/html/functions_func_s.html +++ b/hurricane/doc/hurricane/html/functions_func_s.html @@ -224,7 +224,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/hurricane/html/functions_func_t.html b/hurricane/doc/hurricane/html/functions_func_t.html index dc18cc7e..105b5b2d 100644 --- a/hurricane/doc/hurricane/html/functions_func_t.html +++ b/hurricane/doc/hurricane/html/functions_func_t.html @@ -73,7 +73,7 @@ $(function() { : Hurricane::Box , Hurricane::Go , Hurricane::Horizontal -, Hurricane::Interval +, Hurricane::Interval , Hurricane::Point , Hurricane::RoutingPad , Hurricane::Vertical @@ -84,7 +84,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/hurricane/html/functions_func_u.html b/hurricane/doc/hurricane/html/functions_func_u.html index 70f6ce4f..0e250145 100644 --- a/hurricane/doc/hurricane/html/functions_func_u.html +++ b/hurricane/doc/hurricane/html/functions_func_u.html @@ -57,7 +57,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/hurricane/html/functions_func_v.html b/hurricane/doc/hurricane/html/functions_func_v.html index d64d79ae..8bf12997 100644 --- a/hurricane/doc/hurricane/html/functions_func_v.html +++ b/hurricane/doc/hurricane/html/functions_func_v.html @@ -48,7 +48,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/hurricane/html/functions_func_w.html b/hurricane/doc/hurricane/html/functions_func_w.html index df339b16..e35c5487 100644 --- a/hurricane/doc/hurricane/html/functions_func_w.html +++ b/hurricane/doc/hurricane/html/functions_func_w.html @@ -51,7 +51,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/hurricane/html/functions_g.html b/hurricane/doc/hurricane/html/functions_g.html index a6c78f2a..3b4e6228 100644 --- a/hurricane/doc/hurricane/html/functions_g.html +++ b/hurricane/doc/hurricane/html/functions_g.html @@ -263,9 +263,6 @@ $(function() {
    • getHorizontals() : Hurricane::Net
    • -
    • getId() -: Hurricane::Entity -
    • getInstance() : Hurricane::Cell , Hurricane::Plug @@ -283,7 +280,7 @@ $(function() {
    • getIntersection() : Hurricane::Box -, Hurricane::Interval +, Hurricane::Interval
    • getInvert() : Hurricane::Transformation @@ -599,7 +596,7 @@ $(function() { : Hurricane::Query
    • getSubSet() -: Hurricane::Collection< Type > +: Hurricane::Collection< Type >
    • getSupplyNets() : Hurricane::Cell @@ -667,7 +664,7 @@ $(function() {
    • getUnion() : Hurricane::Box -, Hurricane::Interval +, Hurricane::Interval
    • getValueString() : Hurricane::DbU @@ -699,7 +696,7 @@ $(function() { : Hurricane::Component , Hurricane::Net , Hurricane::RoutingPad -, Hurricane::Transformation +, Hurricane::Transformation
    • getXCenter() : Hurricane::Box @@ -714,7 +711,7 @@ $(function() { : Hurricane::Component , Hurricane::Net , Hurricane::RoutingPad -, Hurricane::Transformation +, Hurricane::Transformation
    • getYCenter() : Hurricane::Box @@ -728,12 +725,12 @@ $(function() {
    • goCallback() : Hurricane::Query
    • -
    • grid() -: Hurricane::DbU -
    • Grid : Hurricane::DbU
    • +
    • grid() +: Hurricane::DbU +
    • GROUND : Hurricane::Net::Type
    • @@ -743,7 +740,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/hurricane/html/functions_h.html b/hurricane/doc/hurricane/html/functions_h.html index b0b1d7c9..577e8475 100644 --- a/hurricane/doc/hurricane/html/functions_h.html +++ b/hurricane/doc/hurricane/html/functions_h.html @@ -79,7 +79,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/hurricane/html/functions_i.html b/hurricane/doc/hurricane/html/functions_i.html index 5fb55c67..3db960ce 100644 --- a/hurricane/doc/hurricane/html/functions_i.html +++ b/hurricane/doc/hurricane/html/functions_i.html @@ -78,14 +78,14 @@ $(function() {
    • intersect() : Hurricane::Box -, Hurricane::Interval +, Hurricane::Interval , Hurricane::Layer
    • intersection() : Hurricane::Interval
    • Interval() -: Hurricane::Interval +: Hurricane::Interval
    • invalidate() : Hurricane::Go @@ -181,7 +181,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/hurricane/html/functions_j.html b/hurricane/doc/hurricane/html/functions_j.html index 019fc60e..bb3e23a3 100644 --- a/hurricane/doc/hurricane/html/functions_j.html +++ b/hurricane/doc/hurricane/html/functions_j.html @@ -54,7 +54,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/hurricane/html/functions_k.html b/hurricane/doc/hurricane/html/functions_k.html index e3160712..bba081b2 100644 --- a/hurricane/doc/hurricane/html/functions_k.html +++ b/hurricane/doc/hurricane/html/functions_k.html @@ -48,7 +48,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/hurricane/html/functions_l.html b/hurricane/doc/hurricane/html/functions_l.html index 9b5186be..1963d149 100644 --- a/hurricane/doc/hurricane/html/functions_l.html +++ b/hurricane/doc/hurricane/html/functions_l.html @@ -60,7 +60,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/hurricane/html/functions_m.html b/hurricane/doc/hurricane/html/functions_m.html index 496384b8..e432c46e 100644 --- a/hurricane/doc/hurricane/html/functions_m.html +++ b/hurricane/doc/hurricane/html/functions_m.html @@ -63,7 +63,7 @@ $(function() {
    • merge() : Hurricane::Box , Hurricane::Hook -, Hurricane::Interval +, Hurricane::Interval , Hurricane::Net
    • metal @@ -81,7 +81,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/hurricane/html/functions_n.html b/hurricane/doc/hurricane/html/functions_n.html index 1c72a7cc..64eefa99 100644 --- a/hurricane/doc/hurricane/html/functions_n.html +++ b/hurricane/doc/hurricane/html/functions_n.html @@ -63,7 +63,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/hurricane/html/functions_o.html b/hurricane/doc/hurricane/html/functions_o.html index 13da0904..e63d6d1e 100644 --- a/hurricane/doc/hurricane/html/functions_o.html +++ b/hurricane/doc/hurricane/html/functions_o.html @@ -59,7 +59,7 @@ $(function() {
    • operator!=() : Hurricane::Box -, Hurricane::Interval +, Hurricane::Interval , Hurricane::Name , Hurricane::Occurrence , Hurricane::Path @@ -83,7 +83,7 @@ $(function() {
    • operator=() : Hurricane::Box , Hurricane::Interruption -, Hurricane::Interval +, Hurricane::Interval , Hurricane::Name , Hurricane::Occurrence , Hurricane::Path @@ -94,7 +94,7 @@ $(function() {
    • operator==() : Hurricane::Box -, Hurricane::Interval +, Hurricane::Interval , Hurricane::Name , Hurricane::Occurrence , Hurricane::Path @@ -122,7 +122,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/hurricane/html/functions_p.html b/hurricane/doc/hurricane/html/functions_p.html index c943e50a..0a3cf7ab 100644 --- a/hurricane/doc/hurricane/html/functions_p.html +++ b/hurricane/doc/hurricane/html/functions_p.html @@ -97,7 +97,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/hurricane/html/functions_q.html b/hurricane/doc/hurricane/html/functions_q.html index 08f7a02d..9cd3f414 100644 --- a/hurricane/doc/hurricane/html/functions_q.html +++ b/hurricane/doc/hurricane/html/functions_q.html @@ -54,7 +54,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/hurricane/html/functions_r.html b/hurricane/doc/hurricane/html/functions_r.html index 8402eced..f0b80106 100644 --- a/hurricane/doc/hurricane/html/functions_r.html +++ b/hurricane/doc/hurricane/html/functions_r.html @@ -67,7 +67,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/hurricane/html/functions_s.html b/hurricane/doc/hurricane/html/functions_s.html index 7d13d29f..68bb0cd2 100644 --- a/hurricane/doc/hurricane/html/functions_s.html +++ b/hurricane/doc/hurricane/html/functions_s.html @@ -243,7 +243,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/hurricane/html/functions_t.html b/hurricane/doc/hurricane/html/functions_t.html index 0f5a7782..f5a3f6c1 100644 --- a/hurricane/doc/hurricane/html/functions_t.html +++ b/hurricane/doc/hurricane/html/functions_t.html @@ -76,7 +76,7 @@ $(function() { : Hurricane::Box , Hurricane::Go , Hurricane::Horizontal -, Hurricane::Interval +, Hurricane::Interval , Hurricane::Point , Hurricane::RoutingPad , Hurricane::Vertical @@ -90,7 +90,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/hurricane/html/functions_type.html b/hurricane/doc/hurricane/html/functions_type.html index 447c78d4..a6e1c883 100644 --- a/hurricane/doc/hurricane/html/functions_type.html +++ b/hurricane/doc/hurricane/html/functions_type.html @@ -71,7 +71,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/hurricane/html/functions_u.html b/hurricane/doc/hurricane/html/functions_u.html index 9ecd5cb9..3eb066fe 100644 --- a/hurricane/doc/hurricane/html/functions_u.html +++ b/hurricane/doc/hurricane/html/functions_u.html @@ -73,7 +73,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/hurricane/html/functions_v.html b/hurricane/doc/hurricane/html/functions_v.html index af32d606..c0cb977d 100644 --- a/hurricane/doc/hurricane/html/functions_v.html +++ b/hurricane/doc/hurricane/html/functions_v.html @@ -48,7 +48,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/hurricane/html/functions_w.html b/hurricane/doc/hurricane/html/functions_w.html index 04286091..80d33341 100644 --- a/hurricane/doc/hurricane/html/functions_w.html +++ b/hurricane/doc/hurricane/html/functions_w.html @@ -57,7 +57,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/hurricane/html/graph_legend.html b/hurricane/doc/hurricane/html/graph_legend.html index e3707dc1..52cd60c5 100644 --- a/hurricane/doc/hurricane/html/graph_legend.html +++ b/hurricane/doc/hurricane/html/graph_legend.html @@ -74,7 +74,7 @@ A yellow dashed arrow denotes a relation between a template instance and the tem
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/hurricane/html/group__DbUGroup.html b/hurricane/doc/hurricane/html/group__DbUGroup.html index 5a069d3c..c0f0d819 100644 --- a/hurricane/doc/hurricane/html/group__DbUGroup.html +++ b/hurricane/doc/hurricane/html/group__DbUGroup.html @@ -1293,7 +1293,7 @@ Translators
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/hurricane/html/group__Generalities.html b/hurricane/doc/hurricane/html/group__Generalities.html index 7477be80..ca9ffc10 100644 --- a/hurricane/doc/hurricane/html/group__Generalities.html +++ b/hurricane/doc/hurricane/html/group__Generalities.html @@ -155,7 +155,7 @@ Remarks
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/hurricane/html/group__JsonSupport.html b/hurricane/doc/hurricane/html/group__JsonSupport.html index 03376364..9bb45292 100644 --- a/hurricane/doc/hurricane/html/group__JsonSupport.html +++ b/hurricane/doc/hurricane/html/group__JsonSupport.html @@ -117,7 +117,7 @@ JsonObject Life Cycle
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/hurricane/html/group__grpSynthHierarchy.html b/hurricane/doc/hurricane/html/group__grpSynthHierarchy.html index 2810d1fd..cdc5dc64 100644 --- a/hurricane/doc/hurricane/html/group__grpSynthHierarchy.html +++ b/hurricane/doc/hurricane/html/group__grpSynthHierarchy.html @@ -236,7 +236,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/hurricane/html/hierarchy.html b/hurricane/doc/hurricane/html/hierarchy.html index c104d498..af92d155 100644 --- a/hurricane/doc/hurricane/html/hierarchy.html +++ b/hurricane/doc/hurricane/html/hierarchy.html @@ -55,7 +55,7 @@ $(function() {  CHurricane::VectorCollection< Element >Hurricane Collection wrapper around a std::vector  CHurricane::Collection< SubType >  CHurricane::SubTypeCollection< Type, SubType >Applies a Type Filter to a Collection - CHurricane::Entity::CompareByIdEntity comparison criterion for STL container + CEntity::CompareByIdEntity comparison criterion for STL container  CHurricane::DBoDataBase object root class (API)  CHurricane::DataBaseThe whole DataBase (API)  CHurricane::EntityOccurrenceable objects root class (API) @@ -143,7 +143,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/hurricane/html/hurricane.tag b/hurricane/doc/hurricane/html/hurricane.tag index c81c4a30..8b0a2171 100644 --- a/hurricane/doc/hurricane/html/hurricane.tag +++ b/hurricane/doc/hurricane/html/hurricane.tag @@ -827,8 +827,8 @@ - Hurricane::Entity::CompareById - structHurricane_1_1Entity_1_1CompareById.html + Entity::CompareById + classEntity_1_1CompareById.html Hurricane::Component @@ -1880,14 +1880,6 @@ Hurricane::Entity classHurricane_1_1Entity.html Hurricane::DBo - Hurricane::Entity::CompareById - - unsigned int - getId - classHurricane_1_1Entity.html - aaff727ad7411392d4a991a56e2579a60 - () const - virtual Cell * getCell @@ -2644,8 +2636,8 @@ Interval classHurricane_1_1Interval.html - ac0f6c351e64e9be3e9a51e07dff10778 - (const DbU::Unit &v) + ace4173705b4dbcf6c00cd83bb61c4d43 + (const DbU::Unit &) @@ -2658,29 +2650,29 @@ Interval classHurricane_1_1Interval.html - af1d588fcfe919e45be4334fdbd8a07a6 - (const Interval &interval) + a2db3923eb057dd19f5320d93a09750d9 + (const Interval &) Interval & operator= classHurricane_1_1Interval.html - a6d9eb898fa89218cec031f28d69a7d95 - (const Interval &interval) + a337b424cea8024f574726c3a2e4935b8 + (const Interval &) bool operator== classHurricane_1_1Interval.html - ad10b5fbbeb4531915a6031353e148edc - (const Interval &interval) const + a1b022ac0ad975f168ac2b2689e6368c3 + (const Interval &) const bool operator!= classHurricane_1_1Interval.html - a2703ebb1e70d93d96ae8e29748c53d14 - (const Interval &interval) const + a2e5a64c485269fb08fb762e1eb3bc374 + (const Interval &) const const DbU::Unit & @@ -2721,15 +2713,15 @@ Interval getUnion classHurricane_1_1Interval.html - adaddabee8381860b0d6913ce39bc1911 - (const Interval &interval) const + ac50b0e28faf03b54f81af109d942b569 + (const Interval &) const Interval getIntersection classHurricane_1_1Interval.html - ad9baf434d669fddf9cd30aa74e0c4486 - (const Interval &interval) const + a73130b484cf43ff3b48488780a926ead + (const Interval &) const bool @@ -2749,22 +2741,22 @@ bool contains classHurricane_1_1Interval.html - a1f58204f81cd59ae8345e0efd2482bbb - (const DbU::Unit &v) const + a84beba7ba34552e12e6cb9e462a94765 + (const DbU::Unit &) const bool contains classHurricane_1_1Interval.html - ae86edb6867cf55459325cc35d971afbd - (const Interval &interval) const + af613eb138f2035f50cba47057a074b2e + (const Interval &) const bool intersect classHurricane_1_1Interval.html - acbaccbdd6649a32dd457455d277370f8 - (const Interval &interval) const + af4862b82fe5b37cdb3986a3b05245469 + (const Interval &, bool strict=false) const Interval & @@ -2791,15 +2783,15 @@ Interval & merge classHurricane_1_1Interval.html - a927e2fbaa8f38a069c6308f7cacc8ab5 - (const DbU::Unit &v) + ab37a2b3ad247a0a5a4e4946d2b777bec + (const DbU::Unit &) Interval & merge classHurricane_1_1Interval.html - ab6c2a46d4cb528ecb0d0eec2c4cec020 - (const Interval &interval) + a99c17b60766c1146ad380ac9981008f7 + (const Interval &) Interval & @@ -2812,15 +2804,15 @@ Interval & intersection classHurricane_1_1Interval.html - a568a1e327e5e13d4b50ea16dab20b835 - (const Interval &interval) + aea3de219c9e8316e19d71d44428b8dc4 + (const Interval &) Interval & translate classHurricane_1_1Interval.html - aa2924c14832fd643bec8e8682faf7854 - (const DbU::Unit &dv) + acf0aab51a74fe1216bfe112999066466 + (const DbU::Unit &) secIntervalIntro secIntervalRemark diff --git a/hurricane/doc/hurricane/html/index.html b/hurricane/doc/hurricane/html/index.html index 3c68f6db..e7fd41c8 100644 --- a/hurricane/doc/hurricane/html/index.html +++ b/hurricane/doc/hurricane/html/index.html @@ -48,7 +48,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/hurricane/html/modules.html b/hurricane/doc/hurricane/html/modules.html index 78027343..88454554 100644 --- a/hurricane/doc/hurricane/html/modules.html +++ b/hurricane/doc/hurricane/html/modules.html @@ -53,7 +53,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/hurricane/html/namespaceHurricane.html b/hurricane/doc/hurricane/html/namespaceHurricane.html index 587c1502..a0a81753 100644 --- a/hurricane/doc/hurricane/html/namespaceHurricane.html +++ b/hurricane/doc/hurricane/html/namespaceHurricane.html @@ -1378,7 +1378,7 @@ Functions
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/hurricane/html/namespacemembers.html b/hurricane/doc/hurricane/html/namespacemembers.html index 71b81787..88356643 100644 --- a/hurricane/doc/hurricane/html/namespacemembers.html +++ b/hurricane/doc/hurricane/html/namespacemembers.html @@ -285,7 +285,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/hurricane/html/namespacemembers_func.html b/hurricane/doc/hurricane/html/namespacemembers_func.html index 21747081..a01649d4 100644 --- a/hurricane/doc/hurricane/html/namespacemembers_func.html +++ b/hurricane/doc/hurricane/html/namespacemembers_func.html @@ -46,7 +46,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/hurricane/html/namespacemembers_type.html b/hurricane/doc/hurricane/html/namespacemembers_type.html index 08c99f48..589b24db 100644 --- a/hurricane/doc/hurricane/html/namespacemembers_type.html +++ b/hurricane/doc/hurricane/html/namespacemembers_type.html @@ -282,7 +282,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/hurricane/html/namespaces.html b/hurricane/doc/hurricane/html/namespaces.html index e4b667da..b2c70380 100644 --- a/hurricane/doc/hurricane/html/namespaces.html +++ b/hurricane/doc/hurricane/html/namespaces.html @@ -50,7 +50,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/hurricane/latex/annotated.tex b/hurricane/doc/hurricane/latex/annotated.tex index bd4a2bc2..9a27a5a7 100644 --- a/hurricane/doc/hurricane/latex/annotated.tex +++ b/hurricane/doc/hurricane/latex/annotated.tex @@ -6,7 +6,7 @@ Here are the classes, structs, unions and interfaces with brief descriptions\+:\ \item\contentsline{section}{\mbox{\hyperlink{classHurricane_1_1Box}{Hurricane\+::\+Box}} \\*\mbox{\hyperlink{classHurricane_1_1Box}{Box}} description ({\bfseries A\+PI}) }{\pageref{classHurricane_1_1Box}}{} \item\contentsline{section}{\mbox{\hyperlink{classHurricane_1_1Cell}{Hurricane\+::\+Cell}} \\*The model ({\bfseries A\+PI}) }{\pageref{classHurricane_1_1Cell}}{} \item\contentsline{section}{\mbox{\hyperlink{classHurricane_1_1Collection}{Hurricane\+::\+Collection$<$ Type $>$}} \\*\mbox{\hyperlink{classHurricane_1_1Collection}{Collection}} description ({\bfseries A\+PI}) }{\pageref{classHurricane_1_1Collection}}{} -\item\contentsline{section}{\mbox{\hyperlink{structHurricane_1_1Entity_1_1CompareById}{Hurricane\+::\+Entity\+::\+Compare\+By\+Id}} \\*\mbox{\hyperlink{classHurricane_1_1Entity}{Entity}} comparison criterion for S\+TL container }{\pageref{structHurricane_1_1Entity_1_1CompareById}}{} +\item\contentsline{section}{\mbox{\hyperlink{classEntity_1_1CompareById}{Entity\+::\+Compare\+By\+Id}} \\*Entity comparison criterion for S\+TL container }{\pageref{classEntity_1_1CompareById}}{} \item\contentsline{section}{\mbox{\hyperlink{classHurricane_1_1Component}{Hurricane\+::\+Component}} \\*\mbox{\hyperlink{classHurricane_1_1Component}{Component}} description ({\bfseries A\+PI}) }{\pageref{classHurricane_1_1Component}}{} \item\contentsline{section}{\mbox{\hyperlink{classHurricane_1_1Contact}{Hurricane\+::\+Contact}} \\*\mbox{\hyperlink{classHurricane_1_1Contact}{Contact}} description ({\bfseries A\+PI}) }{\pageref{classHurricane_1_1Contact}}{} \item\contentsline{section}{\mbox{\hyperlink{classHurricane_1_1ContactLayer}{Hurricane\+::\+Contact\+Layer}} \\*\mbox{\hyperlink{classHurricane_1_1ContactLayer}{Contact\+Layer}} description ({\bfseries A\+PI}) }{\pageref{classHurricane_1_1ContactLayer}}{} diff --git a/hurricane/doc/hurricane/latex/classEntity_1_1CompareById.tex b/hurricane/doc/hurricane/latex/classEntity_1_1CompareById.tex new file mode 100644 index 00000000..225d416a --- /dev/null +++ b/hurricane/doc/hurricane/latex/classEntity_1_1CompareById.tex @@ -0,0 +1,35 @@ +\hypertarget{classEntity_1_1CompareById}{}\section{Entity\+:\+:Compare\+By\+Id Class Reference} +\label{classEntity_1_1CompareById}\index{Entity\+::\+Compare\+By\+Id@{Entity\+::\+Compare\+By\+Id}} + + +Entity comparison criterion for S\+TL container. + + + + +\subsection{Detailed Description} +Entity comparison criterion for S\+TL container. + +This class is a functor to be used in S\+TL containers of {\ttfamily Entity$\ast$} whenever determinism is required (as an alternative to the object\textquotesingle{}s pointer). If a {\ttfamily N\+U\+LL} pointer is passed as argument, it\textquotesingle{}s {\ttfamily id} is computed as zero, it is a failsafe and should be avoided. + + +\begin{DoxyCode} +\textcolor{keyword}{typedef} std::map NetMap; + +NetMap netMap; +forEach( Net*, inet, cell->getNets() ) \{ + netMap.insert( std::make\_pair(*inet,computeSomeValue(*inet)) ); +\} + +\textcolor{keywordflow}{for} ( NetMap::iterator imap=netMap.begin() ; imap!=netMap.end() ; ++imap ) \{ + \textcolor{comment}{// Show the Net ordering} + cout << (*imap).first->getId() << \textcolor{stringliteral}{":"} << (*imap).first << endl; + \textcolor{comment}{// Do something} + \textcolor{comment}{// ...} +\} +\end{DoxyCode} + + +The documentation for this class was generated from the following file\+:\begin{DoxyCompactItemize} +\item +Entity.\+dox\end{DoxyCompactItemize} diff --git a/hurricane/doc/hurricane/latex/classHurricane_1_1Entity.tex b/hurricane/doc/hurricane/latex/classHurricane_1_1Entity.tex index d8f53304..c1015ced 100644 --- a/hurricane/doc/hurricane/latex/classHurricane_1_1Entity.tex +++ b/hurricane/doc/hurricane/latex/classHurricane_1_1Entity.tex @@ -14,16 +14,9 @@ Inheritance diagram for Hurricane\+:\+:Entity\+:\nopagebreak \includegraphics[width=350pt]{classHurricane_1_1Entity__inherit__graph} \end{center} \end{figure} -\subsection*{Classes} -\begin{DoxyCompactItemize} -\item -class \mbox{\hyperlink{structHurricane_1_1Entity_1_1CompareById}{Compare\+By\+Id}} -\begin{DoxyCompactList}\small\item\em \mbox{\hyperlink{classHurricane_1_1Entity}{Entity}} comparison criterion for S\+TL container. \end{DoxyCompactList}\end{DoxyCompactItemize} \subsection*{Public Member Functions} \begin{DoxyCompactItemize} \item -unsigned int \mbox{\hyperlink{classHurricane_1_1Entity_aaff727ad7411392d4a991a56e2579a60}{get\+Id}} () const -\item virtual \mbox{\hyperlink{classHurricane_1_1Cell}{Cell}} $\ast$ \mbox{\hyperlink{classHurricane_1_1Entity_a42bdf015f583be477cc54b48652b1007}{get\+Cell}} () const =0 \item virtual \mbox{\hyperlink{classHurricane_1_1Box}{Box}} \mbox{\hyperlink{classHurricane_1_1Entity_ad834f8ce33a08a13e2a88446696e63e7}{get\+Bounding\+Box}} () const =0 @@ -35,20 +28,14 @@ Occurrenceable objects root class ({\bfseries A\+PI}). \hypertarget{classHurricane_1_1Entity_secEntityIntro}{}\subsection{Introduction}\label{classHurricane_1_1Entity_secEntityIntro} Entities are abstract objects representing the category of occurrenceable objects.\hypertarget{classHurricane_1_1Entity_secEntityId}{}\subsection{Unique Identifier}\label{classHurricane_1_1Entity_secEntityId} -Each \mbox{\hyperlink{classHurricane_1_1Entity}{Entity}} is associated with a unique identifier (see \mbox{\hyperlink{classHurricane_1_1Entity_aaff727ad7411392d4a991a56e2579a60}{Entity\+::get\+Id()}}). This identifier is used as a sorting key in the various Intrusive\+Map throughout \mbox{\hyperlink{namespaceHurricane}{Hurricane}} to ensure determinism. It came as a replacement of the object\textquotesingle{}s own address which is not suitable for this purpose. +Each \mbox{\hyperlink{classHurricane_1_1Entity}{Entity}} is associated with a unique identifier (see Entity\+::get\+Id()). This identifier is used as a sorting key in the various Intrusive\+Map throughout \mbox{\hyperlink{namespaceHurricane}{Hurricane}} to ensure determinism. It came as a replacement of the object\textquotesingle{}s own address which is not suitable for this purpose. -For S\+TL container, the \mbox{\hyperlink{structHurricane_1_1Entity_1_1CompareById}{Entity\+::\+Compare\+By\+Id}} functor is provided. +For S\+TL container, the \mbox{\hyperlink{classEntity_1_1CompareById}{Entity\+::\+Compare\+By\+Id}} functor is provided. The identifier is generated from an ever incrementing counter on 32 bits or 64 bits, depending on the target system architecture. If the 32/64 bit capacity is reached an exception is thrown. \subsection{Member Function Documentation} -\mbox{\Hypertarget{classHurricane_1_1Entity_aaff727ad7411392d4a991a56e2579a60}\label{classHurricane_1_1Entity_aaff727ad7411392d4a991a56e2579a60}} -\index{Hurricane\+::\+Entity@{Hurricane\+::\+Entity}!get\+Id@{get\+Id}} -\index{get\+Id@{get\+Id}!Hurricane\+::\+Entity@{Hurricane\+::\+Entity}} -\subsubsection{\texorpdfstring{get\+Id()}{getId()}} -{\footnotesize\ttfamily unsigned int Hurricane\+::\+Entity\+::get\+Id (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inline]}} - -{\bfseries Returns\+:} Returns the unique identifier of this \mbox{\hyperlink{classHurricane_1_1Entity}{Entity}}. \mbox{\Hypertarget{classHurricane_1_1Entity_a42bdf015f583be477cc54b48652b1007}\label{classHurricane_1_1Entity_a42bdf015f583be477cc54b48652b1007}} +\mbox{\Hypertarget{classHurricane_1_1Entity_a42bdf015f583be477cc54b48652b1007}\label{classHurricane_1_1Entity_a42bdf015f583be477cc54b48652b1007}} \index{Hurricane\+::\+Entity@{Hurricane\+::\+Entity}!get\+Cell@{get\+Cell}} \index{get\+Cell@{get\+Cell}!Hurricane\+::\+Entity@{Hurricane\+::\+Entity}} \subsubsection{\texorpdfstring{get\+Cell()}{getCell()}} diff --git a/hurricane/doc/hurricane/latex/classHurricane_1_1Interval.tex b/hurricane/doc/hurricane/latex/classHurricane_1_1Interval.tex index 9c76d890..a8319797 100644 --- a/hurricane/doc/hurricane/latex/classHurricane_1_1Interval.tex +++ b/hurricane/doc/hurricane/latex/classHurricane_1_1Interval.tex @@ -10,17 +10,17 @@ \item \mbox{\hyperlink{classHurricane_1_1Interval_a02b04ad7ca380422098992fa8ff5f546}{Interval}} (bool \mbox{\hyperlink{classHurricane_1_1Interval_a1e171021dcd5c0dc7e8afb0b2324c5ee}{make\+Empty}}=true) \item -\mbox{\hyperlink{classHurricane_1_1Interval_ac0f6c351e64e9be3e9a51e07dff10778}{Interval}} (const \mbox{\hyperlink{group__DbUGroup_ga4fbfa3e8c89347af76c9628ea06c4146}{Db\+U\+::\+Unit}} \&v) +\mbox{\hyperlink{classHurricane_1_1Interval_ace4173705b4dbcf6c00cd83bb61c4d43}{Interval}} (const \mbox{\hyperlink{group__DbUGroup_ga4fbfa3e8c89347af76c9628ea06c4146}{Db\+U\+::\+Unit}} \&) \item \mbox{\hyperlink{classHurricane_1_1Interval_a35e2ddc881a5b0c3ff8003d52f6298bb}{Interval}} (const \mbox{\hyperlink{group__DbUGroup_ga4fbfa3e8c89347af76c9628ea06c4146}{Db\+U\+::\+Unit}} \&v1, const \mbox{\hyperlink{group__DbUGroup_ga4fbfa3e8c89347af76c9628ea06c4146}{Db\+U\+::\+Unit}} \&v2) \item -\mbox{\hyperlink{classHurricane_1_1Interval_af1d588fcfe919e45be4334fdbd8a07a6}{Interval}} (const \mbox{\hyperlink{classHurricane_1_1Interval}{Interval}} \&interval) +\mbox{\hyperlink{classHurricane_1_1Interval_a2db3923eb057dd19f5320d93a09750d9}{Interval}} (const \mbox{\hyperlink{classHurricane_1_1Interval}{Interval}} \&) \item -\mbox{\hyperlink{classHurricane_1_1Interval}{Interval}} \& \mbox{\hyperlink{classHurricane_1_1Interval_a6d9eb898fa89218cec031f28d69a7d95}{operator=}} (const \mbox{\hyperlink{classHurricane_1_1Interval}{Interval}} \&interval) +\mbox{\hyperlink{classHurricane_1_1Interval}{Interval}} \& \mbox{\hyperlink{classHurricane_1_1Interval_a337b424cea8024f574726c3a2e4935b8}{operator=}} (const \mbox{\hyperlink{classHurricane_1_1Interval}{Interval}} \&) \item -bool \mbox{\hyperlink{classHurricane_1_1Interval_ad10b5fbbeb4531915a6031353e148edc}{operator==}} (const \mbox{\hyperlink{classHurricane_1_1Interval}{Interval}} \&interval) const +bool \mbox{\hyperlink{classHurricane_1_1Interval_a1b022ac0ad975f168ac2b2689e6368c3}{operator==}} (const \mbox{\hyperlink{classHurricane_1_1Interval}{Interval}} \&) const \item -bool \mbox{\hyperlink{classHurricane_1_1Interval_a2703ebb1e70d93d96ae8e29748c53d14}{operator!=}} (const \mbox{\hyperlink{classHurricane_1_1Interval}{Interval}} \&interval) const +bool \mbox{\hyperlink{classHurricane_1_1Interval_a2e5a64c485269fb08fb762e1eb3bc374}{operator!=}} (const \mbox{\hyperlink{classHurricane_1_1Interval}{Interval}} \&) const \item const \mbox{\hyperlink{group__DbUGroup_ga4fbfa3e8c89347af76c9628ea06c4146}{Db\+U\+::\+Unit}} \& \mbox{\hyperlink{classHurricane_1_1Interval_a6e0deb1b38065375a78c7fd6885b5909}{get\+V\+Min}} () const \item @@ -32,19 +32,19 @@ const \mbox{\hyperlink{group__DbUGroup_ga4fbfa3e8c89347af76c9628ea06c4146}{Db\+U \item \mbox{\hyperlink{group__DbUGroup_ga4fbfa3e8c89347af76c9628ea06c4146}{Db\+U\+::\+Unit}} \mbox{\hyperlink{classHurricane_1_1Interval_abe66d75c0854ca0a76189801f0f7d0e3}{get\+Half\+Size}} () const \item -\mbox{\hyperlink{classHurricane_1_1Interval}{Interval}} \mbox{\hyperlink{classHurricane_1_1Interval_adaddabee8381860b0d6913ce39bc1911}{get\+Union}} (const \mbox{\hyperlink{classHurricane_1_1Interval}{Interval}} \&interval) const +\mbox{\hyperlink{classHurricane_1_1Interval}{Interval}} \mbox{\hyperlink{classHurricane_1_1Interval_ac50b0e28faf03b54f81af109d942b569}{get\+Union}} (const \mbox{\hyperlink{classHurricane_1_1Interval}{Interval}} \&) const \item -\mbox{\hyperlink{classHurricane_1_1Interval}{Interval}} \mbox{\hyperlink{classHurricane_1_1Interval_ad9baf434d669fddf9cd30aa74e0c4486}{get\+Intersection}} (const \mbox{\hyperlink{classHurricane_1_1Interval}{Interval}} \&interval) const +\mbox{\hyperlink{classHurricane_1_1Interval}{Interval}} \mbox{\hyperlink{classHurricane_1_1Interval_a73130b484cf43ff3b48488780a926ead}{get\+Intersection}} (const \mbox{\hyperlink{classHurricane_1_1Interval}{Interval}} \&) const \item bool \mbox{\hyperlink{classHurricane_1_1Interval_a5bf0292743d02f861a194c48c823c7ce}{is\+Empty}} () const \item bool \mbox{\hyperlink{classHurricane_1_1Interval_acfc27bb7442f359db7d04c72fa8edeb8}{is\+Ponctual}} () const \item -bool \mbox{\hyperlink{classHurricane_1_1Interval_a1f58204f81cd59ae8345e0efd2482bbb}{contains}} (const \mbox{\hyperlink{group__DbUGroup_ga4fbfa3e8c89347af76c9628ea06c4146}{Db\+U\+::\+Unit}} \&v) const +bool \mbox{\hyperlink{classHurricane_1_1Interval_a84beba7ba34552e12e6cb9e462a94765}{contains}} (const \mbox{\hyperlink{group__DbUGroup_ga4fbfa3e8c89347af76c9628ea06c4146}{Db\+U\+::\+Unit}} \&) const \item -bool \mbox{\hyperlink{classHurricane_1_1Interval_ae86edb6867cf55459325cc35d971afbd}{contains}} (const \mbox{\hyperlink{classHurricane_1_1Interval}{Interval}} \&interval) const +bool \mbox{\hyperlink{classHurricane_1_1Interval_af613eb138f2035f50cba47057a074b2e}{contains}} (const \mbox{\hyperlink{classHurricane_1_1Interval}{Interval}} \&) const \item -bool \mbox{\hyperlink{classHurricane_1_1Interval_acbaccbdd6649a32dd457455d277370f8}{intersect}} (const \mbox{\hyperlink{classHurricane_1_1Interval}{Interval}} \&interval) const +bool \mbox{\hyperlink{classHurricane_1_1Interval_af4862b82fe5b37cdb3986a3b05245469}{intersect}} (const \mbox{\hyperlink{classHurricane_1_1Interval}{Interval}} \&, bool strict=false) const \item \mbox{\hyperlink{classHurricane_1_1Interval}{Interval}} \& \mbox{\hyperlink{classHurricane_1_1Interval_a1e171021dcd5c0dc7e8afb0b2324c5ee}{make\+Empty}} () \item @@ -52,15 +52,15 @@ bool \mbox{\hyperlink{classHurricane_1_1Interval_acbaccbdd6649a32dd457455d277370 \item \mbox{\hyperlink{classHurricane_1_1Interval}{Interval}} \& \mbox{\hyperlink{classHurricane_1_1Interval_ac311880a39d8e3db79bcbc5d3bb341a6}{inflate}} (const \mbox{\hyperlink{group__DbUGroup_ga4fbfa3e8c89347af76c9628ea06c4146}{Db\+U\+::\+Unit}} \&dv\+Min, const \mbox{\hyperlink{group__DbUGroup_ga4fbfa3e8c89347af76c9628ea06c4146}{Db\+U\+::\+Unit}} \&dv\+Max) \item -\mbox{\hyperlink{classHurricane_1_1Interval}{Interval}} \& \mbox{\hyperlink{classHurricane_1_1Interval_a927e2fbaa8f38a069c6308f7cacc8ab5}{merge}} (const \mbox{\hyperlink{group__DbUGroup_ga4fbfa3e8c89347af76c9628ea06c4146}{Db\+U\+::\+Unit}} \&v) +\mbox{\hyperlink{classHurricane_1_1Interval}{Interval}} \& \mbox{\hyperlink{classHurricane_1_1Interval_ab37a2b3ad247a0a5a4e4946d2b777bec}{merge}} (const \mbox{\hyperlink{group__DbUGroup_ga4fbfa3e8c89347af76c9628ea06c4146}{Db\+U\+::\+Unit}} \&) \item -\mbox{\hyperlink{classHurricane_1_1Interval}{Interval}} \& \mbox{\hyperlink{classHurricane_1_1Interval_ab6c2a46d4cb528ecb0d0eec2c4cec020}{merge}} (const \mbox{\hyperlink{classHurricane_1_1Interval}{Interval}} \&interval) +\mbox{\hyperlink{classHurricane_1_1Interval}{Interval}} \& \mbox{\hyperlink{classHurricane_1_1Interval_a99c17b60766c1146ad380ac9981008f7}{merge}} (const \mbox{\hyperlink{classHurricane_1_1Interval}{Interval}} \&) \item \mbox{\hyperlink{classHurricane_1_1Interval}{Interval}} \& \mbox{\hyperlink{classHurricane_1_1Interval_a0eeaaa7eb5b4ade89719c57a2c284909}{intersection}} (const \mbox{\hyperlink{group__DbUGroup_ga4fbfa3e8c89347af76c9628ea06c4146}{Db\+U\+::\+Unit}} \&v\+Min, const \mbox{\hyperlink{group__DbUGroup_ga4fbfa3e8c89347af76c9628ea06c4146}{Db\+U\+::\+Unit}} \&v\+Max) \item -\mbox{\hyperlink{classHurricane_1_1Interval}{Interval}} \& \mbox{\hyperlink{classHurricane_1_1Interval_a568a1e327e5e13d4b50ea16dab20b835}{intersection}} (const \mbox{\hyperlink{classHurricane_1_1Interval}{Interval}} \&interval) +\mbox{\hyperlink{classHurricane_1_1Interval}{Interval}} \& \mbox{\hyperlink{classHurricane_1_1Interval_aea3de219c9e8316e19d71d44428b8dc4}{intersection}} (const \mbox{\hyperlink{classHurricane_1_1Interval}{Interval}} \&) \item -\mbox{\hyperlink{classHurricane_1_1Interval}{Interval}} \& \mbox{\hyperlink{classHurricane_1_1Interval_aa2924c14832fd643bec8e8682faf7854}{translate}} (const \mbox{\hyperlink{group__DbUGroup_ga4fbfa3e8c89347af76c9628ea06c4146}{Db\+U\+::\+Unit}} \&dv) +\mbox{\hyperlink{classHurricane_1_1Interval}{Interval}} \& \mbox{\hyperlink{classHurricane_1_1Interval_acf0aab51a74fe1216bfe112999066466}{translate}} (const \mbox{\hyperlink{group__DbUGroup_ga4fbfa3e8c89347af76c9628ea06c4146}{Db\+U\+::\+Unit}} \&) \end{DoxyCompactItemize} @@ -78,7 +78,7 @@ All the function described in the chapter above return a reference on the modifi \subsubsection{\texorpdfstring{Interval()}{Interval()}\hspace{0.1cm}{\footnotesize\ttfamily [1/4]}} {\footnotesize\ttfamily Hurricane\+::\+Interval\+::\+Interval (\begin{DoxyParamCaption}\item[{bool}]{make\+Empty = {\ttfamily true} }\end{DoxyParamCaption})} -Default constructor \+: the returned interval is empty if {\bfseries make\+Empy} is set to {\bfseries true} (default) or full span otherwise. \mbox{\Hypertarget{classHurricane_1_1Interval_ac0f6c351e64e9be3e9a51e07dff10778}\label{classHurricane_1_1Interval_ac0f6c351e64e9be3e9a51e07dff10778}} +Default constructor \+: the returned interval is empty if {\bfseries make\+Empy} is set to {\bfseries true} (default) or full span otherwise. \mbox{\Hypertarget{classHurricane_1_1Interval_ace4173705b4dbcf6c00cd83bb61c4d43}\label{classHurricane_1_1Interval_ace4173705b4dbcf6c00cd83bb61c4d43}} \index{Hurricane\+::\+Interval@{Hurricane\+::\+Interval}!Interval@{Interval}} \index{Interval@{Interval}!Hurricane\+::\+Interval@{Hurricane\+::\+Interval}} \subsubsection{\texorpdfstring{Interval()}{Interval()}\hspace{0.1cm}{\footnotesize\ttfamily [2/4]}} @@ -90,7 +90,7 @@ Builds an interval of null size centered on the value defined by {\ttfamily $<$v \subsubsection{\texorpdfstring{Interval()}{Interval()}\hspace{0.1cm}{\footnotesize\ttfamily [3/4]}} {\footnotesize\ttfamily Hurricane\+::\+Interval\+::\+Interval (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{group__DbUGroup_ga4fbfa3e8c89347af76c9628ea06c4146}{Db\+U\+::\+Unit}} \&}]{v1, }\item[{const \mbox{\hyperlink{group__DbUGroup_ga4fbfa3e8c89347af76c9628ea06c4146}{Db\+U\+::\+Unit}} \&}]{v2 }\end{DoxyParamCaption})} -Builds the minimal interval enclosing the two values defined by {\ttfamily $<$v1$>$} and {\ttfamily $<$v2$>$}. \mbox{\Hypertarget{classHurricane_1_1Interval_af1d588fcfe919e45be4334fdbd8a07a6}\label{classHurricane_1_1Interval_af1d588fcfe919e45be4334fdbd8a07a6}} +Builds the minimal interval enclosing the two values defined by {\ttfamily $<$v1$>$} and {\ttfamily $<$v2$>$}. \mbox{\Hypertarget{classHurricane_1_1Interval_a2db3923eb057dd19f5320d93a09750d9}\label{classHurricane_1_1Interval_a2db3923eb057dd19f5320d93a09750d9}} \index{Hurricane\+::\+Interval@{Hurricane\+::\+Interval}!Interval@{Interval}} \index{Interval@{Interval}!Hurricane\+::\+Interval@{Hurricane\+::\+Interval}} \subsubsection{\texorpdfstring{Interval()}{Interval()}\hspace{0.1cm}{\footnotesize\ttfamily [4/4]}} @@ -99,13 +99,13 @@ Builds the minimal interval enclosing the two values defined by {\ttfamily $<$v1 Copy constructor. \subsection{Member Function Documentation} -\mbox{\Hypertarget{classHurricane_1_1Interval_a6d9eb898fa89218cec031f28d69a7d95}\label{classHurricane_1_1Interval_a6d9eb898fa89218cec031f28d69a7d95}} +\mbox{\Hypertarget{classHurricane_1_1Interval_a337b424cea8024f574726c3a2e4935b8}\label{classHurricane_1_1Interval_a337b424cea8024f574726c3a2e4935b8}} \index{Hurricane\+::\+Interval@{Hurricane\+::\+Interval}!operator=@{operator=}} \index{operator=@{operator=}!Hurricane\+::\+Interval@{Hurricane\+::\+Interval}} \subsubsection{\texorpdfstring{operator=()}{operator=()}} {\footnotesize\ttfamily \mbox{\hyperlink{classHurricane_1_1Interval}{Interval}} \& Hurricane\+::\+Interval\+::operator= (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classHurricane_1_1Interval}{Interval}} \&}]{interval }\end{DoxyParamCaption})} -Assignment operator. \mbox{\Hypertarget{classHurricane_1_1Interval_ad10b5fbbeb4531915a6031353e148edc}\label{classHurricane_1_1Interval_ad10b5fbbeb4531915a6031353e148edc}} +Assignment operator. \mbox{\Hypertarget{classHurricane_1_1Interval_a1b022ac0ad975f168ac2b2689e6368c3}\label{classHurricane_1_1Interval_a1b022ac0ad975f168ac2b2689e6368c3}} \index{Hurricane\+::\+Interval@{Hurricane\+::\+Interval}!operator==@{operator==}} \index{operator==@{operator==}!Hurricane\+::\+Interval@{Hurricane\+::\+Interval}} \subsubsection{\texorpdfstring{operator==()}{operator==()}} @@ -116,7 +116,7 @@ Equality operator. \begin{DoxyParagraph}{Remark\+: Two empty intervals are always different. } \end{DoxyParagraph} -\mbox{\Hypertarget{classHurricane_1_1Interval_a2703ebb1e70d93d96ae8e29748c53d14}\label{classHurricane_1_1Interval_a2703ebb1e70d93d96ae8e29748c53d14}} +\mbox{\Hypertarget{classHurricane_1_1Interval_a2e5a64c485269fb08fb762e1eb3bc374}\label{classHurricane_1_1Interval_a2e5a64c485269fb08fb762e1eb3bc374}} \index{Hurricane\+::\+Interval@{Hurricane\+::\+Interval}!operator"!=@{operator"!=}} \index{operator"!=@{operator"!=}!Hurricane\+::\+Interval@{Hurricane\+::\+Interval}} \subsubsection{\texorpdfstring{operator"!=()}{operator!=()}} @@ -164,13 +164,13 @@ Referenced by get\+Half\+Size(). References get\+Size(). -\mbox{\Hypertarget{classHurricane_1_1Interval_adaddabee8381860b0d6913ce39bc1911}\label{classHurricane_1_1Interval_adaddabee8381860b0d6913ce39bc1911}} +\mbox{\Hypertarget{classHurricane_1_1Interval_ac50b0e28faf03b54f81af109d942b569}\label{classHurricane_1_1Interval_ac50b0e28faf03b54f81af109d942b569}} \index{Hurricane\+::\+Interval@{Hurricane\+::\+Interval}!get\+Union@{get\+Union}} \index{get\+Union@{get\+Union}!Hurricane\+::\+Interval@{Hurricane\+::\+Interval}} \subsubsection{\texorpdfstring{get\+Union()}{getUnion()}} {\footnotesize\ttfamily \mbox{\hyperlink{classHurricane_1_1Interval}{Interval}} Hurricane\+::\+Interval\+::get\+Union (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classHurricane_1_1Interval}{Interval}} \&}]{interval }\end{DoxyParamCaption}) const} -{\bfseries Returns\+:} the smallest enclosing interval containing the intervals {\ttfamily $<$this$>$} and {\ttfamily $<$interval$>$}. The returned interval may be empty if both are. \mbox{\Hypertarget{classHurricane_1_1Interval_ad9baf434d669fddf9cd30aa74e0c4486}\label{classHurricane_1_1Interval_ad9baf434d669fddf9cd30aa74e0c4486}} +{\bfseries Returns\+:} the smallest enclosing interval containing the intervals {\ttfamily $<$this$>$} and {\ttfamily $<$interval$>$}. The returned interval may be empty if both are. \mbox{\Hypertarget{classHurricane_1_1Interval_a73130b484cf43ff3b48488780a926ead}\label{classHurricane_1_1Interval_a73130b484cf43ff3b48488780a926ead}} \index{Hurricane\+::\+Interval@{Hurricane\+::\+Interval}!get\+Intersection@{get\+Intersection}} \index{get\+Intersection@{get\+Intersection}!Hurricane\+::\+Interval@{Hurricane\+::\+Interval}} \subsubsection{\texorpdfstring{get\+Intersection()}{getIntersection()}} @@ -192,23 +192,23 @@ Referenced by get\+Size(). \subsubsection{\texorpdfstring{is\+Ponctual()}{isPonctual()}} {\footnotesize\ttfamily bool Hurricane\+::\+Interval\+::is\+Ponctual (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inline]}} -{\bfseries Returns\+:} {\bfseries true} if the interval is reduced to a value, else {\bfseries false}. \mbox{\Hypertarget{classHurricane_1_1Interval_a1f58204f81cd59ae8345e0efd2482bbb}\label{classHurricane_1_1Interval_a1f58204f81cd59ae8345e0efd2482bbb}} +{\bfseries Returns\+:} {\bfseries true} if the interval is reduced to a value, else {\bfseries false}. \mbox{\Hypertarget{classHurricane_1_1Interval_a84beba7ba34552e12e6cb9e462a94765}\label{classHurricane_1_1Interval_a84beba7ba34552e12e6cb9e462a94765}} \index{Hurricane\+::\+Interval@{Hurricane\+::\+Interval}!contains@{contains}} \index{contains@{contains}!Hurricane\+::\+Interval@{Hurricane\+::\+Interval}} \subsubsection{\texorpdfstring{contains()}{contains()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}} {\footnotesize\ttfamily bool Hurricane\+::\+Interval\+::contains (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{group__DbUGroup_ga4fbfa3e8c89347af76c9628ea06c4146}{Db\+U\+::\+Unit}} \&}]{v }\end{DoxyParamCaption}) const} -{\bfseries Returns\+:} {\bfseries true} if the interval is non empty and contains the value defined by {\ttfamily $<$v$>$} else {\bfseries false}. \mbox{\Hypertarget{classHurricane_1_1Interval_ae86edb6867cf55459325cc35d971afbd}\label{classHurricane_1_1Interval_ae86edb6867cf55459325cc35d971afbd}} +{\bfseries Returns\+:} {\bfseries true} if the interval is non empty and contains the value defined by {\ttfamily $<$v$>$} else {\bfseries false}. \mbox{\Hypertarget{classHurricane_1_1Interval_af613eb138f2035f50cba47057a074b2e}\label{classHurricane_1_1Interval_af613eb138f2035f50cba47057a074b2e}} \index{Hurricane\+::\+Interval@{Hurricane\+::\+Interval}!contains@{contains}} \index{contains@{contains}!Hurricane\+::\+Interval@{Hurricane\+::\+Interval}} \subsubsection{\texorpdfstring{contains()}{contains()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}} {\footnotesize\ttfamily bool Hurricane\+::\+Interval\+::contains (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classHurricane_1_1Interval}{Interval}} \&}]{interval }\end{DoxyParamCaption}) const} -{\bfseries Returns\+:} {\bfseries true} if the two intervals are non empty and if the interval {\ttfamily $<$this$>$} contains the interval {\ttfamily $<$interval$>$}, else {\bfseries false}. \mbox{\Hypertarget{classHurricane_1_1Interval_acbaccbdd6649a32dd457455d277370f8}\label{classHurricane_1_1Interval_acbaccbdd6649a32dd457455d277370f8}} +{\bfseries Returns\+:} {\bfseries true} if the two intervals are non empty and if the interval {\ttfamily $<$this$>$} contains the interval {\ttfamily $<$interval$>$}, else {\bfseries false}. \mbox{\Hypertarget{classHurricane_1_1Interval_af4862b82fe5b37cdb3986a3b05245469}\label{classHurricane_1_1Interval_af4862b82fe5b37cdb3986a3b05245469}} \index{Hurricane\+::\+Interval@{Hurricane\+::\+Interval}!intersect@{intersect}} \index{intersect@{intersect}!Hurricane\+::\+Interval@{Hurricane\+::\+Interval}} \subsubsection{\texorpdfstring{intersect()}{intersect()}} -{\footnotesize\ttfamily bool Hurricane\+::\+Interval\+::intersect (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classHurricane_1_1Interval}{Interval}} \&}]{interval }\end{DoxyParamCaption}) const} +{\footnotesize\ttfamily bool Hurricane\+::\+Interval\+::intersect (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classHurricane_1_1Interval}{Interval}} \&}]{, }\item[{bool}]{strict = {\ttfamily false} }\end{DoxyParamCaption}) const} {\bfseries Returns\+:} {\bfseries true} if the two intervals are non empty and if they overlap, else {\bfseries false}. \mbox{\Hypertarget{classHurricane_1_1Interval_a1e171021dcd5c0dc7e8afb0b2324c5ee}\label{classHurricane_1_1Interval_a1e171021dcd5c0dc7e8afb0b2324c5ee}} \index{Hurricane\+::\+Interval@{Hurricane\+::\+Interval}!make\+Empty@{make\+Empty}} @@ -228,13 +228,13 @@ Expands (or contracts) the interval, if not empty, in each direction of the quan \subsubsection{\texorpdfstring{inflate()}{inflate()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}} {\footnotesize\ttfamily \mbox{\hyperlink{classHurricane_1_1Interval}{Interval}} \& Hurricane\+::\+Interval\+::inflate (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{group__DbUGroup_ga4fbfa3e8c89347af76c9628ea06c4146}{Db\+U\+::\+Unit}} \&}]{dv\+Min, }\item[{const \mbox{\hyperlink{group__DbUGroup_ga4fbfa3e8c89347af76c9628ea06c4146}{Db\+U\+::\+Unit}} \&}]{dv\+Max }\end{DoxyParamCaption})} -Expands (or contracts) the interval, if not empty, on the left of the quantity {\ttfamily $<$dv\+Min$>$} and on the right of the quantity {\ttfamily $<$dv\+Max$>$}. Those quantities might be negative enough to transform it into an empty interval. \mbox{\Hypertarget{classHurricane_1_1Interval_a927e2fbaa8f38a069c6308f7cacc8ab5}\label{classHurricane_1_1Interval_a927e2fbaa8f38a069c6308f7cacc8ab5}} +Expands (or contracts) the interval, if not empty, on the left of the quantity {\ttfamily $<$dv\+Min$>$} and on the right of the quantity {\ttfamily $<$dv\+Max$>$}. Those quantities might be negative enough to transform it into an empty interval. \mbox{\Hypertarget{classHurricane_1_1Interval_ab37a2b3ad247a0a5a4e4946d2b777bec}\label{classHurricane_1_1Interval_ab37a2b3ad247a0a5a4e4946d2b777bec}} \index{Hurricane\+::\+Interval@{Hurricane\+::\+Interval}!merge@{merge}} \index{merge@{merge}!Hurricane\+::\+Interval@{Hurricane\+::\+Interval}} \subsubsection{\texorpdfstring{merge()}{merge()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}} {\footnotesize\ttfamily \mbox{\hyperlink{classHurricane_1_1Interval}{Interval}} \& Hurricane\+::\+Interval\+::merge (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{group__DbUGroup_ga4fbfa3e8c89347af76c9628ea06c4146}{Db\+U\+::\+Unit}} \&}]{v }\end{DoxyParamCaption})} -Expands the interval in order that it encloses the value defined {\ttfamily $<$v$>$}. If the interval was initially empty it becomes reduced to the enclosed value. \mbox{\Hypertarget{classHurricane_1_1Interval_ab6c2a46d4cb528ecb0d0eec2c4cec020}\label{classHurricane_1_1Interval_ab6c2a46d4cb528ecb0d0eec2c4cec020}} +Expands the interval in order that it encloses the value defined {\ttfamily $<$v$>$}. If the interval was initially empty it becomes reduced to the enclosed value. \mbox{\Hypertarget{classHurricane_1_1Interval_a99c17b60766c1146ad380ac9981008f7}\label{classHurricane_1_1Interval_a99c17b60766c1146ad380ac9981008f7}} \index{Hurricane\+::\+Interval@{Hurricane\+::\+Interval}!merge@{merge}} \index{merge@{merge}!Hurricane\+::\+Interval@{Hurricane\+::\+Interval}} \subsubsection{\texorpdfstring{merge()}{merge()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}} @@ -246,13 +246,13 @@ Expands the interval in order that it encloses, if not empty, the interval {\ttf \subsubsection{\texorpdfstring{intersection()}{intersection()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}} {\footnotesize\ttfamily \mbox{\hyperlink{classHurricane_1_1Interval}{Interval}} \& Hurricane\+::\+Interval\+::intersection (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{group__DbUGroup_ga4fbfa3e8c89347af76c9628ea06c4146}{Db\+U\+::\+Unit}} \&}]{v\+Min, }\item[{const \mbox{\hyperlink{group__DbUGroup_ga4fbfa3e8c89347af76c9628ea06c4146}{Db\+U\+::\+Unit}} \&}]{v\+Max }\end{DoxyParamCaption})} -The interval becomes the intersection of itself and {\bfseries \mbox{[}v\+Min,v\+Max\mbox{]}}. \mbox{\Hypertarget{classHurricane_1_1Interval_a568a1e327e5e13d4b50ea16dab20b835}\label{classHurricane_1_1Interval_a568a1e327e5e13d4b50ea16dab20b835}} +The interval becomes the intersection of itself and {\bfseries \mbox{[}v\+Min,v\+Max\mbox{]}}. \mbox{\Hypertarget{classHurricane_1_1Interval_aea3de219c9e8316e19d71d44428b8dc4}\label{classHurricane_1_1Interval_aea3de219c9e8316e19d71d44428b8dc4}} \index{Hurricane\+::\+Interval@{Hurricane\+::\+Interval}!intersection@{intersection}} \index{intersection@{intersection}!Hurricane\+::\+Interval@{Hurricane\+::\+Interval}} \subsubsection{\texorpdfstring{intersection()}{intersection()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}} {\footnotesize\ttfamily \mbox{\hyperlink{classHurricane_1_1Interval}{Interval}} \& Hurricane\+::\+Interval\+::intersection (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classHurricane_1_1Interval}{Interval}} \&}]{interval }\end{DoxyParamCaption})} -The interval becomes the intersection of itself and {\bfseries interval}. \mbox{\Hypertarget{classHurricane_1_1Interval_aa2924c14832fd643bec8e8682faf7854}\label{classHurricane_1_1Interval_aa2924c14832fd643bec8e8682faf7854}} +The interval becomes the intersection of itself and {\bfseries interval}. \mbox{\Hypertarget{classHurricane_1_1Interval_acf0aab51a74fe1216bfe112999066466}\label{classHurricane_1_1Interval_acf0aab51a74fe1216bfe112999066466}} \index{Hurricane\+::\+Interval@{Hurricane\+::\+Interval}!translate@{translate}} \index{translate@{translate}!Hurricane\+::\+Interval@{Hurricane\+::\+Interval}} \subsubsection{\texorpdfstring{translate()}{translate()}} diff --git a/hurricane/doc/hurricane/latex/hierarchy.tex b/hurricane/doc/hurricane/latex/hierarchy.tex index 192e9c2c..4fde8e3f 100644 --- a/hurricane/doc/hurricane/latex/hierarchy.tex +++ b/hurricane/doc/hurricane/latex/hierarchy.tex @@ -19,7 +19,7 @@ This inheritance list is sorted roughly, but not completely, alphabetically\+:\b \begin{DoxyCompactList} \item \contentsline{section}{Hurricane\+:\+:Sub\+Type\+Collection$<$ Type, Sub\+Type $>$}{\pageref{classHurricane_1_1SubTypeCollection}}{} \end{DoxyCompactList} -\item \contentsline{section}{Hurricane\+:\+:Entity\+:\+:Compare\+By\+Id}{\pageref{structHurricane_1_1Entity_1_1CompareById}}{} +\item \contentsline{section}{Entity\+:\+:Compare\+By\+Id}{\pageref{classEntity_1_1CompareById}}{} \item \contentsline{section}{Hurricane\+:\+:D\+Bo}{\pageref{classHurricane_1_1DBo}}{} \begin{DoxyCompactList} \item \contentsline{section}{Hurricane\+:\+:Data\+Base}{\pageref{classHurricane_1_1DataBase}}{} diff --git a/hurricane/doc/hurricane/latex/refman.tex b/hurricane/doc/hurricane/latex/refman.tex index 8834060a..7eb04317 100644 --- a/hurricane/doc/hurricane/latex/refman.tex +++ b/hurricane/doc/hurricane/latex/refman.tex @@ -34,7 +34,7 @@ \vspace*{1cm} {\large Generated by Doxygen 1.8.14}\\ \vspace*{0.5cm} - {\small Fri Oct 19 2018 09:33:19}\\ + {\small Sun May 26 2019 17:26:51}\\ \end{center} \end{titlepage} @@ -69,7 +69,7 @@ \input{classHurricane_1_1Box} \input{classHurricane_1_1Cell} \input{classHurricane_1_1Collection} -\input{structHurricane_1_1Entity_1_1CompareById} +\input{classEntity_1_1CompareById} \input{classHurricane_1_1Component} \input{classHurricane_1_1Contact} \input{classHurricane_1_1ContactLayer} diff --git a/hurricane/doc/viewer/html/CellImage_8h_source.html b/hurricane/doc/viewer/html/CellImage_8h_source.html index c70f09c4..9330c6cb 100644 --- a/hurricane/doc/viewer/html/CellImage_8h_source.html +++ b/hurricane/doc/viewer/html/CellImage_8h_source.html @@ -54,7 +54,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/viewer/html/CellPrinter_8h_source.html b/hurricane/doc/viewer/html/CellPrinter_8h_source.html index 3c9d7950..7669f4aa 100644 --- a/hurricane/doc/viewer/html/CellPrinter_8h_source.html +++ b/hurricane/doc/viewer/html/CellPrinter_8h_source.html @@ -54,7 +54,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/viewer/html/CellViewer_8h_source.html b/hurricane/doc/viewer/html/CellViewer_8h_source.html index f77484e2..ade78a64 100644 --- a/hurricane/doc/viewer/html/CellViewer_8h_source.html +++ b/hurricane/doc/viewer/html/CellViewer_8h_source.html @@ -44,16 +44,16 @@ $(function() {
      CellViewer.h
      -
      1 // -*- C++ -*-
      2 //
      3 // This file is part of the Coriolis Software.
      4 // Copyright (c) UPMC 2008-2018, All Rights Reserved
      5 //
      6 // +-----------------------------------------------------------------+
      7 // | H U R R I C A N E |
      8 // | V L S I B a c k e n d D a t a - B a s e |
      9 // | |
      10 // | Author : Jean-Paul CHAPUT |
      11 // | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
      12 // | =============================================================== |
      13 // | C++ Header : "./hurricane/viewer/CellViewer.h" |
      14 // +-----------------------------------------------------------------+
      15 
      16 
      17 #ifndef HURRICANE_CELL_VIEWER_H
      18 #define HURRICANE_CELL_VIEWER_H
      19 
      20 #include <list>
      21 #include <map>
      22 #include <functional>
      23 #include <boost/any.hpp>
      24 
      25 #include <QIcon>
      26 #include <QMainWindow>
      27 class QEvent;
      28 class QKeyEvent;
      29 class QAction;
      30 class QMenu;
      31 class QPrinter;
      32 
      33 #include "hurricane/Commons.h"
      34 #include "hurricane/Observer.h"
      35 #include "hurricane/Name.h"
      36 #include "hurricane/Occurrence.h"
      37 #include "hurricane/viewer/MoveCommand.h"
      38 #include "hurricane/viewer/ZoomCommand.h"
      39 #include "hurricane/viewer/RulerCommand.h"
      40 #include "hurricane/viewer/SelectCommand.h"
      41 #include "hurricane/viewer/HierarchyCommand.h"
      42 #include "hurricane/viewer/CellWidget.h"
      43 
      44 
      45 namespace Hurricane {
      46 
      47 
      48  class Cell;
      49 //class MapView;
      50  class GotoWidget;
      51  class MousePositionWidget;
      52  class ControllerWidget;
      53  class ScriptWidget;
      54  class CellViewer;
      55 
      56 
      57 // -------------------------------------------------------------------
      58 // Class : "CellObserver".
      59 
      60  // class CellObserver : public Observer<CellViewer> {
      61  // public:
      62  // inline CellObserver ( CellViewer* );
      63  // virtual void notify ( unsigned int flags );
      64  // private:
      65  // CellObserver ( const CellObserver& );
      66  // };
      67 
      68 
      69  // inline CellObserver::CellObserver ( CellViewer* owner )
      70  // : Observer<CellViewer>(owner)
      71  // { }
      72 
      73 
      74 // -------------------------------------------------------------------
      75 // Class : "CellViewer".
      76 
      77  class CellViewer : public QMainWindow {
      78  Q_OBJECT;
      79 
      80  public:
      81  enum { CellHistorySize = 10 };
      82  enum Flag { InCellChange = 0x0001 };
      83  enum FunctionFlag { NoFlags = 0x0000
      84  , TopMenu = 0x0001 };
      85  private:
      86  typedef std::map< const QString, boost::any > ActionLut;
      87  typedef bool (QWidget::* SlotMethod)();
      88  public:
      89  static void notify ( CellViewer*, unsigned int flags );
      90  public:
      91  CellViewer ( QWidget* parent=NULL );
      92  virtual ~CellViewer ();
      93  inline bool isToolInterrupted () const;
      94  QMenu* createDebugMenu ();
      95  bool hasMenu ( const QString& path ) const;
      96  bool hasMenuAction ( const QString& path ) const;
      97  QMenu* addMenu ( const QString& path
      98  , std::string text
      99  , unsigned int flags=NoFlags
      100  );
      101  bool addToMenu ( const QString& path );
      102  QAction* addToMenu ( const QString& path
      103  , std::string text
      104  , std::string textTip
      105  , std::function< void() >
      106  , QIcon icon=QIcon() );
      107  QAction* addToMenu ( const QString& path
      108  , std::string text
      109  , std::string textTip
      110  , std::string scriptPath );
      111  QAction* addToMenu ( QString path
      112  , QString text
      113  , QString textTip
      114  , const QKeySequence& shortCut
      115  , QIcon icon =QIcon());
      116  inline void setEnableRedrawInterrupt ( bool );
      117  inline void setApplicationName ( const QString& );
      118  inline Observer<CellViewer>* getCellObserver ();
      119  Cell* getCell () const;
      120  virtual void setCell ( Cell* );
      121  void renameCell ( const char* );
      122  virtual Cell* getCellFromDb ( const char* );
      123  inline CellWidget* getCellWidget ();
      124  inline const CellWidget* getCellWidget () const;
      125  inline ControllerWidget* getControllerWidget ();
      126  void setAnonNetSelectable ( bool );
      127  void select ( Occurrence& );
      128  void unselect ( Occurrence& );
      129  void unselectAll ();
      130  inline void setLayerVisible ( const Name& layer, bool visible );
      131  void runScript ( QString scriptPath );
      132  virtual CellViewer* vcreate () const;
      133  virtual std::string _getString () const;
      134  public slots:
      135  void doAction ();
      136  void doGoto ();
      137  void changeSelectionMode ();
      138  void setShowSelection ( bool );
      139  void setState ( shared_ptr<CellWidget::State>& );
      140  void removeHistory ( Cell* );
      141  void openHistoryCell ();
      142  void openDesignBlob ();
      143  void saveDesignBlob ();
      144  void printDisplay ();
      145  void print ( QPrinter* );
      146  void imageDisplay ();
      147  void raiseToolInterrupt ();
      148  void clearToolInterrupt ();
      149  void runScriptWidget ();
      150  void runStressScript ();
      151  inline void emitCellAboutToChange ();
      152  inline void emitCellChanged ();
      153  inline void emitCellPreModificated ();
      154  inline void emitCellPostModificated ();
      155  signals:
      156  void cellLoadedFromDisk ( Cell* );
      157  void showSelectionToggled ( bool );
      158  void stateChanged ( shared_ptr<CellWidget::State>& );
      159  void redrawCellWidget ();
      160  void cellPreModificated ();
      161  void cellPostModificated ();
      162  protected:
      163  void createMenus ();
      164  void refreshTitle ();
      165  void refreshHistory ();
      166  void rebuildHistory ();
      167  private:
      168  QString _getAbsWidgetPath ( const QString& relPath ) const;
      169  QMenu* _getParentMenu ( const QString& ) const;
      170  void _runScript ( QString scriptPath );
      171 
      172  protected:
      173  static QString _prefixWPath;
      174  Observer<CellViewer> _cellObserver;
      175  QString _applicationName;
      176  QAction* _openAction;
      177  QAction* _cellHistoryAction[CellHistorySize];
      178  QAction* _showSelectionAction;
      179  QMenu* _debugMenu;
      180  ActionLut _actionCallbacks;
      181  // MapView* _mapView;
      182  MousePositionWidget* _mousePosition;
      183  ControllerWidget* _controller;
      184  ScriptWidget* _script;
      185  GotoWidget* _goto;
      186  CellWidget* _cellWidget;
      187  MoveCommand _moveCommand;
      188  ZoomCommand _zoomCommand;
      189  RulerCommand _rulerCommand;
      190  SelectCommand _selectCommand;
      191  HierarchyCommand _hierarchyCommand;
      192  list< shared_ptr<CellWidget::State> >
      193  _cellHistory;
      194  bool _firstShow;
      195  bool _toolInterrupt;
      196  unsigned int _flags;
      197  UpdateState _updateState;
      198  QString _pyScriptName;
      199  };
      200 
      201 
      202 // Inline Functions.
      203  inline bool CellViewer::isToolInterrupted () const { return _toolInterrupt; }
      204  inline Observer<CellViewer>* CellViewer::getCellObserver () { return &_cellObserver; }
      205  inline CellWidget* CellViewer::getCellWidget () { return _cellWidget; }
      206  inline const CellWidget* CellViewer::getCellWidget () const { return _cellWidget; }
      207  inline ControllerWidget* CellViewer::getControllerWidget () { return _controller; }
      208  inline void CellViewer::setApplicationName ( const QString& name ) { _applicationName = name; }
      209  inline void CellViewer::setLayerVisible ( const Name& layer, bool visible ) { _cellWidget->setLayerVisible(layer,visible); }
      210  inline void CellViewer::emitCellAboutToChange () { _flags |= InCellChange; emit cellPreModificated(); }
      211  inline void CellViewer::emitCellChanged () { _flags &= ~InCellChange; emit cellPostModificated(); }
      212  inline void CellViewer::emitCellPreModificated () { emit cellPreModificated(); }
      213  inline void CellViewer::emitCellPostModificated () { emit cellPostModificated(); }
      214 
      215  inline void CellViewer::setEnableRedrawInterrupt ( bool state )
      216  { _cellWidget->setEnableRedrawInterrupt(state); }
      217 
      218 
      219 } // Hurricane namespace.
      220 
      221 
      222 GETSTRING_POINTER_SUPPORT(Hurricane::CellViewer)
      223 IOSTREAM_POINTER_SUPPORT(Hurricane::CellViewer)
      224 
      225 
      226 #endif
      +
      1 // -*- C++ -*-
      2 //
      3 // This file is part of the Coriolis Software.
      4 // Copyright (c) UPMC 2008-2018, All Rights Reserved
      5 //
      6 // +-----------------------------------------------------------------+
      7 // | H U R R I C A N E |
      8 // | V L S I B a c k e n d D a t a - B a s e |
      9 // | |
      10 // | Author : Jean-Paul CHAPUT |
      11 // | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
      12 // | =============================================================== |
      13 // | C++ Header : "./hurricane/viewer/CellViewer.h" |
      14 // +-----------------------------------------------------------------+
      15 
      16 
      17 #ifndef HURRICANE_CELL_VIEWER_H
      18 #define HURRICANE_CELL_VIEWER_H
      19 
      20 #include <list>
      21 #include <map>
      22 #include <functional>
      23 #include <boost/any.hpp>
      24 
      25 #include <QIcon>
      26 #include <QMainWindow>
      27 class QEvent;
      28 class QKeyEvent;
      29 class QAction;
      30 class QMenu;
      31 class QPrinter;
      32 
      33 #include "hurricane/Commons.h"
      34 #include "hurricane/Observer.h"
      35 #include "hurricane/Name.h"
      36 #include "hurricane/Occurrence.h"
      37 #include "hurricane/viewer/MoveCommand.h"
      38 #include "hurricane/viewer/ZoomCommand.h"
      39 #include "hurricane/viewer/RulerCommand.h"
      40 #include "hurricane/viewer/SelectCommand.h"
      41 #include "hurricane/viewer/HierarchyCommand.h"
      42 #include "hurricane/viewer/CellWidget.h"
      43 
      44 
      45 namespace Hurricane {
      46 
      47 
      48  class Cell;
      49 //class MapView;
      50  class GotoWidget;
      51  class MousePositionWidget;
      52  class ControllerWidget;
      53  class ScriptWidget;
      54  class CellViewer;
      55 
      56 
      57 // -------------------------------------------------------------------
      58 // Class : "CellObserver".
      59 
      60  // class CellObserver : public Observer<CellViewer> {
      61  // public:
      62  // inline CellObserver ( CellViewer* );
      63  // virtual void notify ( unsigned int flags );
      64  // private:
      65  // CellObserver ( const CellObserver& );
      66  // };
      67 
      68 
      69  // inline CellObserver::CellObserver ( CellViewer* owner )
      70  // : Observer<CellViewer>(owner)
      71  // { }
      72 
      73 
      74 // -------------------------------------------------------------------
      75 // Class : "CellViewer".
      76 
      77  class CellViewer : public QMainWindow {
      78  Q_OBJECT;
      79 
      80  public:
      81  enum { CellHistorySize = 10 };
      82  enum Flag { InCellChange = 0x0001 };
      83  enum FunctionFlag { NoFlags = 0x0000
      84  , TopMenu = 0x0001 };
      85  private:
      86  typedef std::map< const QString, boost::any > ActionLut;
      87  typedef bool (QWidget::* SlotMethod)();
      88  public:
      89  static void notify ( CellViewer*, unsigned int flags );
      90  public:
      91  CellViewer ( QWidget* parent=NULL );
      92  virtual ~CellViewer ();
      93  inline bool isToolInterrupted () const;
      94  QMenu* createDebugMenu ();
      95  bool hasMenu ( const QString& path ) const;
      96  bool hasMenuAction ( const QString& path ) const;
      97  QAction* getMenuAction ( const QString& path ) const;
      98  QAction* addMenu ( const QString& path
      99  , std::string text
      100  , unsigned int flags=NoFlags
      101  );
      102  bool addToMenu ( const QString& path
      103  , QString beforePath="" );
      104  QAction* addToMenu ( const QString& path
      105  , std::string text
      106  , std::string textTip
      107  , std::function< void() >
      108  , QIcon icon=QIcon()
      109  , QString beforePath="" );
      110  QAction* addToMenu ( const QString& path
      111  , std::string text
      112  , std::string textTip
      113  , std::string scriptPath
      114  , QString beforePath="" );
      115  QAction* addToMenu ( QString path
      116  , QString text
      117  , QString textTip
      118  , const QKeySequence& shortCut
      119  , QIcon icon =QIcon()
      120  , QString beforePath="" );
      121  inline void setEnableRedrawInterrupt ( bool );
      122  inline void setApplicationName ( const QString& );
      123  inline Observer<CellViewer>* getCellObserver ();
      124  Cell* getCell () const;
      125  virtual void setCell ( Cell* );
      126  void renameCell ( const char* );
      127  virtual Cell* getCellFromDb ( const char* );
      128  inline CellWidget* getCellWidget ();
      129  inline const CellWidget* getCellWidget () const;
      130  inline ControllerWidget* getControllerWidget ();
      131  void setAnonNetSelectable ( bool );
      132  void select ( Occurrence& );
      133  void unselect ( Occurrence& );
      134  void unselectAll ();
      135  inline void setLayerVisible ( const Name& layer, bool visible );
      136  void runScript ( QString scriptPath );
      137  virtual CellViewer* vcreate () const;
      138  virtual std::string _getString () const;
      139  public slots:
      140  void doAction ();
      141  void doGoto ();
      142  void changeSelectionMode ();
      143  void setShowSelection ( bool );
      144  void setState ( shared_ptr<CellWidget::State>& );
      145  void removeHistory ( Cell* );
      146  void openHistoryCell ();
      147  void openDesignBlob ();
      148  void saveDesignBlob ();
      149  void printDisplay ();
      150  void print ( QPrinter* );
      151  void imageDisplay ();
      152  void raiseToolInterrupt ();
      153  void clearToolInterrupt ();
      154  void runScriptWidget ();
      155  void runStressScript ();
      156  inline void emitCellAboutToChange ();
      157  inline void emitCellChanged ();
      158  inline void emitCellPreModificated ();
      159  inline void emitCellPostModificated ();
      160  signals:
      161  void cellLoadedFromDisk ( Cell* );
      162  void showSelectionToggled ( bool );
      163  void stateChanged ( shared_ptr<CellWidget::State>& );
      164  void redrawCellWidget ();
      165  void cellPreModificated ();
      166  void cellPostModificated ();
      167  protected:
      168  void createMenus ();
      169  void refreshTitle ();
      170  void refreshHistory ();
      171  void rebuildHistory ();
      172  private:
      173  QString _getAbsWidgetPath ( const QString& relPath ) const;
      174  QAction* _getParentMenu ( const QString& ) const;
      175  void _runScript ( QString scriptPath );
      176 
      177  protected:
      178  static QString _prefixWPath;
      179  Observer<CellViewer> _cellObserver;
      180  QString _applicationName;
      181  QAction* _openAction;
      182  QAction* _cellHistoryAction[CellHistorySize];
      183  QAction* _showSelectionAction;
      184  QMenu* _debugMenu;
      185  ActionLut _actionCallbacks;
      186  // MapView* _mapView;
      187  MousePositionWidget* _mousePosition;
      188  ControllerWidget* _controller;
      189  ScriptWidget* _script;
      190  GotoWidget* _goto;
      191  CellWidget* _cellWidget;
      192  MoveCommand _moveCommand;
      193  ZoomCommand _zoomCommand;
      194  RulerCommand _rulerCommand;
      195  SelectCommand _selectCommand;
      196  HierarchyCommand _hierarchyCommand;
      197  list< shared_ptr<CellWidget::State> >
      198  _cellHistory;
      199  bool _firstShow;
      200  bool _toolInterrupt;
      201  unsigned int _flags;
      202  UpdateState _updateState;
      203  QString _pyScriptName;
      204  };
      205 
      206 
      207 // Inline Functions.
      208  inline bool CellViewer::isToolInterrupted () const { return _toolInterrupt; }
      209  inline Observer<CellViewer>* CellViewer::getCellObserver () { return &_cellObserver; }
      210  inline CellWidget* CellViewer::getCellWidget () { return _cellWidget; }
      211  inline const CellWidget* CellViewer::getCellWidget () const { return _cellWidget; }
      212  inline ControllerWidget* CellViewer::getControllerWidget () { return _controller; }
      213  inline void CellViewer::setApplicationName ( const QString& name ) { _applicationName = name; }
      214  inline void CellViewer::setLayerVisible ( const Name& layer, bool visible ) { _cellWidget->setLayerVisible(layer,visible); }
      215  inline void CellViewer::emitCellAboutToChange () { _flags |= InCellChange; emit cellPreModificated(); }
      216  inline void CellViewer::emitCellChanged () { _flags &= ~InCellChange; emit cellPostModificated(); }
      217  inline void CellViewer::emitCellPreModificated () { emit cellPreModificated(); }
      218  inline void CellViewer::emitCellPostModificated () { emit cellPostModificated(); }
      219 
      220  inline void CellViewer::setEnableRedrawInterrupt ( bool state )
      221  { _cellWidget->setEnableRedrawInterrupt(state); }
      222 
      223 
      224 } // Hurricane namespace.
      225 
      226 
      227 GETSTRING_POINTER_SUPPORT(Hurricane::CellViewer)
      228 IOSTREAM_POINTER_SUPPORT(Hurricane::CellViewer)
      229 
      230 
      231 #endif
      void renameCell(const char *)
      CellViewer(QWidget *parent=NULL)
      -
      ControllerWidget * getControllerWidget()
      Definition: CellViewer.h:207
      +
      ControllerWidget * getControllerWidget()
      Definition: CellViewer.h:212
      void select(Occurrence &)
      -
      void setLayerVisible(const Name &layer, bool visible)
      Definition: CellViewer.h:209
      -
      void setEnableRedrawInterrupt(bool)
      Definition: CellViewer.h:215
      +
      void setLayerVisible(const Name &layer, bool visible)
      Definition: CellViewer.h:214
      +
      void setEnableRedrawInterrupt(bool)
      Definition: CellViewer.h:220
      Cell * getCell() const
      virtual Cell * getCellFromDb(const char *)
      virtual void setCell(Cell *)
      @@ -61,17 +61,17 @@ $(function() {
      void unselect(Occurrence &)
      A simple top level window embedding the CellWidget.
      Definition: CellViewer.h:77
      -
      bool isToolInterrupted() const
      Definition: CellViewer.h:203
      +
      bool isToolInterrupted() const
      Definition: CellViewer.h:208
      -
      void setApplicationName(const QString &)
      Definition: CellViewer.h:208
      +
      void setApplicationName(const QString &)
      Definition: CellViewer.h:213
      The Widget to display a Cell.
      Definition: CellWidget.h:84
      -
      CellWidget * getCellWidget()
      Definition: CellViewer.h:205
      +
      CellWidget * getCellWidget()
      Definition: CellViewer.h:210


      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/viewer/html/CellWidget_8h_source.html b/hurricane/doc/viewer/html/CellWidget_8h_source.html index bae7a17b..441c8a9d 100644 --- a/hurricane/doc/viewer/html/CellWidget_8h_source.html +++ b/hurricane/doc/viewer/html/CellWidget_8h_source.html @@ -44,7 +44,7 @@ $(function() {
      CellWidget.h
      -
      1 // -*- C++ -*-
      2 //
      3 // This file is part of the Coriolis Software.
      4 // Copyright (c) UPMC/LIP6 2008-2018, All Rights Reserved
      5 //
      6 // +-----------------------------------------------------------------+
      7 // | C O R I O L I S |
      8 // | V L S I B a c k e n d D a t a - B a s e |
      9 // | |
      10 // | Author : Jean-Paul CHAPUT |
      11 // | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
      12 // | =============================================================== |
      13 // | C++ Header : "./hurricane/viewer/CellWidget.h" |
      14 // +-----------------------------------------------------------------+
      15 
      16 
      17 #ifndef HURRICANE_CELL_WIDGET_H
      18 #define HURRICANE_CELL_WIDGET_H
      19 
      20 #include <math.h>
      21 #include <vector>
      22 #include <functional>
      23 #include <memory>
      24 #include <boost/function.hpp>
      25 #include <QWidget>
      26 #include <QPixmap>
      27 #include <QPainter>
      28 #include <QPrinter>
      29 #include <QImage>
      30 #include <QRect>
      31 #include <QPoint>
      32 class QCursor;
      33 class QShowEvent;
      34 class QResizeEvent;
      35 class QMouseEvent;
      36 class QKeyEvent;
      37 class QAction;
      38 
      39 #include "hurricane/Timer.h"
      40 #include "hurricane/Commons.h"
      41 #include "hurricane/Warning.h"
      42 #include "hurricane/Point.h"
      43 #include "hurricane/Box.h"
      44 #include "hurricane/Transformation.h"
      45 #include "hurricane/Query.h"
      46 #include "hurricane/viewer/DisplayStyle.h"
      47 #include "hurricane/viewer/CellWidgets.h"
      48 #include "hurricane/viewer/Selector.h"
      49 #include "hurricane/viewer/SelectorCriterion.h"
      50 #include "hurricane/viewer/Ruler.h"
      51 
      52 
      53 namespace Hurricane {
      54 
      55  using std::vector;
      56  using std::unary_function;
      57  using std::shared_ptr;
      58 
      59  class Technology;
      60  class BasicLayer;
      61  class Go;
      62  class Net;
      63  class Cell;
      64  class Instance;
      65  class Slice;
      66  class Segment;
      67  class Contact;
      68  class Pad;
      69  class Selector;
      70  class PaletteWidget;
      71  class Command;
      72 //class MapView;
      73 
      74  enum UpdateState { ExternalEmit = 0
      75  , InternalEmit
      76  , InternalReceive
      77  };
      78 
      79 
      80 // -------------------------------------------------------------------
      81 // Class : "Hurricane::CellWidget".
      82 
      83 
      84  class CellWidget : public QWidget {
      85  Q_OBJECT;
      86 
      87  private:
      88  class DrawingPlanes;
      89  public:
      90  class State;
      91  typedef void ( DrawExtensionGo_t )( CellWidget*
      92  , const Go*
      93  , const BasicLayer*
      94  , const Box&
      95  , const Transformation&
      96  );
      97  typedef void ( InitExtensionGo_t )( CellWidget* );
      98  typedef boost::function< void(QPainter&) > PainterCb_t;
      99  enum RubberShape { Centric=1, Barycentric, Steiner };
      100  enum TextFlag { Bold =0x0001
      101  , BigFont =0x0002
      102  , Reverse =0x0004
      103  , Frame =0x0008
      104  , Rounded =0x0010
      105  , Center =0x0020
      106  , Left =0x0040
      107  , Right =0x0080
      108  , Top =0x0100
      109  };
      110  enum Flag { NoFlags =0x0000
      111  , NoResetCommands=0x0001
      112  };
      113  public:
      115  public:
      116  // Constructor & Destructor.
      117  CellWidget ( QWidget* parent=NULL );
      118  virtual ~CellWidget ();
      119  // Accessors.
      120  // MapView* getMapView () { return _mapView; };
      121  void setCell ( Cell*, Path topPath=Path(), unsigned int flags=NoFlags );
      122  inline Cell* getCell () const;
      123  inline Cell* getTopCell () const;
      124  inline Path getTopPath () const;
      125  inline shared_ptr<State>& getState ();
      126  inline shared_ptr<State> getStateClone ();
      127  inline PaletteWidget* getPalette ();
      128  inline Occurrences getOccurrencesUnder ( const QRect& ) const;
      129  Occurrences getOccurrencesUnder ( const Box& ) const;
      130  inline SelectorSet& getSelectorSet ();
      131  inline RulerSet& getRulerSet ();
      132  inline RubberShape getRubberShape () const;
      133  inline int getStartLevel () const;
      134  inline int getStopLevel () const;
      135  inline Query::Mask getQueryFilter () const ;
      136  void bindToPalette ( PaletteWidget* );
      137  void detachFromPalette ();
      138  void bindCommand ( Command* );
      139  void unbindCommand ( Command* );
      140  void resetCommands ();
      141  inline void setActiveCommand ( Command* );
      142  inline Command* getActiveCommand () const;
      143  Command* getCommand ( const std::string& ) const;
      144  inline void resetActiveCommand ();
      145  inline void setCursorStep ( DbU::Unit );
      146  inline void setRealSnapGridStep ( DbU::Unit step );
      147  inline unsigned int getDbuMode () const;
      148  inline bool gridMode () const;
      149  inline bool symbolicMode () const;
      150  inline bool physicalMode () const;
      151  inline DbU::UnitPower getUnitPower () const;
      152  inline bool showBoundaries () const;
      153  inline bool showSelection () const;
      154  inline bool cumulativeSelection () const;
      155  inline void setDbuMode ( int );
      156  inline void setUnitPower ( DbU::UnitPower );
      157  inline void setRubberShape ( RubberShape );
      158  inline void setStartLevel ( int );
      159  inline void setStopLevel ( int );
      160  inline void setQueryFilter ( Query::Mask );
      161  inline bool timeout ( const char*, const Timer&, double timeout, bool& timedout ) const;
      162  // Painter control & Hurricane objects drawing primitives.
      163  inline void setEnableRedrawInterrupt ( bool );
      164  inline void addDrawExtensionGo ( const Name&, InitExtensionGo_t*, DrawExtensionGo_t* );
      165  inline QPainter& getPainter ( size_t plane=PlaneId::Working );
      166  inline const DisplayStyle::HSVr& getDarkening () const;
      167  inline void copyToPrinter ( int xpaper, int ypaper, QPrinter*, PainterCb_t& );
      168  inline void copyToImage ( QImage*, PainterCb_t& );
      169  inline const float& getScale () const;
      170  inline const QPoint& getMousePosition () const;
      171  inline void updateMousePosition ();
      172  void setLayerVisible ( const Name& layer, bool visible );
      173  bool isLayerVisible ( const Name& );
      174  bool isDrawable ( const Name& );
      175  bool isDrawableLayer ( const Name& );
      176  bool isDrawableExtension ( const Name& );
      177  bool isSelectable ( const Name& ) const;
      178  bool isSelectable ( const Layer* ) const;
      179  inline void setDarkening ( const DisplayStyle::HSVr& );
      180  inline void setPen ( const QPen& , size_t plane=PlaneId::Working );
      181  void drawBox ( DbU::Unit, DbU::Unit, DbU::Unit, DbU::Unit );
      182  void drawBox ( const Box& );
      183  void drawLine ( DbU::Unit, DbU::Unit, DbU::Unit, DbU::Unit, bool mode=true );
      184  void drawLine ( const Point&, const Point&, bool mode=true );
      185  void drawText ( const Point&, const char*, unsigned int flags=0, int angle=0 );
      186  void drawGrid ( QRect );
      187  void drawSpot ();
      188  void drawRuler ( shared_ptr<Ruler> );
      189  void drawRulers ( QRect );
      190  void drawDisplayText ( const QRect& , const char*, unsigned int flags=0 );
      191  void drawDisplayText ( const QPoint&, const char*, unsigned int flags=0, int angle=0 );
      192  void drawScreenPolygon ( const QPoint*, int count, size_t plane=PlaneId::Working );
      193  void drawScreenPolygon ( const QPolygon&, size_t plane=PlaneId::Working );
      194  void drawScreenLine ( const QPoint&, const QPoint&, size_t plane=PlaneId::Working, bool mode=true );
      195  void drawScreenRect ( const QPoint&, const QPoint&, size_t plane=PlaneId::Working );
      196  void drawScreenRect ( const QRect& , size_t plane=PlaneId::Working );
      197  void drawScreenPolyline ( const QPoint*, int, int, size_t plane=PlaneId::Working );
      198  // Geometric conversions.
      199  inline DbU::Unit toDbu ( float ) const;
      200  QRect dbuToScreenRect ( DbU::Unit x1, DbU::Unit y1, DbU::Unit x2, DbU::Unit y2, bool usePoint=true ) const;
      201  QRect dbuToScreenRect ( const Box& box , bool usePoint=true ) const;
      202  inline int dbuToScreenX ( DbU::Unit x ) const;
      203  inline int dbuToScreenY ( DbU::Unit y ) const;
      204  inline int dbuToScreenLength ( DbU::Unit length ) const;
      205  inline QPoint dbuToScreenPoint ( DbU::Unit x, DbU::Unit y ) const;
      206  inline QPoint dbuToScreenPoint ( const Point& point ) const;
      207  inline DbU::Unit screenToDbuLength ( int length ) const;
      208  inline DbU::Unit screenToDbuX ( int x ) const;
      209  inline DbU::Unit screenToDbuY ( int y ) const;
      210  inline Point screenToDbuPoint ( const QPoint& point ) const;
      211  inline Box screenToDbuBox ( const QRect& rect ) const;
      212  inline Box& pixelInflate ( Box&, int pixels ) const;
      213  inline Point getTopLeft () const;
      214  inline Box getVisibleArea () const;
      215  Box computeVisibleArea ( float scale ) const;
      216  Box computeVisibleArea ( float scale, const Point& topLeft ) const;
      217  Box computeVisibleArea ( const Box&, float& scale ) const;
      218  inline DbU::Unit cursorStep () const;
      219  inline bool _underDetailedGridThreshold() const;
      220  inline DbU::Unit _snapGridStep () const;
      221  inline DbU::Unit _onSnapGrid ( DbU::Unit ) const;
      222  inline Point _onSnapGrid ( const Point& ) const;
      223  inline DbU::Unit _onCursorGrid ( DbU::Unit ) const;
      224  inline Point _onCursorGrid ( const Point& ) const;
      225  // Qt QWidget Functions Overloads.
      226  void pushCursor ( Qt::CursorShape cursor );
      227  void popCursor ();
      228  virtual QSize minimumSizeHint () const;
      229  virtual void showEvent ( QShowEvent* );
      230  virtual void resizeEvent ( QResizeEvent* );
      231  virtual void wheelEvent ( QWheelEvent* );
      232  virtual void keyPressEvent ( QKeyEvent* );
      233  virtual void keyReleaseEvent ( QKeyEvent* );
      234  virtual void mouseMoveEvent ( QMouseEvent* );
      235  virtual void mousePressEvent ( QMouseEvent* );
      236  virtual void mouseReleaseEvent ( QMouseEvent* );
      237  signals:
      238  void cellChanged ( Cell* );
      239  void cellPreModificated ();
      240  void cellPostModificated ();
      241  void stateChanged ( shared_ptr<CellWidget::State>& );
      242  void styleChanged ();
      243  void queryFilterChanged ();
      244  void dbuModeChanged ( unsigned int mode, DbU::UnitPower );
      245  void updatePalette ( Cell* );
      246  void mousePositionChanged ( const Point& position );
      247  void selectionModeChanged ();
      248  void selectionChanged ( const SelectorSet& );
      249  void selectionToggled ( Occurrence );
      250  void showBoundariesToggled ( bool );
      251  protected:
      252  virtual void paintEvent ( QPaintEvent* );
      253  public slots:
      254  // Qt QWidget Slots Overload & CellWidget Specifics.
      255  void setState ( shared_ptr<CellWidget::State>&
      256  , unsigned int flags=NoFlags );
      257  inline void openRefreshSession ();
      258  inline void closeRefreshSession ();
      259  inline DrawingPlanes& getDrawingPlanes ();
      260  // void select ( const Net* );
      261  void select ( Occurrence );
      262  bool isSelected ( Occurrence );
      263  void selectOccurrencesUnder ( Box selectArea );
      264  // void unselect ( const Net* );
      265  void unselect ( Occurrence );
      266  void unselectAll ();
      267  void toggleSelection ( Occurrence );
      268  void setShowSelection ( bool state );
      269  void setCumulativeSelection ( bool state );
      270  // void _select ( const Net* );
      271  // void _unselect ( const Net* );
      272  // void _selectOccurrencesUnder ( Box selectArea );
      273  void _unselectAll ();
      274  inline void addRuler ( const Point&, const Point& );
      275  inline void addRuler ( shared_ptr<Ruler> );
      276  inline void clearRulers ();
      277  void changeQueryFilter ();
      278  void rubberChange ();
      279  void changeDbuMode ( unsigned int mode, DbU::UnitPower );
      280  void setStyle ( int id );
      281  void updatePalette ();
      282  void cellPreModificate ();
      283  void cellPostModificate ();
      284  inline void refresh ();
      285  void _redraw ( QRect redrawArea );
      286  inline void redrawSelection ();
      287  void redrawSelection ( QRect redrawArea );
      288  void goLeft ( int dx = 0 );
      289  void goRight ( int dx = 0 );
      290  void goUp ( int dy = 0 );
      291  void goDown ( int dy = 0 );
      292  void fitToContents ( bool historyEnable=true );
      293  void fitToNet ( const Net*, bool historyEnable=true );
      294  void setScale ( float );
      295  void scaleHistoryUp ();
      296  void scaleHistoryDown ();
      297  // void setGridMode ();
      298  // void setSymbolicMode ();
      299  // void setPhysicalMode ( DbU::UnitPower );
      300  void setShowBoundaries ( bool state );
      301  void reframe ();
      302  void reframe ( const Box& box, bool historyEnable=true );
      303  void displayReframe ();
      304  void _goLeft ( int dx );
      305  void _goRight ( int dx );
      306  void _goUp ( int dy );
      307  void _goDown ( int dy );
      308  void _refresh ();
      309  std::string _getString () const;
      310 
      311  private:
      312  class Spot {
      313  public:
      314  Spot ( CellWidget* );
      315  void setRestore ( bool );
      316  inline void setShowSpot ( bool );
      317  inline const QPoint& getSpotPoint () const;
      318  void restore ();
      319  QPoint computeSpotPoint ( const QPoint& );
      320  void moveTo ( const QPoint& );
      321  private:
      322  CellWidget* _cellWidget;
      323  QPoint _spotPoint;
      324  bool _restore;
      325  bool _showSpot;
      326  };
      327 
      328  private:
      329  class RedrawEvent {
      330  public:
      331  enum EventType { GoLeft = 1
      332  , GoRight = 2
      333  , GoUp = 3
      334  , GoDown = 4
      335  , Refresh = 5
      336  };
      337  public:
      338  RedrawEvent ( EventType, int shift, CellWidget* );
      339  inline EventType getType () const;
      340  inline int getShift () const;
      341  private:
      342  EventType _type;
      343  int _shift;
      344  };
      345 
      346  private:
      347  class RedrawManager {
      348  public:
      349  inline RedrawManager ( CellWidget* );
      350  ~RedrawManager ();
      351  void goLeft ( int );
      352  void goRight ( int );
      353  void goUp ( int );
      354  void goDown ( int );
      355  void refresh ();
      356  void process ();
      357  inline void stopProcessing ();
      358  inline bool isProcessing () const;
      359  inline bool interrupted () const;
      360  inline size_t getPendings () const;
      361  inline void openRefreshSession ();
      362  inline void closeRefreshSession ();
      363  private:
      364  CellWidget* _widget;
      365  list<RedrawEvent*> _events;
      366  int _refreshSession;
      367  bool _processing;
      368  bool _interrupted;
      369  };
      370 
      371  public:
      372  class PlaneId {
      373  public:
      374  enum Ids { Normal = 0 // _planes[0]
      375  , Selection = 1 // _planes[1]
      376  , AutoCopy = 2 // _planes[2]
      377  , Widget = 3
      378  , Printer = 4
      379  , Image = 5
      380  , Working = 6
      381  };
      382  };
      383 
      384  private:
      385  class DrawingPlanes {
      386  public:
      387  DrawingPlanes ( const QSize& size, CellWidget* cw );
      388  ~DrawingPlanes ();
      389  inline bool getLineMode () const;
      390  inline size_t getWorkingPlane () const;
      391  inline void pushWorkingPlane ();
      392  inline void popWorkingPlane ();
      393  inline int width () const;
      394  inline int height () const;
      395  inline QSize size () const;
      396  inline void select ( size_t i );
      397  inline QPainter& painter ( size_t i=PlaneId::Working );
      398  inline void begin ( size_t i=PlaneId::Working );
      399  inline void end ( size_t i=PlaneId::Working );
      400  inline void buffersBegin ();
      401  inline void buffersEnd ();
      402  void setLineMode ( bool mode );
      403  void setPen ( const QPen& pen );
      404  void setBrush ( const QBrush& brush );
      405  void setBackground ( const QBrush& brush );
      406  void setBackgroundMode ( Qt::BGMode mode );
      407  void resize ( const QSize& size );
      408  void shiftLeft ( int dx );
      409  void shiftRight ( int dx );
      410  void shiftUp ( int dy );
      411  void shiftDown ( int dy );
      412  inline void copyToSelect ();
      413  inline void copyToSelect ( const QRect& );
      414  void copyToSelect ( int sx, int sy, int h, int w );
      415  inline void copyToScreen ();
      416  void copyToScreen ( int sx, int sy, int h, int w );
      417  inline void copyToPrinter ( int xpaper, int ypaper, QPrinter*, CellWidget::PainterCb_t& );
      418  void copyToPrinter ( int xpaper, int ypaper, int sx, int sy, int h, int w, QPrinter*, CellWidget::PainterCb_t& );
      419  inline void copyToImage ( QImage*, CellWidget::PainterCb_t& );
      420  void copyToImage ( int sx, int sy, int h, int w, QImage*, CellWidget::PainterCb_t& );
      421  private:
      422  static const int _cartoucheWidth;
      423  static const int _cartoucheHeight;
      424  static const int _titleHeight;
      425  CellWidget* _cellWidget;
      426  QPrinter* _printer;
      427  QImage* _image;
      428  QPixmap* _planes[3];
      429  QPainter _painters[PlaneId::Working];
      430  QPen _normalPen;
      431  QPen _linePen;
      432  QPoint _brushOrigin;
      433  size_t _workingPlane;
      434  size_t _pushWorkingPlane;
      435  bool _lineMode;
      436  private:
      437  DrawingPlanes ( const DrawingPlanes& );
      438  DrawingPlanes& operator= ( const DrawingPlanes& );
      439  };
      440 
      441  private:
      442  class DrawingQuery : public Query {
      443  public:
      444  DrawingQuery ( CellWidget* widget );
      445  inline void setQuery ( const Box& area
      446  , const Transformation& transformation
      447  , const BasicLayer* basicLayer
      448  , ExtensionSlice::Mask extensionMask
      449  , unsigned int filter
      450  );
      451  inline void addDrawExtensionGo ( const Name&
      452  , InitExtensionGo_t*
      453  , DrawExtensionGo_t*
      454  );
      455  void setDrawExtensionGo ( const Name& );
      456  virtual bool hasMasterCellCallback () const;
      457  virtual bool hasGoCallback () const;
      458  virtual bool hasMarkerCallback () const;
      459  virtual bool hasRubberCallback () const;
      460  virtual bool hasExtensionGoCallback () const;
      461  virtual void masterCellCallback ();
      462  virtual void goCallback ( Go* );
      463  virtual void rubberCallback ( Rubber* );
      464  virtual void markerCallback ( Marker* );
      465  virtual void extensionGoCallback ( Go* );
      466  void drawMasterCell ( const Cell* cell
      467  , const Transformation& transformation
      468  );
      469  void drawGo ( const Go* go
      470  , const BasicLayer* basicLayer
      471  , const Box& area
      472  , const Transformation& transformation
      473  );
      474  void drawRubber ( const Rubber* rubber
      475  , const Box& area
      476  , const Transformation& transformation
      477  );
      478  void drawMarker ( const Marker* marker
      479  , const Box& area
      480  , const Transformation& transformation
      481  );
      482  void drawExtensionGo ( CellWidget* widget
      483  , const Go* go
      484  , const BasicLayer* basicLayer
      485  , const Box& area
      486  , const Transformation& transformation
      487  );
      488  inline unsigned int getGoCount () const;
      489  inline unsigned int getExtensionGoCount () const;
      490  inline unsigned int getInstanceCount () const;
      491  inline void resetGoCount ();
      492  inline void resetExtensionGoCount ();
      493  inline void resetInstanceCount ();
      494 
      495  protected:
      496  CellWidget* _cellWidget;
      497  DrawExtensionGo_t* _drawExtensionGo;
      498  map<Name,pair<InitExtensionGo_t*,DrawExtensionGo_t*> >
      499  _drawExtensionGos;
      500  unsigned int _goCount;
      501  unsigned int _extensionGoCount;
      502  unsigned int _instanceCount;
      503  };
      504 
      505  private:
      506  class TextDrawingQuery : public Query {
      507  public:
      508  TextDrawingQuery ( CellWidget* widget );
      509  inline void setQuery ( const Box& area
      510  , const Transformation& transformation
      511  );
      512  virtual bool hasMasterCellCallback () const;
      513  virtual bool hasGoCallback () const;
      514  virtual bool hasRubberCallback () const;
      515  virtual bool hasExtensionGoCallback () const;
      516  virtual void masterCellCallback ();
      517  virtual void goCallback ( Go* go );
      518  virtual void extensionGoCallback ( Go* go );
      519  virtual void rubberCallback ( Rubber* );
      520 
      521  protected:
      522  CellWidget* _cellWidget;
      523  };
      524 
      525  private:
      526  class SelectorCriterions {
      527  public:
      528  SelectorCriterions ();
      529  ~SelectorCriterions ();
      530  inline void setCellWidget ( CellWidget* );
      531  inline const vector<SelectorCriterion*>& getCriterions () const;
      532  SelectorCriterion* add ( const Net* net );
      533  SelectorCriterion* add ( Box area );
      534  inline SelectorCriterion* add ( SelectorCriterion* );
      535  bool remove ( const Net* net );
      536  void clear ();
      537  void invalidate ();
      538  void revalidate ();
      539  inline size_t size () const;
      540  private:
      541  CellWidget* _cellWidget;
      542  vector<SelectorCriterion*> _criterions;
      543  };
      544 
      545  public:
      546  class State {
      547  public:
      548  inline State ( Cell* cell=NULL, Path topPath=Path() );
      549  State* clone () const;
      550  inline void setCell ( Cell* );
      551  inline void setTopPath ( Path );
      552  inline void setCellWidget ( CellWidget* );
      553  inline void setCursorStep ( DbU::Unit );
      554  inline DbU::Unit getCursorStep () const;
      555  inline DbU::UnitPower getUnitPower () const;
      556  inline void setDbuMode ( int );
      557  inline void setUnitPower ( DbU::UnitPower );
      558  inline void setShowBoundaries ( bool );
      559  inline void setShowSelection ( bool );
      560  inline void setCumulativeSelection ( bool );
      561  void setScale ( float );
      562  inline void setTopLeft ( DbU::Unit, DbU::Unit );
      563  inline void setTopLeft ( const Point& );
      564  inline void setQueryFilter ( Query::Mask );
      565  inline void setStartLevel ( int );
      566  inline void setStopLevel ( int );
      567  inline void setRubberShape ( RubberShape );
      568  inline void setHistoryEnable ( bool );
      569  bool scaleHistoryUp ();
      570  bool scaleHistoryDown ();
      571  inline Cell* getCell () const;
      572  inline Cell* getTopCell () const;
      573  inline Path getTopPath () const;
      574  const Name& getName () const;
      575  inline SelectorCriterions& getSelection ();
      576  inline RulerSet& getRulers ();
      577  inline DbU::Unit cursorStep () const;
      578  inline unsigned int getDbuMode () const;
      579  inline bool gridMode () const;
      580  inline bool symbolicMode () const;
      581  inline bool physicalMode () const;
      582  inline bool nanoMode () const;
      583  inline bool microMode () const;
      584  inline bool showBoundaries () const;
      585  inline bool showSelection () const;
      586  inline bool cumulativeSelection () const;
      587  inline bool getHistoryEnable () const;
      588  inline size_t getHistorySize () const;
      589  inline const float& getScale () const;
      590  inline const Point& getTopLeft () const;
      591  inline Query::Mask getQueryFilter () const;
      592  inline int getStartLevel () const;
      593  inline int getStopLevel () const;
      594  inline RubberShape getRubberShape () const;
      595 
      596  private:
      597  class ScaleEntry {
      598  public:
      599  inline ScaleEntry ( float, const Point& );
      600  public:
      601  float _scale;
      602  Point _topLeft;
      603  };
      604 
      605  private:
      606  Cell* _cell;
      607  Path _topPath;
      608  CellWidget* _cellWidget;
      609  SelectorCriterions _selection;
      610  RulerSet _rulers;
      611  DbU::Unit _cursorStep;
      612  unsigned int _dbuMode;
      613  DbU::UnitPower _unitPower;
      614  bool _showBoundaries;
      615  bool _showSelection;
      616  Query::Mask _queryFilter;
      617  int _startLevel;
      618  int _stopLevel;
      619  RubberShape _rubberShape;
      620  bool _cumulativeSelection;
      621  vector<ScaleEntry> _scaleHistory;
      622  size_t _ihistory;
      623  bool _historyEnable;
      624  };
      625  public:
      626  class FindStateName : public unary_function< const shared_ptr<State>&, bool > {
      627  public:
      628  inline FindStateName ( const Name& );
      629  inline bool operator() ( const shared_ptr<State>& );
      630  private:
      631  const Name _cellName;
      632  };
      633 
      634  protected:
      635  // Internal: Attributes.
      636  static int _initialSide;
      637  vector<Qt::CursorShape> _cursors;
      638  // MapView* _mapView;
      639  Technology* _technology;
      640  PaletteWidget* _palette;
      641  Box _screenArea;
      642  RedrawManager _redrawManager;
      643  DrawingPlanes _drawingPlanes;
      644  DrawingQuery _drawingQuery;
      645  TextDrawingQuery _textDrawingQuery;
      646  DisplayStyle::HSVr _darkening;
      647  QPoint _mousePosition;
      648  Spot _spot;
      649  shared_ptr<State> _state;
      650  bool _cellChanged;
      651  bool _selectionHasChanged;
      652  int _delaySelectionChanged;
      653  bool _cellModificated;
      654  bool _enableRedrawInterrupt;
      655  SelectorSet _selectors;
      656  Command* _activeCommand;
      657  vector<Command*> _commands;
      658  size_t _redrawRectCount;
      659  int _textFontHeight;
      660 
      661  friend class RedrawManager;
      662  };
      663 
      664 
      665  inline void CellWidget::Spot::setShowSpot ( bool show )
      666  { _showSpot = show; }
      667 
      668 
      669  inline const QPoint& CellWidget::Spot::getSpotPoint () const
      670  { return _spotPoint; }
      671 
      672 
      673  inline void CellWidget::DrawingQuery::setQuery ( const Box& area
      674  , const Transformation& transformation
      675  , const BasicLayer* basicLayer
      676  , ExtensionSlice::Mask extensionMask
      677  , unsigned int filter
      678  )
      679  {
      680  Query::setQuery ( _cellWidget->getCell()
      681  , area
      682  , transformation
      683  , basicLayer
      684  , extensionMask
      685  , filter
      686  );
      687  }
      688 
      689 
      690  inline void CellWidget::setEnableRedrawInterrupt ( bool state )
      691  { _enableRedrawInterrupt = state; }
      692 
      693 
      694  inline void CellWidget::openRefreshSession ()
      695  { _redrawManager.openRefreshSession (); }
      696 
      697 
      698  inline void CellWidget::closeRefreshSession ()
      699  { _redrawManager.closeRefreshSession (); }
      700 
      701 
      702  inline void CellWidget::DrawingQuery::addDrawExtensionGo ( const Name& name
      703  , InitExtensionGo_t* initExtensionGo
      704  , DrawExtensionGo_t* drawExtensionGo
      705  )
      706  { _drawExtensionGos[name] = make_pair(initExtensionGo,drawExtensionGo); }
      707 
      708 
      709  inline void CellWidget::DrawingQuery::resetGoCount ()
      710  { _goCount = 0; }
      711 
      712 
      713  inline void CellWidget::DrawingQuery::resetExtensionGoCount ()
      714  { _extensionGoCount = 0; }
      715 
      716 
      717  inline void CellWidget::DrawingQuery::resetInstanceCount ()
      718  { _instanceCount = 0; }
      719 
      720 
      721  inline unsigned int CellWidget::DrawingQuery::getGoCount () const
      722  { return _goCount; }
      723 
      724 
      725  inline unsigned int CellWidget::DrawingQuery::getExtensionGoCount () const
      726  { return _extensionGoCount; }
      727 
      728 
      729  inline unsigned int CellWidget::DrawingQuery::getInstanceCount () const
      730  { return _instanceCount; }
      731 
      732 
      733  inline CellWidget::RedrawEvent::EventType CellWidget::RedrawEvent::getType () const
      734  { return _type; }
      735 
      736 
      737  inline int CellWidget::RedrawEvent::getShift () const
      738  { return _shift; }
      739 
      740 
      741  inline bool CellWidget::RedrawManager::isProcessing () const
      742  { return _processing; }
      743 
      744 
      745  inline void CellWidget::RedrawManager::stopProcessing ()
      746  { _processing = false; }
      747 
      748 
      749  inline size_t CellWidget::RedrawManager::getPendings () const
      750  { return _events.size(); }
      751 
      752 
      753  inline void CellWidget::RedrawManager::openRefreshSession ()
      754  { _refreshSession++; }
      755 
      756 
      757  inline void CellWidget::RedrawManager::closeRefreshSession ()
      758  {
      759  _refreshSession--;
      760  if ( !_processing && (_refreshSession == 0) ) process ();
      761  }
      762 
      763 
      764  inline bool CellWidget::RedrawManager::interrupted () const
      765  {
      766 #ifdef ALLOW_REQUEST_INTERRUPT
      767  return ( _events.size() > 5 ) || _interrupted;
      768 #else
      769  return _interrupted;
      770 #endif
      771  }
      772 
      773 
      774  inline bool CellWidget::DrawingPlanes::getLineMode () const
      775  { return _lineMode; }
      776 
      777 
      778  inline size_t CellWidget::DrawingPlanes::getWorkingPlane () const
      779  { return _workingPlane; }
      780 
      781 
      782  inline void CellWidget::DrawingPlanes::pushWorkingPlane ()
      783  { _pushWorkingPlane = _workingPlane; }
      784 
      785 
      786  inline void CellWidget::DrawingPlanes::popWorkingPlane ()
      787  { _workingPlane = _pushWorkingPlane; }
      788 
      789 
      790  inline int CellWidget::DrawingPlanes::width () const
      791  { return _planes[PlaneId::Normal]->width(); }
      792 
      793 
      794  inline int CellWidget::DrawingPlanes::height () const
      795  { return _planes[PlaneId::Normal]->height(); }
      796 
      797 
      798  inline QSize CellWidget::DrawingPlanes::size () const
      799  { return _planes[PlaneId::Normal]->size(); }
      800 
      801 
      802  inline void CellWidget::DrawingPlanes::select ( size_t i )
      803  { _workingPlane = i; }
      804 
      805 
      806  inline QPainter& CellWidget::DrawingPlanes::painter ( size_t i )
      807  { return _painters[ (i>=PlaneId::Working) ? _workingPlane : i ]; }
      808 
      809 
      810  inline void CellWidget::DrawingPlanes::begin ( size_t i )
      811  {
      812  size_t wp = (i>=PlaneId::Working) ? _workingPlane : i;
      813  switch ( wp ) {
      814  case PlaneId::Normal:
      815  case PlaneId::Selection:
      816  case PlaneId::AutoCopy: _painters[wp ].begin( _planes[wp] ); break;
      817  case PlaneId::Widget: _painters[PlaneId::Widget ].begin( _cellWidget ); break;
      818  case PlaneId::Printer: _painters[PlaneId::Printer].begin( _printer ); break;
      819  case PlaneId::Image: _painters[PlaneId::Image ].begin( _image ); break;
      820  default:
      821  std::cerr << "[BUG] Bad plane selection." << std::endl;
      822  }
      823  }
      824 
      825 
      826  inline void CellWidget::DrawingPlanes::end ( size_t i )
      827  { _painters[(i>=PlaneId::Working)?_workingPlane:i].end (); }
      828 
      829 
      830  inline void CellWidget::DrawingPlanes::buffersBegin ()
      831  {
      832  begin( PlaneId::Normal );
      833  begin( PlaneId::Selection );
      834  begin( PlaneId::AutoCopy );
      835  }
      836 
      837 
      838  inline void CellWidget::DrawingPlanes::buffersEnd ()
      839  {
      840  end( PlaneId::Normal );
      841  end( PlaneId::Selection );
      842  end( PlaneId::AutoCopy );
      843  }
      844 
      845 
      846  inline void CellWidget::DrawingPlanes::copyToSelect ()
      847  { copyToSelect ( 0, 0, width(), height() ); }
      848 
      849 
      850  inline void CellWidget::DrawingPlanes::copyToSelect ( const QRect& r )
      851  { copyToSelect ( r.x(), r.y(), r.width(), r.height() ); }
      852 
      853 
      854  inline void CellWidget::DrawingPlanes::copyToScreen ()
      855  { copyToScreen ( 0, 0, width(), height() ); }
      856 
      857 
      858  inline void CellWidget::DrawingPlanes::copyToPrinter ( int xpaper, int ypaper, QPrinter* printer, CellWidget::PainterCb_t& cb )
      859  {
      860  copyToPrinter ( xpaper
      861  , ypaper
      862  , 0
      863  , 0
      864  , _cellWidget->geometry().width()
      865  , _cellWidget->geometry().height()
      866  , printer
      867  , cb
      868  );
      869  }
      870 
      871 
      872  inline void CellWidget::DrawingPlanes::copyToImage ( QImage* image, CellWidget::PainterCb_t& cb )
      873  {
      874  copyToImage ( 0
      875  , 0
      876  , _cellWidget->geometry().width()
      877  , _cellWidget->geometry().height()
      878  , image
      879  , cb
      880  );
      881  }
      882 
      883 
      884  inline void CellWidget::SelectorCriterions::setCellWidget ( CellWidget* cw )
      885  { _cellWidget = cw; }
      886 
      887 
      888  inline size_t CellWidget::SelectorCriterions::size () const
      889  { return _criterions.size(); }
      890 
      891 
      892  inline const vector<SelectorCriterion*>& CellWidget::SelectorCriterions::getCriterions () const
      893  { return _criterions; }
      894 
      895 
      896  inline SelectorCriterion* CellWidget::SelectorCriterions::add ( SelectorCriterion* criterion )
      897  {
      898  _criterions.push_back( criterion );
      899  return _criterions.back();
      900  }
      901 
      902 
      903  inline CellWidget::State::ScaleEntry::ScaleEntry ( float scale, const Point& topLeft )
      904  : _scale(scale), _topLeft(topLeft)
      905  { }
      906 
      907 
      908  inline CellWidget::State::State ( Cell* cell, Path topPath )
      909  : _cell (cell)
      910  , _topPath (topPath)
      911  , _cellWidget (NULL)
      912  , _selection ()
      913  , _rulers ()
      914  , _cursorStep (DbU::lambda(0.5))
      915  , _dbuMode (DbU::Symbolic)
      916  , _unitPower (DbU::Nano)
      917  , _showBoundaries (true)
      918  , _showSelection (false)
      919  , _queryFilter (~Query::DoTerminalCells)
      920  , _startLevel (0)
      921  , _stopLevel (99)
      922  , _rubberShape (CellWidget::Barycentric)
      923  , _cumulativeSelection(false)
      924  , _scaleHistory ()
      925  , _ihistory (0)
      926  , _historyEnable (false)
      927  {
      928  _scaleHistory.push_back ( ScaleEntry(1.0,Point(0,0)) );
      929  }
      930 
      931 
      932  inline unsigned int CellWidget::State::getDbuMode () const
      933  { return _dbuMode; }
      934 
      935 
      936  inline bool CellWidget::State::symbolicMode () const
      937  { return (_dbuMode == DbU::Symbolic); }
      938 
      939 
      940  inline bool CellWidget::State::gridMode () const
      941  { return (_dbuMode == DbU::Grid); }
      942 
      943 
      944  inline bool CellWidget::State::physicalMode () const
      945  { return (_dbuMode == DbU::Physical); }
      946 
      947 
      948  inline void CellWidget::State::setCell ( Cell* cell )
      949  { _cell = cell; }
      950 
      951 
      952  inline void CellWidget::State::setTopPath ( Path topPath )
      953  { _topPath = topPath; }
      954 
      955 
      956  inline void CellWidget::State::setCellWidget ( CellWidget* cw )
      957  {
      958  _cellWidget = cw;
      959  _selection.setCellWidget ( cw );
      960  }
      961 
      962 
      963  inline void CellWidget::State::setCursorStep ( DbU::Unit step )
      964  { _cursorStep = step; }
      965 
      966  inline DbU::Unit CellWidget::State::getCursorStep () const
      967  { return _cursorStep; }
      968 
      969 
      970  inline DbU::UnitPower CellWidget::State::getUnitPower () const
      971  { return _unitPower; }
      972 
      973 
      974  inline void CellWidget::State::setDbuMode ( int mode )
      975  {
      976  _dbuMode = mode;
      977  switch ( _dbuMode ) {
      978  case DbU::Symbolic: _cursorStep = DbU::lambda(0.5); break;
      979  case DbU::Grid: _cursorStep = DbU::grid (1.0); break;
      980  case DbU::Physical: _cursorStep = DbU::grid (1.0); break;
      981  }
      982  }
      983 
      984 
      985  inline void CellWidget::State::setUnitPower ( DbU::UnitPower p )
      986  { _unitPower = p; }
      987 
      988 
      989  inline void CellWidget::State::setShowBoundaries ( bool state )
      990  { _showBoundaries = state; }
      991 
      992 
      993  inline void CellWidget::State::setShowSelection ( bool state )
      994  { _showSelection = state; }
      995 
      996 
      997  inline void CellWidget::State::setCumulativeSelection ( bool state )
      998  { _cumulativeSelection = state; }
      999 
      1000 
      1001  inline void CellWidget::State::setTopLeft ( DbU::Unit x, DbU::Unit y )
      1002  {
      1003  _scaleHistory[_ihistory]._topLeft.setX(x);
      1004  _scaleHistory[_ihistory]._topLeft.setY(y);
      1005  }
      1006 
      1007 
      1008  inline void CellWidget::State::setTopLeft ( const Point& topLeft )
      1009  { _scaleHistory[_ihistory]._topLeft = topLeft; }
      1010 
      1011 
      1012  inline void CellWidget::State::setQueryFilter ( Query::Mask mask )
      1013  { _queryFilter = mask; }
      1014 
      1015 
      1016  inline void CellWidget::State::setStartLevel ( int level )
      1017  { _startLevel = level; }
      1018 
      1019 
      1020  inline void CellWidget::State::setStopLevel ( int level )
      1021  { _stopLevel = level; }
      1022 
      1023 
      1024  inline void CellWidget::State::setRubberShape ( RubberShape shape )
      1025  { _rubberShape = shape; }
      1026 
      1027 
      1028  inline void CellWidget::State::setHistoryEnable ( bool enable )
      1029  { _historyEnable = enable; }
      1030 
      1031 
      1032  inline Cell* CellWidget::State::getCell () const
      1033  { return _cell; }
      1034 
      1035 
      1036  inline Path CellWidget::State::getTopPath () const
      1037  { return _topPath; }
      1038 
      1039 
      1040  inline Cell* CellWidget::State::getTopCell () const
      1041  { return (_topPath.isEmpty()) ? _cell : _topPath.getOwnerCell(); }
      1042 
      1043 
      1044  inline DbU::Unit CellWidget::State::cursorStep () const
      1045  { return _cursorStep; }
      1046 
      1047 
      1048  inline CellWidget::SelectorCriterions& CellWidget::State::getSelection ()
      1049  { return _selection; }
      1050 
      1051 
      1052  inline RulerSet& CellWidget::State::getRulers ()
      1053  { return _rulers; }
      1054 
      1055 
      1056  inline bool CellWidget::State::showBoundaries () const
      1057  { return _showBoundaries; }
      1058 
      1059 
      1060  inline bool CellWidget::State::showSelection () const
      1061  { return _showSelection; }
      1062 
      1063 
      1064  inline bool CellWidget::State::cumulativeSelection () const
      1065  { return _cumulativeSelection; }
      1066 
      1067 
      1068  inline bool CellWidget::State::getHistoryEnable () const
      1069  { return _historyEnable; }
      1070 
      1071 
      1072  inline size_t CellWidget::State::getHistorySize () const
      1073  { return _scaleHistory.size(); }
      1074 
      1075 
      1076  inline const Point& CellWidget::State::getTopLeft () const
      1077  { return _scaleHistory[_ihistory]._topLeft; }
      1078 
      1079 
      1080  inline Query::Mask CellWidget::State::getQueryFilter () const
      1081  { return _queryFilter; }
      1082 
      1083 
      1084  inline int CellWidget::State::getStartLevel () const
      1085  { return _startLevel; }
      1086 
      1087 
      1088  inline int CellWidget::State::getStopLevel () const
      1089  { return _stopLevel; }
      1090 
      1091 
      1092  inline CellWidget::RubberShape CellWidget::State::getRubberShape () const
      1093  { return _rubberShape; }
      1094 
      1095 
      1096  inline const float& CellWidget::State::getScale () const
      1097  { return _scaleHistory[_ihistory]._scale; }
      1098 
      1099 
      1100  inline CellWidget::FindStateName::FindStateName ( const Name& cellName )
      1101  : unary_function< const shared_ptr<State>&, bool >()
      1102  , _cellName(cellName)
      1103  { }
      1104 
      1105 
      1106  inline bool CellWidget::FindStateName::operator () ( const shared_ptr<State>& state )
      1107  { return state->getName() == _cellName; }
      1108 
      1109 
      1110  inline void CellWidget::setActiveCommand ( Command* command )
      1111  { _activeCommand = command; }
      1112 
      1113 
      1114  inline Command* CellWidget::getActiveCommand () const
      1115  { return _activeCommand; }
      1116 
      1117 
      1118  inline void CellWidget::resetActiveCommand ()
      1119  { _activeCommand = NULL; }
      1120 
      1121 
      1122  inline void CellWidget::setCursorStep ( DbU::Unit step )
      1123  { _state->setCursorStep(step); }
      1124 
      1125 
      1126  inline void CellWidget::setRealSnapGridStep ( DbU::Unit step )
      1127  { DbU::setRealSnapGridStep(step); }
      1128 
      1129 
      1130  inline shared_ptr<CellWidget::State>& CellWidget::getState ()
      1131  {
      1132  _state->setTopLeft ( getTopLeft() );
      1133  return _state;
      1134  }
      1135 
      1136 
      1137  inline shared_ptr<CellWidget::State> CellWidget::getStateClone ()
      1138  {
      1139  _state->setTopLeft ( getTopLeft() );
      1140  return shared_ptr<State>( _state->clone() );
      1141  }
      1142 
      1143 
      1144  inline void CellWidget::addDrawExtensionGo ( const Name& name
      1145  , InitExtensionGo_t* initExtensionGo
      1146  , DrawExtensionGo_t* drawExtensionGo
      1147  )
      1148  { _drawingQuery.addDrawExtensionGo ( name, initExtensionGo, drawExtensionGo ); }
      1149 
      1150 
      1151  inline void CellWidget::setStartLevel ( int level )
      1152  {
      1153  _drawingQuery.setStartLevel ( level );
      1154  _state->setStartLevel ( level );
      1155  emit queryFilterChanged ();
      1156  }
      1157 
      1158 
      1159  inline void CellWidget::setStopLevel ( int level )
      1160  {
      1161  _drawingQuery.setStopLevel ( level );
      1162  _state->setStopLevel ( level );
      1163  emit queryFilterChanged ();
      1164  }
      1165 
      1166 
      1167  inline int CellWidget::getStartLevel () const
      1168  { return _drawingQuery.getStartLevel (); }
      1169 
      1170 
      1171  inline int CellWidget::getStopLevel () const
      1172  { return _drawingQuery.getStopLevel (); }
      1173 
      1174 
      1175  inline CellWidget::DrawingPlanes& CellWidget::getDrawingPlanes ()
      1176  { return _drawingPlanes; }
      1177 
      1178 
      1179  inline SelectorSet& CellWidget::getSelectorSet ()
      1180  { return _selectors; }
      1181 
      1182 
      1183  Occurrences CellWidget::getOccurrencesUnder ( const QRect& area ) const
      1184  { return getOccurrencesUnder(screenToDbuBox(area)); }
      1185 
      1186 
      1187  inline void CellWidget::addRuler ( const Point& origin, const Point& extremity )
      1188  {
      1189  _state->getRulers().insert ( shared_ptr<Ruler>( new Ruler(origin,extremity) ) );
      1190  refresh ();
      1191  }
      1192 
      1193 
      1194  inline void CellWidget::addRuler ( shared_ptr<Ruler> ruler )
      1195  {
      1196  _state->getRulers().insert ( ruler );
      1197  refresh ();
      1198  }
      1199 
      1200 
      1201  inline void CellWidget::clearRulers ()
      1202  { _state->getRulers().clear (); refresh(); }
      1203 
      1204 
      1205  inline void CellWidget::refresh ()
      1206  { _redrawManager.refresh(); }
      1207 
      1208 
      1209  inline void CellWidget::redrawSelection ()
      1210  { redrawSelection ( QRect(QPoint(0,0),_drawingPlanes.size()) ); }
      1211 
      1212 
      1213  inline void CellWidget::copyToPrinter ( int xpaper, int ypaper, QPrinter* printer, CellWidget::PainterCb_t& cb )
      1214  { _drawingPlanes.copyToPrinter( xpaper, ypaper, printer, cb ); }
      1215 
      1216 
      1217  inline void CellWidget::copyToImage ( QImage* image, PainterCb_t& cb )
      1218  { _drawingPlanes.copyToImage ( image, cb ); }
      1219 
      1220 
      1221  inline DbU::Unit CellWidget::toDbu ( float d ) const
      1222  {
      1223  DbU::Unit unit;
      1224  switch ( getDbuMode() ) {
      1225  case DbU::Physical: unit = DbU::grid(DbU::physicalToGrid(d,DbU::Micro)); break;
      1226  case DbU::Grid: unit = DbU::grid(d); break;
      1227  case DbU::Db: unit = DbU::db((long)d); break;
      1228  default:
      1229  case DbU::Symbolic: unit = DbU::lambda(d); break;
      1230  }
      1231  return unit;
      1232  }
      1233 
      1234 
      1235  inline int CellWidget::dbuToScreenX ( DbU::Unit x ) const
      1236  { return (int)rint ( (float)( x - _screenArea.getXMin() ) * getScale() ); }
      1237 
      1238 
      1239  inline int CellWidget::dbuToScreenY ( DbU::Unit y ) const
      1240  { return (int)rint ( (float)( _screenArea.getYMax() - y ) * getScale() ); }
      1241 
      1242 
      1243  inline int CellWidget::dbuToScreenLength ( DbU::Unit length ) const
      1244  { return (int)rint ( (float)length * getScale() ); }
      1245 
      1246 
      1247  inline QPoint CellWidget::dbuToScreenPoint ( DbU::Unit x, DbU::Unit y ) const
      1248  { return QPoint ( dbuToScreenX(x), dbuToScreenY(y) ); }
      1249 
      1250 
      1251  inline QPoint CellWidget::dbuToScreenPoint ( const Point& point ) const
      1252  { return QPoint ( dbuToScreenX(point.getX()), dbuToScreenY(point.getY()) ); }
      1253 
      1254 
      1255  inline DbU::Unit CellWidget::screenToDbuX ( int x ) const
      1256  { return (DbU::Unit)(x/getScale()) + _screenArea.getXMin(); }
      1257 
      1258 
      1259  inline DbU::Unit CellWidget::screenToDbuY ( int y ) const
      1260  { return _screenArea.getYMax() - (DbU::Unit)(y/getScale()); }
      1261 
      1262 
      1263  inline DbU::Unit CellWidget::screenToDbuLength ( int length ) const
      1264  { return (int)( (float)length / getScale() ); }
      1265 
      1266 
      1267  inline Point CellWidget::screenToDbuPoint ( const QPoint& point ) const
      1268  { return Point ( screenToDbuX(point.x()), screenToDbuY(point.y()) ); }
      1269 
      1270 
      1271  inline Box CellWidget::screenToDbuBox ( const QRect& rect ) const
      1272  {
      1273  return Box ( screenToDbuX(rect.x())
      1274  , screenToDbuY(rect.y())
      1275  , screenToDbuX(rect.x()+rect.width ())
      1276  , screenToDbuY(rect.y()+rect.height())
      1277  );
      1278  }
      1279 
      1280 
      1281  inline Box& CellWidget::pixelInflate ( Box& box, int pixels ) const
      1282  { return box.inflate(screenToDbuLength(pixels)); }
      1283 
      1284 
      1285  inline Point CellWidget::getTopLeft () const
      1286  { return Point(_screenArea.getXMin(),_screenArea.getYMax()); }
      1287 
      1288 
      1289  inline Box CellWidget::getVisibleArea () const
      1290  { return computeVisibleArea(getScale()); }
      1291 
      1292 
      1293  inline Cell* CellWidget::getCell () const
      1294  { return _state->getCell(); }
      1295 
      1296 
      1297  inline Cell* CellWidget::getTopCell () const
      1298  { return _state->getTopCell(); }
      1299 
      1300 
      1301  inline Path CellWidget::getTopPath () const
      1302  { return _state->getTopPath(); }
      1303 
      1304 
      1305  inline PaletteWidget* CellWidget::getPalette ()
      1306  { return _palette; }
      1307 
      1308 
      1309  inline DbU::Unit CellWidget::cursorStep () const
      1310  { return _state->cursorStep(); }
      1311 
      1312 
      1313  inline unsigned int CellWidget::getDbuMode () const
      1314  { return _state->getDbuMode(); }
      1315 
      1316 
      1317  inline bool CellWidget::gridMode () const
      1318  { return _state->gridMode(); }
      1319 
      1320 
      1321  inline bool CellWidget::symbolicMode () const
      1322  { return _state->symbolicMode(); }
      1323 
      1324 
      1325  inline bool CellWidget::physicalMode () const
      1326  { return _state->physicalMode(); }
      1327 
      1328 
      1329  inline DbU::UnitPower CellWidget::getUnitPower () const
      1330  { return _state->getUnitPower(); }
      1331 
      1332 
      1333  inline bool CellWidget::showBoundaries () const
      1334  { return _state->showBoundaries(); }
      1335 
      1336 
      1337  inline bool CellWidget::showSelection () const
      1338  { return _state->showSelection(); }
      1339 
      1340 
      1341  inline bool CellWidget::cumulativeSelection () const
      1342  { return _state->cumulativeSelection(); }
      1343 
      1344 
      1345  inline QPainter& CellWidget::getPainter ( size_t plane )
      1346  { return _drawingPlanes.painter(plane); }
      1347 
      1348 
      1349  inline const DisplayStyle::HSVr& CellWidget::getDarkening () const
      1350  { return _darkening; }
      1351 
      1352 
      1353  inline const float& CellWidget::getScale () const
      1354  { return _state->getScale(); }
      1355 
      1356 
      1357  inline const QPoint& CellWidget::getMousePosition () const
      1358  { return _mousePosition; }
      1359 
      1360 
      1361  inline void CellWidget::updateMousePosition ()
      1362  {
      1363  Point mousePoint = screenToDbuPoint ( _mousePosition );
      1364  emit mousePositionChanged ( _onCursorGrid(mousePoint) );
      1365  }
      1366 
      1367 
      1368  inline void CellWidget::setQueryFilter ( Query::Mask filter )
      1369  {
      1370  _state->setQueryFilter ( filter );
      1371  emit queryFilterChanged ();
      1372  }
      1373 
      1374 
      1375  inline Query::Mask CellWidget::getQueryFilter () const
      1376  { return _state->getQueryFilter(); }
      1377 
      1378 
      1379  inline void CellWidget::setDbuMode ( int mode )
      1380  { _state->setDbuMode(mode); }
      1381 
      1382 
      1383  inline void CellWidget::setUnitPower ( DbU::UnitPower p )
      1384  { _state->setUnitPower(p); }
      1385 
      1386 
      1387  inline void CellWidget::setRubberShape ( RubberShape shape )
      1388  {
      1389  _state->setRubberShape ( shape );
      1390  _redrawManager.refresh ();
      1391  emit queryFilterChanged ();
      1392  }
      1393 
      1394 
      1395  inline CellWidget::RubberShape CellWidget::getRubberShape () const
      1396  { return _state->getRubberShape(); }
      1397 
      1398 
      1399  inline void CellWidget::setPen ( const QPen& pen, size_t plane )
      1400  { _drawingPlanes.painter(plane).setPen(pen); }
      1401 
      1402 
      1403  inline void CellWidget::setDarkening ( const DisplayStyle::HSVr& darkening )
      1404  { _darkening = darkening; }
      1405 
      1406 
      1407  inline bool CellWidget::timeout ( const char* fname, const Timer& timer, double timeout, bool& timedout ) const
      1408  {
      1409  if ( timedout ) return true;
      1410  if ( timer.getCombTimeOnTheFly() < timeout ) return false;
      1411 
      1412  timedout = true;
      1413  cerr << Warning("CellWidget::%s(): timeout %.3f (limit:%.1f)."
      1414  ,fname,timer.getCombTimeOnTheFly(),timeout) << endl;
      1415  return true;
      1416  }
      1417 
      1418 
      1419  inline DbU::Unit CellWidget::_snapGridStep () const
      1420  { return symbolicMode() ? DbU::getSymbolicSnapGridStep() : DbU::getRealSnapGridStep(); }
      1421 
      1422 
      1423  inline DbU::Unit CellWidget::_onSnapGrid ( DbU::Unit u ) const
      1424  { return symbolicMode() ? DbU::getOnSymbolicSnapGrid(u) : DbU::getOnRealSnapGrid(u); }
      1425 
      1426 
      1427  inline Point CellWidget::_onSnapGrid ( const Point& p ) const
      1428  { return Point(_onSnapGrid(p.getX()),_onSnapGrid(p.getY())); }
      1429 
      1430 
      1431  inline DbU::Unit CellWidget::_onCursorGrid ( DbU::Unit u ) const
      1432  { return DbU::getOnCustomGrid(u,cursorStep()); }
      1433 
      1434 
      1435  inline Point CellWidget::_onCursorGrid ( const Point& p ) const
      1436  { return Point(_onCursorGrid(p.getX()),_onCursorGrid(p.getY())); }
      1437 
      1438 
      1439 } // End of Hurricane namespace.
      1440 
      1441 
      1442 GETSTRING_POINTER_SUPPORT(Hurricane::CellWidget);
      1443 IOSTREAM_POINTER_SUPPORT(Hurricane::CellWidget);
      1444 
      1445 
      1446 #endif // HURRICANE_CELL_WIDGET
      static DbU::Unit getOnCustomGrid(DbU::Unit u, DbU::Unit step, SnapMode mode=Nearest)
      +
      1 // -*- C++ -*-
      2 //
      3 // This file is part of the Coriolis Software.
      4 // Copyright (c) UPMC/LIP6 2008-2018, All Rights Reserved
      5 //
      6 // +-----------------------------------------------------------------+
      7 // | C O R I O L I S |
      8 // | V L S I B a c k e n d D a t a - B a s e |
      9 // | |
      10 // | Author : Jean-Paul CHAPUT |
      11 // | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
      12 // | =============================================================== |
      13 // | C++ Header : "./hurricane/viewer/CellWidget.h" |
      14 // +-----------------------------------------------------------------+
      15 
      16 
      17 #ifndef HURRICANE_CELL_WIDGET_H
      18 #define HURRICANE_CELL_WIDGET_H
      19 
      20 #include <math.h>
      21 #include <vector>
      22 #include <functional>
      23 #include <memory>
      24 #include <boost/function.hpp>
      25 #include <QWidget>
      26 #include <QPixmap>
      27 #include <QPainter>
      28 #include <QPrinter>
      29 #include <QImage>
      30 #include <QRect>
      31 #include <QPoint>
      32 class QCursor;
      33 class QShowEvent;
      34 class QResizeEvent;
      35 class QMouseEvent;
      36 class QKeyEvent;
      37 class QAction;
      38 
      39 #include "hurricane/Timer.h"
      40 #include "hurricane/Commons.h"
      41 #include "hurricane/Warning.h"
      42 #include "hurricane/Point.h"
      43 #include "hurricane/Box.h"
      44 #include "hurricane/Transformation.h"
      45 #include "hurricane/Query.h"
      46 #include "hurricane/viewer/DisplayStyle.h"
      47 #include "hurricane/viewer/CellWidgets.h"
      48 #include "hurricane/viewer/Selector.h"
      49 #include "hurricane/viewer/SelectorCriterion.h"
      50 #include "hurricane/viewer/Ruler.h"
      51 
      52 
      53 namespace Hurricane {
      54 
      55  using std::vector;
      56  using std::unary_function;
      57  using std::shared_ptr;
      58 
      59  class Technology;
      60  class BasicLayer;
      61  class Go;
      62  class Net;
      63  class Cell;
      64  class Instance;
      65  class Slice;
      66  class Segment;
      67  class Contact;
      68  class Pad;
      69  class Selector;
      70  class PaletteWidget;
      71  class Command;
      72 //class MapView;
      73 
      74  enum UpdateState { ExternalEmit = 0
      75  , InternalEmit
      76  , InternalReceive
      77  };
      78 
      79 
      80 // -------------------------------------------------------------------
      81 // Class : "Hurricane::CellWidget".
      82 
      83 
      84  class CellWidget : public QWidget {
      85  Q_OBJECT;
      86 
      87  private:
      88  class DrawingPlanes;
      89  public:
      90  class State;
      91  typedef void ( DrawExtensionGo_t )( CellWidget*
      92  , const Go*
      93  , const BasicLayer*
      94  , const Box&
      95  , const Transformation&
      96  );
      97  typedef void ( InitExtensionGo_t )( CellWidget* );
      98  typedef boost::function< void(QPainter&) > PainterCb_t;
      99  enum RubberShape { Centric=1, Barycentric, Steiner };
      100  enum TextFlag { Bold =0x0001
      101  , BigFont =0x0002
      102  , Reverse =0x0004
      103  , Frame =0x0008
      104  , Rounded =0x0010
      105  , Center =0x0020
      106  , Left =0x0040
      107  , Right =0x0080
      108  , Top =0x0100
      109  };
      110  enum Flag { NoFlags =0x0000
      111  , NoResetCommands=0x0001
      112  };
      113  public:
      115  public:
      116  // Constructor & Destructor.
      117  CellWidget ( QWidget* parent=NULL );
      118  virtual ~CellWidget ();
      119  // Accessors.
      120  // MapView* getMapView () { return _mapView; };
      121  void setCell ( Cell*, Path topPath=Path(), unsigned int flags=NoFlags );
      122  inline Cell* getCell () const;
      123  inline Cell* getTopCell () const;
      124  inline Path getTopPath () const;
      125  inline shared_ptr<State>& getState ();
      126  inline shared_ptr<State> getStateClone ();
      127  inline PaletteWidget* getPalette ();
      128  inline Occurrences getOccurrencesUnder ( const QRect& ) const;
      129  Occurrences getOccurrencesUnder ( const Box& ) const;
      130  inline SelectorSet& getSelectorSet ();
      131  inline RulerSet& getRulerSet ();
      132  inline RubberShape getRubberShape () const;
      133  inline int getStartLevel () const;
      134  inline int getStopLevel () const;
      135  inline Query::Mask getQueryFilter () const ;
      136  void bindToPalette ( PaletteWidget* );
      137  void detachFromPalette ();
      138  void bindCommand ( Command* );
      139  void unbindCommand ( Command* );
      140  void resetCommands ();
      141  inline void setActiveCommand ( Command* );
      142  inline Command* getActiveCommand () const;
      143  Command* getCommand ( const std::string& ) const;
      144  inline void resetActiveCommand ();
      145  inline void setCursorStep ( DbU::Unit );
      146  inline void setRealSnapGridStep ( DbU::Unit step );
      147  inline unsigned int getDbuMode () const;
      148  inline bool gridMode () const;
      149  inline bool symbolicMode () const;
      150  inline bool physicalMode () const;
      151  inline DbU::UnitPower getUnitPower () const;
      152  inline bool showBoundaries () const;
      153  inline bool showSelection () const;
      154  inline bool cumulativeSelection () const;
      155  inline void setDbuMode ( int );
      156  inline void setUnitPower ( DbU::UnitPower );
      157  inline void setRubberShape ( RubberShape );
      158  inline void setStartLevel ( int );
      159  inline void setStopLevel ( int );
      160  inline void setQueryFilter ( Query::Mask );
      161  inline bool timeout ( const char*, const Timer&, double timeout, bool& timedout ) const;
      162  // Painter control & Hurricane objects drawing primitives.
      163  inline void setEnableRedrawInterrupt ( bool );
      164  inline void addDrawExtensionGo ( const Name&, InitExtensionGo_t*, DrawExtensionGo_t* );
      165  inline void copyDrawExtensionGos ( const CellWidget* );
      166  inline QPainter& getPainter ( size_t plane=PlaneId::Working );
      167  inline const DisplayStyle::HSVr& getDarkening () const;
      168  inline void copyToPrinter ( int xpaper, int ypaper, QPrinter*, PainterCb_t& );
      169  inline void copyToImage ( QImage*, PainterCb_t& );
      170  inline const float& getScale () const;
      171  inline const QPoint& getMousePosition () const;
      172  inline void updateMousePosition ();
      173  void setLayerVisible ( const Name& layer, bool visible );
      174  bool isLayerVisible ( const Name& );
      175  bool isDrawable ( const Name& );
      176  bool isDrawableLayer ( const Name& );
      177  bool isDrawableExtension ( const Name& );
      178  bool isSelectable ( const Name& ) const;
      179  bool isSelectable ( const Layer* ) const;
      180  bool isPrinter () const;
      181  void setPrinter ( bool );
      182  inline void setDarkening ( const DisplayStyle::HSVr& );
      183  inline void setPen ( const QPen& , size_t plane=PlaneId::Working );
      184  void drawBox ( DbU::Unit, DbU::Unit, DbU::Unit, DbU::Unit );
      185  void drawBox ( const Box& );
      186  void drawLine ( DbU::Unit, DbU::Unit, DbU::Unit, DbU::Unit, bool mode=true );
      187  void drawLine ( const Point&, const Point&, bool mode=true );
      188  void drawText ( const Point&, const char*, unsigned int flags=0, int angle=0 );
      189  void drawGrid ( QRect );
      190  void drawSpot ();
      191  void drawRuler ( shared_ptr<Ruler> );
      192  void drawRulers ( QRect );
      193  void drawDisplayText ( const QRect& , const char*, unsigned int flags=0 );
      194  void drawDisplayText ( const QPoint&, const char*, unsigned int flags=0, int angle=0 );
      195  void drawScreenPolygon ( const QPoint*, int count, size_t plane=PlaneId::Working );
      196  void drawScreenPolygon ( const QPolygon&, size_t plane=PlaneId::Working );
      197  void drawScreenLine ( const QPoint&, const QPoint&, size_t plane=PlaneId::Working, bool mode=true );
      198  void drawScreenRect ( const QPoint&, const QPoint&, size_t plane=PlaneId::Working );
      199  void drawScreenRect ( const QRect& , size_t plane=PlaneId::Working );
      200  void drawScreenPolyline ( const QPoint*, int, int, size_t plane=PlaneId::Working );
      201  // Geometric conversions.
      202  inline DbU::Unit toDbu ( float ) const;
      203  QRect dbuToScreenRect ( DbU::Unit x1, DbU::Unit y1, DbU::Unit x2, DbU::Unit y2, bool usePoint=true ) const;
      204  QRect dbuToScreenRect ( const Box& box , bool usePoint=true ) const;
      205  inline int dbuToScreenX ( DbU::Unit x ) const;
      206  inline int dbuToScreenY ( DbU::Unit y ) const;
      207  inline int dbuToScreenLength ( DbU::Unit length ) const;
      208  inline QPoint dbuToScreenPoint ( DbU::Unit x, DbU::Unit y ) const;
      209  inline QPoint dbuToScreenPoint ( const Point& point ) const;
      210  inline DbU::Unit screenToDbuLength ( int length ) const;
      211  inline DbU::Unit screenToDbuX ( int x ) const;
      212  inline DbU::Unit screenToDbuY ( int y ) const;
      213  inline Point screenToDbuPoint ( const QPoint& point ) const;
      214  inline Box screenToDbuBox ( const QRect& rect ) const;
      215  inline Box& pixelInflate ( Box&, int pixels ) const;
      216  inline Point getTopLeft () const;
      217  inline Box getVisibleArea () const;
      218  Box computeVisibleArea ( float scale ) const;
      219  Box computeVisibleArea ( float scale, const Point& topLeft ) const;
      220  Box computeVisibleArea ( const Box&, float& scale ) const;
      221  inline DbU::Unit cursorStep () const;
      222  inline bool _underDetailedGridThreshold() const;
      223  inline DbU::Unit _snapGridStep () const;
      224  inline DbU::Unit _onSnapGrid ( DbU::Unit ) const;
      225  inline Point _onSnapGrid ( const Point& ) const;
      226  inline DbU::Unit _onCursorGrid ( DbU::Unit ) const;
      227  inline Point _onCursorGrid ( const Point& ) const;
      228  // Qt QWidget Functions Overloads.
      229  void pushCursor ( Qt::CursorShape cursor );
      230  void popCursor ();
      231  virtual QSize minimumSizeHint () const;
      232  virtual void showEvent ( QShowEvent* );
      233  virtual void resizeEvent ( QResizeEvent* );
      234  virtual void wheelEvent ( QWheelEvent* );
      235  virtual void keyPressEvent ( QKeyEvent* );
      236  virtual void keyReleaseEvent ( QKeyEvent* );
      237  virtual void mouseMoveEvent ( QMouseEvent* );
      238  virtual void mousePressEvent ( QMouseEvent* );
      239  virtual void mouseReleaseEvent ( QMouseEvent* );
      240  signals:
      241  void cellChanged ( Cell* );
      242  void cellPreModificated ();
      243  void cellPostModificated ();
      244  void stateChanged ( shared_ptr<CellWidget::State>& );
      245  void styleChanged ();
      246  void queryFilterChanged ();
      247  void dbuModeChanged ( unsigned int mode, DbU::UnitPower );
      248  void updatePalette ( Cell* );
      249  void mousePositionChanged ( const Point& position );
      250  void selectionModeChanged ();
      251  void selectionChanged ( const SelectorSet& );
      252  void selectionToggled ( Occurrence );
      253  void showBoundariesToggled ( bool );
      254  protected:
      255  virtual void paintEvent ( QPaintEvent* );
      256  public slots:
      257  // Qt QWidget Slots Overload & CellWidget Specifics.
      258  void setState ( shared_ptr<CellWidget::State>&
      259  , unsigned int flags=NoFlags );
      260  inline void openRefreshSession ();
      261  inline void closeRefreshSession ();
      262  inline DrawingPlanes& getDrawingPlanes ();
      263  // void select ( const Net* );
      264  void select ( Occurrence );
      265  bool isSelected ( Occurrence );
      266  void selectOccurrencesUnder ( Box selectArea );
      267  // void unselect ( const Net* );
      268  void unselect ( Occurrence );
      269  void unselectAll ();
      270  void toggleSelection ( Occurrence );
      271  void setShowSelection ( bool state );
      272  void setCumulativeSelection ( bool state );
      273  // void _select ( const Net* );
      274  // void _unselect ( const Net* );
      275  // void _selectOccurrencesUnder ( Box selectArea );
      276  void _unselectAll ();
      277  inline void addRuler ( const Point&, const Point& );
      278  inline void addRuler ( shared_ptr<Ruler> );
      279  inline void clearRulers ();
      280  void changeQueryFilter ();
      281  void rubberChange ();
      282  void changeDbuMode ( unsigned int mode, DbU::UnitPower );
      283  void setStyle ( int id );
      284  void updatePalette ();
      285  void cellPreModificate ();
      286  void cellPostModificate ();
      287  inline void refresh ();
      288  void _redraw ( QRect redrawArea );
      289  inline void redrawSelection ();
      290  void redrawSelection ( QRect redrawArea );
      291  void goLeft ( int dx = 0 );
      292  void goRight ( int dx = 0 );
      293  void goUp ( int dy = 0 );
      294  void goDown ( int dy = 0 );
      295  void fitToContents ( bool historyEnable=true );
      296  void fitToNet ( const Net*, bool historyEnable=true );
      297  void setScale ( float );
      298  void scaleHistoryUp ();
      299  void scaleHistoryDown ();
      300  // void setGridMode ();
      301  // void setSymbolicMode ();
      302  // void setPhysicalMode ( DbU::UnitPower );
      303  void setShowBoundaries ( bool state );
      304  void reframe ();
      305  void reframe ( const Box& box, bool historyEnable=true );
      306  void displayReframe ();
      307  void _goLeft ( int dx );
      308  void _goRight ( int dx );
      309  void _goUp ( int dy );
      310  void _goDown ( int dy );
      311  void _refresh ();
      312  std::string _getString () const;
      313 
      314  private:
      315  class Spot {
      316  public:
      317  Spot ( CellWidget* );
      318  void setRestore ( bool );
      319  inline void setShowSpot ( bool );
      320  inline const QPoint& getSpotPoint () const;
      321  void restore ();
      322  QPoint computeSpotPoint ( const QPoint& );
      323  void moveTo ( const QPoint& );
      324  private:
      325  CellWidget* _cellWidget;
      326  QPoint _spotPoint;
      327  bool _restore;
      328  bool _showSpot;
      329  };
      330 
      331  private:
      332  class RedrawEvent {
      333  public:
      334  enum EventType { GoLeft = 1
      335  , GoRight = 2
      336  , GoUp = 3
      337  , GoDown = 4
      338  , Refresh = 5
      339  };
      340  public:
      341  RedrawEvent ( EventType, int shift, CellWidget* );
      342  inline EventType getType () const;
      343  inline int getShift () const;
      344  private:
      345  EventType _type;
      346  int _shift;
      347  };
      348 
      349  private:
      350  class RedrawManager {
      351  public:
      352  inline RedrawManager ( CellWidget* );
      353  ~RedrawManager ();
      354  void goLeft ( int );
      355  void goRight ( int );
      356  void goUp ( int );
      357  void goDown ( int );
      358  void refresh ();
      359  void process ();
      360  inline void stopProcessing ();
      361  inline bool isProcessing () const;
      362  inline bool interrupted () const;
      363  inline size_t getPendings () const;
      364  inline void openRefreshSession ();
      365  inline void closeRefreshSession ();
      366  private:
      367  CellWidget* _widget;
      368  list<RedrawEvent*> _events;
      369  int _refreshSession;
      370  bool _processing;
      371  bool _interrupted;
      372  };
      373 
      374  public:
      375  class PlaneId {
      376  public:
      377  enum Ids { Normal = 0 // _planes[0]
      378  , Selection = 1 // _planes[1]
      379  , AutoCopy = 2 // _planes[2]
      380  , Widget = 3
      381  , Printer = 4
      382  , Image = 5
      383  , Working = 6
      384  };
      385  };
      386 
      387  private:
      388  class DrawingPlanes {
      389  public:
      390  DrawingPlanes ( const QSize& size, CellWidget* cw );
      391  ~DrawingPlanes ();
      392  inline bool getLineMode () const;
      393  inline size_t getWorkingPlane () const;
      394  inline void pushWorkingPlane ();
      395  inline void popWorkingPlane ();
      396  inline int width () const;
      397  inline int height () const;
      398  inline QSize size () const;
      399  inline void select ( size_t i );
      400  inline QPainter& painter ( size_t i=PlaneId::Working );
      401  inline void begin ( size_t i=PlaneId::Working );
      402  inline void end ( size_t i=PlaneId::Working );
      403  inline void buffersBegin ();
      404  inline void buffersEnd ();
      405  void setLineMode ( bool mode );
      406  void setPen ( const QPen& pen );
      407  void setBrush ( const QBrush& brush );
      408  void setBackground ( const QBrush& brush );
      409  void setBackgroundMode ( Qt::BGMode mode );
      410  void resize ( const QSize& size );
      411  void shiftLeft ( int dx );
      412  void shiftRight ( int dx );
      413  void shiftUp ( int dy );
      414  void shiftDown ( int dy );
      415  inline void copyToSelect ();
      416  inline void copyToSelect ( const QRect& );
      417  void copyToSelect ( int sx, int sy, int h, int w );
      418  inline void copyToScreen ();
      419  void copyToScreen ( int sx, int sy, int h, int w );
      420  inline void copyToPrinter ( int xpaper, int ypaper, QPrinter*, CellWidget::PainterCb_t& );
      421  void copyToPrinter ( int xpaper, int ypaper, int sx, int sy, int h, int w, QPrinter*, CellWidget::PainterCb_t& );
      422  inline void copyToImage ( QImage*, CellWidget::PainterCb_t& );
      423  void copyToImage ( int sx, int sy, int h, int w, QImage*, CellWidget::PainterCb_t& );
      424  private:
      425  static const int _cartoucheWidth;
      426  static const int _cartoucheHeight;
      427  static const int _titleHeight;
      428  CellWidget* _cellWidget;
      429  QPrinter* _printer;
      430  QImage* _image;
      431  QPixmap* _planes[3];
      432  QPainter _painters[PlaneId::Working];
      433  QPen _normalPen;
      434  QPen _linePen;
      435  QPoint _brushOrigin;
      436  size_t _workingPlane;
      437  size_t _pushWorkingPlane;
      438  bool _lineMode;
      439  private:
      440  DrawingPlanes ( const DrawingPlanes& );
      441  DrawingPlanes& operator= ( const DrawingPlanes& );
      442  };
      443 
      444  private:
      445  class DrawingQuery : public Query {
      446  public:
      447  DrawingQuery ( CellWidget* widget );
      448  inline void setQuery ( const Box& area
      449  , const Transformation& transformation
      450  , const BasicLayer* basicLayer
      451  , ExtensionSlice::Mask extensionMask
      452  , unsigned int filter
      453  );
      454  inline void addDrawExtensionGo ( const Name&
      455  , InitExtensionGo_t*
      456  , DrawExtensionGo_t*
      457  );
      458  inline void copyDrawExtensionGos ( const DrawingQuery& );
      459  void setDrawExtensionGo ( const Name& );
      460  virtual bool hasMasterCellCallback () const;
      461  virtual bool hasGoCallback () const;
      462  virtual bool hasMarkerCallback () const;
      463  virtual bool hasRubberCallback () const;
      464  virtual bool hasExtensionGoCallback () const;
      465  virtual void masterCellCallback ();
      466  virtual void goCallback ( Go* );
      467  virtual void rubberCallback ( Rubber* );
      468  virtual void markerCallback ( Marker* );
      469  virtual void extensionGoCallback ( Go* );
      470  void drawMasterCell ( const Cell* cell
      471  , const Transformation& transformation
      472  );
      473  void drawGo ( const Go* go
      474  , const BasicLayer* basicLayer
      475  , const Box& area
      476  , const Transformation& transformation
      477  );
      478  void drawRubber ( const Rubber* rubber
      479  , const Box& area
      480  , const Transformation& transformation
      481  );
      482  void drawMarker ( const Marker* marker
      483  , const Box& area
      484  , const Transformation& transformation
      485  );
      486  void drawExtensionGo ( CellWidget* widget
      487  , const Go* go
      488  , const BasicLayer* basicLayer
      489  , const Box& area
      490  , const Transformation& transformation
      491  );
      492  inline unsigned int getGoCount () const;
      493  inline unsigned int getExtensionGoCount () const;
      494  inline unsigned int getInstanceCount () const;
      495  inline void resetGoCount ();
      496  inline void resetExtensionGoCount ();
      497  inline void resetInstanceCount ();
      498 
      499  protected:
      500  CellWidget* _cellWidget;
      501  DrawExtensionGo_t* _drawExtensionGo;
      502  map<Name,pair<InitExtensionGo_t*,DrawExtensionGo_t*> >
      503  _drawExtensionGos;
      504  unsigned int _goCount;
      505  unsigned int _extensionGoCount;
      506  unsigned int _instanceCount;
      507  };
      508 
      509  private:
      510  class TextDrawingQuery : public Query {
      511  public:
      512  TextDrawingQuery ( CellWidget* widget );
      513  inline void setQuery ( const Box& area
      514  , const Transformation& transformation
      515  );
      516  virtual bool hasMasterCellCallback () const;
      517  virtual bool hasGoCallback () const;
      518  virtual bool hasRubberCallback () const;
      519  virtual bool hasExtensionGoCallback () const;
      520  virtual void masterCellCallback ();
      521  virtual void goCallback ( Go* go );
      522  virtual void extensionGoCallback ( Go* go );
      523  virtual void rubberCallback ( Rubber* );
      524 
      525  protected:
      526  CellWidget* _cellWidget;
      527  };
      528 
      529  private:
      530  class SelectorCriterions {
      531  public:
      532  SelectorCriterions ();
      533  ~SelectorCriterions ();
      534  inline void setCellWidget ( CellWidget* );
      535  inline const vector<SelectorCriterion*>& getCriterions () const;
      536  SelectorCriterion* add ( const Net* net );
      537  SelectorCriterion* add ( Box area );
      538  inline SelectorCriterion* add ( SelectorCriterion* );
      539  bool remove ( const Net* net );
      540  void clear ();
      541  void invalidate ();
      542  void revalidate ();
      543  inline size_t size () const;
      544  private:
      545  CellWidget* _cellWidget;
      546  vector<SelectorCriterion*> _criterions;
      547  };
      548 
      549  public:
      550  class State {
      551  public:
      552  inline State ( Cell* cell=NULL, Path topPath=Path() );
      553  State* clone () const;
      554  inline void setCell ( Cell* );
      555  inline void setTopPath ( Path );
      556  inline void setCellWidget ( CellWidget* );
      557  inline void setCursorStep ( DbU::Unit );
      558  inline DbU::Unit getCursorStep () const;
      559  inline DbU::UnitPower getUnitPower () const;
      560  inline void setDbuMode ( int );
      561  inline void setUnitPower ( DbU::UnitPower );
      562  inline void setShowBoundaries ( bool );
      563  inline void setShowSelection ( bool );
      564  inline void setCumulativeSelection ( bool );
      565  void setScale ( float );
      566  inline void setTopLeft ( DbU::Unit, DbU::Unit );
      567  inline void setTopLeft ( const Point& );
      568  inline void setQueryFilter ( Query::Mask );
      569  inline void setStartLevel ( int );
      570  inline void setStopLevel ( int );
      571  inline void setRubberShape ( RubberShape );
      572  inline void setHistoryEnable ( bool );
      573  bool scaleHistoryUp ();
      574  bool scaleHistoryDown ();
      575  inline Cell* getCell () const;
      576  inline Cell* getTopCell () const;
      577  inline Path getTopPath () const;
      578  const Name& getName () const;
      579  inline SelectorCriterions& getSelection ();
      580  inline RulerSet& getRulers ();
      581  inline DbU::Unit cursorStep () const;
      582  inline unsigned int getDbuMode () const;
      583  inline bool gridMode () const;
      584  inline bool symbolicMode () const;
      585  inline bool physicalMode () const;
      586  inline bool nanoMode () const;
      587  inline bool microMode () const;
      588  inline bool showBoundaries () const;
      589  inline bool showSelection () const;
      590  inline bool cumulativeSelection () const;
      591  inline bool getHistoryEnable () const;
      592  inline size_t getHistorySize () const;
      593  inline const float& getScale () const;
      594  inline const Point& getTopLeft () const;
      595  inline Query::Mask getQueryFilter () const;
      596  inline int getStartLevel () const;
      597  inline int getStopLevel () const;
      598  inline RubberShape getRubberShape () const;
      599 
      600  private:
      601  class ScaleEntry {
      602  public:
      603  inline ScaleEntry ( float, const Point& );
      604  public:
      605  float _scale;
      606  Point _topLeft;
      607  };
      608 
      609  private:
      610  Cell* _cell;
      611  Path _topPath;
      612  Name _hierarchicalName;
      613  CellWidget* _cellWidget;
      614  SelectorCriterions _selection;
      615  RulerSet _rulers;
      616  DbU::Unit _cursorStep;
      617  unsigned int _dbuMode;
      618  DbU::UnitPower _unitPower;
      619  bool _showBoundaries;
      620  bool _showSelection;
      621  Query::Mask _queryFilter;
      622  int _startLevel;
      623  int _stopLevel;
      624  RubberShape _rubberShape;
      625  bool _cumulativeSelection;
      626  vector<ScaleEntry> _scaleHistory;
      627  size_t _ihistory;
      628  bool _historyEnable;
      629  };
      630  public:
      631  class FindStateName : public unary_function< const shared_ptr<State>&, bool > {
      632  public:
      633  inline FindStateName ( const Name& );
      634  inline bool operator() ( const shared_ptr<State>& );
      635  private:
      636  const Name _cellHierName;
      637  };
      638 
      639  protected:
      640  // Internal: Attributes.
      641  static int _initialSide;
      642  vector<Qt::CursorShape> _cursors;
      643  // MapView* _mapView;
      644  Technology* _technology;
      645  PaletteWidget* _palette;
      646  Box _screenArea;
      647  RedrawManager _redrawManager;
      648  DrawingPlanes _drawingPlanes;
      649  DrawingQuery _drawingQuery;
      650  TextDrawingQuery _textDrawingQuery;
      651  DisplayStyle::HSVr _darkening;
      652  QPoint _mousePosition;
      653  Spot _spot;
      654  shared_ptr<State> _state;
      655  bool _isPrinter;
      656  bool _cellChanged;
      657  bool _selectionHasChanged;
      658  int _delaySelectionChanged;
      659  bool _cellModificated;
      660  bool _enableRedrawInterrupt;
      661  SelectorSet _selectors;
      662  Command* _activeCommand;
      663  vector<Command*> _commands;
      664  size_t _redrawRectCount;
      665  int _textFontHeight;
      666 
      667  friend class RedrawManager;
      668  };
      669 
      670 
      671  inline void CellWidget::Spot::setShowSpot ( bool show )
      672  { _showSpot = show; }
      673 
      674 
      675  inline const QPoint& CellWidget::Spot::getSpotPoint () const
      676  { return _spotPoint; }
      677 
      678 
      679  inline void CellWidget::DrawingQuery::setQuery ( const Box& area
      680  , const Transformation& transformation
      681  , const BasicLayer* basicLayer
      682  , ExtensionSlice::Mask extensionMask
      683  , unsigned int filter
      684  )
      685  {
      686  Query::setQuery ( _cellWidget->getCell()
      687  , area
      688  , transformation
      689  , basicLayer
      690  , extensionMask
      691  , filter
      692  );
      693  }
      694 
      695 
      696  inline void CellWidget::setEnableRedrawInterrupt ( bool state )
      697  { _enableRedrawInterrupt = state; }
      698 
      699 
      700  inline void CellWidget::openRefreshSession ()
      701  { _redrawManager.openRefreshSession (); }
      702 
      703 
      704  inline void CellWidget::closeRefreshSession ()
      705  { _redrawManager.closeRefreshSession (); }
      706 
      707 
      708  inline void CellWidget::DrawingQuery::addDrawExtensionGo ( const Name& name
      709  , InitExtensionGo_t* initExtensionGo
      710  , DrawExtensionGo_t* drawExtensionGo
      711  )
      712  { _drawExtensionGos[name] = make_pair(initExtensionGo,drawExtensionGo); }
      713 
      714 
      715  inline void CellWidget::DrawingQuery::copyDrawExtensionGos ( const CellWidget::DrawingQuery& other )
      716  { _drawExtensionGos = other._drawExtensionGos; }
      717 
      718 
      719  inline void CellWidget::DrawingQuery::resetGoCount ()
      720  { _goCount = 0; }
      721 
      722 
      723  inline void CellWidget::DrawingQuery::resetExtensionGoCount ()
      724  { _extensionGoCount = 0; }
      725 
      726 
      727  inline void CellWidget::DrawingQuery::resetInstanceCount ()
      728  { _instanceCount = 0; }
      729 
      730 
      731  inline unsigned int CellWidget::DrawingQuery::getGoCount () const
      732  { return _goCount; }
      733 
      734 
      735  inline unsigned int CellWidget::DrawingQuery::getExtensionGoCount () const
      736  { return _extensionGoCount; }
      737 
      738 
      739  inline unsigned int CellWidget::DrawingQuery::getInstanceCount () const
      740  { return _instanceCount; }
      741 
      742 
      743  inline CellWidget::RedrawEvent::EventType CellWidget::RedrawEvent::getType () const
      744  { return _type; }
      745 
      746 
      747  inline int CellWidget::RedrawEvent::getShift () const
      748  { return _shift; }
      749 
      750 
      751  inline bool CellWidget::RedrawManager::isProcessing () const
      752  { return _processing; }
      753 
      754 
      755  inline void CellWidget::RedrawManager::stopProcessing ()
      756  { _processing = false; }
      757 
      758 
      759  inline size_t CellWidget::RedrawManager::getPendings () const
      760  { return _events.size(); }
      761 
      762 
      763  inline void CellWidget::RedrawManager::openRefreshSession ()
      764  { _refreshSession++; }
      765 
      766 
      767  inline void CellWidget::RedrawManager::closeRefreshSession ()
      768  {
      769  _refreshSession--;
      770  if ( !_processing && (_refreshSession == 0) ) process ();
      771  }
      772 
      773 
      774  inline bool CellWidget::RedrawManager::interrupted () const
      775  {
      776 #ifdef ALLOW_REQUEST_INTERRUPT
      777  return ( _events.size() > 5 ) || _interrupted;
      778 #else
      779  return _interrupted;
      780 #endif
      781  }
      782 
      783 
      784  inline bool CellWidget::DrawingPlanes::getLineMode () const
      785  { return _lineMode; }
      786 
      787 
      788  inline size_t CellWidget::DrawingPlanes::getWorkingPlane () const
      789  { return _workingPlane; }
      790 
      791 
      792  inline void CellWidget::DrawingPlanes::pushWorkingPlane ()
      793  { _pushWorkingPlane = _workingPlane; }
      794 
      795 
      796  inline void CellWidget::DrawingPlanes::popWorkingPlane ()
      797  { _workingPlane = _pushWorkingPlane; }
      798 
      799 
      800  inline int CellWidget::DrawingPlanes::width () const
      801  { return _planes[PlaneId::Normal]->width(); }
      802 
      803 
      804  inline int CellWidget::DrawingPlanes::height () const
      805  { return _planes[PlaneId::Normal]->height(); }
      806 
      807 
      808  inline QSize CellWidget::DrawingPlanes::size () const
      809  { return _planes[PlaneId::Normal]->size(); }
      810 
      811 
      812  inline void CellWidget::DrawingPlanes::select ( size_t i )
      813  { _workingPlane = i; }
      814 
      815 
      816  inline QPainter& CellWidget::DrawingPlanes::painter ( size_t i )
      817  { return _painters[ (i>=PlaneId::Working) ? _workingPlane : i ]; }
      818 
      819 
      820  inline void CellWidget::DrawingPlanes::begin ( size_t i )
      821  {
      822  size_t wp = (i>=PlaneId::Working) ? _workingPlane : i;
      823  switch ( wp ) {
      824  case PlaneId::Normal:
      825  case PlaneId::Selection:
      826  case PlaneId::AutoCopy: _painters[wp ].begin( _planes[wp] ); break;
      827  case PlaneId::Widget: _painters[PlaneId::Widget ].begin( _cellWidget ); break;
      828  case PlaneId::Printer: _painters[PlaneId::Printer].begin( _printer ); break;
      829  case PlaneId::Image: _painters[PlaneId::Image ].begin( _image ); break;
      830  default:
      831  std::cerr << "[BUG] Bad plane selection." << std::endl;
      832  }
      833  }
      834 
      835 
      836  inline void CellWidget::DrawingPlanes::end ( size_t i )
      837  { _painters[(i>=PlaneId::Working)?_workingPlane:i].end (); }
      838 
      839 
      840  inline void CellWidget::DrawingPlanes::buffersBegin ()
      841  {
      842  begin( PlaneId::Normal );
      843  begin( PlaneId::Selection );
      844  begin( PlaneId::AutoCopy );
      845  }
      846 
      847 
      848  inline void CellWidget::DrawingPlanes::buffersEnd ()
      849  {
      850  end( PlaneId::Normal );
      851  end( PlaneId::Selection );
      852  end( PlaneId::AutoCopy );
      853  }
      854 
      855 
      856  inline void CellWidget::DrawingPlanes::copyToSelect ()
      857  { copyToSelect ( 0, 0, width(), height() ); }
      858 
      859 
      860  inline void CellWidget::DrawingPlanes::copyToSelect ( const QRect& r )
      861  { copyToSelect ( r.x(), r.y(), r.width(), r.height() ); }
      862 
      863 
      864  inline void CellWidget::DrawingPlanes::copyToScreen ()
      865  { copyToScreen ( 0, 0, width(), height() ); }
      866 
      867 
      868  inline void CellWidget::DrawingPlanes::copyToPrinter ( int xpaper, int ypaper, QPrinter* printer, CellWidget::PainterCb_t& cb )
      869  {
      870  copyToPrinter ( xpaper
      871  , ypaper
      872  , 0
      873  , 0
      874  , _cellWidget->geometry().width()
      875  , _cellWidget->geometry().height()
      876  , printer
      877  , cb
      878  );
      879  }
      880 
      881 
      882  inline void CellWidget::DrawingPlanes::copyToImage ( QImage* image, CellWidget::PainterCb_t& cb )
      883  {
      884  copyToImage ( 0
      885  , 0
      886  , _cellWidget->geometry().width()
      887  , _cellWidget->geometry().height()
      888  , image
      889  , cb
      890  );
      891  }
      892 
      893 
      894  inline void CellWidget::SelectorCriterions::setCellWidget ( CellWidget* cw )
      895  { _cellWidget = cw; }
      896 
      897 
      898  inline size_t CellWidget::SelectorCriterions::size () const
      899  { return _criterions.size(); }
      900 
      901 
      902  inline const vector<SelectorCriterion*>& CellWidget::SelectorCriterions::getCriterions () const
      903  { return _criterions; }
      904 
      905 
      906  inline SelectorCriterion* CellWidget::SelectorCriterions::add ( SelectorCriterion* criterion )
      907  {
      908  _criterions.push_back( criterion );
      909  return _criterions.back();
      910  }
      911 
      912 
      913  inline CellWidget::State::ScaleEntry::ScaleEntry ( float scale, const Point& topLeft )
      914  : _scale(scale), _topLeft(topLeft)
      915  { }
      916 
      917 
      918  inline CellWidget::State::State ( Cell* cell, Path topPath )
      919  : _cell (cell)
      920  , _topPath (topPath)
      921  , _hierarchicalName ()
      922  , _cellWidget (NULL)
      923  , _selection ()
      924  , _rulers ()
      925  , _cursorStep (DbU::lambda(0.5))
      926  , _dbuMode (DbU::Symbolic)
      927  , _unitPower (DbU::Nano)
      928  , _showBoundaries (true)
      929  , _showSelection (false)
      930  , _queryFilter (~Query::DoTerminalCells)
      931  , _startLevel (0)
      932  , _stopLevel (99)
      933  , _rubberShape (CellWidget::Barycentric)
      934  , _cumulativeSelection(false)
      935  , _scaleHistory ()
      936  , _ihistory (0)
      937  , _historyEnable (false)
      938  {
      939  _scaleHistory.push_back ( ScaleEntry(1.0,Point(0,0)) );
      940  if (_cell) _hierarchicalName = Name( _cell->getHierarchicalName() );
      941  }
      942 
      943 
      944  inline unsigned int CellWidget::State::getDbuMode () const
      945  { return _dbuMode; }
      946 
      947 
      948  inline bool CellWidget::State::symbolicMode () const
      949  { return (_dbuMode == DbU::Symbolic); }
      950 
      951 
      952  inline bool CellWidget::State::gridMode () const
      953  { return (_dbuMode == DbU::Grid); }
      954 
      955 
      956  inline bool CellWidget::State::physicalMode () const
      957  { return (_dbuMode == DbU::Physical); }
      958 
      959 
      960  inline void CellWidget::State::setCell ( Cell* cell )
      961  {
      962  _cell = cell;
      963  if (_cell) _hierarchicalName = Name( _cell->getHierarchicalName() );
      964  }
      965 
      966 
      967  inline void CellWidget::State::setTopPath ( Path topPath )
      968  { _topPath = topPath; }
      969 
      970 
      971  inline void CellWidget::State::setCellWidget ( CellWidget* cw )
      972  {
      973  _cellWidget = cw;
      974  _selection.setCellWidget ( cw );
      975  }
      976 
      977 
      978  inline void CellWidget::State::setCursorStep ( DbU::Unit step )
      979  { _cursorStep = step; }
      980 
      981  inline DbU::Unit CellWidget::State::getCursorStep () const
      982  { return _cursorStep; }
      983 
      984 
      985  inline DbU::UnitPower CellWidget::State::getUnitPower () const
      986  { return _unitPower; }
      987 
      988 
      989  inline void CellWidget::State::setDbuMode ( int mode )
      990  {
      991  _dbuMode = mode;
      992  switch ( _dbuMode ) {
      993  case DbU::Symbolic: _cursorStep = DbU::lambda(0.5); break;
      994  case DbU::Grid: _cursorStep = DbU::grid (1.0); break;
      995  case DbU::Physical: _cursorStep = DbU::grid (1.0); break;
      996  }
      997  }
      998 
      999 
      1000  inline void CellWidget::State::setUnitPower ( DbU::UnitPower p )
      1001  { _unitPower = p; }
      1002 
      1003 
      1004  inline void CellWidget::State::setShowBoundaries ( bool state )
      1005  { _showBoundaries = state; }
      1006 
      1007 
      1008  inline void CellWidget::State::setShowSelection ( bool state )
      1009  { _showSelection = state; }
      1010 
      1011 
      1012  inline void CellWidget::State::setCumulativeSelection ( bool state )
      1013  { _cumulativeSelection = state; }
      1014 
      1015 
      1016  inline void CellWidget::State::setTopLeft ( DbU::Unit x, DbU::Unit y )
      1017  {
      1018  _scaleHistory[_ihistory]._topLeft.setX(x);
      1019  _scaleHistory[_ihistory]._topLeft.setY(y);
      1020  }
      1021 
      1022 
      1023  inline void CellWidget::State::setTopLeft ( const Point& topLeft )
      1024  { _scaleHistory[_ihistory]._topLeft = topLeft; }
      1025 
      1026 
      1027  inline void CellWidget::State::setQueryFilter ( Query::Mask mask )
      1028  { _queryFilter = mask; }
      1029 
      1030 
      1031  inline void CellWidget::State::setStartLevel ( int level )
      1032  { _startLevel = level; }
      1033 
      1034 
      1035  inline void CellWidget::State::setStopLevel ( int level )
      1036  { _stopLevel = level; }
      1037 
      1038 
      1039  inline void CellWidget::State::setRubberShape ( RubberShape shape )
      1040  { _rubberShape = shape; }
      1041 
      1042 
      1043  inline void CellWidget::State::setHistoryEnable ( bool enable )
      1044  { _historyEnable = enable; }
      1045 
      1046 
      1047  inline Cell* CellWidget::State::getCell () const
      1048  { return _cell; }
      1049 
      1050 
      1051  inline Path CellWidget::State::getTopPath () const
      1052  { return _topPath; }
      1053 
      1054 
      1055  inline Cell* CellWidget::State::getTopCell () const
      1056  { return (_topPath.isEmpty()) ? _cell : _topPath.getOwnerCell(); }
      1057 
      1058 
      1059  inline DbU::Unit CellWidget::State::cursorStep () const
      1060  { return _cursorStep; }
      1061 
      1062 
      1063  inline CellWidget::SelectorCriterions& CellWidget::State::getSelection ()
      1064  { return _selection; }
      1065 
      1066 
      1067  inline RulerSet& CellWidget::State::getRulers ()
      1068  { return _rulers; }
      1069 
      1070 
      1071  inline bool CellWidget::State::showBoundaries () const
      1072  { return _showBoundaries; }
      1073 
      1074 
      1075  inline bool CellWidget::State::showSelection () const
      1076  { return _showSelection; }
      1077 
      1078 
      1079  inline bool CellWidget::State::cumulativeSelection () const
      1080  { return _cumulativeSelection; }
      1081 
      1082 
      1083  inline bool CellWidget::State::getHistoryEnable () const
      1084  { return _historyEnable; }
      1085 
      1086 
      1087  inline size_t CellWidget::State::getHistorySize () const
      1088  { return _scaleHistory.size(); }
      1089 
      1090 
      1091  inline const Point& CellWidget::State::getTopLeft () const
      1092  { return _scaleHistory[_ihistory]._topLeft; }
      1093 
      1094 
      1095  inline Query::Mask CellWidget::State::getQueryFilter () const
      1096  { return _queryFilter; }
      1097 
      1098 
      1099  inline int CellWidget::State::getStartLevel () const
      1100  { return _startLevel; }
      1101 
      1102 
      1103  inline int CellWidget::State::getStopLevel () const
      1104  { return _stopLevel; }
      1105 
      1106 
      1107  inline CellWidget::RubberShape CellWidget::State::getRubberShape () const
      1108  { return _rubberShape; }
      1109 
      1110 
      1111  inline const float& CellWidget::State::getScale () const
      1112  { return _scaleHistory[_ihistory]._scale; }
      1113 
      1114 
      1115  inline CellWidget::FindStateName::FindStateName ( const Name& cellHierName )
      1116  : unary_function< const shared_ptr<State>&, bool >()
      1117  , _cellHierName(cellHierName)
      1118  { }
      1119 
      1120 
      1121  inline bool CellWidget::FindStateName::operator () ( const shared_ptr<State>& state )
      1122  { return state->getName() == _cellHierName; }
      1123 
      1124 
      1125  inline void CellWidget::setActiveCommand ( Command* command )
      1126  { _activeCommand = command; }
      1127 
      1128 
      1129  inline Command* CellWidget::getActiveCommand () const
      1130  { return _activeCommand; }
      1131 
      1132 
      1133  inline void CellWidget::resetActiveCommand ()
      1134  { _activeCommand = NULL; }
      1135 
      1136 
      1137  inline void CellWidget::setCursorStep ( DbU::Unit step )
      1138  { _state->setCursorStep(step); }
      1139 
      1140 
      1141  inline void CellWidget::setRealSnapGridStep ( DbU::Unit step )
      1142  { DbU::setRealSnapGridStep(step); }
      1143 
      1144 
      1145  inline shared_ptr<CellWidget::State>& CellWidget::getState ()
      1146  {
      1147  _state->setTopLeft ( getTopLeft() );
      1148  return _state;
      1149  }
      1150 
      1151 
      1152  inline shared_ptr<CellWidget::State> CellWidget::getStateClone ()
      1153  {
      1154  _state->setTopLeft ( getTopLeft() );
      1155  return shared_ptr<State>( _state->clone() );
      1156  }
      1157 
      1158 
      1159  inline void CellWidget::addDrawExtensionGo ( const Name& name
      1160  , InitExtensionGo_t* initExtensionGo
      1161  , DrawExtensionGo_t* drawExtensionGo
      1162  )
      1163  { _drawingQuery.addDrawExtensionGo( name, initExtensionGo, drawExtensionGo ); }
      1164 
      1165 
      1166  inline void CellWidget::copyDrawExtensionGos ( const CellWidget* other )
      1167  { _drawingQuery.copyDrawExtensionGos( other->_drawingQuery ); }
      1168 
      1169 
      1170  inline void CellWidget::setStartLevel ( int level )
      1171  {
      1172  _drawingQuery.setStartLevel ( level );
      1173  _state->setStartLevel ( level );
      1174  emit queryFilterChanged ();
      1175  }
      1176 
      1177 
      1178  inline void CellWidget::setStopLevel ( int level )
      1179  {
      1180  _drawingQuery.setStopLevel ( level );
      1181  _state->setStopLevel ( level );
      1182  emit queryFilterChanged ();
      1183  }
      1184 
      1185 
      1186  inline int CellWidget::getStartLevel () const
      1187  { return _drawingQuery.getStartLevel (); }
      1188 
      1189 
      1190  inline int CellWidget::getStopLevel () const
      1191  { return _drawingQuery.getStopLevel (); }
      1192 
      1193 
      1194  inline CellWidget::DrawingPlanes& CellWidget::getDrawingPlanes ()
      1195  { return _drawingPlanes; }
      1196 
      1197 
      1198  inline SelectorSet& CellWidget::getSelectorSet ()
      1199  { return _selectors; }
      1200 
      1201 
      1202  Occurrences CellWidget::getOccurrencesUnder ( const QRect& area ) const
      1203  { return getOccurrencesUnder(screenToDbuBox(area)); }
      1204 
      1205 
      1206  inline void CellWidget::addRuler ( const Point& origin, const Point& extremity )
      1207  {
      1208  _state->getRulers().insert ( shared_ptr<Ruler>( new Ruler(origin,extremity) ) );
      1209  refresh ();
      1210  }
      1211 
      1212 
      1213  inline void CellWidget::addRuler ( shared_ptr<Ruler> ruler )
      1214  {
      1215  _state->getRulers().insert ( ruler );
      1216  refresh ();
      1217  }
      1218 
      1219 
      1220  inline void CellWidget::clearRulers ()
      1221  { _state->getRulers().clear (); refresh(); }
      1222 
      1223 
      1224  inline void CellWidget::refresh ()
      1225  { _redrawManager.refresh(); }
      1226 
      1227 
      1228  inline void CellWidget::redrawSelection ()
      1229  { redrawSelection ( QRect(QPoint(0,0),_drawingPlanes.size()) ); }
      1230 
      1231 
      1232  inline void CellWidget::copyToPrinter ( int xpaper, int ypaper, QPrinter* printer, CellWidget::PainterCb_t& cb )
      1233  { _drawingPlanes.copyToPrinter( xpaper, ypaper, printer, cb ); }
      1234 
      1235 
      1236  inline void CellWidget::copyToImage ( QImage* image, PainterCb_t& cb )
      1237  { _drawingPlanes.copyToImage ( image, cb ); }
      1238 
      1239 
      1240  inline DbU::Unit CellWidget::toDbu ( float d ) const
      1241  {
      1242  DbU::Unit unit;
      1243  switch ( getDbuMode() ) {
      1244  case DbU::Physical: unit = DbU::grid(DbU::physicalToGrid(d,DbU::Micro)); break;
      1245  case DbU::Grid: unit = DbU::grid(d); break;
      1246  case DbU::Db: unit = DbU::db((long)d); break;
      1247  default:
      1248  case DbU::Symbolic: unit = DbU::lambda(d); break;
      1249  }
      1250  return unit;
      1251  }
      1252 
      1253 
      1254  inline int CellWidget::dbuToScreenX ( DbU::Unit x ) const
      1255  { return (int)rint ( (float)( x - _screenArea.getXMin() ) * getScale() ); }
      1256 
      1257 
      1258  inline int CellWidget::dbuToScreenY ( DbU::Unit y ) const
      1259  { return (int)rint ( (float)( _screenArea.getYMax() - y ) * getScale() ); }
      1260 
      1261 
      1262  inline int CellWidget::dbuToScreenLength ( DbU::Unit length ) const
      1263  { return (int)rint ( (float)length * getScale() ); }
      1264 
      1265 
      1266  inline QPoint CellWidget::dbuToScreenPoint ( DbU::Unit x, DbU::Unit y ) const
      1267  { return QPoint ( dbuToScreenX(x), dbuToScreenY(y) ); }
      1268 
      1269 
      1270  inline QPoint CellWidget::dbuToScreenPoint ( const Point& point ) const
      1271  { return QPoint ( dbuToScreenX(point.getX()), dbuToScreenY(point.getY()) ); }
      1272 
      1273 
      1274  inline DbU::Unit CellWidget::screenToDbuX ( int x ) const
      1275  { return (DbU::Unit)(x/getScale()) + _screenArea.getXMin(); }
      1276 
      1277 
      1278  inline DbU::Unit CellWidget::screenToDbuY ( int y ) const
      1279  { return _screenArea.getYMax() - (DbU::Unit)(y/getScale()); }
      1280 
      1281 
      1282  inline DbU::Unit CellWidget::screenToDbuLength ( int length ) const
      1283  { return (int)( (float)length / getScale() ); }
      1284 
      1285 
      1286  inline Point CellWidget::screenToDbuPoint ( const QPoint& point ) const
      1287  { return Point ( screenToDbuX(point.x()), screenToDbuY(point.y()) ); }
      1288 
      1289 
      1290  inline Box CellWidget::screenToDbuBox ( const QRect& rect ) const
      1291  {
      1292  return Box ( screenToDbuX(rect.x())
      1293  , screenToDbuY(rect.y())
      1294  , screenToDbuX(rect.x()+rect.width ())
      1295  , screenToDbuY(rect.y()+rect.height())
      1296  );
      1297  }
      1298 
      1299 
      1300  inline Box& CellWidget::pixelInflate ( Box& box, int pixels ) const
      1301  { return box.inflate(screenToDbuLength(pixels)); }
      1302 
      1303 
      1304  inline Point CellWidget::getTopLeft () const
      1305  { return Point(_screenArea.getXMin(),_screenArea.getYMax()); }
      1306 
      1307 
      1308  inline Box CellWidget::getVisibleArea () const
      1309  { return computeVisibleArea(getScale()); }
      1310 
      1311 
      1312  inline Cell* CellWidget::getCell () const
      1313  { return _state->getCell(); }
      1314 
      1315 
      1316  inline Cell* CellWidget::getTopCell () const
      1317  { return _state->getTopCell(); }
      1318 
      1319 
      1320  inline Path CellWidget::getTopPath () const
      1321  { return _state->getTopPath(); }
      1322 
      1323 
      1324  inline PaletteWidget* CellWidget::getPalette ()
      1325  { return _palette; }
      1326 
      1327 
      1328  inline DbU::Unit CellWidget::cursorStep () const
      1329  { return _state->cursorStep(); }
      1330 
      1331 
      1332  inline unsigned int CellWidget::getDbuMode () const
      1333  { return _state->getDbuMode(); }
      1334 
      1335 
      1336  inline bool CellWidget::gridMode () const
      1337  { return _state->gridMode(); }
      1338 
      1339 
      1340  inline bool CellWidget::symbolicMode () const
      1341  { return _state->symbolicMode(); }
      1342 
      1343 
      1344  inline bool CellWidget::physicalMode () const
      1345  { return _state->physicalMode(); }
      1346 
      1347 
      1348  inline DbU::UnitPower CellWidget::getUnitPower () const
      1349  { return _state->getUnitPower(); }
      1350 
      1351 
      1352  inline bool CellWidget::showBoundaries () const
      1353  { return _state->showBoundaries(); }
      1354 
      1355 
      1356  inline bool CellWidget::showSelection () const
      1357  { return _state->showSelection(); }
      1358 
      1359 
      1360  inline bool CellWidget::cumulativeSelection () const
      1361  { return _state->cumulativeSelection(); }
      1362 
      1363 
      1364  inline QPainter& CellWidget::getPainter ( size_t plane )
      1365  { return _drawingPlanes.painter(plane); }
      1366 
      1367 
      1368  inline const DisplayStyle::HSVr& CellWidget::getDarkening () const
      1369  { return _darkening; }
      1370 
      1371 
      1372  inline const float& CellWidget::getScale () const
      1373  { return _state->getScale(); }
      1374 
      1375 
      1376  inline const QPoint& CellWidget::getMousePosition () const
      1377  { return _mousePosition; }
      1378 
      1379 
      1380  inline void CellWidget::updateMousePosition ()
      1381  {
      1382  Point mousePoint = screenToDbuPoint ( _mousePosition );
      1383  emit mousePositionChanged ( _onCursorGrid(mousePoint) );
      1384  }
      1385 
      1386 
      1387  inline void CellWidget::setQueryFilter ( Query::Mask filter )
      1388  {
      1389  _state->setQueryFilter ( filter );
      1390  emit queryFilterChanged ();
      1391  }
      1392 
      1393 
      1394  inline Query::Mask CellWidget::getQueryFilter () const
      1395  { return _state->getQueryFilter(); }
      1396 
      1397 
      1398  inline void CellWidget::setDbuMode ( int mode )
      1399  { _state->setDbuMode(mode); }
      1400 
      1401 
      1402  inline void CellWidget::setUnitPower ( DbU::UnitPower p )
      1403  { _state->setUnitPower(p); }
      1404 
      1405 
      1406  inline void CellWidget::setRubberShape ( RubberShape shape )
      1407  {
      1408  _state->setRubberShape ( shape );
      1409  _redrawManager.refresh ();
      1410  emit queryFilterChanged ();
      1411  }
      1412 
      1413 
      1414  inline CellWidget::RubberShape CellWidget::getRubberShape () const
      1415  { return _state->getRubberShape(); }
      1416 
      1417 
      1418  inline void CellWidget::setPen ( const QPen& pen, size_t plane )
      1419  { _drawingPlanes.painter(plane).setPen(pen); }
      1420 
      1421 
      1422  inline void CellWidget::setDarkening ( const DisplayStyle::HSVr& darkening )
      1423  { _darkening = darkening; }
      1424 
      1425 
      1426  inline bool CellWidget::isPrinter () const
      1427  { return _isPrinter; }
      1428 
      1429 
      1430  inline void CellWidget::setPrinter ( bool state )
      1431  { _isPrinter = state; }
      1432 
      1433 
      1434  inline bool CellWidget::timeout ( const char* fname, const Timer& timer, double timeout, bool& timedout ) const
      1435  {
      1436  if ( timedout ) return true;
      1437  if ( timer.getCombTimeOnTheFly() < timeout ) return false;
      1438 
      1439  timedout = true;
      1440  cerr << Warning("CellWidget::%s(): timeout %.3f (limit:%.1f)."
      1441  ,fname,timer.getCombTimeOnTheFly(),timeout) << endl;
      1442  return true;
      1443  }
      1444 
      1445 
      1446  inline DbU::Unit CellWidget::_snapGridStep () const
      1447  { return symbolicMode() ? DbU::getSymbolicSnapGridStep() : DbU::getRealSnapGridStep(); }
      1448 
      1449 
      1450  inline DbU::Unit CellWidget::_onSnapGrid ( DbU::Unit u ) const
      1451  { return symbolicMode() ? DbU::getOnSymbolicSnapGrid(u) : DbU::getOnRealSnapGrid(u); }
      1452 
      1453 
      1454  inline Point CellWidget::_onSnapGrid ( const Point& p ) const
      1455  { return Point(_onSnapGrid(p.getX()),_onSnapGrid(p.getY())); }
      1456 
      1457 
      1458  inline DbU::Unit CellWidget::_onCursorGrid ( DbU::Unit u ) const
      1459  { return DbU::getOnCustomGrid(u,cursorStep()); }
      1460 
      1461 
      1462  inline Point CellWidget::_onCursorGrid ( const Point& p ) const
      1463  { return Point(_onCursorGrid(p.getX()),_onCursorGrid(p.getY())); }
      1464 
      1465 
      1466 } // End of Hurricane namespace.
      1467 
      1468 
      1469 GETSTRING_POINTER_SUPPORT(Hurricane::CellWidget);
      1470 IOSTREAM_POINTER_SUPPORT(Hurricane::CellWidget);
      1471 
      1472 
      1473 #endif // HURRICANE_CELL_WIDGET
      static DbU::Unit getOnCustomGrid(DbU::Unit u, DbU::Unit step, SnapMode mode=Nearest)
      @@ -86,7 +86,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/viewer/html/DisplayStyle_8h_source.html b/hurricane/doc/viewer/html/DisplayStyle_8h_source.html index b33288c6..9a66655c 100644 --- a/hurricane/doc/viewer/html/DisplayStyle_8h_source.html +++ b/hurricane/doc/viewer/html/DisplayStyle_8h_source.html @@ -74,7 +74,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/viewer/html/Graphics_8h_source.html b/hurricane/doc/viewer/html/Graphics_8h_source.html index 055a5d66..11d17649 100644 --- a/hurricane/doc/viewer/html/Graphics_8h_source.html +++ b/hurricane/doc/viewer/html/Graphics_8h_source.html @@ -78,7 +78,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/viewer/html/InspectorWidget_8h_source.html b/hurricane/doc/viewer/html/InspectorWidget_8h_source.html index 39201c40..65661979 100644 --- a/hurricane/doc/viewer/html/InspectorWidget_8h_source.html +++ b/hurricane/doc/viewer/html/InspectorWidget_8h_source.html @@ -55,7 +55,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/viewer/html/annotated.html b/hurricane/doc/viewer/html/annotated.html index f6a9a1bd..b9ac246d 100644 --- a/hurricane/doc/viewer/html/annotated.html +++ b/hurricane/doc/viewer/html/annotated.html @@ -57,7 +57,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/viewer/html/classHurricane_1_1CellImage-members.html b/hurricane/doc/viewer/html/classHurricane_1_1CellImage-members.html index d4431a02..794337f5 100644 --- a/hurricane/doc/viewer/html/classHurricane_1_1CellImage-members.html +++ b/hurricane/doc/viewer/html/classHurricane_1_1CellImage-members.html @@ -59,7 +59,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/viewer/html/classHurricane_1_1CellImage.html b/hurricane/doc/viewer/html/classHurricane_1_1CellImage.html index 38c88e5c..5477b56e 100644 --- a/hurricane/doc/viewer/html/classHurricane_1_1CellImage.html +++ b/hurricane/doc/viewer/html/classHurricane_1_1CellImage.html @@ -261,7 +261,7 @@ ShowScale: display a false color scale at the bottom of the image. Useful if you
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/viewer/html/classHurricane_1_1CellPrinter-members.html b/hurricane/doc/viewer/html/classHurricane_1_1CellPrinter-members.html index 6bb888f6..31a65e58 100644 --- a/hurricane/doc/viewer/html/classHurricane_1_1CellPrinter-members.html +++ b/hurricane/doc/viewer/html/classHurricane_1_1CellPrinter-members.html @@ -57,7 +57,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/viewer/html/classHurricane_1_1CellPrinter.html b/hurricane/doc/viewer/html/classHurricane_1_1CellPrinter.html index 34101ef4..9ab57538 100644 --- a/hurricane/doc/viewer/html/classHurricane_1_1CellPrinter.html +++ b/hurricane/doc/viewer/html/classHurricane_1_1CellPrinter.html @@ -239,7 +239,7 @@ Implementation details
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/viewer/html/classHurricane_1_1CellViewer-members.html b/hurricane/doc/viewer/html/classHurricane_1_1CellViewer-members.html index 454ac7f6..5c1275f5 100644 --- a/hurricane/doc/viewer/html/classHurricane_1_1CellViewer-members.html +++ b/hurricane/doc/viewer/html/classHurricane_1_1CellViewer-members.html @@ -69,7 +69,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/viewer/html/classHurricane_1_1CellViewer.html b/hurricane/doc/viewer/html/classHurricane_1_1CellViewer.html index 65588c3e..a671404c 100644 --- a/hurricane/doc/viewer/html/classHurricane_1_1CellViewer.html +++ b/hurricane/doc/viewer/html/classHurricane_1_1CellViewer.html @@ -511,7 +511,7 @@ Public Member Functions
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/viewer/html/classHurricane_1_1CellWidget-members.html b/hurricane/doc/viewer/html/classHurricane_1_1CellWidget-members.html index 8589e342..f7e27ce1 100644 --- a/hurricane/doc/viewer/html/classHurricane_1_1CellWidget-members.html +++ b/hurricane/doc/viewer/html/classHurricane_1_1CellWidget-members.html @@ -55,7 +55,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/viewer/html/classHurricane_1_1CellWidget.html b/hurricane/doc/viewer/html/classHurricane_1_1CellWidget.html index 22726eab..8130934f 100644 --- a/hurricane/doc/viewer/html/classHurricane_1_1CellWidget.html +++ b/hurricane/doc/viewer/html/classHurricane_1_1CellWidget.html @@ -97,7 +97,7 @@ Public Types
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/viewer/html/classHurricane_1_1DisplayStyle-members.html b/hurricane/doc/viewer/html/classHurricane_1_1DisplayStyle-members.html index eb6085a6..6d45a984 100644 --- a/hurricane/doc/viewer/html/classHurricane_1_1DisplayStyle-members.html +++ b/hurricane/doc/viewer/html/classHurricane_1_1DisplayStyle-members.html @@ -71,7 +71,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/viewer/html/classHurricane_1_1DisplayStyle.html b/hurricane/doc/viewer/html/classHurricane_1_1DisplayStyle.html index 335c96d3..3e17b1c5 100644 --- a/hurricane/doc/viewer/html/classHurricane_1_1DisplayStyle.html +++ b/hurricane/doc/viewer/html/classHurricane_1_1DisplayStyle.html @@ -620,7 +620,7 @@ Static Public Member Functions
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/viewer/html/classHurricane_1_1Graphics-members.html b/hurricane/doc/viewer/html/classHurricane_1_1Graphics-members.html index 582da63d..d810504b 100644 --- a/hurricane/doc/viewer/html/classHurricane_1_1Graphics-members.html +++ b/hurricane/doc/viewer/html/classHurricane_1_1Graphics-members.html @@ -71,7 +71,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/viewer/html/classHurricane_1_1Graphics.html b/hurricane/doc/viewer/html/classHurricane_1_1Graphics.html index e54bcf06..3bb8ed22 100644 --- a/hurricane/doc/viewer/html/classHurricane_1_1Graphics.html +++ b/hurricane/doc/viewer/html/classHurricane_1_1Graphics.html @@ -673,7 +673,7 @@ Static Public Member Functions
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/viewer/html/classHurricane_1_1InspectorWidget-members.html b/hurricane/doc/viewer/html/classHurricane_1_1InspectorWidget-members.html index 1c278f0e..9d2da6d6 100644 --- a/hurricane/doc/viewer/html/classHurricane_1_1InspectorWidget-members.html +++ b/hurricane/doc/viewer/html/classHurricane_1_1InspectorWidget-members.html @@ -55,7 +55,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/viewer/html/classHurricane_1_1InspectorWidget.html b/hurricane/doc/viewer/html/classHurricane_1_1InspectorWidget.html index d0070930..6e889c08 100644 --- a/hurricane/doc/viewer/html/classHurricane_1_1InspectorWidget.html +++ b/hurricane/doc/viewer/html/classHurricane_1_1InspectorWidget.html @@ -140,7 +140,7 @@ Inspector Memory Management
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/viewer/html/classes.html b/hurricane/doc/viewer/html/classes.html index 5a73e047..b3e3c636 100644 --- a/hurricane/doc/viewer/html/classes.html +++ b/hurricane/doc/viewer/html/classes.html @@ -63,7 +63,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/viewer/html/dir_0afc25342c548a63e1813d8fbde8101d.html b/hurricane/doc/viewer/html/dir_0afc25342c548a63e1813d8fbde8101d.html index 315308d5..a394f32a 100644 --- a/hurricane/doc/viewer/html/dir_0afc25342c548a63e1813d8fbde8101d.html +++ b/hurricane/doc/viewer/html/dir_0afc25342c548a63e1813d8fbde8101d.html @@ -49,7 +49,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/viewer/html/dir_22af1943967c75aa4d199e6ffd8de9d2.html b/hurricane/doc/viewer/html/dir_22af1943967c75aa4d199e6ffd8de9d2.html index f7fd6f1b..4c2533c9 100644 --- a/hurricane/doc/viewer/html/dir_22af1943967c75aa4d199e6ffd8de9d2.html +++ b/hurricane/doc/viewer/html/dir_22af1943967c75aa4d199e6ffd8de9d2.html @@ -49,7 +49,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/viewer/html/dir_53ec41d7bc61ef1f85d867f95df84d28.html b/hurricane/doc/viewer/html/dir_53ec41d7bc61ef1f85d867f95df84d28.html index 8412dfe0..746cfd57 100644 --- a/hurricane/doc/viewer/html/dir_53ec41d7bc61ef1f85d867f95df84d28.html +++ b/hurricane/doc/viewer/html/dir_53ec41d7bc61ef1f85d867f95df84d28.html @@ -53,7 +53,7 @@ Directories
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/viewer/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/hurricane/doc/viewer/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html index 3fb19a73..cf3b70a0 100644 --- a/hurricane/doc/viewer/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html +++ b/hurricane/doc/viewer/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html @@ -49,7 +49,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/viewer/html/files.html b/hurricane/doc/viewer/html/files.html index 748c3fe9..1f03c52a 100644 --- a/hurricane/doc/viewer/html/files.html +++ b/hurricane/doc/viewer/html/files.html @@ -56,7 +56,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/viewer/html/functions.html b/hurricane/doc/viewer/html/functions.html index c94641ea..276daf53 100644 --- a/hurricane/doc/viewer/html/functions.html +++ b/hurricane/doc/viewer/html/functions.html @@ -286,7 +286,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/viewer/html/functions_enum.html b/hurricane/doc/viewer/html/functions_enum.html index b5834020..c59f4137 100644 --- a/hurricane/doc/viewer/html/functions_enum.html +++ b/hurricane/doc/viewer/html/functions_enum.html @@ -49,7 +49,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/viewer/html/functions_eval.html b/hurricane/doc/viewer/html/functions_eval.html index 0cab38aa..b386c0e9 100644 --- a/hurricane/doc/viewer/html/functions_eval.html +++ b/hurricane/doc/viewer/html/functions_eval.html @@ -52,7 +52,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/viewer/html/functions_func.html b/hurricane/doc/viewer/html/functions_func.html index 551e3c4d..29201c13 100644 --- a/hurricane/doc/viewer/html/functions_func.html +++ b/hurricane/doc/viewer/html/functions_func.html @@ -271,7 +271,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/viewer/html/graph_legend.html b/hurricane/doc/viewer/html/graph_legend.html index 0da041bb..783bd1d8 100644 --- a/hurricane/doc/viewer/html/graph_legend.html +++ b/hurricane/doc/viewer/html/graph_legend.html @@ -74,7 +74,7 @@ A yellow dashed arrow denotes a relation between a template instance and the tem
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/viewer/html/group__graphicsGroup.html b/hurricane/doc/viewer/html/group__graphicsGroup.html index 34546bff..7193417d 100644 --- a/hurricane/doc/viewer/html/group__graphicsGroup.html +++ b/hurricane/doc/viewer/html/group__graphicsGroup.html @@ -96,7 +96,7 @@ General Structure of the Graphics Object
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/viewer/html/index.html b/hurricane/doc/viewer/html/index.html index 06c82b76..c97a7a40 100644 --- a/hurricane/doc/viewer/html/index.html +++ b/hurricane/doc/viewer/html/index.html @@ -45,7 +45,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/viewer/html/modules.html b/hurricane/doc/viewer/html/modules.html index ee30d5d7..95c8f420 100644 --- a/hurricane/doc/viewer/html/modules.html +++ b/hurricane/doc/viewer/html/modules.html @@ -54,7 +54,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Fri Oct 19 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/hurricane/doc/viewer/latex/refman.tex b/hurricane/doc/viewer/latex/refman.tex index 8d486c75..29009864 100644 --- a/hurricane/doc/viewer/latex/refman.tex +++ b/hurricane/doc/viewer/latex/refman.tex @@ -34,7 +34,7 @@ \vspace*{1cm} {\large Generated by Doxygen 1.8.14}\\ \vspace*{0.5cm} - {\small Fri Oct 19 2018 09:33:20}\\ + {\small Sun May 26 2019 17:26:52}\\ \end{center} \end{titlepage} diff --git a/katabatic/doc/html/AutoContactHTee_8h_source.html b/katabatic/doc/html/AutoContactHTee_8h_source.html index af665d05..b2e30d1a 100644 --- a/katabatic/doc/html/AutoContactHTee_8h_source.html +++ b/katabatic/doc/html/AutoContactHTee_8h_source.html @@ -65,7 +65,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/AutoContactTerminal_8h_source.html b/katabatic/doc/html/AutoContactTerminal_8h_source.html index 7be9c425..89ac1a50 100644 --- a/katabatic/doc/html/AutoContactTerminal_8h_source.html +++ b/katabatic/doc/html/AutoContactTerminal_8h_source.html @@ -66,7 +66,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/AutoContactTurn_8h_source.html b/katabatic/doc/html/AutoContactTurn_8h_source.html index 82857e42..d251fd83 100644 --- a/katabatic/doc/html/AutoContactTurn_8h_source.html +++ b/katabatic/doc/html/AutoContactTurn_8h_source.html @@ -66,7 +66,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/AutoContactVTee_8h_source.html b/katabatic/doc/html/AutoContactVTee_8h_source.html index d4fb53f8..ba6b2452 100644 --- a/katabatic/doc/html/AutoContactVTee_8h_source.html +++ b/katabatic/doc/html/AutoContactVTee_8h_source.html @@ -65,7 +65,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/AutoContact_8h_source.html b/katabatic/doc/html/AutoContact_8h_source.html index 6930b94c..587c76db 100644 --- a/katabatic/doc/html/AutoContact_8h_source.html +++ b/katabatic/doc/html/AutoContact_8h_source.html @@ -191,7 +191,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/AutoHorizontal_8h_source.html b/katabatic/doc/html/AutoHorizontal_8h_source.html index 603b5a76..a7e87b3a 100644 --- a/katabatic/doc/html/AutoHorizontal_8h_source.html +++ b/katabatic/doc/html/AutoHorizontal_8h_source.html @@ -84,7 +84,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/AutoSegment_8h_source.html b/katabatic/doc/html/AutoSegment_8h_source.html index 958769d9..bc081366 100644 --- a/katabatic/doc/html/AutoSegment_8h_source.html +++ b/katabatic/doc/html/AutoSegment_8h_source.html @@ -257,7 +257,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/AutoSegments_8h_source.html b/katabatic/doc/html/AutoSegments_8h_source.html index d747e452..07b97825 100644 --- a/katabatic/doc/html/AutoSegments_8h_source.html +++ b/katabatic/doc/html/AutoSegments_8h_source.html @@ -101,7 +101,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/AutoVertical_8h_source.html b/katabatic/doc/html/AutoVertical_8h_source.html index a0c4f758..fb6e3054 100644 --- a/katabatic/doc/html/AutoVertical_8h_source.html +++ b/katabatic/doc/html/AutoVertical_8h_source.html @@ -84,7 +84,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/ChipTools_8h_source.html b/katabatic/doc/html/ChipTools_8h_source.html index 70310d8f..144275f1 100644 --- a/katabatic/doc/html/ChipTools_8h_source.html +++ b/katabatic/doc/html/ChipTools_8h_source.html @@ -71,7 +71,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/Constants_8h_source.html b/katabatic/doc/html/Constants_8h_source.html index 352a9fb1..1356205f 100644 --- a/katabatic/doc/html/Constants_8h_source.html +++ b/katabatic/doc/html/Constants_8h_source.html @@ -74,7 +74,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/GCellGrid_8h_source.html b/katabatic/doc/html/GCellGrid_8h_source.html index 964bccec..6a587ead 100644 --- a/katabatic/doc/html/GCellGrid_8h_source.html +++ b/katabatic/doc/html/GCellGrid_8h_source.html @@ -78,7 +78,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/GCell_8h_source.html b/katabatic/doc/html/GCell_8h_source.html index 2b0346a7..a73e2d2c 100644 --- a/katabatic/doc/html/GCell_8h_source.html +++ b/katabatic/doc/html/GCell_8h_source.html @@ -144,7 +144,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/GCells_8h_source.html b/katabatic/doc/html/GCells_8h_source.html index 279f6e73..1f17e476 100644 --- a/katabatic/doc/html/GCells_8h_source.html +++ b/katabatic/doc/html/GCells_8h_source.html @@ -59,7 +59,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/Grid_8h_source.html b/katabatic/doc/html/Grid_8h_source.html index 4a16fbe0..802e3d05 100644 --- a/katabatic/doc/html/Grid_8h_source.html +++ b/katabatic/doc/html/Grid_8h_source.html @@ -77,7 +77,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/KatabaticEngine_8h_source.html b/katabatic/doc/html/KatabaticEngine_8h_source.html index b2a46efc..089de870 100644 --- a/katabatic/doc/html/KatabaticEngine_8h_source.html +++ b/katabatic/doc/html/KatabaticEngine_8h_source.html @@ -122,7 +122,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/Observer_8h_source.html b/katabatic/doc/html/Observer_8h_source.html index f1764b6f..83124bf2 100644 --- a/katabatic/doc/html/Observer_8h_source.html +++ b/katabatic/doc/html/Observer_8h_source.html @@ -62,7 +62,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/Session_8h_source.html b/katabatic/doc/html/Session_8h_source.html index edc6efb4..3f8019c7 100644 --- a/katabatic/doc/html/Session_8h_source.html +++ b/katabatic/doc/html/Session_8h_source.html @@ -100,7 +100,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/annotated.html b/katabatic/doc/html/annotated.html index 9e7693e7..437aa8bd 100644 --- a/katabatic/doc/html/annotated.html +++ b/katabatic/doc/html/annotated.html @@ -82,7 +82,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1AutoContact-members.html b/katabatic/doc/html/classKatabatic_1_1AutoContact-members.html index d3cb12b6..826be194 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoContact-members.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoContact-members.html @@ -126,7 +126,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1AutoContact.html b/katabatic/doc/html/classKatabatic_1_1AutoContact.html index 43c85484..56e53a93 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoContact.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoContact.html @@ -2433,7 +2433,7 @@ Notes - Differences from Katabatic 2
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1AutoContactHTee-members.html b/katabatic/doc/html/classKatabatic_1_1AutoContactHTee-members.html index f88deb86..ec60ba04 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoContactHTee-members.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoContactHTee-members.html @@ -127,7 +127,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1AutoContactHTee.html b/katabatic/doc/html/classKatabatic_1_1AutoContactHTee.html index f3423920..d59c7385 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoContactHTee.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoContactHTee.html @@ -454,7 +454,7 @@ Update H-Tee Topology

      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1AutoContactTerminal-members.html b/katabatic/doc/html/classKatabatic_1_1AutoContactTerminal-members.html index 7ca9f15f..5301c291 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoContactTerminal-members.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoContactTerminal-members.html @@ -128,7 +128,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1AutoContactTerminal.html b/katabatic/doc/html/classKatabatic_1_1AutoContactTerminal.html index 4fd27f4e..69346c82 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoContactTerminal.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoContactTerminal.html @@ -539,7 +539,7 @@ Additional Inherited Members

      Implements AutoContact.

      -

      References AutoContact::base(), DebugSession::close(), Katabatic::CntInvalidated, Interval::contains(), AutoContact::getNet(), AutoContact::getUConstraints(), DbU::getValueString(), AutoSegment::getX(), AutoSegment::getY(), AutoContact::hasBadTopology(), Go::invalidate(), AutoSegment::isCreated(), AutoSegment::isHorizontal(), AutoContact::isInvalidatedCache(), Katabatic::KbHorizontal, Katabatic::KbVertical, DebugSession::open(), AutoContact::setX(), AutoContact::setY(), and AutoContact::showTopologyError().

      +

      References AutoContact::base(), DebugSession::close(), Katabatic::CntInvalidated, Interval::contains(), AutoContact::getNet(), AutoContact::getUConstraints(), DbU::getValueString(), AutoSegment::getX(), AutoSegment::getY(), AutoContact::hasBadTopology(), Go::invalidate(), AutoSegment::isCreated(), AutoSegment::isHorizontal(), AutoContact::isInvalidatedCache(), Katabatic::KbHorizontal, Katabatic::KbVertical, DebugSession::open(), AutoContact::setX(), AutoContact::setY(), and AutoContact::showTopologyError().

      @@ -594,7 +594,7 @@ Update Terminal Topology
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1AutoContactTurn-members.html b/katabatic/doc/html/classKatabatic_1_1AutoContactTurn-members.html index 332abfd7..41a2038d 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoContactTurn-members.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoContactTurn-members.html @@ -127,7 +127,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1AutoContactTurn.html b/katabatic/doc/html/classKatabatic_1_1AutoContactTurn.html index f05328c0..3a617e90 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoContactTurn.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoContactTurn.html @@ -456,7 +456,7 @@ Update Turn Topology
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1AutoContactVTee-members.html b/katabatic/doc/html/classKatabatic_1_1AutoContactVTee-members.html index 73574a38..65a2838b 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoContactVTee-members.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoContactVTee-members.html @@ -127,7 +127,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1AutoContactVTee.html b/katabatic/doc/html/classKatabatic_1_1AutoContactVTee.html index 4e065ec5..60a854f8 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoContactVTee.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoContactVTee.html @@ -446,7 +446,7 @@ Additional Inherited Members
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1AutoHorizontal-members.html b/katabatic/doc/html/classKatabatic_1_1AutoHorizontal-members.html index 5d2bca5a..2d8f4143 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoHorizontal-members.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoHorizontal-members.html @@ -182,7 +182,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1AutoHorizontal.html b/katabatic/doc/html/classKatabatic_1_1AutoHorizontal.html index e6707f72..fd9a9dc8 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoHorizontal.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoHorizontal.html @@ -362,7 +362,7 @@ Additional Inherited Members

      Implements AutoSegment.

      -

      References Interval::contains(), AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoContact::getGCell(), GCell::getSide(), Interval::getSize(), DbU::getValueString(), Interval::inflate(), and Katabatic::KbVertical.

      +

      References Interval::contains(), AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoContact::getGCell(), GCell::getSide(), Interval::getSize(), DbU::getValueString(), Interval::inflate(), and Katabatic::KbVertical.

      @@ -1020,7 +1020,7 @@ Additional Inherited Members

      Implements AutoSegment.

      -

      References AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), and Interval::intersect().

      +

      References AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), and Interval::intersect().

      @@ -1233,7 +1233,7 @@ moveULeft() for an Horizontal
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1AutoSegment-members.html b/katabatic/doc/html/classKatabatic_1_1AutoSegment-members.html index f517f737..f357674c 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoSegment-members.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoSegment-members.html @@ -182,7 +182,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1AutoSegment.html b/katabatic/doc/html/classKatabatic_1_1AutoSegment.html index 3bc5ad8f..0e29005f 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoSegment.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoSegment.html @@ -2090,7 +2090,7 @@ Methods Classification

      Returns: non-zero if the aligned set of segment can be broken outside interval. The returned value could be zero (failure) or Katabatic::KbDoglegOnLeft or Katabatic::KbDoglegOnRight menaing that the aligned set could be broken on the left of the interval (resp. right of it).

      -

      References Interval::contains(), AutoSegment::getAligneds(), AutoSegment::getSpanU(), Interval::getVMax(), Interval::getVMin(), Katabatic::KbDoglegOnLeft, and Katabatic::KbDoglegOnRight.

      +

      References Interval::contains(), AutoSegment::getAligneds(), AutoSegment::getSpanU(), Interval::getVMax(), Interval::getVMin(), Katabatic::KbDoglegOnLeft, and Katabatic::KbDoglegOnRight.

      @@ -3652,7 +3652,7 @@ Methods Classification
      Example Case 4
      -

      References AutoSegment::_makeDogleg(), Interval::contains(), AutoSegment::getAligneds(), AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoSegment::getDirection(), Session::getDoglegs(), AutoContact::getGCell(), GCell::getRight(), GCell::getSide(), Interval::getSize(), AutoSegment::getSourceConstraints(), AutoSegment::getSpanU(), AutoSegment::getTargetConstraints(), GCell::getUp(), DbU::getValueString(), Interval::getVMax(), Interval::getVMin(), Katabatic::KbDoglegOnLeft, Katabatic::KbDoglegOnRight, Katabatic::KbHorizontal, and Katabatic::KbNativeConstraints.

      +

      References AutoSegment::_makeDogleg(), Interval::contains(), AutoSegment::getAligneds(), AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoSegment::getDirection(), Session::getDoglegs(), AutoContact::getGCell(), GCell::getRight(), GCell::getSide(), Interval::getSize(), AutoSegment::getSourceConstraints(), AutoSegment::getSpanU(), AutoSegment::getTargetConstraints(), GCell::getUp(), DbU::getValueString(), Interval::getVMax(), Interval::getVMin(), Katabatic::KbDoglegOnLeft, Katabatic::KbDoglegOnRight, Katabatic::KbHorizontal, and Katabatic::KbNativeConstraints.

      @@ -3684,7 +3684,7 @@ Example Case 4

      Make a dogleg in a set of aligned segments, thus the dogleg may not be created on this segment but in the one which is under doglegGCell.

      Returns: A flag telling if the above or below layer was used for the perpandicular segment (Katabatic::KbUseAboveLayer or Katabatic::KbUseBelowLayer).

      -

      References AutoSegment::_makeDogleg(), Katabatic::EngineGlobalLoaded, AutoSegment::getAligneds(), AutoSegment::getDirection(), Session::getKatabatic(), GCell::getSide(), AutoSegment::getSpanU(), Interval::intersect(), and AutoSegment::isFixed().

      +

      References AutoSegment::_makeDogleg(), Katabatic::EngineGlobalLoaded, AutoSegment::getAligneds(), AutoSegment::getDirection(), Session::getKatabatic(), GCell::getSide(), AutoSegment::getSpanU(), Interval::intersect(), and AutoSegment::isFixed().

      @@ -4367,7 +4367,7 @@ Reduce Example
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1AutoSegments__Aligneds-members.html b/katabatic/doc/html/classKatabatic_1_1AutoSegments__Aligneds-members.html index 61518e70..eb9db071 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoSegments__Aligneds-members.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoSegments__Aligneds-members.html @@ -62,7 +62,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1AutoSegments__Aligneds.html b/katabatic/doc/html/classKatabatic_1_1AutoSegments__Aligneds.html index c6c04313..37733311 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoSegments__Aligneds.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoSegments__Aligneds.html @@ -205,7 +205,7 @@ Public Member Functions
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1AutoSegments__AnchorOnGCell-members.html b/katabatic/doc/html/classKatabatic_1_1AutoSegments__AnchorOnGCell-members.html index c538ac0a..3e1345ca 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoSegments__AnchorOnGCell-members.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoSegments__AnchorOnGCell-members.html @@ -62,7 +62,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1AutoSegments__AnchorOnGCell.html b/katabatic/doc/html/classKatabatic_1_1AutoSegments__AnchorOnGCell.html index e8491513..5feaec28 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoSegments__AnchorOnGCell.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoSegments__AnchorOnGCell.html @@ -209,7 +209,7 @@ Public Member Functions
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1AutoSegments__InDirection-members.html b/katabatic/doc/html/classKatabatic_1_1AutoSegments__InDirection-members.html index 23d3d6aa..a6cd67f0 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoSegments__InDirection-members.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoSegments__InDirection-members.html @@ -57,7 +57,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1AutoSegments__InDirection.html b/katabatic/doc/html/classKatabatic_1_1AutoSegments__InDirection.html index 071e6cc8..bd27170a 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoSegments__InDirection.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoSegments__InDirection.html @@ -164,7 +164,7 @@ Public Member Functions
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1AutoSegments__IsAccountable-members.html b/katabatic/doc/html/classKatabatic_1_1AutoSegments__IsAccountable-members.html index 7a84d889..e805d2ee 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoSegments__IsAccountable-members.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoSegments__IsAccountable-members.html @@ -56,7 +56,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1AutoSegments__IsAccountable.html b/katabatic/doc/html/classKatabatic_1_1AutoSegments__IsAccountable.html index 738a5c94..058497f3 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoSegments__IsAccountable.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoSegments__IsAccountable.html @@ -134,7 +134,7 @@ Public Member Functions
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1AutoSegments__OnContact-members.html b/katabatic/doc/html/classKatabatic_1_1AutoSegments__OnContact-members.html index 68f1467f..26a68ff7 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoSegments__OnContact-members.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoSegments__OnContact-members.html @@ -62,7 +62,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1AutoSegments__OnContact.html b/katabatic/doc/html/classKatabatic_1_1AutoSegments__OnContact.html index ebbf530e..17eb970d 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoSegments__OnContact.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoSegments__OnContact.html @@ -215,7 +215,7 @@ Public Member Functions
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1AutoSegments__Perpandiculars-members.html b/katabatic/doc/html/classKatabatic_1_1AutoSegments__Perpandiculars-members.html index 0c467632..81a0d384 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoSegments__Perpandiculars-members.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoSegments__Perpandiculars-members.html @@ -62,7 +62,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1AutoSegments__Perpandiculars.html b/katabatic/doc/html/classKatabatic_1_1AutoSegments__Perpandiculars.html index 316fd522..0e8dc0ef 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoSegments__Perpandiculars.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoSegments__Perpandiculars.html @@ -195,7 +195,7 @@ Public Member Functions
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1AutoVertical-members.html b/katabatic/doc/html/classKatabatic_1_1AutoVertical-members.html index 0e328b56..6ee2ab8c 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoVertical-members.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoVertical-members.html @@ -182,7 +182,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1AutoVertical.html b/katabatic/doc/html/classKatabatic_1_1AutoVertical.html index 78878423..4db35b8e 100644 --- a/katabatic/doc/html/classKatabatic_1_1AutoVertical.html +++ b/katabatic/doc/html/classKatabatic_1_1AutoVertical.html @@ -362,7 +362,7 @@ Additional Inherited Members

      Implements AutoSegment.

      -

      References Interval::contains(), AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoContact::getGCell(), GCell::getSide(), Interval::inflate(), and Katabatic::KbHorizontal.

      +

      References Interval::contains(), AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoContact::getGCell(), GCell::getSide(), Interval::inflate(), and Katabatic::KbHorizontal.

      @@ -1020,7 +1020,7 @@ Additional Inherited Members

      Implements AutoSegment.

      -

      References AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), and Interval::intersect().

      +

      References AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), and Interval::intersect().

      @@ -1233,7 +1233,7 @@ moveULeft() for an Horizontal
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1BaseGrid-members.html b/katabatic/doc/html/classKatabatic_1_1BaseGrid-members.html index 18089f8a..53be9da5 100644 --- a/katabatic/doc/html/classKatabatic_1_1BaseGrid-members.html +++ b/katabatic/doc/html/classKatabatic_1_1BaseGrid-members.html @@ -63,7 +63,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1BaseGrid.html b/katabatic/doc/html/classKatabatic_1_1BaseGrid.html index 4f749018..2a0d9933 100644 --- a/katabatic/doc/html/classKatabatic_1_1BaseGrid.html +++ b/katabatic/doc/html/classKatabatic_1_1BaseGrid.html @@ -439,7 +439,7 @@ Protected Member Functions
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1BaseGrid_1_1Axis-members.html b/katabatic/doc/html/classKatabatic_1_1BaseGrid_1_1Axis-members.html index bf9d8131..e31fbcea 100644 --- a/katabatic/doc/html/classKatabatic_1_1BaseGrid_1_1Axis-members.html +++ b/katabatic/doc/html/classKatabatic_1_1BaseGrid_1_1Axis-members.html @@ -57,7 +57,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1BaseGrid_1_1Axis.html b/katabatic/doc/html/classKatabatic_1_1BaseGrid_1_1Axis.html index 7235653a..699f1856 100644 --- a/katabatic/doc/html/classKatabatic_1_1BaseGrid_1_1Axis.html +++ b/katabatic/doc/html/classKatabatic_1_1BaseGrid_1_1Axis.html @@ -212,7 +212,7 @@ Public Member Functions
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1BaseObserver-members.html b/katabatic/doc/html/classKatabatic_1_1BaseObserver-members.html index 79abdb5a..67814ef0 100644 --- a/katabatic/doc/html/classKatabatic_1_1BaseObserver-members.html +++ b/katabatic/doc/html/classKatabatic_1_1BaseObserver-members.html @@ -53,7 +53,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1BaseObserver.html b/katabatic/doc/html/classKatabatic_1_1BaseObserver.html index 9ecd9c6c..d02802fe 100644 --- a/katabatic/doc/html/classKatabatic_1_1BaseObserver.html +++ b/katabatic/doc/html/classKatabatic_1_1BaseObserver.html @@ -107,7 +107,7 @@ Public Member Functions
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1ChipTools-members.html b/katabatic/doc/html/classKatabatic_1_1ChipTools-members.html index 8be27190..7457387b 100644 --- a/katabatic/doc/html/classKatabatic_1_1ChipTools-members.html +++ b/katabatic/doc/html/classKatabatic_1_1ChipTools-members.html @@ -64,7 +64,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1ChipTools.html b/katabatic/doc/html/classKatabatic_1_1ChipTools.html index dc2d010b..23ed6c43 100644 --- a/katabatic/doc/html/classKatabatic_1_1ChipTools.html +++ b/katabatic/doc/html/classKatabatic_1_1ChipTools.html @@ -412,7 +412,7 @@ Public Member Functions
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1GCell-members.html b/katabatic/doc/html/classKatabatic_1_1GCell-members.html index 452d9814..45f6d6db 100644 --- a/katabatic/doc/html/classKatabatic_1_1GCell-members.html +++ b/katabatic/doc/html/classKatabatic_1_1GCell-members.html @@ -113,7 +113,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1GCell.html b/katabatic/doc/html/classKatabatic_1_1GCell.html index 2f014065..29b22062 100644 --- a/katabatic/doc/html/classKatabatic_1_1GCell.html +++ b/katabatic/doc/html/classKatabatic_1_1GCell.html @@ -1914,7 +1914,7 @@ GCell Implantation
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1GCellDensitySet-members.html b/katabatic/doc/html/classKatabatic_1_1GCellDensitySet-members.html index 7de2faf7..4a551445 100644 --- a/katabatic/doc/html/classKatabatic_1_1GCellDensitySet-members.html +++ b/katabatic/doc/html/classKatabatic_1_1GCellDensitySet-members.html @@ -62,7 +62,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1GCellDensitySet.html b/katabatic/doc/html/classKatabatic_1_1GCellDensitySet.html index e68229ba..14c7820e 100644 --- a/katabatic/doc/html/classKatabatic_1_1GCellDensitySet.html +++ b/katabatic/doc/html/classKatabatic_1_1GCellDensitySet.html @@ -341,7 +341,7 @@ Public Member Functions
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1GCellGrid-members.html b/katabatic/doc/html/classKatabatic_1_1GCellGrid-members.html index b68cde9f..c56db1c5 100644 --- a/katabatic/doc/html/classKatabatic_1_1GCellGrid-members.html +++ b/katabatic/doc/html/classKatabatic_1_1GCellGrid-members.html @@ -95,7 +95,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1GCellGrid.html b/katabatic/doc/html/classKatabatic_1_1GCellGrid.html index ec140cab..78abe743 100644 --- a/katabatic/doc/html/classKatabatic_1_1GCellGrid.html +++ b/katabatic/doc/html/classKatabatic_1_1GCellGrid.html @@ -550,7 +550,7 @@ Static Protected Member Functions
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1GCell_1_1CompareByDensity-members.html b/katabatic/doc/html/classKatabatic_1_1GCell_1_1CompareByDensity-members.html index 6d9d00b6..5410401c 100644 --- a/katabatic/doc/html/classKatabatic_1_1GCell_1_1CompareByDensity-members.html +++ b/katabatic/doc/html/classKatabatic_1_1GCell_1_1CompareByDensity-members.html @@ -53,7 +53,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1GCell_1_1CompareByDensity.html b/katabatic/doc/html/classKatabatic_1_1GCell_1_1CompareByDensity.html index 82109695..b8095e6e 100644 --- a/katabatic/doc/html/classKatabatic_1_1GCell_1_1CompareByDensity.html +++ b/katabatic/doc/html/classKatabatic_1_1GCell_1_1CompareByDensity.html @@ -91,7 +91,7 @@ Public Member Functions
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1GCell_1_1CompareByIndex-members.html b/katabatic/doc/html/classKatabatic_1_1GCell_1_1CompareByIndex-members.html index 70fc90d0..b7405018 100644 --- a/katabatic/doc/html/classKatabatic_1_1GCell_1_1CompareByIndex-members.html +++ b/katabatic/doc/html/classKatabatic_1_1GCell_1_1CompareByIndex-members.html @@ -52,7 +52,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1GCell_1_1CompareByIndex.html b/katabatic/doc/html/classKatabatic_1_1GCell_1_1CompareByIndex.html index 5c40df6d..a1d8d021 100644 --- a/katabatic/doc/html/classKatabatic_1_1GCell_1_1CompareByIndex.html +++ b/katabatic/doc/html/classKatabatic_1_1GCell_1_1CompareByIndex.html @@ -62,7 +62,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1GCell_1_1Key-members.html b/katabatic/doc/html/classKatabatic_1_1GCell_1_1Key-members.html index 91288d89..dde3790e 100644 --- a/katabatic/doc/html/classKatabatic_1_1GCell_1_1Key-members.html +++ b/katabatic/doc/html/classKatabatic_1_1GCell_1_1Key-members.html @@ -56,7 +56,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1GCell_1_1Key.html b/katabatic/doc/html/classKatabatic_1_1GCell_1_1Key.html index 34694545..4eac2306 100644 --- a/katabatic/doc/html/classKatabatic_1_1GCell_1_1Key.html +++ b/katabatic/doc/html/classKatabatic_1_1GCell_1_1Key.html @@ -201,7 +201,7 @@ Public Member Functions
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1Grid-members.html b/katabatic/doc/html/classKatabatic_1_1Grid-members.html index 2a9c598b..d00eccb8 100644 --- a/katabatic/doc/html/classKatabatic_1_1Grid-members.html +++ b/katabatic/doc/html/classKatabatic_1_1Grid-members.html @@ -74,7 +74,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1Grid.html b/katabatic/doc/html/classKatabatic_1_1Grid.html index a6413e07..c8a96cd1 100644 --- a/katabatic/doc/html/classKatabatic_1_1Grid.html +++ b/katabatic/doc/html/classKatabatic_1_1Grid.html @@ -481,7 +481,7 @@ class Katabatic::Grid< GCellT >
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1KatabaticEngine-members.html b/katabatic/doc/html/classKatabatic_1_1KatabaticEngine-members.html index 51c4587c..0a17b842 100644 --- a/katabatic/doc/html/classKatabatic_1_1KatabaticEngine-members.html +++ b/katabatic/doc/html/classKatabatic_1_1KatabaticEngine-members.html @@ -109,7 +109,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1KatabaticEngine.html b/katabatic/doc/html/classKatabatic_1_1KatabaticEngine.html index 6276af12..53852775 100644 --- a/katabatic/doc/html/classKatabatic_1_1KatabaticEngine.html +++ b/katabatic/doc/html/classKatabatic_1_1KatabaticEngine.html @@ -1424,7 +1424,7 @@ KatabaticEngine Implementation Details
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1LocatorHelper-members.html b/katabatic/doc/html/classKatabatic_1_1LocatorHelper-members.html index 6d58c3b3..3a2b46cb 100644 --- a/katabatic/doc/html/classKatabatic_1_1LocatorHelper-members.html +++ b/katabatic/doc/html/classKatabatic_1_1LocatorHelper-members.html @@ -56,7 +56,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1LocatorHelper.html b/katabatic/doc/html/classKatabatic_1_1LocatorHelper.html index 672c3182..d5cab962 100644 --- a/katabatic/doc/html/classKatabatic_1_1LocatorHelper.html +++ b/katabatic/doc/html/classKatabatic_1_1LocatorHelper.html @@ -215,7 +215,7 @@ Implementation Details
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1Observable-members.html b/katabatic/doc/html/classKatabatic_1_1Observable-members.html index 536a46ae..e46b753c 100644 --- a/katabatic/doc/html/classKatabatic_1_1Observable-members.html +++ b/katabatic/doc/html/classKatabatic_1_1Observable-members.html @@ -57,7 +57,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1Observable.html b/katabatic/doc/html/classKatabatic_1_1Observable.html index e5a0c8b1..2f915f5d 100644 --- a/katabatic/doc/html/classKatabatic_1_1Observable.html +++ b/katabatic/doc/html/classKatabatic_1_1Observable.html @@ -219,7 +219,7 @@ Public Member Functions
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1Observer-members.html b/katabatic/doc/html/classKatabatic_1_1Observer-members.html index 356b9482..031552fc 100644 --- a/katabatic/doc/html/classKatabatic_1_1Observer-members.html +++ b/katabatic/doc/html/classKatabatic_1_1Observer-members.html @@ -55,7 +55,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1Observer.html b/katabatic/doc/html/classKatabatic_1_1Observer.html index 36b68a01..07e3a824 100644 --- a/katabatic/doc/html/classKatabatic_1_1Observer.html +++ b/katabatic/doc/html/classKatabatic_1_1Observer.html @@ -142,7 +142,7 @@ Observer Implementation Notes
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1Session-members.html b/katabatic/doc/html/classKatabatic_1_1Session-members.html index 2e207342..9d4e02b5 100644 --- a/katabatic/doc/html/classKatabatic_1_1Session-members.html +++ b/katabatic/doc/html/classKatabatic_1_1Session-members.html @@ -86,7 +86,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classKatabatic_1_1Session.html b/katabatic/doc/html/classKatabatic_1_1Session.html index 95b199aa..c9d1367c 100644 --- a/katabatic/doc/html/classKatabatic_1_1Session.html +++ b/katabatic/doc/html/classKatabatic_1_1Session.html @@ -1149,7 +1149,7 @@ Revalidate AutoSegments. Just before this stage, they are on the correct axis an
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology-members.html b/katabatic/doc/html/classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology-members.html index 3e2a8f54..c8dbdfae 100644 --- a/katabatic/doc/html/classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology-members.html +++ b/katabatic/doc/html/classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology-members.html @@ -66,7 +66,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html b/katabatic/doc/html/classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html index 7cf3dfd8..2e8ee597 100644 --- a/katabatic/doc/html/classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html +++ b/katabatic/doc/html/classanonymous__namespace_02LoadGrByNet_8cpp_03_1_1GCellTopology.html @@ -97,7 +97,7 @@ Private Member Functions
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/classes.html b/katabatic/doc/html/classes.html index c9ee60c9..9001bdee 100644 --- a/katabatic/doc/html/classes.html +++ b/katabatic/doc/html/classes.html @@ -82,7 +82,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/dir_46a5d811a0c60e95b7acaa92d73c003a.html b/katabatic/doc/html/dir_46a5d811a0c60e95b7acaa92d73c003a.html index da9983de..af357dda 100644 --- a/katabatic/doc/html/dir_46a5d811a0c60e95b7acaa92d73c003a.html +++ b/katabatic/doc/html/dir_46a5d811a0c60e95b7acaa92d73c003a.html @@ -49,7 +49,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/katabatic/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html index 0f228293..8b8a6cda 100644 --- a/katabatic/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html +++ b/katabatic/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html @@ -53,7 +53,7 @@ Directories
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/files.html b/katabatic/doc/html/files.html index b3f609e0..05e6d9db 100644 --- a/katabatic/doc/html/files.html +++ b/katabatic/doc/html/files.html @@ -67,7 +67,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/functions.html b/katabatic/doc/html/functions.html index fba921e1..48817c11 100644 --- a/katabatic/doc/html/functions.html +++ b/katabatic/doc/html/functions.html @@ -106,7 +106,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/functions_0x7e.html b/katabatic/doc/html/functions_0x7e.html index dad88f8d..443a8e70 100644 --- a/katabatic/doc/html/functions_0x7e.html +++ b/katabatic/doc/html/functions_0x7e.html @@ -51,7 +51,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/functions_a.html b/katabatic/doc/html/functions_a.html index 53f8a7f9..df28ddda 100644 --- a/katabatic/doc/html/functions_a.html +++ b/katabatic/doc/html/functions_a.html @@ -94,7 +94,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/functions_b.html b/katabatic/doc/html/functions_b.html index 5732b304..d8a10122 100644 --- a/katabatic/doc/html/functions_b.html +++ b/katabatic/doc/html/functions_b.html @@ -54,7 +54,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/functions_c.html b/katabatic/doc/html/functions_c.html index 4782f2fa..b286f1df 100644 --- a/katabatic/doc/html/functions_c.html +++ b/katabatic/doc/html/functions_c.html @@ -130,7 +130,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/functions_d.html b/katabatic/doc/html/functions_d.html index 731dc8d1..4ed8d29a 100644 --- a/katabatic/doc/html/functions_d.html +++ b/katabatic/doc/html/functions_d.html @@ -84,7 +84,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/functions_e.html b/katabatic/doc/html/functions_e.html index 28288141..1f9d2fbc 100644 --- a/katabatic/doc/html/functions_e.html +++ b/katabatic/doc/html/functions_e.html @@ -51,7 +51,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/functions_enum.html b/katabatic/doc/html/functions_enum.html index 359c39c9..649f4904 100644 --- a/katabatic/doc/html/functions_enum.html +++ b/katabatic/doc/html/functions_enum.html @@ -46,7 +46,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/functions_eval.html b/katabatic/doc/html/functions_eval.html index c077e814..dc0b414d 100644 --- a/katabatic/doc/html/functions_eval.html +++ b/katabatic/doc/html/functions_eval.html @@ -64,7 +64,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/functions_f.html b/katabatic/doc/html/functions_f.html index 011fc541..61773e90 100644 --- a/katabatic/doc/html/functions_f.html +++ b/katabatic/doc/html/functions_f.html @@ -48,7 +48,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/functions_func.html b/katabatic/doc/html/functions_func.html index 4074dc9e..22963ea7 100644 --- a/katabatic/doc/html/functions_func.html +++ b/katabatic/doc/html/functions_func.html @@ -106,7 +106,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/functions_func_0x7e.html b/katabatic/doc/html/functions_func_0x7e.html index f63299d5..eb24aba7 100644 --- a/katabatic/doc/html/functions_func_0x7e.html +++ b/katabatic/doc/html/functions_func_0x7e.html @@ -51,7 +51,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/functions_func_a.html b/katabatic/doc/html/functions_func_a.html index 08bd06b7..8c496336 100644 --- a/katabatic/doc/html/functions_func_a.html +++ b/katabatic/doc/html/functions_func_a.html @@ -85,7 +85,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/functions_func_b.html b/katabatic/doc/html/functions_func_b.html index 7839ed2a..6bb4cbe8 100644 --- a/katabatic/doc/html/functions_func_b.html +++ b/katabatic/doc/html/functions_func_b.html @@ -54,7 +54,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/functions_func_c.html b/katabatic/doc/html/functions_func_c.html index b8d47dc4..7122f601 100644 --- a/katabatic/doc/html/functions_func_c.html +++ b/katabatic/doc/html/functions_func_c.html @@ -130,7 +130,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/functions_func_d.html b/katabatic/doc/html/functions_func_d.html index a8b7171b..42d1cbd5 100644 --- a/katabatic/doc/html/functions_func_d.html +++ b/katabatic/doc/html/functions_func_d.html @@ -81,7 +81,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/functions_func_e.html b/katabatic/doc/html/functions_func_e.html index 60c093c8..fd5a374a 100644 --- a/katabatic/doc/html/functions_func_e.html +++ b/katabatic/doc/html/functions_func_e.html @@ -51,7 +51,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/functions_func_f.html b/katabatic/doc/html/functions_func_f.html index 02770bd4..d80300e9 100644 --- a/katabatic/doc/html/functions_func_f.html +++ b/katabatic/doc/html/functions_func_f.html @@ -48,7 +48,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/functions_func_g.html b/katabatic/doc/html/functions_func_g.html index 5f644c7f..15e9bd49 100644 --- a/katabatic/doc/html/functions_func_g.html +++ b/katabatic/doc/html/functions_func_g.html @@ -622,7 +622,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/functions_func_h.html b/katabatic/doc/html/functions_func_h.html index e84d1e76..8c492566 100644 --- a/katabatic/doc/html/functions_func_h.html +++ b/katabatic/doc/html/functions_func_h.html @@ -51,7 +51,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/functions_func_i.html b/katabatic/doc/html/functions_func_i.html index 33c95a29..fce697dd 100644 --- a/katabatic/doc/html/functions_func_i.html +++ b/katabatic/doc/html/functions_func_i.html @@ -169,7 +169,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/functions_func_k.html b/katabatic/doc/html/functions_func_k.html index 8723b2ce..9204f136 100644 --- a/katabatic/doc/html/functions_func_k.html +++ b/katabatic/doc/html/functions_func_k.html @@ -48,7 +48,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/functions_func_l.html b/katabatic/doc/html/functions_func_l.html index ec4271cf..1d08946f 100644 --- a/katabatic/doc/html/functions_func_l.html +++ b/katabatic/doc/html/functions_func_l.html @@ -60,7 +60,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/functions_func_m.html b/katabatic/doc/html/functions_func_m.html index cc277181..188ec562 100644 --- a/katabatic/doc/html/functions_func_m.html +++ b/katabatic/doc/html/functions_func_m.html @@ -73,7 +73,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/functions_func_n.html b/katabatic/doc/html/functions_func_n.html index 3349845a..c9a50982 100644 --- a/katabatic/doc/html/functions_func_n.html +++ b/katabatic/doc/html/functions_func_n.html @@ -49,7 +49,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/functions_func_o.html b/katabatic/doc/html/functions_func_o.html index 4ff49348..0b573abe 100644 --- a/katabatic/doc/html/functions_func_o.html +++ b/katabatic/doc/html/functions_func_o.html @@ -57,7 +57,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/functions_func_p.html b/katabatic/doc/html/functions_func_p.html index 299432ca..7ade8259 100644 --- a/katabatic/doc/html/functions_func_p.html +++ b/katabatic/doc/html/functions_func_p.html @@ -51,7 +51,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/functions_func_r.html b/katabatic/doc/html/functions_func_r.html index 52b2e6e3..1bdaac10 100644 --- a/katabatic/doc/html/functions_func_r.html +++ b/katabatic/doc/html/functions_func_r.html @@ -88,7 +88,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/functions_func_s.html b/katabatic/doc/html/functions_func_s.html index 2fe9adc4..1cfdd387 100644 --- a/katabatic/doc/html/functions_func_s.html +++ b/katabatic/doc/html/functions_func_s.html @@ -165,7 +165,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/functions_func_t.html b/katabatic/doc/html/functions_func_t.html index 5df3e25e..2c7bb28e 100644 --- a/katabatic/doc/html/functions_func_t.html +++ b/katabatic/doc/html/functions_func_t.html @@ -58,7 +58,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/functions_func_u.html b/katabatic/doc/html/functions_func_u.html index 367c46d5..3902d226 100644 --- a/katabatic/doc/html/functions_func_u.html +++ b/katabatic/doc/html/functions_func_u.html @@ -93,7 +93,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/functions_func_x.html b/katabatic/doc/html/functions_func_x.html index 140278da..8253e5af 100644 --- a/katabatic/doc/html/functions_func_x.html +++ b/katabatic/doc/html/functions_func_x.html @@ -48,7 +48,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/functions_g.html b/katabatic/doc/html/functions_g.html index c8928949..68b8ac98 100644 --- a/katabatic/doc/html/functions_g.html +++ b/katabatic/doc/html/functions_g.html @@ -622,7 +622,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/functions_h.html b/katabatic/doc/html/functions_h.html index 2335e2a5..644df725 100644 --- a/katabatic/doc/html/functions_h.html +++ b/katabatic/doc/html/functions_h.html @@ -51,7 +51,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/functions_i.html b/katabatic/doc/html/functions_i.html index 7429a72e..90c06c7c 100644 --- a/katabatic/doc/html/functions_i.html +++ b/katabatic/doc/html/functions_i.html @@ -169,7 +169,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/functions_k.html b/katabatic/doc/html/functions_k.html index 8e77984b..c3a8b6f4 100644 --- a/katabatic/doc/html/functions_k.html +++ b/katabatic/doc/html/functions_k.html @@ -48,7 +48,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/functions_l.html b/katabatic/doc/html/functions_l.html index d734435e..07a6c937 100644 --- a/katabatic/doc/html/functions_l.html +++ b/katabatic/doc/html/functions_l.html @@ -60,7 +60,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/functions_m.html b/katabatic/doc/html/functions_m.html index f525b464..87446a4d 100644 --- a/katabatic/doc/html/functions_m.html +++ b/katabatic/doc/html/functions_m.html @@ -85,7 +85,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/functions_n.html b/katabatic/doc/html/functions_n.html index 8e7195a8..2fcd2abc 100644 --- a/katabatic/doc/html/functions_n.html +++ b/katabatic/doc/html/functions_n.html @@ -52,7 +52,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/functions_o.html b/katabatic/doc/html/functions_o.html index cef668b0..ee6cbb68 100644 --- a/katabatic/doc/html/functions_o.html +++ b/katabatic/doc/html/functions_o.html @@ -57,7 +57,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/functions_p.html b/katabatic/doc/html/functions_p.html index 2886089b..e3bcaec8 100644 --- a/katabatic/doc/html/functions_p.html +++ b/katabatic/doc/html/functions_p.html @@ -51,7 +51,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/functions_r.html b/katabatic/doc/html/functions_r.html index 16b67303..70a886d6 100644 --- a/katabatic/doc/html/functions_r.html +++ b/katabatic/doc/html/functions_r.html @@ -88,7 +88,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/functions_s.html b/katabatic/doc/html/functions_s.html index f6ded257..31eb4f06 100644 --- a/katabatic/doc/html/functions_s.html +++ b/katabatic/doc/html/functions_s.html @@ -168,7 +168,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/functions_t.html b/katabatic/doc/html/functions_t.html index 08fd11b9..4c5dad2f 100644 --- a/katabatic/doc/html/functions_t.html +++ b/katabatic/doc/html/functions_t.html @@ -58,7 +58,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/functions_type.html b/katabatic/doc/html/functions_type.html index 3576ac43..569c8248 100644 --- a/katabatic/doc/html/functions_type.html +++ b/katabatic/doc/html/functions_type.html @@ -49,7 +49,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/functions_u.html b/katabatic/doc/html/functions_u.html index 8be32e4c..c0d4c13b 100644 --- a/katabatic/doc/html/functions_u.html +++ b/katabatic/doc/html/functions_u.html @@ -93,7 +93,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/functions_x.html b/katabatic/doc/html/functions_x.html index e2690770..27a5e401 100644 --- a/katabatic/doc/html/functions_x.html +++ b/katabatic/doc/html/functions_x.html @@ -48,7 +48,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/graph_legend.html b/katabatic/doc/html/graph_legend.html index f88f03bf..442fe496 100644 --- a/katabatic/doc/html/graph_legend.html +++ b/katabatic/doc/html/graph_legend.html @@ -74,7 +74,7 @@ A yellow dashed arrow denotes a relation between a template instance and the tem
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/group__LoadGlobalRouting.html b/katabatic/doc/html/group__LoadGlobalRouting.html index bf3ba298..52c8f8e9 100644 --- a/katabatic/doc/html/group__LoadGlobalRouting.html +++ b/katabatic/doc/html/group__LoadGlobalRouting.html @@ -866,7 +866,7 @@ _do_xG_xM3()
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/group__grpSynthHierarchy.html b/katabatic/doc/html/group__grpSynthHierarchy.html index d0972b5a..3c80bb1e 100644 --- a/katabatic/doc/html/group__grpSynthHierarchy.html +++ b/katabatic/doc/html/group__grpSynthHierarchy.html @@ -114,7 +114,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/hierarchy.html b/katabatic/doc/html/hierarchy.html index 744c78fa..6a1565a4 100644 --- a/katabatic/doc/html/hierarchy.html +++ b/katabatic/doc/html/hierarchy.html @@ -85,7 +85,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/index.html b/katabatic/doc/html/index.html index d7e7c1dc..529b1b58 100644 --- a/katabatic/doc/html/index.html +++ b/katabatic/doc/html/index.html @@ -48,7 +48,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/modules.html b/katabatic/doc/html/modules.html index 558434e1..102e4533 100644 --- a/katabatic/doc/html/modules.html +++ b/katabatic/doc/html/modules.html @@ -55,7 +55,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/namespaceKatabatic.html b/katabatic/doc/html/namespaceKatabatic.html index a6e82e4c..29f9d7dd 100644 --- a/katabatic/doc/html/namespaceKatabatic.html +++ b/katabatic/doc/html/namespaceKatabatic.html @@ -615,7 +615,7 @@ Enumerations
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/namespaceanonymous__namespace_02AutoSegment_8cpp_03.html b/katabatic/doc/html/namespaceanonymous__namespace_02AutoSegment_8cpp_03.html index b2d983e8..d4cd9401 100644 --- a/katabatic/doc/html/namespaceanonymous__namespace_02AutoSegment_8cpp_03.html +++ b/katabatic/doc/html/namespaceanonymous__namespace_02AutoSegment_8cpp_03.html @@ -45,7 +45,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/namespaceanonymous__namespace_02ChipTools_8cpp_03.html b/katabatic/doc/html/namespaceanonymous__namespace_02ChipTools_8cpp_03.html index bfaf0263..287619af 100644 --- a/katabatic/doc/html/namespaceanonymous__namespace_02ChipTools_8cpp_03.html +++ b/katabatic/doc/html/namespaceanonymous__namespace_02ChipTools_8cpp_03.html @@ -45,7 +45,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/namespaceanonymous__namespace_02GCell_8cpp_03.html b/katabatic/doc/html/namespaceanonymous__namespace_02GCell_8cpp_03.html index 38dc948b..abcd9989 100644 --- a/katabatic/doc/html/namespaceanonymous__namespace_02GCell_8cpp_03.html +++ b/katabatic/doc/html/namespaceanonymous__namespace_02GCell_8cpp_03.html @@ -45,7 +45,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/namespaceanonymous__namespace_02KatabaticEngine_8cpp_03.html b/katabatic/doc/html/namespaceanonymous__namespace_02KatabaticEngine_8cpp_03.html index 5d8ebc1e..6ad25357 100644 --- a/katabatic/doc/html/namespaceanonymous__namespace_02KatabaticEngine_8cpp_03.html +++ b/katabatic/doc/html/namespaceanonymous__namespace_02KatabaticEngine_8cpp_03.html @@ -45,7 +45,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/namespaceanonymous__namespace_02LoadGrByNet_8cpp_03.html b/katabatic/doc/html/namespaceanonymous__namespace_02LoadGrByNet_8cpp_03.html index 058439a1..6a729d8d 100644 --- a/katabatic/doc/html/namespaceanonymous__namespace_02LoadGrByNet_8cpp_03.html +++ b/katabatic/doc/html/namespaceanonymous__namespace_02LoadGrByNet_8cpp_03.html @@ -83,7 +83,7 @@ Functions
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/namespaceanonymous__namespace_02Session_8cpp_03.html b/katabatic/doc/html/namespaceanonymous__namespace_02Session_8cpp_03.html index 4a74b486..a1b97e49 100644 --- a/katabatic/doc/html/namespaceanonymous__namespace_02Session_8cpp_03.html +++ b/katabatic/doc/html/namespaceanonymous__namespace_02Session_8cpp_03.html @@ -45,7 +45,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/namespacemembers.html b/katabatic/doc/html/namespacemembers.html index c4a915b3..fdf41fac 100644 --- a/katabatic/doc/html/namespacemembers.html +++ b/katabatic/doc/html/namespacemembers.html @@ -333,7 +333,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/namespacemembers_enum.html b/katabatic/doc/html/namespacemembers_enum.html index 6c9cef24..c51c5912 100644 --- a/katabatic/doc/html/namespacemembers_enum.html +++ b/katabatic/doc/html/namespacemembers_enum.html @@ -58,7 +58,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/namespacemembers_eval.html b/katabatic/doc/html/namespacemembers_eval.html index 688bfa1e..921174a6 100644 --- a/katabatic/doc/html/namespacemembers_eval.html +++ b/katabatic/doc/html/namespacemembers_eval.html @@ -269,7 +269,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/namespacemembers_func.html b/katabatic/doc/html/namespacemembers_func.html index dbe84f6b..70d75358 100644 --- a/katabatic/doc/html/namespacemembers_func.html +++ b/katabatic/doc/html/namespacemembers_func.html @@ -49,7 +49,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/namespacemembers_type.html b/katabatic/doc/html/namespacemembers_type.html index 7f0008a4..76a5b4e9 100644 --- a/katabatic/doc/html/namespacemembers_type.html +++ b/katabatic/doc/html/namespacemembers_type.html @@ -70,7 +70,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/html/namespaces.html b/katabatic/doc/html/namespaces.html index a8a5db0d..3a412b88 100644 --- a/katabatic/doc/html/namespaces.html +++ b/katabatic/doc/html/namespaces.html @@ -56,7 +56,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/katabatic/doc/latex/refman.tex b/katabatic/doc/latex/refman.tex index 55636ef2..c3814d2c 100644 --- a/katabatic/doc/latex/refman.tex +++ b/katabatic/doc/latex/refman.tex @@ -34,7 +34,7 @@ \vspace*{1cm} {\large Generated by Doxygen 1.8.14}\\ \vspace*{0.5cm} - {\small Thu Oct 18 2018 16:33:50}\\ + {\small Sun May 26 2019 17:26:55}\\ \end{center} \end{titlepage} diff --git a/kite/doc/html/Constants_8h_source.html b/kite/doc/html/Constants_8h_source.html index b6eebc99..111a1e4c 100644 --- a/kite/doc/html/Constants_8h_source.html +++ b/kite/doc/html/Constants_8h_source.html @@ -60,7 +60,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/DataNegociate_8h_source.html b/kite/doc/html/DataNegociate_8h_source.html index 98d49d64..83dd1242 100644 --- a/kite/doc/html/DataNegociate_8h_source.html +++ b/kite/doc/html/DataNegociate_8h_source.html @@ -96,7 +96,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/HorizontalTrack_8h_source.html b/kite/doc/html/HorizontalTrack_8h_source.html index 5cd9ab8d..373f1aee 100644 --- a/kite/doc/html/HorizontalTrack_8h_source.html +++ b/kite/doc/html/HorizontalTrack_8h_source.html @@ -59,7 +59,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/KiteEngine_8h_source.html b/kite/doc/html/KiteEngine_8h_source.html index 24ff1d55..39b5c429 100644 --- a/kite/doc/html/KiteEngine_8h_source.html +++ b/kite/doc/html/KiteEngine_8h_source.html @@ -79,7 +79,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/Manipulator_8h_source.html b/kite/doc/html/Manipulator_8h_source.html index 2a597192..e2908974 100644 --- a/kite/doc/html/Manipulator_8h_source.html +++ b/kite/doc/html/Manipulator_8h_source.html @@ -94,7 +94,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/NegociateWindow_8h_source.html b/kite/doc/html/NegociateWindow_8h_source.html index cf344c75..a8e92d6c 100644 --- a/kite/doc/html/NegociateWindow_8h_source.html +++ b/kite/doc/html/NegociateWindow_8h_source.html @@ -83,7 +83,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/RoutingEventHistory_8h_source.html b/kite/doc/html/RoutingEventHistory_8h_source.html index aa0a4dfb..19522f01 100644 --- a/kite/doc/html/RoutingEventHistory_8h_source.html +++ b/kite/doc/html/RoutingEventHistory_8h_source.html @@ -60,7 +60,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/RoutingEventLoop_8h_source.html b/kite/doc/html/RoutingEventLoop_8h_source.html index 8ba26268..baf03885 100644 --- a/kite/doc/html/RoutingEventLoop_8h_source.html +++ b/kite/doc/html/RoutingEventLoop_8h_source.html @@ -57,7 +57,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/RoutingEventQueue_8h_source.html b/kite/doc/html/RoutingEventQueue_8h_source.html index 80d5ddb3..960fc72c 100644 --- a/kite/doc/html/RoutingEventQueue_8h_source.html +++ b/kite/doc/html/RoutingEventQueue_8h_source.html @@ -66,7 +66,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/RoutingEvent_8h_source.html b/kite/doc/html/RoutingEvent_8h_source.html index f7b22889..833205cb 100644 --- a/kite/doc/html/RoutingEvent_8h_source.html +++ b/kite/doc/html/RoutingEvent_8h_source.html @@ -110,7 +110,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/RoutingPlane_8h_source.html b/kite/doc/html/RoutingPlane_8h_source.html index 4f6dcbe2..30b3c577 100644 --- a/kite/doc/html/RoutingPlane_8h_source.html +++ b/kite/doc/html/RoutingPlane_8h_source.html @@ -44,14 +44,13 @@ $(function() {
      RoutingPlane.h
      -
      1 // -*- C++ -*-
      2 //
      3 // This file is part of the Coriolis Software.
      4 // Copyright (c) UPMC 2008-2013, All Rights Reserved
      5 //
      6 // +-----------------------------------------------------------------+
      7 // | C O R I O L I S |
      8 // | K i t e - D e t a i l e d R o u t e r |
      9 // | |
      10 // | Author : Jean-Paul CHAPUT |
      11 // | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
      12 // | =============================================================== |
      13 // | C++ Header : "./kite/RoutingPlane.h" |
      14 // +-----------------------------------------------------------------+
      15 
      16 
      17 #ifndef KITE_ROUTING_PLANE_H
      18 #define KITE_ROUTING_PLANE_H
      19 
      20 #include "crlcore/RoutingLayerGauge.h"
      21 #include "kite/Track.h"
      22 
      23 
      24 namespace Kite {
      25 
      27  using Katabatic::KbDirectionMask;
      28  class KiteEngine;
      29 
      30 
      31 // -------------------------------------------------------------------
      32 // Class : "RoutingPlane".
      33 
      34  class RoutingPlane {
      35 
      36  public:
      37  static RoutingPlane* create ( KiteEngine*, size_t depth );
      38  void destroy ();
      39  inline bool isHorizontal () const;
      40  inline bool isVertical () const;
      41  inline KiteEngine* getKiteEngine () const;
      42  inline RoutingLayerGauge* getLayerGauge () const;
      43  inline unsigned int getDirection () const;
      44  inline size_t getDepth () const;
      45  inline DbU::Unit getAxisMin () const;
      46  inline DbU::Unit getAxisMax () const;
      47  inline DbU::Unit getTrackMin () const;
      48  inline DbU::Unit getTrackMax () const;
      49  RoutingPlane* getTop () const;
      50  RoutingPlane* getBottom () const;
      51  inline const Layer* getLayer () const;
      52  inline const Layer* getBlockageLayer () const;
      53  inline size_t getTracksSize () const;
      54  inline size_t computeTracksSize () const;
      55  inline DbU::Unit getTrackPosition ( size_t index ) const;
      56  Track* getTrackByIndex ( size_t index ) const;
      57  Track* getTrackByPosition ( DbU::Unit axis, unsigned int mode=KtNearest ) const;
      58  bool _check ( unsigned int& overlaps ) const;
      59  Record* _getRecord () const;
      60  string _getString () const;
      61  inline string _getTypeName () const;
      62 
      63  protected:
      64  // Sub-Class: TrackCompare.
      65  struct TrackCompare {
      66  inline bool operator() ( Track* track1, Track* track2 );
      67  };
      68 
      69  protected:
      70  // Attributes.
      71  KiteEngine* _kite;
      72  RoutingLayerGauge* _layerGauge;
      73  size_t _depth;
      74  unsigned int _flags;
      75  DbU::Unit _axisMin;
      76  DbU::Unit _axisMax;
      77  DbU::Unit _trackMin;
      78  DbU::Unit _trackMax;
      79  vector<Track*> _tracks;
      80 
      81  protected:
      82  // Constructors & Destructors.
      83  RoutingPlane ( KiteEngine*, size_t depth );
      84  ~RoutingPlane ();
      85  private:
      86  RoutingPlane ( const RoutingPlane& );
      87  RoutingPlane& operator= ( const RoutingPlane& );
      88  };
      89 
      90 
      91 // Inline Functions.
      92  inline bool RoutingPlane::TrackCompare::operator() ( Track* lhs, Track* rhs )
      93  { return lhs->getAxis() > rhs->getAxis(); };
      94 
      95  inline KiteEngine* RoutingPlane::getKiteEngine () const { return _kite; }
      96  inline RoutingLayerGauge* RoutingPlane::getLayerGauge () const { return _layerGauge; }
      97  inline unsigned int RoutingPlane::getDirection () const { return _flags & KbDirectionMask; }
      98  inline size_t RoutingPlane::getDepth () const { return _depth; }
      99  inline DbU::Unit RoutingPlane::getAxisMin () const { return _axisMin; }
      100  inline DbU::Unit RoutingPlane::getAxisMax () const { return _axisMax; }
      101  inline DbU::Unit RoutingPlane::getTrackMin () const { return _trackMin; }
      102  inline DbU::Unit RoutingPlane::getTrackMax () const { return _trackMax; }
      103  inline const Layer* RoutingPlane::getLayer () const { return getLayerGauge()->getLayer(); }
      104  inline const Layer* RoutingPlane::getBlockageLayer () const { return getLayerGauge()->getBlockageLayer(); }
      105  inline size_t RoutingPlane::getTracksSize () const { return _tracks.size(); }
      106  inline string RoutingPlane::_getTypeName () const { return "RoutingPlane"; }
      107 
      108  inline size_t RoutingPlane::computeTracksSize () const
      109  { return _layerGauge->getTrackNumber(_axisMin,_axisMax); }
      110 
      111  inline DbU::Unit RoutingPlane::getTrackPosition ( size_t index ) const
      112  { return _layerGauge->getTrackPosition(_axisMin,index); }
      113 
      114  inline bool RoutingPlane::isHorizontal () const
      115  { return (getDirection() & KbHorizontal); }
      116 
      117  inline bool RoutingPlane::isVertical () const
      118  { return (getDirection() & KbVertical); }
      119 
      120 
      121 } // Kite namespace.
      122 
      123 
      124 INSPECTOR_P_SUPPORT(Kite::RoutingPlane);
      125 
      126 
      127 #endif // KITE_ROUTING_PLANE_H
      unsigned int getDirection() const
      Definition: RoutingPlane.h:97
      +
      1 // -*- C++ -*-
      2 //
      3 // This file is part of the Coriolis Software.
      4 // Copyright (c) UPMC 2008-2013, All Rights Reserved
      5 //
      6 // +-----------------------------------------------------------------+
      7 // | C O R I O L I S |
      8 // | K i t e - D e t a i l e d R o u t e r |
      9 // | |
      10 // | Author : Jean-Paul CHAPUT |
      11 // | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
      12 // | =============================================================== |
      13 // | C++ Header : "./kite/RoutingPlane.h" |
      14 // +-----------------------------------------------------------------+
      15 
      16 
      17 #ifndef KITE_ROUTING_PLANE_H
      18 #define KITE_ROUTING_PLANE_H
      19 
      20 #include "crlcore/RoutingLayerGauge.h"
      21 #include "kite/Track.h"
      22 
      23 
      24 namespace Kite {
      25 
      27  using Katabatic::KbDirectionMask;
      28  class KiteEngine;
      29 
      30 
      31 // -------------------------------------------------------------------
      32 // Class : "RoutingPlane".
      33 
      34  class RoutingPlane {
      35 
      36  public:
      37  static RoutingPlane* create ( KiteEngine*, size_t depth );
      38  void destroy ();
      39  inline bool isHorizontal () const;
      40  inline bool isVertical () const;
      41  inline KiteEngine* getKiteEngine () const;
      42  inline RoutingLayerGauge* getLayerGauge () const;
      43  inline unsigned int getDirection () const;
      44  inline size_t getDepth () const;
      45  inline DbU::Unit getAxisMin () const;
      46  inline DbU::Unit getAxisMax () const;
      47  inline DbU::Unit getTrackMin () const;
      48  inline DbU::Unit getTrackMax () const;
      49  RoutingPlane* getTop () const;
      50  RoutingPlane* getBottom () const;
      51  inline const Layer* getLayer () const;
      52  inline const Layer* getBlockageLayer () const;
      53  inline size_t getTracksSize () const;
      54  inline size_t computeTracksSize () const;
      55  inline DbU::Unit getTrackPosition ( size_t index ) const;
      56  Track* getTrackByIndex ( size_t index ) const;
      57  Track* getTrackByPosition ( DbU::Unit axis, unsigned int mode=KtNearest ) const;
      58  bool _check ( unsigned int& overlaps ) const;
      59  Record* _getRecord () const;
      60  string _getString () const;
      61  inline string _getTypeName () const;
      62 
      63  protected:
      64  // Sub-Class: TrackCompare.
      65  struct TrackCompare {
      66  inline bool operator() ( Track* track1, Track* track2 );
      67  };
      68 
      69  protected:
      70  // Attributes.
      71  KiteEngine* _kite;
      72  RoutingLayerGauge* _layerGauge;
      73  size_t _depth;
      74  unsigned int _flags;
      75  DbU::Unit _axisMin;
      76  DbU::Unit _axisMax;
      77  DbU::Unit _trackMin;
      78  DbU::Unit _trackMax;
      79  vector<Track*> _tracks;
      80 
      81  protected:
      82  // Constructors & Destructors.
      83  RoutingPlane ( KiteEngine*, size_t depth );
      84  ~RoutingPlane ();
      85  private:
      86  RoutingPlane ( const RoutingPlane& );
      87  RoutingPlane& operator= ( const RoutingPlane& );
      88  };
      89 
      90 
      91 // Inline Functions.
      92  inline bool RoutingPlane::TrackCompare::operator() ( Track* lhs, Track* rhs )
      93  { return lhs->getAxis() > rhs->getAxis(); };
      94 
      95  inline KiteEngine* RoutingPlane::getKiteEngine () const { return _kite; }
      96  inline RoutingLayerGauge* RoutingPlane::getLayerGauge () const { return _layerGauge; }
      97  inline unsigned int RoutingPlane::getDirection () const { return _flags & KbDirectionMask; }
      98  inline size_t RoutingPlane::getDepth () const { return _depth; }
      99  inline DbU::Unit RoutingPlane::getAxisMin () const { return _axisMin; }
      100  inline DbU::Unit RoutingPlane::getAxisMax () const { return _axisMax; }
      101  inline DbU::Unit RoutingPlane::getTrackMin () const { return _trackMin; }
      102  inline DbU::Unit RoutingPlane::getTrackMax () const { return _trackMax; }
      103  inline const Layer* RoutingPlane::getLayer () const { return getLayerGauge()->getLayer(); }
      104  inline const Layer* RoutingPlane::getBlockageLayer () const { return getLayerGauge()->getBlockageLayer(); }
      105  inline size_t RoutingPlane::getTracksSize () const { return _tracks.size(); }
      106  inline string RoutingPlane::_getTypeName () const { return "RoutingPlane"; }
      107 
      108  inline size_t RoutingPlane::computeTracksSize () const
      109  { return _layerGauge->getTrackNumber(_axisMin,_axisMax); }
      110 
      111  inline DbU::Unit RoutingPlane::getTrackPosition ( size_t index ) const
      112  { return _layerGauge->getTrackPosition(_axisMin,index); }
      113 
      114  inline bool RoutingPlane::isHorizontal () const
      115  { return (getDirection() & KbHorizontal); }
      116 
      117  inline bool RoutingPlane::isVertical () const
      118  { return (getDirection() & KbVertical); }
      119 
      120 
      121 } // Kite namespace.
      122 
      123 
      124 INSPECTOR_P_SUPPORT(Kite::RoutingPlane);
      125 
      126 
      127 #endif // KITE_ROUTING_PLANE_H
      unsigned int getDirection() const
      Definition: RoutingPlane.h:97
      bool isVertical() const
      Definition: RoutingPlane.h:117
      const Layer * getLayer() const
      Definition: RoutingPlane.h:103
      const Layer * getLayer() const
      const Layer * getBlockageLayer() const
      Definition: RoutingPlane.h:104
      size_t getTracksSize() const
      Definition: RoutingPlane.h:105
      RoutingPlane * getBottom() const
      Definition: RoutingPlane.cpp:150
      -
      DbU::Unit getTrackPosition(DbU::Unit start, unsigned depth) const
      static RoutingPlane * create(KiteEngine *, size_t depth)
      Definition: RoutingPlane.cpp:91
      std::int64_t Unit
      bool _check(unsigned int &overlaps) const
      Definition: RoutingPlane.cpp:174
      @@ -83,7 +82,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/SegmentFsm_8h_source.html b/kite/doc/html/SegmentFsm_8h_source.html index 31cad882..d81f3265 100644 --- a/kite/doc/html/SegmentFsm_8h_source.html +++ b/kite/doc/html/SegmentFsm_8h_source.html @@ -126,7 +126,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/Session_8h_source.html b/kite/doc/html/Session_8h_source.html index 7c256ebc..aaec75b7 100644 --- a/kite/doc/html/Session_8h_source.html +++ b/kite/doc/html/Session_8h_source.html @@ -79,7 +79,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/TrackElement_8h_source.html b/kite/doc/html/TrackElement_8h_source.html index c6317fc9..67903141 100644 --- a/kite/doc/html/TrackElement_8h_source.html +++ b/kite/doc/html/TrackElement_8h_source.html @@ -132,7 +132,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/TrackFixedSegment_8h_source.html b/kite/doc/html/TrackFixedSegment_8h_source.html index b9eb81cd..74075301 100644 --- a/kite/doc/html/TrackFixedSegment_8h_source.html +++ b/kite/doc/html/TrackFixedSegment_8h_source.html @@ -73,7 +73,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/TrackMarker_8h_source.html b/kite/doc/html/TrackMarker_8h_source.html index 4c68853d..9e822ce4 100644 --- a/kite/doc/html/TrackMarker_8h_source.html +++ b/kite/doc/html/TrackMarker_8h_source.html @@ -65,7 +65,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/TrackSegment_8h_source.html b/kite/doc/html/TrackSegment_8h_source.html index 5654f024..0908902a 100644 --- a/kite/doc/html/TrackSegment_8h_source.html +++ b/kite/doc/html/TrackSegment_8h_source.html @@ -107,7 +107,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/Track_8h_source.html b/kite/doc/html/Track_8h_source.html index 58fcb4a4..2d2f03d7 100644 --- a/kite/doc/html/Track_8h_source.html +++ b/kite/doc/html/Track_8h_source.html @@ -115,7 +115,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/VerticalTrack_8h_source.html b/kite/doc/html/VerticalTrack_8h_source.html index 1b1c877c..fd4bd207 100644 --- a/kite/doc/html/VerticalTrack_8h_source.html +++ b/kite/doc/html/VerticalTrack_8h_source.html @@ -59,7 +59,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/annotated.html b/kite/doc/html/annotated.html index 76fe163f..412804d8 100644 --- a/kite/doc/html/annotated.html +++ b/kite/doc/html/annotated.html @@ -71,7 +71,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/classKite_1_1DataNegociate-members.html b/kite/doc/html/classKite_1_1DataNegociate-members.html index 9cc7d693..7fa605d9 100644 --- a/kite/doc/html/classKite_1_1DataNegociate-members.html +++ b/kite/doc/html/classKite_1_1DataNegociate-members.html @@ -86,7 +86,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/classKite_1_1DataNegociate.html b/kite/doc/html/classKite_1_1DataNegociate.html index 6fd39869..70530858 100644 --- a/kite/doc/html/classKite_1_1DataNegociate.html +++ b/kite/doc/html/classKite_1_1DataNegociate.html @@ -814,7 +814,7 @@ Modifications History
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/classKite_1_1HorizontalTrack-members.html b/kite/doc/html/classKite_1_1HorizontalTrack-members.html index 898f55bc..20b13204 100644 --- a/kite/doc/html/classKite_1_1HorizontalTrack-members.html +++ b/kite/doc/html/classKite_1_1HorizontalTrack-members.html @@ -111,7 +111,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/classKite_1_1HorizontalTrack.html b/kite/doc/html/classKite_1_1HorizontalTrack.html index f69a33ae..0ac98815 100644 --- a/kite/doc/html/classKite_1_1HorizontalTrack.html +++ b/kite/doc/html/classKite_1_1HorizontalTrack.html @@ -313,7 +313,7 @@ Additional Inherited Members
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/classKite_1_1KiteEngine-members.html b/kite/doc/html/classKite_1_1KiteEngine-members.html index 4b60db0c..a25a7f48 100644 --- a/kite/doc/html/classKite_1_1KiteEngine-members.html +++ b/kite/doc/html/classKite_1_1KiteEngine-members.html @@ -114,7 +114,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/classKite_1_1KiteEngine.html b/kite/doc/html/classKite_1_1KiteEngine.html index b8fdafd1..c813aa9e 100644 --- a/kite/doc/html/classKite_1_1KiteEngine.html +++ b/kite/doc/html/classKite_1_1KiteEngine.html @@ -397,7 +397,7 @@ Static Public Member Functions
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/classKite_1_1Manipulator-members.html b/kite/doc/html/classKite_1_1Manipulator-members.html index 5a574f7c..95ce7487 100644 --- a/kite/doc/html/classKite_1_1Manipulator-members.html +++ b/kite/doc/html/classKite_1_1Manipulator-members.html @@ -88,7 +88,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/classKite_1_1Manipulator.html b/kite/doc/html/classKite_1_1Manipulator.html index a106588a..b4ec3794 100644 --- a/kite/doc/html/classKite_1_1Manipulator.html +++ b/kite/doc/html/classKite_1_1Manipulator.html @@ -768,7 +768,7 @@ One Dogleg (max)

      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/classKite_1_1NegociateWindow-members.html b/kite/doc/html/classKite_1_1NegociateWindow-members.html index a85463f2..f461c909 100644 --- a/kite/doc/html/classKite_1_1NegociateWindow-members.html +++ b/kite/doc/html/classKite_1_1NegociateWindow-members.html @@ -74,7 +74,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/classKite_1_1NegociateWindow.html b/kite/doc/html/classKite_1_1NegociateWindow.html index 6bb93947..a73e434c 100644 --- a/kite/doc/html/classKite_1_1NegociateWindow.html +++ b/kite/doc/html/classKite_1_1NegociateWindow.html @@ -625,7 +625,7 @@ Static Public Member Functions
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/classKite_1_1RoutingEvent-members.html b/kite/doc/html/classKite_1_1RoutingEvent-members.html index 5a68b36d..19d6d088 100644 --- a/kite/doc/html/classKite_1_1RoutingEvent-members.html +++ b/kite/doc/html/classKite_1_1RoutingEvent-members.html @@ -97,7 +97,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/classKite_1_1RoutingEvent.html b/kite/doc/html/classKite_1_1RoutingEvent.html index 792d825d..29e296ef 100644 --- a/kite/doc/html/classKite_1_1RoutingEvent.html +++ b/kite/doc/html/classKite_1_1RoutingEvent.html @@ -1313,7 +1313,7 @@ Static Public Member Functions
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/classKite_1_1RoutingEventHistory-members.html b/kite/doc/html/classKite_1_1RoutingEventHistory-members.html index 4d5fffc6..db1721a7 100644 --- a/kite/doc/html/classKite_1_1RoutingEventHistory-members.html +++ b/kite/doc/html/classKite_1_1RoutingEventHistory-members.html @@ -60,7 +60,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/classKite_1_1RoutingEventHistory.html b/kite/doc/html/classKite_1_1RoutingEventHistory.html index 018b0658..d6e78a34 100644 --- a/kite/doc/html/classKite_1_1RoutingEventHistory.html +++ b/kite/doc/html/classKite_1_1RoutingEventHistory.html @@ -259,7 +259,7 @@ Public Member Functions
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/classKite_1_1RoutingEventLoop-members.html b/kite/doc/html/classKite_1_1RoutingEventLoop-members.html index 002c27b9..21e422de 100644 --- a/kite/doc/html/classKite_1_1RoutingEventLoop-members.html +++ b/kite/doc/html/classKite_1_1RoutingEventLoop-members.html @@ -58,7 +58,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/classKite_1_1RoutingEventLoop.html b/kite/doc/html/classKite_1_1RoutingEventLoop.html index e4d11fca..3bf91c1c 100644 --- a/kite/doc/html/classKite_1_1RoutingEventLoop.html +++ b/kite/doc/html/classKite_1_1RoutingEventLoop.html @@ -244,7 +244,7 @@ Public Member Functions
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/classKite_1_1RoutingEventQueue-members.html b/kite/doc/html/classKite_1_1RoutingEventQueue-members.html index 75095e63..f8d29b6b 100644 --- a/kite/doc/html/classKite_1_1RoutingEventQueue-members.html +++ b/kite/doc/html/classKite_1_1RoutingEventQueue-members.html @@ -65,7 +65,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/classKite_1_1RoutingEventQueue.html b/kite/doc/html/classKite_1_1RoutingEventQueue.html index bcea2221..fa1b638d 100644 --- a/kite/doc/html/classKite_1_1RoutingEventQueue.html +++ b/kite/doc/html/classKite_1_1RoutingEventQueue.html @@ -408,7 +408,7 @@ Implementation Details
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/classKite_1_1RoutingEvent_1_1Key-members.html b/kite/doc/html/classKite_1_1RoutingEvent_1_1Key-members.html index f4bc3dc1..574552f3 100644 --- a/kite/doc/html/classKite_1_1RoutingEvent_1_1Key-members.html +++ b/kite/doc/html/classKite_1_1RoutingEvent_1_1Key-members.html @@ -53,7 +53,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/classKite_1_1RoutingEvent_1_1Key.html b/kite/doc/html/classKite_1_1RoutingEvent_1_1Key.html index 374981ae..87caeb55 100644 --- a/kite/doc/html/classKite_1_1RoutingEvent_1_1Key.html +++ b/kite/doc/html/classKite_1_1RoutingEvent_1_1Key.html @@ -105,7 +105,7 @@ Public Member Functions
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/classKite_1_1RoutingPlane-members.html b/kite/doc/html/classKite_1_1RoutingPlane-members.html index c0a400c3..58d77fc7 100644 --- a/kite/doc/html/classKite_1_1RoutingPlane-members.html +++ b/kite/doc/html/classKite_1_1RoutingPlane-members.html @@ -73,7 +73,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/classKite_1_1RoutingPlane.html b/kite/doc/html/classKite_1_1RoutingPlane.html index 03332c49..fe6ef86b 100644 --- a/kite/doc/html/classKite_1_1RoutingPlane.html +++ b/kite/doc/html/classKite_1_1RoutingPlane.html @@ -677,7 +677,7 @@ Fig 1: Horizontal RoutingPlane

      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/classKite_1_1SegmentAction-members.html b/kite/doc/html/classKite_1_1SegmentAction-members.html index 4501fac8..38d1d01d 100644 --- a/kite/doc/html/classKite_1_1SegmentAction-members.html +++ b/kite/doc/html/classKite_1_1SegmentAction-members.html @@ -82,7 +82,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/classKite_1_1SegmentAction.html b/kite/doc/html/classKite_1_1SegmentAction.html index 3f2e2075..60b38526 100644 --- a/kite/doc/html/classKite_1_1SegmentAction.html +++ b/kite/doc/html/classKite_1_1SegmentAction.html @@ -397,7 +397,7 @@ Public Member Functions
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/classKite_1_1SegmentFsm-members.html b/kite/doc/html/classKite_1_1SegmentFsm-members.html index c749748c..b87f6c24 100644 --- a/kite/doc/html/classKite_1_1SegmentFsm-members.html +++ b/kite/doc/html/classKite_1_1SegmentFsm-members.html @@ -88,7 +88,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/classKite_1_1SegmentFsm.html b/kite/doc/html/classKite_1_1SegmentFsm.html index 389dd671..a374aa30 100644 --- a/kite/doc/html/classKite_1_1SegmentFsm.html +++ b/kite/doc/html/classKite_1_1SegmentFsm.html @@ -926,7 +926,7 @@ Candidates Track Ordering
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/classKite_1_1SegmentObserver-members.html b/kite/doc/html/classKite_1_1SegmentObserver-members.html index 45119f82..dfe9aff1 100644 --- a/kite/doc/html/classKite_1_1SegmentObserver-members.html +++ b/kite/doc/html/classKite_1_1SegmentObserver-members.html @@ -55,7 +55,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/classKite_1_1SegmentObserver.html b/kite/doc/html/classKite_1_1SegmentObserver.html index 0c778ec2..21667e31 100644 --- a/kite/doc/html/classKite_1_1SegmentObserver.html +++ b/kite/doc/html/classKite_1_1SegmentObserver.html @@ -109,7 +109,7 @@ Public Member Functions
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/classKite_1_1Session-members.html b/kite/doc/html/classKite_1_1Session-members.html index 649926b8..1e0329eb 100644 --- a/kite/doc/html/classKite_1_1Session-members.html +++ b/kite/doc/html/classKite_1_1Session-members.html @@ -99,7 +99,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/classKite_1_1Session.html b/kite/doc/html/classKite_1_1Session.html index 43f36f55..96cb10cd 100644 --- a/kite/doc/html/classKite_1_1Session.html +++ b/kite/doc/html/classKite_1_1Session.html @@ -666,7 +666,7 @@ The Lookup Mechanism
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/classKite_1_1Track-members.html b/kite/doc/html/classKite_1_1Track-members.html index b93a0729..88dc50c6 100644 --- a/kite/doc/html/classKite_1_1Track-members.html +++ b/kite/doc/html/classKite_1_1Track-members.html @@ -111,7 +111,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/classKite_1_1Track.html b/kite/doc/html/classKite_1_1Track.html index 562d5de3..b4517694 100644 --- a/kite/doc/html/classKite_1_1Track.html +++ b/kite/doc/html/classKite_1_1Track.html @@ -1633,7 +1633,7 @@ Fig 3: Track::getBeginIndex()
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/classKite_1_1TrackElement-members.html b/kite/doc/html/classKite_1_1TrackElement-members.html index d9451fba..00026f2b 100644 --- a/kite/doc/html/classKite_1_1TrackElement-members.html +++ b/kite/doc/html/classKite_1_1TrackElement-members.html @@ -118,7 +118,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/classKite_1_1TrackElement.html b/kite/doc/html/classKite_1_1TrackElement.html index e9f2b434..bc9e792d 100644 --- a/kite/doc/html/classKite_1_1TrackElement.html +++ b/kite/doc/html/classKite_1_1TrackElement.html @@ -2191,7 +2191,7 @@ TrackElement Abstract
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/classKite_1_1TrackFixedSegment-members.html b/kite/doc/html/classKite_1_1TrackFixedSegment-members.html index 2b8b2f61..4e54c656 100644 --- a/kite/doc/html/classKite_1_1TrackFixedSegment-members.html +++ b/kite/doc/html/classKite_1_1TrackFixedSegment-members.html @@ -119,7 +119,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/classKite_1_1TrackFixedSegment.html b/kite/doc/html/classKite_1_1TrackFixedSegment.html index de29aa9c..31ce7d30 100644 --- a/kite/doc/html/classKite_1_1TrackFixedSegment.html +++ b/kite/doc/html/classKite_1_1TrackFixedSegment.html @@ -572,7 +572,7 @@ Static Public Member Functions
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/classKite_1_1TrackMarker-members.html b/kite/doc/html/classKite_1_1TrackMarker-members.html index 5de44f22..bb0e34c7 100644 --- a/kite/doc/html/classKite_1_1TrackMarker-members.html +++ b/kite/doc/html/classKite_1_1TrackMarker-members.html @@ -59,7 +59,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/classKite_1_1TrackMarker.html b/kite/doc/html/classKite_1_1TrackMarker.html index 68fa6794..f19f6e1c 100644 --- a/kite/doc/html/classKite_1_1TrackMarker.html +++ b/kite/doc/html/classKite_1_1TrackMarker.html @@ -282,7 +282,7 @@ Static Public Member Functions
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/classKite_1_1TrackSegment-members.html b/kite/doc/html/classKite_1_1TrackSegment-members.html index 213be903..10b09155 100644 --- a/kite/doc/html/classKite_1_1TrackSegment-members.html +++ b/kite/doc/html/classKite_1_1TrackSegment-members.html @@ -120,7 +120,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/classKite_1_1TrackSegment.html b/kite/doc/html/classKite_1_1TrackSegment.html index 0a7304e4..5a194cc5 100644 --- a/kite/doc/html/classKite_1_1TrackSegment.html +++ b/kite/doc/html/classKite_1_1TrackSegment.html @@ -1691,7 +1691,7 @@ Global, Weak Global and Local Segments
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/classKite_1_1VerticalTrack-members.html b/kite/doc/html/classKite_1_1VerticalTrack-members.html index 6771909b..9956361a 100644 --- a/kite/doc/html/classKite_1_1VerticalTrack-members.html +++ b/kite/doc/html/classKite_1_1VerticalTrack-members.html @@ -111,7 +111,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/classKite_1_1VerticalTrack.html b/kite/doc/html/classKite_1_1VerticalTrack.html index cb6201ac..5259dc3f 100644 --- a/kite/doc/html/classKite_1_1VerticalTrack.html +++ b/kite/doc/html/classKite_1_1VerticalTrack.html @@ -314,7 +314,7 @@ Additional Inherited Members
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/classes.html b/kite/doc/html/classes.html index 3c511ad1..ccafd9ef 100644 --- a/kite/doc/html/classes.html +++ b/kite/doc/html/classes.html @@ -79,7 +79,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/dir_2916ee297f5e79ec495d393dfe8ba769.html b/kite/doc/html/dir_2916ee297f5e79ec495d393dfe8ba769.html index bbd8212f..5579bee4 100644 --- a/kite/doc/html/dir_2916ee297f5e79ec495d393dfe8ba769.html +++ b/kite/doc/html/dir_2916ee297f5e79ec495d393dfe8ba769.html @@ -49,7 +49,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/kite/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html index 1900c613..28dafb4e 100644 --- a/kite/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html +++ b/kite/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html @@ -53,7 +53,7 @@ Directories
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/files.html b/kite/doc/html/files.html index 831c49d2..42fe61bc 100644 --- a/kite/doc/html/files.html +++ b/kite/doc/html/files.html @@ -68,7 +68,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/functions.html b/kite/doc/html/functions.html index 6819c064..b01c23dd 100644 --- a/kite/doc/html/functions.html +++ b/kite/doc/html/functions.html @@ -53,7 +53,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/functions_0x7e.html b/kite/doc/html/functions_0x7e.html index 077e1885..5d22b17f 100644 --- a/kite/doc/html/functions_0x7e.html +++ b/kite/doc/html/functions_0x7e.html @@ -51,7 +51,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/functions_a.html b/kite/doc/html/functions_a.html index 470aad71..8a2aeb3f 100644 --- a/kite/doc/html/functions_a.html +++ b/kite/doc/html/functions_a.html @@ -84,7 +84,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/functions_b.html b/kite/doc/html/functions_b.html index c433b190..a62d0125 100644 --- a/kite/doc/html/functions_b.html +++ b/kite/doc/html/functions_b.html @@ -64,7 +64,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/functions_c.html b/kite/doc/html/functions_c.html index 7c6e5594..9d1a3e52 100644 --- a/kite/doc/html/functions_c.html +++ b/kite/doc/html/functions_c.html @@ -104,7 +104,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/functions_d.html b/kite/doc/html/functions_d.html index a9fdc911..a22e1c8c 100644 --- a/kite/doc/html/functions_d.html +++ b/kite/doc/html/functions_d.html @@ -74,7 +74,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/functions_e.html b/kite/doc/html/functions_e.html index 2bb46bc3..d9474075 100644 --- a/kite/doc/html/functions_e.html +++ b/kite/doc/html/functions_e.html @@ -91,7 +91,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/functions_enum.html b/kite/doc/html/functions_enum.html index a58de7e4..228d1562 100644 --- a/kite/doc/html/functions_enum.html +++ b/kite/doc/html/functions_enum.html @@ -64,7 +64,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/functions_eval.html b/kite/doc/html/functions_eval.html index c3166f60..653cdaf6 100644 --- a/kite/doc/html/functions_eval.html +++ b/kite/doc/html/functions_eval.html @@ -312,7 +312,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/functions_f.html b/kite/doc/html/functions_f.html index 0ccace86..1db4202a 100644 --- a/kite/doc/html/functions_f.html +++ b/kite/doc/html/functions_f.html @@ -57,7 +57,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/functions_func.html b/kite/doc/html/functions_func.html index 9ce4f717..c0bec01a 100644 --- a/kite/doc/html/functions_func.html +++ b/kite/doc/html/functions_func.html @@ -53,7 +53,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/functions_func_0x7e.html b/kite/doc/html/functions_func_0x7e.html index 46fbe24f..5beb6bb0 100644 --- a/kite/doc/html/functions_func_0x7e.html +++ b/kite/doc/html/functions_func_0x7e.html @@ -51,7 +51,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/functions_func_a.html b/kite/doc/html/functions_func_a.html index 4fefb71e..b60df85d 100644 --- a/kite/doc/html/functions_func_a.html +++ b/kite/doc/html/functions_func_a.html @@ -66,7 +66,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/functions_func_b.html b/kite/doc/html/functions_func_b.html index 4cecf404..10640bb5 100644 --- a/kite/doc/html/functions_func_b.html +++ b/kite/doc/html/functions_func_b.html @@ -49,7 +49,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/functions_func_c.html b/kite/doc/html/functions_func_c.html index 50d2d13f..16844e7d 100644 --- a/kite/doc/html/functions_func_c.html +++ b/kite/doc/html/functions_func_c.html @@ -98,7 +98,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/functions_func_d.html b/kite/doc/html/functions_func_d.html index 4ee9b6a5..95a7f1f2 100644 --- a/kite/doc/html/functions_func_d.html +++ b/kite/doc/html/functions_func_d.html @@ -71,7 +71,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/functions_func_e.html b/kite/doc/html/functions_func_e.html index af0ac7cb..801be51b 100644 --- a/kite/doc/html/functions_func_e.html +++ b/kite/doc/html/functions_func_e.html @@ -55,7 +55,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/functions_func_f.html b/kite/doc/html/functions_func_f.html index e95171ba..48489e46 100644 --- a/kite/doc/html/functions_func_f.html +++ b/kite/doc/html/functions_func_f.html @@ -54,7 +54,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/functions_func_g.html b/kite/doc/html/functions_func_g.html index ebdaea7a..3aba1972 100644 --- a/kite/doc/html/functions_func_g.html +++ b/kite/doc/html/functions_func_g.html @@ -454,7 +454,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/functions_func_h.html b/kite/doc/html/functions_func_h.html index 1a25dd8e..42abafd7 100644 --- a/kite/doc/html/functions_func_h.html +++ b/kite/doc/html/functions_func_h.html @@ -54,7 +54,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/functions_func_i.html b/kite/doc/html/functions_func_i.html index 27830b89..b9e68053 100644 --- a/kite/doc/html/functions_func_i.html +++ b/kite/doc/html/functions_func_i.html @@ -171,7 +171,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/functions_func_l.html b/kite/doc/html/functions_func_l.html index fc3f8f7c..657fb3f3 100644 --- a/kite/doc/html/functions_func_l.html +++ b/kite/doc/html/functions_func_l.html @@ -51,7 +51,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/functions_func_m.html b/kite/doc/html/functions_func_m.html index 010e1b0c..4d1377e1 100644 --- a/kite/doc/html/functions_func_m.html +++ b/kite/doc/html/functions_func_m.html @@ -59,7 +59,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/functions_func_n.html b/kite/doc/html/functions_func_n.html index 82f04fea..57d38a85 100644 --- a/kite/doc/html/functions_func_n.html +++ b/kite/doc/html/functions_func_n.html @@ -48,7 +48,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/functions_func_o.html b/kite/doc/html/functions_func_o.html index 28a5e898..8e178ddd 100644 --- a/kite/doc/html/functions_func_o.html +++ b/kite/doc/html/functions_func_o.html @@ -48,7 +48,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/functions_func_p.html b/kite/doc/html/functions_func_p.html index a96b2d31..1b284910 100644 --- a/kite/doc/html/functions_func_p.html +++ b/kite/doc/html/functions_func_p.html @@ -64,7 +64,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/functions_func_r.html b/kite/doc/html/functions_func_r.html index 86682014..61ab6ca5 100644 --- a/kite/doc/html/functions_func_r.html +++ b/kite/doc/html/functions_func_r.html @@ -104,7 +104,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/functions_func_s.html b/kite/doc/html/functions_func_s.html index dc7b2d9b..6155fd99 100644 --- a/kite/doc/html/functions_func_s.html +++ b/kite/doc/html/functions_func_s.html @@ -136,7 +136,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/functions_func_u.html b/kite/doc/html/functions_func_u.html index ee088ca3..9bebc94c 100644 --- a/kite/doc/html/functions_func_u.html +++ b/kite/doc/html/functions_func_u.html @@ -60,7 +60,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/functions_g.html b/kite/doc/html/functions_g.html index cea7c07e..92054ae4 100644 --- a/kite/doc/html/functions_g.html +++ b/kite/doc/html/functions_g.html @@ -454,7 +454,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/functions_h.html b/kite/doc/html/functions_h.html index 52f6d9d8..65efb642 100644 --- a/kite/doc/html/functions_h.html +++ b/kite/doc/html/functions_h.html @@ -54,7 +54,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/functions_i.html b/kite/doc/html/functions_i.html index 60667491..39ffb7e7 100644 --- a/kite/doc/html/functions_i.html +++ b/kite/doc/html/functions_i.html @@ -183,7 +183,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/functions_l.html b/kite/doc/html/functions_l.html index 3a662816..770017af 100644 --- a/kite/doc/html/functions_l.html +++ b/kite/doc/html/functions_l.html @@ -57,7 +57,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/functions_m.html b/kite/doc/html/functions_m.html index 344747b2..4dbf9516 100644 --- a/kite/doc/html/functions_m.html +++ b/kite/doc/html/functions_m.html @@ -75,7 +75,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/functions_n.html b/kite/doc/html/functions_n.html index b00d1ace..88250f3e 100644 --- a/kite/doc/html/functions_n.html +++ b/kite/doc/html/functions_n.html @@ -66,7 +66,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/functions_o.html b/kite/doc/html/functions_o.html index dcbeac2f..db4b1738 100644 --- a/kite/doc/html/functions_o.html +++ b/kite/doc/html/functions_o.html @@ -65,7 +65,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/functions_p.html b/kite/doc/html/functions_p.html index 87d63522..0f487636 100644 --- a/kite/doc/html/functions_p.html +++ b/kite/doc/html/functions_p.html @@ -79,7 +79,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/functions_r.html b/kite/doc/html/functions_r.html index 51a82acd..8a2761af 100644 --- a/kite/doc/html/functions_r.html +++ b/kite/doc/html/functions_r.html @@ -124,7 +124,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/functions_s.html b/kite/doc/html/functions_s.html index cd1d8e87..18f92561 100644 --- a/kite/doc/html/functions_s.html +++ b/kite/doc/html/functions_s.html @@ -170,7 +170,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/functions_t.html b/kite/doc/html/functions_t.html index 75980ad2..737fe072 100644 --- a/kite/doc/html/functions_t.html +++ b/kite/doc/html/functions_t.html @@ -58,7 +58,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/functions_u.html b/kite/doc/html/functions_u.html index 5099bb8d..05f077cc 100644 --- a/kite/doc/html/functions_u.html +++ b/kite/doc/html/functions_u.html @@ -63,7 +63,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/functions_vars.html b/kite/doc/html/functions_vars.html index 1210a397..3fa4609e 100644 --- a/kite/doc/html/functions_vars.html +++ b/kite/doc/html/functions_vars.html @@ -46,7 +46,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/graph_legend.html b/kite/doc/html/graph_legend.html index a0a4e2bb..0a609ac5 100644 --- a/kite/doc/html/graph_legend.html +++ b/kite/doc/html/graph_legend.html @@ -74,7 +74,7 @@ A yellow dashed arrow denotes a relation between a template instance and the tem
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/group__AlgorithmOverview.html b/kite/doc/html/group__AlgorithmOverview.html index 5a47acdd..f199722e 100644 --- a/kite/doc/html/group__AlgorithmOverview.html +++ b/kite/doc/html/group__AlgorithmOverview.html @@ -82,7 +82,7 @@ Compute the Tracks in which the - Generated by doxygen 1.8.14 on Thu Oct 18 2018 + Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page diff --git a/kite/doc/html/group__grpSynthHierarchy.html b/kite/doc/html/group__grpSynthHierarchy.html index 193c68e0..f221697e 100644 --- a/kite/doc/html/group__grpSynthHierarchy.html +++ b/kite/doc/html/group__grpSynthHierarchy.html @@ -108,7 +108,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/hierarchy.html b/kite/doc/html/hierarchy.html index 96c4ae19..09c608b1 100644 --- a/kite/doc/html/hierarchy.html +++ b/kite/doc/html/hierarchy.html @@ -76,7 +76,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/index.html b/kite/doc/html/index.html index bd32b9cc..595a0dfe 100644 --- a/kite/doc/html/index.html +++ b/kite/doc/html/index.html @@ -55,7 +55,7 @@ The internal description which details how - Generated by doxygen 1.8.14 on Thu Oct 18 2018 + Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page diff --git a/kite/doc/html/modules.html b/kite/doc/html/modules.html index 3dba02cd..da40cb0d 100644 --- a/kite/doc/html/modules.html +++ b/kite/doc/html/modules.html @@ -56,7 +56,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/namespaceKite.html b/kite/doc/html/namespaceKite.html index a8adf7de..6b640699 100644 --- a/kite/doc/html/namespaceKite.html +++ b/kite/doc/html/namespaceKite.html @@ -199,7 +199,7 @@ Enumerations
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/namespaceanonymous__namespace_02AutoSegment_8cpp_03.html b/kite/doc/html/namespaceanonymous__namespace_02AutoSegment_8cpp_03.html index 03067623..40118d8e 100644 --- a/kite/doc/html/namespaceanonymous__namespace_02AutoSegment_8cpp_03.html +++ b/kite/doc/html/namespaceanonymous__namespace_02AutoSegment_8cpp_03.html @@ -45,7 +45,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/namespaceanonymous__namespace_02ChipTools_8cpp_03.html b/kite/doc/html/namespaceanonymous__namespace_02ChipTools_8cpp_03.html index bf53d72e..d27bab09 100644 --- a/kite/doc/html/namespaceanonymous__namespace_02ChipTools_8cpp_03.html +++ b/kite/doc/html/namespaceanonymous__namespace_02ChipTools_8cpp_03.html @@ -45,7 +45,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/namespaceanonymous__namespace_02GCell_8cpp_03.html b/kite/doc/html/namespaceanonymous__namespace_02GCell_8cpp_03.html index 05f70b29..37a3d22d 100644 --- a/kite/doc/html/namespaceanonymous__namespace_02GCell_8cpp_03.html +++ b/kite/doc/html/namespaceanonymous__namespace_02GCell_8cpp_03.html @@ -45,7 +45,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/namespaceanonymous__namespace_02KatabaticEngine_8cpp_03.html b/kite/doc/html/namespaceanonymous__namespace_02KatabaticEngine_8cpp_03.html index 09391802..f525f933 100644 --- a/kite/doc/html/namespaceanonymous__namespace_02KatabaticEngine_8cpp_03.html +++ b/kite/doc/html/namespaceanonymous__namespace_02KatabaticEngine_8cpp_03.html @@ -45,7 +45,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/namespaceanonymous__namespace_02LoadGrByNet_8cpp_03.html b/kite/doc/html/namespaceanonymous__namespace_02LoadGrByNet_8cpp_03.html index f3cc61b0..6e828a89 100644 --- a/kite/doc/html/namespaceanonymous__namespace_02LoadGrByNet_8cpp_03.html +++ b/kite/doc/html/namespaceanonymous__namespace_02LoadGrByNet_8cpp_03.html @@ -53,7 +53,7 @@ Classes
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/namespaceanonymous__namespace_02Manipulator_8cpp_03.html b/kite/doc/html/namespaceanonymous__namespace_02Manipulator_8cpp_03.html index 5dfdfa8f..e1dea181 100644 --- a/kite/doc/html/namespaceanonymous__namespace_02Manipulator_8cpp_03.html +++ b/kite/doc/html/namespaceanonymous__namespace_02Manipulator_8cpp_03.html @@ -45,7 +45,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/namespaceanonymous__namespace_02NegociateWindow_8cpp_03.html b/kite/doc/html/namespaceanonymous__namespace_02NegociateWindow_8cpp_03.html index 36eefeb8..5a3584e1 100644 --- a/kite/doc/html/namespaceanonymous__namespace_02NegociateWindow_8cpp_03.html +++ b/kite/doc/html/namespaceanonymous__namespace_02NegociateWindow_8cpp_03.html @@ -45,7 +45,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/namespaceanonymous__namespace_02RoutingPlane_8cpp_03.html b/kite/doc/html/namespaceanonymous__namespace_02RoutingPlane_8cpp_03.html index 6c4e83eb..4d575e77 100644 --- a/kite/doc/html/namespaceanonymous__namespace_02RoutingPlane_8cpp_03.html +++ b/kite/doc/html/namespaceanonymous__namespace_02RoutingPlane_8cpp_03.html @@ -45,7 +45,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/namespaceanonymous__namespace_02SegmentFsm_8cpp_03.html b/kite/doc/html/namespaceanonymous__namespace_02SegmentFsm_8cpp_03.html index ca8b49dd..d863136f 100644 --- a/kite/doc/html/namespaceanonymous__namespace_02SegmentFsm_8cpp_03.html +++ b/kite/doc/html/namespaceanonymous__namespace_02SegmentFsm_8cpp_03.html @@ -45,7 +45,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/namespaceanonymous__namespace_02Session_8cpp_03.html b/kite/doc/html/namespaceanonymous__namespace_02Session_8cpp_03.html index 149f7930..6e391024 100644 --- a/kite/doc/html/namespaceanonymous__namespace_02Session_8cpp_03.html +++ b/kite/doc/html/namespaceanonymous__namespace_02Session_8cpp_03.html @@ -45,7 +45,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/namespaceanonymous__namespace_02TrackElement_8cpp_03.html b/kite/doc/html/namespaceanonymous__namespace_02TrackElement_8cpp_03.html index 80654391..4f8aee11 100644 --- a/kite/doc/html/namespaceanonymous__namespace_02TrackElement_8cpp_03.html +++ b/kite/doc/html/namespaceanonymous__namespace_02TrackElement_8cpp_03.html @@ -45,7 +45,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/namespaceanonymous__namespace_02Track_8cpp_03.html b/kite/doc/html/namespaceanonymous__namespace_02Track_8cpp_03.html index f431d011..bcda96ff 100644 --- a/kite/doc/html/namespaceanonymous__namespace_02Track_8cpp_03.html +++ b/kite/doc/html/namespaceanonymous__namespace_02Track_8cpp_03.html @@ -45,7 +45,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/namespacemembers.html b/kite/doc/html/namespacemembers.html index 5e0138a4..3307e439 100644 --- a/kite/doc/html/namespacemembers.html +++ b/kite/doc/html/namespacemembers.html @@ -76,7 +76,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/namespacemembers_enum.html b/kite/doc/html/namespacemembers_enum.html index e1688825..dab8e482 100644 --- a/kite/doc/html/namespacemembers_enum.html +++ b/kite/doc/html/namespacemembers_enum.html @@ -46,7 +46,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/namespacemembers_eval.html b/kite/doc/html/namespacemembers_eval.html index 27bb55dd..8b36156a 100644 --- a/kite/doc/html/namespacemembers_eval.html +++ b/kite/doc/html/namespacemembers_eval.html @@ -70,7 +70,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/namespacemembers_type.html b/kite/doc/html/namespacemembers_type.html index 87854d84..87316e7f 100644 --- a/kite/doc/html/namespacemembers_type.html +++ b/kite/doc/html/namespacemembers_type.html @@ -46,7 +46,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/namespaces.html b/kite/doc/html/namespaces.html index adaaff8b..f9084d13 100644 --- a/kite/doc/html/namespaces.html +++ b/kite/doc/html/namespaces.html @@ -62,7 +62,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/pageNotes.html b/kite/doc/html/pageNotes.html index 3d4f83ec..5a609869 100644 --- a/kite/doc/html/pageNotes.html +++ b/kite/doc/html/pageNotes.html @@ -150,7 +150,7 @@ Evaluation with Cadence NanoRoute
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/html/pages.html b/kite/doc/html/pages.html index 14ba7aec..c69b4308 100644 --- a/kite/doc/html/pages.html +++ b/kite/doc/html/pages.html @@ -50,7 +50,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/kite/doc/latex/refman.tex b/kite/doc/latex/refman.tex index 3bf4fc2e..fdf8da70 100644 --- a/kite/doc/latex/refman.tex +++ b/kite/doc/latex/refman.tex @@ -34,7 +34,7 @@ \vspace*{1cm} {\large Generated by Doxygen 1.8.14}\\ \vspace*{0.5cm} - {\small Thu Oct 18 2018 16:33:51}\\ + {\small Sun May 26 2019 17:26:56}\\ \end{center} \end{titlepage} diff --git a/oroshi/doc/html/annotated.html b/oroshi/doc/html/annotated.html index e91ff7f6..058b21b4 100644 --- a/oroshi/doc/html/annotated.html +++ b/oroshi/doc/html/annotated.html @@ -52,7 +52,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/oroshi/doc/html/classes.html b/oroshi/doc/html/classes.html index bf860df4..5879aacc 100644 --- a/oroshi/doc/html/classes.html +++ b/oroshi/doc/html/classes.html @@ -54,7 +54,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/oroshi/doc/html/classpython_1_1Stack_1_1Stack-members.html b/oroshi/doc/html/classpython_1_1Stack_1_1Stack-members.html index 873bcd0e..36978c15 100644 --- a/oroshi/doc/html/classpython_1_1Stack_1_1Stack-members.html +++ b/oroshi/doc/html/classpython_1_1Stack_1_1Stack-members.html @@ -56,7 +56,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/oroshi/doc/html/classpython_1_1Stack_1_1Stack.html b/oroshi/doc/html/classpython_1_1Stack_1_1Stack.html index fffe93ce..30c575fe 100644 --- a/oroshi/doc/html/classpython_1_1Stack_1_1Stack.html +++ b/oroshi/doc/html/classpython_1_1Stack_1_1Stack.html @@ -314,7 +314,7 @@ Stack Implementation Details
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/oroshi/doc/html/dir_7837fde3ab9c1fb2fc5be7b717af8d79.html b/oroshi/doc/html/dir_7837fde3ab9c1fb2fc5be7b717af8d79.html index 6cb714fb..7b1f833b 100644 --- a/oroshi/doc/html/dir_7837fde3ab9c1fb2fc5be7b717af8d79.html +++ b/oroshi/doc/html/dir_7837fde3ab9c1fb2fc5be7b717af8d79.html @@ -49,7 +49,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/oroshi/doc/html/functions.html b/oroshi/doc/html/functions.html index d3149a9d..1a084ae0 100644 --- a/oroshi/doc/html/functions.html +++ b/oroshi/doc/html/functions.html @@ -55,7 +55,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/oroshi/doc/html/functions_func.html b/oroshi/doc/html/functions_func.html index 02c5c618..32a95380 100644 --- a/oroshi/doc/html/functions_func.html +++ b/oroshi/doc/html/functions_func.html @@ -55,7 +55,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/oroshi/doc/html/graph_legend.html b/oroshi/doc/html/graph_legend.html index 184a0871..d520fb9d 100644 --- a/oroshi/doc/html/graph_legend.html +++ b/oroshi/doc/html/graph_legend.html @@ -74,7 +74,7 @@ A yellow dashed arrow denotes a relation between a template instance and the tem
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/oroshi/doc/html/index.html b/oroshi/doc/html/index.html index 83dd5705..932476b3 100644 --- a/oroshi/doc/html/index.html +++ b/oroshi/doc/html/index.html @@ -45,7 +45,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/oroshi/doc/latex/refman.tex b/oroshi/doc/latex/refman.tex index 3fc00512..26c5a827 100644 --- a/oroshi/doc/latex/refman.tex +++ b/oroshi/doc/latex/refman.tex @@ -34,7 +34,7 @@ \vspace*{1cm} {\large Generated by Doxygen 1.8.14}\\ \vspace*{0.5cm} - {\small Thu Oct 18 2018 16:33:53}\\ + {\small Sun May 26 2019 17:26:58}\\ \end{center} \end{titlepage} diff --git a/unicorn/doc/unicorn/html/UnicornGui_8h_source.html b/unicorn/doc/unicorn/html/UnicornGui_8h_source.html index 0ab72655..faac3f18 100644 --- a/unicorn/doc/unicorn/html/UnicornGui_8h_source.html +++ b/unicorn/doc/unicorn/html/UnicornGui_8h_source.html @@ -61,7 +61,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/unicorn/doc/unicorn/html/annotated.html b/unicorn/doc/unicorn/html/annotated.html index 9ec275c8..ff431be0 100644 --- a/unicorn/doc/unicorn/html/annotated.html +++ b/unicorn/doc/unicorn/html/annotated.html @@ -51,7 +51,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/unicorn/doc/unicorn/html/classUnicorn_1_1UnicornGui-members.html b/unicorn/doc/unicorn/html/classUnicorn_1_1UnicornGui-members.html index 82366a1d..41bf1a45 100644 --- a/unicorn/doc/unicorn/html/classUnicorn_1_1UnicornGui-members.html +++ b/unicorn/doc/unicorn/html/classUnicorn_1_1UnicornGui-members.html @@ -73,7 +73,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/unicorn/doc/unicorn/html/classUnicorn_1_1UnicornGui.html b/unicorn/doc/unicorn/html/classUnicorn_1_1UnicornGui.html index 1e0df89c..34c22e30 100644 --- a/unicorn/doc/unicorn/html/classUnicorn_1_1UnicornGui.html +++ b/unicorn/doc/unicorn/html/classUnicorn_1_1UnicornGui.html @@ -202,7 +202,7 @@ Static Public Member Functions
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/unicorn/doc/unicorn/html/classes.html b/unicorn/doc/unicorn/html/classes.html index b8db67e9..8f439e0b 100644 --- a/unicorn/doc/unicorn/html/classes.html +++ b/unicorn/doc/unicorn/html/classes.html @@ -54,7 +54,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/unicorn/doc/unicorn/html/dir_4aa09a10ca668c28f3c8e57fb374580b.html b/unicorn/doc/unicorn/html/dir_4aa09a10ca668c28f3c8e57fb374580b.html index 92e64b04..69ab008e 100644 --- a/unicorn/doc/unicorn/html/dir_4aa09a10ca668c28f3c8e57fb374580b.html +++ b/unicorn/doc/unicorn/html/dir_4aa09a10ca668c28f3c8e57fb374580b.html @@ -49,7 +49,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/unicorn/doc/unicorn/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/unicorn/doc/unicorn/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html index 1b88bb72..a69ded68 100644 --- a/unicorn/doc/unicorn/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html +++ b/unicorn/doc/unicorn/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html @@ -53,7 +53,7 @@ Directories
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/unicorn/doc/unicorn/html/files.html b/unicorn/doc/unicorn/html/files.html index a6cd225f..be8e2567 100644 --- a/unicorn/doc/unicorn/html/files.html +++ b/unicorn/doc/unicorn/html/files.html @@ -50,7 +50,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/unicorn/doc/unicorn/html/functions.html b/unicorn/doc/unicorn/html/functions.html index bc69b0c2..0f762968 100644 --- a/unicorn/doc/unicorn/html/functions.html +++ b/unicorn/doc/unicorn/html/functions.html @@ -58,7 +58,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/unicorn/doc/unicorn/html/functions_func.html b/unicorn/doc/unicorn/html/functions_func.html index faa69d49..d0044ca8 100644 --- a/unicorn/doc/unicorn/html/functions_func.html +++ b/unicorn/doc/unicorn/html/functions_func.html @@ -58,7 +58,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/unicorn/doc/unicorn/html/hierarchy.html b/unicorn/doc/unicorn/html/hierarchy.html index a83a882b..c823e979 100644 --- a/unicorn/doc/unicorn/html/hierarchy.html +++ b/unicorn/doc/unicorn/html/hierarchy.html @@ -51,7 +51,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/unicorn/doc/unicorn/html/index.html b/unicorn/doc/unicorn/html/index.html index 9872f3da..250ce5a7 100644 --- a/unicorn/doc/unicorn/html/index.html +++ b/unicorn/doc/unicorn/html/index.html @@ -45,7 +45,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/unicorn/doc/unicorn/html/namespaceUnicorn.html b/unicorn/doc/unicorn/html/namespaceUnicorn.html index 63ecad51..e14b0eef 100644 --- a/unicorn/doc/unicorn/html/namespaceUnicorn.html +++ b/unicorn/doc/unicorn/html/namespaceUnicorn.html @@ -59,7 +59,7 @@ Classes
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/unicorn/doc/unicorn/html/namespaces.html b/unicorn/doc/unicorn/html/namespaces.html index 6150345d..502f345c 100644 --- a/unicorn/doc/unicorn/html/namespaces.html +++ b/unicorn/doc/unicorn/html/namespaces.html @@ -50,7 +50,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/unicorn/doc/unicorn/html/pages.html b/unicorn/doc/unicorn/html/pages.html index fc9cd974..4957c952 100644 --- a/unicorn/doc/unicorn/html/pages.html +++ b/unicorn/doc/unicorn/html/pages.html @@ -49,7 +49,7 @@ $(function() {
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/unicorn/doc/unicorn/latex/refman.tex b/unicorn/doc/unicorn/latex/refman.tex index 5491e65d..0a591f74 100644 --- a/unicorn/doc/unicorn/latex/refman.tex +++ b/unicorn/doc/unicorn/latex/refman.tex @@ -34,7 +34,7 @@ \vspace*{1cm} {\large Generated by Doxygen 1.8.14}\\ \vspace*{0.5cm} - {\small Thu Oct 18 2018 16:33:54}\\ + {\small Sun May 26 2019 17:26:59}\\ \end{center} \end{titlepage} diff --git a/unicorn/src/cgt.py b/unicorn/src/cgt.py index fdf01336..faa0faaf 100755 --- a/unicorn/src/cgt.py +++ b/unicorn/src/cgt.py @@ -151,10 +151,10 @@ if __name__ == '__main__': if options.logMode: Cfg.getParamBool ('misc.logMode' ).setBool(True) if options.showConf: Cfg.getParamBool ('misc.showConf' ).setBool(True) if options.margin: Cfg.getParamPercentage('etesian.spaceMargin').setPercentage(options.margin) - if options.hTracksLocal: Cfg.getParamInt ('kite.hTracksReservedLocal').setInt(options.hTracksLocal) - if options.vTracksLocal: Cfg.getParamInt ('kite.vTracksReservedLocal').setInt(options.vTracksLocal) - if options.eventsLimit: Cfg.getParamInt ('kite.eventsLimit' ).setInt(options.eventsLimit) - if options.topRoutingLayer: Cfg.getParamString ('katabatic.topRoutingLayer').setString(options.topRoutingLayer) + if options.hTracksLocal: Cfg.getParamInt ('katana.hTracksReservedLocal').setInt(options.hTracksLocal) + if options.vTracksLocal: Cfg.getParamInt ('katana.vTracksReservedLocal').setInt(options.vTracksLocal) + if options.eventsLimit: Cfg.getParamInt ('katana.eventsLimit' ).setInt(options.eventsLimit) + if options.topRoutingLayer: Cfg.getParamString ('anabatic.topRoutingLayer' ).setString(options.topRoutingLayer) if options.useKatana: useKatana = True loadGlobal = options.loadGlobal diff --git a/vlsisapd/doc/html/agds.html b/vlsisapd/doc/html/agds.html index 542e3ee4..6c45919f 100644 --- a/vlsisapd/doc/html/agds.html +++ b/vlsisapd/doc/html/agds.html @@ -77,7 +77,7 @@ Python
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/vlsisapd/doc/html/annotated.html b/vlsisapd/doc/html/annotated.html index e8c60413..7eb5a9a8 100644 --- a/vlsisapd/doc/html/annotated.html +++ b/vlsisapd/doc/html/annotated.html @@ -30,7 +30,7 @@
      Here are the data structures with brief descriptions:
      -
      [detail level 123]
      +
      [detail level 12]
      @@ -44,58 +44,45 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
       NAGDS
       CElement
       CLibrary
       CDTRException
       CRule
       CTechno
       NOpenChams
       CBloc
       CCircuit
       CDDP
       CDesignerCstrOC
       CDevice
       CDSlicingNode
       CEquation
       CGroup
       CHighLevelCstr
       CHSlicingNode
       CHVSlicingNode
       CInstance
       CInstancePoint
       CIntermediatePoint
       CLayout
       Cmap_item
       CNet
       CConnection
       CNetlist
       CNode
       CNRCCstr
       COpenChamsException
       COperator
       CConstraint
       CParameters
       CPort
       CPortPoint
       CRSlicingNode
       CSchematic
       CInfos
       CSimulModel
       CSizing
       CSlicingNode
       CTransistor
       CVSlicingNode
       CWire
       CWirePoint
       NSPICE
       CCapacitor
       CCircuit
       CCurrent
       CInstance
       Cmap_item
       CMosfet
       CResistor
       CSource
       CSpiceException
       CSubckt
       CValue
       CVoltage
       CName
       NSPICE
       CCapacitor
       CCircuit
       CCurrent
       CInstance
       Cmap_item
       CMosfet
       CResistor
       CSource
       CSpiceException
       CSubckt
       CValue
       CVoltage
       CBloc
       CCircuit
       CDevice
       CGroup
       CInstance
       CInstancePoint
       CIntermediatePoint
       CLayout
       CName
       CNet
       CConnection
       CNetlist
       CNode
       COpenChamsException
       COperator
       CConstraint
       CParameters
       CPort
       CPortPoint
       CSchematic
       CInfos
       CSimulModel
       CSizing
       CTransistor
       CWire
       CWirePoint
      @@ -103,7 +90,7 @@
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/vlsisapd/doc/html/cif.html b/vlsisapd/doc/html/cif.html index db0c1315..1873a406 100644 --- a/vlsisapd/doc/html/cif.html +++ b/vlsisapd/doc/html/cif.html @@ -66,7 +66,7 @@ Python
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/vlsisapd/doc/html/class_a_g_d_s_1_1_element.html b/vlsisapd/doc/html/class_a_g_d_s_1_1_element.html index 5915cdb7..c0c3793d 100644 --- a/vlsisapd/doc/html/class_a_g_d_s_1_1_element.html +++ b/vlsisapd/doc/html/class_a_g_d_s_1_1_element.html @@ -49,7 +49,7 @@ Inheritance diagram for Element:
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/vlsisapd/doc/html/class_a_g_d_s_1_1_library.html b/vlsisapd/doc/html/class_a_g_d_s_1_1_library.html index 27054e63..79973c49 100644 --- a/vlsisapd/doc/html/class_a_g_d_s_1_1_library.html +++ b/vlsisapd/doc/html/class_a_g_d_s_1_1_library.html @@ -210,7 +210,7 @@ Public Member Functions
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/vlsisapd/doc/html/class_a_g_d_s_1_1_rectangle.html b/vlsisapd/doc/html/class_a_g_d_s_1_1_rectangle.html index 69dc229a..94204a85 100644 --- a/vlsisapd/doc/html/class_a_g_d_s_1_1_rectangle.html +++ b/vlsisapd/doc/html/class_a_g_d_s_1_1_rectangle.html @@ -117,7 +117,7 @@ Public Member Functions
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/vlsisapd/doc/html/class_a_g_d_s_1_1_structure.html b/vlsisapd/doc/html/class_a_g_d_s_1_1_structure.html index f1baec9a..a03f8571 100644 --- a/vlsisapd/doc/html/class_a_g_d_s_1_1_structure.html +++ b/vlsisapd/doc/html/class_a_g_d_s_1_1_structure.html @@ -110,7 +110,7 @@ std::string  - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/vlsisapd/doc/html/class_bloc.html b/vlsisapd/doc/html/class_bloc.html new file mode 100644 index 00000000..0b5d5387 --- /dev/null +++ b/vlsisapd/doc/html/class_bloc.html @@ -0,0 +1,50 @@ + + + + + VLSI SAPD Documentation + + +

      VLSI SAPD Documentation

      +
      + + + + + + + + + + +
      PresentationAGDSCIFDTROPENCHAMSSPICELinks & Contact
      +
      +
      +
      + + + +
      +
      +
      Bloc Class Reference
      +
      +
      +

      Detailed Description

      +

      This class describes a bloc of the placement tree.

      +
      +
      +
      + + + + + +
      Generated by doxygen 1.8.14 on Sun May 26 2019Return to top of page
      + + + + + +
      VLSI SAPD DocumentationCopyright © 2010 - 2011 UPMC All rights reserved
      + + diff --git a/vlsisapd/doc/html/class_c_i_f_1_1_circuit.html b/vlsisapd/doc/html/class_c_i_f_1_1_circuit.html index 8e8b8c04..8e580f3e 100644 --- a/vlsisapd/doc/html/class_c_i_f_1_1_circuit.html +++ b/vlsisapd/doc/html/class_c_i_f_1_1_circuit.html @@ -154,7 +154,7 @@ Public Member Functions
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/vlsisapd/doc/html/class_c_i_f_1_1_polygon.html b/vlsisapd/doc/html/class_c_i_f_1_1_polygon.html index 98ac9268..dcbbea06 100644 --- a/vlsisapd/doc/html/class_c_i_f_1_1_polygon.html +++ b/vlsisapd/doc/html/class_c_i_f_1_1_polygon.html @@ -117,7 +117,7 @@ Public Member Functions
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/vlsisapd/doc/html/class_circuit.html b/vlsisapd/doc/html/class_circuit.html new file mode 100644 index 00000000..c6bcd217 --- /dev/null +++ b/vlsisapd/doc/html/class_circuit.html @@ -0,0 +1,50 @@ + + + + + VLSI SAPD Documentation + + +

      VLSI SAPD Documentation

      +
      + + + + + + + + + + +
      PresentationAGDSCIFDTROPENCHAMSSPICELinks & Contact
      +
      +
      +
      + + + +
      +
      +
      Circuit Class Reference
      +
      +
      +

      Detailed Description

      +

      This class is the root class whihch means that having this object in hand allows to get/set any information contained in the OpenChams file parsed/drived.

      +
      +
      +
      + + + + + +
      Generated by doxygen 1.8.14 on Sun May 26 2019Return to top of page
      + + + + + +
      VLSI SAPD DocumentationCopyright © 2010 - 2011 UPMC All rights reserved
      + + diff --git a/vlsisapd/doc/html/class_d_t_r_1_1_a_rule.html b/vlsisapd/doc/html/class_d_t_r_1_1_a_rule.html index 987494bd..2245e43e 100644 --- a/vlsisapd/doc/html/class_d_t_r_1_1_a_rule.html +++ b/vlsisapd/doc/html/class_d_t_r_1_1_a_rule.html @@ -89,7 +89,7 @@ const std::string &  - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/vlsisapd/doc/html/class_d_t_r_1_1_d_t_r_exception.html b/vlsisapd/doc/html/class_d_t_r_1_1_d_t_r_exception.html index d4665b93..51922749 100644 --- a/vlsisapd/doc/html/class_d_t_r_1_1_d_t_r_exception.html +++ b/vlsisapd/doc/html/class_d_t_r_1_1_d_t_r_exception.html @@ -40,7 +40,7 @@
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/vlsisapd/doc/html/class_d_t_r_1_1_rule.html b/vlsisapd/doc/html/class_d_t_r_1_1_rule.html index 02547a32..1673239d 100644 --- a/vlsisapd/doc/html/class_d_t_r_1_1_rule.html +++ b/vlsisapd/doc/html/class_d_t_r_1_1_rule.html @@ -227,7 +227,7 @@ const std::string & 
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/vlsisapd/doc/html/class_d_t_r_1_1_techno.html b/vlsisapd/doc/html/class_d_t_r_1_1_techno.html index 9d929e35..4226ddb9 100644 --- a/vlsisapd/doc/html/class_d_t_r_1_1_techno.html +++ b/vlsisapd/doc/html/class_d_t_r_1_1_techno.html @@ -474,7 +474,7 @@ Static Public Member Functions
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/vlsisapd/doc/html/class_device.html b/vlsisapd/doc/html/class_device.html new file mode 100644 index 00000000..608e6917 --- /dev/null +++ b/vlsisapd/doc/html/class_device.html @@ -0,0 +1,52 @@ + + + + + VLSI SAPD Documentation + + +

      VLSI SAPD Documentation

      +
      + + + + + + + + + + +
      PresentationAGDSCIFDTROPENCHAMSSPICELinks & Contact
      +
      +
      +
      + + + +
      +
      +
      Device Class Reference
      +
      +
      +

      Detailed Description

      +

      This class describes a Device.

      +

      A device is a leaf instance which means its model is not defined in a external file but is described inside the device. As an instance, the Device inherits all Instance methods and adds specific properties: mos type, bulk connection and list of internal transistors.

      +
      Note
      Althought today Device object only consider TransistorFamily devices, it will have to consider other devices, such as Capacitor when CHAMS project will.
      +
      +
      +
      + + + + + +
      Generated by doxygen 1.8.14 on Sun May 26 2019Return to top of page
      + + + + + +
      VLSI SAPD DocumentationCopyright © 2010 - 2011 UPMC All rights reserved
      + + diff --git a/vlsisapd/doc/html/class_group.html b/vlsisapd/doc/html/class_group.html new file mode 100644 index 00000000..03d9fd4a --- /dev/null +++ b/vlsisapd/doc/html/class_group.html @@ -0,0 +1,50 @@ + + + + + VLSI SAPD Documentation + + +

      VLSI SAPD Documentation

      +
      + + + + + + + + + + +
      PresentationAGDSCIFDTROPENCHAMSSPICELinks & Contact
      +
      +
      +
      + + + +
      +
      +
      Group Class Reference
      +
      +
      +

      Detailed Description

      +

      This class describes a group of the placement tree.

      +
      +
      +
      + + + + + +
      Generated by doxygen 1.8.14 on Sun May 26 2019Return to top of page
      + + + + + +
      VLSI SAPD DocumentationCopyright © 2010 - 2011 UPMC All rights reserved
      + + diff --git a/vlsisapd/doc/html/class_instance.html b/vlsisapd/doc/html/class_instance.html new file mode 100644 index 00000000..d01da9cf --- /dev/null +++ b/vlsisapd/doc/html/class_instance.html @@ -0,0 +1,51 @@ + + + + + VLSI SAPD Documentation + + +

      VLSI SAPD Documentation

      +
      + + + + + + + + + + +
      PresentationAGDSCIFDTROPENCHAMSSPICELinks & Contact
      +
      +
      +
      + + + +
      +
      +
      Instance Class Reference
      +
      +
      +

      Detailed Description

      +

      This class describes an instance.

      +

      Basicaly an instance is a subcircuit of the current (top) circuit.

      +
      +
      +
      + + + + + +
      Generated by doxygen 1.8.14 on Sun May 26 2019Return to top of page
      + + + + + +
      VLSI SAPD DocumentationCopyright © 2010 - 2011 UPMC All rights reserved
      + + diff --git a/vlsisapd/doc/html/class_instance_point.html b/vlsisapd/doc/html/class_instance_point.html new file mode 100644 index 00000000..497525c6 --- /dev/null +++ b/vlsisapd/doc/html/class_instance_point.html @@ -0,0 +1,50 @@ + + + + + VLSI SAPD Documentation + + +

      VLSI SAPD Documentation

      +
      + + + + + + + + + + +
      PresentationAGDSCIFDTROPENCHAMSSPICELinks & Contact
      +
      +
      +
      + + + +
      +
      +
      InstancePoint Class Reference
      +
      +
      +

      Detailed Description

      +

      This class describes a wire point associated to an instance's connector.

      +
      +
      +
      + + + + + +
      Generated by doxygen 1.8.14 on Sun May 26 2019Return to top of page
      + + + + + +
      VLSI SAPD DocumentationCopyright © 2010 - 2011 UPMC All rights reserved
      + + diff --git a/vlsisapd/doc/html/class_intermediate_point.html b/vlsisapd/doc/html/class_intermediate_point.html new file mode 100644 index 00000000..b7a5255b --- /dev/null +++ b/vlsisapd/doc/html/class_intermediate_point.html @@ -0,0 +1,50 @@ + + + + + VLSI SAPD Documentation + + +

      VLSI SAPD Documentation

      +
      + + + + + + + + + + +
      PresentationAGDSCIFDTROPENCHAMSSPICELinks & Contact
      +
      +
      +
      + + + +
      +
      +
      IntermediatePoint Class Reference
      +
      +
      +

      Detailed Description

      +

      This class describes a wire point defined by its (x,y) coordinates.

      +
      +
      +
      + + + + + +
      Generated by doxygen 1.8.14 on Sun May 26 2019Return to top of page
      + + + + + +
      VLSI SAPD DocumentationCopyright © 2010 - 2011 UPMC All rights reserved
      + + diff --git a/vlsisapd/doc/html/class_layout.html b/vlsisapd/doc/html/class_layout.html new file mode 100644 index 00000000..aa4f67de --- /dev/null +++ b/vlsisapd/doc/html/class_layout.html @@ -0,0 +1,52 @@ + + + + + VLSI SAPD Documentation + + +

      VLSI SAPD Documentation

      +
      + + + + + + + + + + +
      PresentationAGDSCIFDTROPENCHAMSSPICELinks & Contact
      +
      +
      +
      + + + +
      +
      +
      Layout Class Reference
      +
      +
      +

      Detailed Description

      +

      This class describes layout informations for an Instance.

      +

      The Layout object is used to store all informations relative to physical layout of the instance (such as the layout style).

      +
      Note
      The Layout object is optionnal in Circuit.
      +
      +
      +
      + + + + + +
      Generated by doxygen 1.8.14 on Sun May 26 2019Return to top of page
      + + + + + +
      VLSI SAPD DocumentationCopyright © 2010 - 2011 UPMC All rights reserved
      + + diff --git a/vlsisapd/doc/html/class_name.html b/vlsisapd/doc/html/class_name.html index 257784fb..abe2c16e 100644 --- a/vlsisapd/doc/html/class_name.html +++ b/vlsisapd/doc/html/class_name.html @@ -36,7 +36,7 @@
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/vlsisapd/doc/html/class_net.html b/vlsisapd/doc/html/class_net.html new file mode 100644 index 00000000..8d47cccb --- /dev/null +++ b/vlsisapd/doc/html/class_net.html @@ -0,0 +1,58 @@ + + + + + VLSI SAPD Documentation + + +

      VLSI SAPD Documentation

      +
      + + + + + + + + + + +
      PresentationAGDSCIFDTROPENCHAMSSPICELinks & Contact
      +
      +
      +
      + + + +
      + +
      +
      Net Class Reference
      +
      +
      + + + + +

      +Data Structures

      class  Connection
       
      +

      Detailed Description

      +

      This class describes a Net.

      +
      +
      +
      + + + + + +
      Generated by doxygen 1.8.14 on Sun May 26 2019Return to top of page
      + + + + + +
      VLSI SAPD DocumentationCopyright © 2010 - 2011 UPMC All rights reserved
      + + diff --git a/vlsisapd/doc/html/class_net_1_1_connection.html b/vlsisapd/doc/html/class_net_1_1_connection.html new file mode 100644 index 00000000..f9655657 --- /dev/null +++ b/vlsisapd/doc/html/class_net_1_1_connection.html @@ -0,0 +1,54 @@ + + + + + VLSI SAPD Documentation + + +

      VLSI SAPD Documentation

      +
      + + + + + + + + + + +
      PresentationAGDSCIFDTROPENCHAMSSPICELinks & Contact
      +
      +
      +
      + + + + +
      +
      +
      Net::Connection Class Reference
      +
      +
      +

      Detailed Description

      +

      This class describe a Connection in a Net. A connection is a couple (instanceName, connectorName) used to represent all the connectors linked to a net.

      +
      +
      +
      + + + + + +
      Generated by doxygen 1.8.14 on Sun May 26 2019Return to top of page
      + + + + + +
      VLSI SAPD DocumentationCopyright © 2010 - 2011 UPMC All rights reserved
      + + diff --git a/vlsisapd/doc/html/class_netlist.html b/vlsisapd/doc/html/class_netlist.html new file mode 100644 index 00000000..6751ce2f --- /dev/null +++ b/vlsisapd/doc/html/class_netlist.html @@ -0,0 +1,52 @@ + + + + + VLSI SAPD Documentation + + +

      VLSI SAPD Documentation

      +
      + + + + + + + + + + +
      PresentationAGDSCIFDTROPENCHAMSSPICELinks & Contact
      +
      +
      +
      + + + +
      +
      +
      Netlist Class Reference
      +
      +
      +

      Detailed Description

      +

      This class describes a netlist.

      +

      A netlist contains the list of all circuit's instances and nets.

      +
      Note
      A Circuit must have one and only netlist. If no netlist is defined the Circuit cannot be driven to file.
      +
      +
      +
      + + + + + +
      Generated by doxygen 1.8.14 on Sun May 26 2019Return to top of page
      + + + + + +
      VLSI SAPD DocumentationCopyright © 2010 - 2011 UPMC All rights reserved
      + + diff --git a/vlsisapd/doc/html/class_node.html b/vlsisapd/doc/html/class_node.html new file mode 100644 index 00000000..ff117b5c --- /dev/null +++ b/vlsisapd/doc/html/class_node.html @@ -0,0 +1,51 @@ + + + + + VLSI SAPD Documentation + + +

      VLSI SAPD Documentation

      +
      + + + + + + + + + + +
      PresentationAGDSCIFDTROPENCHAMSSPICELinks & Contact
      +
      +
      +
      + + + +
      +
      +
      Node Class Reference
      +
      +
      +

      Detailed Description

      +

      This class describes a node of the placement tree.

      +

      This is an abstract class used to easily managed blocs and groups of the placement tree.

      +
      +
      +
      + + + + + +
      Generated by doxygen 1.8.14 on Sun May 26 2019Return to top of page
      + + + + + +
      VLSI SAPD DocumentationCopyright © 2010 - 2011 UPMC All rights reserved
      + + diff --git a/vlsisapd/doc/html/class_open_chams_exception.html b/vlsisapd/doc/html/class_open_chams_exception.html new file mode 100644 index 00000000..e7b16353 --- /dev/null +++ b/vlsisapd/doc/html/class_open_chams_exception.html @@ -0,0 +1,50 @@ + + + + + VLSI SAPD Documentation + + +

      VLSI SAPD Documentation

      +
      + + + + + + + + + + +
      PresentationAGDSCIFDTROPENCHAMSSPICELinks & Contact
      +
      +
      +
      + + + +
      +
      +
      OpenChamsException Class Reference
      +
      +
      +

      Detailed Description

      +

      This class describes the exceptions throwed by the OpenChams library in case of errors.

      +
      +
      +
      + + + + + +
      Generated by doxygen 1.8.14 on Sun May 26 2019Return to top of page
      + + + + + +
      VLSI SAPD DocumentationCopyright © 2010 - 2011 UPMC All rights reserved
      + + diff --git a/vlsisapd/doc/html/class_operator.html b/vlsisapd/doc/html/class_operator.html new file mode 100644 index 00000000..9e70b81c --- /dev/null +++ b/vlsisapd/doc/html/class_operator.html @@ -0,0 +1,58 @@ + + + + + VLSI SAPD Documentation + + +

      VLSI SAPD Documentation

      +
      + + + + + + + + + + +
      PresentationAGDSCIFDTROPENCHAMSSPICELinks & Contact
      +
      +
      +
      + + + +
      + +
      +
      Operator Class Reference
      +
      +
      + + + + +

      +Data Structures

      class  Constraint
       
      +

      Detailed Description

      +

      This class describes an operator of a sizing procedure.

      +
      +
      +
      + + + + + +
      Generated by doxygen 1.8.14 on Sun May 26 2019Return to top of page
      + + + + + +
      VLSI SAPD DocumentationCopyright © 2010 - 2011 UPMC All rights reserved
      + + diff --git a/vlsisapd/doc/html/class_operator_1_1_constraint.html b/vlsisapd/doc/html/class_operator_1_1_constraint.html new file mode 100644 index 00000000..a0a9316f --- /dev/null +++ b/vlsisapd/doc/html/class_operator_1_1_constraint.html @@ -0,0 +1,54 @@ + + + + + VLSI SAPD Documentation + + +

      VLSI SAPD Documentation

      +
      + + + + + + + + + + +
      PresentationAGDSCIFDTROPENCHAMSSPICELinks & Contact
      +
      +
      +
      + + + + +
      +
      +
      Operator::Constraint Class Reference
      +
      +
      +

      Detailed Description

      +

      This class describes a constraint. A constraint is used to set that a parameter's value is defined relative to another parameter value or to an equation: deviceA.paramI = deviceB.paramJ * factor deviceA.paramI = equation * factor

      +
      +
      +
      + + + + + +
      Generated by doxygen 1.8.14 on Sun May 26 2019Return to top of page
      + + + + + +
      VLSI SAPD DocumentationCopyright © 2010 - 2011 UPMC All rights reserved
      + + diff --git a/vlsisapd/doc/html/class_parameters.html b/vlsisapd/doc/html/class_parameters.html new file mode 100644 index 00000000..54f9a053 --- /dev/null +++ b/vlsisapd/doc/html/class_parameters.html @@ -0,0 +1,50 @@ + + + + + VLSI SAPD Documentation + + +

      VLSI SAPD Documentation

      +
      + + + + + + + + + + +
      PresentationAGDSCIFDTROPENCHAMSSPICELinks & Contact
      +
      +
      +
      + + + +
      +
      +
      Parameters Class Reference
      +
      +
      +

      Detailed Description

      +

      This class describes a set of Parameters. Parameters consist in two maps associating a parameter name to a double value or a std::string (equation).

      +
      +
      +
      + + + + + +
      Generated by doxygen 1.8.14 on Sun May 26 2019Return to top of page
      + + + + + +
      VLSI SAPD DocumentationCopyright © 2010 - 2011 UPMC All rights reserved
      + + diff --git a/vlsisapd/doc/html/class_port.html b/vlsisapd/doc/html/class_port.html new file mode 100644 index 00000000..5ef7e6bc --- /dev/null +++ b/vlsisapd/doc/html/class_port.html @@ -0,0 +1,52 @@ + + + + + VLSI SAPD Documentation + + +

      VLSI SAPD Documentation

      +
      + + + + + + + + + + +
      PresentationAGDSCIFDTROPENCHAMSSPICELinks & Contact
      +
      +
      +
      + + + +
      +
      +
      Port Class Reference
      +
      +
      +

      Detailed Description

      +

      This class describes port.

      +

      A port is used by schematic to position the input/output ports of the circuit.

      +
      Note
      Althought the Port object is related to Schematic, it is handled by Net object since a port always belongs to a Net.
      +
      +
      +
      + + + + + +
      Generated by doxygen 1.8.14 on Sun May 26 2019Return to top of page
      + + + + + +
      VLSI SAPD DocumentationCopyright © 2010 - 2011 UPMC All rights reserved
      + + diff --git a/vlsisapd/doc/html/class_port_point.html b/vlsisapd/doc/html/class_port_point.html new file mode 100644 index 00000000..b555528a --- /dev/null +++ b/vlsisapd/doc/html/class_port_point.html @@ -0,0 +1,50 @@ + + + + + VLSI SAPD Documentation + + +

      VLSI SAPD Documentation

      +
      + + + + + + + + + + +
      PresentationAGDSCIFDTROPENCHAMSSPICELinks & Contact
      +
      +
      +
      + + + +
      +
      +
      PortPoint Class Reference
      +
      +
      +

      Detailed Description

      +

      this class describes a wire point associated to a Port.

      +
      +
      +
      + + + + + +
      Generated by doxygen 1.8.14 on Sun May 26 2019Return to top of page
      + + + + + +
      VLSI SAPD DocumentationCopyright © 2010 - 2011 UPMC All rights reserved
      + + diff --git a/vlsisapd/doc/html/class_s_p_i_c_e_1_1_capacitor.html b/vlsisapd/doc/html/class_s_p_i_c_e_1_1_capacitor.html index d4d89ad9..cec0aa3f 100644 --- a/vlsisapd/doc/html/class_s_p_i_c_e_1_1_capacitor.html +++ b/vlsisapd/doc/html/class_s_p_i_c_e_1_1_capacitor.html @@ -67,11 +67,10 @@ std::string  adds a connector to the instance. More...
        void addParameter (std::string name, std::string value) - add a parameter to the instance. More...
      + adds a parameter to the instance. More...
        - -const std::vector< std::string > & getConnectors () - returns the connectors of the instance.
      +const std::vector< std::string > & getConnectors () + returns the map of instance's connectors. More...
        std::string getModel () @@ -159,7 +158,7 @@ const std::map< std::string, std::string > &  - Generated by doxygen 1.8.14 on Thu Oct 18 2018 + Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page diff --git a/vlsisapd/doc/html/class_s_p_i_c_e_1_1_circuit.html b/vlsisapd/doc/html/class_s_p_i_c_e_1_1_circuit.html index deebd676..234727ca 100644 --- a/vlsisapd/doc/html/class_s_p_i_c_e_1_1_circuit.html +++ b/vlsisapd/doc/html/class_s_p_i_c_e_1_1_circuit.html @@ -30,7 +30,8 @@
      Circuit Class Reference
      @@ -79,9 +80,8 @@ const strpair_vector & getOptions ()  returns the options of the circuit.
        - -const strings_map & getParameters () - returns the parameters of the circuit.
      +const strings_map & getParameters () + returns all circuit's parameters. More...
        const std::vector< Source * > & getSources () @@ -98,6 +98,12 @@ std::string void setTitle (std::string)  sets the title of the circuit. More...
        + + + + +

      +Static Public Member Functions

      static CircuitreadFromFile (const std::string &)
       creates and returns a Circuit object based on a database source file. More...
       

      Detailed Description

      + +

      ◆ getParameters()

      + +
      +
      + + + + + +
      + + + + + + + +
      const Circuit::strings_map & getParameters ()
      +
      +inline
      +
      + +

      returns all circuit's parameters.

      +

      returns the parameters of the circuit.

      + +
      +
      + +

      ◆ readFromFile()

      + +
      +
      + + + + + +
      + + + + + + + + +
      Circuit * readFromFile (const std::string & filename)
      +
      +static
      +
      + +

      creates and returns a Circuit object based on a database source file.

      +
      Parameters
      + + +
      filePaththe source file name.
      +
      +
      +
      Returns
      the newly created Circuit.
      +
      @@ -391,7 +473,7 @@ std::string  - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/vlsisapd/doc/html/class_s_p_i_c_e_1_1_current.html b/vlsisapd/doc/html/class_s_p_i_c_e_1_1_current.html index a5406069..0d3b7a62 100644 --- a/vlsisapd/doc/html/class_s_p_i_c_e_1_1_current.html +++ b/vlsisapd/doc/html/class_s_p_i_c_e_1_1_current.html @@ -142,7 +142,7 @@ Additional Inherited Members
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/vlsisapd/doc/html/class_s_p_i_c_e_1_1_instance.html b/vlsisapd/doc/html/class_s_p_i_c_e_1_1_instance.html index 6984b1ea..f06d2284 100644 --- a/vlsisapd/doc/html/class_s_p_i_c_e_1_1_instance.html +++ b/vlsisapd/doc/html/class_s_p_i_c_e_1_1_instance.html @@ -53,11 +53,10 @@ Public Member Functions  adds a connector to the instance.
      More...
        void addParameter (std::string name, std::string value) - add a parameter to the instance. More...
      + adds a parameter to the instance. More...
        - -const std::vector< std::string > & getConnectors () - returns the connectors of the instance.
      +const std::vector< std::string > & getConnectors () + returns the map of instance's connectors. More...
        std::string getModel () @@ -112,6 +111,9 @@ const std::map< std::string, std::string > &  namethe name of the instance. modelthe model of the instance. + netlistthe netlist to which the instance belongs. + namethe name of the instance. + modelthe model of the instance. @@ -146,6 +148,7 @@ const std::map< std::string, std::string > & 
      Parameters
      +
      namethe name of the connector.
      connectorthe connector to add.
      @@ -158,6 +161,9 @@ const std::map< std::string, std::string > & 
      + + + - +
      @@ -177,17 +183,54 @@ const std::map< std::string, std::string > &  + +
      void addParameter +inline
      -

      add a parameter to the instance.

      +

      adds a parameter to the instance.

      +

      add a parameter to the instance.

      +

      adds an equation parameter to the instance.

      Parameters
      - + + +
      namethe name of the parameter.
      valuethe value of the parameter.
      valuethe value of the parameter.
      namethe name of the parameter.
      equationthe equation string of the parameter.
      +
      + + +

      ◆ getConnectors()

      + +
      +
      + + + + + +
      + + + + + + + +
      const std::vector< std::string > & getConnectors ()
      +
      +inline
      +
      + +

      returns the map of instance's connectors.

      +

      returns the connectors of the instance.

      +
      @@ -221,7 +264,7 @@ const std::map< std::string, std::string > & 
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/vlsisapd/doc/html/class_s_p_i_c_e_1_1_mosfet.html b/vlsisapd/doc/html/class_s_p_i_c_e_1_1_mosfet.html index b2a2eff2..036d0c1c 100644 --- a/vlsisapd/doc/html/class_s_p_i_c_e_1_1_mosfet.html +++ b/vlsisapd/doc/html/class_s_p_i_c_e_1_1_mosfet.html @@ -71,11 +71,10 @@ std::string  adds a connector to the instance. More...
        void addParameter (std::string name, std::string value) - add a parameter to the instance. More...
      + adds a parameter to the instance. More...
        - -const std::vector< std::string > & getConnectors () - returns the connectors of the instance.
      +const std::vector< std::string > & getConnectors () + returns the map of instance's connectors. More...
        std::string getModel () @@ -177,7 +176,7 @@ const std::map< std::string, std::string > &  - Generated by doxygen 1.8.14 on Thu Oct 18 2018 + Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page diff --git a/vlsisapd/doc/html/class_s_p_i_c_e_1_1_resistor.html b/vlsisapd/doc/html/class_s_p_i_c_e_1_1_resistor.html index eababc44..b9dc42d2 100644 --- a/vlsisapd/doc/html/class_s_p_i_c_e_1_1_resistor.html +++ b/vlsisapd/doc/html/class_s_p_i_c_e_1_1_resistor.html @@ -67,11 +67,10 @@ std::string  adds a connector to the instance. More...
        void addParameter (std::string name, std::string value) - add a parameter to the instance. More...
      + adds a parameter to the instance. More...
        - -const std::vector< std::string > & getConnectors () - returns the connectors of the instance.
      +const std::vector< std::string > & getConnectors () + returns the map of instance's connectors. More...
        std::string getModel () @@ -159,7 +158,7 @@ const std::map< std::string, std::string > &  - Generated by doxygen 1.8.14 on Thu Oct 18 2018 + Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page diff --git a/vlsisapd/doc/html/class_s_p_i_c_e_1_1_source.html b/vlsisapd/doc/html/class_s_p_i_c_e_1_1_source.html index 6bda4763..54cbd935 100644 --- a/vlsisapd/doc/html/class_s_p_i_c_e_1_1_source.html +++ b/vlsisapd/doc/html/class_s_p_i_c_e_1_1_source.html @@ -139,7 +139,7 @@ Protected Member Functions
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/vlsisapd/doc/html/class_s_p_i_c_e_1_1_spice_exception.html b/vlsisapd/doc/html/class_s_p_i_c_e_1_1_spice_exception.html index 9ead97ed..70ea3651 100644 --- a/vlsisapd/doc/html/class_s_p_i_c_e_1_1_spice_exception.html +++ b/vlsisapd/doc/html/class_s_p_i_c_e_1_1_spice_exception.html @@ -40,7 +40,7 @@
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/vlsisapd/doc/html/class_s_p_i_c_e_1_1_subckt.html b/vlsisapd/doc/html/class_s_p_i_c_e_1_1_subckt.html index 42a7defc..b5a5008f 100644 --- a/vlsisapd/doc/html/class_s_p_i_c_e_1_1_subckt.html +++ b/vlsisapd/doc/html/class_s_p_i_c_e_1_1_subckt.html @@ -284,7 +284,7 @@ const std::map< std::string, std::string > &  - Generated by doxygen 1.8.14 on Thu Oct 18 2018 + Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page diff --git a/vlsisapd/doc/html/class_s_p_i_c_e_1_1_value.html b/vlsisapd/doc/html/class_s_p_i_c_e_1_1_value.html index c28884bf..5d3fdf95 100644 --- a/vlsisapd/doc/html/class_s_p_i_c_e_1_1_value.html +++ b/vlsisapd/doc/html/class_s_p_i_c_e_1_1_value.html @@ -38,7 +38,7 @@
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/vlsisapd/doc/html/class_s_p_i_c_e_1_1_voltage.html b/vlsisapd/doc/html/class_s_p_i_c_e_1_1_voltage.html index a8501edb..67a4fc2e 100644 --- a/vlsisapd/doc/html/class_s_p_i_c_e_1_1_voltage.html +++ b/vlsisapd/doc/html/class_s_p_i_c_e_1_1_voltage.html @@ -142,7 +142,7 @@ Additional Inherited Members
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/vlsisapd/doc/html/class_schematic.html b/vlsisapd/doc/html/class_schematic.html new file mode 100644 index 00000000..da4c10de --- /dev/null +++ b/vlsisapd/doc/html/class_schematic.html @@ -0,0 +1,60 @@ + + + + + VLSI SAPD Documentation + + +

      VLSI SAPD Documentation

      +
      + + + + + + + + + + +
      PresentationAGDSCIFDTROPENCHAMSSPICELinks & Contact
      +
      +
      +
      + + +
      +
      + +
      +
      Schematic Class Reference
      +
      +
      + + + + +

      +Data Structures

      class  Infos
       
      +

      Detailed Description

      +

      This class describes schematic informations.

      +

      The Schematic object is used to store all informations relative to schematic of the circuit.

      +
      Note
      The Schematic object is optionnal in Circuit.
      +
      +
      +
      + + + + + +
      Generated by doxygen 1.8.14 on Sun May 26 2019Return to top of page
      + + + + + +
      VLSI SAPD DocumentationCopyright © 2010 - 2011 UPMC All rights reserved
      + + diff --git a/vlsisapd/doc/html/class_schematic_1_1_infos.html b/vlsisapd/doc/html/class_schematic_1_1_infos.html new file mode 100644 index 00000000..bf9557df --- /dev/null +++ b/vlsisapd/doc/html/class_schematic_1_1_infos.html @@ -0,0 +1,54 @@ + + + + + VLSI SAPD Documentation + + +

      VLSI SAPD Documentation

      +
      + + + + + + + + + + +
      PresentationAGDSCIFDTROPENCHAMSSPICELinks & Contact
      +
      +
      +
      + + + + +
      +
      +
      Schematic::Infos Class Reference
      +
      +
      +

      Detailed Description

      +

      This class describes schematic informations for an instance. It contains x and y coordinates and the orientation of the instance.

      +
      +
      +
      + + + + + +
      Generated by doxygen 1.8.14 on Sun May 26 2019Return to top of page
      + + + + + +
      VLSI SAPD DocumentationCopyright © 2010 - 2011 UPMC All rights reserved
      + + diff --git a/vlsisapd/doc/html/class_simul_model.html b/vlsisapd/doc/html/class_simul_model.html new file mode 100644 index 00000000..7dc17220 --- /dev/null +++ b/vlsisapd/doc/html/class_simul_model.html @@ -0,0 +1,50 @@ + + + + + VLSI SAPD Documentation + + +

      VLSI SAPD Documentation

      +
      + + + + + + + + + + +
      PresentationAGDSCIFDTROPENCHAMSSPICELinks & Contact
      +
      +
      +
      + + + +
      +
      +
      SimulModel Class Reference
      +
      +
      +

      Detailed Description

      +

      This class describes a simulation model used by Operator in Sizing procedure.

      +
      +
      +
      + + + + + +
      Generated by doxygen 1.8.14 on Sun May 26 2019Return to top of page
      + + + + + +
      VLSI SAPD DocumentationCopyright © 2010 - 2011 UPMC All rights reserved
      + + diff --git a/vlsisapd/doc/html/class_sizing.html b/vlsisapd/doc/html/class_sizing.html new file mode 100644 index 00000000..c970c93c --- /dev/null +++ b/vlsisapd/doc/html/class_sizing.html @@ -0,0 +1,52 @@ + + + + + VLSI SAPD Documentation + + +

      VLSI SAPD Documentation

      +
      + + + + + + + + + + +
      PresentationAGDSCIFDTROPENCHAMSSPICELinks & Contact
      +
      +
      +
      + + + +
      +
      +
      Sizing Class Reference
      +
      +
      +

      Detailed Description

      +

      This class describes a sizing procedure.

      +

      The Sizing object is used to store all informations relative to sizing procedure as we defined it in CHAMS.

      +
      Note
      The Sizing object is optionnal in Circuit.
      +
      +
      +
      + + + + + +
      Generated by doxygen 1.8.14 on Sun May 26 2019Return to top of page
      + + + + + +
      VLSI SAPD DocumentationCopyright © 2010 - 2011 UPMC All rights reserved
      + + diff --git a/vlsisapd/doc/html/class_transistor.html b/vlsisapd/doc/html/class_transistor.html new file mode 100644 index 00000000..f657db68 --- /dev/null +++ b/vlsisapd/doc/html/class_transistor.html @@ -0,0 +1,51 @@ + + + + + VLSI SAPD Documentation + + +

      VLSI SAPD Documentation

      +
      + + + + + + + + + + +
      PresentationAGDSCIFDTROPENCHAMSSPICELinks & Contact
      +
      +
      +
      + + + +
      +
      +
      Transistor Class Reference
      +
      +
      +

      Detailed Description

      +

      This class describes a Transistor.

      +

      The transistor object is used to describe the inside of a Device. The goal is to explicit the connection between the transistor and the device's nets.

      +
      +
      +
      + + + + + +
      Generated by doxygen 1.8.14 on Sun May 26 2019Return to top of page
      + + + + + +
      VLSI SAPD DocumentationCopyright © 2010 - 2011 UPMC All rights reserved
      + + diff --git a/vlsisapd/doc/html/class_wire.html b/vlsisapd/doc/html/class_wire.html new file mode 100644 index 00000000..f9c7d172 --- /dev/null +++ b/vlsisapd/doc/html/class_wire.html @@ -0,0 +1,56 @@ + + + + + VLSI SAPD Documentation + + +

      VLSI SAPD Documentation

      +
      + + + + + + + + + + +
      PresentationAGDSCIFDTROPENCHAMSSPICELinks & Contact
      +
      +
      +
      + + + +
      +
      +
      Wire Class Reference
      +
      +
      +

      Detailed Description

      +

      This class describes wire.

      +

      A wire is used by schematic to the connections between instances. It is defined by:

      +
      Note
      Althought the Wire object is related to Schematic, it is handled by Net object since a wire is always associated to a Net.
      +
      +
      +
      + + + + + +
      Generated by doxygen 1.8.14 on Sun May 26 2019Return to top of page
      + + + + + +
      VLSI SAPD DocumentationCopyright © 2010 - 2011 UPMC All rights reserved
      + + diff --git a/vlsisapd/doc/html/class_wire_point.html b/vlsisapd/doc/html/class_wire_point.html new file mode 100644 index 00000000..e629e687 --- /dev/null +++ b/vlsisapd/doc/html/class_wire_point.html @@ -0,0 +1,50 @@ + + + + + VLSI SAPD Documentation + + +

      VLSI SAPD Documentation

      +
      + + + + + + + + + + +
      PresentationAGDSCIFDTROPENCHAMSSPICELinks & Contact
      +
      +
      +
      + + + +
      +
      +
      WirePoint Class Reference
      +
      +
      +

      Detailed Description

      +

      This class describes wire point. A wire point is an abstract object used to define all "direction changing" points of a wire.

      +
      +
      +
      + + + + + +
      Generated by doxygen 1.8.14 on Sun May 26 2019Return to top of page
      + + + + + +
      VLSI SAPD DocumentationCopyright © 2010 - 2011 UPMC All rights reserved
      + + diff --git a/vlsisapd/doc/html/classes.html b/vlsisapd/doc/html/classes.html index 245ae526..75536680 100644 --- a/vlsisapd/doc/html/classes.html +++ b/vlsisapd/doc/html/classes.html @@ -29,55 +29,52 @@
      Data Structure Index
      -
      a | b | c | d | e | g | h | i | l | m | n | o | p | r | s | t | v | w
      +
      a | b | c | d | e | g | i | l | m | n | o | p | r | s | t | v | w
      - - + + + + - - + - + + - - - - - - - + + + + + + - - - - + + +
        a  
      -
      DSlicingNode (OpenChams)   IntermediatePoint (OpenChams)   Operator (OpenChams)   SpiceException (SPICE)   
      DTRException (DTR)   
        l  
      -
        p  
      -
      Structure (AGDS)   
      ARule (DTR)   
        e  
      -
      Subckt (SPICE)   
      DTRException (DTR)   Library (AGDS)   Polygon (CIF)   
        t  
      +
        e  
      +
        m  
      +
      Port   
      ARule (DTR)   PortPoint   Techno (DTR)   
        b  
      -
      Layout (OpenChams)   Parameters (OpenChams)   
        t  
      +
      Element (AGDS)   map_item (SPICE)   
        r  
      +
      Transistor   
        g  
      +
      Mosfet (SPICE)   
        v  
      Element (AGDS)   Library (AGDS)   Polygon (CIF)   
      Bloc (OpenChams)   Equation (OpenChams)   
        m  
      -
      Port (OpenChams)   Techno (DTR)   
      Bloc   
        n  
      +
      Rectangle (AGDS)   
        c  
      -
        g  
      -
      PortPoint (OpenChams)   Transistor (OpenChams)   
      map_item (OpenChams)   
        r  
      -
        v  
      +
      Group   Resistor (SPICE)   Value (SPICE)   
        i  
      +
      Name   Rule (DTR)   Voltage (SPICE)   
      Capacitor (SPICE)   Net   
        s  
      +
        w  
      Capacitor (SPICE)   Group (OpenChams)   map_item (SPICE)   
      Circuit (CIF)   
        h  
      -
      Mosfet (SPICE)   Rectangle (AGDS)   Value (SPICE)   
      Circuit (OpenChams)   
        n  
      -
      Resistor (SPICE)   Voltage (SPICE)   
      Circuit (SPICE)   HighLevelCstr (OpenChams)   RSlicingNode (OpenChams)   VSlicingNode (OpenChams)   
      Net::Connection (OpenChams)   HSlicingNode (OpenChams)   Name   Rule (DTR)   
        w  
      -
      Operator::Constraint (OpenChams)   HVSlicingNode (OpenChams)   Net (OpenChams)   
        s  
      -
      Current (SPICE)   
        i  
      -
      Netlist (OpenChams)   Wire (OpenChams)   
      Circuit (CIF)   Schematic::Infos   Netlist   
      Circuit (SPICE)   Instance (SPICE)   Node   Schematic   Wire   
      Circuit   Instance   
        o  
      +
      SimulModel   WirePoint   
      Net::Connection   InstancePoint   Sizing   
      Operator::Constraint   IntermediatePoint   OpenChamsException   Source (SPICE)   
      Current (SPICE)   
        l  
      +
      Operator   SpiceException (SPICE)   
        d  
      -
      Node (OpenChams)   Schematic (OpenChams)   WirePoint (OpenChams)   
      Schematic::Infos (OpenChams)   NRCCstr (OpenChams)   SimulModel (OpenChams)   
      DDP (OpenChams)   Instance (OpenChams)   
        o  
      -
      Sizing (OpenChams)   
      DesignerCstrOC (OpenChams)   Instance (SPICE)   SlicingNode (OpenChams)   
      Device (OpenChams)   InstancePoint (OpenChams)   OpenChamsException (OpenChams)   Source (SPICE)   
        p  
      +
      Structure (AGDS)   
      Layout   Subckt (SPICE)   
      Device   Parameters   
      -
      a | b | c | d | e | g | h | i | l | m | n | o | p | r | s | t | v | w
      +
      a | b | c | d | e | g | i | l | m | n | o | p | r | s | t | v | w


      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/vlsisapd/doc/html/contact.html b/vlsisapd/doc/html/contact.html index fef2a41a..34f65cb3 100644 --- a/vlsisapd/doc/html/contact.html +++ b/vlsisapd/doc/html/contact.html @@ -42,7 +42,7 @@
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/vlsisapd/doc/html/dir_194c6646cbe14a62ea0314c7fca681a9.html b/vlsisapd/doc/html/dir_194c6646cbe14a62ea0314c7fca681a9.html index 980f2141..764729eb 100644 --- a/vlsisapd/doc/html/dir_194c6646cbe14a62ea0314c7fca681a9.html +++ b/vlsisapd/doc/html/dir_194c6646cbe14a62ea0314c7fca681a9.html @@ -38,7 +38,7 @@
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/vlsisapd/doc/html/dir_2852b3f74447b3eef98d33971cc12e93.html b/vlsisapd/doc/html/dir_2852b3f74447b3eef98d33971cc12e93.html index 2cbbde89..8d4511b7 100644 --- a/vlsisapd/doc/html/dir_2852b3f74447b3eef98d33971cc12e93.html +++ b/vlsisapd/doc/html/dir_2852b3f74447b3eef98d33971cc12e93.html @@ -42,7 +42,7 @@ Directories
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/vlsisapd/doc/html/dir_37f2f7cf13fe8b3dbbf4df2dcd9db30e.html b/vlsisapd/doc/html/dir_37f2f7cf13fe8b3dbbf4df2dcd9db30e.html index 434315d9..93785d48 100644 --- a/vlsisapd/doc/html/dir_37f2f7cf13fe8b3dbbf4df2dcd9db30e.html +++ b/vlsisapd/doc/html/dir_37f2f7cf13fe8b3dbbf4df2dcd9db30e.html @@ -38,7 +38,7 @@
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/vlsisapd/doc/html/dir_39781fe580a6e198d1f524a1e4a0bc7e.html b/vlsisapd/doc/html/dir_39781fe580a6e198d1f524a1e4a0bc7e.html index e99448ab..ad14c85a 100644 --- a/vlsisapd/doc/html/dir_39781fe580a6e198d1f524a1e4a0bc7e.html +++ b/vlsisapd/doc/html/dir_39781fe580a6e198d1f524a1e4a0bc7e.html @@ -42,7 +42,7 @@ Directories
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/vlsisapd/doc/html/dir_47b618c8860794e76993335614edf751.html b/vlsisapd/doc/html/dir_47b618c8860794e76993335614edf751.html index 62597855..43228767 100644 --- a/vlsisapd/doc/html/dir_47b618c8860794e76993335614edf751.html +++ b/vlsisapd/doc/html/dir_47b618c8860794e76993335614edf751.html @@ -38,7 +38,7 @@
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/vlsisapd/doc/html/dir_55e17805e082fdc46e6a3a5c39067580.html b/vlsisapd/doc/html/dir_55e17805e082fdc46e6a3a5c39067580.html index cb2978fd..943d0243 100644 --- a/vlsisapd/doc/html/dir_55e17805e082fdc46e6a3a5c39067580.html +++ b/vlsisapd/doc/html/dir_55e17805e082fdc46e6a3a5c39067580.html @@ -38,7 +38,7 @@
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/vlsisapd/doc/html/dir_59ec496789535d63823312241afb9b7f.html b/vlsisapd/doc/html/dir_59ec496789535d63823312241afb9b7f.html index ca2a9765..d101ba44 100644 --- a/vlsisapd/doc/html/dir_59ec496789535d63823312241afb9b7f.html +++ b/vlsisapd/doc/html/dir_59ec496789535d63823312241afb9b7f.html @@ -38,7 +38,7 @@
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/vlsisapd/doc/html/dir_61fcc85a192620389e1754e99f550e16.html b/vlsisapd/doc/html/dir_61fcc85a192620389e1754e99f550e16.html index 41c111f9..5acabab7 100644 --- a/vlsisapd/doc/html/dir_61fcc85a192620389e1754e99f550e16.html +++ b/vlsisapd/doc/html/dir_61fcc85a192620389e1754e99f550e16.html @@ -42,7 +42,7 @@ Directories
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/vlsisapd/doc/html/dir_622483769e0f2cd8e596ff15be97e36f.html b/vlsisapd/doc/html/dir_622483769e0f2cd8e596ff15be97e36f.html index 99e82ba1..c21b070d 100644 --- a/vlsisapd/doc/html/dir_622483769e0f2cd8e596ff15be97e36f.html +++ b/vlsisapd/doc/html/dir_622483769e0f2cd8e596ff15be97e36f.html @@ -42,7 +42,7 @@ Directories
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/vlsisapd/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/vlsisapd/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html index 9e616042..53afa16b 100644 --- a/vlsisapd/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html +++ b/vlsisapd/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html @@ -38,7 +38,7 @@
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/vlsisapd/doc/html/dir_71789bf9375547e252911cdb9a2317ae.html b/vlsisapd/doc/html/dir_71789bf9375547e252911cdb9a2317ae.html index e1c4aecc..5ce49e6e 100644 --- a/vlsisapd/doc/html/dir_71789bf9375547e252911cdb9a2317ae.html +++ b/vlsisapd/doc/html/dir_71789bf9375547e252911cdb9a2317ae.html @@ -42,7 +42,7 @@ Directories
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/vlsisapd/doc/html/dir_7665d8bfef91390195a0fbeced79f129.html b/vlsisapd/doc/html/dir_7665d8bfef91390195a0fbeced79f129.html index 9a7549bb..c1e6ffe9 100644 --- a/vlsisapd/doc/html/dir_7665d8bfef91390195a0fbeced79f129.html +++ b/vlsisapd/doc/html/dir_7665d8bfef91390195a0fbeced79f129.html @@ -42,7 +42,7 @@ Directories
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/vlsisapd/doc/html/dir_97fdc78ce1a397e825572027accd162c.html b/vlsisapd/doc/html/dir_97fdc78ce1a397e825572027accd162c.html index 0cfc491b..1b3b63d1 100644 --- a/vlsisapd/doc/html/dir_97fdc78ce1a397e825572027accd162c.html +++ b/vlsisapd/doc/html/dir_97fdc78ce1a397e825572027accd162c.html @@ -42,7 +42,7 @@ Directories
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/vlsisapd/doc/html/dir_bf3fa239d58b225d86806ac9c8613e9c.html b/vlsisapd/doc/html/dir_bf3fa239d58b225d86806ac9c8613e9c.html index 99a5f2e2..37a820ba 100644 --- a/vlsisapd/doc/html/dir_bf3fa239d58b225d86806ac9c8613e9c.html +++ b/vlsisapd/doc/html/dir_bf3fa239d58b225d86806ac9c8613e9c.html @@ -42,7 +42,7 @@ Directories
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/vlsisapd/doc/html/dir_c663fdd46c388fa35da0cbda7880ed60.html b/vlsisapd/doc/html/dir_c663fdd46c388fa35da0cbda7880ed60.html index 295bd404..991c514d 100644 --- a/vlsisapd/doc/html/dir_c663fdd46c388fa35da0cbda7880ed60.html +++ b/vlsisapd/doc/html/dir_c663fdd46c388fa35da0cbda7880ed60.html @@ -38,7 +38,7 @@
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/vlsisapd/doc/html/dir_d524a314c3e79ad7dcb6d469d1af3bdb.html b/vlsisapd/doc/html/dir_d524a314c3e79ad7dcb6d469d1af3bdb.html index 7322706c..6295a900 100644 --- a/vlsisapd/doc/html/dir_d524a314c3e79ad7dcb6d469d1af3bdb.html +++ b/vlsisapd/doc/html/dir_d524a314c3e79ad7dcb6d469d1af3bdb.html @@ -38,7 +38,7 @@
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/vlsisapd/doc/html/dir_e15e6a3c4c4383a9f2520d7186345132.html b/vlsisapd/doc/html/dir_e15e6a3c4c4383a9f2520d7186345132.html index 000e3134..3bdcd528 100644 --- a/vlsisapd/doc/html/dir_e15e6a3c4c4383a9f2520d7186345132.html +++ b/vlsisapd/doc/html/dir_e15e6a3c4c4383a9f2520d7186345132.html @@ -38,7 +38,7 @@
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/vlsisapd/doc/html/dtr.html b/vlsisapd/doc/html/dtr.html index 4a2edbad..ddec0e55 100644 --- a/vlsisapd/doc/html/dtr.html +++ b/vlsisapd/doc/html/dtr.html @@ -74,7 +74,7 @@ Driver
      - +
      Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
      diff --git a/vlsisapd/doc/html/functions.html b/vlsisapd/doc/html/functions.html index 24beffb9..b087ccff 100644 --- a/vlsisapd/doc/html/functions.html +++ b/vlsisapd/doc/html/functions.html @@ -37,46 +37,27 @@
    • addConnector() : Instance
    • -
    • addDevice() -: Netlist -
    • addElement() : Structure
    • -
    • addEquation() -: Sizing -
    • addInclude() : Circuit
    • addInstance() -: Layout -, Netlist -, Schematic -, Circuit +: Circuit , Subckt
    • addInterface() : Subckt
    • -
    • addIntermediatePoint() -: Wire -
    • addLibrary() : Circuit
    • -
    • addNet() -: Netlist -
    • -
    • addOperator() -: Sizing -
    • addOption() : Circuit
    • addParameter() -: Parameters -, Circuit +: Circuit , Instance , Subckt
    • @@ -86,32 +67,235 @@
    • addPolygon() : Circuit
    • -
    • addPort() -: Net -
    • addRule() : Techno
    • -
    • addSimulModel() -: Circuit -
    • addSource() : Circuit
    • addStructure() : Library
    • -
    • addSubCircuitPath() -: Circuit -
    • addSubckt() : Circuit
    • -
    • addTransistor() -: Device +
    + + +

    - c -

    + + +

    - g -

    + + +

    - i -

    + + +

    - l -

    + + +

    - m -

    + + +

    - p -

    + + +

    - r -

    + + +

    - s -

    + + +

    - t -

    + + +

    - v -

    + + +

    - w -

    @@ -119,7 +303,7 @@
    - +
    Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
    diff --git a/vlsisapd/doc/html/functions_func.html b/vlsisapd/doc/html/functions_func.html index d7859488..fff5bf8a 100644 --- a/vlsisapd/doc/html/functions_func.html +++ b/vlsisapd/doc/html/functions_func.html @@ -37,46 +37,27 @@
  • addConnector() : Instance
  • -
  • addDevice() -: Netlist -
  • addElement() : Structure
  • -
  • addEquation() -: Sizing -
  • addInclude() : Circuit
  • addInstance() -: Layout -, Netlist -, Schematic -, Circuit +: Circuit , Subckt
  • addInterface() : Subckt
  • -
  • addIntermediatePoint() -: Wire -
  • addLibrary() : Circuit
  • -
  • addNet() -: Netlist -
  • -
  • addOperator() -: Sizing -
  • addOption() : Circuit
  • addParameter() -: Parameters -, Circuit +: Circuit , Instance , Subckt
  • @@ -86,32 +67,235 @@
  • addPolygon() : Circuit
  • -
  • addPort() -: Net -
  • addRule() : Techno
  • -
  • addSimulModel() -: Circuit -
  • addSource() : Circuit
  • addStructure() : Library
  • -
  • addSubCircuitPath() -: Circuit -
  • addSubckt() : Circuit
  • -
  • addTransistor() -: Device + + + +

    - c -

    + + +

    - g -

    + + +

    - i -

    + + +

    - l -

    + + +

    - m -

    + + +

    - p -

    + + +

    - r -

    + + +

    - s -

    + + +

    - t -

    + + +

    - v -

    + + +

    - w -

    @@ -119,7 +303,7 @@
    - +
    Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
    diff --git a/vlsisapd/doc/html/hierarchy.html b/vlsisapd/doc/html/hierarchy.html index 81d6967d..fd4ffc08 100644 --- a/vlsisapd/doc/html/hierarchy.html +++ b/vlsisapd/doc/html/hierarchy.html @@ -30,67 +30,55 @@
    This inheritance list is sorted roughly, but not completely, alphabetically:
    -
    [detail level 123]
    - - +
    [detail level 12]
     CCircuit
     CCircuit
    + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     CBloc
     CCircuit
     CCircuit
     CNet::Connection
     COperator::Constraint
     CDTRException
     CElement
     CRectangle
     CEquation
     CDDP
     CDesignerCstrOC
     CHighLevelCstr
     CNRCCstr
     CSchematic::Infos
     CInstance
     CDevice
     CInstance
     CCapacitor
     CMosfet
     CResistor
     CLayout
     CLibrary
     Cmap_item< Key, Val >
     Cmap_item< Key, Val >
     CName
     CNet
     CNetlist
     CNode
     CBloc
     CGroup
     COpenChamsException
     COperator
     CParameters
     CPolygon
     CPort
     CRule
     CARule
     CSchematic
     CSimulModel
     CSizing
     CSlicingNode
     CDSlicingNode
     CHVSlicingNode
     CHSlicingNode
     CVSlicingNode
     CRSlicingNode
     CSource
     CCurrent
     CVoltage
     CSpiceException
     CStructure
     CSubckt
     CTechno
     CTransistor
     CValue
     CWire
     CWirePoint
     CInstancePoint
     CIntermediatePoint
     CPortPoint
     CCircuit
     CNet::Connection
     COperator::Constraint
     CDevice
     CDTRException
     CElement
     CRectangle
     CGroup
     CSchematic::Infos
     CInstance
     CCapacitor
     CMosfet
     CResistor
     CInstance
     CInstancePoint
     CIntermediatePoint
     CLayout
     CLibrary
     Cmap_item< Key, Val >
     CName
     CNet
     CNetlist
     CNode
     COpenChamsException
     COperator
     CParameters
     CPolygon
     CPort
     CPortPoint
     CRule
     CARule
     CSchematic
     CSimulModel
     CSizing
     CSource
     CCurrent
     CVoltage
     CSpiceException
     CStructure
     CSubckt
     CTechno
     CTransistor
     CValue
     CWire
     CWirePoint
    @@ -98,7 +86,7 @@
    - +
    Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
    diff --git a/vlsisapd/doc/html/index.html b/vlsisapd/doc/html/index.html index f06fcc51..8eb456b1 100644 --- a/vlsisapd/doc/html/index.html +++ b/vlsisapd/doc/html/index.html @@ -56,7 +56,7 @@
    - +
    Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
    diff --git a/vlsisapd/doc/html/openchams.html b/vlsisapd/doc/html/openchams.html index cd5edffe..a36eaf8a 100644 --- a/vlsisapd/doc/html/openchams.html +++ b/vlsisapd/doc/html/openchams.html @@ -40,73 +40,73 @@ Author Stand alone database structure

    The database has many objects that can be arranged in five categories:

    • General
    • -
    • Netlist
        -
      • OpenChams::Netlist
      • -
      • OpenChams::Instance
      • -
      • OpenChams::Device
      • -
      • OpenChams::Transistor
      • -
      • OpenChams::Parameters
      • -
      • OpenChams::Net
      • +
      • Netlist
          +
        • OpenChams::Netlist
        • +
        • OpenChams::Instance
        • +
        • OpenChams::Device
        • +
        • OpenChams::Transistor
        • +
        • OpenChams::Parameters
        • +
        • OpenChams::Net
      • -
      • Sizing
          -
        • OpenChams::Sizing
        • -
        • OpenChams::Operator
        • -
        • OpenChams::SimulModel
        • +
        • Sizing
            +
          • OpenChams::Sizing
          • +
          • OpenChams::Operator
          • +
          • OpenChams::SimulModel
        • -
        • Schematic
            -
          • OpenChams::Schematic
          • -
          • OpenChams::Port
          • -
          • OpenChams::Wire
          • -
          • OpenChams::WirePoint
          • -
          • OpenChams::InstancePoint
          • -
          • OpenChams::PortPoint
          • -
          • OpenChams::IntermediatePoint
          • +
          • Schematic
              +
            • OpenChams::Schematic
            • +
            • OpenChams::Port
            • +
            • OpenChams::Wire
            • +
            • OpenChams::WirePoint
            • +
            • OpenChams::InstancePoint
            • +
            • OpenChams::PortPoint
            • +
            • OpenChams::IntermediatePoint
          • -
          • Layout

            Using the parser

            -

            Simply load an OPENCHAMS file using the static function OpenChams::Circuit::readFromFile() and then get the netlist object (OpenChams::Circuit::getNetlist()) or the sizing procedure (OpenChams::Circuit::getSizing(), might be NULL) or any other useful information (see OpenChams::Circuit).

            +

            Simply load an OPENCHAMS file using the static function OpenChams::Circuit::readFromFile() and then get the netlist object (OpenChams::Circuit::getNetlist()) or the sizing procedure (OpenChams::Circuit::getSizing(), might be NULL) or any other useful information (see OpenChams::Circuit).

            Using the driver

            -

            Using the driver is very simple, user has to create an OpenChams::Circuit object and simply add OpenChams::Netlist (mandatory) and OpenChams::Sizing (optionnal) or OpenChams::Schematic (optionnal) or OpenChams::Layout (optinnal) to it. Finally use the OpenChams::Circuit::writeToFile() method to dump the database to file.

            +

            Using the driver is very simple, user has to create an OpenChams::Circuit object and simply add OpenChams::Netlist (mandatory) and OpenChams::Sizing (optionnal) or OpenChams::Schematic (optionnal) or OpenChams::Layout (optinnal) to it. Finally use the OpenChams::Circuit::writeToFile() method to dump the database to file.

            Examples

            -

            As said is the global presentation, VLSI SAPD project provides C++ libraries and Python modules for each supported format. In this section we present simple code examples to parse and drive a OPENCHAMS file using C++ or Python. The OPENCHAMS files considered are the same for all examples: inverter.xml and buffer.xml

            <?xml version="1.0" encoding="UTF-8"?>
            <circuit name="inverter" techno="myTech">
            <parameters>
            <parameter name="temp" value="27.0"/>
            <parameter name="Vdd" value="1.2"/>
            <parameter name="Vss" value="0.0"/>
            <parameter name="L" value="0.10e-6"/>
            <parameter name="Ids" value="30e-6"/>
            <parameter name="Veg" value="0.12"/>
            <parameterEq name="complex" equation="myEq"/>
            </parameters>
            <netlist>
            <instances>
            <instance name="nmos1" model="Transistor" order="1" mostype="NMOS" sourceBulkConnected="True">
            <connectors>
            <connector name="G"/>
            <connector name="D"/>
            <connector name="S"/>
            </connectors>
            <transistors>
            <transistor name="m1">
            <connection gate="G" source="S" drain="D" bulk="S"/>
            </transistor>
            </transistors>
            </instance>
            <instance name="pmos1" model="Transistor" order="2" mostype="PMOS" sourceBulkConnected="True">
            <connectors>
            <connector name="G"/>
            <connector name="D"/>
            <connector name="S"/>
            </connectors>
            <transistors>
            <transistor name="m1">
            <connection gate="G" source="S" drain="D" bulk="S"/>
            </transistor>
            </transistors>
            </instance>
            </instances>
            <nets>
            <net name="vdd" type="power" isExternal="True">
            <connector instance="pmos1" name="S"/>
            </net>
            <net name="vss" type="ground" isExternal="True">
            <connector instance="nmos1" name="S"/>
            </net>
            <net name="in" type="logical" isExternal="True">
            <connector instance="nmos1" name="G"/>
            <connector instance="pmos1" name="G"/>
            </net>
            <net name="out" type="logical" isExternal="True">
            <connector instance="nmos1" name="D"/>
            <connector instance="pmos1" name="D"/>
            </net>
            </nets>
            </netlist>
            <schematic>
            <instance name="nmos1" x="2490" y="2600" orient="ID"/>
            <instance name="pmos1" x="2490" y="2490" orient="ID"/>
            <net name="vdd">
            <port type="inV" idx="0" x="2525" y="2430" orient="ID"/>
            <wire>
            <connector name="pmos1" plug="S"/>
            <!--point x="" y=""/-->
            <connector idx="0"/>
            </wire>
            </net>
            <net name="vss">
            <port type="inV" idx="0" x="2525" y="2740" orient="MY"/>
            <wire>
            <connector name="nmos1" plug="S"/>
            <connector idx="0"/>
            </wire>
            </net>
            <net name="in">
            <port type="inH" idx="0" x="2415" y="2520" orient="ID"/>
            <wire>
            <connector name="pmos1" plug="G"/>
            <connector name="nmos1" plug="G"/>
            </wire>
            <wire>
            <connector idx="0"/>
            <connector name="pmos1" plug="G"/>
            </wire>
            </net>
            <net name="out">
            <port type="outH" idx="0" x="2570" y="2590" orient="ID"/>
            <wire>
            <connector name="pmos1" plug="D"/>
            <connector name="nmos1" plug="D"/>
            </wire>
            <wire>
            <connector name="nmos1" plug="D"/>
            <connector idx="0"/>
            </wire>
            </net>
            </schematic>
            <sizing>
            <instance name="pmos1" operator="OPVG(Veg)" simulModel="BSIM3V3">
            <constraint param="Temp" ref="design" refParam="temp"/>
            <constraint param="Ids" ref="design" refParam="Ids"/>
            <constraint param="L" ref="design" refParam="L"/>
            <constraint param="Veg" ref="design" refParam="Veg"/>
            <constraint param="Vd" ref="design" refParam="Vdd" factor="0.5"/>
            <constraint param="Vs" ref="design" refParam="Vdd"/>
            </instance>
            <instance name="nmos1" operator="OPW(Vg,Vs)" simulModel="BSIM3V3">
            <constraint param="Temp" ref="design" refParam="temp"/>
            <constraint param="Ids" ref="design" refParam="Ids"/>
            <constraint param="L" ref="design" refParam="L"/>
            <constraint param="Vs" ref="design" refParam="Vdd"/>
            <constraint param="Vg" ref="pmos1" refParam="Vg"/>
            <constraint param="Vd" ref="pmos1" refParam="Vd"/>
            <constraint param="another" refEquation="myEq" factor="-2.5"/>
            </instance>
            <equations>
            <eq name="myEq" equation="A/more+complex*equation"/>
            </equations>
            </sizing>
            <layout>
            <instance name="pmos1" style="Common transistor"/>
            <instance name="nmos1" style="Rotate transistor"/>
            <hbtree>
            <group name="g1" align="vertical">
            <bloc name="nmos1">
            <bloc name="pmos1" position="top"/>
            </bloc>
            </group>
            </hbtree>
            </layout>
            </circuit>
            <?xml version="1.0" encoding="UTF-8"?>
            <circuit name="buffer" techno="myTech">
            <subCircuitsPaths>
            <path path="."/>
            </subCircuitsPaths>
            <netlist>
            <instances>
            <instance name="inv1" model="inverter">
            <connectors>
            <connector name="vdd"/>
            <connector name="vss"/>
            <connector name="in" />
            <connector name="out"/>
            </connectors>
            </instance>
            <instance name="inv2" model="inverter">
            <connectors>
            <connector name="vdd"/>
            <connector name="vss"/>
            <connector name="in" />
            <connector name="out"/>
            </connectors>
            </instance>
            </instances>
            <nets>
            <net name="vdd" type="power" isExternal="True">
            <connector instance="inv1" name="vdd"/>
            <connector instance="inv2" name="vdd"/>
            </net>
            <net name="vss" type="ground" isExternal="True">
            <connector instance="inv1" name="vss"/>
            <connector instance="inv2" name="vss"/>
            </net>
            <net name="in" type="logical" isExternal="True">
            <connector instance="inv1" name="in"/>
            </net>
            <net name="out" type="logical" isExternal="True">
            <connector instance="inv2" name="out"/>
            </net>
            <net name="internal" type="logical" isExternal="False">
            <connector instance="inv1" name="out"/>
            <connector instance="inv2" name="in"/>
            </net>
            </nets>
            </netlist>
            <schematic>
            <instance name="inv1" x="2490" y="2600" orient="ID"/>
            <instance name="inv2" x="2490" y="2300" orient="ID"/>
            <net name="in">
            <port type="inV" idx="0" x="2415" y="2700" orient="MY"/>
            <wire>
            <connector name="inv1" plug="in"/>
            <connector idx="0"/>
            </wire>
            </net>
            <net name="internal">
            <wire>
            <connector name="inv1" plug="out"/>
            <connector name="inv2" plug="in"/>
            </wire>
            </net>
            <net name="out">
            <port type="outV" idx="0" x="2415" y="2200" orient="MY"/>
            <wire>
            <connector name="inv2" plug="out"/>
            <connector idx="0"/>
            </wire>
            </net>
            <net name="vdd">
            <port type="inH" idx="0" x="2200" y="2500" orient="ID"/>
            <wire>
            <connector idx="0"/>
            <connector name="inv2" plug="vdd"/>
            </wire>
            <wire>
            <connector name="inv1" plug="vdd"/>
            <connector name="inv2" plug="vdd"/>
            </wire>
            </net>
            <net name="vss">
            <port type="inH" idx="0" x="2700" y="2500" orient="MX"/>
            <wire>
            <connector idx="0"/>
            <connector name="inv2" plug="vss"/>
            </wire>
            <wire>
            <connector name="inv1" plug="vss"/>
            <connector name="inv2" plug="vss"/>
            </wire>
            </net>
            </schematic>
            </circuit>

            All source codes are available in the examples directory.

            +

            As said is the global presentation, VLSI SAPD project provides C++ libraries and Python modules for each supported format. In this section we present simple code examples to parse and drive a OPENCHAMS file using C++ or Python. The OPENCHAMS files considered are the same for all examples: inverter.xml and buffer.xml

            All source codes are available in the examples directory.

            C++

            Parser

            -

            The following code (parseOpenChams.cpp) is an example of how to parse a OPENCHAMS file using C++ library.

            #include <iostream>
            #include <string>
            #include <map>
            #include <vector>
            using namespace std;
            #include "vlsisapd/openChams/Circuit.h"
            #include "vlsisapd/openChams/Name.h"
            #include "vlsisapd/openChams/Parameters.h"
            #include "vlsisapd/openChams/Netlist.h"
            #include "vlsisapd/openChams/Instance.h"
            #include "vlsisapd/openChams/Device.h"
            #include "vlsisapd/openChams/Net.h"
            #include "vlsisapd/openChams/Transistor.h"
            #include "vlsisapd/openChams/Schematic.h"
            #include "vlsisapd/openChams/Sizing.h"
            #include "vlsisapd/openChams/Operator.h"
            #include "vlsisapd/openChams/Layout.h"
            #include "vlsisapd/openChams/Node.h"
            #include "vlsisapd/openChams/Port.h"
            #include "vlsisapd/openChams/Wire.h"
            #include "vlsisapd/openChams/OpenChamsException.h"
            void printHBTree(OpenChams::Node* node, unsigned indent) {
            if (!node) return; // since we pass nnode->getRight and node-getTop without checking for NULL
            for (unsigned i = 0 ; i < indent ; i++) {
            cerr << " |";
            }
            string pos = "";
            switch(node->getPosition()) {
            case OpenChams::Node::TOP:
            pos = "top";
            break;
            case OpenChams::Node::RIGHT:
            pos = "right";
            break;
            default:
            break;
            }
            OpenChams::Bloc* bloc = dynamic_cast<OpenChams::Bloc*>(node);
            if (bloc) {
            cerr << " bloc: " << bloc->getName().getString() << " - " << pos << endl;
            printHBTree(bloc->getTop() , indent+1);
            printHBTree(bloc->getRight(), indent+1);
            return;
            }
            OpenChams::Group* group = dynamic_cast<OpenChams::Group*>(node);
            if (group) {
            string align = "none";
            switch(group->getAlign()) {
            case OpenChams::Group::VERTICAL:
            align = "vertical";
            break;
            case OpenChams::Group::HORIZONTAL:
            align = "horizontal";
            break;
            default:
            break;
            }
            cerr << " group: " << group->getName().getString() << " - " << pos << " - align: " << align << " - isolated: " << group->isIsolated() << " - paired: " << group->isPaired() << endl;
            printHBTree(group->getRootNode(), indent+1);
            printHBTree(group->getTop() , indent+1);
            printHBTree(group->getRight() , indent+1);
            return;
            }
            cerr << "[ERROR] printHBTree: node is nor a bloc nor a group !" << endl;
            return;
            }
            int main(int argc, char * argv[]) {
            string file = "";
            if (argc == 1)
            file = "./inverter.xml";
            else if (argc == 2)
            file = argv[1];
            else {
            cerr << "Usage: openChamsParser [filename]" << endl;
            exit(1);
            }
            OpenChams::Circuit* circuit = NULL;
            try {
            cerr << e.what() << endl;
            exit(48);
            }
            cerr << circuit->getName().getString() << endl;
            cerr << " + parameters" << endl;
            OpenChams::Parameters params = circuit->getParameters();
            if (!params.isEmpty()) {
            for (map<OpenChams::Name, string>::const_iterator it = params.getValues().begin() ; it != params.getValues().end() ; ++it) {
            cerr << " | | " << ((*it).first).getString() << " : " << (*it).second << endl;
            }
            }
            cerr << " + netlist" << endl;
            cerr << " | + instances" << endl;
            OpenChams::Netlist* netlist = circuit->getNetlist();
            if (netlist && !netlist->hasNoInstances()) {
            for (size_t i = 0 ; i < netlist->getInstances().size() ; i++) {
            OpenChams::Instance* inst = netlist->getInstances()[i];
            OpenChams::Device* dev = NULL;
            if (dynamic_cast<OpenChams::Device*>(inst)) {
            dev = static_cast<OpenChams::Device*>(inst);
            cerr << " | | + " << dev->getName().getString() << " : " << dev->getModel().getString() << " - " << dev->getOrder() << " - " << dev->getMosType().getString() << " - " << (dev->isSourceBulkConnected()?"true":"false") << endl;
            } else {
            cerr << " | | + " << inst->getName().getString() << " : " << inst->getModel().getString() << " - " << inst->getOrder() << endl;
            }
            cerr << " | | | + connectors" << endl;
            for (map<OpenChams::Name, OpenChams::Net*>::const_iterator cit = inst->getConnectors().begin() ; cit != inst->getConnectors().end() ; ++cit) {
            if ((*cit).second)
            cerr << " | | | | " << ((*cit).first).getString() << " : " << ((*cit).second)->getName().getString() << endl;
            else
            cerr << " | | | | " << ((*cit).first).getString() << endl; // no net connected !
            }
            if (dev) {
            cerr << " | | | + transistors" << endl;
            for (size_t j = 0 ; j < dev->getTransistors().size() ; j++) {
            cerr << " | | | | name: " << tr->getName().getString() << " - gate: " << tr->getGate().getString() << " - source: " << tr->getSource().getString() << " - drain: " << tr->getDrain().getString() << " - bulk: " << tr->getBulk().getString() << endl;
            }
            }
            }
            }
            cerr << " | + nets" << endl;
            bool schematicNet = false; // define wether net sections are needed in schematic section
            if (!netlist->hasNoNets()) {
            for (size_t i = 0 ; i < netlist->getNets().size() ; i++) {
            OpenChams::Net* net = netlist->getNets()[i];
            cerr << " | | + " << net->getName().getString() << " : " << net->getType().getString() << " - " << (net->isExternal()?"true":"false") << endl;
            cerr << " | | | + connections" << endl;
            for (size_t j = 0 ; j < net->getConnections().size() ; j++) {
            cerr << " | | | | " << connect->getInstanceName().getString() << "." << connect->getConnectorName().getString() << endl;
            }
            if (!net->hasNoPorts() || !net->hasNoWires())
            schematicNet = true;
            }
            }
            OpenChams::Schematic* schematic = circuit->getSchematic();
            if (schematic && !schematic->hasNoInstances()) {
            cerr << " + schematic" << endl;
            for (map<OpenChams::Name, OpenChams::Schematic::Infos*>::const_iterator sit = schematic->getInstances().begin() ; sit != schematic->getInstances().end() ; ++sit) {
            OpenChams::Schematic::Infos* inf = (*sit).second;
            cerr << " | + instance: name: " << ((*sit).first).getString() << " - x: " << inf->getX() << " - y: " << inf->getY() << " - orientation: " << inf->getOrientation().getString() << endl;
            }
            if (schematicNet) {
            for (size_t i = 0 ; i < netlist->getNets().size() ; i++) {
            OpenChams::Net* net = netlist->getNets()[i];
            cerr << " | + net name: " << net->getName().getString() << endl;
            if (!net->hasNoPorts()) {
            for (size_t j = 0 ; j < net->getPorts().size() ; j++) {
            OpenChams::Port* port = net->getPorts()[j];
            cerr << " | | + port type: " << port->getType().getString() << " - idx: " << port->getIndex() << " - x: " << port->getX() << " - y: " << port->getY() << " - orientation: " << port->getOrientation().getString() << endl;
            }
            }
            if (!net->hasNoWires()) {
            for (size_t j = 0 ; j < net->getWires().size() ; j++) {
            OpenChams::Wire* wire = net->getWires()[j];
            cerr << " | | + wire ";
            if (dynamic_cast<OpenChams::InstancePoint*>(start)) {
            cerr << "<" << iP->getName().getString() << "," << iP->getPlug().getString() << "> ";
            } else if (dynamic_cast<OpenChams::PortPoint*>(start)) {
            OpenChams::PortPoint* pP = static_cast<OpenChams::PortPoint*>(start);
            cerr << "<" << pP->getIndex() << "> ";
            }
            for (size_t k = 0 ; k < wire->getIntermediatePoints().size() ; k++) {
            cerr << "<" << iP->getX() << "," << iP->getY() << "> ";
            }
            if (dynamic_cast<OpenChams::InstancePoint*>(end)) {
            cerr << "<" << iP->getName().getString() << "," << iP->getPlug().getString() << "> ";
            } else if (dynamic_cast<OpenChams::PortPoint*>(end)) {
            OpenChams::PortPoint* pP = static_cast<OpenChams::PortPoint*>(end);
            cerr << "<" << pP->getIndex() << "> ";
            }
            cerr << endl;
            }
            }
            }
            }
            }
            OpenChams::Sizing* sizing = circuit->getSizing();
            if (sizing) {
            cerr << " + sizing" << endl;
            if (!sizing->hasNoOperators()) {
            for (map<OpenChams::Name, OpenChams::Operator*>::const_iterator oit = sizing->getOperators().begin() ; oit != sizing->getOperators().end() ; ++oit) {
            OpenChams::Operator* op = (*oit).second;
            cerr << " | + instance name: " << ((*oit).first).getString() << " - operator: " << op->getName().getString() << " - simulModel: " << op->getSimulModel().getString() << endl;
            if (!op->hasNoConstraints()) {
            for (map<OpenChams::Name, OpenChams::Operator::Constraint*>::const_iterator cit = op->getConstraints().begin() ; cit != op->getConstraints().end() ; ++cit) {
            OpenChams::Operator::Constraint* cstr = (*cit).second;
            cerr << " | | + param: " << ((*cit).first).getString() << " - ref: " << cstr->getRef().getString() << " - refParam: " << cstr->getRefParam().getString() << " - factor: " << cstr->getFactor() << endl;
            }
            }
            }
            }
            // To update to the new equations.
            // if (!sizing->hasNoEquations()) {
            // cerr << " | + equations" << endl;
            // for (map<OpenChams::Name, string>::const_iterator eit = sizing->getEquations().begin() ; eit != sizing->getEquations().end() ; ++eit) {
            // cerr << " | | " << ((*eit).first).getString() << " : " << (*eit).second << endl;
            // }
            // }
            }
            OpenChams::Layout* layout = circuit->getLayout();
            if (layout) {
            if (!layout->hasNoInstance()) {
            cerr << " + layout" << endl;
            for (map<OpenChams::Name, OpenChams::Name>::const_iterator lit = layout->getInstances().begin() ; lit != layout->getInstances().end() ; ++lit) {
            cerr << " | | instance name: " << ((*lit).first).getString() << " - style: " << ((*lit).second).getString() << endl;
            }
            }
            OpenChams::Node* root = layout->getHBTreeRoot();
            if (root) {
            cerr << " | + hbtree" << endl;
            printHBTree(root, 2);
            }
            }
            return 0;
            }

            +

            The following code (parseOpenChams.cpp) is an example of how to parse a OPENCHAMS file using C++ library.

            Driver

            -

            This C++ code (driveOpenChams.cpp) generates an inverter.xml file equivalent to the included one.

            #include <string>
            using namespace std;
            #include "vlsisapd/openChams/Circuit.h"
            #include "vlsisapd/openChams/Netlist.h"
            #include "vlsisapd/openChams/Instance.h"
            #include "vlsisapd/openChams/Device.h"
            #include "vlsisapd/openChams/Transistor.h"
            #include "vlsisapd/openChams/Net.h"
            #include "vlsisapd/openChams/Schematic.h"
            #include "vlsisapd/openChams/Sizing.h"
            #include "vlsisapd/openChams/Operator.h"
            #include "vlsisapd/openChams/Layout.h"
            #include "vlsisapd/openChams/Node.h"
            #include "vlsisapd/openChams/Port.h"
            #include "vlsisapd/openChams/Wire.h"
            int main(int argc, char * argv[]) {
            OpenChams::Circuit* circuit = new OpenChams::Circuit(OpenChams::Name("design"), OpenChams::Name("myTech"));
            // value parameters
            circuit->addParameter(OpenChams::Name("temp"), "27.0" );
            circuit->addParameter(OpenChams::Name("Vdd") , "1.2" );
            circuit->addParameter(OpenChams::Name("Vss") , "0.0" );
            circuit->addParameter(OpenChams::Name("L") , "0.1e-6");
            circuit->addParameter(OpenChams::Name("Ids") , "30e-6" );
            circuit->addParameter(OpenChams::Name("Veg") , "0.12" );
            // equation parameters
            circuit->addParameter(OpenChams::Name("complex"), "myEq");
            // netlist
            OpenChams::Netlist* netlist = circuit->createNetlist();
            // instances
            // nmos1
            OpenChams::Device* inst_nmos1 = netlist->addDevice(OpenChams::Name("nmos1"), OpenChams::Name("Transistor"), 1, OpenChams::Name("NMOS"), true);
            inst_nmos1->addConnector(OpenChams::Name("G"));
            inst_nmos1->addConnector(OpenChams::Name("S"));
            inst_nmos1->addConnector(OpenChams::Name("D"));
            OpenChams::Transistor* tr_nmos1 = inst_nmos1->addTransistor(OpenChams::Name("m1"));
            tr_nmos1->setGate (OpenChams::Name("G")); // the name of the connector of inst_nmos1
            tr_nmos1->setSource(OpenChams::Name("S"));
            tr_nmos1->setDrain (OpenChams::Name("D"));
            tr_nmos1->setBulk (OpenChams::Name("S"));
            // pmos1
            OpenChams::Device* inst_pmos1 = netlist->addDevice(OpenChams::Name("pmos1"), OpenChams::Name("Transistor"), 2, OpenChams::Name("PMOS"), true);
            inst_pmos1->addConnector(OpenChams::Name("G"));
            inst_pmos1->addConnector(OpenChams::Name("S"));
            inst_pmos1->addConnector(OpenChams::Name("D"));
            OpenChams::Transistor* tr_pmos1 = inst_pmos1->addTransistor(OpenChams::Name("m1"));
            tr_pmos1->setGate (OpenChams::Name("G")); // the name of the connector of inst_pmos1
            tr_pmos1->setSource(OpenChams::Name("S"));
            tr_pmos1->setDrain (OpenChams::Name("D"));
            tr_pmos1->setBulk (OpenChams::Name("S"));
            // nets
            OpenChams::Net* _vdd = netlist->addNet(OpenChams::Name("vdd"), OpenChams::Name("power") , true);
            OpenChams::Net* _vss = netlist->addNet(OpenChams::Name("vss"), OpenChams::Name("ground") , true);
            OpenChams::Net* _in = netlist->addNet(OpenChams::Name("in" ), OpenChams::Name("logical"), true);
            OpenChams::Net* _out = netlist->addNet(OpenChams::Name("out"), OpenChams::Name("logical"), true);
            _vdd->connectTo(OpenChams::Name("pmos1"), OpenChams::Name("S"));
            _vss->connectTo(OpenChams::Name("nmos1"), OpenChams::Name("S"));
            _in->connectTo (OpenChams::Name("nmos1"), OpenChams::Name("G"));
            _in->connectTo (OpenChams::Name("pmos1"), OpenChams::Name("G"));
            _out->connectTo(OpenChams::Name("nmos1"), OpenChams::Name("D"));
            _out->connectTo(OpenChams::Name("pmos1"), OpenChams::Name("D"));
            // schematic
            OpenChams::Schematic* schematic = circuit->createSchematic();
            schematic->addInstance(OpenChams::Name("nmos1"), 2490, 2600, OpenChams::Name("ID"));
            schematic->addInstance(OpenChams::Name("pmos1"), 2490, 2300, OpenChams::Name("ID"));
            _vdd->addPort(OpenChams::Name("inV"), 0, 2490, 2100, OpenChams::Name("ID"));
            OpenChams::Wire* wVdd = _vdd->addWire();
            wVdd->setStartPoint(OpenChams::Name("pmos1"), OpenChams::Name("S"));
            wVdd->setEndPoint (0);
            _vss->addPort(OpenChams::Name("inV"), 0, 2490, 2800, OpenChams::Name("MY"));
            OpenChams::Wire* wVss = _vss->addWire();
            wVss->setStartPoint(OpenChams::Name("nmos1"), OpenChams::Name("S"));
            wVss->setEndPoint (0);
            _in->addPort(OpenChams::Name("inH"), 0, 2190, 2500, OpenChams::Name("ID"));
            OpenChams::Wire* wIn = _in->addWire();
            wIn->setStartPoint(OpenChams::Name("pmos1"), OpenChams::Name("G"));
            wIn->setEndPoint (OpenChams::Name("nmos1"), OpenChams::Name("G"));
            OpenChams::Wire* wIn1 = _in->addWire();
            wIn1->setStartPoint(0);
            wIn1->setEndPoint (OpenChams::Name("pmos1"), OpenChams::Name("G"));
            _out->addPort(OpenChams::Name("outH"), 0, 2600, 2500, OpenChams::Name("ID"));
            OpenChams::Wire* wOut = _out->addWire();
            wOut->setStartPoint(OpenChams::Name("pmos1"), OpenChams::Name("D"));
            wOut->setEndPoint (OpenChams::Name("nmos1"), OpenChams::Name("D"));
            OpenChams::Wire* wOut1 = _out->addWire();
            wOut1->setStartPoint(OpenChams::Name("nmos1"), OpenChams::Name("D"));
            wOut1->setEndPoint (0);
            // sizing
            OpenChams::Sizing* sizing = circuit->createSizing();
            OpenChams::Operator* op_pmos1 = sizing->addOperator(OpenChams::Name("pmos1"), OpenChams::Name("OPVG(Veg)"), OpenChams::Name("BSIM3V3"));
            op_pmos1->addConstraint(OpenChams::Name("Temp"), OpenChams::Name("design"), OpenChams::Name("temp"));
            op_pmos1->addConstraint(OpenChams::Name("Ids") , OpenChams::Name("design"), OpenChams::Name("Ids") );
            op_pmos1->addConstraint(OpenChams::Name("L") , OpenChams::Name("design"), OpenChams::Name("L") );
            op_pmos1->addConstraint(OpenChams::Name("Veg") , OpenChams::Name("design"), OpenChams::Name("Veg") );
            op_pmos1->addConstraint(OpenChams::Name("Vd") , OpenChams::Name("design"), OpenChams::Name("Vdd") , 0.5);
            op_pmos1->addConstraint(OpenChams::Name("Vs") , OpenChams::Name("design"), OpenChams::Name("Vdd") );
            OpenChams::Operator* op_nmos1 = sizing->addOperator(OpenChams::Name("nmos1"), OpenChams::Name("OPW(Vg,Vs)"), OpenChams::Name("BSIM3V3"));
            op_nmos1->addConstraint(OpenChams::Name("Temp"), OpenChams::Name("design"), OpenChams::Name("temp"));
            op_nmos1->addConstraint(OpenChams::Name("Ids") , OpenChams::Name("design"), OpenChams::Name("Ids" ));
            op_nmos1->addConstraint(OpenChams::Name("L") , OpenChams::Name("design"), OpenChams::Name("L" ));
            op_nmos1->addConstraint(OpenChams::Name("Vs") , OpenChams::Name("design"), OpenChams::Name("Vdd" ));
            op_nmos1->addConstraint(OpenChams::Name("Vg") , OpenChams::Name("pmos1") , OpenChams::Name("Vg" ));
            op_nmos1->addConstraint(OpenChams::Name("Vd") , OpenChams::Name("pmos1") , OpenChams::Name("Vd" ));
            op_nmos1->addConstraint(OpenChams::Name("another"), OpenChams::Name("myEq"), -2.5 );
            // layout
            OpenChams::Layout* layout = circuit->createLayout();
            layout->addInstance(OpenChams::Name("pmos1"), OpenChams::Name("Common transistor"));
            layout->addInstance(OpenChams::Name("nmos1"), OpenChams::Name("Rotate transistor"));
            // create hbtree
            OpenChams::Group* g1 = new OpenChams::Group("g1"); // default position is NONE and default parent is NULL
            g1->setAlign(OpenChams::Group::VERTICAL);
            OpenChams::Bloc* b1 = new OpenChams::Bloc("nmos1", OpenChams::Node::NONE, g1);
            g1->setRootNode(b1); // b1 is root node of group g1
            OpenChams::Bloc* b2 = new OpenChams::Bloc("pmos1", OpenChams::Node::TOP, b1);
            b1->setTop(b2); // b2 is on top of b1
            layout->setHBTreeRoot(g1); // g1 is the root of the tree
            circuit->writeToFile("./myInverter.xml");
            return 0;
            }
            Note
            In order to compile these codes, a CMakeLists.txt file is provided. User must set the $VLSISAPD_TOP variable before running these commands in the directory containing the CMakeLists.txt file:
            %> mkdir build; cd build
            %> cmake ..
            %> make
            +

            This C++ code (driveOpenChams.cpp) generates an inverter.xml file equivalent to the included one.

            Note
            In order to compile these codes, a CMakeLists.txt file is provided. User must set the $VLSISAPD_TOP variable before running these commands in the directory containing the CMakeLists.txt file:
            %> mkdir build; cd build
            %> cmake ..
            %> make

            Python

            Parser

            -

            The following python script (parseOpenChams.py) is an example of how to parse a OPENCHAMS file using python module.

            import sys
            from OPENCHAMS import *
            def printHBTree(node, indent):
            if node == None:
            return
            for i in range(indent):
            print " |",
            if isinstance(node, Bloc):
            print " bloc:", node.getName(), "-", node.getPosition()
            printHBTree(node.top , indent+1)
            printHBTree(node.right, indent+1)
            return
            if isinstance(node, Group):
            print " group:", node.getName(), "-", node.getPosition(), "-", node.align, "-", node.isolated, "-", node.paired
            printHBTree(node.rootNode, indent+1)
            printHBTree(node.top , indent+1)
            printHBTree(node.right , indent+1)
            return
            def printContents(circuit):
            print circuit.name
            # circuit parameters
            print " + parameters"
            for param in circuit.parameters.getValues():
            print " | |", param.key, ":", param.value
            for param in circuit.parameters.getEqValues():
            print " | |", param.key, ":", param.value
            # netlist
            print " + netlist"
            # instances
            print " | + instances"
            for instance in circuit.netlist.getInstances():
            if isinstance(instance, Device):
            print " | | +", instance.name, ":", instance.model, instance.order, instance.mosType, instance.sourceBulkConnected
            else:
            print " | | +", instance.name, ":", instance.model, instance.order
            print " | | | + connectors"
            for conn in instance.getConnectors():
            print " | | | |", conn.key, ":", conn.value.name
            if isinstance(instance, Device):
            print " | | | + transistors"
            for tr in instance.getTransistors():
            print " | | | | name:", tr.name, "- gate:", tr.gate, "- source:", tr.source, "- drain:", tr.drain, "- bulk:", tr.bulk
            # nets
            print " | + nets"
            schematicNet = False
            for net in circuit.netlist.getNets():
            print " | | +", net.name, ":", net.type, net.external
            print " | | | + connections"
            for conn in net.getConnections():
            print " | | | | %s.%s"%(conn.instanceName, conn.connectorName)
            if not net.hasNoPorts() or not net.hasNoWires():
            schematicNet = True
            # schematic
            if (circuit.schematic):
            print " + schematic"
            for instance in circuit.schematic.getInstances():
            print " | + instance name:", instance.key, "- x:", instance.value.x, "- y:", instance.value.y, "- orientation:", instance.value.orientation
            if schematicNet:
            for net in circuit.netlist.getNets():
            if net.hasNoPorts() and net.hasNoWires():
            continue
            print " | + net name:", net.name
            for port in net.getPorts():
            print " | | + port type:", port.type, "- idx:", port.index, "- x:", port.x, "- y:", port.y, "- orientation:", port.orientation
            for wire in net.getWires():
            if isinstance(wire.startPoint, InstancePoint):
            print " | | + wire <" + wire.startPoint.name.getString() + "," + wire.startPoint.plug.getString() +">"
            elif isinstance(wire.startPoint, PortPoint):
            print " | | + wire <" + str(wire.startPoint.index) + ">"
            else:
            print " - - UNKNOWN START POINT"
            for point in wire.getIntermediatePoints():
            print " | | <" + str(point.x) + "," + str(point.y) + ">"
            if isinstance(wire.endPoint, InstancePoint):
            print " | | <" + wire.endPoint.name.getString() + "," + wire.endPoint.plug.getString() +">"
            elif isinstance(wire.endPoint, PortPoint):
            print " | | <" + str(wire.endPoint.index) + ">"
            else:
            print " - - UNKNOWN END POINT"
            # sizing
            if (circuit.sizing):
            print " + sizing"
            for op in circuit.sizing.getOperators():
            print " | + instance name:", op.key, "- operator:", op.value.name, "- simulModel:", op.value.simulModel
            for constraint in op.value.getConstraints():
            print " | | + param:", constraint.key, "- ref:", constraint.value.ref, "- refParam:", constraint.value.refParam, "- factor:", constraint.value.factor
            print " | + equations"
            for eq in circuit.sizing.getEquations():
            print " | |", eq.key, ":", eq.value
            # layout
            if (circuit.layout):
            print " + layout"
            for inst in circuit.layout.getInstances():
            print " | | instance name:", inst.key, "- style:", inst.value
            if circuit.layout.hbTreeRoot != None:
            print " | + hbtree"
            printHBTree(circuit.layout.hbTreeRoot, 2)
            def usage():
            print "usage:", sys.argv[0], "[filename]"
            sys.exit(48)
            def main():
            if len(sys.argv) == 1:
            filename = "./inverter.xml"
            elif len(sys.argv) == 2:
            filename = sys.argv[1]
            else:
            usage()
            circuit = Circuit.readFromFile(filename)
            printContents(circuit)
            if __name__ == "__main__":
            main()

            +

            The following python script (parseOpenChams.py) is an example of how to parse a OPENCHAMS file using python module.

            Driver

            -

            This python script (driveOpenChams.py) generates an inverter.xml file equivalent to the included one.

            from OPENCHAMS import *
            circuit = Circuit(Name("design"), Name("myTech"))
            # value parameters
            circuit.addParameter(Name("temp"), 27.0 )
            circuit.addParameter(Name("Vdd") , 1.2 )
            circuit.addParameter(Name("Vss") , 0.0 )
            circuit.addParameter(Name("L") , 0.1e-6)
            circuit.addParameter(Name("Ids") , 30e-6 )
            circuit.addParameter(Name("Veg") , 0.12 )
            # equation parameters
            circuit.addParameter(Name("complex"), "myEq")
            # netlist :
            netlist = circuit.createNetlist()
            # instances
            # nmos1
            inst_nmos1 = netlist.addDevice("nmos1", "Transistor", 1, "NMOS", True)
            inst_nmos1.addConnector("G")
            inst_nmos1.addConnector("S")
            inst_nmos1.addConnector("D")
            tr_nmos1 = inst_nmos1.addTransistor("m1")
            tr_nmos1.gate = "G" # the name of the connector of inst_nmos1
            tr_nmos1.source = "S"
            tr_nmos1.drain = "D"
            tr_nmos1.bulk = "S"
            # pmos1
            inst_pmos1 = netlist.addDevice("pmos1", "Transistor", 2, "PMOS", True)
            inst_pmos1.addConnector("G")
            inst_pmos1.addConnector("S")
            inst_pmos1.addConnector("D")
            tr_pmos1 = inst_pmos1.addTransistor("m1")
            tr_pmos1.gate = "G" # the name of the connector of inst_pmos1
            tr_pmos1.source = "S"
            tr_pmos1.drain = "D"
            tr_pmos1.bulk = "S"
            # nets
            _vdd = netlist.addNet("vdd", "power" , True)
            _vss = netlist.addNet("vss", "ground" , True)
            _in = netlist.addNet("in" , "logical", True)
            _out = netlist.addNet("out", "logical", True)
            _vdd.connectTo("pmos1", "S")
            _vss.connectTo("nmos1", "S")
            _in.connectTo ("nmos1", "G")
            _in.connectTo ("pmos1", "G")
            _out.connectTo("nmos1", "D")
            _out.connectTo("pmos1", "D")
            # schematic
            schematic = circuit.createSchematic()
            schematic.addInstance("nmos1", 2490, 2600, "ID")
            schematic.addInstance("pmos1", 2490, 2300, "ID")
            _vdd.addPort("inV" , 0, 2490, 2100, "ID")
            _vss.addPort("inV" , 0, 2490, 2800, "MY")
            _in.addPort ("inH" , 0, 2190, 2500, "ID")
            _out.addPort("outH", 0, 2600, 2500, "ID")
            wireVdd = _vdd.addWire()
            wireVdd.setStartPoint("pmos1", "S")
            wireVdd.setEndPoint(0)
            wireVss = _vss.addWire()
            wireVss.setStartPoint("nmos1", "S")
            wireVss.setEndPoint(0)
            wireIn0 = _in.addWire()
            wireIn1 = _in.addWire()
            wireIn0.setStartPoint("pmos1", "G")
            wireIn0.setEndPoint ("nmos1", "G")
            wireIn1.setStartPoint(0)
            wireIn1.setEndPoint ("pmos1", "G")
            wireOut0 = _out.addWire()
            wireOut1 = _out.addWire()
            wireOut0.setStartPoint("pmos1", "D")
            wireOut0.setEndPoint ("nmos1", "D")
            wireOut1.setStartPoint("nmos1", "D")
            wireOut1.setEndPoint (0)
            # sizing
            sizing = circuit.createSizing()
            op_pmos1 = sizing.addOperator("pmos1", "OPVG(Veg)" , "BSIM3V3")
            op_pmos1.addConstraint("Temp", "design", "temp")
            op_pmos1.addConstraint("Ids" , "design", "Ids" )
            op_pmos1.addConstraint("L" , "design", "L" )
            op_pmos1.addConstraint("Veg" , "design", "Veg" )
            op_pmos1.addConstraint("Vd" , "design", "Vdd", 0.5)
            op_pmos1.addConstraint("Vs" , "design", "Vdd" )
            op_nmos1 = sizing.addOperator("nmos1", "OPW(Vg,Vs)", "BSIM3V3")
            op_nmos1.addConstraint("Temp", "design", "temp")
            op_nmos1.addConstraint("Ids" , "design", "Ids" )
            op_nmos1.addConstraint("L" , "design", "L" )
            op_nmos1.addConstraint("Vs" , "design", "Vdd" )
            op_nmos1.addConstraint("Vg" , "pmos1" , "Vg" )
            op_nmos1.addConstraint("Vd" , "pmos1" , "Vd" )
            op_nmos1.addConstraint("another", "myEq", -2.5 )
            # layout
            layout = circuit.createLayout()
            layout.addInstance("pmos1", "Common transistor")
            layout.addInstance("nmos1", "Rotate transistor")
            # create hbtree
            g1 = Group("g1")
            g1.align = Group.Align.VERTICAL
            b1 = Bloc("nmos1", Node.Position.NONE, g1)
            g1.rootNode = b1
            b2 = Bloc("pmos1", Node.Position.TOP, b1)
            b1.top = b2
            layout.hbTreeRoot = g1
            circuit.writeToFile("./myInverter.xml")
            Note
            In order to run these two scripts (parseOpenChams.py & driveOpenChams.py), user must ensure that $PYTHONPATH variable points to the directory containing OPENCHAMS.so module.
            +

            This python script (driveOpenChams.py) generates an inverter.xml file equivalent to the included one.

            Note
            In order to run these two scripts (parseOpenChams.py & driveOpenChams.py), user must ensure that $PYTHONPATH variable points to the directory containing OPENCHAMS.so module.


            - +
            Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
            diff --git a/vlsisapd/doc/html/pages.html b/vlsisapd/doc/html/pages.html index 771a1654..2600405e 100644 --- a/vlsisapd/doc/html/pages.html +++ b/vlsisapd/doc/html/pages.html @@ -39,7 +39,7 @@
            - +
            Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
            diff --git a/vlsisapd/doc/html/spice.html b/vlsisapd/doc/html/spice.html index dfbbfb6d..cd26977c 100644 --- a/vlsisapd/doc/html/spice.html +++ b/vlsisapd/doc/html/spice.html @@ -52,7 +52,7 @@ Stand alone database structure

          Using the parser

          -

          Simply load an Spice netlist file using the static function SPICE::Circuit::readFromFile().

          +

          Simply load an Spice netlist file using the static function SPICE::Circuit::readFromFile().

          Using the driver

          Using the driver is very simple, user has to create a SPICE::Circuit object and simply add others Spice objects like SPICE::Subckt or SPICE::Instance to it. Includes, libraries and parameters can also be added to SPICE::Circuit. Finally use the SPICE::Circuit::writeToFile() method to dump the database to file.

          @@ -63,7 +63,7 @@ Examples C++

          Parser

          -

          The following code (parseSpice.cpp) is an example of how to parse a SPICE file using C++ library.

          #include <cstdlib>
          #include <iostream>
          #include <string>
          #include <map>
          #include <vector>
          using namespace std;
          #include "vlsisapd/spice/Circuit.h"
          #include "vlsisapd/spice/SpiceException.h"
          #include "vlsisapd/spice/Sources.h"
          #include "vlsisapd/spice/Subckt.h"
          #include "vlsisapd/spice/Instances.h"
          int main(int argc, char * argv[]) {
          string file = "";
          if (argc == 1)
          file = "./OTA.cir";
          else if (argc == 2)
          file = argv[1];
          else {
          cerr << "Usage: parseSpice [filename]" << endl;
          exit(1);
          }
          SPICE::Circuit* circuit = NULL;
          try {
          circuit = SPICE::Circuit::readFromFile(file);
          } catch (SPICE::SpiceException& e) {
          cerr << e.what() << endl;
          exit(48);
          }
          // if (!circuit) cerr << "circuit is NULL !!" << endl;
          // TITLE
          cerr << "+ " << circuit->getTitle() << endl;
          // INCLUDES
          vector<string> includes = circuit->getIncludes();
          if (includes.size()) {
          cerr << "| + includes" << endl;
          for (size_t i = 0 ; i < includes.size() ; i++)
          cerr << "| | " << includes[i] << endl;
          }
          // LIBRARIES
          vector<pair<string, string> > libs = circuit->getLibraries();
          if (libs.size()) {
          cerr << "| + libraries" << endl;
          for (size_t i = 0 ; i < libs.size() ; i++)
          cerr << "| | " << libs[i].first << " " << libs[i].second << endl;
          }
          // PARAMETERS
          map<string, string> params = circuit->getParameters();
          if (params.size()) {
          cerr << "| + parameters" << endl;
          for (map<string, string>::const_iterator it = params.begin() ; it != params.end() ; ++it)
          cerr << "| | " << (*it).first << " = " << (*it).second << endl;
          }
          // OPTIONS
          map<string, string> opts = circuit->getOptions();
          if (opts.size()) {
          cerr << "| + options" << endl;
          for (map<string, string>::const_iterator it = opts.begin() ; it != opts.end() ; ++it)
          cerr << "| | " << (*it).first << " = " << (*it).second << endl;
          }
          // SOURCES
          vector<SPICE::Source*> sources = circuit->getSources();
          if (sources.size()) {
          cerr << "| + sources" << endl;
          for (size_t i = 0 ; i < sources.size() ; i++) {
          SPICE::Source* s = sources[i];
          cerr << "| | " << s->getName() << " " << s->getPositive() << " " << s->getNegative() << " " << s->getValue() << endl;
          }
          }
          // SUBCKTS
          vector<SPICE::Subckt*> subs = circuit->getSubckts();
          if (subs.size()) {
          cerr << "| + subckts" << endl;
          for (size_t i = 0 ; i < subs.size() ; i++) {
          SPICE::Subckt* sub = subs[i];
          cerr << "| | + " << sub->getName();
          for (size_t j = 0 ; j < sub->getInterfaces().size() ; j++)
          cerr << " " << sub->getInterfaces()[j];
          if (sub->getParameters().size()) {
          cerr << " param:";
          for (map<string, string>::const_iterator it = sub->getParameters().begin() ; it != sub->getParameters().end() ; ++it)
          cerr << " " << (*it).first << "=" << (*it).second;
          }
          cerr << endl;
          for (size_t j = 0 ; j < sub->getInstances().size() ; j++) {
          SPICE::Instance* inst = sub->getInstances()[j];
          cerr << "| | | + " << inst->getName();
          if (dynamic_cast<SPICE::Mosfet*>(inst)) {
          SPICE::Mosfet* mos = static_cast<SPICE::Mosfet*>(inst);
          cerr << " " << mos->getDrain() << " " << mos->getGrid() << " " << mos->getSource() << " " << mos->getBulk() << " " << mos->getModel();
          int k = 0;
          for (map<string, string>::const_iterator it =mos->getParameters().begin() ; it != mos->getParameters().end(); ++it, k++) {
          if (k%6 == 0)
          cerr << endl << "| | | | +";
          cerr << " " << (*it).first << "=" << (*it).second;
          }
          } else if (dynamic_cast<SPICE::Resistor*>(inst)) {
          SPICE::Resistor* res = static_cast<SPICE::Resistor*>(inst);
          cerr << " " << res->getFirst() << " " << res->getSecond() << " " << res->getValue();
          } else if (dynamic_cast<SPICE::Capacitor*>(inst)) {
          SPICE::Capacitor* capa = static_cast<SPICE::Capacitor*>(inst);
          cerr << " " << capa->getPositive() << " " << capa->getNegative() << " " << capa->getValue();
          } else {
          for (size_t k = 0 ; k < inst->getConnectors().size() ; k++)
          cerr << " " << inst->getConnectors()[k];
          cerr << " " << inst->getModel();
          int l = 0;
          for (map<string, string>::const_iterator it = inst->getParameters().begin() ; it != inst->getParameters().end() ; ++it, l++) {
          if (l%6 == 0)
          cerr << endl << "| | | | +";
          cerr << " " << (*it).first << "=" << (*it).second;
          }
          }
          cerr << endl;
          }
          }
          }
          // INSTANCES
          vector<SPICE::Instance*> insts = circuit->getInstances();
          if (insts.size()) {
          cerr << "| + instances" << endl;
          for (size_t i = 0 ; i < insts.size() ; i++) {
          SPICE::Instance* inst = insts[i];
          cerr << "| | + " << inst->getName();
          if (dynamic_cast<SPICE::Mosfet*>(inst)) {
          SPICE::Mosfet* mos = static_cast<SPICE::Mosfet*>(inst);
          cerr << " " << mos->getDrain() << " " << mos->getGrid() << " " << mos->getSource() << " " << mos->getBulk() << " " << mos->getModel();
          int j = 0;
          for (map<string, string>::const_iterator it =mos->getParameters().begin() ; it != mos->getParameters().end(); ++it, j++) {
          if (j%6 == 0)
          cerr << endl << "| | | | +";
          cerr << " " << (*it).first << "=" << (*it).second;
          }
          } else if (dynamic_cast<SPICE::Resistor*>(inst)) {
          SPICE::Resistor* res = static_cast<SPICE::Resistor*>(inst);
          cerr << " " << res->getFirst() << " " << res->getSecond() << " " << res->getValue();
          } else if (dynamic_cast<SPICE::Capacitor*>(inst)) {
          SPICE::Capacitor* capa = static_cast<SPICE::Capacitor*>(inst);
          cerr << " " << capa->getPositive() << " " << capa->getNegative() << " " << capa->getValue();
          } else {
          for (size_t k = 0 ; k < inst->getConnectors().size() ; k++)
          cerr << " " << inst->getConnectors()[k];
          cerr << " " << inst->getModel();
          int l = 0;
          for (map<string, string>::const_iterator it = inst->getParameters().begin() ; it != inst->getParameters().end() ; ++it, l++) {
          if (l%6 == 0)
          cerr << endl << "| | | +";
          cerr << " " << (*it).first << "=" << (*it).second;
          }
          }
          cerr << endl;
          }
          }
          return 0;
          }

          +

          The following code (parseSpice.cpp) is an example of how to parse a SPICE file using C++ library.

          #include <cstdlib>
          #include <iostream>
          #include <string>
          #include <map>
          #include <vector>
          using namespace std;
          #include "vlsisapd/spice/Circuit.h"
          #include "vlsisapd/spice/SpiceException.h"
          #include "vlsisapd/spice/Sources.h"
          #include "vlsisapd/spice/Subckt.h"
          #include "vlsisapd/spice/Instances.h"
          int main(int argc, char * argv[]) {
          string file = "";
          if (argc == 1)
          file = "./OTA.cir";
          else if (argc == 2)
          file = argv[1];
          else {
          cerr << "Usage: parseSpice [filename]" << endl;
          exit(1);
          }
          SPICE::Circuit* circuit = NULL;
          try {
          } catch (SPICE::SpiceException& e) {
          cerr << e.what() << endl;
          exit(48);
          }
          // if (!circuit) cerr << "circuit is NULL !!" << endl;
          // TITLE
          cerr << "+ " << circuit->getTitle() << endl;
          // INCLUDES
          vector<string> includes = circuit->getIncludes();
          if (includes.size()) {
          cerr << "| + includes" << endl;
          for (size_t i = 0 ; i < includes.size() ; i++)
          cerr << "| | " << includes[i] << endl;
          }
          // LIBRARIES
          vector<pair<string, string> > libs = circuit->getLibraries();
          if (libs.size()) {
          cerr << "| + libraries" << endl;
          for (size_t i = 0 ; i < libs.size() ; i++)
          cerr << "| | " << libs[i].first << " " << libs[i].second << endl;
          }
          // PARAMETERS
          map<string, string> params = circuit->getParameters();
          if (params.size()) {
          cerr << "| + parameters" << endl;
          for (map<string, string>::const_iterator it = params.begin() ; it != params.end() ; ++it)
          cerr << "| | " << (*it).first << " = " << (*it).second << endl;
          }
          // OPTIONS
          map<string, string> opts = circuit->getOptions();
          if (opts.size()) {
          cerr << "| + options" << endl;
          for (map<string, string>::const_iterator it = opts.begin() ; it != opts.end() ; ++it)
          cerr << "| | " << (*it).first << " = " << (*it).second << endl;
          }
          // SOURCES
          vector<SPICE::Source*> sources = circuit->getSources();
          if (sources.size()) {
          cerr << "| + sources" << endl;
          for (size_t i = 0 ; i < sources.size() ; i++) {
          SPICE::Source* s = sources[i];
          cerr << "| | " << s->getName() << " " << s->getPositive() << " " << s->getNegative() << " " << s->getValue() << endl;
          }
          }
          // SUBCKTS
          vector<SPICE::Subckt*> subs = circuit->getSubckts();
          if (subs.size()) {
          cerr << "| + subckts" << endl;
          for (size_t i = 0 ; i < subs.size() ; i++) {
          SPICE::Subckt* sub = subs[i];
          cerr << "| | + " << sub->getName();
          for (size_t j = 0 ; j < sub->getInterfaces().size() ; j++)
          cerr << " " << sub->getInterfaces()[j];
          if (sub->getParameters().size()) {
          cerr << " param:";
          for (map<string, string>::const_iterator it = sub->getParameters().begin() ; it != sub->getParameters().end() ; ++it)
          cerr << " " << (*it).first << "=" << (*it).second;
          }
          cerr << endl;
          for (size_t j = 0 ; j < sub->getInstances().size() ; j++) {
          SPICE::Instance* inst = sub->getInstances()[j];
          cerr << "| | | + " << inst->getName();
          if (dynamic_cast<SPICE::Mosfet*>(inst)) {
          SPICE::Mosfet* mos = static_cast<SPICE::Mosfet*>(inst);
          cerr << " " << mos->getDrain() << " " << mos->getGrid() << " " << mos->getSource() << " " << mos->getBulk() << " " << mos->getModel();
          int k = 0;
          for (map<string, string>::const_iterator it =mos->getParameters().begin() ; it != mos->getParameters().end(); ++it, k++) {
          if (k%6 == 0)
          cerr << endl << "| | | | +";
          cerr << " " << (*it).first << "=" << (*it).second;
          }
          } else if (dynamic_cast<SPICE::Resistor*>(inst)) {
          SPICE::Resistor* res = static_cast<SPICE::Resistor*>(inst);
          cerr << " " << res->getFirst() << " " << res->getSecond() << " " << res->getValue();
          } else if (dynamic_cast<SPICE::Capacitor*>(inst)) {
          SPICE::Capacitor* capa = static_cast<SPICE::Capacitor*>(inst);
          cerr << " " << capa->getPositive() << " " << capa->getNegative() << " " << capa->getValue();
          } else {
          for (size_t k = 0 ; k < inst->getConnectors().size() ; k++)
          cerr << " " << inst->getConnectors()[k];
          cerr << " " << inst->getModel();
          int l = 0;
          for (map<string, string>::const_iterator it = inst->getParameters().begin() ; it != inst->getParameters().end() ; ++it, l++) {
          if (l%6 == 0)
          cerr << endl << "| | | | +";
          cerr << " " << (*it).first << "=" << (*it).second;
          }
          }
          cerr << endl;
          }
          }
          }
          // INSTANCES
          vector<SPICE::Instance*> insts = circuit->getInstances();
          if (insts.size()) {
          cerr << "| + instances" << endl;
          for (size_t i = 0 ; i < insts.size() ; i++) {
          SPICE::Instance* inst = insts[i];
          cerr << "| | + " << inst->getName();
          if (dynamic_cast<SPICE::Mosfet*>(inst)) {
          SPICE::Mosfet* mos = static_cast<SPICE::Mosfet*>(inst);
          cerr << " " << mos->getDrain() << " " << mos->getGrid() << " " << mos->getSource() << " " << mos->getBulk() << " " << mos->getModel();
          int j = 0;
          for (map<string, string>::const_iterator it =mos->getParameters().begin() ; it != mos->getParameters().end(); ++it, j++) {
          if (j%6 == 0)
          cerr << endl << "| | | | +";
          cerr << " " << (*it).first << "=" << (*it).second;
          }
          } else if (dynamic_cast<SPICE::Resistor*>(inst)) {
          SPICE::Resistor* res = static_cast<SPICE::Resistor*>(inst);
          cerr << " " << res->getFirst() << " " << res->getSecond() << " " << res->getValue();
          } else if (dynamic_cast<SPICE::Capacitor*>(inst)) {
          SPICE::Capacitor* capa = static_cast<SPICE::Capacitor*>(inst);
          cerr << " " << capa->getPositive() << " " << capa->getNegative() << " " << capa->getValue();
          } else {
          for (size_t k = 0 ; k < inst->getConnectors().size() ; k++)
          cerr << " " << inst->getConnectors()[k];
          cerr << " " << inst->getModel();
          int l = 0;
          for (map<string, string>::const_iterator it = inst->getParameters().begin() ; it != inst->getParameters().end() ; ++it, l++) {
          if (l%6 == 0)
          cerr << endl << "| | | +";
          cerr << " " << (*it).first << "=" << (*it).second;
          }
          }
          cerr << endl;
          }
          }
          return 0;
          }

          Driver

          This C++ code (driveSpice.cpp) generates an myOTA.spi file equivalent to the included one.

          #include <string>
          using namespace std;
          #include "vlsisapd/spice/Circuit.h"
          #include "vlsisapd/spice/Subckt.h"
          #include "vlsisapd/spice/Instances.h"
          int main(int argc, char * argv[]) {
          SPICE::Circuit* circuit = new SPICE::Circuit();
          circuit->setTitle("* Single-ended two-stage amplifier");
          // PARAMS
          circuit->addParameter("CC_VALUE", "2.8794pF");
          circuit->addParameter("L_VALUE" , "0.340e-6");
          // SUBCKTS
          // CurrentMirror
          SPICE::Subckt* CM = circuit->addSubckt("currentMirrorPMOS");
          CM->addInterface("d1");
          CM->addInterface("d2");
          CM->addInterface("s1");
          CM->addInterface("s2");
          CM->addParameter("l_val" , "0.0" );
          CM->addParameter("w_val" , "0.0" );
          CM->addParameter("nf_val" , "1" );
          CM->addParameter("aeq_val" , "100e-6");
          CM->addParameter("temp_val", "27" );
          SPICE::Instance* cmP3 = new SPICE::Mosfet("P3", "d1", "d1", "s1", "s1", "psvt");
          cmP3->addParameter("l" , "l_val" );
          cmP3->addParameter("wf" , "{w_val/nf_val}");
          cmP3->addParameter("nf" , "nf_val" );
          cmP3->addParameter("aeq" , "aeq_val" );
          cmP3->addParameter("tempsimu", "temp_val" );
          CM->addInstance(cmP3);
          SPICE::Instance* cmP4 = new SPICE::Mosfet("P4", "d2", "d1", "s2", "s2", "psvt");
          cmP4->addParameter("l" , "l_val" );
          cmP4->addParameter("wf" , "{w_val/nf_val}");
          cmP4->addParameter("nf" , "nf_val" );
          cmP4->addParameter("aeq" , "aeq_val" );
          cmP4->addParameter("tempsimu", "temp_val" );
          CM->addInstance(cmP4);
          // DifferentialPair
          SPICE::Subckt* DP = circuit->addSubckt("diffPairNMOS");
          DP->addInterface("d1");
          DP->addInterface("d2");
          DP->addInterface("g1");
          DP->addInterface("g2");
          DP->addInterface("s");
          DP->addInterface("b");
          DP->addParameter("l_val" , "0.0" );
          DP->addParameter("w_val" , "0.0" );
          DP->addParameter("nf_val" , "1" );
          DP->addParameter("aeq_val" , "100e-6");
          DP->addParameter("temp_val", "27" );
          SPICE::Instance* dpN1 = new SPICE::Mosfet("N1", "d1", "g1", "s", "b", "nsvt");
          dpN1->addParameter("l" , "l_val" );
          dpN1->addParameter("wf" , "{w_val/nf_val}");
          dpN1->addParameter("nf" , "nf_val" );
          dpN1->addParameter("aeq" , "aeq_val" );
          dpN1->addParameter("tempsimu", "temp_val" );
          DP->addInstance(dpN1);
          SPICE::Instance* dpN2 = new SPICE::Mosfet("N2", "d2", "g2", "s", "b", "nsvt");
          dpN2->addParameter("l" , "l_val" );
          dpN2->addParameter("wf" , "{w_val/nf_val}");
          dpN2->addParameter("nf" , "nf_val" );
          dpN2->addParameter("aeq" , "aeq_val" );
          dpN2->addParameter("tempsimu", "temp_val" );
          DP->addInstance(dpN2);
          //INSTANCES
          SPICE::Instance* iCM = new SPICE::Instance("CM", "currentMirrorPMOS");
          iCM->addConnector("1");
          iCM->addConnector("2");
          iCM->addConnector("vdd");
          iCM->addConnector("vdd");
          iCM->addParameter("l_val" , "L_VALUE" );
          iCM->addParameter("w_val" , "3.889618e-06");
          iCM->addParameter("nf_val", "2" );
          circuit->addInstance(iCM);
          SPICE::Instance* iDP = new SPICE::Instance("DP", "diffPairNMOS");
          iDP->addConnector("1");
          iDP->addConnector("2");
          iDP->addConnector("vim");
          iDP->addConnector("vip");
          iDP->addConnector("3");
          iDP->addConnector("vss");
          iDP->addParameter("l_val" , "L_VALUE" );
          iDP->addParameter("w_val" , "7.683346e-07");
          iDP->addParameter("nf_val", "4" );
          circuit->addInstance(iDP);
          SPICE::Instance* iP6 = new SPICE::Mosfet("P6", "vout", "2", "vdd", "vdd", "psvt");
          iP6->addParameter("l_val" , "L_VALUE" );
          iP6->addParameter("w_val" , "3.558995e-05");
          iP6->addParameter("nf_val", "20" );
          circuit->addInstance(iP6);
          SPICE::Instance* iN5 = new SPICE::Mosfet("N5", "3", "4", "vss", "vss", "nsvt");
          iN5->addParameter("l_val" , "L_VALUE" );
          iN5->addParameter("w_val" , "2.536703e-06");
          iN5->addParameter("nf_val", "4" );
          circuit->addInstance(iN5);
          SPICE::Instance* iN7 = new SPICE::Mosfet("N7", "vout", "4", "vss", "vss", "nsvt");
          iN7->addParameter("l_val" , "L_VALUE" );
          iN7->addParameter("w_val" , "1.069083e-05");
          iN7->addParameter("nf_val", "16" );
          circuit->addInstance(iN7);
          SPICE::Instance* iN8 = new SPICE::Mosfet("N8", "4", "4", "vss", "vss", "nsvt");
          iN8->addParameter("l_val" , "L_VALUE" );
          iN8->addParameter("w_val" , "2.536703e-06");
          iN8->addParameter("nf_val", "4" );
          circuit->addInstance(iN8);
          circuit->addInstance(new SPICE::Capacitor("C1", "vout", "2", "CC_VALUE"));
          circuit->writeToFile("./myOTA.spi");
          return 0;
          }
          Note
          In order to compile these codes, a CMakeLists.txt file is provided. User must set the $VLSISAPD_TOP variable before running these commands in the directory containing the CMakeLists.txt file:
          %> mkdir build; cd build
          %> cmake ..
          %> make

          @@ -72,13 +72,13 @@ Python

          Parser

          The following python script (parseSpice.py) is an example of how to parse a SPICE file using python module.

          import sys
          from SPICE import *
          def printContents(circuit):
          print "+", circuit.title
          if len(circuit.getIncludes()):
          print "| + includes"
          for include in circuit.getIncludes():
          print "| |", include
          if len(circuit.getLibraries()):
          print "| + libraries"
          for (lib, typ) in circuit.getLibraries():
          print "| |", lib, typ
          if len(circuit.getParameters()):
          print "| + parameters"
          for (name, value) in circuit.getParameters().items():
          print "| | %s=%s"%(name, value)
          if len(circuit.getOptions()):
          print "| + options"
          for (name, value) in circuit.getOptions().items():
          print "| | %s=%s"%(name, value)
          if len(circuit.getSources()):
          print "| + sources"
          for source in circuit.getSources():
          print "| |", source.getName(), source.getPositive(), source.getNegative(), source.getValue()
          if len(circuit.getSubckts()):
          print "| + subckts"
          for sub in circuit.getSubckts():
          print "| | +", sub.getName(),
          for interf in sub.getInterfaces():
          print interf,
          if len(sub.getParameters()):
          print "param:",
          for (name, value) in sub.getParameters().items():
          print "%s=%s"%(name,value),
          print
          for inst in sub.getInstances():
          print "| | | +", inst.getName(),
          if isinstance(inst, Mosfet):
          print inst.getDrain(), inst.getGrid(), inst.getSource(), inst.getBulk(), inst.getModel(),
          i = 0
          for (name, value) in inst.getParameters().items():
          if i%6 == 0:
          print
          print "| | | | +",
          print "%s=%s"%(name, value),
          i += 1
          elif isinstance(inst, Resistor):
          print inst.getFirst(), inst.getSecond(), inst.getValue(),
          elif isinstance(inst, Capacitor):
          print inst.getPositive(), inst.getNegative(), inst.getValue(),
          else:
          for conn in inst.getConnectors():
          print conn,
          print inst.getModel(),
          i = 0
          for (name, value) in inst.getParameters().items():
          if i%6 == 0:
          print
          print "| | | | +",
          print "%s=%s"%(name, value),
          i += 1
          print
          if len(circuit.getInstances()):
          print "| + instances"
          for inst in circuit.getInstances():
          print "| | | +", inst.getName(),
          if isinstance(inst, Mosfet):
          print inst.getDrain(), inst.getGrid(), inst.getSource(), inst.getBulk(), inst.getModel(),
          i = 0
          for (name, value) in inst.getParameters().items():
          if i%6 == 0:
          print
          print "| | | | +",
          print "%s=%s"%(name, value),
          i += 1
          elif isinstance(inst, Resistor):
          print inst.getFirst(), inst.getSecond(), inst.getValue(),
          elif isinstance(inst, Capacitor):
          print inst.getPositive(), inst.getNegative(), inst.getValue(),
          else:
          for conn in inst.getConnectors():
          print conn,
          print inst.getModel(),
          i = 0
          for (name, value) in inst.getParameters().items():
          if i%6 == 0:
          print
          print "| | | | +",
          print "%s=%s"%(name, value),
          i += 1
          print
          def usage():
          print "usage:", sys.argv[0], "[filename]"
          sys.exit(48)
          def main():
          if len(sys.argv) == 1:
          filename = "./OTA_miller.spi"
          elif len(sys.argv) == 2:
          filename = sys.argv[1]
          else:
          usage()
          circuit = Circuit.readFromFile(filename)
          printContents(circuit)
          if __name__ == "__main__":
          main()

          Driver

          -

          This python script (driveSpice.py) generates an myOTA.spi file equivalent to the included one.

          from SPICE import *
          circuit = Circuit()
          circuit.title = '* Single-ended two-stage amplifier'
          # PARAMS
          circuit.addParameter("CC_VALUE", "2.8794pF");
          circuit.addParameter("L_VALUE" , "0.340e-6");
          # SUBCKTS
          # CurrentMirror
          CM = circuit.addSubckt("currentMirrorPMOS");
          CM.addInterface("d1");
          CM.addInterface("d2");
          CM.addInterface("s1");
          CM.addInterface("s2");
          CM.addParameter("l_val" , "0.0" );
          CM.addParameter("w_val" , "0.0" );
          CM.addParameter("nf_val" , "1" );
          CM.addParameter("aeq_val" , "100e-6");
          CM.addParameter("temp_val", "27" );
          cmP3 = Mosfet("P3", "d1", "d1", "s1", "s1", "psvt");
          cmP3.addParameter("l" , "l_val" );
          cmP3.addParameter("wf" , "{w_val/nf_val}");
          cmP3.addParameter("nf" , "nf_val" );
          cmP3.addParameter("aeq" , "aeq_val" );
          cmP3.addParameter("tempsimu", "temp_val" );
          CM.addInstance(cmP3);
          cmP4 = Mosfet("P4", "d2", "d1", "s2", "s2", "psvt");
          cmP4.addParameter("l" , "l_val" );
          cmP4.addParameter("wf" , "{w_val/nf_val}");
          cmP4.addParameter("nf" , "nf_val" );
          cmP4.addParameter("aeq" , "aeq_val" );
          cmP4.addParameter("tempsimu", "temp_val" );
          CM.addInstance(cmP4);
          # DifferentialPair
          DP = circuit.addSubckt("diffPairNMOS");
          DP.addInterface("d1");
          DP.addInterface("d2");
          DP.addInterface("g1");
          DP.addInterface("g2");
          DP.addInterface("s");
          DP.addInterface("b");
          DP.addParameter("l_val" , "0.0" );
          DP.addParameter("w_val" , "0.0" );
          DP.addParameter("nf_val" , "1" );
          DP.addParameter("aeq_val" , "100e-6");
          DP.addParameter("temp_val", "27" );
          dpN1 = Mosfet("N1", "d1", "g1", "s", "b", "nsvt");
          dpN1.addParameter("l" , "l_val" );
          dpN1.addParameter("wf" , "{w_val/nf_val}");
          dpN1.addParameter("nf" , "nf_val" );
          dpN1.addParameter("aeq" , "aeq_val" );
          dpN1.addParameter("tempsimu", "temp_val" );
          DP.addInstance(dpN1);
          dpN2 = Mosfet("N2", "d2", "g2", "s", "b", "nsvt");
          dpN2.addParameter("l" , "l_val" );
          dpN2.addParameter("wf" , "{w_val/nf_val}");
          dpN2.addParameter("nf" , "nf_val" );
          dpN2.addParameter("aeq" , "aeq_val" );
          dpN2.addParameter("tempsimu", "temp_val" );
          DP.addInstance(dpN2);
          # INSTANCES
          iCM = Instance("CM", "currentMirrorPMOS");
          iCM.addConnector("1");
          iCM.addConnector("2");
          iCM.addConnector("vdd");
          iCM.addConnector("vdd");
          iCM.addParameter("l_val" , "L_VALUE" );
          iCM.addParameter("w_val" , "3.889618e-06");
          iCM.addParameter("nf_val", "2" );
          circuit.addInstance(iCM);
          iDP = Instance("DP", "diffPairNMOS");
          iDP.addConnector("1");
          iDP.addConnector("2");
          iDP.addConnector("vim");
          iDP.addConnector("vip");
          iDP.addConnector("3");
          iDP.addConnector("vss");
          iDP.addParameter("l_val" , "L_VALUE" );
          iDP.addParameter("w_val" , "7.683346e-07");
          iDP.addParameter("nf_val", "4" );
          circuit.addInstance(iDP);
          iP6 = Mosfet("P6", "vout", "2", "vdd", "vdd", "psvt");
          iP6.addParameter("l_val" , "L_VALUE" );
          iP6.addParameter("w_val" , "3.558995e-05");
          iP6.addParameter("nf_val", "20" );
          circuit.addInstance(iP6);
          iN5 = Mosfet("N5", "3", "4", "vss", "vss", "nsvt");
          iN5.addParameter("l_val" , "L_VALUE" );
          iN5.addParameter("w_val" , "2.536703e-06");
          iN5.addParameter("nf_val", "4" );
          circuit.addInstance(iN5);
          iN7 = Mosfet("N7", "vout", "4", "vss", "vss", "nsvt");
          iN7.addParameter("l_val" , "L_VALUE" );
          iN7.addParameter("w_val" , "1.069083e-05");
          iN7.addParameter("nf_val", "16" );
          circuit.addInstance(iN7);
          iN8 = Mosfet("N8", "4", "4", "vss", "vss", "nsvt");
          iN8.addParameter("l_val" , "L_VALUE" );
          iN8.addParameter("w_val" , "2.536703e-06");
          iN8.addParameter("nf_val", "4" );
          circuit.addInstance(iN8);
          capa = Capacitor("C1", "vout", "2", "CC_VALUE")
          circuit.addInstance(capa);
          circuit.writeToFile("./myOTA.spi");
          Note
          In order to run these two scripts (parseSpice.py & driveSpice.py), user must ensure that $PYTHONPATH variable points to the directory containing SPICE.so module.
          +

          This python script (driveSpice.py) generates an myOTA.spi file equivalent to the included one.

          from SPICE import *
          circuit = Circuit()
          circuit.title = '* Single-ended two-stage amplifier'
          # PARAMS
          circuit.addParameter("CC_VALUE", "2.8794pF");
          circuit.addParameter("L_VALUE" , "0.340e-6");
          # SUBCKTS
          # CurrentMirror
          CM = circuit.addSubckt("currentMirrorPMOS");
          CM.addInterface("d1");
          CM.addInterface("d2");
          CM.addInterface("s1");
          CM.addInterface("s2");
          CM.addParameter("l_val" , "0.0" );
          CM.addParameter("w_val" , "0.0" );
          CM.addParameter("nf_val" , "1" );
          CM.addParameter("aeq_val" , "100e-6");
          CM.addParameter("temp_val", "27" );
          cmP3 = Mosfet("P3", "d1", "d1", "s1", "s1", "psvt");
          cmP3.addParameter("l" , "l_val" );
          cmP3.addParameter("wf" , "{w_val/nf_val}");
          cmP3.addParameter("nf" , "nf_val" );
          cmP3.addParameter("aeq" , "aeq_val" );
          cmP3.addParameter("tempsimu", "temp_val" );
          CM.addInstance(cmP3);
          cmP4 = Mosfet("P4", "d2", "d1", "s2", "s2", "psvt");
          cmP4.addParameter("l" , "l_val" );
          cmP4.addParameter("wf" , "{w_val/nf_val}");
          cmP4.addParameter("nf" , "nf_val" );
          cmP4.addParameter("aeq" , "aeq_val" );
          cmP4.addParameter("tempsimu", "temp_val" );
          CM.addInstance(cmP4);
          # DifferentialPair
          DP = circuit.addSubckt("diffPairNMOS");
          DP.addInterface("d1");
          DP.addInterface("d2");
          DP.addInterface("g1");
          DP.addInterface("g2");
          DP.addInterface("s");
          DP.addInterface("b");
          DP.addParameter("l_val" , "0.0" );
          DP.addParameter("w_val" , "0.0" );
          DP.addParameter("nf_val" , "1" );
          DP.addParameter("aeq_val" , "100e-6");
          DP.addParameter("temp_val", "27" );
          dpN1 = Mosfet("N1", "d1", "g1", "s", "b", "nsvt");
          dpN1.addParameter("l" , "l_val" );
          dpN1.addParameter("wf" , "{w_val/nf_val}");
          dpN1.addParameter("nf" , "nf_val" );
          dpN1.addParameter("aeq" , "aeq_val" );
          dpN1.addParameter("tempsimu", "temp_val" );
          DP.addInstance(dpN1);
          dpN2 = Mosfet("N2", "d2", "g2", "s", "b", "nsvt");
          dpN2.addParameter("l" , "l_val" );
          dpN2.addParameter("wf" , "{w_val/nf_val}");
          dpN2.addParameter("nf" , "nf_val" );
          dpN2.addParameter("aeq" , "aeq_val" );
          dpN2.addParameter("tempsimu", "temp_val" );
          DP.addInstance(dpN2);
          # INSTANCES
          iCM = Instance("CM", "currentMirrorPMOS");
          iCM.addConnector("1");
          iCM.addConnector("2");
          iCM.addConnector("vdd");
          iCM.addConnector("vdd");
          iCM.addParameter("l_val" , "L_VALUE" );
          iCM.addParameter("w_val" , "3.889618e-06");
          iCM.addParameter("nf_val", "2" );
          circuit.addInstance(iCM);
          iDP = Instance("DP", "diffPairNMOS");
          iDP.addConnector("1");
          iDP.addConnector("2");
          iDP.addConnector("vim");
          iDP.addConnector("vip");
          iDP.addConnector("3");
          iDP.addConnector("vss");
          iDP.addParameter("l_val" , "L_VALUE" );
          iDP.addParameter("w_val" , "7.683346e-07");
          iDP.addParameter("nf_val", "4" );
          circuit.addInstance(iDP);
          iP6 = Mosfet("P6", "vout", "2", "vdd", "vdd", "psvt");
          iP6.addParameter("l_val" , "L_VALUE" );
          iP6.addParameter("w_val" , "3.558995e-05");
          iP6.addParameter("nf_val", "20" );
          circuit.addInstance(iP6);
          iN5 = Mosfet("N5", "3", "4", "vss", "vss", "nsvt");
          iN5.addParameter("l_val" , "L_VALUE" );
          iN5.addParameter("w_val" , "2.536703e-06");
          iN5.addParameter("nf_val", "4" );
          circuit.addInstance(iN5);
          iN7 = Mosfet("N7", "vout", "4", "vss", "vss", "nsvt");
          iN7.addParameter("l_val" , "L_VALUE" );
          iN7.addParameter("w_val" , "1.069083e-05");
          iN7.addParameter("nf_val", "16" );
          circuit.addInstance(iN7);
          iN8 = Mosfet("N8", "4", "4", "vss", "vss", "nsvt");
          iN8.addParameter("l_val" , "L_VALUE" );
          iN8.addParameter("w_val" , "2.536703e-06");
          iN8.addParameter("nf_val", "4" );
          circuit.addInstance(iN8);
          capa = Capacitor("C1", "vout", "2", "CC_VALUE")
          circuit.addInstance(capa);
          circuit.writeToFile("./myOTA.spi");
          Note
          In order to run these two scripts (parseSpice.py & driveSpice.py), user must ensure that $PYTHONPATH variable points to the directory containing SPICE.so module.


          - +
          Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/vlsisapd/doc/html/struct_s_p_i_c_e_1_1map__item.html b/vlsisapd/doc/html/struct_s_p_i_c_e_1_1map__item.html index 2a0e7863..5890f94c 100644 --- a/vlsisapd/doc/html/struct_s_p_i_c_e_1_1map__item.html +++ b/vlsisapd/doc/html/struct_s_p_i_c_e_1_1map__item.html @@ -38,7 +38,7 @@
          - +
          Generated by doxygen 1.8.14 on Thu Oct 18 2018Generated by doxygen 1.8.14 on Sun May 26 2019 Return to top of page
          diff --git a/vlsisapd/doc/latex/annotated.tex b/vlsisapd/doc/latex/annotated.tex index 7dab8c9b..a91bf174 100644 --- a/vlsisapd/doc/latex/annotated.tex +++ b/vlsisapd/doc/latex/annotated.tex @@ -1,63 +1,51 @@ \section{Data Structures} Here are the data structures with brief descriptions\+:\begin{DoxyCompactList} \item\contentsline{section}{\mbox{\hyperlink{class_d_t_r_1_1_a_rule}{A\+Rule}} }{\pageref{class_d_t_r_1_1_a_rule}}{} -\item\contentsline{section}{\mbox{\hyperlink{class_open_chams_1_1_bloc}{Bloc}} }{\pageref{class_open_chams_1_1_bloc}}{} +\item\contentsline{section}{\mbox{\hyperlink{class_bloc}{Bloc}} }{\pageref{class_bloc}}{} \item\contentsline{section}{\mbox{\hyperlink{class_s_p_i_c_e_1_1_capacitor}{Capacitor}} }{\pageref{class_s_p_i_c_e_1_1_capacitor}}{} \item\contentsline{section}{\mbox{\hyperlink{class_c_i_f_1_1_circuit}{Circuit}} }{\pageref{class_c_i_f_1_1_circuit}}{} -\item\contentsline{section}{\mbox{\hyperlink{class_open_chams_1_1_circuit}{Circuit}} }{\pageref{class_open_chams_1_1_circuit}}{} \item\contentsline{section}{\mbox{\hyperlink{class_s_p_i_c_e_1_1_circuit}{Circuit}} }{\pageref{class_s_p_i_c_e_1_1_circuit}}{} -\item\contentsline{section}{\mbox{\hyperlink{class_open_chams_1_1_net_1_1_connection}{Net\+::\+Connection}} }{\pageref{class_open_chams_1_1_net_1_1_connection}}{} -\item\contentsline{section}{\mbox{\hyperlink{class_open_chams_1_1_operator_1_1_constraint}{Operator\+::\+Constraint}} }{\pageref{class_open_chams_1_1_operator_1_1_constraint}}{} +\item\contentsline{section}{\mbox{\hyperlink{class_circuit}{Circuit}} }{\pageref{class_circuit}}{} +\item\contentsline{section}{\mbox{\hyperlink{class_net_1_1_connection}{Net\+::\+Connection}} }{\pageref{class_net_1_1_connection}}{} +\item\contentsline{section}{\mbox{\hyperlink{class_operator_1_1_constraint}{Operator\+::\+Constraint}} }{\pageref{class_operator_1_1_constraint}}{} \item\contentsline{section}{\mbox{\hyperlink{class_s_p_i_c_e_1_1_current}{Current}} }{\pageref{class_s_p_i_c_e_1_1_current}}{} -\item\contentsline{section}{\mbox{\hyperlink{class_open_chams_1_1_d_d_p}{D\+DP}} }{\pageref{class_open_chams_1_1_d_d_p}}{} -\item\contentsline{section}{\mbox{\hyperlink{class_open_chams_1_1_designer_cstr_o_c}{Designer\+Cstr\+OC}} }{\pageref{class_open_chams_1_1_designer_cstr_o_c}}{} -\item\contentsline{section}{\mbox{\hyperlink{class_open_chams_1_1_device}{Device}} }{\pageref{class_open_chams_1_1_device}}{} -\item\contentsline{section}{\mbox{\hyperlink{class_open_chams_1_1_d_slicing_node}{D\+Slicing\+Node}} }{\pageref{class_open_chams_1_1_d_slicing_node}}{} +\item\contentsline{section}{\mbox{\hyperlink{class_device}{Device}} }{\pageref{class_device}}{} \item\contentsline{section}{\mbox{\hyperlink{class_d_t_r_1_1_d_t_r_exception}{D\+T\+R\+Exception}} }{\pageref{class_d_t_r_1_1_d_t_r_exception}}{} \item\contentsline{section}{\mbox{\hyperlink{class_a_g_d_s_1_1_element}{Element}} }{\pageref{class_a_g_d_s_1_1_element}}{} -\item\contentsline{section}{\mbox{\hyperlink{class_open_chams_1_1_equation}{Equation}} }{\pageref{class_open_chams_1_1_equation}}{} -\item\contentsline{section}{\mbox{\hyperlink{class_open_chams_1_1_group}{Group}} }{\pageref{class_open_chams_1_1_group}}{} -\item\contentsline{section}{\mbox{\hyperlink{class_open_chams_1_1_high_level_cstr}{High\+Level\+Cstr}} }{\pageref{class_open_chams_1_1_high_level_cstr}}{} -\item\contentsline{section}{\mbox{\hyperlink{class_open_chams_1_1_h_slicing_node}{H\+Slicing\+Node}} }{\pageref{class_open_chams_1_1_h_slicing_node}}{} -\item\contentsline{section}{\mbox{\hyperlink{class_open_chams_1_1_h_v_slicing_node}{H\+V\+Slicing\+Node}} }{\pageref{class_open_chams_1_1_h_v_slicing_node}}{} -\item\contentsline{section}{\mbox{\hyperlink{class_open_chams_1_1_schematic_1_1_infos}{Schematic\+::\+Infos}} }{\pageref{class_open_chams_1_1_schematic_1_1_infos}}{} -\item\contentsline{section}{\mbox{\hyperlink{class_open_chams_1_1_instance}{Instance}} }{\pageref{class_open_chams_1_1_instance}}{} +\item\contentsline{section}{\mbox{\hyperlink{class_group}{Group}} }{\pageref{class_group}}{} +\item\contentsline{section}{\mbox{\hyperlink{class_schematic_1_1_infos}{Schematic\+::\+Infos}} }{\pageref{class_schematic_1_1_infos}}{} \item\contentsline{section}{\mbox{\hyperlink{class_s_p_i_c_e_1_1_instance}{Instance}} }{\pageref{class_s_p_i_c_e_1_1_instance}}{} -\item\contentsline{section}{\mbox{\hyperlink{class_open_chams_1_1_instance_point}{Instance\+Point}} }{\pageref{class_open_chams_1_1_instance_point}}{} -\item\contentsline{section}{\mbox{\hyperlink{class_open_chams_1_1_intermediate_point}{Intermediate\+Point}} }{\pageref{class_open_chams_1_1_intermediate_point}}{} -\item\contentsline{section}{\mbox{\hyperlink{class_open_chams_1_1_layout}{Layout}} }{\pageref{class_open_chams_1_1_layout}}{} +\item\contentsline{section}{\mbox{\hyperlink{class_instance}{Instance}} }{\pageref{class_instance}}{} +\item\contentsline{section}{\mbox{\hyperlink{class_instance_point}{Instance\+Point}} }{\pageref{class_instance_point}}{} +\item\contentsline{section}{\mbox{\hyperlink{class_intermediate_point}{Intermediate\+Point}} }{\pageref{class_intermediate_point}}{} +\item\contentsline{section}{\mbox{\hyperlink{class_layout}{Layout}} }{\pageref{class_layout}}{} \item\contentsline{section}{\mbox{\hyperlink{class_a_g_d_s_1_1_library}{Library}} }{\pageref{class_a_g_d_s_1_1_library}}{} -\item\contentsline{section}{\mbox{\hyperlink{struct_open_chams_1_1map__item}{map\+\_\+item$<$ Key, Val $>$}} }{\pageref{struct_open_chams_1_1map__item}}{} \item\contentsline{section}{\mbox{\hyperlink{struct_s_p_i_c_e_1_1map__item}{map\+\_\+item$<$ Key, Val $>$}} }{\pageref{struct_s_p_i_c_e_1_1map__item}}{} \item\contentsline{section}{\mbox{\hyperlink{class_s_p_i_c_e_1_1_mosfet}{Mosfet}} }{\pageref{class_s_p_i_c_e_1_1_mosfet}}{} \item\contentsline{section}{\mbox{\hyperlink{class_name}{Name}} }{\pageref{class_name}}{} -\item\contentsline{section}{\mbox{\hyperlink{class_open_chams_1_1_net}{Net}} }{\pageref{class_open_chams_1_1_net}}{} -\item\contentsline{section}{\mbox{\hyperlink{class_open_chams_1_1_netlist}{Netlist}} }{\pageref{class_open_chams_1_1_netlist}}{} -\item\contentsline{section}{\mbox{\hyperlink{class_open_chams_1_1_node}{Node}} }{\pageref{class_open_chams_1_1_node}}{} -\item\contentsline{section}{\mbox{\hyperlink{class_open_chams_1_1_n_r_c_cstr}{N\+R\+C\+Cstr}} }{\pageref{class_open_chams_1_1_n_r_c_cstr}}{} -\item\contentsline{section}{\mbox{\hyperlink{class_open_chams_1_1_open_chams_exception}{Open\+Chams\+Exception}} }{\pageref{class_open_chams_1_1_open_chams_exception}}{} -\item\contentsline{section}{\mbox{\hyperlink{class_open_chams_1_1_operator}{Operator}} }{\pageref{class_open_chams_1_1_operator}}{} -\item\contentsline{section}{\mbox{\hyperlink{class_open_chams_1_1_parameters}{Parameters}} }{\pageref{class_open_chams_1_1_parameters}}{} +\item\contentsline{section}{\mbox{\hyperlink{class_net}{Net}} }{\pageref{class_net}}{} +\item\contentsline{section}{\mbox{\hyperlink{class_netlist}{Netlist}} }{\pageref{class_netlist}}{} +\item\contentsline{section}{\mbox{\hyperlink{class_node}{Node}} }{\pageref{class_node}}{} +\item\contentsline{section}{\mbox{\hyperlink{class_open_chams_exception}{Open\+Chams\+Exception}} }{\pageref{class_open_chams_exception}}{} +\item\contentsline{section}{\mbox{\hyperlink{class_operator}{Operator}} }{\pageref{class_operator}}{} +\item\contentsline{section}{\mbox{\hyperlink{class_parameters}{Parameters}} }{\pageref{class_parameters}}{} \item\contentsline{section}{\mbox{\hyperlink{class_c_i_f_1_1_polygon}{Polygon}} }{\pageref{class_c_i_f_1_1_polygon}}{} -\item\contentsline{section}{\mbox{\hyperlink{class_open_chams_1_1_port}{Port}} }{\pageref{class_open_chams_1_1_port}}{} -\item\contentsline{section}{\mbox{\hyperlink{class_open_chams_1_1_port_point}{Port\+Point}} }{\pageref{class_open_chams_1_1_port_point}}{} +\item\contentsline{section}{\mbox{\hyperlink{class_port}{Port}} }{\pageref{class_port}}{} +\item\contentsline{section}{\mbox{\hyperlink{class_port_point}{Port\+Point}} }{\pageref{class_port_point}}{} \item\contentsline{section}{\mbox{\hyperlink{class_a_g_d_s_1_1_rectangle}{Rectangle}} }{\pageref{class_a_g_d_s_1_1_rectangle}}{} \item\contentsline{section}{\mbox{\hyperlink{class_s_p_i_c_e_1_1_resistor}{Resistor}} }{\pageref{class_s_p_i_c_e_1_1_resistor}}{} -\item\contentsline{section}{\mbox{\hyperlink{class_open_chams_1_1_r_slicing_node}{R\+Slicing\+Node}} }{\pageref{class_open_chams_1_1_r_slicing_node}}{} \item\contentsline{section}{\mbox{\hyperlink{class_d_t_r_1_1_rule}{Rule}} }{\pageref{class_d_t_r_1_1_rule}}{} -\item\contentsline{section}{\mbox{\hyperlink{class_open_chams_1_1_schematic}{Schematic}} }{\pageref{class_open_chams_1_1_schematic}}{} -\item\contentsline{section}{\mbox{\hyperlink{class_open_chams_1_1_simul_model}{Simul\+Model}} }{\pageref{class_open_chams_1_1_simul_model}}{} -\item\contentsline{section}{\mbox{\hyperlink{class_open_chams_1_1_sizing}{Sizing}} }{\pageref{class_open_chams_1_1_sizing}}{} -\item\contentsline{section}{\mbox{\hyperlink{class_open_chams_1_1_slicing_node}{Slicing\+Node}} }{\pageref{class_open_chams_1_1_slicing_node}}{} +\item\contentsline{section}{\mbox{\hyperlink{class_schematic}{Schematic}} }{\pageref{class_schematic}}{} +\item\contentsline{section}{\mbox{\hyperlink{class_simul_model}{Simul\+Model}} }{\pageref{class_simul_model}}{} +\item\contentsline{section}{\mbox{\hyperlink{class_sizing}{Sizing}} }{\pageref{class_sizing}}{} \item\contentsline{section}{\mbox{\hyperlink{class_s_p_i_c_e_1_1_source}{Source}} }{\pageref{class_s_p_i_c_e_1_1_source}}{} \item\contentsline{section}{\mbox{\hyperlink{class_s_p_i_c_e_1_1_spice_exception}{Spice\+Exception}} }{\pageref{class_s_p_i_c_e_1_1_spice_exception}}{} \item\contentsline{section}{\mbox{\hyperlink{class_a_g_d_s_1_1_structure}{Structure}} }{\pageref{class_a_g_d_s_1_1_structure}}{} \item\contentsline{section}{\mbox{\hyperlink{class_s_p_i_c_e_1_1_subckt}{Subckt}} }{\pageref{class_s_p_i_c_e_1_1_subckt}}{} \item\contentsline{section}{\mbox{\hyperlink{class_d_t_r_1_1_techno}{Techno}} }{\pageref{class_d_t_r_1_1_techno}}{} -\item\contentsline{section}{\mbox{\hyperlink{class_open_chams_1_1_transistor}{Transistor}} }{\pageref{class_open_chams_1_1_transistor}}{} +\item\contentsline{section}{\mbox{\hyperlink{class_transistor}{Transistor}} }{\pageref{class_transistor}}{} \item\contentsline{section}{\mbox{\hyperlink{class_s_p_i_c_e_1_1_value}{Value}} }{\pageref{class_s_p_i_c_e_1_1_value}}{} \item\contentsline{section}{\mbox{\hyperlink{class_s_p_i_c_e_1_1_voltage}{Voltage}} }{\pageref{class_s_p_i_c_e_1_1_voltage}}{} -\item\contentsline{section}{\mbox{\hyperlink{class_open_chams_1_1_v_slicing_node}{V\+Slicing\+Node}} }{\pageref{class_open_chams_1_1_v_slicing_node}}{} -\item\contentsline{section}{\mbox{\hyperlink{class_open_chams_1_1_wire}{Wire}} }{\pageref{class_open_chams_1_1_wire}}{} -\item\contentsline{section}{\mbox{\hyperlink{class_open_chams_1_1_wire_point}{Wire\+Point}} }{\pageref{class_open_chams_1_1_wire_point}}{} +\item\contentsline{section}{\mbox{\hyperlink{class_wire}{Wire}} }{\pageref{class_wire}}{} +\item\contentsline{section}{\mbox{\hyperlink{class_wire_point}{Wire\+Point}} }{\pageref{class_wire_point}}{} \end{DoxyCompactList} diff --git a/vlsisapd/doc/latex/class_a_g_d_s_1_1_element.pdf b/vlsisapd/doc/latex/class_a_g_d_s_1_1_element.pdf index dea56c0c552e2ca0d704af3ac1c3a6e373a7aa34..16fbe731653ce8bad7e1241699bed98568bd46f6 100644 GIT binary patch delta 363 zcmZ3dc3O3V6E~BI$z~UBTSi{vM8jkg%hY7uB=c1B$$dPX7$WkMoq5d!EOiY`b&bqI z49%^K%&bf-CU^2`V+tPO)f5cP%g)O$&vPs&$jMAjEXmBD{F&Dsi>YaR_86iPlTY!f zV2H|3mf|ns2+b?WEXhetnLL$We)DI3IYtvp15+b2LvtfD6ANtvBXt7Jjjc=!CU^2`V+tPO)ns$Yuc%BV`)i7ev!sx0YPVGV*`uLVS*BjvBqY`=B_TLjs`AM$@Bo>ua6s4wdnV6WHbE&Gj`nz!f0Q2^M7XSbN diff --git a/vlsisapd/doc/latex/class_a_g_d_s_1_1_rectangle.pdf b/vlsisapd/doc/latex/class_a_g_d_s_1_1_rectangle.pdf index acb4ae0538ba7086b8870ad784d4fae6e17765da..8af0862f582ad11150fdad813ba697efa6e4e951 100644 GIT binary patch delta 388 zcmZ3jc0zT7JvWny$!14xTSi{vM8jkg%hY7uB=c1B$%?%4lUMO%VTgtbSn3*>>Kd7a z7@AudnOT`wOm5@V#uPlrt0@?omz|eip66Ilkdv95Sdy7P`2(*zhKUN3Q~2yKL?tF4 z=TpHDm7grmU!)qESCUzhlbT|qUzCz&m6K@)VL0ZL09h%?R$$r9@AwrMO)L#ejm!+q zjm%6ev<-~Z4Gh#Zx%7SWQ(O{DQZ-zxj0_AhRZK1rbY?a(HQKyQP=Ybm)z#9##lXzc z&Ct-z&CI~mz|zvu!qm~i5v0-0+1$>Cpo&;7J3Fr8lEk8tilWpsE)!#OQ!Z6iSARDy E0AF-ypa1{> delta 461 zcmX@1x>{|6JvWo3`DRCMTSi{fBm*;JLz84(gT%D7$%?%4lUMO%VTgtbSm+uW=o(st z7@Aob8(WzeOm5@V#uPlrtI6h)Us0K!I{7!RJBBd|lk@rPFhnILU*c225S5>-#9zee zoRe5w?3b9EI(ZJiylqOdRdP{kVo83HolQ|nnpJRWA%u~WX{VuSqYn}TG9e7Gq&`B+ z=AHZsj7b)T28I@fX2!-Q2HFNj>IMetnq2z6`6(`mC8-)NRz@IMEGj}WOL9^*;I0Ac zafUcV1LEC0pon8>Nk)E=#$;YWXJ%sq)6Kzx5{$8KCI-e9ZsrEYt}Z5)=Ej!JW@g3) u&Q7M5h9<6tF6K^lHUw3~a@pB&6_+Fyl~fd^rg52=n455^s=E5SaRC6mR(<#Y diff --git a/vlsisapd/doc/latex/class_bloc.tex b/vlsisapd/doc/latex/class_bloc.tex new file mode 100644 index 00000000..0cf56ee8 --- /dev/null +++ b/vlsisapd/doc/latex/class_bloc.tex @@ -0,0 +1,6 @@ +\hypertarget{class_bloc}{}\section{Bloc Class Reference} +\label{class_bloc}\index{Bloc@{Bloc}} + + +\subsection{Detailed Description} +This class describes a bloc of the placement tree. \ No newline at end of file diff --git a/vlsisapd/doc/latex/class_circuit.tex b/vlsisapd/doc/latex/class_circuit.tex new file mode 100644 index 00000000..32aa8176 --- /dev/null +++ b/vlsisapd/doc/latex/class_circuit.tex @@ -0,0 +1,6 @@ +\hypertarget{class_circuit}{}\section{Circuit Class Reference} +\label{class_circuit}\index{Circuit@{Circuit}} + + +\subsection{Detailed Description} +This class is the root class whihch means that having this object in hand allows to get/set any information contained in the Open\+Chams file parsed/drived. \ No newline at end of file diff --git a/vlsisapd/doc/latex/class_d_t_r_1_1_a_rule.pdf b/vlsisapd/doc/latex/class_d_t_r_1_1_a_rule.pdf index e2e20dc71a34bb7601c336e88e24de9c7a6be1ec..dc71c86f9791df33baf52be7329083aa2191f70b 100644 GIT binary patch delta 387 zcmcbu@I!t>J_nPD$>u^1TSi{vM8jkg%hY7uB=c1B$$?z*lW%cmVTgtbSn3*>>Kd7a z7@AudnOT`wOy0(&jVbt%OH(j3FFP;4JkPP9ASW|9u_QBpvI4g|hKUN3r*PY0h)PWU z&aHwWDnHqsr${w4uOzc1CpE=JzbGZmDkswp!f?zf0kTq(t-!LI<#-hsO)L#ejm!+q zjm%6ev<-~Z4Gh#Zx%7SWQ(O{DQZ-zxj0_AhRZL#M=fY%cwD}pI1Y@kDD^QK0k)g4v zxwD0dg{hmRxuKi0xs#)Xo1=-Vv7wy}K^3uFc6MCFC5c5P6-B9OT*hXmrd+D3uKsRZ E0K}VVod5s; delta 460 zcmew%e_LTgJ_nPf`Q}0nTSi{fBm*;JLz84(gT%D7$$?z*lW%cmVTgtbSm+uW=o(st z7@Aob8(WzeOy0(&jVbt%OOwqdzoIfdb+R_MJBBd|ljn2WVTejhX5vx75S5=C#8brS zoRe5w?3b9EI{6HbylqOdRdP{kVo83HolQ|nnpJRWA%u~WX{VuSqYn}TG9e7Gq&`B+ z=9fGQj7b)T28I@fX2!-Q2HFNj>IMetnq2z6`6(`mC8-)NRz@IMEGj}WOL9^*;I0Ac zafUcV1LEC0pon8>Nk)E=#$;PQ7bXkS&CPrgjIri!ZsrCC#>Or#hNg}t76xV(M&?dN r76wL+Kv7p$XFD5$Dq^|p?6`_c5{pVIic-_KjLl6=xKveL{oS|#Jzswr diff --git a/vlsisapd/doc/latex/class_d_t_r_1_1_rule.pdf b/vlsisapd/doc/latex/class_d_t_r_1_1_rule.pdf index 1b06ce01e646a36e9a19bb88a1bfde0c39c8009f..e7f8c7bb0ca33d4bce3db42f5cd446fdf1eea234 100644 GIT binary patch delta 399 zcmcbk@Kb(60SA+b$>t&sTSi{vM8jkg%hY7uB=c1B$q%?CCiil)Prl8Wg;j=QauJuQ zfTga1sjiV(h@rWak(rf=#pLZ=+L(f$xHJVr^Rn~u%kvxy3UV@&6H7AlCo6KhV>Q_g zL(~RC1mZRio+8!Iypqh4oYWK>{i2jKtDHHnuV`n7o}!8&mKTmnNG_enn+^>SP^mcMPNAFhnFKGxMlmh{{h6<|*QI z&PgmT_Djr7oqU!@-ZmxKD!C{%u_V99&Za0O%_=yx5W>jGwA0YE(FchEnGgn8QXipZ z^D7<&#v}_v149c#Gh<^D18oB%bpr!+O)h=k{1lhOl2i>BD7jsJsS4#^+S7$d%CsPXx sCnHNo6E{Z_Lq|Isf+}LU?CiLTOA?DpDvDCmxQxwBO}SK6UH#p-0Dka*YXATM diff --git a/vlsisapd/doc/latex/class_device.tex b/vlsisapd/doc/latex/class_device.tex new file mode 100644 index 00000000..a1b23254 --- /dev/null +++ b/vlsisapd/doc/latex/class_device.tex @@ -0,0 +1,12 @@ +\hypertarget{class_device}{}\section{Device Class Reference} +\label{class_device}\index{Device@{Device}} + + +\subsection{Detailed Description} +This class describes a \mbox{\hyperlink{class_device}{Device}}. + +A device is a leaf instance which means its model is not defined in a external file but is described inside the device. As an instance, the \mbox{\hyperlink{class_device}{Device}} inherits all \mbox{\hyperlink{class_instance}{Instance}} methods and adds specific properties\+: mos type, bulk connection and list of internal transistors. + +\begin{DoxyNote}{Note} +Althought today \mbox{\hyperlink{class_device}{Device}} object only consider Transistor\+Family devices, it will have to consider other devices, such as Capacitor when C\+H\+A\+MS project will. +\end{DoxyNote} diff --git a/vlsisapd/doc/latex/class_group.tex b/vlsisapd/doc/latex/class_group.tex new file mode 100644 index 00000000..049f4650 --- /dev/null +++ b/vlsisapd/doc/latex/class_group.tex @@ -0,0 +1,6 @@ +\hypertarget{class_group}{}\section{Group Class Reference} +\label{class_group}\index{Group@{Group}} + + +\subsection{Detailed Description} +This class describes a group of the placement tree. \ No newline at end of file diff --git a/vlsisapd/doc/latex/class_instance.tex b/vlsisapd/doc/latex/class_instance.tex new file mode 100644 index 00000000..d013b921 --- /dev/null +++ b/vlsisapd/doc/latex/class_instance.tex @@ -0,0 +1,8 @@ +\hypertarget{class_instance}{}\section{Instance Class Reference} +\label{class_instance}\index{Instance@{Instance}} + + +\subsection{Detailed Description} +This class describes an instance. + +Basicaly an instance is a subcircuit of the current (top) circuit. \ No newline at end of file diff --git a/vlsisapd/doc/latex/class_instance_point.tex b/vlsisapd/doc/latex/class_instance_point.tex new file mode 100644 index 00000000..83b27135 --- /dev/null +++ b/vlsisapd/doc/latex/class_instance_point.tex @@ -0,0 +1,6 @@ +\hypertarget{class_instance_point}{}\section{Instance\+Point Class Reference} +\label{class_instance_point}\index{Instance\+Point@{Instance\+Point}} + + +\subsection{Detailed Description} +This class describes a wire point associated to an instance\textquotesingle{}s connector. \ No newline at end of file diff --git a/vlsisapd/doc/latex/class_intermediate_point.tex b/vlsisapd/doc/latex/class_intermediate_point.tex new file mode 100644 index 00000000..e07bf698 --- /dev/null +++ b/vlsisapd/doc/latex/class_intermediate_point.tex @@ -0,0 +1,6 @@ +\hypertarget{class_intermediate_point}{}\section{Intermediate\+Point Class Reference} +\label{class_intermediate_point}\index{Intermediate\+Point@{Intermediate\+Point}} + + +\subsection{Detailed Description} +This class describes a wire point defined by its (x,y) coordinates. \ No newline at end of file diff --git a/vlsisapd/doc/latex/class_layout.tex b/vlsisapd/doc/latex/class_layout.tex new file mode 100644 index 00000000..a8c2ec22 --- /dev/null +++ b/vlsisapd/doc/latex/class_layout.tex @@ -0,0 +1,12 @@ +\hypertarget{class_layout}{}\section{Layout Class Reference} +\label{class_layout}\index{Layout@{Layout}} + + +\subsection{Detailed Description} +This class describes layout informations for an \mbox{\hyperlink{class_instance}{Instance}}. + +The \mbox{\hyperlink{class_layout}{Layout}} object is used to store all informations relative to physical layout of the instance (such as the layout style). + +\begin{DoxyNote}{Note} +The \mbox{\hyperlink{class_layout}{Layout}} object is optionnal in \mbox{\hyperlink{class_circuit}{Circuit}}. +\end{DoxyNote} diff --git a/vlsisapd/doc/latex/class_net.tex b/vlsisapd/doc/latex/class_net.tex new file mode 100644 index 00000000..281d0eba --- /dev/null +++ b/vlsisapd/doc/latex/class_net.tex @@ -0,0 +1,11 @@ +\hypertarget{class_net}{}\section{Net Class Reference} +\label{class_net}\index{Net@{Net}} +\subsection*{Data Structures} +\begin{DoxyCompactItemize} +\item +class \mbox{\hyperlink{class_net_1_1_connection}{Connection}} +\end{DoxyCompactItemize} + + +\subsection{Detailed Description} +This class describes a \mbox{\hyperlink{class_net}{Net}}. \ No newline at end of file diff --git a/vlsisapd/doc/latex/class_net_1_1_connection.tex b/vlsisapd/doc/latex/class_net_1_1_connection.tex new file mode 100644 index 00000000..7503bd4f --- /dev/null +++ b/vlsisapd/doc/latex/class_net_1_1_connection.tex @@ -0,0 +1,6 @@ +\hypertarget{class_net_1_1_connection}{}\section{Net\+:\+:Connection Class Reference} +\label{class_net_1_1_connection}\index{Net\+::\+Connection@{Net\+::\+Connection}} + + +\subsection{Detailed Description} +This class describe a \mbox{\hyperlink{class_net_1_1_connection}{Connection}} in a \mbox{\hyperlink{class_net}{Net}}. A connection is a couple (instance\+Name, connector\+Name) used to represent all the connectors linked to a net. \ No newline at end of file diff --git a/vlsisapd/doc/latex/class_netlist.tex b/vlsisapd/doc/latex/class_netlist.tex new file mode 100644 index 00000000..e7f29b6c --- /dev/null +++ b/vlsisapd/doc/latex/class_netlist.tex @@ -0,0 +1,12 @@ +\hypertarget{class_netlist}{}\section{Netlist Class Reference} +\label{class_netlist}\index{Netlist@{Netlist}} + + +\subsection{Detailed Description} +This class describes a netlist. + +A netlist contains the list of all circuit\textquotesingle{}s instances and nets. + +\begin{DoxyNote}{Note} +A \mbox{\hyperlink{class_circuit}{Circuit}} must have one and only netlist. If no netlist is defined the \mbox{\hyperlink{class_circuit}{Circuit}} cannot be driven to file. +\end{DoxyNote} diff --git a/vlsisapd/doc/latex/class_node.tex b/vlsisapd/doc/latex/class_node.tex new file mode 100644 index 00000000..6c431de5 --- /dev/null +++ b/vlsisapd/doc/latex/class_node.tex @@ -0,0 +1,8 @@ +\hypertarget{class_node}{}\section{Node Class Reference} +\label{class_node}\index{Node@{Node}} + + +\subsection{Detailed Description} +This class describes a node of the placement tree. + +This is an abstract class used to easily managed blocs and groups of the placement tree. \ No newline at end of file diff --git a/vlsisapd/doc/latex/class_open_chams_exception.tex b/vlsisapd/doc/latex/class_open_chams_exception.tex new file mode 100644 index 00000000..cffc855e --- /dev/null +++ b/vlsisapd/doc/latex/class_open_chams_exception.tex @@ -0,0 +1,6 @@ +\hypertarget{class_open_chams_exception}{}\section{Open\+Chams\+Exception Class Reference} +\label{class_open_chams_exception}\index{Open\+Chams\+Exception@{Open\+Chams\+Exception}} + + +\subsection{Detailed Description} +This class describes the exceptions throwed by the Open\+Chams library in case of errors. \ No newline at end of file diff --git a/vlsisapd/doc/latex/class_operator.tex b/vlsisapd/doc/latex/class_operator.tex new file mode 100644 index 00000000..3503f1d8 --- /dev/null +++ b/vlsisapd/doc/latex/class_operator.tex @@ -0,0 +1,11 @@ +\hypertarget{class_operator}{}\section{Operator Class Reference} +\label{class_operator}\index{Operator@{Operator}} +\subsection*{Data Structures} +\begin{DoxyCompactItemize} +\item +class \mbox{\hyperlink{class_operator_1_1_constraint}{Constraint}} +\end{DoxyCompactItemize} + + +\subsection{Detailed Description} +This class describes an operator of a sizing procedure. \ No newline at end of file diff --git a/vlsisapd/doc/latex/class_operator_1_1_constraint.tex b/vlsisapd/doc/latex/class_operator_1_1_constraint.tex new file mode 100644 index 00000000..ef070113 --- /dev/null +++ b/vlsisapd/doc/latex/class_operator_1_1_constraint.tex @@ -0,0 +1,6 @@ +\hypertarget{class_operator_1_1_constraint}{}\section{Operator\+:\+:Constraint Class Reference} +\label{class_operator_1_1_constraint}\index{Operator\+::\+Constraint@{Operator\+::\+Constraint}} + + +\subsection{Detailed Description} +This class describes a constraint. A constraint is used to set that a parameter\textquotesingle{}s value is defined relative to another parameter value or to an equation\+: device\+A.\+paramI = device\+B.\+paramJ $\ast$ factor device\+A.\+paramI = equation $\ast$ factor \ No newline at end of file diff --git a/vlsisapd/doc/latex/class_parameters.tex b/vlsisapd/doc/latex/class_parameters.tex new file mode 100644 index 00000000..20704d30 --- /dev/null +++ b/vlsisapd/doc/latex/class_parameters.tex @@ -0,0 +1,6 @@ +\hypertarget{class_parameters}{}\section{Parameters Class Reference} +\label{class_parameters}\index{Parameters@{Parameters}} + + +\subsection{Detailed Description} +This class describes a set of \mbox{\hyperlink{class_parameters}{Parameters}}. \mbox{\hyperlink{class_parameters}{Parameters}} consist in two maps associating a parameter name to a double value or a std\+::string (equation). \ No newline at end of file diff --git a/vlsisapd/doc/latex/class_port.tex b/vlsisapd/doc/latex/class_port.tex new file mode 100644 index 00000000..e7e41eee --- /dev/null +++ b/vlsisapd/doc/latex/class_port.tex @@ -0,0 +1,12 @@ +\hypertarget{class_port}{}\section{Port Class Reference} +\label{class_port}\index{Port@{Port}} + + +\subsection{Detailed Description} +This class describes port. + +A port is used by schematic to position the input/output ports of the circuit. + +\begin{DoxyNote}{Note} +Althought the \mbox{\hyperlink{class_port}{Port}} object is related to \mbox{\hyperlink{class_schematic}{Schematic}}, it is handled by \mbox{\hyperlink{class_net}{Net}} object since a port always belongs to a \mbox{\hyperlink{class_net}{Net}}. +\end{DoxyNote} diff --git a/vlsisapd/doc/latex/class_port_point.tex b/vlsisapd/doc/latex/class_port_point.tex new file mode 100644 index 00000000..68240967 --- /dev/null +++ b/vlsisapd/doc/latex/class_port_point.tex @@ -0,0 +1,6 @@ +\hypertarget{class_port_point}{}\section{Port\+Point Class Reference} +\label{class_port_point}\index{Port\+Point@{Port\+Point}} + + +\subsection{Detailed Description} +this class describes a wire point associated to a \mbox{\hyperlink{class_port}{Port}}. \ No newline at end of file diff --git a/vlsisapd/doc/latex/class_s_p_i_c_e_1_1_capacitor.pdf b/vlsisapd/doc/latex/class_s_p_i_c_e_1_1_capacitor.pdf index 9851709697a18153b4752358eb6cf64fbe4f74df..630a84c9605f9937848ed70c054350561e8d0147 100644 GIT binary patch delta 399 zcmdn1c1v|bAUBhV$>v~gTSi{v#3Ykc1G8k^B=c1B$p`r)Cg<_7Pu|0mg;j=Qaxkx{ zfTga1sjiV(h@rWak(rf=<>VQ>+L(fuc{K$?^Rn~u%kvxy3UV@&6H7AlCo}Q6V>Q_g zL(~RC1mZSL{vy@Typqh4oYWK>{i2jKtDHQ|?u{1C>GBY$c zGBdH%HZW2*Fi_Xz()Z0zaY-ym)o`&gGBCtcF}X?5nc2wPVDkw<3C36xV+#Xg6E_nR zBQrN+3v***V+&U&Cj(s#OAUBhx`Q~75TSi{fHnuV`o;-tB8&mKyuO^#Ienn+^>SSI%cMPNAFhnFKKjBls5S5>7!e7Mc zoRe5w?3b9EI(Z$xylqOdRdP{kVo83HolQ|nnpJRWA%u~WX{VuSqYn}TG9e7Gq&`B+ zWO+W(%@6pw8Ivpw4Gb*|&5VsrjI|An)C~;OHM#VC^HW?BOHwsltc*aiSX6{$mgJ;r zz+D8?;|y_(2E@C0KoQ5%l8pQ!jmh$Y&dkO}#+y?GB^YB(-7GAO%#DrAEsTwwoShw= yEKH4^jh!qE4b3bq3{A}JYzV4|<+8KmDlSPZDyb++P2(~#u{7dRRdw}u;{pK5eS@z6 diff --git a/vlsisapd/doc/latex/class_s_p_i_c_e_1_1_circuit.tex b/vlsisapd/doc/latex/class_s_p_i_c_e_1_1_circuit.tex index 7679e145..a00d2962 100644 --- a/vlsisapd/doc/latex/class_s_p_i_c_e_1_1_circuit.tex +++ b/vlsisapd/doc/latex/class_s_p_i_c_e_1_1_circuit.tex @@ -32,9 +32,8 @@ const strpair\+\_\+vector \& \mbox{\hyperlink{class_s_p_i_c_e_1_1_circuit_a3e6a7 \mbox{\Hypertarget{class_s_p_i_c_e_1_1_circuit_a4ee11ef79ef893c5621e0e7d26a7f9a7}\label{class_s_p_i_c_e_1_1_circuit_a4ee11ef79ef893c5621e0e7d26a7f9a7}} const strings\+\_\+map \& \mbox{\hyperlink{class_s_p_i_c_e_1_1_circuit_a4ee11ef79ef893c5621e0e7d26a7f9a7}{get\+Options}} () \begin{DoxyCompactList}\small\item\em returns the options of the circuit. \end{DoxyCompactList}\item -\mbox{\Hypertarget{class_s_p_i_c_e_1_1_circuit_a4c46676f9ead2db537a0dd963b4f08f1}\label{class_s_p_i_c_e_1_1_circuit_a4c46676f9ead2db537a0dd963b4f08f1}} const strings\+\_\+map \& \mbox{\hyperlink{class_s_p_i_c_e_1_1_circuit_a4c46676f9ead2db537a0dd963b4f08f1}{get\+Parameters}} () -\begin{DoxyCompactList}\small\item\em returns the parameters of the circuit. \end{DoxyCompactList}\item +\begin{DoxyCompactList}\small\item\em returns all circuit\textquotesingle{}s parameters. \end{DoxyCompactList}\item \mbox{\Hypertarget{class_s_p_i_c_e_1_1_circuit_ac18caa525ed386c44874ee643c88e27b}\label{class_s_p_i_c_e_1_1_circuit_ac18caa525ed386c44874ee643c88e27b}} const std\+::vector$<$ \mbox{\hyperlink{class_s_p_i_c_e_1_1_source}{Source}} $\ast$ $>$ \& \mbox{\hyperlink{class_s_p_i_c_e_1_1_circuit_ac18caa525ed386c44874ee643c88e27b}{get\+Sources}} () \begin{DoxyCompactList}\small\item\em returns the sources of the circuit. \end{DoxyCompactList}\item @@ -46,6 +45,11 @@ std\+::string \mbox{\hyperlink{class_s_p_i_c_e_1_1_circuit_ad19721dd878c04c854a7 \begin{DoxyCompactList}\small\item\em returns the title of the circuit. \end{DoxyCompactList}\item void \mbox{\hyperlink{class_s_p_i_c_e_1_1_circuit_a798df9ebd558e22c85eeceb5202e3123}{set\+Title}} (std\+::string) \begin{DoxyCompactList}\small\item\em sets the title of the circuit. \end{DoxyCompactList}\end{DoxyCompactItemize} +\subsection*{Static Public Member Functions} +\begin{DoxyCompactItemize} +\item +static \mbox{\hyperlink{class_s_p_i_c_e_1_1_circuit}{Circuit}} $\ast$ \mbox{\hyperlink{class_s_p_i_c_e_1_1_circuit_aa8294fe7d9ceddb5653d08ecae3eaf36}{read\+From\+File}} (const std\+::string \&) +\begin{DoxyCompactList}\small\item\em creates and returns a \mbox{\hyperlink{class_s_p_i_c_e_1_1_circuit}{Circuit}} object based on a database source file. \end{DoxyCompactList}\end{DoxyCompactItemize} \subsection{Detailed Description} @@ -123,18 +127,28 @@ The value is represented as a std\+::string to keep the optionnal unity. \index{S\+P\+I\+C\+E\+::\+Circuit@{S\+P\+I\+C\+E\+::\+Circuit}!add\+Parameter@{add\+Parameter}} \index{add\+Parameter@{add\+Parameter}!S\+P\+I\+C\+E\+::\+Circuit@{S\+P\+I\+C\+E\+::\+Circuit}} \subsubsection{\texorpdfstring{add\+Parameter()}{addParameter()}} -{\footnotesize\ttfamily void add\+Parameter (\begin{DoxyParamCaption}\item[{std\+::string}]{name, }\item[{std\+::string}]{value }\end{DoxyParamCaption})} +{\footnotesize\ttfamily void add\+Parameter (\begin{DoxyParamCaption}\item[{std\+::string}]{name, }\item[{std\+::string}]{value }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}} adds a parameter to the circuit. +adds an equation parameter to the circuit. + \begin{DoxyParams}{Parameters} {\em name} & the name of the parameter. \\ \hline {\em value} & the value of the parameter.\\ \hline +{\em name} & the name of the parameter. \\ +\hline +{\em equation} & the equation string of the parameter.\\ +\hline +{\em name} & the name of the parameter. \\ +\hline +{\em value} & the value of the parameter.\\ +\hline \end{DoxyParams} \begin{DoxyNote}{Note} The value is represented as a std\+::string to keep the optionnal unity. @@ -172,6 +186,34 @@ adds a subcircuit to the circuit. \begin{DoxyReturn}{Returns} the newly created \mbox{\hyperlink{class_s_p_i_c_e_1_1_subckt}{Subckt}}. \end{DoxyReturn} +\mbox{\Hypertarget{class_s_p_i_c_e_1_1_circuit_a4c46676f9ead2db537a0dd963b4f08f1}\label{class_s_p_i_c_e_1_1_circuit_a4c46676f9ead2db537a0dd963b4f08f1}} +\index{S\+P\+I\+C\+E\+::\+Circuit@{S\+P\+I\+C\+E\+::\+Circuit}!get\+Parameters@{get\+Parameters}} +\index{get\+Parameters@{get\+Parameters}!S\+P\+I\+C\+E\+::\+Circuit@{S\+P\+I\+C\+E\+::\+Circuit}} +\subsubsection{\texorpdfstring{get\+Parameters()}{getParameters()}} +{\footnotesize\ttfamily const Circuit\+::strings\+\_\+map \& get\+Parameters (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}} + + + +returns all circuit\textquotesingle{}s parameters. + +returns the parameters of the circuit. \mbox{\Hypertarget{class_s_p_i_c_e_1_1_circuit_aa8294fe7d9ceddb5653d08ecae3eaf36}\label{class_s_p_i_c_e_1_1_circuit_aa8294fe7d9ceddb5653d08ecae3eaf36}} +\index{S\+P\+I\+C\+E\+::\+Circuit@{S\+P\+I\+C\+E\+::\+Circuit}!read\+From\+File@{read\+From\+File}} +\index{read\+From\+File@{read\+From\+File}!S\+P\+I\+C\+E\+::\+Circuit@{S\+P\+I\+C\+E\+::\+Circuit}} +\subsubsection{\texorpdfstring{read\+From\+File()}{readFromFile()}} +{\footnotesize\ttfamily \mbox{\hyperlink{class_s_p_i_c_e_1_1_circuit}{Circuit}} $\ast$ read\+From\+File (\begin{DoxyParamCaption}\item[{const std\+::string \&}]{filename }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}} + + + +creates and returns a \mbox{\hyperlink{class_s_p_i_c_e_1_1_circuit}{Circuit}} object based on a database source file. + + +\begin{DoxyParams}{Parameters} +{\em file\+Path} & the source file name.\\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +the newly created \mbox{\hyperlink{class_s_p_i_c_e_1_1_circuit}{Circuit}}. +\end{DoxyReturn} \mbox{\Hypertarget{class_s_p_i_c_e_1_1_circuit_a798df9ebd558e22c85eeceb5202e3123}\label{class_s_p_i_c_e_1_1_circuit_a798df9ebd558e22c85eeceb5202e3123}} \index{S\+P\+I\+C\+E\+::\+Circuit@{S\+P\+I\+C\+E\+::\+Circuit}!set\+Title@{set\+Title}} \index{set\+Title@{set\+Title}!S\+P\+I\+C\+E\+::\+Circuit@{S\+P\+I\+C\+E\+::\+Circuit}} diff --git a/vlsisapd/doc/latex/class_s_p_i_c_e_1_1_current.pdf b/vlsisapd/doc/latex/class_s_p_i_c_e_1_1_current.pdf index 831db527454f686456c0170fe9dd4867a1d8a8ac..0c2b5ea5f284dc8ed922134668ccefdbc392c300 100644 GIT binary patch delta 364 zcmZouS**N4ii^p_WU~yHEhDdSVvlEOiY` zb&bqI49%^K%&bf-Cnxe~V+zjU(G(2L%g)O$&vPs&$jMAjEXmBDe457{!_+to5sAr* zcvUb&=wUnL8Ugx)~TdTDTfI rxmh||y1AG*+Sw3P5zA#~$5mXCSX5F`l$yq6Vqjs!rK;-c@5TiHgkoPn delta 444 zcmZ3i+@`WYii^q8e6tLfEhDdKa&lUlNpiBTL1J3kjGwA0YE(FchEnGgn8QXipZ^AtV> zMs5p3149c#Gh<_*^Y`v~QTSi{v#3Ykc1G8k^B=c1B$p-}_Cg%yTPu|0qg;j=QaxlNC zfTga1sjiV(h@rWak(rf=<>VRs+L(fu`85SY^Rn~u%kvxy3UV@&6H7AlCo>7SV>Q_g zL(~RC1mZSL!6Mbrypqh4oYWK>{i2jKtDHj9^u{1C>GBY$c zGBdH%HZW2*Fi_Xz()Z0zaY-ym)o`&gGBCtcF}X?Dnc3XJX!8kS3C37gM*|~gb5j>L z7e{k912ZQB3v)wLBS%X|Q#VH=Q$rIw8-glgx$Nw?ic1oUN-By{)3`v6;!;(0^>^a} E0DY%zjsO4v delta 465 zcmaiv!AiqG7=)>UU?euB2))IFrHLhUx4TKUp$*8U^`s){wZfWiv?UtcM5xcP7oS3e zUiB%wdGg?c*c#A71aHGPGe7gco3Dq@=juk!U54tQqS{du$2f{Cz~WdkO_wjb^Ag>c zVb#`%1%U<07&;z89!B!9+AhPls<{=Ui-#*NRqeQR>Y_v%@>4q~QC;Gi*ro}~vQu`$ zF-Gz3?TQ@T=hvw)q+X|+1ldboZ&W7K xbqD~IV4FI_fH=J#!o;B?jNK6=g!=t|6BEVvl`Ll>UkDy6HUL;@Hiu^;$ \& \mbox{\hyperlink{class_s_p_i_c_e_1_1_instance_acce8940edeaa3d79c522006f987e0711}{get\+Connectors}} () -\begin{DoxyCompactList}\small\item\em returns the connectors of the instance. \end{DoxyCompactList}\item +\begin{DoxyCompactList}\small\item\em returns the map of instance\textquotesingle{}s connectors. \end{DoxyCompactList}\item \mbox{\Hypertarget{class_s_p_i_c_e_1_1_instance_afc74cbe93df9c473a53db83a325f8f9d}\label{class_s_p_i_c_e_1_1_instance_afc74cbe93df9c473a53db83a325f8f9d}} std\+::string \mbox{\hyperlink{class_s_p_i_c_e_1_1_instance_afc74cbe93df9c473a53db83a325f8f9d}{get\+Model}} () \begin{DoxyCompactList}\small\item\em returns the model of the instance. \end{DoxyCompactList}\item @@ -51,6 +50,12 @@ creates a new instance. \hline {\em model} & the model of the instance. \\ \hline +{\em netlist} & the netlist to which the instance belongs.\\ +\hline +{\em name} & the name of the instance. \\ +\hline +{\em model} & the model of the instance. \\ +\hline \end{DoxyParams} @@ -67,6 +72,8 @@ adds a connector to the instance. \begin{DoxyParams}{Parameters} +{\em name} & the name of the connector.\\ +\hline {\em connector} & the connector to add. \\ \hline \end{DoxyParams} @@ -74,20 +81,38 @@ adds a connector to the instance. \index{S\+P\+I\+C\+E\+::\+Instance@{S\+P\+I\+C\+E\+::\+Instance}!add\+Parameter@{add\+Parameter}} \index{add\+Parameter@{add\+Parameter}!S\+P\+I\+C\+E\+::\+Instance@{S\+P\+I\+C\+E\+::\+Instance}} \subsubsection{\texorpdfstring{add\+Parameter()}{addParameter()}} -{\footnotesize\ttfamily void add\+Parameter (\begin{DoxyParamCaption}\item[{std\+::string}]{name, }\item[{std\+::string}]{value }\end{DoxyParamCaption})} +{\footnotesize\ttfamily void add\+Parameter (\begin{DoxyParamCaption}\item[{std\+::string}]{name, }\item[{std\+::string}]{value }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}} -add a parameter to the instance. +adds a parameter to the instance. + +add a parameter to the instance. + +adds an equation parameter to the instance. \begin{DoxyParams}{Parameters} {\em name} & the name of the parameter. \\ \hline -{\em value} & the value of the parameter. \\ +{\em value} & the value of the parameter.\\ +\hline +{\em name} & the name of the parameter. \\ +\hline +{\em equation} & the equation string of the parameter. \\ \hline \end{DoxyParams} -\mbox{\Hypertarget{class_s_p_i_c_e_1_1_instance_a324e4ff99afdcd5972d8c57461d12ef5}\label{class_s_p_i_c_e_1_1_instance_a324e4ff99afdcd5972d8c57461d12ef5}} +\mbox{\Hypertarget{class_s_p_i_c_e_1_1_instance_acce8940edeaa3d79c522006f987e0711}\label{class_s_p_i_c_e_1_1_instance_acce8940edeaa3d79c522006f987e0711}} +\index{S\+P\+I\+C\+E\+::\+Instance@{S\+P\+I\+C\+E\+::\+Instance}!get\+Connectors@{get\+Connectors}} +\index{get\+Connectors@{get\+Connectors}!S\+P\+I\+C\+E\+::\+Instance@{S\+P\+I\+C\+E\+::\+Instance}} +\subsubsection{\texorpdfstring{get\+Connectors()}{getConnectors()}} +{\footnotesize\ttfamily const std\+::vector$<$ std\+::string $>$ \& get\+Connectors (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}} + + + +returns the map of instance\textquotesingle{}s connectors. + +returns the connectors of the instance. \mbox{\Hypertarget{class_s_p_i_c_e_1_1_instance_a324e4ff99afdcd5972d8c57461d12ef5}\label{class_s_p_i_c_e_1_1_instance_a324e4ff99afdcd5972d8c57461d12ef5}} \index{S\+P\+I\+C\+E\+::\+Instance@{S\+P\+I\+C\+E\+::\+Instance}!get\+Parameter\+Value@{get\+Parameter\+Value}} \index{get\+Parameter\+Value@{get\+Parameter\+Value}!S\+P\+I\+C\+E\+::\+Instance@{S\+P\+I\+C\+E\+::\+Instance}} \subsubsection{\texorpdfstring{get\+Parameter\+Value()}{getParameterValue()}} diff --git a/vlsisapd/doc/latex/class_s_p_i_c_e_1_1_mosfet.pdf b/vlsisapd/doc/latex/class_s_p_i_c_e_1_1_mosfet.pdf index c61198294d25a7960ebcf0c257359550906886ab..ad52d283a902d85a6199050fa82c71f4a594c2c0 100644 GIT binary patch delta 400 zcmeBGU8S;NAs3U0$>zmewv4>SiAg4@24=~+N#?2MlLh%CChy~ApUlIPg;j=Q@?suS z0ZUy2Q(Yso5JPh-BQq-#%gHZzv@r#hc{K$?^Rn~u%kvxy3UV@&6H7AlCkOGmV>Q_g zL(~RC1md{i2jKtDH-BR5kQOA|L26Bk1hI~#&3V!7<>xQa^>i%KerQq#Chj10}WR8?L5 G-M9cFXlo$= delta 465 zcmZ3b(yO{*As3US`R2u3wv4={$;oMHCdtXV28n5DlQ;6pPv+st!Vp!MyqL#Sz(Uv1 zK-bVB#L&#j*x1U%c=8J#ZA?LBUQITa{EEu-)XA~D?ifbJVTedfHsMpj5S5?Y!dJxU zoRe5w?3b9EI{6=;ylqOdRdP{kVo83HolQ|nnpJRWA%u~WX{VuSqYn}TG9e7Gq&`B+ zIMetnq2z6`6(`mC8-)NRz@IMEGj}WOL9^* z;4T8{afUcX1LEC0pon8>Nk)E=#^ihfXJ$ha^UYfYBp74Ooh(coEnQ749W7ifUCdn^ yEuCB)4Gm1qjoe&aEe)OQYzV4|<+8KmDlSPZDyb++P2(~#HZRdw}u;{pJk@rD}! diff --git a/vlsisapd/doc/latex/class_s_p_i_c_e_1_1_resistor.pdf b/vlsisapd/doc/latex/class_s_p_i_c_e_1_1_resistor.pdf index 92ba0f0fd89fdb5f8001656c98cceb869629eb0f..97637e0dfb761b4648e4c4283ca2f0b7715ad740 100644 GIT binary patch delta 366 zcmeBBTdKN2hMUR6WV0N%EhDdSVv8HGDK3d6sTwX;Mh1qMDkl31x-c1n7XaaoU_$@^ delta 442 zcmZ3g+M%{VhMURKe6t+4EhDdKikXE)l1Z|zL1J3kjGwA0YE(FchEnGgn8QXipZ^E7@1 zMs5p3149c#Gh<_*^A8G$J0S734UE(c4AeEb^g}XBa#A(mb^}G6A=YX@JeCI(aV#y# z$S=~E{7S%u$=qPGfuICqth1$wshhc@k(s55p{b#PxwEsei@BMxo1=lVg@uu`k(~`e f6|r1)c3j0JiA5z9MX70ACML#~T&k+B{%%|Vbdr6? diff --git a/vlsisapd/doc/latex/class_s_p_i_c_e_1_1_source.pdf b/vlsisapd/doc/latex/class_s_p_i_c_e_1_1_source.pdf index ce3a49fe71e5a0ef52b967b6093941c3f1b0606d..d0d65b470a7b2bbd6ae1ccd5acd5bcabc3771b1a 100644 GIT binary patch delta 365 zcmbQKxlLokS{^17lg;aSY#Dit6O&9*4a|~tlgv}iC-?KoPnO`z!VnD=u+%j$)ip8; zF*LU_GP5$Vocx7P8&go9UsEtNFFP;4JkPP9ASW|9u_QBpavZ-qhKUN3FY()9h)PU0 z6;Qztm7m-yP{a|MSCUzhlbSL~P=0a|zwqWlL2gD9O9N9QGedJDGZRZ~10!_<19eR< zec${Pm&B4(4HqjT14B#|lkW++Fd15GRuPt9j5Tm}admVxadLBVbv8A0bhC6cGBG!^ sa4|J=HZnCebg{D`s3Mlj&W@|NB(bQZq9`?u%f#HokV{q7)!&T^08jd2B>(^b delta 460 zcmdm{F;jEHS{^1#^UdpdY#Dh?Q_L(Zl1!3y4HDDRCKn3GPnO`z!Xmnk&rHBV*U&)M z&?3ap%*xo<%EV;y7d~xFL4AHrHkbU0%JkI9nf&fpjJm^bk0B~C*+D=BLv$jib53G$ zv0q|t>SQiKdE1m^tK_28#FG3XJDZ}EG^^m$LI@)#(@sOvMjs>wWI`BVNqvNt&FX>* zj7b)T28I@fX2!-QCfWu@>IMetnq2z6`6(`mC8-)NRz@IMEGj}WOL9^*;I0AcafUcV z1LD;@pon8>Nk)E=#^h=t7bbJV%?E`f7-LOMjZ7S!EG#UX4NY8KEG(QXoSiKUoDB?| pOf3wJEzRs~2&#zXva{nVE=epZsVGWK<1(=@G2l{Fb@g}S0syvHfK~ti diff --git a/vlsisapd/doc/latex/class_s_p_i_c_e_1_1_voltage.pdf b/vlsisapd/doc/latex/class_s_p_i_c_e_1_1_voltage.pdf index 6bb7437d3c3e2cc130c4968d00901c6b3ad204ad..19c9818179e26c982ed0ca2a839b09be380a613d 100644 GIT binary patch delta 366 zcmeBFTc)}}mYd1MWV1ZCEhDdSVvpK^3uFc6MCFC5c5P6-B9OTqedQhFq$uuKsRZ0A>+nX8-^I delta 460 zcmZ3c+NridmYd1ae6u{aEhDdKikXE)l1Z|zL1J3knh99w8XD*t zT7(#ySs5E!nV3vY;nl_zoX@Mt=8|7gnVvfNCa*gdqkQ=6F+?RMZ{SnG5S_^BoRe5w z?3b9EI=PBp-ZmxKD!C{%u_V99&Za0O%_=yx5W>jGwA0YE(FchEnGgn8QXipZ^K^a% z#v}_v149c#Gh<^D6Kw+{bpr!+O)h=k{1lhOl2i>BD$}{\pageref{struct_open_chams_1_1map__item}}{} \item \contentsline{section}{map\+\_\+item$<$ Key, Val $>$}{\pageref{struct_s_p_i_c_e_1_1map__item}}{} \item \contentsline{section}{Name}{\pageref{class_name}}{} -\item \contentsline{section}{Net}{\pageref{class_open_chams_1_1_net}}{} -\item \contentsline{section}{Netlist}{\pageref{class_open_chams_1_1_netlist}}{} -\item \contentsline{section}{Node}{\pageref{class_open_chams_1_1_node}}{} -\begin{DoxyCompactList} -\item \contentsline{section}{Bloc}{\pageref{class_open_chams_1_1_bloc}}{} -\item \contentsline{section}{Group}{\pageref{class_open_chams_1_1_group}}{} -\end{DoxyCompactList} -\item \contentsline{section}{Open\+Chams\+Exception}{\pageref{class_open_chams_1_1_open_chams_exception}}{} -\item \contentsline{section}{Operator}{\pageref{class_open_chams_1_1_operator}}{} -\item \contentsline{section}{Parameters}{\pageref{class_open_chams_1_1_parameters}}{} +\item \contentsline{section}{Net}{\pageref{class_net}}{} +\item \contentsline{section}{Netlist}{\pageref{class_netlist}}{} +\item \contentsline{section}{Node}{\pageref{class_node}}{} +\item \contentsline{section}{Open\+Chams\+Exception}{\pageref{class_open_chams_exception}}{} +\item \contentsline{section}{Operator}{\pageref{class_operator}}{} +\item \contentsline{section}{Parameters}{\pageref{class_parameters}}{} \item \contentsline{section}{Polygon}{\pageref{class_c_i_f_1_1_polygon}}{} -\item \contentsline{section}{Port}{\pageref{class_open_chams_1_1_port}}{} +\item \contentsline{section}{Port}{\pageref{class_port}}{} +\item \contentsline{section}{Port\+Point}{\pageref{class_port_point}}{} \item \contentsline{section}{Rule}{\pageref{class_d_t_r_1_1_rule}}{} \begin{DoxyCompactList} \item \contentsline{section}{A\+Rule}{\pageref{class_d_t_r_1_1_a_rule}}{} \end{DoxyCompactList} -\item \contentsline{section}{Schematic}{\pageref{class_open_chams_1_1_schematic}}{} -\item \contentsline{section}{Simul\+Model}{\pageref{class_open_chams_1_1_simul_model}}{} -\item \contentsline{section}{Sizing}{\pageref{class_open_chams_1_1_sizing}}{} -\item \contentsline{section}{Slicing\+Node}{\pageref{class_open_chams_1_1_slicing_node}}{} -\begin{DoxyCompactList} -\item \contentsline{section}{D\+Slicing\+Node}{\pageref{class_open_chams_1_1_d_slicing_node}}{} -\item \contentsline{section}{H\+V\+Slicing\+Node}{\pageref{class_open_chams_1_1_h_v_slicing_node}}{} -\begin{DoxyCompactList} -\item \contentsline{section}{H\+Slicing\+Node}{\pageref{class_open_chams_1_1_h_slicing_node}}{} -\item \contentsline{section}{V\+Slicing\+Node}{\pageref{class_open_chams_1_1_v_slicing_node}}{} -\end{DoxyCompactList} -\item \contentsline{section}{R\+Slicing\+Node}{\pageref{class_open_chams_1_1_r_slicing_node}}{} -\end{DoxyCompactList} +\item \contentsline{section}{Schematic}{\pageref{class_schematic}}{} +\item \contentsline{section}{Simul\+Model}{\pageref{class_simul_model}}{} +\item \contentsline{section}{Sizing}{\pageref{class_sizing}}{} \item \contentsline{section}{Source}{\pageref{class_s_p_i_c_e_1_1_source}}{} \begin{DoxyCompactList} \item \contentsline{section}{Current}{\pageref{class_s_p_i_c_e_1_1_current}}{} @@ -71,13 +52,8 @@ This inheritance list is sorted roughly, but not completely, alphabetically\+:\b \item \contentsline{section}{Structure}{\pageref{class_a_g_d_s_1_1_structure}}{} \item \contentsline{section}{Subckt}{\pageref{class_s_p_i_c_e_1_1_subckt}}{} \item \contentsline{section}{Techno}{\pageref{class_d_t_r_1_1_techno}}{} -\item \contentsline{section}{Transistor}{\pageref{class_open_chams_1_1_transistor}}{} +\item \contentsline{section}{Transistor}{\pageref{class_transistor}}{} \item \contentsline{section}{Value}{\pageref{class_s_p_i_c_e_1_1_value}}{} -\item \contentsline{section}{Wire}{\pageref{class_open_chams_1_1_wire}}{} -\item \contentsline{section}{Wire\+Point}{\pageref{class_open_chams_1_1_wire_point}}{} -\begin{DoxyCompactList} -\item \contentsline{section}{Instance\+Point}{\pageref{class_open_chams_1_1_instance_point}}{} -\item \contentsline{section}{Intermediate\+Point}{\pageref{class_open_chams_1_1_intermediate_point}}{} -\item \contentsline{section}{Port\+Point}{\pageref{class_open_chams_1_1_port_point}}{} -\end{DoxyCompactList} +\item \contentsline{section}{Wire}{\pageref{class_wire}}{} +\item \contentsline{section}{Wire\+Point}{\pageref{class_wire_point}}{} \end{DoxyCompactList} diff --git a/vlsisapd/doc/latex/openchams.tex b/vlsisapd/doc/latex/openchams.tex index 0757bd32..ccc5b1d5 100644 --- a/vlsisapd/doc/latex/openchams.tex +++ b/vlsisapd/doc/latex/openchams.tex @@ -6,272 +6,50 @@ The database has many objects that can be arranged in five categories\+: \begin{DoxyItemize} \item General \begin{DoxyItemize} -\item \mbox{\hyperlink{class_open_chams_1_1_circuit}{Open\+Chams\+::\+Circuit}} +\item Open\+Chams\+::\+Circuit \item Open\+Chams\+::\+Name -\item \mbox{\hyperlink{class_open_chams_1_1_open_chams_exception}{Open\+Chams\+::\+Open\+Chams\+Exception}} +\item Open\+Chams\+::\+Open\+Chams\+Exception \end{DoxyItemize} -\item Netlist +\item \mbox{\hyperlink{class_netlist}{Netlist}} \begin{DoxyItemize} -\item \mbox{\hyperlink{class_open_chams_1_1_netlist}{Open\+Chams\+::\+Netlist}} -\item \mbox{\hyperlink{class_open_chams_1_1_instance}{Open\+Chams\+::\+Instance}} -\item \mbox{\hyperlink{class_open_chams_1_1_device}{Open\+Chams\+::\+Device}} -\item \mbox{\hyperlink{class_open_chams_1_1_transistor}{Open\+Chams\+::\+Transistor}} -\item \mbox{\hyperlink{class_open_chams_1_1_parameters}{Open\+Chams\+::\+Parameters}} -\item \mbox{\hyperlink{class_open_chams_1_1_net}{Open\+Chams\+::\+Net}} +\item Open\+Chams\+::\+Netlist +\item Open\+Chams\+::\+Instance +\item Open\+Chams\+::\+Device +\item Open\+Chams\+::\+Transistor +\item Open\+Chams\+::\+Parameters +\item Open\+Chams\+::\+Net \end{DoxyItemize} -\item Sizing +\item \mbox{\hyperlink{class_sizing}{Sizing}} \begin{DoxyItemize} -\item \mbox{\hyperlink{class_open_chams_1_1_sizing}{Open\+Chams\+::\+Sizing}} -\item \mbox{\hyperlink{class_open_chams_1_1_operator}{Open\+Chams\+::\+Operator}} -\item \mbox{\hyperlink{class_open_chams_1_1_simul_model}{Open\+Chams\+::\+Simul\+Model}} +\item Open\+Chams\+::\+Sizing +\item Open\+Chams\+::\+Operator +\item Open\+Chams\+::\+Simul\+Model \end{DoxyItemize} -\item Schematic +\item \mbox{\hyperlink{class_schematic}{Schematic}} \begin{DoxyItemize} -\item \mbox{\hyperlink{class_open_chams_1_1_schematic}{Open\+Chams\+::\+Schematic}} -\item \mbox{\hyperlink{class_open_chams_1_1_port}{Open\+Chams\+::\+Port}} -\item \mbox{\hyperlink{class_open_chams_1_1_wire}{Open\+Chams\+::\+Wire}} -\item \mbox{\hyperlink{class_open_chams_1_1_wire_point}{Open\+Chams\+::\+Wire\+Point}} -\item \mbox{\hyperlink{class_open_chams_1_1_instance_point}{Open\+Chams\+::\+Instance\+Point}} -\item \mbox{\hyperlink{class_open_chams_1_1_port_point}{Open\+Chams\+::\+Port\+Point}} -\item \mbox{\hyperlink{class_open_chams_1_1_intermediate_point}{Open\+Chams\+::\+Intermediate\+Point}} +\item Open\+Chams\+::\+Schematic +\item Open\+Chams\+::\+Port +\item Open\+Chams\+::\+Wire +\item Open\+Chams\+::\+Wire\+Point +\item Open\+Chams\+::\+Instance\+Point +\item Open\+Chams\+::\+Port\+Point +\item Open\+Chams\+::\+Intermediate\+Point \end{DoxyItemize} -\item Layout +\item \mbox{\hyperlink{class_layout}{Layout}} \begin{DoxyItemize} -\item \mbox{\hyperlink{class_open_chams_1_1_layout}{Open\+Chams\+::\+Layout}} -\item \mbox{\hyperlink{class_open_chams_1_1_node}{Open\+Chams\+::\+Node}} -\item \mbox{\hyperlink{class_open_chams_1_1_bloc}{Open\+Chams\+::\+Bloc}} -\item \mbox{\hyperlink{class_open_chams_1_1_group}{Open\+Chams\+::\+Group}} +\item Open\+Chams\+::\+Layout +\item Open\+Chams\+::\+Node +\item Open\+Chams\+::\+Bloc +\item Open\+Chams\+::\+Group \end{DoxyItemize} \end{DoxyItemize}\hypertarget{openchams_openChamsParser}{}\subsection{Using the parser}\label{openchams_openChamsParser} -Simply load an O\+P\+E\+N\+C\+H\+A\+MS file using the static function \mbox{\hyperlink{class_open_chams_1_1_circuit_ad0aa3183bdea59e62f69c295026b7fe7}{Open\+Chams\+::\+Circuit\+::read\+From\+File()}} and then get the netlist object (\mbox{\hyperlink{class_open_chams_1_1_circuit_a4085d6a7b6958ffdd7ab5df7e6d6e53f}{Open\+Chams\+::\+Circuit\+::get\+Netlist()}}) or the sizing procedure (\mbox{\hyperlink{class_open_chams_1_1_circuit_a0ce52bc8747f684ec0123faa8ff97b6d}{Open\+Chams\+::\+Circuit\+::get\+Sizing()}}, might be N\+U\+LL) or any other useful information (see \mbox{\hyperlink{class_open_chams_1_1_circuit}{Open\+Chams\+::\+Circuit}}).\hypertarget{openchams_openChamsDriver}{}\subsection{Using the driver}\label{openchams_openChamsDriver} -Using the driver is very simple, user has to create an \mbox{\hyperlink{class_open_chams_1_1_circuit}{Open\+Chams\+::\+Circuit}} object and simply add \mbox{\hyperlink{class_open_chams_1_1_netlist}{Open\+Chams\+::\+Netlist}} (mandatory) and \mbox{\hyperlink{class_open_chams_1_1_sizing}{Open\+Chams\+::\+Sizing}} (optionnal) or \mbox{\hyperlink{class_open_chams_1_1_schematic}{Open\+Chams\+::\+Schematic}} (optionnal) or \mbox{\hyperlink{class_open_chams_1_1_layout}{Open\+Chams\+::\+Layout}} (optinnal) to it. Finally use the \mbox{\hyperlink{class_open_chams_1_1_circuit_a2eb07935ec946a07edcee2255b781193}{Open\+Chams\+::\+Circuit\+::write\+To\+File()}} method to dump the database to file.\hypertarget{openchams_openChamsExamples}{}\section{Examples}\label{openchams_openChamsExamples} +Simply load an O\+P\+E\+N\+C\+H\+A\+MS file using the static function Open\+Chams\+::\+Circuit\+::read\+From\+File() and then get the netlist object (Open\+Chams\+::\+Circuit\+::get\+Netlist()) or the sizing procedure (Open\+Chams\+::\+Circuit\+::get\+Sizing(), might be N\+U\+LL) or any other useful information (see Open\+Chams\+::\+Circuit).\hypertarget{openchams_openChamsDriver}{}\subsection{Using the driver}\label{openchams_openChamsDriver} +Using the driver is very simple, user has to create an Open\+Chams\+::\+Circuit object and simply add Open\+Chams\+::\+Netlist (mandatory) and Open\+Chams\+::\+Sizing (optionnal) or Open\+Chams\+::\+Schematic (optionnal) or Open\+Chams\+::\+Layout (optinnal) to it. Finally use the Open\+Chams\+::\+Circuit\+::write\+To\+File() method to dump the database to file.\hypertarget{openchams_openChamsExamples}{}\section{Examples}\label{openchams_openChamsExamples} As said is the global presentation, V\+L\+SI S\+A\+PD project provides C++ libraries and Python modules for each supported format. In this section we present simple code examples to parse and drive a O\+P\+E\+N\+C\+H\+A\+MS file using C++ or Python. The O\+P\+E\+N\+C\+H\+A\+MS files considered are the same for all examples\+: {\ttfamily inverter.\+xml} and {\ttfamily buffer.\+xml} \begin{DoxyCodeInclude} - -<\textcolor{keywordtype}{circuit} \textcolor{keyword}{name}=\textcolor{stringliteral}{"inverter"} \textcolor{keyword}{techno}=\textcolor{stringliteral}{"myTech"}> - <\textcolor{keywordtype}{parameters}> - <\textcolor{keywordtype}{parameter} \textcolor{keyword}{name}=\textcolor{stringliteral}{"temp"} \textcolor{keyword}{value}=\textcolor{stringliteral}{"27.0"}/> - <\textcolor{keywordtype}{parameter} \textcolor{keyword}{name}=\textcolor{stringliteral}{"Vdd"} \textcolor{keyword}{value}=\textcolor{stringliteral}{"1.2"}/> - <\textcolor{keywordtype}{parameter} \textcolor{keyword}{name}=\textcolor{stringliteral}{"Vss"} \textcolor{keyword}{value}=\textcolor{stringliteral}{"0.0"}/> - <\textcolor{keywordtype}{parameter} \textcolor{keyword}{name}=\textcolor{stringliteral}{"L"} \textcolor{keyword}{value}=\textcolor{stringliteral}{"0.10e-6"}/> - <\textcolor{keywordtype}{parameter} \textcolor{keyword}{name}=\textcolor{stringliteral}{"Ids"} \textcolor{keyword}{value}=\textcolor{stringliteral}{"30e-6"}/> - <\textcolor{keywordtype}{parameter} \textcolor{keyword}{name}=\textcolor{stringliteral}{"Veg"} \textcolor{keyword}{value}=\textcolor{stringliteral}{"0.12"}/> - <\textcolor{keywordtype}{parameterEq} \textcolor{keyword}{name}=\textcolor{stringliteral}{"complex"} \textcolor{keyword}{equation}=\textcolor{stringliteral}{"myEq"}/> - - <\textcolor{keywordtype}{netlist}> - <\textcolor{keywordtype}{instances}> - <\textcolor{keywordtype}{instance} \textcolor{keyword}{name}=\textcolor{stringliteral}{"nmos1"} \textcolor{keyword}{model}=\textcolor{stringliteral}{"Transistor"} \textcolor{keyword}{order}=\textcolor{stringliteral}{"1"} \textcolor{keyword}{mostype}=\textcolor{stringliteral}{"NMOS"} \textcolor{keyword}{sourceBulkConnected}=\textcolor{stringliteral}{"True"}> - <\textcolor{keywordtype}{connectors}> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{name}=\textcolor{stringliteral}{"G"}/> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{name}=\textcolor{stringliteral}{"D"}/> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{name}=\textcolor{stringliteral}{"S"}/> - - <\textcolor{keywordtype}{transistors}> - <\textcolor{keywordtype}{transistor} \textcolor{keyword}{name}=\textcolor{stringliteral}{"m1"}> - <\textcolor{keywordtype}{connection} \textcolor{keyword}{gate}=\textcolor{stringliteral}{"G"} \textcolor{keyword}{source}=\textcolor{stringliteral}{"S"} \textcolor{keyword}{drain}=\textcolor{stringliteral}{"D"} \textcolor{keyword}{bulk}=\textcolor{stringliteral}{"S"}/> - - - - <\textcolor{keywordtype}{instance} \textcolor{keyword}{name}=\textcolor{stringliteral}{"pmos1"} \textcolor{keyword}{model}=\textcolor{stringliteral}{"Transistor"} \textcolor{keyword}{order}=\textcolor{stringliteral}{"2"} \textcolor{keyword}{mostype}=\textcolor{stringliteral}{"PMOS"} \textcolor{keyword}{sourceBulkConnected}=\textcolor{stringliteral}{"True"}> - <\textcolor{keywordtype}{connectors}> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{name}=\textcolor{stringliteral}{"G"}/> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{name}=\textcolor{stringliteral}{"D"}/> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{name}=\textcolor{stringliteral}{"S"}/> - - <\textcolor{keywordtype}{transistors}> - <\textcolor{keywordtype}{transistor} \textcolor{keyword}{name}=\textcolor{stringliteral}{"m1"}> - <\textcolor{keywordtype}{connection} \textcolor{keyword}{gate}=\textcolor{stringliteral}{"G"} \textcolor{keyword}{source}=\textcolor{stringliteral}{"S"} \textcolor{keyword}{drain}=\textcolor{stringliteral}{"D"} \textcolor{keyword}{bulk}=\textcolor{stringliteral}{"S"}/> - - - - - <\textcolor{keywordtype}{nets}> - <\textcolor{keywordtype}{net} \textcolor{keyword}{name}=\textcolor{stringliteral}{"vdd"} \textcolor{keyword}{type}=\textcolor{stringliteral}{"power"} \textcolor{keyword}{isExternal}=\textcolor{stringliteral}{"True"}> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{instance}=\textcolor{stringliteral}{"pmos1"} \textcolor{keyword}{name}=\textcolor{stringliteral}{"S"}/> - - <\textcolor{keywordtype}{net} \textcolor{keyword}{name}=\textcolor{stringliteral}{"vss"} \textcolor{keyword}{type}=\textcolor{stringliteral}{"ground"} \textcolor{keyword}{isExternal}=\textcolor{stringliteral}{"True"}> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{instance}=\textcolor{stringliteral}{"nmos1"} \textcolor{keyword}{name}=\textcolor{stringliteral}{"S"}/> - - <\textcolor{keywordtype}{net} \textcolor{keyword}{name}=\textcolor{stringliteral}{"in"} \textcolor{keyword}{type}=\textcolor{stringliteral}{"logical"} \textcolor{keyword}{isExternal}=\textcolor{stringliteral}{"True"}> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{instance}=\textcolor{stringliteral}{"nmos1"} \textcolor{keyword}{name}=\textcolor{stringliteral}{"G"}/> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{instance}=\textcolor{stringliteral}{"pmos1"} \textcolor{keyword}{name}=\textcolor{stringliteral}{"G"}/> - - <\textcolor{keywordtype}{net} \textcolor{keyword}{name}=\textcolor{stringliteral}{"out"} \textcolor{keyword}{type}=\textcolor{stringliteral}{"logical"} \textcolor{keyword}{isExternal}=\textcolor{stringliteral}{"True"}> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{instance}=\textcolor{stringliteral}{"nmos1"} \textcolor{keyword}{name}=\textcolor{stringliteral}{"D"}/> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{instance}=\textcolor{stringliteral}{"pmos1"} \textcolor{keyword}{name}=\textcolor{stringliteral}{"D"}/> - - - - <\textcolor{keywordtype}{schematic}> - <\textcolor{keywordtype}{instance} \textcolor{keyword}{name}=\textcolor{stringliteral}{"nmos1"} \textcolor{keyword}{x}=\textcolor{stringliteral}{"2490"} \textcolor{keyword}{y}=\textcolor{stringliteral}{"2600"} \textcolor{keyword}{orient}=\textcolor{stringliteral}{"ID"}/> - <\textcolor{keywordtype}{instance} \textcolor{keyword}{name}=\textcolor{stringliteral}{"pmos1"} \textcolor{keyword}{x}=\textcolor{stringliteral}{"2490"} \textcolor{keyword}{y}=\textcolor{stringliteral}{"2490"} \textcolor{keyword}{orient}=\textcolor{stringliteral}{"ID"}/> - <\textcolor{keywordtype}{net} \textcolor{keyword}{name}=\textcolor{stringliteral}{"vdd"}> - <\textcolor{keywordtype}{port} \textcolor{keyword}{type}=\textcolor{stringliteral}{"inV"} \textcolor{keyword}{idx}=\textcolor{stringliteral}{"0"} \textcolor{keyword}{x}=\textcolor{stringliteral}{"2525"} \textcolor{keyword}{y}=\textcolor{stringliteral}{"2430"} \textcolor{keyword}{orient}=\textcolor{stringliteral}{"ID"}/> - <\textcolor{keywordtype}{wire}> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{name}=\textcolor{stringliteral}{"pmos1"} \textcolor{keyword}{plug}=\textcolor{stringliteral}{"S"}/> - \textcolor{comment}{} - <\textcolor{keywordtype}{connector} \textcolor{keyword}{idx}=\textcolor{stringliteral}{"0"}/> - - - <\textcolor{keywordtype}{net} \textcolor{keyword}{name}=\textcolor{stringliteral}{"vss"}> - <\textcolor{keywordtype}{port} \textcolor{keyword}{type}=\textcolor{stringliteral}{"inV"} \textcolor{keyword}{idx}=\textcolor{stringliteral}{"0"} \textcolor{keyword}{x}=\textcolor{stringliteral}{"2525"} \textcolor{keyword}{y}=\textcolor{stringliteral}{"2740"} \textcolor{keyword}{orient}=\textcolor{stringliteral}{"MY"}/> - <\textcolor{keywordtype}{wire}> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{name}=\textcolor{stringliteral}{"nmos1"} \textcolor{keyword}{plug}=\textcolor{stringliteral}{"S"}/> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{idx}=\textcolor{stringliteral}{"0"}/> - - - <\textcolor{keywordtype}{net} \textcolor{keyword}{name}=\textcolor{stringliteral}{"in"}> - <\textcolor{keywordtype}{port} \textcolor{keyword}{type}=\textcolor{stringliteral}{"inH"} \textcolor{keyword}{idx}=\textcolor{stringliteral}{"0"} \textcolor{keyword}{x}=\textcolor{stringliteral}{"2415"} \textcolor{keyword}{y}=\textcolor{stringliteral}{"2520"} \textcolor{keyword}{orient}=\textcolor{stringliteral}{"ID"}/> - <\textcolor{keywordtype}{wire}> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{name}=\textcolor{stringliteral}{"pmos1"} \textcolor{keyword}{plug}=\textcolor{stringliteral}{"G"}/> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{name}=\textcolor{stringliteral}{"nmos1"} \textcolor{keyword}{plug}=\textcolor{stringliteral}{"G"}/> - - <\textcolor{keywordtype}{wire}> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{idx}=\textcolor{stringliteral}{"0"}/> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{name}=\textcolor{stringliteral}{"pmos1"} \textcolor{keyword}{plug}=\textcolor{stringliteral}{"G"}/> - - - <\textcolor{keywordtype}{net} \textcolor{keyword}{name}=\textcolor{stringliteral}{"out"}> - <\textcolor{keywordtype}{port} \textcolor{keyword}{type}=\textcolor{stringliteral}{"outH"} \textcolor{keyword}{idx}=\textcolor{stringliteral}{"0"} \textcolor{keyword}{x}=\textcolor{stringliteral}{"2570"} \textcolor{keyword}{y}=\textcolor{stringliteral}{"2590"} \textcolor{keyword}{orient}=\textcolor{stringliteral}{"ID"}/> - <\textcolor{keywordtype}{wire}> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{name}=\textcolor{stringliteral}{"pmos1"} \textcolor{keyword}{plug}=\textcolor{stringliteral}{"D"}/> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{name}=\textcolor{stringliteral}{"nmos1"} \textcolor{keyword}{plug}=\textcolor{stringliteral}{"D"}/> - - <\textcolor{keywordtype}{wire}> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{name}=\textcolor{stringliteral}{"nmos1"} \textcolor{keyword}{plug}=\textcolor{stringliteral}{"D"}/> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{idx}=\textcolor{stringliteral}{"0"}/> - - - - <\textcolor{keywordtype}{sizing}> - <\textcolor{keywordtype}{instance} \textcolor{keyword}{name}=\textcolor{stringliteral}{"pmos1"} \textcolor{keyword}{operator}=\textcolor{stringliteral}{"OPVG(Veg)"} \textcolor{keyword}{simulModel}=\textcolor{stringliteral}{"BSIM3V3"}> - <\textcolor{keywordtype}{constraint} \textcolor{keyword}{param}=\textcolor{stringliteral}{"Temp"} \textcolor{keyword}{ref}=\textcolor{stringliteral}{"design"} \textcolor{keyword}{refParam}=\textcolor{stringliteral}{"temp"}/> - <\textcolor{keywordtype}{constraint} \textcolor{keyword}{param}=\textcolor{stringliteral}{"Ids"} \textcolor{keyword}{ref}=\textcolor{stringliteral}{"design"} \textcolor{keyword}{refParam}=\textcolor{stringliteral}{"Ids"}/> - <\textcolor{keywordtype}{constraint} \textcolor{keyword}{param}=\textcolor{stringliteral}{"L"} \textcolor{keyword}{ref}=\textcolor{stringliteral}{"design"} \textcolor{keyword}{refParam}=\textcolor{stringliteral}{"L"}/> - <\textcolor{keywordtype}{constraint} \textcolor{keyword}{param}=\textcolor{stringliteral}{"Veg"} \textcolor{keyword}{ref}=\textcolor{stringliteral}{"design"} \textcolor{keyword}{refParam}=\textcolor{stringliteral}{"Veg"}/> - <\textcolor{keywordtype}{constraint} \textcolor{keyword}{param}=\textcolor{stringliteral}{"Vd"} \textcolor{keyword}{ref}=\textcolor{stringliteral}{"design"} \textcolor{keyword}{refParam}=\textcolor{stringliteral}{"Vdd"} \textcolor{keyword}{factor}=\textcolor{stringliteral}{"0.5"}/> - <\textcolor{keywordtype}{constraint} \textcolor{keyword}{param}=\textcolor{stringliteral}{"Vs"} \textcolor{keyword}{ref}=\textcolor{stringliteral}{"design"} \textcolor{keyword}{refParam}=\textcolor{stringliteral}{"Vdd"}/> - - <\textcolor{keywordtype}{instance} \textcolor{keyword}{name}=\textcolor{stringliteral}{"nmos1"} \textcolor{keyword}{operator}=\textcolor{stringliteral}{"OPW(Vg,Vs)"} \textcolor{keyword}{simulModel}=\textcolor{stringliteral}{"BSIM3V3"}> - <\textcolor{keywordtype}{constraint} \textcolor{keyword}{param}=\textcolor{stringliteral}{"Temp"} \textcolor{keyword}{ref}=\textcolor{stringliteral}{"design"} \textcolor{keyword}{refParam}=\textcolor{stringliteral}{"temp"}/> - <\textcolor{keywordtype}{constraint} \textcolor{keyword}{param}=\textcolor{stringliteral}{"Ids"} \textcolor{keyword}{ref}=\textcolor{stringliteral}{"design"} \textcolor{keyword}{refParam}=\textcolor{stringliteral}{"Ids"}/> - <\textcolor{keywordtype}{constraint} \textcolor{keyword}{param}=\textcolor{stringliteral}{"L"} \textcolor{keyword}{ref}=\textcolor{stringliteral}{"design"} \textcolor{keyword}{refParam}=\textcolor{stringliteral}{"L"}/> - <\textcolor{keywordtype}{constraint} \textcolor{keyword}{param}=\textcolor{stringliteral}{"Vs"} \textcolor{keyword}{ref}=\textcolor{stringliteral}{"design"} \textcolor{keyword}{refParam}=\textcolor{stringliteral}{"Vdd"}/> - <\textcolor{keywordtype}{constraint} \textcolor{keyword}{param}=\textcolor{stringliteral}{"Vg"} \textcolor{keyword}{ref}=\textcolor{stringliteral}{"pmos1"} \textcolor{keyword}{refParam}=\textcolor{stringliteral}{"Vg"}/> - <\textcolor{keywordtype}{constraint} \textcolor{keyword}{param}=\textcolor{stringliteral}{"Vd"} \textcolor{keyword}{ref}=\textcolor{stringliteral}{"pmos1"} \textcolor{keyword}{refParam}=\textcolor{stringliteral}{"Vd"}/> - <\textcolor{keywordtype}{constraint} \textcolor{keyword}{param}=\textcolor{stringliteral}{"another"} \textcolor{keyword}{refEquation}=\textcolor{stringliteral}{"myEq"} \textcolor{keyword}{factor}=\textcolor{stringliteral}{"-2.5"}/> - - <\textcolor{keywordtype}{equations}> - <\textcolor{keywordtype}{eq} \textcolor{keyword}{name}=\textcolor{stringliteral}{"myEq"} \textcolor{keyword}{equation}=\textcolor{stringliteral}{"A/more+complex*equation"}/> - - - <\textcolor{keywordtype}{layout}> - <\textcolor{keywordtype}{instance} \textcolor{keyword}{name}=\textcolor{stringliteral}{"pmos1"} \textcolor{keyword}{style}=\textcolor{stringliteral}{"Common transistor"}/> - <\textcolor{keywordtype}{instance} \textcolor{keyword}{name}=\textcolor{stringliteral}{"nmos1"} \textcolor{keyword}{style}=\textcolor{stringliteral}{"Rotate transistor"}/> - <\textcolor{keywordtype}{hbtree}> - <\textcolor{keywordtype}{group} \textcolor{keyword}{name}=\textcolor{stringliteral}{"g1"} \textcolor{keyword}{align}=\textcolor{stringliteral}{"vertical"}> - <\textcolor{keywordtype}{bloc} \textcolor{keyword}{name}=\textcolor{stringliteral}{"nmos1"}> - <\textcolor{keywordtype}{bloc} \textcolor{keyword}{name}=\textcolor{stringliteral}{"pmos1"} \textcolor{keyword}{position}=\textcolor{stringliteral}{"top"}/> - - - - - \end{DoxyCodeInclude} \begin{DoxyCodeInclude} - -<\textcolor{keywordtype}{circuit} \textcolor{keyword}{name}=\textcolor{stringliteral}{"buffer"} \textcolor{keyword}{techno}=\textcolor{stringliteral}{"myTech"}> - <\textcolor{keywordtype}{subCircuitsPaths}> - <\textcolor{keywordtype}{path} \textcolor{keyword}{path}=\textcolor{stringliteral}{"."}/> - - <\textcolor{keywordtype}{netlist}> - <\textcolor{keywordtype}{instances}> - <\textcolor{keywordtype}{instance} \textcolor{keyword}{name}=\textcolor{stringliteral}{"inv1"} \textcolor{keyword}{model}=\textcolor{stringliteral}{"inverter"}> - <\textcolor{keywordtype}{connectors}> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{name}=\textcolor{stringliteral}{"vdd"}/> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{name}=\textcolor{stringliteral}{"vss"}/> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{name}=\textcolor{stringliteral}{"in"} /> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{name}=\textcolor{stringliteral}{"out"}/> - - - <\textcolor{keywordtype}{instance} \textcolor{keyword}{name}=\textcolor{stringliteral}{"inv2"} \textcolor{keyword}{model}=\textcolor{stringliteral}{"inverter"}> - <\textcolor{keywordtype}{connectors}> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{name}=\textcolor{stringliteral}{"vdd"}/> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{name}=\textcolor{stringliteral}{"vss"}/> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{name}=\textcolor{stringliteral}{"in"} /> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{name}=\textcolor{stringliteral}{"out"}/> - - - - <\textcolor{keywordtype}{nets}> - <\textcolor{keywordtype}{net} \textcolor{keyword}{name}=\textcolor{stringliteral}{"vdd"} \textcolor{keyword}{type}=\textcolor{stringliteral}{"power"} \textcolor{keyword}{isExternal}=\textcolor{stringliteral}{"True"}> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{instance}=\textcolor{stringliteral}{"inv1"} \textcolor{keyword}{name}=\textcolor{stringliteral}{"vdd"}/> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{instance}=\textcolor{stringliteral}{"inv2"} \textcolor{keyword}{name}=\textcolor{stringliteral}{"vdd"}/> - - <\textcolor{keywordtype}{net} \textcolor{keyword}{name}=\textcolor{stringliteral}{"vss"} \textcolor{keyword}{type}=\textcolor{stringliteral}{"ground"} \textcolor{keyword}{isExternal}=\textcolor{stringliteral}{"True"}> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{instance}=\textcolor{stringliteral}{"inv1"} \textcolor{keyword}{name}=\textcolor{stringliteral}{"vss"}/> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{instance}=\textcolor{stringliteral}{"inv2"} \textcolor{keyword}{name}=\textcolor{stringliteral}{"vss"}/> - - <\textcolor{keywordtype}{net} \textcolor{keyword}{name}=\textcolor{stringliteral}{"in"} \textcolor{keyword}{type}=\textcolor{stringliteral}{"logical"} \textcolor{keyword}{isExternal}=\textcolor{stringliteral}{"True"}> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{instance}=\textcolor{stringliteral}{"inv1"} \textcolor{keyword}{name}=\textcolor{stringliteral}{"in"}/> - - <\textcolor{keywordtype}{net} \textcolor{keyword}{name}=\textcolor{stringliteral}{"out"} \textcolor{keyword}{type}=\textcolor{stringliteral}{"logical"} \textcolor{keyword}{isExternal}=\textcolor{stringliteral}{"True"}> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{instance}=\textcolor{stringliteral}{"inv2"} \textcolor{keyword}{name}=\textcolor{stringliteral}{"out"}/> - - <\textcolor{keywordtype}{net} \textcolor{keyword}{name}=\textcolor{stringliteral}{"internal"} \textcolor{keyword}{type}=\textcolor{stringliteral}{"logical"} \textcolor{keyword}{isExternal}=\textcolor{stringliteral}{"False"}> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{instance}=\textcolor{stringliteral}{"inv1"} \textcolor{keyword}{name}=\textcolor{stringliteral}{"out"}/> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{instance}=\textcolor{stringliteral}{"inv2"} \textcolor{keyword}{name}=\textcolor{stringliteral}{"in"}/> - - - - <\textcolor{keywordtype}{schematic}> - <\textcolor{keywordtype}{instance} \textcolor{keyword}{name}=\textcolor{stringliteral}{"inv1"} \textcolor{keyword}{x}=\textcolor{stringliteral}{"2490"} \textcolor{keyword}{y}=\textcolor{stringliteral}{"2600"} \textcolor{keyword}{orient}=\textcolor{stringliteral}{"ID"}/> - <\textcolor{keywordtype}{instance} \textcolor{keyword}{name}=\textcolor{stringliteral}{"inv2"} \textcolor{keyword}{x}=\textcolor{stringliteral}{"2490"} \textcolor{keyword}{y}=\textcolor{stringliteral}{"2300"} \textcolor{keyword}{orient}=\textcolor{stringliteral}{"ID"}/> - <\textcolor{keywordtype}{net} \textcolor{keyword}{name}=\textcolor{stringliteral}{"in"}> - <\textcolor{keywordtype}{port} \textcolor{keyword}{type}=\textcolor{stringliteral}{"inV"} \textcolor{keyword}{idx}=\textcolor{stringliteral}{"0"} \textcolor{keyword}{x}=\textcolor{stringliteral}{"2415"} \textcolor{keyword}{y}=\textcolor{stringliteral}{"2700"} \textcolor{keyword}{orient}=\textcolor{stringliteral}{"MY"}/> - <\textcolor{keywordtype}{wire}> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{name}=\textcolor{stringliteral}{"inv1"} \textcolor{keyword}{plug}=\textcolor{stringliteral}{"in"}/> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{idx}=\textcolor{stringliteral}{"0"}/> - - - <\textcolor{keywordtype}{net} \textcolor{keyword}{name}=\textcolor{stringliteral}{"internal"}> - <\textcolor{keywordtype}{wire}> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{name}=\textcolor{stringliteral}{"inv1"} \textcolor{keyword}{plug}=\textcolor{stringliteral}{"out"}/> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{name}=\textcolor{stringliteral}{"inv2"} \textcolor{keyword}{plug}=\textcolor{stringliteral}{"in"}/> - - - <\textcolor{keywordtype}{net} \textcolor{keyword}{name}=\textcolor{stringliteral}{"out"}> - <\textcolor{keywordtype}{port} \textcolor{keyword}{type}=\textcolor{stringliteral}{"outV"} \textcolor{keyword}{idx}=\textcolor{stringliteral}{"0"} \textcolor{keyword}{x}=\textcolor{stringliteral}{"2415"} \textcolor{keyword}{y}=\textcolor{stringliteral}{"2200"} \textcolor{keyword}{orient}=\textcolor{stringliteral}{"MY"}/> - <\textcolor{keywordtype}{wire}> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{name}=\textcolor{stringliteral}{"inv2"} \textcolor{keyword}{plug}=\textcolor{stringliteral}{"out"}/> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{idx}=\textcolor{stringliteral}{"0"}/> - - - <\textcolor{keywordtype}{net} \textcolor{keyword}{name}=\textcolor{stringliteral}{"vdd"}> - <\textcolor{keywordtype}{port} \textcolor{keyword}{type}=\textcolor{stringliteral}{"inH"} \textcolor{keyword}{idx}=\textcolor{stringliteral}{"0"} \textcolor{keyword}{x}=\textcolor{stringliteral}{"2200"} \textcolor{keyword}{y}=\textcolor{stringliteral}{"2500"} \textcolor{keyword}{orient}=\textcolor{stringliteral}{"ID"}/> - <\textcolor{keywordtype}{wire}> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{idx}=\textcolor{stringliteral}{"0"}/> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{name}=\textcolor{stringliteral}{"inv2"} \textcolor{keyword}{plug}=\textcolor{stringliteral}{"vdd"}/> - - <\textcolor{keywordtype}{wire}> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{name}=\textcolor{stringliteral}{"inv1"} \textcolor{keyword}{plug}=\textcolor{stringliteral}{"vdd"}/> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{name}=\textcolor{stringliteral}{"inv2"} \textcolor{keyword}{plug}=\textcolor{stringliteral}{"vdd"}/> - - - <\textcolor{keywordtype}{net} \textcolor{keyword}{name}=\textcolor{stringliteral}{"vss"}> - <\textcolor{keywordtype}{port} \textcolor{keyword}{type}=\textcolor{stringliteral}{"inH"} \textcolor{keyword}{idx}=\textcolor{stringliteral}{"0"} \textcolor{keyword}{x}=\textcolor{stringliteral}{"2700"} \textcolor{keyword}{y}=\textcolor{stringliteral}{"2500"} \textcolor{keyword}{orient}=\textcolor{stringliteral}{"MX"}/> - <\textcolor{keywordtype}{wire}> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{idx}=\textcolor{stringliteral}{"0"}/> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{name}=\textcolor{stringliteral}{"inv2"} \textcolor{keyword}{plug}=\textcolor{stringliteral}{"vss"}/> - - <\textcolor{keywordtype}{wire}> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{name}=\textcolor{stringliteral}{"inv1"} \textcolor{keyword}{plug}=\textcolor{stringliteral}{"vss"}/> - <\textcolor{keywordtype}{connector} \textcolor{keyword}{name}=\textcolor{stringliteral}{"inv2"} \textcolor{keyword}{plug}=\textcolor{stringliteral}{"vss"}/> - - - - \end{DoxyCodeInclude} @@ -279,420 +57,10 @@ All source codes are available in the {\ttfamily examples} directory.\hypertarge \hypertarget{openchams_openChamsParseC}{}\subsubsection{Parser}\label{openchams_openChamsParseC} The following code ({\ttfamily parse\+Open\+Chams.\+cpp}) is an example of how to parse a O\+P\+E\+N\+C\+H\+A\+MS file using C++ library. \begin{DoxyCodeInclude} -\textcolor{preprocessor}{#include } -\textcolor{preprocessor}{#include } -\textcolor{preprocessor}{#include } -\textcolor{preprocessor}{#include } -\textcolor{keyword}{using namespace }\mbox{\hyperlink{namespacestd}{std}}; - -\textcolor{preprocessor}{#include "vlsisapd/openChams/Circuit.h"} -\textcolor{preprocessor}{#include "vlsisapd/openChams/Name.h"} -\textcolor{preprocessor}{#include "vlsisapd/openChams/Parameters.h"} -\textcolor{preprocessor}{#include "vlsisapd/openChams/Netlist.h"} -\textcolor{preprocessor}{#include "vlsisapd/openChams/Instance.h"} -\textcolor{preprocessor}{#include "vlsisapd/openChams/Device.h"} -\textcolor{preprocessor}{#include "vlsisapd/openChams/Net.h"} -\textcolor{preprocessor}{#include "vlsisapd/openChams/Transistor.h"} -\textcolor{preprocessor}{#include "vlsisapd/openChams/Schematic.h"} -\textcolor{preprocessor}{#include "vlsisapd/openChams/Sizing.h"} -\textcolor{preprocessor}{#include "vlsisapd/openChams/Operator.h"} -\textcolor{preprocessor}{#include "vlsisapd/openChams/Layout.h"} -\textcolor{preprocessor}{#include "vlsisapd/openChams/Node.h"} -\textcolor{preprocessor}{#include "vlsisapd/openChams/Port.h"} -\textcolor{preprocessor}{#include "vlsisapd/openChams/Wire.h"} -\textcolor{preprocessor}{#include "vlsisapd/openChams/OpenChamsException.h"} - -\textcolor{keywordtype}{void} printHBTree(\mbox{\hyperlink{class_open_chams_1_1_node}{OpenChams::Node}}* node, \textcolor{keywordtype}{unsigned} indent) \{ - \textcolor{keywordflow}{if} (!node) \textcolor{keywordflow}{return}; \textcolor{comment}{// since we pass nnode->getRight and node-getTop without checking for NULL} - \textcolor{keywordflow}{for} (\textcolor{keywordtype}{unsigned} i = 0 ; i < indent ; i++) \{ - cerr << \textcolor{stringliteral}{" |"}; - \} - \textcolor{keywordtype}{string} pos = \textcolor{stringliteral}{""}; - \textcolor{keywordflow}{switch}(node->\mbox{\hyperlink{class_open_chams_1_1_node_a566f4d0bebb46cfd31384a8394a7dbb9}{getPosition}}()) \{ - \textcolor{keywordflow}{case} OpenChams::Node::TOP: - pos = \textcolor{stringliteral}{"top"}; - \textcolor{keywordflow}{break}; - \textcolor{keywordflow}{case} OpenChams::Node::RIGHT: - pos = \textcolor{stringliteral}{"right"}; - \textcolor{keywordflow}{break}; - \textcolor{keywordflow}{default}: - \textcolor{keywordflow}{break}; - \} - \mbox{\hyperlink{class_open_chams_1_1_bloc}{OpenChams::Bloc}}* bloc = \textcolor{keyword}{dynamic\_cast<}\mbox{\hyperlink{class_open_chams_1_1_bloc}{OpenChams::Bloc}}*\textcolor{keyword}{>}(node); - \textcolor{keywordflow}{if} (bloc) \{ - cerr << \textcolor{stringliteral}{" bloc: "} << bloc->\mbox{\hyperlink{class_open_chams_1_1_node_a3fd7335faa33dce2f87c7e50eef3e294}{getName}}().getString() << \textcolor{stringliteral}{" - "} << pos << endl; - printHBTree(bloc->\mbox{\hyperlink{class_open_chams_1_1_node_af59967a8c2d5a04ca0a58e2ef29bead1}{getTop}}() , indent+1); - printHBTree(bloc->\mbox{\hyperlink{class_open_chams_1_1_node_a9533ddcf078ddfc2a4e9bd9ffafa51cb}{getRight}}(), indent+1); - \textcolor{keywordflow}{return}; - \} - \mbox{\hyperlink{class_open_chams_1_1_group}{OpenChams::Group}}* group = \textcolor{keyword}{dynamic\_cast<}\mbox{\hyperlink{class_open_chams_1_1_group}{OpenChams::Group}}*\textcolor{keyword}{>}(node); - \textcolor{keywordflow}{if} (group) \{ - \textcolor{keywordtype}{string} align = \textcolor{stringliteral}{"none"}; - \textcolor{keywordflow}{switch}(group->\mbox{\hyperlink{class_open_chams_1_1_group_a7cff0c4a6957f23fb1ea4598f4b8a0b8}{getAlign}}()) \{ - \textcolor{keywordflow}{case} OpenChams::Group::VERTICAL: - align = \textcolor{stringliteral}{"vertical"}; - \textcolor{keywordflow}{break}; - \textcolor{keywordflow}{case} OpenChams::Group::HORIZONTAL: - align = \textcolor{stringliteral}{"horizontal"}; - \textcolor{keywordflow}{break}; - \textcolor{keywordflow}{default}: - \textcolor{keywordflow}{break}; - \} - cerr << \textcolor{stringliteral}{" group: "} << group->\mbox{\hyperlink{class_open_chams_1_1_node_a3fd7335faa33dce2f87c7e50eef3e294}{getName}}().getString() << \textcolor{stringliteral}{" - "} << pos << \textcolor{stringliteral}{" - align: "} << align - << \textcolor{stringliteral}{" - isolated: "} << group->\mbox{\hyperlink{class_open_chams_1_1_group_ab5ae4a4550c418c974ff6e59967eeec2}{isIsolated}}() << \textcolor{stringliteral}{" - paired: "} << group-> - \mbox{\hyperlink{class_open_chams_1_1_group_aee0abf07a6e9d41f511c648e6eaecea3}{isPaired}}() << endl; - printHBTree(group->getRootNode(), indent+1); - printHBTree(group->\mbox{\hyperlink{class_open_chams_1_1_node_af59967a8c2d5a04ca0a58e2ef29bead1}{getTop}}() , indent+1); - printHBTree(group->\mbox{\hyperlink{class_open_chams_1_1_node_a9533ddcf078ddfc2a4e9bd9ffafa51cb}{getRight}}() , indent+1); - \textcolor{keywordflow}{return}; - \} - cerr << \textcolor{stringliteral}{"[ERROR] printHBTree: node is nor a bloc nor a group !"} << endl; - \textcolor{keywordflow}{return}; -\} - -\textcolor{keywordtype}{int} main(\textcolor{keywordtype}{int} argc, \textcolor{keywordtype}{char} * argv[]) \{ - \textcolor{keywordtype}{string} file = \textcolor{stringliteral}{""}; - \textcolor{keywordflow}{if} (argc == 1) - file = \textcolor{stringliteral}{"./inverter.xml"}; - \textcolor{keywordflow}{else} \textcolor{keywordflow}{if} (argc == 2) - file = argv[1]; - \textcolor{keywordflow}{else} \{ - cerr << \textcolor{stringliteral}{"Usage: openChamsParser [filename]"} << endl; - exit(1); - \} - - \mbox{\hyperlink{class_open_chams_1_1_circuit}{OpenChams::Circuit}}* circuit = NULL; - \textcolor{keywordflow}{try} \{ - circuit = \mbox{\hyperlink{class_open_chams_1_1_circuit_ad0aa3183bdea59e62f69c295026b7fe7}{OpenChams::Circuit::readFromFile}}(file); - \} \textcolor{keywordflow}{catch} (\mbox{\hyperlink{class_open_chams_1_1_open_chams_exception}{OpenChams::OpenChamsException}}& e) \{ - cerr << e.what() << endl; - exit(48); - \} - - cerr << circuit->\mbox{\hyperlink{class_open_chams_1_1_circuit_a2858c0c4e8b5108f041237cf5a802029}{getName}}().getString() << endl; - cerr << \textcolor{stringliteral}{" + parameters"} << endl; - \mbox{\hyperlink{class_open_chams_1_1_parameters}{OpenChams::Parameters}} params = circuit->\mbox{\hyperlink{class_open_chams_1_1_circuit_a2e51ad4344607fc279c5c8cda4edae02}{getParameters}}(); - \textcolor{keywordflow}{if} (!params.\mbox{\hyperlink{class_open_chams_1_1_parameters_af337ffd75e4f019ce15302c60715d84b}{isEmpty}}()) \{ - \textcolor{keywordflow}{for} (map::const\_iterator it = params.\mbox{\hyperlink{class_open_chams_1_1_parameters_a0f890d16c3b2a0bcbdf060854ea07877}{getValues}}().begin() ; it != - params.\mbox{\hyperlink{class_open_chams_1_1_parameters_a0f890d16c3b2a0bcbdf060854ea07877}{getValues}}().end() ; ++it) \{ - cerr << \textcolor{stringliteral}{" | | "} << ((*it).first).getString() << \textcolor{stringliteral}{" : "} << (*it).second << endl; - \} - \} - cerr << \textcolor{stringliteral}{" + netlist"} << endl; - cerr << \textcolor{stringliteral}{" | + instances"} << endl; - \mbox{\hyperlink{class_open_chams_1_1_netlist}{OpenChams::Netlist}}* netlist = circuit->\mbox{\hyperlink{class_open_chams_1_1_circuit_a4085d6a7b6958ffdd7ab5df7e6d6e53f}{getNetlist}}(); - \textcolor{keywordflow}{if} (netlist && !netlist->\mbox{\hyperlink{class_open_chams_1_1_netlist_adab62a25face462baec9a7fffb2b6158}{hasNoInstances}}()) \{ - \textcolor{keywordflow}{for} (\textcolor{keywordtype}{size\_t} i = 0 ; i < netlist->\mbox{\hyperlink{class_open_chams_1_1_netlist_a8e6e58ffab876152a740092520c35d73}{getInstances}}().size() ; i++) \{ - \mbox{\hyperlink{class_open_chams_1_1_instance}{OpenChams::Instance}}* inst = netlist->\mbox{\hyperlink{class_open_chams_1_1_netlist_a8e6e58ffab876152a740092520c35d73}{getInstances}}()[i]; - \mbox{\hyperlink{class_open_chams_1_1_device}{OpenChams::Device}}* dev = NULL; - \textcolor{keywordflow}{if} (dynamic\_cast(inst)) \{ - dev = \textcolor{keyword}{static\_cast<}\mbox{\hyperlink{class_open_chams_1_1_device}{OpenChams::Device}}*\textcolor{keyword}{>}(inst); - cerr << \textcolor{stringliteral}{" | | + "} << dev->getName().getString() << \textcolor{stringliteral}{" : "} << dev->getModel().getString() << \textcolor{stringliteral}{ - " - "} << dev->getOrder() << \textcolor{stringliteral}{" - "} << dev->\mbox{\hyperlink{class_open_chams_1_1_device_a831ce553c23908f447a5be332ecd5946}{getMosType}}().getString() << \textcolor{stringliteral}{" - "} << (dev-> - \mbox{\hyperlink{class_open_chams_1_1_device_a29ed1982e1a8b3a634df8d0c70039669}{isSourceBulkConnected}}()?\textcolor{stringliteral}{"true"}:\textcolor{stringliteral}{"false"}) << endl; - \} \textcolor{keywordflow}{else} \{ - cerr << \textcolor{stringliteral}{" | | + "} << inst->getName().getString() << \textcolor{stringliteral}{" : "} << inst->getModel().getString() < - < \textcolor{stringliteral}{" - "} << inst->getOrder() << endl; - \} - cerr << \textcolor{stringliteral}{" | | | + connectors"} << endl; - \textcolor{keywordflow}{for} (map::const\_iterator cit = inst-> - \mbox{\hyperlink{class_open_chams_1_1_instance_a745fe0a50eb770ce3bea36ef0e62c8ca}{getConnectors}}().begin() ; cit != inst->\mbox{\hyperlink{class_open_chams_1_1_instance_a745fe0a50eb770ce3bea36ef0e62c8ca}{getConnectors}}().end() ; ++cit) \{ - \textcolor{keywordflow}{if} ((*cit).second) - cerr << \textcolor{stringliteral}{" | | | | "} << ((*cit).first).getString() << \textcolor{stringliteral}{" : "} << ((*cit).second)->getName( - ).getString() << endl; - \textcolor{keywordflow}{else} - cerr << \textcolor{stringliteral}{" | | | | "} << ((*cit).first).getString() << endl; \textcolor{comment}{// no net connected !} - \} - \textcolor{keywordflow}{if} (dev) \{ - cerr << \textcolor{stringliteral}{" | | | + transistors"} << endl; - \textcolor{keywordflow}{for} (\textcolor{keywordtype}{size\_t} j = 0 ; j < dev->\mbox{\hyperlink{class_open_chams_1_1_device_a4033525cab6387eb057f71f5feed9802}{getTransistors}}().size() ; j++) \{ - \mbox{\hyperlink{class_open_chams_1_1_transistor}{OpenChams::Transistor}}* tr = dev-> - \mbox{\hyperlink{class_open_chams_1_1_device_a4033525cab6387eb057f71f5feed9802}{getTransistors}}()[j]; - cerr << \textcolor{stringliteral}{" | | | | name: "} << tr->\mbox{\hyperlink{class_open_chams_1_1_transistor_a2858c0c4e8b5108f041237cf5a802029}{getName}}().getString() << \textcolor{stringliteral}{" - gate: "} << tr-> - \mbox{\hyperlink{class_open_chams_1_1_transistor_a99f1449aa735ff6cb4927b4f6aa34d9d}{getGate}}().getString() << \textcolor{stringliteral}{" - source: "} << tr->\mbox{\hyperlink{class_open_chams_1_1_transistor_aee4d52a0b13e6db247c1a6c051aede25}{getSource}}().getString() << \textcolor{stringliteral}{" - drain: "} << tr - ->\mbox{\hyperlink{class_open_chams_1_1_transistor_a62ea0998b3a61310a8331873f5bcce58}{getDrain}}().getString() << \textcolor{stringliteral}{" - bulk: "} << tr->\mbox{\hyperlink{class_open_chams_1_1_transistor_a27ba43f825f9243556ec65d306a2b1a7}{getBulk}}().getString() << endl; - \} - \} - \} - \} - cerr << \textcolor{stringliteral}{" | + nets"} << endl; - \textcolor{keywordtype}{bool} schematicNet = \textcolor{keyword}{false}; \textcolor{comment}{// define wether net sections are needed in schematic section} - \textcolor{keywordflow}{if} (!netlist->\mbox{\hyperlink{class_open_chams_1_1_netlist_a36089e1b3a3f2d3f7c9dcc8e3c3bd6d8}{hasNoNets}}()) \{ - \textcolor{keywordflow}{for} (\textcolor{keywordtype}{size\_t} i = 0 ; i < netlist->\mbox{\hyperlink{class_open_chams_1_1_netlist_abf36db82efb99a8ec8ae4b454be00019}{getNets}}().size() ; i++) \{ - \mbox{\hyperlink{class_open_chams_1_1_net}{OpenChams::Net}}* net = netlist->\mbox{\hyperlink{class_open_chams_1_1_netlist_abf36db82efb99a8ec8ae4b454be00019}{getNets}}()[i]; - cerr << \textcolor{stringliteral}{" | | + "} << net->\mbox{\hyperlink{class_open_chams_1_1_net_a3fd7335faa33dce2f87c7e50eef3e294}{getName}}().getString() << \textcolor{stringliteral}{" : "} << net-> - \mbox{\hyperlink{class_open_chams_1_1_net_a7a88ff26f0ba9cfbfa5059c565d1e30b}{getType}}().getString() << \textcolor{stringliteral}{" - "} << (net->\mbox{\hyperlink{class_open_chams_1_1_net_ab2570574db49633f58f7b64099d6852c}{isExternal}}()?\textcolor{stringliteral}{"true"}:\textcolor{stringliteral}{"false"}) << endl; - cerr << \textcolor{stringliteral}{" | | | + connections"} << endl; - \textcolor{keywordflow}{for} (\textcolor{keywordtype}{size\_t} j = 0 ; j < net->\mbox{\hyperlink{class_open_chams_1_1_net_a87e7c71b25171dd479af0488865c8179}{getConnections}}().size() ; j++) \{ - \mbox{\hyperlink{class_open_chams_1_1_net_1_1_connection}{OpenChams::Net::Connection}}* connect = net-> - \mbox{\hyperlink{class_open_chams_1_1_net_a87e7c71b25171dd479af0488865c8179}{getConnections}}()[j]; - cerr << \textcolor{stringliteral}{" | | | | "} << connect->\mbox{\hyperlink{class_open_chams_1_1_net_1_1_connection_a7d21af8ef567328876b39f135d6c94ca}{getInstanceName}}().getString() << \textcolor{stringliteral}{"."} << - connect->\mbox{\hyperlink{class_open_chams_1_1_net_1_1_connection_a33e7a2599cd477f8190c85d2aba9ce88}{getConnectorName}}().getString() << endl; - \} - \textcolor{keywordflow}{if} (!net->\mbox{\hyperlink{class_open_chams_1_1_net_a3eef7a6d1e945441f197f0918ab8895e}{hasNoPorts}}() || !net->\mbox{\hyperlink{class_open_chams_1_1_net_ac9470e72b26d4cddef3d13e69057ee54}{hasNoWires}}()) - schematicNet = \textcolor{keyword}{true}; - \} - \} - \mbox{\hyperlink{class_open_chams_1_1_schematic}{OpenChams::Schematic}}* schematic = circuit->\mbox{\hyperlink{class_open_chams_1_1_circuit_af6f967a5685ac92fe760f4eb95c8c51f}{getSchematic}}(); - \textcolor{keywordflow}{if} (schematic && !schematic->\mbox{\hyperlink{class_open_chams_1_1_schematic_adab62a25face462baec9a7fffb2b6158}{hasNoInstances}}()) \{ - cerr << \textcolor{stringliteral}{" + schematic"} << endl; - \textcolor{keywordflow}{for} (map::const\_iterator sit = schematic-> - \mbox{\hyperlink{class_open_chams_1_1_schematic_afa015b02922d82de9c44e8ffe8dc5d56}{getInstances}}().begin() ; sit != schematic->\mbox{\hyperlink{class_open_chams_1_1_schematic_afa015b02922d82de9c44e8ffe8dc5d56}{getInstances}}().end() ; ++sit) \{ - \mbox{\hyperlink{class_open_chams_1_1_schematic_1_1_infos}{OpenChams::Schematic::Infos}}* inf = (*sit).second; - cerr << \textcolor{stringliteral}{" | + instance: name: "} << ((*sit).first).getString() << \textcolor{stringliteral}{" - x: "} << inf-> - \mbox{\hyperlink{class_open_chams_1_1_schematic_1_1_infos_a2b69e4312b7814c6efce42f851893409}{getX}}() << \textcolor{stringliteral}{" - y: "} << inf->\mbox{\hyperlink{class_open_chams_1_1_schematic_1_1_infos_a15f19cf52955c8c3406831b288681358}{getY}}() << \textcolor{stringliteral}{" - orientation: "} << inf-> - \mbox{\hyperlink{class_open_chams_1_1_schematic_1_1_infos_ac7e0f89be2baffb526b2dca46da7aa47}{getOrientation}}().getString() << endl; - \} - \textcolor{keywordflow}{if} (schematicNet) \{ - \textcolor{keywordflow}{for} (\textcolor{keywordtype}{size\_t} i = 0 ; i < netlist->\mbox{\hyperlink{class_open_chams_1_1_netlist_abf36db82efb99a8ec8ae4b454be00019}{getNets}}().size() ; i++) \{ - \mbox{\hyperlink{class_open_chams_1_1_net}{OpenChams::Net}}* net = netlist->\mbox{\hyperlink{class_open_chams_1_1_netlist_abf36db82efb99a8ec8ae4b454be00019}{getNets}}()[i]; - cerr << \textcolor{stringliteral}{" | + net name: "} << net->\mbox{\hyperlink{class_open_chams_1_1_net_a3fd7335faa33dce2f87c7e50eef3e294}{getName}}().getString() << endl; - \textcolor{keywordflow}{if} (!net->\mbox{\hyperlink{class_open_chams_1_1_net_a3eef7a6d1e945441f197f0918ab8895e}{hasNoPorts}}()) \{ - \textcolor{keywordflow}{for} (\textcolor{keywordtype}{size\_t} j = 0 ; j < net->\mbox{\hyperlink{class_open_chams_1_1_net_ae9d241ec6dd833b6d7813e14ff2d9eca}{getPorts}}().size() ; j++) \{ - \mbox{\hyperlink{class_open_chams_1_1_port}{OpenChams::Port}}* port = net->\mbox{\hyperlink{class_open_chams_1_1_net_ae9d241ec6dd833b6d7813e14ff2d9eca}{getPorts}}()[j]; - cerr << \textcolor{stringliteral}{" | | + port type: "} << port->\mbox{\hyperlink{class_open_chams_1_1_port_a49fc4eb493558cf55dd00df9ef5f8f08}{getType}}().getString() << \textcolor{stringliteral}{" - idx: "} < - < port->\mbox{\hyperlink{class_open_chams_1_1_port_a743f20da85b9a06d9984c0adc337afc1}{getIndex}}() << \textcolor{stringliteral}{" - x: "} << port->\mbox{\hyperlink{class_open_chams_1_1_port_a344385751bee0720059403940d57a13e}{getX}}() << \textcolor{stringliteral}{" - y: "} << port-> - \mbox{\hyperlink{class_open_chams_1_1_port_aafa51c7f8f38a09febbb9ce7853f77b4}{getY}}() << \textcolor{stringliteral}{" - orientation: "} << port->\mbox{\hyperlink{class_open_chams_1_1_port_ace51e4bf9cee0319600c14723efa0dfb}{getOrientation}}().getString() << endl; - \} - \} - \textcolor{keywordflow}{if} (!net->\mbox{\hyperlink{class_open_chams_1_1_net_ac9470e72b26d4cddef3d13e69057ee54}{hasNoWires}}()) \{ - \textcolor{keywordflow}{for} (\textcolor{keywordtype}{size\_t} j = 0 ; j < net->\mbox{\hyperlink{class_open_chams_1_1_net_a2f8bcf7cad7711850efeca408f146b8a}{getWires}}().size() ; j++) \{ - \mbox{\hyperlink{class_open_chams_1_1_wire}{OpenChams::Wire}}* wire = net->\mbox{\hyperlink{class_open_chams_1_1_net_a2f8bcf7cad7711850efeca408f146b8a}{getWires}}()[j]; - cerr << \textcolor{stringliteral}{" | | + wire "}; - \mbox{\hyperlink{class_open_chams_1_1_wire_point}{OpenChams::WirePoint}}* start = wire-> - \mbox{\hyperlink{class_open_chams_1_1_wire_ad68ddfcb6d4cbbe3c06d03fb4350dcdb}{getStartPoint}}(); - \textcolor{keywordflow}{if} (dynamic\_cast(start)) \{ - \mbox{\hyperlink{class_open_chams_1_1_instance_point}{OpenChams::InstancePoint}}* iP = \textcolor{keyword}{static\_cast<} - \mbox{\hyperlink{class_open_chams_1_1_instance_point}{OpenChams::InstancePoint}}*\textcolor{keyword}{>}(start); - cerr << \textcolor{stringliteral}{"<"} << iP->\mbox{\hyperlink{class_open_chams_1_1_instance_point_a2858c0c4e8b5108f041237cf5a802029}{getName}}().getString() << \textcolor{stringliteral}{","} << iP-> - \mbox{\hyperlink{class_open_chams_1_1_instance_point_a646d464666fc56ab2e04a6b87fdd3279}{getPlug}}().getString() << \textcolor{stringliteral}{"> "}; - \} \textcolor{keywordflow}{else} \textcolor{keywordflow}{if} (dynamic\_cast(start)) \{ - \mbox{\hyperlink{class_open_chams_1_1_port_point}{OpenChams::PortPoint}}* pP = \textcolor{keyword}{static\_cast<} - \mbox{\hyperlink{class_open_chams_1_1_port_point}{OpenChams::PortPoint}}*\textcolor{keyword}{>}(start); - cerr << \textcolor{stringliteral}{"<"} << pP->\mbox{\hyperlink{class_open_chams_1_1_port_point_ab4018980dcd1fed5208e7a72846cd815}{getIndex}}() << \textcolor{stringliteral}{"> "}; - \} - \textcolor{keywordflow}{for} (\textcolor{keywordtype}{size\_t} k = 0 ; k < wire->\mbox{\hyperlink{class_open_chams_1_1_wire_aac2840e22e03db0ff2c0fe0f83c56fdd}{getIntermediatePoints}}().size() ; - k++) \{ - \mbox{\hyperlink{class_open_chams_1_1_intermediate_point}{OpenChams::IntermediatePoint}}* iP = wire-> - \mbox{\hyperlink{class_open_chams_1_1_wire_aac2840e22e03db0ff2c0fe0f83c56fdd}{getIntermediatePoints}}()[k]; - cerr << \textcolor{stringliteral}{"<"} << iP->\mbox{\hyperlink{class_open_chams_1_1_intermediate_point_a2b69e4312b7814c6efce42f851893409}{getX}}() << \textcolor{stringliteral}{","} << iP->\mbox{\hyperlink{class_open_chams_1_1_intermediate_point_a15f19cf52955c8c3406831b288681358}{getY}}() << \textcolor{stringliteral}{"> "}; - \} - \mbox{\hyperlink{class_open_chams_1_1_wire_point}{OpenChams::WirePoint}}* end = wire-> - \mbox{\hyperlink{class_open_chams_1_1_wire_ab1c91025a4117cede119f53d9eb8093b}{getEndPoint}}(); - \textcolor{keywordflow}{if} (dynamic\_cast(end)) \{ - \mbox{\hyperlink{class_open_chams_1_1_instance_point}{OpenChams::InstancePoint}}* iP = \textcolor{keyword}{static\_cast<} - \mbox{\hyperlink{class_open_chams_1_1_instance_point}{OpenChams::InstancePoint}}*\textcolor{keyword}{>}(end); - cerr << \textcolor{stringliteral}{"<"} << iP->\mbox{\hyperlink{class_open_chams_1_1_instance_point_a2858c0c4e8b5108f041237cf5a802029}{getName}}().getString() << \textcolor{stringliteral}{","} << iP-> - \mbox{\hyperlink{class_open_chams_1_1_instance_point_a646d464666fc56ab2e04a6b87fdd3279}{getPlug}}().getString() << \textcolor{stringliteral}{"> "}; - \} \textcolor{keywordflow}{else} \textcolor{keywordflow}{if} (dynamic\_cast(end)) \{ - \mbox{\hyperlink{class_open_chams_1_1_port_point}{OpenChams::PortPoint}}* pP = \textcolor{keyword}{static\_cast<} - \mbox{\hyperlink{class_open_chams_1_1_port_point}{OpenChams::PortPoint}}*\textcolor{keyword}{>}(end); - cerr << \textcolor{stringliteral}{"<"} << pP->\mbox{\hyperlink{class_open_chams_1_1_port_point_ab4018980dcd1fed5208e7a72846cd815}{getIndex}}() << \textcolor{stringliteral}{"> "}; - \} - cerr << endl; - \} - \} - - \} - \} - - \} - \mbox{\hyperlink{class_open_chams_1_1_sizing}{OpenChams::Sizing}}* sizing = circuit->\mbox{\hyperlink{class_open_chams_1_1_circuit_a0ce52bc8747f684ec0123faa8ff97b6d}{getSizing}}(); - \textcolor{keywordflow}{if} (sizing) \{ - cerr << \textcolor{stringliteral}{" + sizing"} << endl; - \textcolor{keywordflow}{if} (!sizing->\mbox{\hyperlink{class_open_chams_1_1_sizing_ac8a299add4fd32ff8bf99c889f4a79a6}{hasNoOperators}}()) \{ - \textcolor{keywordflow}{for} (map::const\_iterator oit = sizing-> - \mbox{\hyperlink{class_open_chams_1_1_sizing_ad35c9083b30dac45186f4f0eb49b435d}{getOperators}}().begin() ; oit != sizing->\mbox{\hyperlink{class_open_chams_1_1_sizing_ad35c9083b30dac45186f4f0eb49b435d}{getOperators}}().end() ; ++oit) \{ - \mbox{\hyperlink{class_open_chams_1_1_operator}{OpenChams::Operator}}* op = (*oit).second; - cerr << \textcolor{stringliteral}{" | + instance name: "} << ((*oit).first).getString() << \textcolor{stringliteral}{" - operator: "} << op-> - \mbox{\hyperlink{class_open_chams_1_1_operator_a2858c0c4e8b5108f041237cf5a802029}{getName}}().getString() << \textcolor{stringliteral}{" - simulModel: "} << op->\mbox{\hyperlink{class_open_chams_1_1_operator_aa189a1b119b44a8877c478e2d2357a89}{getSimulModel}}().getString() << endl; - \textcolor{keywordflow}{if} (!op->\mbox{\hyperlink{class_open_chams_1_1_operator_a9ac68ad3e43b1649a8582c8685f4886d}{hasNoConstraints}}()) \{ - \textcolor{keywordflow}{for} (map::const\_iterator cit = op-> - \mbox{\hyperlink{class_open_chams_1_1_operator_a0002889b395185948d7c71b261343620}{getConstraints}}().begin() ; cit != op->\mbox{\hyperlink{class_open_chams_1_1_operator_a0002889b395185948d7c71b261343620}{getConstraints}}().end() ; ++cit) \{ - \mbox{\hyperlink{class_open_chams_1_1_operator_1_1_constraint}{OpenChams::Operator::Constraint}}* cstr = (*cit). - second; - cerr << \textcolor{stringliteral}{" | | + param: "} << ((*cit).first).getString() << \textcolor{stringliteral}{" - ref: "} << cstr-> - \mbox{\hyperlink{class_open_chams_1_1_operator_1_1_constraint_a07cf74adaf661f0aaaa1818d24c2243d}{getRef}}().getString() << \textcolor{stringliteral}{" - refParam: "} << cstr->\mbox{\hyperlink{class_open_chams_1_1_operator_1_1_constraint_a621539b1a4f31053649031c8034b0bd3}{getRefParam}}().getString() << \textcolor{stringliteral}{" - factor: - "} << cstr->\mbox{\hyperlink{class_open_chams_1_1_operator_1_1_constraint_a973fc85365f2d3f07007d88a90d7ab1d}{getFactor}}() << endl; - \} - \} - \} - \} - \textcolor{comment}{// To update to the new equations.} - \textcolor{comment}{// if (!sizing->hasNoEquations()) \{} - \textcolor{comment}{// cerr << " | + equations" << endl;} - \textcolor{comment}{// for (map::const\_iterator eit = sizing->getEquations().begin() ; eit - != sizing->getEquations().end() ; ++eit) \{} - \textcolor{comment}{// cerr << " | | " << ((*eit).first).getString() << " : " << (*eit).second << endl;} - \textcolor{comment}{// \}} - \textcolor{comment}{// \}} - \} - \mbox{\hyperlink{class_open_chams_1_1_layout}{OpenChams::Layout}}* layout = circuit->\mbox{\hyperlink{class_open_chams_1_1_circuit_a403a908943f9a3e820fd25a86d00531d}{getLayout}}(); - \textcolor{keywordflow}{if} (layout) \{ - \textcolor{keywordflow}{if} (!layout->\mbox{\hyperlink{class_open_chams_1_1_layout_af27a31f10fcf22daa64f35c9c6bd2cda}{hasNoInstance}}()) \{ - cerr << \textcolor{stringliteral}{" + layout"} << endl; - \textcolor{keywordflow}{for} (map::const\_iterator lit = layout-> - \mbox{\hyperlink{class_open_chams_1_1_layout_ab0550a9050b7e788b2a18452c9df21f7}{getInstances}}().begin() ; lit != layout->\mbox{\hyperlink{class_open_chams_1_1_layout_ab0550a9050b7e788b2a18452c9df21f7}{getInstances}}().end() ; ++lit) \{ - cerr << \textcolor{stringliteral}{" | | instance name: "} << ((*lit).first).getString() << \textcolor{stringliteral}{" - style: "} << ((*lit).second - ).getString() << endl; - \} - \} - \mbox{\hyperlink{class_open_chams_1_1_node}{OpenChams::Node}}* root = layout->\mbox{\hyperlink{class_open_chams_1_1_layout_a13df4992219ef28a7dc014e9f5f0566a}{getHBTreeRoot}}(); - \textcolor{keywordflow}{if} (root) \{ - cerr << \textcolor{stringliteral}{" | + hbtree"} << endl; - printHBTree(root, 2); - \} - \} - - - \textcolor{keywordflow}{return} 0; -\} - \end{DoxyCodeInclude} \hypertarget{openchams_openChamsDriveC}{}\subsubsection{Driver}\label{openchams_openChamsDriveC} This C++ code ({\ttfamily drive\+Open\+Chams.\+cpp}) generates an inverter.\+xml file equivalent to the included one. \begin{DoxyCodeInclude} -\textcolor{preprocessor}{#include } -\textcolor{keyword}{using namespace }\mbox{\hyperlink{namespacestd}{std}}; - -\textcolor{preprocessor}{#include "vlsisapd/openChams/Circuit.h"} -\textcolor{preprocessor}{#include "vlsisapd/openChams/Netlist.h"} -\textcolor{preprocessor}{#include "vlsisapd/openChams/Instance.h"} -\textcolor{preprocessor}{#include "vlsisapd/openChams/Device.h"} -\textcolor{preprocessor}{#include "vlsisapd/openChams/Transistor.h"} -\textcolor{preprocessor}{#include "vlsisapd/openChams/Net.h"} -\textcolor{preprocessor}{#include "vlsisapd/openChams/Schematic.h"} -\textcolor{preprocessor}{#include "vlsisapd/openChams/Sizing.h"} -\textcolor{preprocessor}{#include "vlsisapd/openChams/Operator.h"} -\textcolor{preprocessor}{#include "vlsisapd/openChams/Layout.h"} -\textcolor{preprocessor}{#include "vlsisapd/openChams/Node.h"} -\textcolor{preprocessor}{#include "vlsisapd/openChams/Port.h"} -\textcolor{preprocessor}{#include "vlsisapd/openChams/Wire.h"} - -\textcolor{keywordtype}{int} main(\textcolor{keywordtype}{int} argc, \textcolor{keywordtype}{char} * argv[]) \{ - \mbox{\hyperlink{class_open_chams_1_1_circuit}{OpenChams::Circuit}}* circuit = \textcolor{keyword}{new} \mbox{\hyperlink{class_open_chams_1_1_circuit}{OpenChams::Circuit}}( - OpenChams::Name(\textcolor{stringliteral}{"design"}), OpenChams::Name(\textcolor{stringliteral}{"myTech"})); - \textcolor{comment}{// value parameters} - circuit->addParameter(OpenChams::Name(\textcolor{stringliteral}{"temp"}), \textcolor{stringliteral}{"27.0"} ); - circuit->addParameter(OpenChams::Name(\textcolor{stringliteral}{"Vdd"}) , \textcolor{stringliteral}{"1.2"} ); - circuit->addParameter(OpenChams::Name(\textcolor{stringliteral}{"Vss"}) , \textcolor{stringliteral}{"0.0"} ); - circuit->addParameter(OpenChams::Name(\textcolor{stringliteral}{"L"}) , \textcolor{stringliteral}{"0.1e-6"}); - circuit->addParameter(OpenChams::Name(\textcolor{stringliteral}{"Ids"}) , \textcolor{stringliteral}{"30e-6"} ); - circuit->addParameter(OpenChams::Name(\textcolor{stringliteral}{"Veg"}) , \textcolor{stringliteral}{"0.12"} ); - \textcolor{comment}{// equation parameters} - circuit->addParameter(OpenChams::Name(\textcolor{stringliteral}{"complex"}), \textcolor{stringliteral}{"myEq"}); - - \textcolor{comment}{// netlist} - \mbox{\hyperlink{class_open_chams_1_1_netlist}{OpenChams::Netlist}}* netlist = circuit->\mbox{\hyperlink{class_open_chams_1_1_circuit_a3f11671c7ea7b4e2cc3487bd7954b667}{createNetlist}}(); - \textcolor{comment}{// instances} - \textcolor{comment}{// nmos1} - \mbox{\hyperlink{class_open_chams_1_1_device}{OpenChams::Device}}* inst\_nmos1 = netlist->\mbox{\hyperlink{class_open_chams_1_1_netlist_a8e1798a2516c32fbab629ce8d60d4b1d}{addDevice}}(OpenChams::Name(\textcolor{stringliteral}{"nmos1"}), - OpenChams::Name(\textcolor{stringliteral}{"Transistor"}), 1, OpenChams::Name(\textcolor{stringliteral}{"NMOS"}), \textcolor{keyword}{true}); - inst\_nmos1->addConnector(OpenChams::Name(\textcolor{stringliteral}{"G"})); - inst\_nmos1->addConnector(OpenChams::Name(\textcolor{stringliteral}{"S"})); - inst\_nmos1->addConnector(OpenChams::Name(\textcolor{stringliteral}{"D"})); - \mbox{\hyperlink{class_open_chams_1_1_transistor}{OpenChams::Transistor}}* tr\_nmos1 = inst\_nmos1-> - \mbox{\hyperlink{class_open_chams_1_1_device_ad45d34f8765dd113a5b12289efe66c07}{addTransistor}}(OpenChams::Name(\textcolor{stringliteral}{"m1"})); - tr\_nmos1->\mbox{\hyperlink{class_open_chams_1_1_transistor_a705b53a51f0e265533b228f6e8beaf50}{setGate}} (OpenChams::Name(\textcolor{stringliteral}{"G"})); \textcolor{comment}{// the name of the connector of inst\_nmos1} - tr\_nmos1->\mbox{\hyperlink{class_open_chams_1_1_transistor_abc4a5d86e639ea13e27551722e2f9c17}{setSource}}(OpenChams::Name(\textcolor{stringliteral}{"S"})); - tr\_nmos1->\mbox{\hyperlink{class_open_chams_1_1_transistor_a72ff8491040e3fdc1c8bd62b2392ab82}{setDrain}} (OpenChams::Name(\textcolor{stringliteral}{"D"})); - tr\_nmos1->\mbox{\hyperlink{class_open_chams_1_1_transistor_a1484abe63e3f8ffbc2911c5230fa7091}{setBulk}} (OpenChams::Name(\textcolor{stringliteral}{"S"})); - \textcolor{comment}{// pmos1} - \mbox{\hyperlink{class_open_chams_1_1_device}{OpenChams::Device}}* inst\_pmos1 = netlist->\mbox{\hyperlink{class_open_chams_1_1_netlist_a8e1798a2516c32fbab629ce8d60d4b1d}{addDevice}}(OpenChams::Name(\textcolor{stringliteral}{"pmos1"}), - OpenChams::Name(\textcolor{stringliteral}{"Transistor"}), 2, OpenChams::Name(\textcolor{stringliteral}{"PMOS"}), \textcolor{keyword}{true}); - inst\_pmos1->addConnector(OpenChams::Name(\textcolor{stringliteral}{"G"})); - inst\_pmos1->addConnector(OpenChams::Name(\textcolor{stringliteral}{"S"})); - inst\_pmos1->addConnector(OpenChams::Name(\textcolor{stringliteral}{"D"})); - \mbox{\hyperlink{class_open_chams_1_1_transistor}{OpenChams::Transistor}}* tr\_pmos1 = inst\_pmos1-> - \mbox{\hyperlink{class_open_chams_1_1_device_ad45d34f8765dd113a5b12289efe66c07}{addTransistor}}(OpenChams::Name(\textcolor{stringliteral}{"m1"})); - tr\_pmos1->\mbox{\hyperlink{class_open_chams_1_1_transistor_a705b53a51f0e265533b228f6e8beaf50}{setGate}} (OpenChams::Name(\textcolor{stringliteral}{"G"})); \textcolor{comment}{// the name of the connector of inst\_pmos1} - tr\_pmos1->\mbox{\hyperlink{class_open_chams_1_1_transistor_abc4a5d86e639ea13e27551722e2f9c17}{setSource}}(OpenChams::Name(\textcolor{stringliteral}{"S"})); - tr\_pmos1->\mbox{\hyperlink{class_open_chams_1_1_transistor_a72ff8491040e3fdc1c8bd62b2392ab82}{setDrain}} (OpenChams::Name(\textcolor{stringliteral}{"D"})); - tr\_pmos1->\mbox{\hyperlink{class_open_chams_1_1_transistor_a1484abe63e3f8ffbc2911c5230fa7091}{setBulk}} (OpenChams::Name(\textcolor{stringliteral}{"S"})); - \textcolor{comment}{// nets} - \mbox{\hyperlink{class_open_chams_1_1_net}{OpenChams::Net}}* \_vdd = netlist->\mbox{\hyperlink{class_open_chams_1_1_netlist_a52be455a704925328843770552eca43d}{addNet}}(OpenChams::Name(\textcolor{stringliteral}{"vdd"}), OpenChams::Name(\textcolor{stringliteral}{" - power"}) , \textcolor{keyword}{true}); - \mbox{\hyperlink{class_open_chams_1_1_net}{OpenChams::Net}}* \_vss = netlist->\mbox{\hyperlink{class_open_chams_1_1_netlist_a52be455a704925328843770552eca43d}{addNet}}(OpenChams::Name(\textcolor{stringliteral}{"vss"}), OpenChams::Name(\textcolor{stringliteral}{" - ground"}) , \textcolor{keyword}{true}); - \mbox{\hyperlink{class_open_chams_1_1_net}{OpenChams::Net}}* \_in = netlist->\mbox{\hyperlink{class_open_chams_1_1_netlist_a52be455a704925328843770552eca43d}{addNet}}(OpenChams::Name(\textcolor{stringliteral}{"in"} ), OpenChams::Name(\textcolor{stringliteral}{" - logical"}), \textcolor{keyword}{true}); - \mbox{\hyperlink{class_open_chams_1_1_net}{OpenChams::Net}}* \_out = netlist->\mbox{\hyperlink{class_open_chams_1_1_netlist_a52be455a704925328843770552eca43d}{addNet}}(OpenChams::Name(\textcolor{stringliteral}{"out"}), OpenChams::Name(\textcolor{stringliteral}{" - logical"}), \textcolor{keyword}{true}); - \_vdd->\mbox{\hyperlink{class_open_chams_1_1_net_a40c2c019175ba3bfa4b90f4ad5d06483}{connectTo}}(OpenChams::Name(\textcolor{stringliteral}{"pmos1"}), OpenChams::Name(\textcolor{stringliteral}{"S"})); - \_vss->\mbox{\hyperlink{class_open_chams_1_1_net_a40c2c019175ba3bfa4b90f4ad5d06483}{connectTo}}(OpenChams::Name(\textcolor{stringliteral}{"nmos1"}), OpenChams::Name(\textcolor{stringliteral}{"S"})); - \_in->\mbox{\hyperlink{class_open_chams_1_1_net_a40c2c019175ba3bfa4b90f4ad5d06483}{connectTo}} (OpenChams::Name(\textcolor{stringliteral}{"nmos1"}), OpenChams::Name(\textcolor{stringliteral}{"G"})); - \_in->\mbox{\hyperlink{class_open_chams_1_1_net_a40c2c019175ba3bfa4b90f4ad5d06483}{connectTo}} (OpenChams::Name(\textcolor{stringliteral}{"pmos1"}), OpenChams::Name(\textcolor{stringliteral}{"G"})); - \_out->\mbox{\hyperlink{class_open_chams_1_1_net_a40c2c019175ba3bfa4b90f4ad5d06483}{connectTo}}(OpenChams::Name(\textcolor{stringliteral}{"nmos1"}), OpenChams::Name(\textcolor{stringliteral}{"D"})); - \_out->\mbox{\hyperlink{class_open_chams_1_1_net_a40c2c019175ba3bfa4b90f4ad5d06483}{connectTo}}(OpenChams::Name(\textcolor{stringliteral}{"pmos1"}), OpenChams::Name(\textcolor{stringliteral}{"D"})); - - \textcolor{comment}{// schematic} - \mbox{\hyperlink{class_open_chams_1_1_schematic}{OpenChams::Schematic}}* schematic = circuit-> - \mbox{\hyperlink{class_open_chams_1_1_circuit_a57a79a9916df4512648bb195decb7250}{createSchematic}}(); - schematic->\mbox{\hyperlink{class_open_chams_1_1_schematic_ac7fc9f5cdf1e22c53d42e6606e1af8ef}{addInstance}}(OpenChams::Name(\textcolor{stringliteral}{"nmos1"}), 2490, 2600, OpenChams::Name(\textcolor{stringliteral}{"ID"})); - schematic->\mbox{\hyperlink{class_open_chams_1_1_schematic_ac7fc9f5cdf1e22c53d42e6606e1af8ef}{addInstance}}(OpenChams::Name(\textcolor{stringliteral}{"pmos1"}), 2490, 2300, OpenChams::Name(\textcolor{stringliteral}{"ID"})); - \_vdd->\mbox{\hyperlink{class_open_chams_1_1_net_af395a7c9d6f3c2b24500b91260873664}{addPort}}(OpenChams::Name(\textcolor{stringliteral}{"inV"}), 0, 2490, 2100, OpenChams::Name(\textcolor{stringliteral}{"ID"})); - \mbox{\hyperlink{class_open_chams_1_1_wire}{OpenChams::Wire}}* wVdd = \_vdd->\mbox{\hyperlink{class_open_chams_1_1_net_a643a969f62770301b8b70ed63c36a55e}{addWire}}(); - wVdd->setStartPoint(OpenChams::Name(\textcolor{stringliteral}{"pmos1"}), OpenChams::Name(\textcolor{stringliteral}{"S"})); - wVdd->setEndPoint (0); - \_vss->\mbox{\hyperlink{class_open_chams_1_1_net_af395a7c9d6f3c2b24500b91260873664}{addPort}}(OpenChams::Name(\textcolor{stringliteral}{"inV"}), 0, 2490, 2800, OpenChams::Name(\textcolor{stringliteral}{"MY"})); - \mbox{\hyperlink{class_open_chams_1_1_wire}{OpenChams::Wire}}* wVss = \_vss->\mbox{\hyperlink{class_open_chams_1_1_net_a643a969f62770301b8b70ed63c36a55e}{addWire}}(); - wVss->setStartPoint(OpenChams::Name(\textcolor{stringliteral}{"nmos1"}), OpenChams::Name(\textcolor{stringliteral}{"S"})); - wVss->setEndPoint (0); - \_in->\mbox{\hyperlink{class_open_chams_1_1_net_af395a7c9d6f3c2b24500b91260873664}{addPort}}(OpenChams::Name(\textcolor{stringliteral}{"inH"}), 0, 2190, 2500, OpenChams::Name(\textcolor{stringliteral}{"ID"})); - \mbox{\hyperlink{class_open_chams_1_1_wire}{OpenChams::Wire}}* wIn = \_in->\mbox{\hyperlink{class_open_chams_1_1_net_a643a969f62770301b8b70ed63c36a55e}{addWire}}(); - wIn->setStartPoint(OpenChams::Name(\textcolor{stringliteral}{"pmos1"}), OpenChams::Name(\textcolor{stringliteral}{"G"})); - wIn->setEndPoint (OpenChams::Name(\textcolor{stringliteral}{"nmos1"}), OpenChams::Name(\textcolor{stringliteral}{"G"})); - \mbox{\hyperlink{class_open_chams_1_1_wire}{OpenChams::Wire}}* wIn1 = \_in->\mbox{\hyperlink{class_open_chams_1_1_net_a643a969f62770301b8b70ed63c36a55e}{addWire}}(); - wIn1->setStartPoint(0); - wIn1->setEndPoint (OpenChams::Name(\textcolor{stringliteral}{"pmos1"}), OpenChams::Name(\textcolor{stringliteral}{"G"})); - \_out->\mbox{\hyperlink{class_open_chams_1_1_net_af395a7c9d6f3c2b24500b91260873664}{addPort}}(OpenChams::Name(\textcolor{stringliteral}{"outH"}), 0, 2600, 2500, OpenChams::Name(\textcolor{stringliteral}{"ID"})); - \mbox{\hyperlink{class_open_chams_1_1_wire}{OpenChams::Wire}}* wOut = \_out->\mbox{\hyperlink{class_open_chams_1_1_net_a643a969f62770301b8b70ed63c36a55e}{addWire}}(); - wOut->setStartPoint(OpenChams::Name(\textcolor{stringliteral}{"pmos1"}), OpenChams::Name(\textcolor{stringliteral}{"D"})); - wOut->setEndPoint (OpenChams::Name(\textcolor{stringliteral}{"nmos1"}), OpenChams::Name(\textcolor{stringliteral}{"D"})); - \mbox{\hyperlink{class_open_chams_1_1_wire}{OpenChams::Wire}}* wOut1 = \_out->\mbox{\hyperlink{class_open_chams_1_1_net_a643a969f62770301b8b70ed63c36a55e}{addWire}}(); - wOut1->setStartPoint(OpenChams::Name(\textcolor{stringliteral}{"nmos1"}), OpenChams::Name(\textcolor{stringliteral}{"D"})); - wOut1->setEndPoint (0); - - \textcolor{comment}{// sizing} - \mbox{\hyperlink{class_open_chams_1_1_sizing}{OpenChams::Sizing}}* sizing = circuit->createSizing(); - \mbox{\hyperlink{class_open_chams_1_1_operator}{OpenChams::Operator}}* op\_pmos1 = sizing->\mbox{\hyperlink{class_open_chams_1_1_sizing_a712e045c11e463cff8411b3d0fd7f732}{addOperator}}(OpenChams::Name(\textcolor{stringliteral}{" - pmos1"}), OpenChams::Name(\textcolor{stringliteral}{"OPVG(Veg)"}), OpenChams::Name(\textcolor{stringliteral}{"BSIM3V3"})); - op\_pmos1->addConstraint(OpenChams::Name(\textcolor{stringliteral}{"Temp"}), OpenChams::Name(\textcolor{stringliteral}{"design"}), OpenChams::Name(\textcolor{stringliteral}{"temp"})); - op\_pmos1->addConstraint(OpenChams::Name(\textcolor{stringliteral}{"Ids"}) , OpenChams::Name(\textcolor{stringliteral}{"design"}), OpenChams::Name(\textcolor{stringliteral}{"Ids"}) ); - op\_pmos1->addConstraint(OpenChams::Name(\textcolor{stringliteral}{"L"}) , OpenChams::Name(\textcolor{stringliteral}{"design"}), OpenChams::Name(\textcolor{stringliteral}{"L"}) ); - op\_pmos1->addConstraint(OpenChams::Name(\textcolor{stringliteral}{"Veg"}) , OpenChams::Name(\textcolor{stringliteral}{"design"}), OpenChams::Name(\textcolor{stringliteral}{"Veg"}) ); - op\_pmos1->addConstraint(OpenChams::Name(\textcolor{stringliteral}{"Vd"}) , OpenChams::Name(\textcolor{stringliteral}{"design"}), OpenChams::Name(\textcolor{stringliteral}{"Vdd"}) , 0. - 5); - op\_pmos1->addConstraint(OpenChams::Name(\textcolor{stringliteral}{"Vs"}) , OpenChams::Name(\textcolor{stringliteral}{"design"}), OpenChams::Name(\textcolor{stringliteral}{"Vdd"}) ); - \mbox{\hyperlink{class_open_chams_1_1_operator}{OpenChams::Operator}}* op\_nmos1 = sizing->\mbox{\hyperlink{class_open_chams_1_1_sizing_a712e045c11e463cff8411b3d0fd7f732}{addOperator}}(OpenChams::Name(\textcolor{stringliteral}{" - nmos1"}), OpenChams::Name(\textcolor{stringliteral}{"OPW(Vg,Vs)"}), OpenChams::Name(\textcolor{stringliteral}{"BSIM3V3"})); - op\_nmos1->addConstraint(OpenChams::Name(\textcolor{stringliteral}{"Temp"}), OpenChams::Name(\textcolor{stringliteral}{"design"}), OpenChams::Name(\textcolor{stringliteral}{"temp"})); - op\_nmos1->addConstraint(OpenChams::Name(\textcolor{stringliteral}{"Ids"}) , OpenChams::Name(\textcolor{stringliteral}{"design"}), OpenChams::Name(\textcolor{stringliteral}{"Ids"} )); - op\_nmos1->addConstraint(OpenChams::Name(\textcolor{stringliteral}{"L"}) , OpenChams::Name(\textcolor{stringliteral}{"design"}), OpenChams::Name(\textcolor{stringliteral}{"L"} )); - op\_nmos1->addConstraint(OpenChams::Name(\textcolor{stringliteral}{"Vs"}) , OpenChams::Name(\textcolor{stringliteral}{"design"}), OpenChams::Name(\textcolor{stringliteral}{"Vdd"} )); - op\_nmos1->addConstraint(OpenChams::Name(\textcolor{stringliteral}{"Vg"}) , OpenChams::Name(\textcolor{stringliteral}{"pmos1"}) , OpenChams::Name(\textcolor{stringliteral}{"Vg"} )); - op\_nmos1->addConstraint(OpenChams::Name(\textcolor{stringliteral}{"Vd"}) , OpenChams::Name(\textcolor{stringliteral}{"pmos1"}) , OpenChams::Name(\textcolor{stringliteral}{"Vd"} )); - op\_nmos1->addConstraint(OpenChams::Name(\textcolor{stringliteral}{"another"}), OpenChams::Name(\textcolor{stringliteral}{"myEq"}), -2.5 ); - \textcolor{comment}{// layout} - \mbox{\hyperlink{class_open_chams_1_1_layout}{OpenChams::Layout}}* layout = circuit->\mbox{\hyperlink{class_open_chams_1_1_circuit_a725a691b0117c4b913b54e7bfd92832f}{createLayout}}(); - layout->\mbox{\hyperlink{class_open_chams_1_1_layout_a4cc1899e9b782de44700fa0e4ac477ef}{addInstance}}(OpenChams::Name(\textcolor{stringliteral}{"pmos1"}), OpenChams::Name(\textcolor{stringliteral}{"Common transistor"})); - layout->\mbox{\hyperlink{class_open_chams_1_1_layout_a4cc1899e9b782de44700fa0e4ac477ef}{addInstance}}(OpenChams::Name(\textcolor{stringliteral}{"nmos1"}), OpenChams::Name(\textcolor{stringliteral}{"Rotate transistor"})); - \textcolor{comment}{// create hbtree} - \mbox{\hyperlink{class_open_chams_1_1_group}{OpenChams::Group}}* g1 = \textcolor{keyword}{new} \mbox{\hyperlink{class_open_chams_1_1_group}{OpenChams::Group}}(\textcolor{stringliteral}{"g1"}); \textcolor{comment}{// default position - is NONE and default parent is NULL} - g1->\mbox{\hyperlink{class_open_chams_1_1_group_a9fc27b2bc4da99c723102153c4fbf1c0}{setAlign}}(OpenChams::Group::VERTICAL); - \mbox{\hyperlink{class_open_chams_1_1_bloc}{OpenChams::Bloc}}* b1 = \textcolor{keyword}{new} \mbox{\hyperlink{class_open_chams_1_1_bloc}{OpenChams::Bloc}}(\textcolor{stringliteral}{"nmos1"}, OpenChams::Node::NONE, - g1); - g1->\mbox{\hyperlink{class_open_chams_1_1_group_adc93b900e943312e905182fe44f21225}{setRootNode}}(b1); \textcolor{comment}{// b1 is root node of group g1} - \mbox{\hyperlink{class_open_chams_1_1_bloc}{OpenChams::Bloc}}* b2 = \textcolor{keyword}{new} \mbox{\hyperlink{class_open_chams_1_1_bloc}{OpenChams::Bloc}}(\textcolor{stringliteral}{"pmos1"}, OpenChams::Node::TOP, - b1); - b1->\mbox{\hyperlink{class_open_chams_1_1_node_a32e2fbbb73c6b7ee4a30189cc30106bf}{setTop}}(b2); \textcolor{comment}{// b2 is on top of b1} - layout->\mbox{\hyperlink{class_open_chams_1_1_layout_a6d828958e0faf1346b27276eab101858}{setHBTreeRoot}}(g1); \textcolor{comment}{// g1 is the root of the tree} - - circuit->\mbox{\hyperlink{class_open_chams_1_1_circuit_a2eb07935ec946a07edcee2255b781193}{writeToFile}}(\textcolor{stringliteral}{"./myInverter.xml"}); - \textcolor{keywordflow}{return} 0; -\} - \end{DoxyCodeInclude} @@ -709,243 +77,10 @@ In order to compile these codes, a C\+Make\+Lists.\+txt file is provided. User m \hypertarget{openchams_openChamsParsePython}{}\subsubsection{Parser}\label{openchams_openChamsParsePython} The following python script ({\ttfamily parse\+Open\+Chams.\+py}) is an example of how to parse a O\+P\+E\+N\+C\+H\+A\+MS file using python module. \begin{DoxyCodeInclude} -\textcolor{keyword}{import} sys - -\textcolor{keyword}{from} OPENCHAMS \textcolor{keyword}{import} * - -\textcolor{keyword}{def }printHBTree(node, indent): - \textcolor{keywordflow}{if} node == \textcolor{keywordtype}{None}: - \textcolor{keywordflow}{return} - \textcolor{keywordflow}{for} i \textcolor{keywordflow}{in} range(indent): - \textcolor{keywordflow}{print} \textcolor{stringliteral}{" |"}, - \textcolor{keywordflow}{if} isinstance(node, Bloc): - \textcolor{keywordflow}{print} \textcolor{stringliteral}{" bloc:"}, node.getName(), \textcolor{stringliteral}{"-"}, node.getPosition() - printHBTree(node.top , indent+1) - printHBTree(node.right, indent+1) - \textcolor{keywordflow}{return} - \textcolor{keywordflow}{if} isinstance(node, Group): - \textcolor{keywordflow}{print} \textcolor{stringliteral}{" group:"}, node.getName(), \textcolor{stringliteral}{"-"}, node.getPosition(), \textcolor{stringliteral}{"-"}, node.align, \textcolor{stringliteral}{"-"}, node.isolated, \textcolor{stringliteral}{"-"}, - node.paired - printHBTree(node.rootNode, indent+1) - printHBTree(node.top , indent+1) - printHBTree(node.right , indent+1) - \textcolor{keywordflow}{return} - -\textcolor{keyword}{def }printContents(circuit): - \textcolor{keywordflow}{print} circuit.name - \textcolor{comment}{# circuit parameters} - \textcolor{keywordflow}{print} \textcolor{stringliteral}{" + parameters"} - \textcolor{keywordflow}{for} param \textcolor{keywordflow}{in} circuit.parameters.getValues(): - \textcolor{keywordflow}{print} \textcolor{stringliteral}{" | |"}, param.key, \textcolor{stringliteral}{":"}, param.value - \textcolor{keywordflow}{for} param \textcolor{keywordflow}{in} circuit.parameters.getEqValues(): - \textcolor{keywordflow}{print} \textcolor{stringliteral}{" | |"}, param.key, \textcolor{stringliteral}{":"}, param.value - \textcolor{comment}{# netlist} - \textcolor{keywordflow}{print} \textcolor{stringliteral}{" + netlist"} - \textcolor{comment}{# instances} - \textcolor{keywordflow}{print} \textcolor{stringliteral}{" | + instances"} - \textcolor{keywordflow}{for} instance \textcolor{keywordflow}{in} circuit.netlist.getInstances(): - \textcolor{keywordflow}{if} isinstance(instance, Device): - \textcolor{keywordflow}{print} \textcolor{stringliteral}{" | | +"}, instance.name, \textcolor{stringliteral}{":"}, instance.model, instance.order, instance.mosType, - instance.sourceBulkConnected - \textcolor{keywordflow}{else}: - \textcolor{keywordflow}{print} \textcolor{stringliteral}{" | | +"}, instance.name, \textcolor{stringliteral}{":"}, instance.model, instance.order - \textcolor{keywordflow}{print} \textcolor{stringliteral}{" | | | + connectors"} - \textcolor{keywordflow}{for} conn \textcolor{keywordflow}{in} instance.getConnectors(): - \textcolor{keywordflow}{print} \textcolor{stringliteral}{" | | | |"}, conn.key, \textcolor{stringliteral}{":"}, conn.value.name - \textcolor{keywordflow}{if} isinstance(instance, Device): - \textcolor{keywordflow}{print} \textcolor{stringliteral}{" | | | + transistors"} - \textcolor{keywordflow}{for} tr \textcolor{keywordflow}{in} instance.getTransistors(): - \textcolor{keywordflow}{print} \textcolor{stringliteral}{" | | | | name:"}, tr.name, \textcolor{stringliteral}{"- gate:"}, tr.gate, \textcolor{stringliteral}{"- source:"}, tr.source, \textcolor{stringliteral}{"- drain:"}, tr.drain, \textcolor{stringliteral}{ - "- bulk:"}, tr.bulk - \textcolor{comment}{# nets} - \textcolor{keywordflow}{print} \textcolor{stringliteral}{" | + nets"} - schematicNet = \textcolor{keyword}{False} - \textcolor{keywordflow}{for} net \textcolor{keywordflow}{in} circuit.netlist.getNets(): - \textcolor{keywordflow}{print} \textcolor{stringliteral}{" | | +"}, net.name, \textcolor{stringliteral}{":"}, net.type, net.external - \textcolor{keywordflow}{print} \textcolor{stringliteral}{" | | | + connections"} - \textcolor{keywordflow}{for} conn \textcolor{keywordflow}{in} net.getConnections(): - \textcolor{keywordflow}{print} \textcolor{stringliteral}{" | | | | %s.%s"}%(conn.instanceName, conn.connectorName) - \textcolor{keywordflow}{if} \textcolor{keywordflow}{not} net.hasNoPorts() \textcolor{keywordflow}{or} \textcolor{keywordflow}{not} net.hasNoWires(): - schematicNet = \textcolor{keyword}{True} - \textcolor{comment}{# schematic} - \textcolor{keywordflow}{if} (circuit.schematic): - \textcolor{keywordflow}{print} \textcolor{stringliteral}{" + schematic"} - \textcolor{keywordflow}{for} instance \textcolor{keywordflow}{in} circuit.schematic.getInstances(): - \textcolor{keywordflow}{print} \textcolor{stringliteral}{" | + instance name:"}, instance.key, \textcolor{stringliteral}{"- x:"}, instance.value.x, \textcolor{stringliteral}{"- y:"}, instance.value.y, \textcolor{stringliteral}{"- - orientation:"}, instance.value.orientation - \textcolor{keywordflow}{if} schematicNet: - \textcolor{keywordflow}{for} net \textcolor{keywordflow}{in} circuit.netlist.getNets(): - \textcolor{keywordflow}{if} net.hasNoPorts() \textcolor{keywordflow}{and} net.hasNoWires(): - \textcolor{keywordflow}{continue} - \textcolor{keywordflow}{print} \textcolor{stringliteral}{" | + net name:"}, net.name - \textcolor{keywordflow}{for} port \textcolor{keywordflow}{in} net.getPorts(): - \textcolor{keywordflow}{print} \textcolor{stringliteral}{" | | + port type:"}, port.type, \textcolor{stringliteral}{"- idx:"}, port.index, \textcolor{stringliteral}{"- x:"}, port.x, \textcolor{stringliteral}{"- y:"}, port.y, \textcolor{stringliteral}{" - - orientation:"}, port.orientation - \textcolor{keywordflow}{for} wire \textcolor{keywordflow}{in} net.getWires(): - \textcolor{keywordflow}{if} isinstance(wire.startPoint, InstancePoint): - \textcolor{keywordflow}{print} \textcolor{stringliteral}{" | | + wire <"} + wire.startPoint.name.getString() + \textcolor{stringliteral}{","} + - wire.startPoint.plug.getString() +\textcolor{stringliteral}{">"} - \textcolor{keywordflow}{elif} isinstance(wire.startPoint, PortPoint): - \textcolor{keywordflow}{print} \textcolor{stringliteral}{" | | + wire <"} + str(wire.startPoint.index) + \textcolor{stringliteral}{">"} - \textcolor{keywordflow}{else}: - \textcolor{keywordflow}{print} \textcolor{stringliteral}{" - - UNKNOWN START POINT"} - \textcolor{keywordflow}{for} point \textcolor{keywordflow}{in} wire.getIntermediatePoints(): - \textcolor{keywordflow}{print} \textcolor{stringliteral}{" | | <"} + str(point.x) + \textcolor{stringliteral}{","} + str(point.y) + \textcolor{stringliteral}{">"} - \textcolor{keywordflow}{if} isinstance(wire.endPoint, InstancePoint): - \textcolor{keywordflow}{print} \textcolor{stringliteral}{" | | <"} + wire.endPoint.name.getString() + \textcolor{stringliteral}{","} + - wire.endPoint.plug.getString() +\textcolor{stringliteral}{">"} - \textcolor{keywordflow}{elif} isinstance(wire.endPoint, PortPoint): - \textcolor{keywordflow}{print} \textcolor{stringliteral}{" | | <"} + str(wire.endPoint.index) + \textcolor{stringliteral}{">"} - \textcolor{keywordflow}{else}: - \textcolor{keywordflow}{print} \textcolor{stringliteral}{" - - UNKNOWN END POINT"} - \textcolor{comment}{# sizing} - \textcolor{keywordflow}{if} (circuit.sizing): - \textcolor{keywordflow}{print} \textcolor{stringliteral}{" + sizing"} - \textcolor{keywordflow}{for} op \textcolor{keywordflow}{in} circuit.sizing.getOperators(): - \textcolor{keywordflow}{print} \textcolor{stringliteral}{" | + instance name:"}, op.key, \textcolor{stringliteral}{"- operator:"}, op.value.name, \textcolor{stringliteral}{"- simulModel:"}, - op.value.simulModel - \textcolor{keywordflow}{for} constraint \textcolor{keywordflow}{in} op.value.getConstraints(): - \textcolor{keywordflow}{print} \textcolor{stringliteral}{" | | + param:"}, constraint.key, \textcolor{stringliteral}{"- ref:"}, constraint.value.ref, \textcolor{stringliteral}{"- refParam:"}, - constraint.value.refParam, \textcolor{stringliteral}{"- factor:"}, constraint.value.factor - \textcolor{keywordflow}{print} \textcolor{stringliteral}{" | + equations"} - \textcolor{keywordflow}{for} eq \textcolor{keywordflow}{in} circuit.sizing.getEquations(): - \textcolor{keywordflow}{print} \textcolor{stringliteral}{" | |"}, eq.key, \textcolor{stringliteral}{":"}, eq.value - \textcolor{comment}{# layout} - \textcolor{keywordflow}{if} (circuit.layout): - \textcolor{keywordflow}{print} \textcolor{stringliteral}{" + layout"} - \textcolor{keywordflow}{for} inst \textcolor{keywordflow}{in} circuit.layout.getInstances(): - \textcolor{keywordflow}{print} \textcolor{stringliteral}{" | | instance name:"}, inst.key, \textcolor{stringliteral}{"- style:"}, inst.value - \textcolor{keywordflow}{if} circuit.layout.hbTreeRoot != \textcolor{keywordtype}{None}: - \textcolor{keywordflow}{print} \textcolor{stringliteral}{" | + hbtree"} - printHBTree(circuit.layout.hbTreeRoot, 2) - -\textcolor{keyword}{def }usage(): - \textcolor{keywordflow}{print} \textcolor{stringliteral}{"usage:"}, sys.argv[0], \textcolor{stringliteral}{"[filename]"} - sys.exit(48) - -\textcolor{keyword}{def }main(): - \textcolor{keywordflow}{if} len(sys.argv) == 1: - filename = \textcolor{stringliteral}{"./inverter.xml"} - \textcolor{keywordflow}{elif} len(sys.argv) == 2: - filename = sys.argv[1] - \textcolor{keywordflow}{else}: - usage() - - circuit = Circuit.readFromFile(filename) - printContents(circuit) - - -\textcolor{keywordflow}{if} \_\_name\_\_ == \textcolor{stringliteral}{"\_\_main\_\_"}: - main() - \end{DoxyCodeInclude} \hypertarget{openchams_openChamsDrivePython}{}\subsubsection{Driver}\label{openchams_openChamsDrivePython} This python script ({\ttfamily drive\+Open\+Chams.\+py}) generates an inverter.\+xml file equivalent to the included one. \begin{DoxyCodeInclude} -\textcolor{keyword}{from} OPENCHAMS \textcolor{keyword}{import} * - -circuit = Circuit(\mbox{\hyperlink{class_name}{Name}}(\textcolor{stringliteral}{"design"}), \mbox{\hyperlink{class_name}{Name}}(\textcolor{stringliteral}{"myTech"})) -\textcolor{comment}{# value parameters} -circuit.addParameter(\mbox{\hyperlink{class_name}{Name}}(\textcolor{stringliteral}{"temp"}), 27.0 ) -circuit.addParameter(\mbox{\hyperlink{class_name}{Name}}(\textcolor{stringliteral}{"Vdd"}) , 1.2 ) -circuit.addParameter(\mbox{\hyperlink{class_name}{Name}}(\textcolor{stringliteral}{"Vss"}) , 0.0 ) -circuit.addParameter(\mbox{\hyperlink{class_name}{Name}}(\textcolor{stringliteral}{"L"}) , 0.1e-6) -circuit.addParameter(\mbox{\hyperlink{class_name}{Name}}(\textcolor{stringliteral}{"Ids"}) , 30e-6 ) -circuit.addParameter(\mbox{\hyperlink{class_name}{Name}}(\textcolor{stringliteral}{"Veg"}) , 0.12 ) -\textcolor{comment}{# equation parameters} -circuit.addParameter(\mbox{\hyperlink{class_name}{Name}}(\textcolor{stringliteral}{"complex"}), \textcolor{stringliteral}{"myEq"}) - -\textcolor{comment}{# netlist :} -netlist = circuit.createNetlist() -\textcolor{comment}{# instances} -\textcolor{comment}{# nmos1} -inst\_nmos1 = netlist.addDevice(\textcolor{stringliteral}{"nmos1"}, \textcolor{stringliteral}{"Transistor"}, 1, \textcolor{stringliteral}{"NMOS"}, \textcolor{keyword}{True}) -inst\_nmos1.addConnector(\textcolor{stringliteral}{"G"}) -inst\_nmos1.addConnector(\textcolor{stringliteral}{"S"}) -inst\_nmos1.addConnector(\textcolor{stringliteral}{"D"}) -tr\_nmos1 = inst\_nmos1.addTransistor(\textcolor{stringliteral}{"m1"}) -tr\_nmos1.gate = \textcolor{stringliteral}{"G"} \textcolor{comment}{# the name of the connector of inst\_nmos1} -tr\_nmos1.source = \textcolor{stringliteral}{"S"} -tr\_nmos1.drain = \textcolor{stringliteral}{"D"} -tr\_nmos1.bulk = \textcolor{stringliteral}{"S"} -\textcolor{comment}{# pmos1} -inst\_pmos1 = netlist.addDevice(\textcolor{stringliteral}{"pmos1"}, \textcolor{stringliteral}{"Transistor"}, 2, \textcolor{stringliteral}{"PMOS"}, \textcolor{keyword}{True}) -inst\_pmos1.addConnector(\textcolor{stringliteral}{"G"}) -inst\_pmos1.addConnector(\textcolor{stringliteral}{"S"}) -inst\_pmos1.addConnector(\textcolor{stringliteral}{"D"}) -tr\_pmos1 = inst\_pmos1.addTransistor(\textcolor{stringliteral}{"m1"}) -tr\_pmos1.gate = \textcolor{stringliteral}{"G"} \textcolor{comment}{# the name of the connector of inst\_pmos1} -tr\_pmos1.source = \textcolor{stringliteral}{"S"} -tr\_pmos1.drain = \textcolor{stringliteral}{"D"} -tr\_pmos1.bulk = \textcolor{stringliteral}{"S"} -\textcolor{comment}{# nets} -\_vdd = netlist.addNet(\textcolor{stringliteral}{"vdd"}, \textcolor{stringliteral}{"power"} , \textcolor{keyword}{True}) -\_vss = netlist.addNet(\textcolor{stringliteral}{"vss"}, \textcolor{stringliteral}{"ground"} , \textcolor{keyword}{True}) -\_in = netlist.addNet(\textcolor{stringliteral}{"in"} , \textcolor{stringliteral}{"logical"}, \textcolor{keyword}{True}) -\_out = netlist.addNet(\textcolor{stringliteral}{"out"}, \textcolor{stringliteral}{"logical"}, \textcolor{keyword}{True}) -\_vdd.connectTo(\textcolor{stringliteral}{"pmos1"}, \textcolor{stringliteral}{"S"}) -\_vss.connectTo(\textcolor{stringliteral}{"nmos1"}, \textcolor{stringliteral}{"S"}) -\_in.connectTo (\textcolor{stringliteral}{"nmos1"}, \textcolor{stringliteral}{"G"}) -\_in.connectTo (\textcolor{stringliteral}{"pmos1"}, \textcolor{stringliteral}{"G"}) -\_out.connectTo(\textcolor{stringliteral}{"nmos1"}, \textcolor{stringliteral}{"D"}) -\_out.connectTo(\textcolor{stringliteral}{"pmos1"}, \textcolor{stringliteral}{"D"}) -\textcolor{comment}{# schematic} -schematic = circuit.createSchematic() -schematic.addInstance(\textcolor{stringliteral}{"nmos1"}, 2490, 2600, \textcolor{stringliteral}{"ID"}) -schematic.addInstance(\textcolor{stringliteral}{"pmos1"}, 2490, 2300, \textcolor{stringliteral}{"ID"}) -\_vdd.addPort(\textcolor{stringliteral}{"inV"} , 0, 2490, 2100, \textcolor{stringliteral}{"ID"}) -\_vss.addPort(\textcolor{stringliteral}{"inV"} , 0, 2490, 2800, \textcolor{stringliteral}{"MY"}) -\_in.addPort (\textcolor{stringliteral}{"inH"} , 0, 2190, 2500, \textcolor{stringliteral}{"ID"}) -\_out.addPort(\textcolor{stringliteral}{"outH"}, 0, 2600, 2500, \textcolor{stringliteral}{"ID"}) -wireVdd = \_vdd.addWire() -wireVdd.setStartPoint(\textcolor{stringliteral}{"pmos1"}, \textcolor{stringliteral}{"S"}) -wireVdd.setEndPoint(0) -wireVss = \_vss.addWire() -wireVss.setStartPoint(\textcolor{stringliteral}{"nmos1"}, \textcolor{stringliteral}{"S"}) -wireVss.setEndPoint(0) -wireIn0 = \_in.addWire() -wireIn1 = \_in.addWire() -wireIn0.setStartPoint(\textcolor{stringliteral}{"pmos1"}, \textcolor{stringliteral}{"G"}) -wireIn0.setEndPoint (\textcolor{stringliteral}{"nmos1"}, \textcolor{stringliteral}{"G"}) -wireIn1.setStartPoint(0) -wireIn1.setEndPoint (\textcolor{stringliteral}{"pmos1"}, \textcolor{stringliteral}{"G"}) -wireOut0 = \_out.addWire() -wireOut1 = \_out.addWire() -wireOut0.setStartPoint(\textcolor{stringliteral}{"pmos1"}, \textcolor{stringliteral}{"D"}) -wireOut0.setEndPoint (\textcolor{stringliteral}{"nmos1"}, \textcolor{stringliteral}{"D"}) -wireOut1.setStartPoint(\textcolor{stringliteral}{"nmos1"}, \textcolor{stringliteral}{"D"}) -wireOut1.setEndPoint (0) -\textcolor{comment}{# sizing} -sizing = circuit.createSizing() -op\_pmos1 = sizing.addOperator(\textcolor{stringliteral}{"pmos1"}, \textcolor{stringliteral}{"OPVG(Veg)"} , \textcolor{stringliteral}{"BSIM3V3"}) -op\_pmos1.addConstraint(\textcolor{stringliteral}{"Temp"}, \textcolor{stringliteral}{"design"}, \textcolor{stringliteral}{"temp"}) -op\_pmos1.addConstraint(\textcolor{stringliteral}{"Ids"} , \textcolor{stringliteral}{"design"}, \textcolor{stringliteral}{"Ids"} ) -op\_pmos1.addConstraint(\textcolor{stringliteral}{"L"} , \textcolor{stringliteral}{"design"}, \textcolor{stringliteral}{"L"} ) -op\_pmos1.addConstraint(\textcolor{stringliteral}{"Veg"} , \textcolor{stringliteral}{"design"}, \textcolor{stringliteral}{"Veg"} ) -op\_pmos1.addConstraint(\textcolor{stringliteral}{"Vd"} , \textcolor{stringliteral}{"design"}, \textcolor{stringliteral}{"Vdd"}, 0.5) -op\_pmos1.addConstraint(\textcolor{stringliteral}{"Vs"} , \textcolor{stringliteral}{"design"}, \textcolor{stringliteral}{"Vdd"} ) -op\_nmos1 = sizing.addOperator(\textcolor{stringliteral}{"nmos1"}, \textcolor{stringliteral}{"OPW(Vg,Vs)"}, \textcolor{stringliteral}{"BSIM3V3"}) -op\_nmos1.addConstraint(\textcolor{stringliteral}{"Temp"}, \textcolor{stringliteral}{"design"}, \textcolor{stringliteral}{"temp"}) -op\_nmos1.addConstraint(\textcolor{stringliteral}{"Ids"} , \textcolor{stringliteral}{"design"}, \textcolor{stringliteral}{"Ids"} ) -op\_nmos1.addConstraint(\textcolor{stringliteral}{"L"} , \textcolor{stringliteral}{"design"}, \textcolor{stringliteral}{"L"} ) -op\_nmos1.addConstraint(\textcolor{stringliteral}{"Vs"} , \textcolor{stringliteral}{"design"}, \textcolor{stringliteral}{"Vdd"} ) -op\_nmos1.addConstraint(\textcolor{stringliteral}{"Vg"} , \textcolor{stringliteral}{"pmos1"} , \textcolor{stringliteral}{"Vg"} ) -op\_nmos1.addConstraint(\textcolor{stringliteral}{"Vd"} , \textcolor{stringliteral}{"pmos1"} , \textcolor{stringliteral}{"Vd"} ) -op\_nmos1.addConstraint(\textcolor{stringliteral}{"another"}, \textcolor{stringliteral}{"myEq"}, -2.5 ) -\textcolor{comment}{# layout} -layout = circuit.createLayout() -layout.addInstance(\textcolor{stringliteral}{"pmos1"}, \textcolor{stringliteral}{"Common transistor"}) -layout.addInstance(\textcolor{stringliteral}{"nmos1"}, \textcolor{stringliteral}{"Rotate transistor"}) -\textcolor{comment}{# create hbtree} -g1 = Group(\textcolor{stringliteral}{"g1"}) -g1.align = Group.Align.VERTICAL -b1 = Bloc(\textcolor{stringliteral}{"nmos1"}, Node.Position.NONE, g1) -g1.rootNode = b1 -b2 = Bloc(\textcolor{stringliteral}{"pmos1"}, Node.Position.TOP, b1) -b1.top = b2 -layout.hbTreeRoot = g1 - -circuit.writeToFile(\textcolor{stringliteral}{"./myInverter.xml"}) \end{DoxyCodeInclude} diff --git a/vlsisapd/doc/latex/refman.tex b/vlsisapd/doc/latex/refman.tex index 96d2f5ee..0cc535cd 100644 --- a/vlsisapd/doc/latex/refman.tex +++ b/vlsisapd/doc/latex/refman.tex @@ -166,65 +166,53 @@ \input{spice} \chapter{Data Structure Documentation} \input{class_d_t_r_1_1_a_rule} -\input{class_open_chams_1_1_bloc} +\input{class_bloc} \input{class_s_p_i_c_e_1_1_capacitor} \input{class_c_i_f_1_1_circuit} -\input{class_open_chams_1_1_circuit} \input{class_s_p_i_c_e_1_1_circuit} -\input{class_open_chams_1_1_net_1_1_connection} -\input{class_open_chams_1_1_operator_1_1_constraint} +\input{class_circuit} +\input{class_net_1_1_connection} +\input{class_operator_1_1_constraint} \input{class_s_p_i_c_e_1_1_current} -\input{class_open_chams_1_1_d_d_p} -\input{class_open_chams_1_1_designer_cstr_o_c} -\input{class_open_chams_1_1_device} -\input{class_open_chams_1_1_d_slicing_node} +\input{class_device} \input{class_d_t_r_1_1_d_t_r_exception} \input{class_a_g_d_s_1_1_element} -\input{class_open_chams_1_1_equation} -\input{class_open_chams_1_1_group} -\input{class_open_chams_1_1_high_level_cstr} -\input{class_open_chams_1_1_h_slicing_node} -\input{class_open_chams_1_1_h_v_slicing_node} -\input{class_open_chams_1_1_schematic_1_1_infos} -\input{class_open_chams_1_1_instance} +\input{class_group} +\input{class_schematic_1_1_infos} \input{class_s_p_i_c_e_1_1_instance} -\input{class_open_chams_1_1_instance_point} -\input{class_open_chams_1_1_intermediate_point} -\input{class_open_chams_1_1_layout} +\input{class_instance} +\input{class_instance_point} +\input{class_intermediate_point} +\input{class_layout} \input{class_a_g_d_s_1_1_library} -\input{struct_open_chams_1_1map__item} \input{struct_s_p_i_c_e_1_1map__item} \input{class_s_p_i_c_e_1_1_mosfet} \input{class_name} -\input{class_open_chams_1_1_net} -\input{class_open_chams_1_1_netlist} -\input{class_open_chams_1_1_node} -\input{class_open_chams_1_1_n_r_c_cstr} -\input{class_open_chams_1_1_open_chams_exception} -\input{class_open_chams_1_1_operator} -\input{class_open_chams_1_1_parameters} +\input{class_net} +\input{class_netlist} +\input{class_node} +\input{class_open_chams_exception} +\input{class_operator} +\input{class_parameters} \input{class_c_i_f_1_1_polygon} -\input{class_open_chams_1_1_port} -\input{class_open_chams_1_1_port_point} +\input{class_port} +\input{class_port_point} \input{class_a_g_d_s_1_1_rectangle} \input{class_s_p_i_c_e_1_1_resistor} -\input{class_open_chams_1_1_r_slicing_node} \input{class_d_t_r_1_1_rule} -\input{class_open_chams_1_1_schematic} -\input{class_open_chams_1_1_simul_model} -\input{class_open_chams_1_1_sizing} -\input{class_open_chams_1_1_slicing_node} +\input{class_schematic} +\input{class_simul_model} +\input{class_sizing} \input{class_s_p_i_c_e_1_1_source} \input{class_s_p_i_c_e_1_1_spice_exception} \input{class_a_g_d_s_1_1_structure} \input{class_s_p_i_c_e_1_1_subckt} \input{class_d_t_r_1_1_techno} -\input{class_open_chams_1_1_transistor} +\input{class_transistor} \input{class_s_p_i_c_e_1_1_value} \input{class_s_p_i_c_e_1_1_voltage} -\input{class_open_chams_1_1_v_slicing_node} -\input{class_open_chams_1_1_wire} -\input{class_open_chams_1_1_wire_point} +\input{class_wire} +\input{class_wire_point} %--- End generated contents --- % Index diff --git a/vlsisapd/doc/latex/spice.tex b/vlsisapd/doc/latex/spice.tex index ed9bd045..a7e48e05 100644 --- a/vlsisapd/doc/latex/spice.tex +++ b/vlsisapd/doc/latex/spice.tex @@ -15,7 +15,7 @@ The database consists in several objects\+: \item \mbox{\hyperlink{class_s_p_i_c_e_1_1_voltage}{S\+P\+I\+C\+E\+::\+Voltage}} \item \mbox{\hyperlink{class_s_p_i_c_e_1_1_current}{S\+P\+I\+C\+E\+::\+Current}} \end{DoxyItemize}\hypertarget{spice_spiceParser}{}\subsection{Using the parser}\label{spice_spiceParser} -Simply load an Spice netlist file using the static function S\+P\+I\+C\+E\+::\+Circuit\+::read\+From\+File().\hypertarget{spice_spiceDriver}{}\subsection{Using the driver}\label{spice_spiceDriver} +Simply load an Spice netlist file using the static function \mbox{\hyperlink{class_s_p_i_c_e_1_1_circuit_aa8294fe7d9ceddb5653d08ecae3eaf36}{S\+P\+I\+C\+E\+::\+Circuit\+::read\+From\+File()}}.\hypertarget{spice_spiceDriver}{}\subsection{Using the driver}\label{spice_spiceDriver} Using the driver is very simple, user has to create a \mbox{\hyperlink{class_s_p_i_c_e_1_1_circuit}{S\+P\+I\+C\+E\+::\+Circuit}} object and simply add others Spice objects like \mbox{\hyperlink{class_s_p_i_c_e_1_1_subckt}{S\+P\+I\+C\+E\+::\+Subckt}} or \mbox{\hyperlink{class_s_p_i_c_e_1_1_instance}{S\+P\+I\+C\+E\+::\+Instance}} to it. Includes, libraries and parameters can also be added to \mbox{\hyperlink{class_s_p_i_c_e_1_1_circuit}{S\+P\+I\+C\+E\+::\+Circuit}}. Finally use the S\+P\+I\+C\+E\+::\+Circuit\+::write\+To\+File() method to dump the database to file.\hypertarget{spice_spiceExamples}{}\section{Examples}\label{spice_spiceExamples} As said is the global presentation, V\+L\+SI S\+A\+PD project provides C++ libraries and Python modules for each supported format. In this section we present simple code examples to parse and drive a S\+P\+I\+CE file using C++ or Python. The S\+P\+I\+CE file considered describes a simple Miller O\+TA\+: {\ttfamily O\+T\+A\+\_\+miller.\+spi} \begin{DoxyCodeInclude} @@ -77,7 +77,7 @@ The following code ({\ttfamily parse\+Spice.\+cpp}) is an example of how to pars \mbox{\hyperlink{class_s_p_i_c_e_1_1_circuit}{SPICE::Circuit}}* circuit = NULL; \textcolor{keywordflow}{try} \{ - circuit = SPICE::Circuit::readFromFile(file); + circuit = \mbox{\hyperlink{class_s_p_i_c_e_1_1_circuit_aa8294fe7d9ceddb5653d08ecae3eaf36}{SPICE::Circuit::readFromFile}}(file); \} \textcolor{keywordflow}{catch} (\mbox{\hyperlink{class_s_p_i_c_e_1_1_spice_exception}{SPICE::SpiceException}}& e) \{ cerr << e.what() << endl; exit(48); @@ -509,7 +509,7 @@ This python script ({\ttfamily drive\+Spice.\+py}) generates an my\+O\+T\+A.\+sp \begin{DoxyCodeInclude} \textcolor{keyword}{from} SPICE \textcolor{keyword}{import} * -circuit = Circuit() +circuit = \mbox{\hyperlink{class_circuit}{Circuit}}() circuit.title = \textcolor{stringliteral}{'* Single-ended two-stage amplifier'} @@ -577,7 +577,7 @@ dpN2.addParameter(\textcolor{stringliteral}{"tempsimu"}, \textcolor{stringlitera DP.addInstance(dpN2); \textcolor{comment}{# INSTANCES} -iCM = Instance(\textcolor{stringliteral}{"CM"}, \textcolor{stringliteral}{"currentMirrorPMOS"}); +iCM = \mbox{\hyperlink{class_instance}{Instance}}(\textcolor{stringliteral}{"CM"}, \textcolor{stringliteral}{"currentMirrorPMOS"}); iCM.addConnector(\textcolor{stringliteral}{"1"}); iCM.addConnector(\textcolor{stringliteral}{"2"}); iCM.addConnector(\textcolor{stringliteral}{"vdd"}); @@ -587,7 +587,7 @@ iCM.addParameter(\textcolor{stringliteral}{"w\_val"} , \textcolor{stringliteral} iCM.addParameter(\textcolor{stringliteral}{"nf\_val"}, \textcolor{stringliteral}{"2"} ); circuit.addInstance(iCM); -iDP = Instance(\textcolor{stringliteral}{"DP"}, \textcolor{stringliteral}{"diffPairNMOS"}); +iDP = \mbox{\hyperlink{class_instance}{Instance}}(\textcolor{stringliteral}{"DP"}, \textcolor{stringliteral}{"diffPairNMOS"}); iDP.addConnector(\textcolor{stringliteral}{"1"}); iDP.addConnector(\textcolor{stringliteral}{"2"}); iDP.addConnector(\textcolor{stringliteral}{"vim"});