From 17ecfd823bb3d06551c90551a69df38ca833d1f2 Mon Sep 17 00:00:00 2001 From: Jean-Paul Chaput Date: Tue, 21 Jul 2020 11:22:04 +0200 Subject: [PATCH] Enhanced techno rule support. Inspector support bug fix. * Bug: In Hurricane/Commons.h, modify the getRecord<>() templates so that for both vector and vector, the individual record created for each element are donne with pointers. That is, for the vector case, we take a pointer. As a general policy, except for the POD types, always use pointers or references to data in the records/inspector. Never uses values that can call the copy constructor. Suppress INSPECTOR_PV_SUPPORT() macro, keep only INSPECTOR_PR_SUPPORT(). Provide value support only for getString<>() template. This value & copy constructor problem was causing a crash when trying to inspect Hurricane::AnalogCellExtension. * New: In Hurricane::Technology, change the API of the PhysicalRule, now we can only create/get PhysicalRule, but setting the value of the rule itself must be done on the rule. Enhance PhysicalRule to provide for stepped rules, non isotropic and ratio rules. Merge TwoLayersPhysicalrule in PhysicalRule, much simpler to suppress the management of derived classes. That means that we loose a little memory as some fields are mutually exclusive. Not a problem considering that there will not be so many of thoses objects. * New: In CRL/helpers.analogtechno.py, enhanced DTR support for rules like: ('minSpacing' , 'metal1', ((0.4,20.0), (0.8,1000.0)), Length, 'REF.1') ('minEnclosure', 'metal1', 'cut1', (0.2,0.3) , Length, 'REF.2') ('minDensity' , 'metal1', 0.30 , Unit , 'REF.3') The DTR parser has been updated, but not the oroshi.dtr Rule cache for analog components. Given a rule name, the value used will be the horizontal one of the first step. * Change: In hurricane/doc/hurricane, re-generate the documentation with updated support for Technology & PhysicalRule. --- anabatic/src/anabatic/ChipTools.h | 8 +- anabatic/src/anabatic/Constants.h | 8 +- anabatic/src/anabatic/Dijkstra.h | 8 +- crlcore/python/helpers/analogtechno.py | 135 +- crlcore/python/helpers/io.py | 341 ++-- crlcore/src/ccore/AllianceFramework.cpp | 2 +- crlcore/src/ccore/crlcore/SearchPath.h | 2 +- hurricane/doc/analog/html/graph_legend.html | 2 +- hurricane/doc/analog/html/index.html | 2 +- hurricane/doc/analog/latex/refman.tex | 2 +- hurricane/doc/hurricane/PhysicalRule.dox | 84 + hurricane/doc/hurricane/SoC.css | 10 + hurricane/doc/hurricane/Technology.dox | 132 +- hurricane/doc/hurricane/doxyfile | 5 +- hurricane/doc/hurricane/doxygen.warn.log | 163 +- .../hurricane/html/BasicLayer_8h_source.html | 6 +- .../doc/hurricane/html/Box_8h_source.html | 4 +- .../doc/hurricane/html/Boxes_8h_source.html | 2 +- .../doc/hurricane/html/Cell_8h_source.html | 20 +- .../doc/hurricane/html/Cells_8h_source.html | 2 +- .../hurricane/html/Collection_8h_source.html | 4 +- .../doc/hurricane/html/Commons_8h_source.html | 22 +- .../hurricane/html/Component_8h_source.html | 2 +- .../hurricane/html/Components_8h_source.html | 2 +- .../html/ContactLayer_8h_source.html | 6 +- .../doc/hurricane/html/Contact_8h_source.html | 2 +- .../hurricane/html/Contacts_8h_source.html | 2 +- .../doc/hurricane/html/DBo_8h_source.html | 4 +- .../doc/hurricane/html/DBos_8h_source.html | 2 +- .../hurricane/html/DataBase_8h_source.html | 4 +- .../doc/hurricane/html/DbU_8h_source.html | 2 +- .../html/DebugSession_8h_source.html | 12 +- .../hurricane/html/Diagonal_8h_source.html | 2 +- .../html/DiffusionLayer_8h_source.html | 6 +- .../hurricane/html/Entities_8h_source.html | 2 +- .../doc/hurricane/html/Entity_8h_source.html | 2 +- .../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 | 2 +- .../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 | 4 +- .../hurricane/html/Instances_8h_source.html | 2 +- .../html/Interruption_8h_source.html | 2 +- .../hurricane/html/Interval_8h_source.html | 4 +- .../hurricane/html/Intervals_8h_source.html | 2 +- .../hurricane/html/JsonObject_8h_source.html | 2 +- .../hurricane/html/JsonReader_8h_source.html | 2 +- .../doc/hurricane/html/Layer_8h_source.html | 8 +- .../doc/hurricane/html/Layers_8h_source.html | 2 +- .../hurricane/html/Libraries_8h_source.html | 2 +- .../doc/hurricane/html/Library_8h_source.html | 4 +- .../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 | 6 +- .../doc/hurricane/html/Names_8h_source.html | 2 +- .../doc/hurricane/html/Net_8h_source.html | 6 +- .../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 | 4 +- .../doc/hurricane/html/Pathes_8h_source.html | 2 +- .../html/PhysicalRule_8h_source.html | 75 + .../doc/hurricane/html/Pin_8h_source.html | 6 +- .../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 | 4 +- .../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 | 6 +- .../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 | 6 +- .../hurricane/html/Relation_8h_source.html | 4 +- .../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/doc/hurricane/html/SoC.css | 10 + .../hurricane/html/Tabulation_8h_source.html | 4 +- .../hurricane/html/Technology_8h_source.html | 23 +- .../html/Transformation_8h_source.html | 4 +- .../html/TransistorLayer_8h_source.html | 6 +- .../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 | 6 +- .../doc/hurricane/html/Warning_8h_source.html | 2 +- hurricane/doc/hurricane/html/annotated.html | 73 +- .../doc/hurricane/html/classDebugSession.html | 85 - .../html/classEntity_1_1CompareById.html | 2 +- .../classHurricane_1_1BasicLayer-members.html | 2 +- .../html/classHurricane_1_1BasicLayer.html | 4 +- ...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 | 4 +- .../html/classHurricane_1_1Cell-members.html | 2 +- .../html/classHurricane_1_1Cell.html | 10 +- .../classHurricane_1_1Collection-members.html | 2 +- .../html/classHurricane_1_1Collection.html | 16 +- .../classHurricane_1_1Component-members.html | 2 +- .../html/classHurricane_1_1Component.html | 6 +- ...cane_1_1Component_1_1BodyHook-members.html | 2 +- ...assHurricane_1_1Component_1_1BodyHook.html | 2 +- .../classHurricane_1_1Contact-members.html | 2 +- .../html/classHurricane_1_1Contact.html | 14 +- ...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 | 4 +- .../html/classHurricane_1_1DBo-members.html | 2 +- .../hurricane/html/classHurricane_1_1DBo.html | 10 +- .../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 | 4 +- .../classHurricane_1_1Diagonal-members.html | 2 +- .../html/classHurricane_1_1Diagonal.html | 2 +- ...ssHurricane_1_1DiffusionLayer-members.html | 2 +- .../classHurricane_1_1DiffusionLayer.html | 2 +- .../classHurricane_1_1Entity-members.html | 2 +- .../html/classHurricane_1_1Entity.html | 4 +- ...cane_1_1Entity_1_1CompareById-members.html | 74 - .../html/classHurricane_1_1Error-members.html | 2 +- .../html/classHurricane_1_1Error.html | 2 +- .../classHurricane_1_1Exception-members.html | 2 +- .../html/classHurricane_1_1Exception.html | 4 +- .../classHurricane_1_1Filter-members.html | 2 +- .../html/classHurricane_1_1Filter.html | 2 +- ...urricane_1_1GenericCollection-members.html | 2 +- .../classHurricane_1_1GenericCollection.html | 10 +- ...assHurricane_1_1GenericFilter-members.html | 2 +- .../html/classHurricane_1_1GenericFilter.html | 10 +- ...ssHurricane_1_1GenericLocator-members.html | 2 +- .../classHurricane_1_1GenericLocator.html | 10 +- .../html/classHurricane_1_1Go-members.html | 2 +- .../hurricane/html/classHurricane_1_1Go.html | 4 +- .../html/classHurricane_1_1Hook-members.html | 2 +- .../html/classHurricane_1_1Hook.html | 25 +- .../classHurricane_1_1Horizontal-members.html | 2 +- .../html/classHurricane_1_1Horizontal.html | 6 +- .../classHurricane_1_1HyperNet-members.html | 2 +- .../html/classHurricane_1_1HyperNet.html | 4 +- ...classHurricane_1_1Initializer-members.html | 2 +- .../html/classHurricane_1_1Initializer.html | 2 +- .../classHurricane_1_1Instance-members.html | 2 +- .../html/classHurricane_1_1Instance.html | 8 +- ..._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 | 2 +- .../html/classHurricane_1_1Interval.html | 4 +- .../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 | 8 +- .../classHurricane_1_1Library-members.html | 2 +- .../html/classHurricane_1_1Library.html | 4 +- ...ssHurricane_1_1ListCollection-members.html | 2 +- .../classHurricane_1_1ListCollection.html | 2 +- .../classHurricane_1_1Locator-members.html | 2 +- .../html/classHurricane_1_1Locator.html | 6 +- ...assHurricane_1_1MapCollection-members.html | 2 +- .../html/classHurricane_1_1MapCollection.html | 2 +- .../html/classHurricane_1_1Name-members.html | 2 +- .../html/classHurricane_1_1Name.html | 4 +- .../html/classHurricane_1_1Net-members.html | 2 +- .../hurricane/html/classHurricane_1_1Net.html | 21 +- ...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 | 8 +- .../classHurricane_1_1Occurrence-members.html | 2 +- .../html/classHurricane_1_1Occurrence.html | 8 +- .../html/classHurricane_1_1Pad-members.html | 2 +- .../hurricane/html/classHurricane_1_1Pad.html | 2 +- .../html/classHurricane_1_1Path-members.html | 2 +- .../html/classHurricane_1_1Path.html | 8 +- ...lassHurricane_1_1PhysicalRule-members.html | 76 + .../html/classHurricane_1_1PhysicalRule.html | 431 +++++ .../html/classHurricane_1_1Pin-members.html | 2 +- .../hurricane/html/classHurricane_1_1Pin.html | 2 +- .../html/classHurricane_1_1Plug-members.html | 2 +- .../html/classHurricane_1_1Plug.html | 10 +- .../html/classHurricane_1_1Point-members.html | 2 +- .../html/classHurricane_1_1Point.html | 2 +- .../classHurricane_1_1Polygon-members.html | 2 +- .../html/classHurricane_1_1Polygon.html | 2 +- ...sHurricane_1_1PrivateProperty-members.html | 2 +- .../classHurricane_1_1PrivateProperty.html | 4 +- .../classHurricane_1_1Property-members.html | 2 +- .../html/classHurricane_1_1Property.html | 14 +- .../classHurricane_1_1QuadTree-members.html | 2 +- .../html/classHurricane_1_1QuadTree.html | 6 +- .../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 | 2 +- .../html/classHurricane_1_1RoutingPad.html | 4 +- .../classHurricane_1_1Rubber-members.html | 2 +- .../html/classHurricane_1_1Rubber.html | 4 +- .../classHurricane_1_1Segment-members.html | 2 +- .../html/classHurricane_1_1Segment.html | 2 +- ...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 | 31 +- .../html/classHurricane_1_1Technology.html | 325 +++- ...ssHurricane_1_1Transformation-members.html | 2 +- .../classHurricane_1_1Transformation.html | 6 +- ...Transformation_1_1Orientation-members.html | 2 +- ...cane_1_1Transformation_1_1Orientation.html | 4 +- ...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 | 2 +- .../html/classHurricane_1_1Vertical.html | 6 +- .../classHurricane_1_1ViaLayer-members.html | 2 +- .../html/classHurricane_1_1ViaLayer.html | 2 +- .../classHurricane_1_1Warning-members.html | 2 +- .../html/classHurricane_1_1Warning.html | 2 +- .../doc/hurricane/html/classInitializer.html | 78 - hurricane/doc/hurricane/html/classes.html | 114 +- .../hurricane/html/clasststream-members.html | 2 +- .../doc/hurricane/html/clasststream.html | 4 +- .../dir_2450e9a649c497a3424377400b95054f.html | 2 +- ...r_2450e9a649c497a3424377400b95054f_dep.map | 4 - ...r_2450e9a649c497a3424377400b95054f_dep.md5 | 1 - ...r_2450e9a649c497a3424377400b95054f_dep.png | Bin 2314 -> 0 bytes .../dir_68267d1309a1af8e8297ef4c3efbcdba.html | 2 +- ...r_68267d1309a1af8e8297ef4c3efbcdba_dep.map | 4 - ...r_68267d1309a1af8e8297ef4c3efbcdba_dep.md5 | 1 - ...r_68267d1309a1af8e8297ef4c3efbcdba_dep.png | Bin 1885 -> 0 bytes .../dir_84a91669594ac5e20f6d730a15331f7a.html | 2 +- ...r_84a91669594ac5e20f6d730a15331f7a_dep.map | 5 - ...r_84a91669594ac5e20f6d730a15331f7a_dep.md5 | 1 - ...r_84a91669594ac5e20f6d730a15331f7a_dep.png | Bin 2989 -> 0 bytes hurricane/doc/hurricane/html/doxygen.css | 1596 ----------------- hurricane/doc/hurricane/html/files.html | 69 +- hurricane/doc/hurricane/html/form_0.png | Bin 1813 -> 710 bytes hurricane/doc/hurricane/html/form_1.png | Bin 715 -> 1986 bytes hurricane/doc/hurricane/html/form_2.png | Bin 1241 -> 0 bytes hurricane/doc/hurricane/html/form_3.png | Bin 964 -> 0 bytes hurricane/doc/hurricane/html/form_4.png | Bin 715 -> 0 bytes .../doc/hurricane/html/formula.repository | 7 +- hurricane/doc/hurricane/html/ftv2blank.png | Bin 86 -> 0 bytes hurricane/doc/hurricane/html/ftv2cl.png | Bin 453 -> 0 bytes hurricane/doc/hurricane/html/ftv2doc.png | Bin 746 -> 0 bytes .../doc/hurricane/html/ftv2folderclosed.png | Bin 616 -> 0 bytes .../doc/hurricane/html/ftv2folderopen.png | Bin 597 -> 0 bytes hurricane/doc/hurricane/html/ftv2lastnode.png | Bin 86 -> 0 bytes hurricane/doc/hurricane/html/ftv2link.png | Bin 746 -> 0 bytes .../doc/hurricane/html/ftv2mlastnode.png | Bin 246 -> 0 bytes hurricane/doc/hurricane/html/ftv2mnode.png | Bin 246 -> 0 bytes hurricane/doc/hurricane/html/ftv2mo.png | Bin 403 -> 0 bytes hurricane/doc/hurricane/html/ftv2node.png | Bin 86 -> 0 bytes hurricane/doc/hurricane/html/ftv2ns.png | Bin 388 -> 0 bytes .../doc/hurricane/html/ftv2plastnode.png | Bin 229 -> 0 bytes hurricane/doc/hurricane/html/ftv2pnode.png | Bin 229 -> 0 bytes hurricane/doc/hurricane/html/ftv2splitbar.png | Bin 314 -> 0 bytes hurricane/doc/hurricane/html/ftv2vertline.png | Bin 86 -> 0 bytes hurricane/doc/hurricane/html/functions.html | 13 +- .../doc/hurricane/html/functions_0x62.html | 119 -- .../doc/hurricane/html/functions_0x63.html | 177 -- .../doc/hurricane/html/functions_0x64.html | 153 -- .../doc/hurricane/html/functions_0x65.html | 116 -- .../doc/hurricane/html/functions_0x66.html | 122 -- .../doc/hurricane/html/functions_0x67.html | 806 --------- .../doc/hurricane/html/functions_0x68.html | 138 -- .../doc/hurricane/html/functions_0x69.html | 243 --- .../doc/hurricane/html/functions_0x6a.html | 113 -- .../doc/hurricane/html/functions_0x6b.html | 107 -- .../doc/hurricane/html/functions_0x6c.html | 119 -- .../doc/hurricane/html/functions_0x6d.html | 143 -- .../doc/hurricane/html/functions_0x6e.html | 122 -- .../doc/hurricane/html/functions_0x6f.html | 181 -- .../doc/hurricane/html/functions_0x70.html | 156 -- .../doc/hurricane/html/functions_0x71.html | 113 -- .../doc/hurricane/html/functions_0x72.html | 126 -- .../doc/hurricane/html/functions_0x73.html | 302 ---- .../doc/hurricane/html/functions_0x74.html | 149 -- .../doc/hurricane/html/functions_0x75.html | 132 -- .../doc/hurricane/html/functions_0x76.html | 107 -- .../doc/hurricane/html/functions_0x77.html | 116 -- .../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 | 13 +- .../hurricane/html/functions_func_0x62.html | 112 -- .../hurricane/html/functions_func_0x63.html | 153 -- .../hurricane/html/functions_func_0x64.html | 119 -- .../hurricane/html/functions_func_0x65.html | 115 -- .../hurricane/html/functions_func_0x66.html | 115 -- .../hurricane/html/functions_func_0x67.html | 799 --------- .../hurricane/html/functions_func_0x68.html | 134 -- .../hurricane/html/functions_func_0x69.html | 219 --- .../hurricane/html/functions_func_0x6a.html | 112 -- .../hurricane/html/functions_func_0x6c.html | 112 -- .../hurricane/html/functions_func_0x6d.html | 129 -- .../hurricane/html/functions_func_0x6e.html | 109 -- .../hurricane/html/functions_func_0x6f.html | 174 -- .../hurricane/html/functions_func_0x70.html | 137 -- .../hurricane/html/functions_func_0x71.html | 109 -- .../hurricane/html/functions_func_0x72.html | 125 -- .../hurricane/html/functions_func_0x73.html | 282 --- .../hurricane/html/functions_func_0x74.html | 142 -- .../hurricane/html/functions_func_0x75.html | 115 -- .../hurricane/html/functions_func_0x76.html | 106 -- .../hurricane/html/functions_func_0x77.html | 109 -- .../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 | 20 +- .../doc/hurricane/html/functions_func_h.html | 5 +- .../doc/hurricane/html/functions_func_i.html | 11 +- .../doc/hurricane/html/functions_func_j.html | 2 +- .../doc/hurricane/html/functions_func_l.html | 2 +- .../doc/hurricane/html/functions_func_m.html | 2 +- .../doc/hurricane/html/functions_func_n.html | 2 +- .../doc/hurricane/html/functions_func_o.html | 2 +- .../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 | 9 +- .../doc/hurricane/html/functions_func_t.html | 2 +- .../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 | 20 +- hurricane/doc/hurricane/html/functions_h.html | 5 +- hurricane/doc/hurricane/html/functions_i.html | 11 +- 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 | 2 +- hurricane/doc/hurricane/html/functions_n.html | 2 +- hurricane/doc/hurricane/html/functions_o.html | 2 +- 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 | 5 +- hurricane/doc/hurricane/html/functions_t.html | 2 +- .../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 +- hurricane/doc/hurricane/html/graph_legend.png | Bin 21130 -> 17670 bytes .../doc/hurricane/html/group__DbUGroup.html | 8 +- .../hurricane/html/group__Generalities.html | 6 +- .../hurricane/html/group__JsonSupport.html | 2 +- .../doc/hurricane/html/group__NetClass.html | 1184 ------------ .../html/group__grpSynthHierarchy.html | 2 +- hurricane/doc/hurricane/html/hierarchy.html | 37 +- hurricane/doc/hurricane/html/hurricane.tag | 128 +- hurricane/doc/hurricane/html/index.html | 2 +- hurricane/doc/hurricane/html/modules.html | 2 +- .../hurricane/html/namespaceHurricane.html | 5 +- .../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 +- ...cane_1_1Entity_1_1CompareById-members.html | 66 - ...uctHurricane_1_1Entity_1_1CompareById.html | 76 - hurricane/doc/hurricane/html/tab_b.gif | Bin 35 -> 0 bytes hurricane/doc/hurricane/html/tab_l.gif | Bin 706 -> 0 bytes hurricane/doc/hurricane/html/tab_r.gif | Bin 2585 -> 0 bytes hurricane/doc/hurricane/latex/annotated.tex | 1 + .../latex/classHurricane_1_1BasicLayer.tex | 6 +- .../hurricane/latex/classHurricane_1_1Box.tex | 6 +- .../latex/classHurricane_1_1Cell.tex | 24 +- .../latex/classHurricane_1_1Collection.tex | 42 +- .../latex/classHurricane_1_1Component.tex | 12 +- .../latex/classHurricane_1_1Contact.tex | 36 +- ...lassHurricane_1_1Contact_1_1AnchorHook.tex | 6 +- .../hurricane/latex/classHurricane_1_1DBo.tex | 24 +- .../classHurricane_1_1DBo__inherit__graph.pdf | Bin 12416 -> 12416 bytes .../latex/classHurricane_1_1Entity.tex | 6 +- .../latex/classHurricane_1_1Exception.tex | 6 +- .../classHurricane_1_1GenericCollection.tex | 24 +- .../latex/classHurricane_1_1GenericFilter.tex | 24 +- .../classHurricane_1_1GenericLocator.tex | 24 +- .../hurricane/latex/classHurricane_1_1Go.tex | 6 +- .../latex/classHurricane_1_1Hook.tex | 65 +- .../latex/classHurricane_1_1Horizontal.tex | 12 +- .../latex/classHurricane_1_1HyperNet.tex | 6 +- .../latex/classHurricane_1_1Instance.tex | 18 +- .../latex/classHurricane_1_1Interval.tex | 6 +- .../latex/classHurricane_1_1Layer.tex | 18 +- .../latex/classHurricane_1_1Library.tex | 6 +- .../latex/classHurricane_1_1Locator.tex | 12 +- .../latex/classHurricane_1_1Name.tex | 6 +- .../hurricane/latex/classHurricane_1_1Net.tex | 53 +- .../latex/classHurricane_1_1NotFilter.tex | 18 +- .../latex/classHurricane_1_1Occurrence.tex | 18 +- .../latex/classHurricane_1_1Path.tex | 18 +- .../latex/classHurricane_1_1PhysicalRule.tex | 144 ++ .../latex/classHurricane_1_1Plug.tex | 24 +- .../classHurricane_1_1PrivateProperty.tex | 6 +- .../latex/classHurricane_1_1Property.tex | 36 +- .../latex/classHurricane_1_1QuadTree.tex | 12 +- .../latex/classHurricane_1_1RoutingPad.tex | 6 +- .../latex/classHurricane_1_1Rubber.tex | 6 +- .../latex/classHurricane_1_1Technology.tex | 198 +- .../classHurricane_1_1Transformation.tex | 6 +- .../latex/classHurricane_1_1Vertical.tex | 12 +- .../doc/hurricane/latex/group__DbUGroup.tex | 18 +- .../hurricane/latex/group__Generalities.tex | 12 +- hurricane/doc/hurricane/latex/hierarchy.tex | 1 + .../hurricane/latex/namespaceHurricane.tex | 2 + hurricane/doc/hurricane/latex/refman.tex | 3 +- hurricane/doc/viewer/CellPrinter.dox | 1 + .../doc/viewer/html/CellImage_8h_source.html | 2 +- .../viewer/html/CellPrinter_8h_source.html | 2 +- .../doc/viewer/html/CellViewer_8h_source.html | 2 +- .../doc/viewer/html/CellWidget_8h_source.html | 2 +- .../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 | 5 +- .../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 +- .../latex/classHurricane_1_1CellPrinter.tex | 4 +- hurricane/doc/viewer/latex/refman.tex | 2 +- hurricane/src/analog/TransistorFamily.cpp | 8 +- .../hurricane/analog/AnalogCellExtension.h | 2 + hurricane/src/hurricane/Cell.cpp | 12 +- hurricane/src/hurricane/JsonObject.cpp | 2 +- hurricane/src/hurricane/PhysicalRule.cpp | 20 +- hurricane/src/hurricane/Technology.cpp | 138 +- hurricane/src/hurricane/hurricane/Box.h | 2 +- hurricane/src/hurricane/hurricane/Cell.h | 1 + hurricane/src/hurricane/hurricane/Commons.h | 121 +- hurricane/src/hurricane/hurricane/Flags.h | 2 +- hurricane/src/hurricane/hurricane/Interval.h | 2 +- hurricane/src/hurricane/hurricane/Layer.h | 2 +- hurricane/src/hurricane/hurricane/Name.h | 36 +- hurricane/src/hurricane/hurricane/Net.h | 4 +- .../src/hurricane/hurricane/Occurrence.h | 2 +- hurricane/src/hurricane/hurricane/Path.h | 2 +- .../src/hurricane/hurricane/PhysicalRule.h | 140 +- hurricane/src/hurricane/hurricane/Pin.h | 4 +- hurricane/src/hurricane/hurricane/Point.h | 2 +- hurricane/src/hurricane/hurricane/Property.h | 2 +- hurricane/src/hurricane/hurricane/Rule.h | 6 +- .../src/hurricane/hurricane/Tabulation.h | 2 +- .../src/hurricane/hurricane/Technology.h | 173 +- hurricane/src/hurricane/hurricane/Torus.h | 2 +- .../src/hurricane/hurricane/Transformation.h | 4 +- .../hurricane/TwoLayersPhysicalRule.h | 12 +- hurricane/src/isobar/PyPad.cpp | 5 +- hurricane/src/isobar/PyPhysicalRule.cpp | 86 +- hurricane/src/isobar/PyRule.cpp | 4 - hurricane/src/isobar/PyTechnology.cpp | 71 +- .../src/isobar/PyTwoLayersPhysicalRule.cpp | 2 +- hurricane/src/isobar/PyUnitRule.cpp | 2 +- .../src/isobar/hurricane/isobar/PyHurricane.h | 6 +- katabatic/src/katabatic/ChipTools.h | 8 +- katana/src/katana/Constants.h | 8 +- kite/src/kite/TrackCost.h | 9 +- oroshi/python/dtr.py | 238 +-- unittests/src/unittests.cpp | 10 +- 549 files changed, 3675 insertions(+), 12492 deletions(-) create mode 100644 hurricane/doc/hurricane/PhysicalRule.dox create mode 100644 hurricane/doc/hurricane/html/PhysicalRule_8h_source.html delete mode 100644 hurricane/doc/hurricane/html/classDebugSession.html delete mode 100644 hurricane/doc/hurricane/html/classHurricane_1_1Entity_1_1CompareById-members.html create mode 100644 hurricane/doc/hurricane/html/classHurricane_1_1PhysicalRule-members.html create mode 100644 hurricane/doc/hurricane/html/classHurricane_1_1PhysicalRule.html delete mode 100644 hurricane/doc/hurricane/html/classInitializer.html delete mode 100644 hurricane/doc/hurricane/html/dir_2450e9a649c497a3424377400b95054f_dep.map delete mode 100644 hurricane/doc/hurricane/html/dir_2450e9a649c497a3424377400b95054f_dep.md5 delete mode 100644 hurricane/doc/hurricane/html/dir_2450e9a649c497a3424377400b95054f_dep.png delete mode 100644 hurricane/doc/hurricane/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.map delete mode 100644 hurricane/doc/hurricane/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.md5 delete mode 100644 hurricane/doc/hurricane/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.png delete mode 100644 hurricane/doc/hurricane/html/dir_84a91669594ac5e20f6d730a15331f7a_dep.map delete mode 100644 hurricane/doc/hurricane/html/dir_84a91669594ac5e20f6d730a15331f7a_dep.md5 delete mode 100644 hurricane/doc/hurricane/html/dir_84a91669594ac5e20f6d730a15331f7a_dep.png delete mode 100644 hurricane/doc/hurricane/html/doxygen.css delete mode 100644 hurricane/doc/hurricane/html/form_2.png delete mode 100644 hurricane/doc/hurricane/html/form_3.png delete mode 100644 hurricane/doc/hurricane/html/form_4.png delete mode 100644 hurricane/doc/hurricane/html/ftv2blank.png delete mode 100644 hurricane/doc/hurricane/html/ftv2cl.png delete mode 100644 hurricane/doc/hurricane/html/ftv2doc.png delete mode 100644 hurricane/doc/hurricane/html/ftv2folderclosed.png delete mode 100644 hurricane/doc/hurricane/html/ftv2folderopen.png delete mode 100644 hurricane/doc/hurricane/html/ftv2lastnode.png delete mode 100644 hurricane/doc/hurricane/html/ftv2link.png delete mode 100644 hurricane/doc/hurricane/html/ftv2mlastnode.png delete mode 100644 hurricane/doc/hurricane/html/ftv2mnode.png delete mode 100644 hurricane/doc/hurricane/html/ftv2mo.png delete mode 100644 hurricane/doc/hurricane/html/ftv2node.png delete mode 100644 hurricane/doc/hurricane/html/ftv2ns.png delete mode 100644 hurricane/doc/hurricane/html/ftv2plastnode.png delete mode 100644 hurricane/doc/hurricane/html/ftv2pnode.png delete mode 100644 hurricane/doc/hurricane/html/ftv2splitbar.png delete mode 100644 hurricane/doc/hurricane/html/ftv2vertline.png delete mode 100644 hurricane/doc/hurricane/html/functions_0x62.html delete mode 100644 hurricane/doc/hurricane/html/functions_0x63.html delete mode 100644 hurricane/doc/hurricane/html/functions_0x64.html delete mode 100644 hurricane/doc/hurricane/html/functions_0x65.html delete mode 100644 hurricane/doc/hurricane/html/functions_0x66.html delete mode 100644 hurricane/doc/hurricane/html/functions_0x67.html delete mode 100644 hurricane/doc/hurricane/html/functions_0x68.html delete mode 100644 hurricane/doc/hurricane/html/functions_0x69.html delete mode 100644 hurricane/doc/hurricane/html/functions_0x6a.html delete mode 100644 hurricane/doc/hurricane/html/functions_0x6b.html delete mode 100644 hurricane/doc/hurricane/html/functions_0x6c.html delete mode 100644 hurricane/doc/hurricane/html/functions_0x6d.html delete mode 100644 hurricane/doc/hurricane/html/functions_0x6e.html delete mode 100644 hurricane/doc/hurricane/html/functions_0x6f.html delete mode 100644 hurricane/doc/hurricane/html/functions_0x70.html delete mode 100644 hurricane/doc/hurricane/html/functions_0x71.html delete mode 100644 hurricane/doc/hurricane/html/functions_0x72.html delete mode 100644 hurricane/doc/hurricane/html/functions_0x73.html delete mode 100644 hurricane/doc/hurricane/html/functions_0x74.html delete mode 100644 hurricane/doc/hurricane/html/functions_0x75.html delete mode 100644 hurricane/doc/hurricane/html/functions_0x76.html delete mode 100644 hurricane/doc/hurricane/html/functions_0x77.html delete mode 100644 hurricane/doc/hurricane/html/functions_func_0x62.html delete mode 100644 hurricane/doc/hurricane/html/functions_func_0x63.html delete mode 100644 hurricane/doc/hurricane/html/functions_func_0x64.html delete mode 100644 hurricane/doc/hurricane/html/functions_func_0x65.html delete mode 100644 hurricane/doc/hurricane/html/functions_func_0x66.html delete mode 100644 hurricane/doc/hurricane/html/functions_func_0x67.html delete mode 100644 hurricane/doc/hurricane/html/functions_func_0x68.html delete mode 100644 hurricane/doc/hurricane/html/functions_func_0x69.html delete mode 100644 hurricane/doc/hurricane/html/functions_func_0x6a.html delete mode 100644 hurricane/doc/hurricane/html/functions_func_0x6c.html delete mode 100644 hurricane/doc/hurricane/html/functions_func_0x6d.html delete mode 100644 hurricane/doc/hurricane/html/functions_func_0x6e.html delete mode 100644 hurricane/doc/hurricane/html/functions_func_0x6f.html delete mode 100644 hurricane/doc/hurricane/html/functions_func_0x70.html delete mode 100644 hurricane/doc/hurricane/html/functions_func_0x71.html delete mode 100644 hurricane/doc/hurricane/html/functions_func_0x72.html delete mode 100644 hurricane/doc/hurricane/html/functions_func_0x73.html delete mode 100644 hurricane/doc/hurricane/html/functions_func_0x74.html delete mode 100644 hurricane/doc/hurricane/html/functions_func_0x75.html delete mode 100644 hurricane/doc/hurricane/html/functions_func_0x76.html delete mode 100644 hurricane/doc/hurricane/html/functions_func_0x77.html delete mode 100644 hurricane/doc/hurricane/html/group__NetClass.html delete mode 100644 hurricane/doc/hurricane/html/structHurricane_1_1Entity_1_1CompareById-members.html delete mode 100644 hurricane/doc/hurricane/html/structHurricane_1_1Entity_1_1CompareById.html delete mode 100644 hurricane/doc/hurricane/html/tab_b.gif delete mode 100644 hurricane/doc/hurricane/html/tab_l.gif delete mode 100644 hurricane/doc/hurricane/html/tab_r.gif create mode 100644 hurricane/doc/hurricane/latex/classHurricane_1_1PhysicalRule.tex diff --git a/anabatic/src/anabatic/ChipTools.h b/anabatic/src/anabatic/ChipTools.h index 9607b44e..1788850c 100644 --- a/anabatic/src/anabatic/ChipTools.h +++ b/anabatic/src/anabatic/ChipTools.h @@ -14,9 +14,7 @@ // +-----------------------------------------------------------------+ -#ifndef ANABATIC_CHIP_TOOLS_H -#define ANABATIC_CHIP_TOOLS_H - +#pragma once #include #include "hurricane/DbU.h" #include "hurricane/Torus.h" @@ -113,6 +111,4 @@ namespace Anabatic { } // Anabatic namespace. -INSPECTOR_PV_SUPPORT(Anabatic::ChipTools); - -#endif // ANABATIC_CHIP_TOOLS_H +INSPECTOR_PR_SUPPORT(Anabatic::ChipTools); diff --git a/anabatic/src/anabatic/Constants.h b/anabatic/src/anabatic/Constants.h index 42f9b83e..b79ba76b 100644 --- a/anabatic/src/anabatic/Constants.h +++ b/anabatic/src/anabatic/Constants.h @@ -14,9 +14,7 @@ // +-----------------------------------------------------------------+ -#ifndef ANABATIC_CONSTANTS_H -#define ANABATIC_CONSTANTS_H - +#pragma once #include "hurricane/Flags.h" namespace Anabatic { @@ -148,6 +146,4 @@ namespace Anabatic { } // Anabatic namespace. -INSPECTOR_PV_SUPPORT(Anabatic::Flags) - -#endif // ANABATIC_CONSTANTS_H +INSPECTOR_PR_SUPPORT(Anabatic::Flags); diff --git a/anabatic/src/anabatic/Dijkstra.h b/anabatic/src/anabatic/Dijkstra.h index 14f945ac..cad767c8 100644 --- a/anabatic/src/anabatic/Dijkstra.h +++ b/anabatic/src/anabatic/Dijkstra.h @@ -14,9 +14,7 @@ // +-----------------------------------------------------------------+ -#ifndef ANABATIC_DIJKSTRA_H -#define ANABATIC_DIJKSTRA_H - +#pragma once #include #include #include "hurricane/Observer.h" @@ -593,6 +591,4 @@ namespace Anabatic { GETSTRING_POINTER_SUPPORT(Anabatic::Vertex); IOSTREAM_POINTER_SUPPORT(Anabatic::Vertex); -INSPECTOR_PV_SUPPORT(Anabatic::Dijkstra::Mode); - -#endif // ANABATIC_DIJKSTRA_H +INSPECTOR_PR_SUPPORT(Anabatic::Dijkstra::Mode); diff --git a/crlcore/python/helpers/analogtechno.py b/crlcore/python/helpers/analogtechno.py index 47580acc..cefa55d4 100644 --- a/crlcore/python/helpers/analogtechno.py +++ b/crlcore/python/helpers/analogtechno.py @@ -14,6 +14,7 @@ # +-----------------------------------------------------------------+ +from __future__ import print_function import os import os.path import sys @@ -39,22 +40,38 @@ def valueToDbU ( value, unit, lengthType ): return area +def isStepped ( entry ): + if isinstance(entry,tuple): + for item in entry: + if not isinstance(item,tuple) or len(item) != 2: + return False + return True + return False + + +def isNonIsotropic ( entry ): + if not isinstance(entry,tuple) or len(entry) != 2: return False + if not isinstance(entry[0],int) and not isinstance(entry[0],float): return False + if not isinstance(entry[1],int) and not isinstance(entry[1],float): return False + return True + + def checkEntry ( entry, entryNo ): if not isinstance(entry,tuple): - raise ErrorMessage( 1, [ 'Entry %d is malformed in .' % entryNo - , 'Not a tuple (a, b, c, ...) or (a,).' - , str(entry) - ] ) + raise ErrorMessage( 1, [ 'Entry %d is malformed in .' % entryNo + , 'Not a tuple (a, b, c, ...) or (a,).' + , str(entry) + ] ) if not len(entry) in (4, 5, 6): - raise ErrorMessage( 1, [ 'Entry %d is malformed in .' % entryNo - , 'Tuple must have *4*, *5* or *6* items only.' - , str(entry) - ] ) + raise ErrorMessage( 1, [ 'Entry %d is malformed in .' % entryNo + , 'Tuple must have *4*, *5* or *6* items only.' + , str(entry) + ] ) if not entry[-2] in (Length, Length|Asymmetric, Area, Unit): - raise ErrorMessage( 1, [ 'Entry %d is malformed in .' % entryNo - , 'Beforelast item is neither Length, Length|Asymmetric nor Area.' - , str(entry) - ] ) + raise ErrorMessage( 1, [ 'Entry %d is malformed in .' % entryNo + , 'Beforelast item is neither Length, Length|Asymmetric nor Area.' + , str(entry) + ] ) return @@ -62,49 +79,57 @@ def _loadAnalogTechno ( techno, ruleTable ): unit = None entryNo = 0 for entry in ruleTable: - entryNo += 1 - - try: - if entryNo > 1: - checkEntry( entry, entryNo ) - - if entry[0] == 'Header': - unit = entry[2] - techno.setName( entry[1] ) - continue - - # Zero-layer rule. - if len(entry) == 4: - if entry[2] & Unit: - techno.addUnitRule( entry[0], entry[1], entry[3] ) - else: - techno.addPhysicalRule( entry[0] - , valueToDbU( entry[1], unit, entry[2] ) - , entry[3] - ) - # One-layer rule. - if len(entry) == 5: - techno.addPhysicalRule( entry[0] - , entry[1] - , valueToDbU( entry[2], unit, entry[3] ) - , entry[4] - ) - # Two-layer rule. - if len(entry) == 6: - symmetric = True - if entry[4] & Asymmetric: symmetric = False - - techno.addPhysicalRule( entry[0] - , entry[1] - , entry[2] - , symmetric - , valueToDbU( entry[3], unit, entry[4] ) - , entry[5] - ) - except Exception, e: - e = ErrorMessage( e ) - e.addMessage( 'In %s: at index %d.' % (technoFile,entryNo) ) - print e + entryNo += 1 + + try: + if entryNo > 1: checkEntry( entry, entryNo ) + + if entry[0] == 'Header': + unit = entry[2] + techno.setName( entry[1] ) + continue + + # Zero-layer rule. + if len(entry) == 4: + if entry[2] & Unit: + rule = techno.addUnitRule( entry[0], entry[3] ) + rule.addValue( entry[1] ) + else: + rule = techno.addPhysicalRule( entry[0], entry[3] ) + rule.addValue( valueToDbU(entry[1], unit, entry[2]), 0 ) + # One-layer rule. + if len(entry) == 5: + rule = techno.addPhysicalRule( entry[0], entry[1], entry[4] ) + if entry[3] & Unit: + rule.addValue( entry[2] ) + else: + if isStepped(entry[2]): + for step in entry[2]: + rule.addValue( valueToDbU(step[0], unit, entry[3]) + , valueToDbU(step[1], unit, entry[3]) ) + elif isNonIsotropic(entry[2]): + rule.addValue( valueToDbU(entry[2][0], unit, entry[3]) + , valueToDbU(entry[2][1], unit, entry[3]) + , 0 ) + else: + rule.addValue( valueToDbU(entry[2], unit, entry[3]), 0 ) + # Two-layer rule. + if len(entry) == 6: + symmetric = True + if entry[4] & Asymmetric: symmetric = False + rule = techno.addPhysicalRule( entry[0], entry[1], entry[2], entry[5] ) + rule.setSymmetric( symmetric ) + + if isNonIsotropic(entry[3]): + rule.addValue( valueToDbU(entry[3][0], unit, entry[4]) + , valueToDbU(entry[3][1], unit, entry[4]) + , 0 ) + else: + rule.addValue( valueToDbU(entry[3], unit, entry[4]), 0 ) + except Exception, e: + e = ErrorMessage( 1, e ) + e.addMessage( 'In {}: at index {}.'.format(technoFile,entryNo) ) + print( str(e) ) return diff --git a/crlcore/python/helpers/io.py b/crlcore/python/helpers/io.py index 0f8bda02..21635816 100644 --- a/crlcore/python/helpers/io.py +++ b/crlcore/python/helpers/io.py @@ -13,54 +13,55 @@ # | Python : "./crlcore/helpers/io.py" | # +-----------------------------------------------------------------+ +from __future__ import print_function import sys import os import os.path import re import traceback try: - from PyQt4.QtCore import Qt - from PyQt4.QtGui import QSizePolicy - from PyQt4.QtGui import QDialog - from PyQt4.QtGui import QPalette - from PyQt4.QtGui import QColor - from PyQt4.QtGui import QFont - from PyQt4.QtGui import QFontMetrics - from PyQt4.QtGui import QWidget - from PyQt4.QtGui import QFrame - from PyQt4.QtGui import QLabel - from PyQt4.QtGui import QPixmap - from PyQt4.QtGui import QPushButton - from PyQt4.QtGui import QTextEdit - from PyQt4.QtGui import QVBoxLayout - from PyQt4.QtGui import QHBoxLayout - from PyQt4.QtGui import QAction - from PyQt4.QtGui import QKeySequence + from PyQt4.QtCore import Qt + from PyQt4.QtGui import QSizePolicy + from PyQt4.QtGui import QDialog + from PyQt4.QtGui import QPalette + from PyQt4.QtGui import QColor + from PyQt4.QtGui import QFont + from PyQt4.QtGui import QFontMetrics + from PyQt4.QtGui import QWidget + from PyQt4.QtGui import QFrame + from PyQt4.QtGui import QLabel + from PyQt4.QtGui import QPixmap + from PyQt4.QtGui import QPushButton + from PyQt4.QtGui import QTextEdit + from PyQt4.QtGui import QVBoxLayout + from PyQt4.QtGui import QHBoxLayout + from PyQt4.QtGui import QAction + from PyQt4.QtGui import QKeySequence except Exception, e: - try: - from PyQt5.QtCore import Qt - from PyQt5.QtWidgets import QSizePolicy - from PyQt5.QtWidgets import QDialog - from PyQt5.QtGui import QPalette - from PyQt5.QtGui import QColor - from PyQt5.QtGui import QFont - from PyQt5.QtGui import QFontMetrics - from PyQt5.QtWidgets import QWidget - from PyQt5.QtWidgets import QFrame - from PyQt5.QtWidgets import QLabel - from PyQt5.QtGui import QPixmap - from PyQt5.QtWidgets import QPushButton - from PyQt5.QtWidgets import QTextEdit - from PyQt5.QtWidgets import QVBoxLayout - from PyQt5.QtWidgets import QHBoxLayout - from PyQt5.QtWidgets import QAction - from PyQt5.QtGui import QKeySequence - except e: - print '[ERROR] helpers.io, neither PyQt4 nor PyQt5 is available.' - sys.exit( 1 ) + try: + from PyQt5.QtCore import Qt + from PyQt5.QtWidgets import QSizePolicy + from PyQt5.QtWidgets import QDialog + from PyQt5.QtGui import QPalette + from PyQt5.QtGui import QColor + from PyQt5.QtGui import QFont + from PyQt5.QtGui import QFontMetrics + from PyQt5.QtWidgets import QWidget + from PyQt5.QtWidgets import QFrame + from PyQt5.QtWidgets import QLabel + from PyQt5.QtGui import QPixmap + from PyQt5.QtWidgets import QPushButton + from PyQt5.QtWidgets import QTextEdit + from PyQt5.QtWidgets import QVBoxLayout + from PyQt5.QtWidgets import QHBoxLayout + from PyQt5.QtWidgets import QAction + from PyQt5.QtGui import QKeySequence + except e: + print( '[ERROR] helpers.io, neither PyQt4 nor PyQt5 is available.' ) + sys.exit( 1 ) import Cfg import helpers -from Hurricane import UpdateSession +from Hurricane import UpdateSession import Viewer @@ -69,91 +70,91 @@ import Viewer class ErrorWidget ( QDialog ): - def __init__ ( self, e ): - QWidget.__init__ ( self, None ) - - self.setWindowTitle( 'Error' ) - - message = QLabel( e.getLinesAsString() ) - message.setAlignment( Qt.AlignLeft ) - message.setFont( QFont('Courier',10,QFont.Bold) ) - - error = QLabel( '[ERROR]' ) - error.setAlignment( Qt.AlignLeft ) - font = error.font() - font.setWeight( QFont.Bold ) - error.setFont( font ) - - self._tryCont = QPushButton() - self._tryCont.setSizePolicy( QSizePolicy.Fixed, QSizePolicy.Fixed ) - self._tryCont.setText ( 'Try to continue' ) - self._abort = QPushButton() - self._abort.setSizePolicy( QSizePolicy.Fixed, QSizePolicy.Fixed ) - self._abort.setText ( 'Abort' ) - self._abort.setDefault ( True ) - - traceFont = QFont('Courier',10,QFont.Normal) - lineHeight = QFontMetrics( traceFont ).height() - traceText = helpers.textStackTrace( e.trace, False, e.scriptPath ) - lineCount = traceText.count( '\n' ) + 2 - minimumWidth = 400 - if Viewer.Graphics.isHighDpi(): minimumWidth = 2100 - self._trace = QTextEdit() - self._trace.setReadOnly ( True ); - self._trace.setLineWrapMode( QTextEdit.NoWrap ); - self._trace.setMinimumSize ( minimumWidth, lineCount*lineHeight ); - self._trace.setFont ( traceFont ) - self._trace.setText ( traceText ) - - buttonLayout = QHBoxLayout() - buttonLayout.addStretch( 1 ) - buttonLayout.addWidget ( self._tryCont ) - buttonLayout.addStretch( 1 ) - buttonLayout.addWidget ( self._abort ) - buttonLayout.addStretch( 1 ) - - vLayout = QVBoxLayout() - vLayout.addWidget ( error ) - vLayout.addStretch( 1 ) - vLayout.addWidget ( message ) - vLayout.addStretch( 1 ) - vLayout.addWidget ( self._trace ) - vLayout.addStretch( 1 ) - vLayout.addLayout ( buttonLayout ) - - pixmapWidth = 150 - if not Viewer.Graphics.isHighDpi(): pixmapWidth = 70 - pixmap = QPixmap( ':/images/angry-birds-red.png' ) - pixmap = pixmap.scaledToWidth( pixmapWidth ) - icon = QLabel() - icon.setPixmap( pixmap ) - - hLayout = QHBoxLayout() - hLayout.addWidget( icon ) - hLayout.addLayout( vLayout ) - self.setLayout( hLayout ) - - self._tryCont.clicked.connect( self.accept ) - self._abort .clicked.connect( self.reject ) - - self._exitAction = QAction( '&Exit', self ) - self._exitAction.setStatusTip( 'Exit Coriolis' ) - self._exitAction.setShortcut ( QKeySequence('CTRL+Q') ) - self._exitAction.triggered.connect( self.reject ) - self.addAction( self._exitAction ) - - self._closeAction = QAction( '&Close', self ) - self._closeAction.setStatusTip( 'Try to continue' ) - self._closeAction.setShortcut ( QKeySequence('CTRL+W') ) - self._closeAction.triggered.connect( self.reject ) - self.addAction( self._closeAction ) - - return - - def closeEvent ( self, event ): - self.setResult( QDialog.Rejected ) - event.accept() - return + def __init__ ( self, e ): + QWidget.__init__ ( self, None ) + + self.setWindowTitle( 'Error' ) + + message = QLabel( e.getLinesAsString() ) + message.setAlignment( Qt.AlignLeft ) + message.setFont( QFont('Courier',10,QFont.Bold) ) + + error = QLabel( '[ERROR]' ) + error.setAlignment( Qt.AlignLeft ) + font = error.font() + font.setWeight( QFont.Bold ) + error.setFont( font ) + + self._tryCont = QPushButton() + self._tryCont.setSizePolicy( QSizePolicy.Fixed, QSizePolicy.Fixed ) + self._tryCont.setText ( 'Try to continue' ) + self._abort = QPushButton() + self._abort.setSizePolicy( QSizePolicy.Fixed, QSizePolicy.Fixed ) + self._abort.setText ( 'Abort' ) + self._abort.setDefault ( True ) + + traceFont = QFont('Courier',10,QFont.Normal) + lineHeight = QFontMetrics( traceFont ).height() + traceText = helpers.textStackTrace( e.trace, False, e.scriptPath ) + lineCount = traceText.count( '\n' ) + 2 + minimumWidth = 400 + if Viewer.Graphics.isHighDpi(): minimumWidth = 2100 + self._trace = QTextEdit() + self._trace.setReadOnly ( True ); + self._trace.setLineWrapMode( QTextEdit.NoWrap ); + self._trace.setMinimumSize ( minimumWidth, lineCount*lineHeight ); + self._trace.setFont ( traceFont ) + self._trace.setText ( traceText ) + + buttonLayout = QHBoxLayout() + buttonLayout.addStretch( 1 ) + buttonLayout.addWidget ( self._tryCont ) + buttonLayout.addStretch( 1 ) + buttonLayout.addWidget ( self._abort ) + buttonLayout.addStretch( 1 ) + + vLayout = QVBoxLayout() + vLayout.addWidget ( error ) + vLayout.addStretch( 1 ) + vLayout.addWidget ( message ) + vLayout.addStretch( 1 ) + vLayout.addWidget ( self._trace ) + vLayout.addStretch( 1 ) + vLayout.addLayout ( buttonLayout ) + + pixmapWidth = 150 + if not Viewer.Graphics.isHighDpi(): pixmapWidth = 70 + pixmap = QPixmap( ':/images/angry-birds-red.png' ) + pixmap = pixmap.scaledToWidth( pixmapWidth ) + icon = QLabel() + icon.setPixmap( pixmap ) + + hLayout = QHBoxLayout() + hLayout.addWidget( icon ) + hLayout.addLayout( vLayout ) + self.setLayout( hLayout ) + + self._tryCont.clicked.connect( self.accept ) + self._abort .clicked.connect( self.reject ) + + self._exitAction = QAction( '&Exit', self ) + self._exitAction.setStatusTip( 'Exit Coriolis' ) + self._exitAction.setShortcut ( QKeySequence('CTRL+Q') ) + self._exitAction.triggered.connect( self.reject ) + self.addAction( self._exitAction ) + + self._closeAction = QAction( '&Close', self ) + self._closeAction.setStatusTip( 'Try to continue' ) + self._closeAction.setShortcut ( QKeySequence('CTRL+W') ) + self._closeAction.triggered.connect( self.reject ) + self.addAction( self._closeAction ) + + return + + def closeEvent ( self, event ): + self.setResult( QDialog.Rejected ) + event.accept() + return # ------------------------------------------------------------------- @@ -164,79 +165,81 @@ class ErrorMessage ( Exception ): def __init__ ( self, code, *arguments ): self.scriptPath = None self.trace = traceback.extract_stack() - self._code = code - self._errors = [ 'Malformed call to ErrorMessage()' - , '%s' % str(arguments) ] + self.code = code + self.errors = [ 'Malformed call to ErrorMessage().' + , 'args:"{}"'.format(arguments) ] + if not isinstance(self.code,int): + self.errors = [ 'Malformed call to ErrorMessage(), first argument (code) must be an integer.' + , 'code:"{}"'.format(code) + , 'args:"{}"'.format(arguments) ] + return + text = None if len(arguments) == 1: - if isinstance(arguments[0],Exception): text = str(arguments[0]).split('\n') - else: - self._errors = arguments[0] + if isinstance(arguments[0],Exception): text = str(arguments[0]).split('\n') + else: + self.errors = arguments[0] elif len(arguments) > 1: - sys.stdout.flush() - text = list(arguments) + sys.stdout.flush() + text = list(arguments) if text: - self._errors = [] - while len(text[0]) == 0: del text[0] - - lstrip = 0 - if text[0].startswith('[ERROR]'): lstrip = 8 - - for line in text: - if line[0:lstrip] == ' '*lstrip or \ - line[0:lstrip-1] == '[ERROR]': - self._errors += [ line[lstrip:] ] - else: - self._errors += [ line.lstrip() ] - sys.stdout.flush() + self.errors = [] + while len(text[0]) == 0: del text[0] + + lstrip = 0 + if text[0].startswith('[ERROR]'): lstrip = 8 + + for line in text: + if line[0:lstrip] == ' '*lstrip or \ + line[0:lstrip-1] == '[ERROR]': + self.errors += [ line[lstrip:] ] + else: + self.errors += [ line.lstrip() ] + sys.stdout.flush() return def __str__ ( self ): - if not isinstance(self._errors,list): - return "[ERROR] %s" % self._errors + if not isinstance(self.errors,list): + return "[ERROR] %s" % self.errors formatted = "\n" - for i in range(len(self._errors)): - if i == 0: formatted += "[ERROR] %s" % self._errors[i] - else: formatted += " %s" % self._errors[i] - if i+1 < len(self._errors): formatted += "\n" + for i in range(len(self.errors)): + if i == 0: formatted += "[ERROR] %s" % self.errors[i] + else: formatted += " %s" % self.errors[i] + if i+1 < len(self.errors): formatted += "\n" return formatted def getLinesAsString ( self ): - if not isinstance(self._errors,list): return self._errors + if not isinstance(self.errors,list): return self.errors lines = '' - for line in self._errors: lines += line + '\n' + for line in self.errors: lines += line + '\n' return lines def addMessage ( self, message ): - if not isinstance(self._errors,list): - self._errors = [ self._errors ] + if not isinstance(self.errors,list): + self.errors = [ self.errors ] if isinstance(message,list): for line in message: - self._errors += [ line ] + self.errors += [ line ] else: - self._errors += [ message ] + self.errors += [ message ] return def terminate ( self ): - print self - sys.exit( self._code ) - - def _getCode ( self ): return self._code - - code = property(_getCode) + print( self ) + sys.exit( self.code ) @staticmethod def show ( code, *arguments ): e = ErrorMessage( code, *arguments ) if Viewer.Graphics.get().isEnabled(): - tryCont = ErrorWidget( e ).exec_() - if not tryCont: raise e + tryCont = ErrorWidget( e ).exec_() + if not tryCont: raise e else: - raise e + raise e return @@ -254,8 +257,8 @@ def catch ( errorObject ): em.trace = traceback.extract_tb( sys.exc_info()[2] ) #em.scriptPath = __file__ - print em - print helpers.textStackTrace( em.trace, True, em.scriptPath ) + print( em ) + print( helpers.textStackTrace( em.trace, True, em.scriptPath ) ) if Viewer.Graphics.get().isEnabled(): tryCont = ErrorWidget( em ).exec_() @@ -298,5 +301,5 @@ def isVL ( level ): def vprint ( level, message ): - if isVL(level): print message + if isVL(level): print( message ) return diff --git a/crlcore/src/ccore/AllianceFramework.cpp b/crlcore/src/ccore/AllianceFramework.cpp index e23b7cde..acb3885f 100644 --- a/crlcore/src/ccore/AllianceFramework.cpp +++ b/crlcore/src/ccore/AllianceFramework.cpp @@ -149,7 +149,7 @@ namespace CRL { string AllianceFrameworkProperty::JsonProperty::getTypeName () const - { return getString(AllianceFrameworkProperty::getPropertyName()); } + { return "CRL::AllianceFrameworkProperty"; } void AllianceFrameworkProperty::JsonProperty::initialize () diff --git a/crlcore/src/ccore/crlcore/SearchPath.h b/crlcore/src/ccore/crlcore/SearchPath.h index ffbe1384..0b087a52 100644 --- a/crlcore/src/ccore/crlcore/SearchPath.h +++ b/crlcore/src/ccore/crlcore/SearchPath.h @@ -112,7 +112,7 @@ namespace CRL { INSPECTOR_P_SUPPORT(CRL::SearchPath); -INSPECTOR_V_SUPPORT(CRL::SearchPath::Element); +INSPECTOR_PR_SUPPORT(CRL::SearchPath::Element); #endif // CRL_SEARCH_PATH_H diff --git a/hurricane/doc/analog/html/graph_legend.html b/hurricane/doc/analog/html/graph_legend.html index 6867a639..13b29ecd 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
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
diff --git a/hurricane/doc/analog/html/index.html b/hurricane/doc/analog/html/index.html index ee118071..ffd8564b 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
diff --git a/hurricane/doc/analog/latex/refman.tex b/hurricane/doc/analog/latex/refman.tex index 9cf74d7f..5370cb78 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 Mon Apr 27 2020 11:34:57}\\ + {\small Tue Jul 21 2020 11:06:16}\\ \end{center} \end{titlepage} diff --git a/hurricane/doc/hurricane/PhysicalRule.dox b/hurricane/doc/hurricane/PhysicalRule.dox new file mode 100644 index 00000000..42ef6428 --- /dev/null +++ b/hurricane/doc/hurricane/PhysicalRule.dox @@ -0,0 +1,84 @@ + +// -*- C++ -*- + + +namespace Hurricane { + +//! \class PhysicalRule +//! \brief Define a rule for the technology (\b API). +//! +//! \section sPhysicalRuleIntro Introduction +//! +//! The constructor of Physical rule is not directly accessible, +//! as thoses objects must be created only through the +//! Technology class \c API (to be stored in the relevant +//! tables). +//! +//! PhysicalRule is a "one size fit class". As there will +//! be only a small number of objects created (compare to other +//! kinds) we choose to implement all variant in one class instead +//! of creating a flock of derived classes and all the assorted +//! paraphernalia. As a consequence, not all fields will be used +//! at the same time, they are mutually exclusive. + +//! \function bool PhysicalRule::isSymmetric () const; +//! Tells if the rule is symmetric. + +//! \function bool PhysicalRule::isDbU () const; +//! Tells if the rule uses physical lengths, with multiple steps +//! or not. + +//! \function bool PhysicalRule::isDouble () const; +//! Tells if the rule describe non-length values (Volts, Ohms, Henry, +//! Celsius, ...). + +//! \function bool PhysicalRule::hasSteps () const; +//! Tells if the rule has more than one step, that is, is not uniform +//! for all length. + +//! \function void PhysicalRule::setSymmetric ( bool state ); +//! Set the symmetric state of the rule. This used only for rules +//! bound to two layers. + +//! \function void PhysicalRule::addValue ( double value ); +//! Set the \c double value of a rule. + +//! \function double PhysicalRule::getDoubleValue () const; +//! \return The \c double value of the rule. + +//! \function double PhysicalRule::getValue ( DbU::Unit length=0, bool hDir=true ) const; +//! \param length The length for which we want the rule's value. +//! \param hDir In case of non-isotropic rule, which dimension +//! do we want. +//! \return The rule's value for the given length. If no parameter is supplied, +//! then, the X value of the first step is returned. + +//! \function void PhysicalRule::addValue ( DbU::Unit value, DbU::Unit maxLength ); +//! \param value The \e value of the step to add. +//! \param maxLength The length up to which the rule is valid. +//! passing zero as this argument means always valid. +//! +//! Adds a new stepping value to the rule. If the rules never +//! change, give a \c maxLength of zero and only call this function +//! once on the rule. The rule is isotropic in X and Y. +//! +//! This function can be called multiple time on a rule, each call +//! will add a new step. Steps are defined and ordered according to +//! \c maxLength. + +//! \function void PhysicalRule::addValue ( DbU::Unit hvalue, DbU::Unit vvalue, DbU::Unit maxLength ); +//! \param hvalue The horizontal \e value of the step to add. +//! \param vvalue The vertical \e value of the step to add. +//! \param maxLength The length up to which the rule is valid. +//! passing zero as this argument means always valid. +//! +//! Adds a new stepping value to the rule. If the rules never +//! change, give a \c maxLength of zero and only call this function +//! once on the rule. The rule is \b not isotropic, it defines a +//! different value for X and Y. +//! +//! This function can be called multiple time on a rule, each call +//! will add a new step. Steps are defined and ordered according to +//! \c maxLength. + +} diff --git a/hurricane/doc/hurricane/SoC.css b/hurricane/doc/hurricane/SoC.css index 44bae898..a610f444 100644 --- a/hurricane/doc/hurricane/SoC.css +++ b/hurricane/doc/hurricane/SoC.css @@ -610,6 +610,16 @@ margin-right: 5% } + div.fragment a.code:link, + div.fragment a.code:visited, + div.fragment a.codeRef:link, + div.fragment a.codeRef:visited { + text-decoration: none; + font-weight: bold; + color: black; + border: none; + } + div.line { white-space: pre; padding: 0pt; diff --git a/hurricane/doc/hurricane/Technology.dox b/hurricane/doc/hurricane/Technology.dox index 0a361689..3b85c631 100644 --- a/hurricane/doc/hurricane/Technology.dox +++ b/hurricane/doc/hurricane/Technology.dox @@ -6,24 +6,77 @@ /*! \class Technology * \brief Technological rules description (\b API). - * + * * \section sTechnologyIntro Introduction - * + * * The Technology object provides the description of all the technology - * rules needed by the tools, currently it is limited to the description - * of all layers available. This object must be created once within the + * rules needed by the tools, currently it contains: + * + * - The layers, roughly from bottom (i.e. closest to the subtsrate) + * to top. Layers can be basic, that is, match a real physical layer, + * or composite, like for VIAs in symbolic for macro-generation. + * It also provides a connexity table between layers. + * - Three sets of rules describing the technology rules (formerly the + * \c DTR in Alliance). + * -# Zero Layer: rules not associated to any layer. + * -# One Layer: rules associated to one layer. + * -# Two Layers: rules associated to two layer. + * + * This object must be created once within the * DataBase, and, in principle never destroyed (this would destroy layers * and all objects laying on them ...). + * + * Here * * \remark There is only one technology for the current DataBase, and only one * Database object, so only one technology defined. + * + * \section sTechnologyRules Using PhysicalRules + * + * How to create a simple one layer rule, setup the minimal width + * of \c metal1 layer to 0.5µm. + * +\code +tech = DataBase::getDB()->getTechnology(); +PhysicalRule* rule = tech->addPhysicalRule( "minWidth", "metal1" ); +rule->addValue( DbU::fromPhysical( 0.5, DbU::UnitPower::Micro ), 0 ); +\endcode + * + * How to create a one layer rule, with multiple steps. + * The minimal spacing of \c metal1 layer which will depend + * on the wire length. The spacing will be of 2µm for length + * below 50µm and 4µm above. + * +\code +tech = DataBase::getDB()->getTechnology(); +PhysicalRule* rule = tech->addPhysicalRule( "minWidth", "metal1" ); +rule->addValue( DbU::fromPhysical( 2.0, DbU::UnitPower::Micro ) + , DbU::fromPhysical( 50.0, DbU::UnitPower::Micro ) ); +rule->addValue( DbU::fromPhysical( 4.0, DbU::UnitPower::Micro ) + , DbU::fromPhysical( 1000.0, DbU::UnitPower::Micro ) ); +\endcode + * + * How to create a two layers rule, with non-isomorphic values. + * The minimum enclosure of \c metal1 layer over \c cut1 will be + * 1µm in horizontal direction and 0.5µm in vertical. + * The order of layers is significant in the function call, it + * must be read as "The encolusre of metal1 over cut1". + * +\code +tech = DataBase::getDB()->getTechnology(); +PhysicalRule* rule = tech->addPhysicalRule( "minWidth", "metal1", "cut1" ); +rule->addValue( DbU::fromPhysical( 1.0, DbU::UnitPower::Micro ) + , DbU::fromPhysical( 0.5, DbU::UnitPower::Micro ) + , 0 ); +\endcode + */ */ /*! \function Technology* Technology::create ( DataBase* dataBase, const Name& name ); * \Return a newly created technology named \c \ for the data base \c \. * - * \caution Throws an exception if the \c dataBase is \NULL, if the name is empty or if + * \warning Throws an exception if the \c dataBase is \NULL, if the name is empty or if * the \c dataBase has already a technology. */ @@ -142,4 +195,73 @@ * Returns \true on success (the layer exists). */ + //! \function PhysicalRule* Technology::getUnitRule ( std::string ruleName ) const; + //! \param ruleName The name of the rule + //! + //! \Return The matching rule in the table of unit rules. + + //! \function PhysicalRule* Technology::getPhysicalRule ( std::string ruleName, std::string layerName ) const; + //! \param ruleName The name of the rule + //! \param layerName The name of the layer + //! + //! \Return The matching rule in the table of one layer rules. + + //! \function PhysicalRule* Technology::getPhysicalRule ( std::string ruleName, std::string layer1Name, std::string layer2Name ) const; + //! \param ruleName The name of the rule + //! \param layer1Name The name of the first layer + //! \param layer2Name The name of the second layer + //! + //! \Return The matching rule in the table of two layers rules. + //! The order of layers arguments is meaningful and should match + //! The one used at rule creation. + + //! \function PhysicalRule* Technology::addUnitRule ( const std::string& ruleName, const std::string& reference ); + //! \param ruleName The name of the rule + //! \param reference A free comentary string for further reference. + //! + //! \Return The newly added rule. + //! + //! Create and add to Technology a rule whithout associated layer. + //! The rule should contain a value which is anything but a length + //! (Volt, Henry, Ohm, ...) + //! The rule is created empty. For a detailed explanation see + //! PhysicalRule. + + //! \function PhysicalRule* Technology::addPhysicalRule ( std::string ruleName, std::string reference ); + //! \param ruleName The name of the rule + //! \param reference A free comentary string for further reference. + //! + //! \Return The newly added rule. + //! + //! Create and add to Technology a rule whithout associated layer. + //! The rule should contain only length value(s) (so DbU::Unit). + //! The rule is created empty. For a detailed explanation see + //! PhysicalRule. + + //! \function PhysicalRule* Technology::addPhysicalRule ( std::string ruleName, std::string layerName, std::string reference ); + //! \param ruleName The name of the rule + //! \param layerName The one layer associated to the rule. + //! \param reference A free comentary string for further reference. + //! + //! \Return The newly added rule. + //! + //! Create and add to Technology a rule associated to \b one layer. + //! The rule should contain only length value(s) (so DbU::Unit). + //! The rule is created empty. For a detailed explanation see + //! PhysicalRule. + + //! \function PhysicalRule* Technology::addPhysicalRule ( std::string ruleName, std::string layer1Name, std::string layer2Name, std::string reference ); + //! \param ruleName The name of the rule + //! \param layer1Name First layer associated to the rule. + //! \param layer2Name First layer associated to the rule. + //! \param reference A free comentary string for further reference. + //! + //! \Return The newly added rule. + //! + //! Create and add to Technology a rule associated to \b two layers. + //! The order of layers is meaningful in case of an asymmetric rule. + //! The rule should contain only length value(s) (so DbU::Unit). + //! The rule is created empty. For a detailed explanation see + //! PhysicalRule. + } diff --git a/hurricane/doc/hurricane/doxyfile b/hurricane/doc/hurricane/doxyfile index 1b5eabe2..be8c913f 100644 --- a/hurricane/doc/hurricane/doxyfile +++ b/hurricane/doc/hurricane/doxyfile @@ -183,8 +183,7 @@ TAB_SIZE = 2 ALIASES = "function=\fn " \ "important=\par Important:\n " \ - "caution=\par Caution:\n " \ - "remark=\par Remark:\n " \ + "caution=\par Caution: " \ "sample=\par Sample:\n " \ "Return=Returns: " \ "unsigned=\c unsigned " \ @@ -642,6 +641,8 @@ INPUT = Generalities.dox \ DBo.dox \ ../../src/hurricane/hurricane/DataBase.h \ DataBase.dox \ + ../../src/hurricane/hurricane/PhysicalRule.h \ + PhysicalRule.dox \ ../../src/hurricane/hurricane/Technology.h \ Technology.dox \ ../../src/hurricane/hurricane/Layers.h \ diff --git a/hurricane/doc/hurricane/doxygen.warn.log b/hurricane/doc/hurricane/doxygen.warn.log index f98555ad..a32c41e7 100644 --- a/hurricane/doc/hurricane/doxygen.warn.log +++ b/hurricane/doc/hurricane/doxygen.warn.log @@ -20,8 +20,8 @@ error: the type 'dirs' is not supported for the entry tag within a navindex! Che /dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Interruption.dox:41: warning: documented symbol `const string & Hurricane::Interruption::GetReason' was not declared or defined. /dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Interruption.dox:45: warning: documented symbol `int Hurricane::Interruption::GetCode' was not declared or defined. /dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Collection.dox:439: warning: documented symbol `typedef list< Element > Hurricane::ElementList' was not declared or defined. -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Technology.dox:130: warning: documented symbol `bool Hurricane::Technology::setWorkingLayer' was not declared or defined. -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Technology.dox:135: warning: documented symbol `bool Hurricane::Technology::setWorkingLayer' was not declared or defined. +/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Technology.dox:183: warning: documented symbol `bool Hurricane::Technology::setWorkingLayer' was not declared or defined. +/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Technology.dox:188: warning: documented symbol `bool Hurricane::Technology::setWorkingLayer' was not declared or defined. /dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Layer.dox:128: warning: documented symbol `const DbU::Unit & Hurricane::Layer::getPitch' was not declared or defined. /dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Layer.dox:181: warning: no uniquely matching class member found for DbU::Unit Hurricane::Layer::getEnclosure() const @@ -71,103 +71,18 @@ Possible candidates: /dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/PrivateProperty.dox:49: warning: documented symbol `typedef PrivateProperty::Inherit Hurricane::Property' was not declared or defined. /dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/SharedProperty.dox:50: warning: documented symbol `typedef SharedProperty::Inherit Hurricane::Property' was not declared or defined. /dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/SharedProperty.dox:71: warning: documented symbol `DBos Hurricane::SharedProperty::GetOwners' was not declared or defined. -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Generalities.dox:34: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Generalities.dox:138: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/DbU.dox:14: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/DbU.dox:235: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/DbU.dox:247: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/BasicLayer.dox:22: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/BasicLayer.dox:27: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Box.dox:72: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Cell.dox:40: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Cell.dox:132: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Cell.dox:144: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Cell.dox:151: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Cell.dox:160: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Cell.dox:164: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Cell.dox:227: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Cell.dox:235: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Collection.dox:108: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Collection.dox:114: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Collection.dox:179: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Collection.dox:189: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Collection.dox:199: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Collection.dox:206: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Collection.dox:214: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Collection.dox:240: warning: Illegal command n as part of a title section /dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Collection.dox:244: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Component.dox:31: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Component.dox:172: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Contact.dox:48: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Contact.dox:57: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Contact.dox:60: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Contact.dox:82: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Contact.dox:89: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Contact.dox:151: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Contact.dox:158: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Contact.dox:165: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Contact.dox:33: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/ContactLayer.dox:35: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/DataBase.dox:23: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/DataBase.dox:32: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/DBo.dox:187: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/DBo.dox:216: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/DBo.dox:268: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/DBo.dox:271: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/DBo.dox:277: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/DBo.dox:279: warning: Illegal command n as part of a title section /dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/DebugSession.dox:103: warning: Found unknown command `\Returns' -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/DiffusionLayer.dox:35: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Entity.dox:41: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Exception.dox:14: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Collection.dox:375: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Collection.dox:392: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Collection.dox:399: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Collection.dox:384: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Filter.dox:187: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Filter.dox:204: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Filter.dox:211: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Filter.dox:196: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Locator.dox:129: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Locator.dox:146: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Locator.dox:153: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Locator.dox:138: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Go.dox:35: warning: Illegal command n as part of a title section /dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Go.dox:201: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Hook.dox:101: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Hook.dox:108: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Hook.dox:116: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Hook.dox:124: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Hook.dox:132: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Hook.dox:141: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Hook.dox:145: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Hook.dox:176: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Hook.dox:184: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Hook.dox:193: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Hook.dox:203: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Hook.dox:226: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Hook.dox:236: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Hook.dox:245: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Horizontal.dox:48: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Horizontal.dox:57: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Horizontal.dox:65: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/HyperNet.dox:20: warning: Illegal command n as part of a title section /dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/HyperNet.dox:31: warning: Found unknown command `\sreturn' /dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/HyperNet.dox:34: warning: Found unknown command `\sreturn' -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Instance.dox:73: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Instance.dox:77: warning: Illegal command n as part of a title section /dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Instance.dox:103: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Instance.dox:127: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Instance.dox:145: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Instance.dox:156: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Instance.dox:159: warning: Illegal command n as part of a title section /dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Instance.dox:163: warning: Illegal command n as part of a title section /dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Instance.dox:177: warning: Unsupported xml/html tag found /dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Instance.dox:182: warning: Unsupported xml/html tag found /dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Instance.dox:182: warning: Unsupported xml/html tag found /dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Instance.dox:184: warning: Unsupported xml/html tag found /dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Instance.dox:186: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Interval.dox:57: warning: Illegal command n as part of a title section /dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/JsonObject.dox:40: warning: Illegal command \typename as the argument of a \typename command /dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/JsonObject.dox:72: warning: argument 'stack' of command @param is not found in the argument list of Hurricane::JsonObject::check(JsonStack &, std::string fname) const /dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/JsonObject.dox:148: warning: argument 'name' of command @param is not found in the argument list of Hurricane::JsonObject::setName(const std::string &) @@ -181,68 +96,19 @@ Possible candidates: parameter 'stack' /dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/JsonObject.dox:193: warning: Found unknown command `\Remark' /dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/JsonObject.dox:204: warning: Found unknown command `\Remark' -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Layer.dox:136: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Layer.dox:144: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Layer.dox:238: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Library.dox:32: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Library.dox:40: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Library.dox:86: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Locator.dox:89: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Locator.dox:108: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Name.dox:57: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Net.dox:109: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Net.dox:129: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Net.dox:184: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Net.dox:191: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Net.dox:198: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Net.dox:230: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Net.dox:245: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Net.dox:274: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Net.dox:279: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Net.dox:288: warning: Illegal command n as part of a title section /dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Net.dox:295: warning: Unsupported xml/html tag found /dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Net.dox:295: warning: Unsupported xml/html tag found -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Net.dox:299: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Filter.dox:219: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Filter.dox:228: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Filter.dox:235: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Occurrence.dox:60: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Occurrence.dox:67: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Occurrence.dox:70: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Occurrence.dox:162: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Occurrence.dox:170: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Occurrence.dox:173: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Occurrence.dox:180: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Occurrence.dox:187: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Path.dox:40: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Path.dox:47: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Path.dox:54: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Path.dox:57: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Path.dox:66: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Path.dox:69: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Path.dox:86: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Plug.dox:20: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Plug.dox:25: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Plug.dox:60: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Plug.dox:68: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Plug.dox:76: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Plug.dox:80: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/PrivateProperty.dox:76: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Property.dox:27: warning: Illegal command n as part of a title section +/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Net.dox:299: warning: Unsupported xml/html tag found +/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/PhysicalRule.dox:70: warning: argument 'hvalue' of command @param is not found in the argument list of Hurricane::PhysicalRule::addValue(Hurricane::DbU::Unit hValue, Hurricane::DbU::Unit vValue, Hurricane::DbU::Unit maxLength) +/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/PhysicalRule.dox:70: warning: argument 'vvalue' of command @param is not found in the argument list of Hurricane::PhysicalRule::addValue(Hurricane::DbU::Unit hValue, Hurricane::DbU::Unit vValue, Hurricane::DbU::Unit maxLength) +/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/src/hurricane/hurricane/PhysicalRule.h:83: warning: The following parameters of Hurricane::PhysicalRule::addValue(Hurricane::DbU::Unit hValue, Hurricane::DbU::Unit vValue, Hurricane::DbU::Unit maxLength) are not documented: + parameter 'hValue' + parameter 'vValue' /dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Property.dox:47: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Property.dox:53: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Property.dox:159: warning: Illegal command n as part of a title section /dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Property.dox:182: warning: Illegal command n as part of a title section /dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Property.dox:202: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Property.dox:237: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Property.dox:358: warning: Illegal command n as part of a title section /dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Property.dox:367: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Property.dox:373: warning: Illegal command n as part of a title section /dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/QuadTree.dox:13: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/QuadTree.dox:66: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/QuadTree.dox:68: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/QuadTree.dox:78: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/QuadTree.dox:80: warning: Illegal command n as part of a title section /dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Query.dox:78: warning: Found unknown command `\sreturn' /dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Query.dox:81: warning: Found unknown command `\sreturn' /dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Query.dox:84: warning: Found unknown command `\sreturn' @@ -262,16 +128,3 @@ Possible candidates: /dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Query.dox:131: warning: Found unknown command `\sreturn' /dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Query.dox:135: warning: Found unknown command `\sreturn' /dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Query.dox:139: warning: Found unknown command `\sreturn' -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/RegularLayer.dox:29: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/RoutingPad.dox:145: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Rubber.dox:43: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Technology.dox:16: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Technology.dox:26: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Technology.dox:62: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Transformation.dox:35: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/TransistorLayer.dox:35: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Vertical.dox:58: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Vertical.dox:47: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Vertical.dox:67: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/Vertical.dox:75: warning: Illegal command n as part of a title section -/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/ViaLayer.dox:35: warning: Illegal command n as part of a title section diff --git a/hurricane/doc/hurricane/html/BasicLayer_8h_source.html b/hurricane/doc/hurricane/html/BasicLayer_8h_source.html index ed8f8596..07d2c22b 100644 --- a/hurricane/doc/hurricane/html/BasicLayer_8h_source.html +++ b/hurricane/doc/hurricane/html/BasicLayer_8h_source.html @@ -51,7 +51,7 @@ $(function() {
Definition: BasicLayer.h:58
Code
Definition: BasicLayer.h:53
-
Name description (API)
Definition: Name.h:36
+
Name description (API)
Definition: Name.h:35
std::int64_t Unit
Definition: DbU.h:70
DataBase object root class (API).
Definition: DBo.h:47
const Material & getMaterial() const
Definition: BasicLayer.h:140
@@ -68,13 +68,13 @@ $(function() {
The namespace dedicated to Hurricane.
Definition: Generalities.dox:5
void setBlockageLayer(BasicLayer *layer)
Definition: BasicLayer.h:144
Definition: BasicLayer.h:57
-
Technological rules description (API).
Definition: Technology.h:66
+
Technological rules description (API).
Definition: Technology.h:62


- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 6e38e878..80f41f0a 100644 --- a/hurricane/doc/hurricane/html/Box_8h_source.html +++ b/hurricane/doc/hurricane/html/Box_8h_source.html @@ -44,7 +44,7 @@ $(function() {
Box.h
-
1 // ****************************************************************************************************
2 // File: ./hurricane/Box.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_BOX
21 #define HURRICANE_BOX
22 
23 #include "hurricane/Point.h"
24 
25 namespace Hurricane {
26 
27 // ****************************************************************************************************
28 // Box declaration
29 // ****************************************************************************************************
30 
31 class Box {
32 // ******
33 
34 // Attributes
35 // **********
36 
37  private: DbU::Unit _xMin;
38  private: DbU::Unit _yMin;
39  private: DbU::Unit _xMax;
40  private: DbU::Unit _yMax;
41 
42 // constructors
43 // ************
44 
45  public: Box();
46 
47  public: Box(const DbU::Unit& x, const DbU::Unit& y);
48  public: Box(const Point& point);
49  public: Box(const DbU::Unit& x1, const DbU::Unit& y1, const DbU::Unit& x2, const DbU::Unit& y2);
50  public: Box(const Point& point1, const Point& point2);
51 
52  public: Box(const Box& box);
53 
54 // Operators
55 // *********
56 
57  public: Box& operator=(const Box& box);
58 
59  public: bool operator==(const Box& box) const;
60  public: bool operator!=(const Box& box) const;
61 
62 // Accessors
63 // *********
64 
65  public: const DbU::Unit& getXMin() const {return _xMin;};
66  public: const DbU::Unit& getYMin() const {return _yMin;};
67  public: const DbU::Unit& getXMax() const {return _xMax;};
68  public: const DbU::Unit& getYMax() const {return _yMax;};
69 
70  public: DbU::Unit getXCenter() const {return ((_xMin + _xMax) / 2);};
71  public: DbU::Unit getYCenter() const {return ((_yMin + _yMax) / 2);};
72  public: Point getCenter() const {return Point(getXCenter(), getYCenter());};
73  public: Point getCornerBL() const { return Point(_xMin,_yMin); }
74  public: Point getCornerTL() const { return Point(_xMin,_yMax); }
75  public: Point getCornerTR() const { return Point(_xMax,_yMax); }
76  public: Point getCornerBR() const { return Point(_xMax,_yMin); }
77 
78  public: DbU::Unit getWidth() const {return (_xMax - _xMin);};
79  public: DbU::Unit getHalfWidth() const {return (getWidth() / 2);};
80  public: DbU::Unit getHeight() const {return (_yMax - _yMin);};
81  public: DbU::Unit getHalfHeight() const {return (getHeight() / 2);};
82 
83  public: Box getUnion(const Box& box) const;
84 
85  public: Box getIntersection(const Box& box) const;
86  public: DbU::Unit manhattanDistance(const Point& pt) const;
87  public: DbU::Unit manhattanDistance(const Box& box) const;
88 
89 // Predicates
90 // **********
91 
92  public: bool isEmpty() const;
93  public: bool isFlat() const;
94  public: bool isPonctual() const;
95 
96  public: bool contains(const DbU::Unit& x, const DbU::Unit& y) const;
97  public: bool contains(const Point& point) const;
98  public: bool contains(const Box& box) const;
99 
100  public: bool intersect(const Box& box) const;
101 
102  public: bool isConstrainedBy(const Box& box) const;
103 
104 // Updators
105 // ********
106 
107  public: Box& makeEmpty();
108 
109  public: Box& inflate(const DbU::Unit& d);
110  public: Box& inflate(const DbU::Unit& dx, const DbU::Unit& dy);
111  public: Box& inflate(const DbU::Unit& dxMin, const DbU::Unit& dyMin, const DbU::Unit& dxMax, const DbU::Unit& dyMax);
112  public: Box getInflated(const DbU::Unit& d) const;
113  public: Box& shrinkByFactor(double factor); // 0 <= factor <= 1
114 
115  public: Box& merge(const DbU::Unit& x, const DbU::Unit& y);
116  public: Box& merge(const Point& point);
117  public: Box& merge(const DbU::Unit& x1, const DbU::Unit& y1, const DbU::Unit& x2, const DbU::Unit& y2);
118  public: Box& merge(const Box& box);
119 
120  public: Box& translate(const DbU::Unit& dx, const DbU::Unit& dy);
121 
122 // Others
123 // ******
124 
125 
126  public: string _getTypeName() const { return _TName("Box"); };
127  public: string _getString() const;
128  public: Record* _getRecord() const;
129  public: void toJson(JsonWriter*) const;
130 
131 };
132 
133 
134 class JsonBox : public JsonObject {
135 // ********************************
136 
137  public: static void initialize();
138  public: JsonBox(unsigned long);
139  public: virtual string getTypeName() const;
140  public: virtual JsonBox* clone(unsigned long) const;
141  public: virtual void toData(JsonStack&);
142 };
143 
144 
145 } // End of Hurricane namespace.
146 
147 
148 INSPECTOR_PV_SUPPORT(Hurricane::Box);
149 
150 
151 #endif // HURRICANE_BOX
152 
153 
154 // ****************************************************************************************************
155 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
156 // ****************************************************************************************************
const DbU::Unit & getXMax() const
Definition: Box.h:67
+
1 // ****************************************************************************************************
2 // File: ./hurricane/Box.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_BOX
21 #define HURRICANE_BOX
22 
23 #include "hurricane/Point.h"
24 
25 namespace Hurricane {
26 
27 // ****************************************************************************************************
28 // Box declaration
29 // ****************************************************************************************************
30 
31 class Box {
32 // ******
33 
34 // Attributes
35 // **********
36 
37  private: DbU::Unit _xMin;
38  private: DbU::Unit _yMin;
39  private: DbU::Unit _xMax;
40  private: DbU::Unit _yMax;
41 
42 // constructors
43 // ************
44 
45  public: Box();
46 
47  public: Box(const DbU::Unit& x, const DbU::Unit& y);
48  public: Box(const Point& point);
49  public: Box(const DbU::Unit& x1, const DbU::Unit& y1, const DbU::Unit& x2, const DbU::Unit& y2);
50  public: Box(const Point& point1, const Point& point2);
51 
52  public: Box(const Box& box);
53 
54 // Operators
55 // *********
56 
57  public: Box& operator=(const Box& box);
58 
59  public: bool operator==(const Box& box) const;
60  public: bool operator!=(const Box& box) const;
61 
62 // Accessors
63 // *********
64 
65  public: const DbU::Unit& getXMin() const {return _xMin;};
66  public: const DbU::Unit& getYMin() const {return _yMin;};
67  public: const DbU::Unit& getXMax() const {return _xMax;};
68  public: const DbU::Unit& getYMax() const {return _yMax;};
69 
70  public: DbU::Unit getXCenter() const {return ((_xMin + _xMax) / 2);};
71  public: DbU::Unit getYCenter() const {return ((_yMin + _yMax) / 2);};
72  public: Point getCenter() const {return Point(getXCenter(), getYCenter());};
73  public: Point getCornerBL() const { return Point(_xMin,_yMin); }
74  public: Point getCornerTL() const { return Point(_xMin,_yMax); }
75  public: Point getCornerTR() const { return Point(_xMax,_yMax); }
76  public: Point getCornerBR() const { return Point(_xMax,_yMin); }
77 
78  public: DbU::Unit getWidth() const {return (_xMax - _xMin);};
79  public: DbU::Unit getHalfWidth() const {return (getWidth() / 2);};
80  public: DbU::Unit getHeight() const {return (_yMax - _yMin);};
81  public: DbU::Unit getHalfHeight() const {return (getHeight() / 2);};
82 
83  public: Box getUnion(const Box& box) const;
84 
85  public: Box getIntersection(const Box& box) const;
86  public: DbU::Unit manhattanDistance(const Point& pt) const;
87  public: DbU::Unit manhattanDistance(const Box& box) const;
88 
89 // Predicates
90 // **********
91 
92  public: bool isEmpty() const;
93  public: bool isFlat() const;
94  public: bool isPonctual() const;
95 
96  public: bool contains(const DbU::Unit& x, const DbU::Unit& y) const;
97  public: bool contains(const Point& point) const;
98  public: bool contains(const Box& box) const;
99 
100  public: bool intersect(const Box& box) const;
101 
102  public: bool isConstrainedBy(const Box& box) const;
103 
104 // Updators
105 // ********
106 
107  public: Box& makeEmpty();
108 
109  public: Box& inflate(const DbU::Unit& d);
110  public: Box& inflate(const DbU::Unit& dx, const DbU::Unit& dy);
111  public: Box& inflate(const DbU::Unit& dxMin, const DbU::Unit& dyMin, const DbU::Unit& dxMax, const DbU::Unit& dyMax);
112  public: Box getInflated(const DbU::Unit& d) const;
113  public: Box& shrinkByFactor(double factor); // 0 <= factor <= 1
114 
115  public: Box& merge(const DbU::Unit& x, const DbU::Unit& y);
116  public: Box& merge(const Point& point);
117  public: Box& merge(const DbU::Unit& x1, const DbU::Unit& y1, const DbU::Unit& x2, const DbU::Unit& y2);
118  public: Box& merge(const Box& box);
119 
120  public: Box& translate(const DbU::Unit& dx, const DbU::Unit& dy);
121 
122 // Others
123 // ******
124 
125 
126  public: string _getTypeName() const { return _TName("Box"); };
127  public: string _getString() const;
128  public: Record* _getRecord() const;
129  public: void toJson(JsonWriter*) const;
130 
131 };
132 
133 
134 class JsonBox : public JsonObject {
135 // ********************************
136 
137  public: static void initialize();
138  public: JsonBox(unsigned long);
139  public: virtual string getTypeName() const;
140  public: virtual JsonBox* clone(unsigned long) const;
141  public: virtual void toData(JsonStack&);
142 };
143 
144 
145 } // End of Hurricane namespace.
146 
147 
148 INSPECTOR_PR_SUPPORT(Hurricane::Box);
149 
150 
151 #endif // HURRICANE_BOX
152 
153 
154 // ****************************************************************************************************
155 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
156 // ****************************************************************************************************
const DbU::Unit & getXMax() const
Definition: Box.h:67
const DbU::Unit & getYMax() const
Definition: Box.h:68
bool contains(const DbU::Unit &x, const DbU::Unit &y) const
@@ -80,7 +80,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 7036f896..645deb1a 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 55624951..7614a350 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  , TerminalNetlist = (1 << 20)
91  , Pad = (1 << 21)
92  , Feed = (1 << 22)
93  , FlattenedNets = (1 << 23)
94  , Placed = (1 << 24)
95  , Routed = (1 << 25)
96  , MergedQuadTree = (1 << 26)
97  , SlavedAb = (1 << 27)
98  , Materialized = (1 << 28)
99  };
100 
101  public:
102  Flags ( uint64_t flags = NoFlags );
103  virtual ~Flags ();
104  virtual std::string _getTypeName () const;
105  virtual std::string _getString () const;
106  };
107 
108  class UniquifyRelation : public Relation {
109  public:
110  static UniquifyRelation* create ( Cell* );
111  static UniquifyRelation* get ( const Cell* );
112  virtual Name getName () const;
113  static Name staticGetName ();
114  Name getUniqueName ();
115  static std::string getTrunkName ( Name name );
116  virtual bool hasJson () const;
117  virtual void toJson ( JsonWriter*, const DBo* ) const;
118  inline void _setOwner ( Cell* );
119  inline void _setDuplicates ( unsigned int );
120  virtual string _getTypeName () const;
121  virtual Record* _getRecord () const;
122  private:
123  static const Name _name;
124  unsigned int _duplicates;
125  private:
126  UniquifyRelation ( Cell* );
127  protected:
128  virtual void _preDestroy ();
129 
130  public:
131  class JsonProperty : public JsonObject {
132  public:
133  static void initialize ();
134  JsonProperty ( unsigned long flags );
135  virtual string getTypeName () const;
136  virtual JsonProperty* clone ( unsigned long ) const;
137  virtual void toData ( JsonStack& );
138  };
139  public:
140  class JsonPropertyRef : public JsonObject {
141  public:
142  static void initialize ();
143  JsonPropertyRef ( unsigned long flags );
144  virtual string getTypeName () const;
145  virtual JsonPropertyRef* clone ( unsigned long ) const;
146  virtual void toData ( JsonStack& );
147  };
148  };
149 
150  class ClonedSet : public Collection<Cell*> {
151  public:
152  // Sub-Class: Locator.
153  class Locator : public Hurricane::Locator<Cell*> {
154  public:
155  Locator ( const Cell* );
156  inline Locator ( const Locator& );
157  virtual Cell* getElement () const;
158  virtual Hurricane::Locator<Cell*>* getClone () const;
159  virtual bool isValid () const;
160  virtual void progress ();
161  virtual string _getString () const;
162  protected:
163  Hurricane::Locator<DBo*>* _dboLocator;
164  };
165 
166  public:
167  inline ClonedSet ( const Cell* cell );
168  inline ClonedSet ( const ClonedSet& );
169  virtual Hurricane::Collection<Cell*>* getClone () const;
170  virtual Hurricane::Locator<Cell*>* getLocator () const;
171  virtual string _getString () const;
172  protected:
173  const Cell* _cell;
174  };
175 
176  class SlavedsRelation : public Relation {
177  public:
178  static SlavedsRelation* create ( Cell* );
179  static SlavedsRelation* get ( const Cell* );
180  virtual Name getName () const;
181  static Name staticGetName ();
182  virtual bool hasJson () const;
183  virtual void toJson ( JsonWriter*, const DBo* ) const;
184  inline void _setOwner ( Cell* );
185  virtual string _getTypeName () const;
186  virtual Record* _getRecord () const;
187  private:
188  static const Name _name;
189  private:
190  SlavedsRelation ( Cell* );
191  protected:
192  virtual void _preDestroy ();
193 
194  public:
195  class JsonProperty : public JsonObject {
196  public:
197  static void initialize ();
198  JsonProperty ( unsigned long flags );
199  virtual string getTypeName () const;
200  virtual JsonProperty* clone ( unsigned long ) const;
201  virtual void toData ( JsonStack& );
202  };
203  public:
204  class JsonPropertyRef : public JsonObject {
205  public:
206  static void initialize ();
207  JsonPropertyRef ( unsigned long flags );
208  virtual string getTypeName () const;
209  virtual JsonPropertyRef* clone ( unsigned long ) const;
210  virtual void toData ( JsonStack& );
211  };
212  };
213 
214  class SlavedsSet : public Collection<Cell*> {
215  public:
216  // Sub-Class: Locator.
217  class Locator : public Hurricane::Locator<Cell*> {
218  public:
219  Locator ( const Cell* );
220  inline Locator ( const Locator& );
221  virtual Cell* getElement () const;
222  virtual Hurricane::Locator<Cell*>* getClone () const;
223  virtual bool isValid () const;
224  virtual void progress ();
225  virtual string _getString () const;
226  protected:
227  Hurricane::Locator<DBo*>* _dboLocator;
228  };
229 
230  public:
231  inline SlavedsSet ( const Cell* cell );
232  inline SlavedsSet ( const SlavedsSet& );
233  virtual Hurricane::Collection<Cell*>* getClone () const;
234  virtual Hurricane::Locator<Cell*>* getLocator () const;
235  virtual string _getString () const;
236  protected:
237  const Cell* _cell;
238  };
239 
240  class InstanceMap : public IntrusiveMap<Name, Instance> {
241  // ****************************************************
242 
243  public: typedef IntrusiveMap<Name, Instance> Inherit;
244 
245  public: InstanceMap();
246 
247  public: virtual Name _getKey(Instance* instance) const;
248  public: virtual unsigned _getHashValue(Name name) const;
249  public: virtual Instance* _getNextElement(Instance* instance) const;
250  public: virtual void _setNextElement(Instance* instance, Instance* nextInstance) const;
251 
252  };
253 
254  public: class SlaveInstanceSet : public IntrusiveSet<Instance> {
255  // ***********************************************************
256 
257  public: typedef IntrusiveSet<Instance> Inherit;
258 
259  public: SlaveInstanceSet();
260 
261  public: virtual unsigned _getHashValue(Instance* slaveInstance) const;
262  public: virtual Instance* _getNextElement(Instance* slaveInstance) const;
263  public: virtual void _setNextElement(Instance* slaveInstance, Instance* nextSlaveInstance) const;
264 
265  };
266 
267  public: class NetMap : public IntrusiveMapConst<Name, Net> {
268  // *********************************************************
269 
270  public: typedef IntrusiveMapConst<Name, Net> Inherit;
271 
272  public: NetMap();
273 
274  public: virtual const Name& _getKey(Net* net) const;
275  public: virtual unsigned _getHashValue(const Name& name) const;
276  public: virtual Net* _getNextElement(Net* net) const;
277  public: virtual void _setNextElement(Net* net, Net* nextNet) const;
278 
279  };
280 
281  class PinMap : public IntrusiveMap<Name, Pin> {
282  // *******************************************
283 
284  public: typedef IntrusiveMap<Name, Pin> Inherit;
285 
286  public: PinMap();
287 
288  public: virtual Name _getKey(Pin* pin) const;
289  public: virtual unsigned _getHashValue(Name name) const;
290  public: virtual Pin* _getNextElement(Pin* pin) const;
291  public: virtual void _setNextElement(Pin* pin, Pin* nextPin) const;
292 
293  };
294 
295  public: class SliceMap : public IntrusiveMap<const Layer*, Slice> {
296  // **************************************************************
297 
298  public: typedef IntrusiveMap<const Layer*, Slice> Inherit;
299 
300  public: SliceMap();
301 
302  public: virtual const Layer* _getKey(Slice* slice) const;
303  public: virtual unsigned _getHashValue(const Layer* layer) const;
304  public: virtual Slice* _getNextElement(Slice* slice) const;
305  public: virtual void _setNextElement(Slice* slice, Slice* nextSlice) const;
306 
307  };
308 
309  public: class MarkerSet : public IntrusiveSet<Marker> {
310  // **************************************************
311 
312  public: typedef IntrusiveSet<Marker> Inherit;
313 
314  public: MarkerSet();
315 
316  public: virtual unsigned _getHashValue(Marker* marker) const;
317  public: virtual Marker* _getNextElement(Marker* marker) const;
318  public: virtual void _setNextElement(Marker* marker, Marker* nextMarker) const;
319 
320  };
321 
322 // Attributes
323 // **********
324 
325  private: Library* _library;
326  private: Name _name;
327  private: Path _shuntedPath;
328  private: InstanceMap _instanceMap;
329  private: QuadTree* _quadTree;
330  private: SlaveInstanceSet _slaveInstanceSet;
331  private: NetMap _netMap;
332  private: PinMap _pinMap;
333  private: SliceMap* _sliceMap;
334  private: ExtensionSliceMap _extensionSlices;
335  private: MarkerSet _markerSet;
336  private: Box _abutmentBox;
337  private: Box _boundingBox;
338  private: Cell* _nextOfLibraryCellMap;
339  private: Cell* _nextOfSymbolCellSet;
340  private: SlaveEntityMap _slaveEntityMap;
341  private: AliasNameSet _netAliasSet;
342  private: Observable _observers;
343  private: Flags _flags;
344 
345 // Constructors
346 // ************
347 
348  protected: Cell(Library* library, const Name& name);
349 
350 // Others
351 // ******
352 
353  protected: virtual void _postCreate();
354 
355  protected: virtual void _preDestroy();
356 
357  public: virtual string _getTypeName() const {return _TName("Cell");};
358  public: virtual string _getString() const;
359  public: virtual Record* _getRecord() const;
360  public: static string getFlagString( uint64_t );
361  public: static Record* getFlagRecord( uint64_t );
362  public: static Slot* getFlagSlot( uint64_t );
363 
364  public: InstanceMap& _getInstanceMap() {return _instanceMap;};
365  public: QuadTree* _getQuadTree() {return _quadTree;};
366  public: SlaveInstanceSet& _getSlaveInstanceSet() {return _slaveInstanceSet;};
367  public: NetMap& _getNetMap() {return _netMap;};
368  public: PinMap& _getPinMap() {return _pinMap;};
369  public: SliceMap* _getSliceMap() {return _sliceMap;};
370  public: ExtensionSliceMap& _getExtensionSliceMap() {return _extensionSlices;};
371  public: MarkerSet& _getMarkerSet() {return _markerSet;};
372  public: Cell* _getNextOfLibraryCellMap() const {return _nextOfLibraryCellMap;};
373  public: Cell* _getNextOfSymbolCellSet() const {return _nextOfSymbolCellSet;};
374  public: AliasNameSet& _getNetAliasSet() { return _netAliasSet; }
375 
376  public: void _setNextOfLibraryCellMap(Cell* cell) {_nextOfLibraryCellMap = cell;};
377  public: void _setNextOfSymbolCellSet(Cell* cell) {_nextOfSymbolCellSet = cell;};
378 
379  public: void _addNetAlias(NetAliasName* alias) { _netAliasSet.insert(alias); }
380  public: void _removeNetAlias(NetAliasName* alias) { _netAliasSet.erase(alias); }
381 
382  public: void _fit(const Box& box);
383  public: void _unfit(const Box& box);
384 
385  public: void _addSlaveEntity(Entity* entity, Entity* slaveEntity);
386  public: void _removeSlaveEntity(Entity* entity, Entity* slaveEntity);
387  public: void _getSlaveEntities(SlaveEntityMap::iterator& begin, SlaveEntityMap::iterator& end);
388  public: void _getSlaveEntities(Entity* entity, SlaveEntityMap::iterator& begin, SlaveEntityMap::iterator& end);
389  public: void _insertSlice(ExtensionSlice*);
390  public: void _removeSlice(ExtensionSlice*);
391  public: void _slaveAbutmentBox(Cell*);
392  public: void _changeQuadTree(Cell*);
393  public: void _setShuntedPath(Path path) { _shuntedPath=path; }
394  protected: void _setAbutmentBox(const Box& abutmentBox);
395 
396  public: virtual void _toJson(JsonWriter*) const;
397  public: virtual void _toJsonCollections(JsonWriter*) const;
398 
399 // Constructors
400 // ************
401 
402  public: static Cell* create(Library* library, const Name& name);
403  public: static Cell* fromJson(const string& filename);
404 
405 // Accessors
406 // *********
407 
408  public: virtual Cell* getCell() const {return (Cell*)this;};
409  public: virtual Box getBoundingBox() const;
410  public: Library* getLibrary() const {return _library;};
411  public: string getHierarchicalName() const;
412  public: const Name& getName() const {return _name;};
413  public: const Flags& getFlags() const { return _flags; }
414  public: Path getShuntedPath() const { return _shuntedPath; }
415  public: Entity* getEntity(const Signature&) const;
416  public: Instance* getInstance(const Name& name) const {return _instanceMap.getElement(name);};
417  public: Instances getInstances() const {return _instanceMap.getElements();};
418  public: Instances getPlacedInstances() const;
419  public: Instances getFixedInstances() const;
420  public: Instances getUnplacedInstances() const;
421  public: Instances getNotUnplacedInstances() const;
422  public: Instances getInstancesUnder(const Box& area) const;
423  public: Instances getPlacedInstancesUnder(const Box& area) const;
424  public: Instances getFixedInstancesUnder(const Box& area) const;
425  public: Instances getUnplacedInstancesUnder(const Box& area) const;
426  public: Instances getNotUnplacedInstancesUnder(const Box& area) const;
427  public: Instances getSlaveInstances() const; // {return _slaveInstanceSet.getElements();}; NOON!!
428  public: Instances getTerminalInstances() const;
429  public: Instances getTerminalInstancesUnder(const Box& area) const;
430  public: Instances getNonTerminalInstances() const;
431  public: Instances getNonTerminalInstancesUnder(const Box& area) const;
432  public: Instances getTerminalNetlistInstances() const;
433  public: Instances getTerminalNetlistInstancesUnder(const Box& area) const;
434  public: Instances getNonTerminalNetlistInstances() const;
435  public: Instances getNonTerminalNetlistInstancesUnder(const Box& area) const;
436  public: Net* getNet(const Name& name) const;
437  public: DeepNet* getDeepNet( Path, const Net* ) const;
438  public: Nets getNets() const {return _netMap.getElements();};
439  public: Nets getGlobalNets() const;
440  public: Nets getExternalNets() const;
441  public: Nets getInternalNets() const;
442  public: Nets getClockNets() const;
443  public: Nets getSupplyNets() const;
444  public: Nets getPowerNets() const;
445  public: Nets getGroundNets() const;
446  public: Pin* getPin(const Name& name) const {return _pinMap.getElement(name);};
447  public: Pins getPins() const {return _pinMap.getElements();};
448  public: Slice* getSlice(const Layer* layer) const {return _sliceMap->getElement(layer);};
449  public: Slices getSlices(const Layer::Mask& mask = ~0) const;
450  public: const ExtensionSliceMap& getExtensionSliceMap() const { return _extensionSlices; };
451  public: ExtensionSlice* getExtensionSlice(const Name& name) const;
452  public: ExtensionSlices getExtensionSlices(ExtensionSlice::Mask mask=~0) const;
453  public: Rubbers getRubbers() const;
454  public: Rubbers getRubbersUnder(const Box& area) const;
455  public: Markers getMarkers() const {return _markerSet.getElements();};
456  public: Markers getMarkersUnder(const Box& area) const;
457  public: References getReferences() const;
458  public: Components getComponents(const Layer::Mask& mask = ~0) const;
459  public: Components getComponentsUnder(const Box& area, const Layer::Mask& mask = ~0) const;
460  public: Occurrences getOccurrences(unsigned searchDepth = std::numeric_limits<unsigned int>::max()) const;
461  public: Occurrences getOccurrencesUnder(const Box& area, unsigned searchDepth = std::numeric_limits<unsigned int>::max()) const;
463  public: Occurrences getTerminalInstanceOccurrencesUnder(const Box& area) const;
464  public: Occurrences getTerminalNetlistInstanceOccurrences( const Instance* topInstance=NULL ) const;
465  public: Occurrences getTerminalNetlistInstanceOccurrencesUnder(const Box& area) const;
466  public: Occurrences getNonTerminalNetlistInstanceOccurrences( const Instance* topInstance=NULL ) const;
467  public: Occurrences getComponentOccurrences(const Layer::Mask& mask = ~0) const;
468  public: Occurrences getComponentOccurrencesUnder(const Box& area, const Layer::Mask& mask = ~0) const;
469  public: Occurrences getHyperNetRootNetOccurrences() const;
470  public: ExtensionSlice::Mask getExtensionSliceMask ( const Name& name ) const;
471  public: Gos getExtensionGos ( const Name& name ) const;
472  public: Gos getExtensionGos ( ExtensionSlice::Mask mask = ~0 ) const;
473  public: Gos getExtensionGosUnder ( const Box& area, const Name& name ) const;
474  public: Gos getExtensionGosUnder ( const Box& area, ExtensionSlice::Mask mask = ~0 ) const;
475  public: Cells getSubCells() const;
476  public: Cells getClonedCells() const;
477  public: Cell* getCloneMaster() const;
478  public: Pathes getRecursiveSlavePathes() const;
479  public: const Box& getAbutmentBox() const {return _abutmentBox;};
480 
481 // Predicates
482 // **********
483 
484  public: bool isCalledBy(Cell* cell) const;
485  public: bool isTerminal() const {return _instanceMap.isEmpty();};
486  public: bool isTerminalNetlist() const {return _flags.isset(Flags::TerminalNetlist);};
487  public: bool isUnique() const;
488  public: bool isUniquified() const;
489  public: bool isUniquifyMaster() const;
490  public: bool isPad() const {return _flags.isset(Flags::Pad);};
491  public: bool isFeed() const {return _flags.isset(Flags::Feed);};
492  public: bool isFlattenedNets() const {return _flags.isset(Flags::FlattenedNets);};
493  public: bool isPlaced() const {return _flags.isset(Flags::Placed);};
494  public: bool isRouted() const {return _flags.isset(Flags::Routed);};
495  public: bool isNetAlias(const Name& name) const;
496 
497 // Updators
498 // ********
499 
500  public: void setName(const Name& name);
501  public: void setAbutmentBox(const Box& abutmentBox);
502  public: void slaveAbutmentBox(Cell*);
503  public: void unslaveAbutmentBox(Cell*);
504  public: void setTerminalNetlist(bool isTerminalNetlist) {_flags.set(Flags::TerminalNetlist,isTerminalNetlist);};
505  public: void setPad(bool isPad) {_flags.set(Flags::Pad,isPad);};
506  public: void setFeed(bool isFeed) {_flags.set(Flags::Feed,isFeed);};
507  public: void setRouted(bool isRouted) {_flags.set(Flags::Routed,isRouted);};
508  public: void flattenNets(uint64_t flags=Flags::BuildRings);
509  public: void flattenNets(const Instance* instance, uint64_t flags=Flags::BuildRings);
510  public: void createRoutingPadRings(uint64_t flags=Flags::BuildRings);
511  public: void setFlags(uint64_t flags) { _flags |= flags; }
512  public: void resetFlags(uint64_t flags) { _flags &= ~flags; }
513  public: bool updatePlacedFlag();
514  public: void materialize();
515  public: void unmaterialize();
516  public: Cell* getClone();
517  public: void uniquify(unsigned int depth=std::numeric_limits<unsigned int>::max());
518  public: void addObserver(BaseObserver*);
519  public: void removeObserver(BaseObserver*);
520  public: void notify(unsigned flags);
521 
522 };
523 
524 
525 inline Cell::ClonedSet::Locator::Locator ( const Locator& other )
526  : Hurricane::Locator<Cell*>()
527  , _dboLocator(other._dboLocator)
528 { }
529 
530 inline Cell::ClonedSet::ClonedSet ( const Cell* cell )
531  : Hurricane::Collection<Cell*>()
532  , _cell(cell)
533 { }
534 
535 inline Cell::ClonedSet::ClonedSet ( const ClonedSet& other )
536  : Hurricane::Collection<Cell*>()
537  , _cell(other._cell)
538 { }
539 
540 
541 inline void Cell::UniquifyRelation::_setOwner ( Cell* owner ) { _setMasterOwner(owner); }
542 inline void Cell::UniquifyRelation::_setDuplicates ( unsigned int duplicates ) { _duplicates=duplicates; }
543 
544 
545 inline Cell::SlavedsSet::Locator::Locator ( const Locator& other )
546  : Hurricane::Locator<Cell*>()
547  , _dboLocator(other._dboLocator)
548 { }
549 
550 inline Cell::SlavedsSet::SlavedsSet ( const Cell* cell )
551  : Hurricane::Collection<Cell*>()
552  , _cell(cell)
553 { }
554 
555 inline Cell::SlavedsSet::SlavedsSet ( const SlavedsSet& other )
556  : Hurricane::Collection<Cell*>()
557  , _cell(other._cell)
558 { }
559 
560 
561 inline void Cell::SlavedsRelation::_setOwner ( Cell* owner ) { _setMasterOwner(owner); }
562 
563 
564 class JsonCell : public JsonEntity {
565 // *********************************
566 
567  public: static void initialize();
568  public: JsonCell(unsigned long flags);
569  public: virtual ~JsonCell();
570  public: virtual string getTypeName() const;
571  public: virtual JsonCell* clone(unsigned long) const;
572  public: virtual void toData(JsonStack&);
573  private: Cell* _cell;
574  private: bool _materializationState;
575 };
576 
577 } // End of Hurricane namespace.
578 
579 
580 INSPECTOR_P_SUPPORT(Hurricane::Cell);
581 INSPECTOR_P_SUPPORT(Hurricane::Cell::Flags);
582 INSPECTOR_P_SUPPORT(Hurricane::Cell::InstanceMap);
583 INSPECTOR_P_SUPPORT(Hurricane::Cell::SlaveInstanceSet);
584 INSPECTOR_P_SUPPORT(Hurricane::Cell::NetMap);
585 INSPECTOR_P_SUPPORT(Hurricane::Cell::PinMap);
586 INSPECTOR_P_SUPPORT(Hurricane::Cell::SliceMap);
587 INSPECTOR_P_SUPPORT(Hurricane::Cell::MarkerSet);
588 
589 
590 #endif // HURRICANE_CELL_H
591 
592 
593 // ****************************************************************************************************
594 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
595 // ****************************************************************************************************
bool isTerminalNetlist() const
Definition: Cell.h:486
+
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  , TerminalNetlist = (1 << 20)
91  , Pad = (1 << 21)
92  , Feed = (1 << 22)
93  , FlattenedNets = (1 << 23)
94  , Placed = (1 << 24)
95  , Routed = (1 << 25)
96  , MergedQuadTree = (1 << 26)
97  , SlavedAb = (1 << 27)
98  , Materialized = (1 << 28)
99  };
100 
101  public:
102  Flags ( uint64_t flags = NoFlags );
103  virtual ~Flags ();
104  virtual std::string _getTypeName () const;
105  virtual std::string _getString () const;
106  };
107 
108  class UniquifyRelation : public Relation {
109  public:
110  static UniquifyRelation* create ( Cell* );
111  static UniquifyRelation* get ( const Cell* );
112  virtual Name getName () const;
113  static Name staticGetName ();
114  Name getUniqueName ();
115  static std::string getTrunkName ( Name name );
116  virtual bool hasJson () const;
117  virtual void toJson ( JsonWriter*, const DBo* ) const;
118  inline void _setOwner ( Cell* );
119  inline void _setDuplicates ( unsigned int );
120  virtual string _getTypeName () const;
121  virtual Record* _getRecord () const;
122  private:
123  static const Name _name;
124  unsigned int _duplicates;
125  private:
126  UniquifyRelation ( Cell* );
127  protected:
128  virtual void _preDestroy ();
129 
130  public:
131  class JsonProperty : public JsonObject {
132  public:
133  static void initialize ();
134  JsonProperty ( unsigned long flags );
135  virtual string getTypeName () const;
136  virtual JsonProperty* clone ( unsigned long ) const;
137  virtual void toData ( JsonStack& );
138  };
139  public:
140  class JsonPropertyRef : public JsonObject {
141  public:
142  static void initialize ();
143  JsonPropertyRef ( unsigned long flags );
144  virtual string getTypeName () const;
145  virtual JsonPropertyRef* clone ( unsigned long ) const;
146  virtual void toData ( JsonStack& );
147  };
148  };
149 
150  class ClonedSet : public Collection<Cell*> {
151  public:
152  // Sub-Class: Locator.
153  class Locator : public Hurricane::Locator<Cell*> {
154  public:
155  Locator ( const Cell* );
156  inline Locator ( const Locator& );
157  virtual Cell* getElement () const;
158  virtual Hurricane::Locator<Cell*>* getClone () const;
159  virtual bool isValid () const;
160  virtual void progress ();
161  virtual string _getString () const;
162  protected:
163  Hurricane::Locator<DBo*>* _dboLocator;
164  };
165 
166  public:
167  inline ClonedSet ( const Cell* cell );
168  inline ClonedSet ( const ClonedSet& );
169  virtual Hurricane::Collection<Cell*>* getClone () const;
170  virtual Hurricane::Locator<Cell*>* getLocator () const;
171  virtual string _getString () const;
172  protected:
173  const Cell* _cell;
174  };
175 
176  class SlavedsRelation : public Relation {
177  public:
178  static SlavedsRelation* create ( Cell* );
179  static SlavedsRelation* get ( const Cell* );
180  virtual Name getName () const;
181  static Name staticGetName ();
182  virtual bool hasJson () const;
183  virtual void toJson ( JsonWriter*, const DBo* ) const;
184  inline void _setOwner ( Cell* );
185  virtual string _getTypeName () const;
186  virtual Record* _getRecord () const;
187  private:
188  static const Name _name;
189  private:
190  SlavedsRelation ( Cell* );
191  protected:
192  virtual void _preDestroy ();
193 
194  public:
195  class JsonProperty : public JsonObject {
196  public:
197  static void initialize ();
198  JsonProperty ( unsigned long flags );
199  virtual string getTypeName () const;
200  virtual JsonProperty* clone ( unsigned long ) const;
201  virtual void toData ( JsonStack& );
202  };
203  public:
204  class JsonPropertyRef : public JsonObject {
205  public:
206  static void initialize ();
207  JsonPropertyRef ( unsigned long flags );
208  virtual string getTypeName () const;
209  virtual JsonPropertyRef* clone ( unsigned long ) const;
210  virtual void toData ( JsonStack& );
211  };
212  };
213 
214  class SlavedsSet : public Collection<Cell*> {
215  public:
216  // Sub-Class: Locator.
217  class Locator : public Hurricane::Locator<Cell*> {
218  public:
219  Locator ( const Cell* );
220  inline Locator ( const Locator& );
221  virtual Cell* getElement () const;
222  virtual Hurricane::Locator<Cell*>* getClone () const;
223  virtual bool isValid () const;
224  virtual void progress ();
225  virtual string _getString () const;
226  protected:
227  Hurricane::Locator<DBo*>* _dboLocator;
228  };
229 
230  public:
231  inline SlavedsSet ( const Cell* cell );
232  inline SlavedsSet ( const SlavedsSet& );
233  virtual Hurricane::Collection<Cell*>* getClone () const;
234  virtual Hurricane::Locator<Cell*>* getLocator () const;
235  virtual string _getString () const;
236  protected:
237  const Cell* _cell;
238  };
239 
240  class InstanceMap : public IntrusiveMap<Name, Instance> {
241  // ****************************************************
242 
243  public: typedef IntrusiveMap<Name, Instance> Inherit;
244 
245  public: InstanceMap();
246 
247  public: virtual Name _getKey(Instance* instance) const;
248  public: virtual unsigned _getHashValue(Name name) const;
249  public: virtual Instance* _getNextElement(Instance* instance) const;
250  public: virtual void _setNextElement(Instance* instance, Instance* nextInstance) const;
251 
252  };
253 
254  public: class SlaveInstanceSet : public IntrusiveSet<Instance> {
255  // ***********************************************************
256 
257  public: typedef IntrusiveSet<Instance> Inherit;
258 
259  public: SlaveInstanceSet();
260 
261  public: virtual unsigned _getHashValue(Instance* slaveInstance) const;
262  public: virtual Instance* _getNextElement(Instance* slaveInstance) const;
263  public: virtual void _setNextElement(Instance* slaveInstance, Instance* nextSlaveInstance) const;
264 
265  };
266 
267  public: class NetMap : public IntrusiveMapConst<Name, Net> {
268  // *********************************************************
269 
270  public: typedef IntrusiveMapConst<Name, Net> Inherit;
271 
272  public: NetMap();
273 
274  public: virtual const Name& _getKey(Net* net) const;
275  public: virtual unsigned _getHashValue(const Name& name) const;
276  public: virtual Net* _getNextElement(Net* net) const;
277  public: virtual void _setNextElement(Net* net, Net* nextNet) const;
278 
279  };
280 
281  class PinMap : public IntrusiveMap<Name, Pin> {
282  // *******************************************
283 
284  public: typedef IntrusiveMap<Name, Pin> Inherit;
285 
286  public: PinMap();
287 
288  public: virtual Name _getKey(Pin* pin) const;
289  public: virtual unsigned _getHashValue(Name name) const;
290  public: virtual Pin* _getNextElement(Pin* pin) const;
291  public: virtual void _setNextElement(Pin* pin, Pin* nextPin) const;
292 
293  };
294 
295  public: class SliceMap : public IntrusiveMap<const Layer*, Slice> {
296  // **************************************************************
297 
298  public: typedef IntrusiveMap<const Layer*, Slice> Inherit;
299 
300  public: SliceMap();
301 
302  public: virtual const Layer* _getKey(Slice* slice) const;
303  public: virtual unsigned _getHashValue(const Layer* layer) const;
304  public: virtual Slice* _getNextElement(Slice* slice) const;
305  public: virtual void _setNextElement(Slice* slice, Slice* nextSlice) const;
306 
307  };
308 
309  public: class MarkerSet : public IntrusiveSet<Marker> {
310  // **************************************************
311 
312  public: typedef IntrusiveSet<Marker> Inherit;
313 
314  public: MarkerSet();
315 
316  public: virtual unsigned _getHashValue(Marker* marker) const;
317  public: virtual Marker* _getNextElement(Marker* marker) const;
318  public: virtual void _setNextElement(Marker* marker, Marker* nextMarker) const;
319 
320  };
321 
322 // Attributes
323 // **********
324 
325  private: Library* _library;
326  private: Name _name;
327  private: Path _shuntedPath;
328  private: InstanceMap _instanceMap;
329  private: QuadTree* _quadTree;
330  private: SlaveInstanceSet _slaveInstanceSet;
331  private: NetMap _netMap;
332  private: PinMap _pinMap;
333  private: SliceMap* _sliceMap;
334  private: ExtensionSliceMap _extensionSlices;
335  private: MarkerSet _markerSet;
336  private: Box _abutmentBox;
337  private: Box _boundingBox;
338  private: Cell* _nextOfLibraryCellMap;
339  private: Cell* _nextOfSymbolCellSet;
340  private: SlaveEntityMap _slaveEntityMap;
341  private: AliasNameSet _netAliasSet;
342  private: Observable _observers;
343  private: Flags _flags;
344 
345 // Constructors
346 // ************
347 
348  protected: Cell(Library* library, const Name& name);
349 
350 // Others
351 // ******
352 
353  protected: virtual void _postCreate();
354 
355  protected: virtual void _preDestroy();
356 
357  public: virtual string _getTypeName() const {return _TName("Cell");};
358  public: virtual string _getString() const;
359  public: virtual Record* _getRecord() const;
360  public: static string getFlagString( uint64_t );
361  public: static Record* getFlagRecord( uint64_t );
362  public: static Slot* getFlagSlot( uint64_t );
363 
364  public: InstanceMap& _getInstanceMap() {return _instanceMap;};
365  public: QuadTree* _getQuadTree() {return _quadTree;};
366  public: SlaveInstanceSet& _getSlaveInstanceSet() {return _slaveInstanceSet;};
367  public: NetMap& _getNetMap() {return _netMap;};
368  public: PinMap& _getPinMap() {return _pinMap;};
369  public: SliceMap* _getSliceMap() {return _sliceMap;};
370  public: ExtensionSliceMap& _getExtensionSliceMap() {return _extensionSlices;};
371  public: MarkerSet& _getMarkerSet() {return _markerSet;};
372  public: Cell* _getNextOfLibraryCellMap() const {return _nextOfLibraryCellMap;};
373  public: Cell* _getNextOfSymbolCellSet() const {return _nextOfSymbolCellSet;};
374  public: AliasNameSet& _getNetAliasSet() { return _netAliasSet; }
375 
376  public: void _setNextOfLibraryCellMap(Cell* cell) {_nextOfLibraryCellMap = cell;};
377  public: void _setNextOfSymbolCellSet(Cell* cell) {_nextOfSymbolCellSet = cell;};
378 
379  public: void _addNetAlias(NetAliasName* alias) { _netAliasSet.insert(alias); }
380  public: void _removeNetAlias(NetAliasName* alias) { _netAliasSet.erase(alias); }
381 
382  public: void _fit(const Box& box);
383  public: void _unfit(const Box& box);
384 
385  public: void _addSlaveEntity(Entity* entity, Entity* slaveEntity);
386  public: void _removeSlaveEntity(Entity* entity, Entity* slaveEntity);
387  public: void _getSlaveEntities(SlaveEntityMap::iterator& begin, SlaveEntityMap::iterator& end);
388  public: void _getSlaveEntities(Entity* entity, SlaveEntityMap::iterator& begin, SlaveEntityMap::iterator& end);
389  public: void _insertSlice(ExtensionSlice*);
390  public: void _removeSlice(ExtensionSlice*);
391  public: void _slaveAbutmentBox(Cell*);
392  public: void _changeQuadTree(Cell*);
393  public: void _setShuntedPath(Path path) { _shuntedPath=path; }
394  protected: void _setAbutmentBox(const Box& abutmentBox);
395 
396  public: virtual void _toJson(JsonWriter*) const;
397  public: virtual void _toJsonCollections(JsonWriter*) const;
398 
399 // Constructors
400 // ************
401 
402  public: static Cell* create(Library* library, const Name& name);
403  public: static Cell* fromJson(const string& filename);
404 
405 // Accessors
406 // *********
407 
408  public: virtual Cell* getCell() const {return (Cell*)this;};
409  public: virtual Box getBoundingBox() const;
410  public: Library* getLibrary() const {return _library;};
411  public: string getHierarchicalName() const;
412  public: const Name& getName() const {return _name;};
413  public: const Flags& getFlags() const { return _flags; }
414  public: Flags& getFlags() { 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 getTerminalNetlistInstances() const;
434  public: Instances getTerminalNetlistInstancesUnder(const Box& area) const;
435  public: Instances getNonTerminalNetlistInstances() const;
436  public: Instances getNonTerminalNetlistInstancesUnder(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;
464  public: Occurrences getTerminalInstanceOccurrencesUnder(const Box& area) const;
465  public: Occurrences getTerminalNetlistInstanceOccurrences( const Instance* topInstance=NULL ) const;
466  public: Occurrences getTerminalNetlistInstanceOccurrencesUnder(const Box& area) const;
467  public: Occurrences getNonTerminalNetlistInstanceOccurrences( const Instance* topInstance=NULL ) 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 _instanceMap.isEmpty();};
487  public: bool isTerminalNetlist() const {return _flags.isset(Flags::TerminalNetlist);};
488  public: bool isUnique() const;
489  public: bool isUniquified() const;
490  public: bool isUniquifyMaster() const;
491  public: bool isPad() const {return _flags.isset(Flags::Pad);};
492  public: bool isFeed() const {return _flags.isset(Flags::Feed);};
493  public: bool isFlattenedNets() const {return _flags.isset(Flags::FlattenedNets);};
494  public: bool isPlaced() const {return _flags.isset(Flags::Placed);};
495  public: bool isRouted() const {return _flags.isset(Flags::Routed);};
496  public: bool isNetAlias(const Name& name) const;
497 
498 // Updators
499 // ********
500 
501  public: void setName(const Name& name);
502  public: void setAbutmentBox(const Box& abutmentBox);
503  public: void slaveAbutmentBox(Cell*);
504  public: void unslaveAbutmentBox(Cell*);
505  public: void setTerminalNetlist(bool isTerminalNetlist) {_flags.set(Flags::TerminalNetlist,isTerminalNetlist);};
506  public: void setPad(bool isPad) {_flags.set(Flags::Pad,isPad);};
507  public: void setFeed(bool isFeed) {_flags.set(Flags::Feed,isFeed);};
508  public: void setRouted(bool isRouted) {_flags.set(Flags::Routed,isRouted);};
509  public: void flattenNets(uint64_t flags=Flags::BuildRings);
510  public: void flattenNets(const Instance* instance, uint64_t flags=Flags::BuildRings);
511  public: void createRoutingPadRings(uint64_t flags=Flags::BuildRings);
512  public: void setFlags(uint64_t flags) { _flags |= flags; }
513  public: void resetFlags(uint64_t flags) { _flags &= ~flags; }
514  public: bool updatePlacedFlag();
515  public: void materialize();
516  public: void unmaterialize();
517  public: Cell* getClone();
518  public: void uniquify(unsigned int depth=std::numeric_limits<unsigned int>::max());
519  public: void addObserver(BaseObserver*);
520  public: void removeObserver(BaseObserver*);
521  public: void notify(unsigned flags);
522 
523 };
524 
525 
526 inline Cell::ClonedSet::Locator::Locator ( const Locator& other )
527  : Hurricane::Locator<Cell*>()
528  , _dboLocator(other._dboLocator)
529 { }
530 
531 inline Cell::ClonedSet::ClonedSet ( const Cell* cell )
532  : Hurricane::Collection<Cell*>()
533  , _cell(cell)
534 { }
535 
536 inline Cell::ClonedSet::ClonedSet ( const ClonedSet& other )
537  : Hurricane::Collection<Cell*>()
538  , _cell(other._cell)
539 { }
540 
541 
542 inline void Cell::UniquifyRelation::_setOwner ( Cell* owner ) { _setMasterOwner(owner); }
543 inline void Cell::UniquifyRelation::_setDuplicates ( unsigned int duplicates ) { _duplicates=duplicates; }
544 
545 
546 inline Cell::SlavedsSet::Locator::Locator ( const Locator& other )
547  : Hurricane::Locator<Cell*>()
548  , _dboLocator(other._dboLocator)
549 { }
550 
551 inline Cell::SlavedsSet::SlavedsSet ( const Cell* cell )
552  : Hurricane::Collection<Cell*>()
553  , _cell(cell)
554 { }
555 
556 inline Cell::SlavedsSet::SlavedsSet ( const SlavedsSet& other )
557  : Hurricane::Collection<Cell*>()
558  , _cell(other._cell)
559 { }
560 
561 
562 inline void Cell::SlavedsRelation::_setOwner ( Cell* owner ) { _setMasterOwner(owner); }
563 
564 
565 class JsonCell : public JsonEntity {
566 // *********************************
567 
568  public: static void initialize();
569  public: JsonCell(unsigned long flags);
570  public: virtual ~JsonCell();
571  public: virtual string getTypeName() const;
572  public: virtual JsonCell* clone(unsigned long) const;
573  public: virtual void toData(JsonStack&);
574  private: Cell* _cell;
575  private: bool _materializationState;
576 };
577 
578 } // End of Hurricane namespace.
579 
580 
581 INSPECTOR_P_SUPPORT(Hurricane::Cell);
582 INSPECTOR_P_SUPPORT(Hurricane::Cell::Flags);
583 INSPECTOR_P_SUPPORT(Hurricane::Cell::InstanceMap);
584 INSPECTOR_P_SUPPORT(Hurricane::Cell::SlaveInstanceSet);
585 INSPECTOR_P_SUPPORT(Hurricane::Cell::NetMap);
586 INSPECTOR_P_SUPPORT(Hurricane::Cell::PinMap);
587 INSPECTOR_P_SUPPORT(Hurricane::Cell::SliceMap);
588 INSPECTOR_P_SUPPORT(Hurricane::Cell::MarkerSet);
589 INSPECTOR_PR_SUPPORT(Hurricane::Cell::SlavedsRelation);
590 
591 
592 #endif // HURRICANE_CELL_H
593 
594 
595 // ****************************************************************************************************
596 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
597 // ****************************************************************************************************
bool isTerminalNetlist() const
Definition: Cell.h:487
Path description (API)
Definition: Path.h:37
Collection description (API)
Definition: Collection.h:39
Pad description (API)
Definition: Pad.h:36
@@ -52,16 +52,16 @@ $(function() {
Nets getClockNets() const
GenericCollection< Go * > Gos
Definition: Gos.h:27
void unmaterialize()
-
const Box & getAbutmentBox() const
Definition: Cell.h:479
+
const Box & getAbutmentBox() const
Definition: Cell.h:480
Net * getNet(const Name &name) const
Pin description (API)
Definition: Pin.h:34
Instances getSlaveInstances() const
-
void setTerminalNetlist(bool isTerminalNetlist)
Definition: Cell.h:504
+
void setTerminalNetlist(bool isTerminalNetlist)
Definition: Cell.h:505
Relation description (API)
Definition: Relation.h:33
Components getComponentsUnder(const Box &area, const Layer::Mask &mask=~0) const
Support for JSON export.
Definition: JsonObject.h:83
-
Name description (API)
Definition: Name.h:36
+
Name description (API)
Definition: Name.h:35
Instances getInstancesUnder(const Box &area) const
Slices getSlices(const Layer::Mask &mask=~0) const
void uniquify(unsigned int depth=std::numeric_limits< unsigned int >::max())
@@ -72,7 +72,7 @@ $(function() {
DataBase object root class (API).
Definition: DBo.h:47
Hurricane::Mask< unsigned long long > Mask
Definition: Layer.h:65
Nets getExternalNets() const
-
Nets getNets() const
Definition: Cell.h:438
+
Nets getNets() const
Definition: Cell.h:439
Library * getLibrary() const
Definition: Cell.h:410
Cell * getClone()
Generic Collection auto-pointer.
Definition: Collection.h:28
@@ -92,12 +92,12 @@ $(function() {
Layer description (API)
Definition: Layer.h:52
bool isCalledBy(Cell *cell) const
Rubbers getRubbersUnder(const Box &area) const
-
Slice * getSlice(const Layer *layer) const
Definition: Cell.h:448
+
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)
-
Instance * getInstance(const Name &name) const
Definition: Cell.h:416
+
Instance * getInstance(const Name &name) const
Definition: Cell.h:417
Occurrences getTerminalInstanceOccurrences() const
The namespace dedicated to Hurricane.
Definition: Generalities.dox:5
Occurrences getNonTerminalNetlistInstanceOccurrences(const Instance *topInstance=NULL) const
@@ -105,10 +105,10 @@ $(function() {
GenericCollection< Component * > Components
Definition: Components.h:27
Net description (API)
Definition: Net.h:48
GenericCollection< Occurrence > Occurrences
Definition: Occurrences.h:40
-
Instances getInstances() const
Definition: Cell.h:417
+
Instances getInstances() const
Definition: Cell.h:418
Nets getGlobalNets() const
bool isUniquifyMaster() const
-
bool isTerminal() const
Definition: Cell.h:485
+
bool isTerminal() const
Definition: Cell.h:486
Occurrences getTerminalNetlistInstanceOccurrences(const Instance *topInstance=NULL) const
bool isUniquified() const
@@ -116,7 +116,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 473fbfa8..4b7224cb 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 2437de71..babe1440 100644 --- a/hurricane/doc/hurricane/html/Collection_8h_source.html +++ b/hurricane/doc/hurricane/html/Collection_8h_source.html @@ -70,13 +70,13 @@ $(function() {
The namespace dedicated to Hurricane.
Definition: Generalities.dox:5
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:999
+
bool enabled() const
Definition: Commons.h:1047


- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 d0b821b8..479efa6a 100644 --- a/hurricane/doc/hurricane/html/Commons_8h_source.html +++ b/hurricane/doc/hurricane/html/Commons_8h_source.html @@ -44,26 +44,26 @@ $(function() {
Commons.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/Commons.h" |
29 // +-----------------------------------------------------------------+
30 
31 
32 #ifndef HURRICANE_COMMONS_H
33 #define HURRICANE_COMMONS_H
34 
35 #include <cstdio>
36 #include <cassert>
37 #include <cmath>
38 #include <memory>
39 #include <string>
40 #include <list>
41 #include <set>
42 #include <map>
43 #include <stack>
44 #include <array>
45 #include <vector>
46 #include <iostream>
47 #include <iomanip>
48 #include <fstream>
49 #include <sstream>
50 
51 
52 // +-----------------------------------------------------------------+
53 // | Macros Definition |
54 // +-----------------------------------------------------------------+
55 
56 
57 namespace Hurricane {
58 
59  using namespace std;
60 
61  class Slot;
62 
63 
64  // +-------------------------------------------------------------+
65  // | shared_ptr<> support for DBo |
66  // +-------------------------------------------------------------+
67 
68 
69  template<typename DboType>
70  class DboDestroy {
71  public:
72  inline void operator() ( DboType* dbo ) { dbo->destroy(); }
73  };
74 
75 
76  template<typename DboType>
77  class dbo_ptr : public std::shared_ptr<DboType> {
78  public:
79  dbo_ptr ( DboType* dbo ) : std::shared_ptr<DboType>(dbo,DboDestroy<DboType>()) { }
80  };
81 
82 
83 
84 
85  // +-------------------------------------------------------------+
86  // | Miscellaneous Utilites |
87  // +-------------------------------------------------------------+
88 
89 
90  inline string _TName ( const string& s ) { return s; }
91  inline string _PName ( const string& s ) { return "Hurricane::" + s; }
92 
93  template<class Type>
94  inline Type abs ( const Type& value ) { return (value<0) ? -value : value; }
95 
96  string demangle ( const char* symbol );
97  inline string demangle ( string symbol ) { return demangle(symbol.c_str()); }
98  inline string demangle ( const type_info& info ) { return demangle(info.name()); }
99 
100  template<typename Element>
101  inline void erase_element ( vector<Element*>& v, const Element* e )
102  {
103  for ( auto ielement = v.begin() ; ielement != v.end() ; ++ielement )
104  if (*ielement == e) { v.erase( ielement ); return; }
105  }
106 
107 
108 #if DEPRECATED
109 // For a complete explanation of this function, please look at :
110 // http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm
111 
112  inline int floatCompare ( float a, float b )
113  {
114  assert ( sizeof(float) == sizeof(int) );
115 
116  if ( a == b ) return 0;
117  return *(int*)&a - *(int*)&b;
118  }
119 
120  inline int floatDifference ( float a, float b, int threshold )
121  {
122  int difference = floatCompare(a,b);
123  if ( abs(difference) < threshold ) return 0;
124 
125  return (difference<0) ? -1 : 1;
126  }
127 
128 
129  inline void floatRound ( float& value, float precision )
130  {
131  float rounded = roundf ( value*precision );
132  value = rounded / precision;
133  }
134 #endif
135 
136  inline float roundfp ( float value, float precision=100.0 ) { return roundf(value*precision)/precision; }
137 
138 
139  template<typename Type> inline void order ( Type& a, Type& b ) { if (a>b) std::swap(a,b); }
140 
141  template<typename Type> inline Type setInBound ( Type lower, Type upper, Type& value )
142  {
143  if (value < lower) value = lower;
144  else if (value > upper) value = upper;
145  return value;
146  }
147 
148 
149 } // End of Hurricane namespace.
150 
151 
152 #include "hurricane/Record.h"
153 
154 
155 // +-----------------------------------------------------------------+
156 // | Functions for Inspector Support |
157 // +-----------------------------------------------------------------+
158 
159 // Note 1: Theses are specialized templates for "getString<>()" & "getRecord<>()".
160 // Note 2: we are outside the Hurricane namespace.
161 // Note 3: thoses templates manage all POD & STL types.
162 
163 
164 // Forward declaration of "getSlot<>()" template.
165 
166 template<typename Data> inline Hurricane::Slot* getSlot ( std::string name, Data );
167 template<typename Data> inline Hurricane::Slot* getSlot ( std::string name, Data* );
168 
169 
170 // -------------------------------------------------------------------
171 // Inspector Support for : "POD types".
172 
173 // Default match.
174 
175 template<typename Data> inline std::string getString ( Data data )
176 { return std::string("<type ")
177  + Hurricane::demangle(typeid(data).name())
178  + std::string(" unsupported by getString()>"); }
179 
180 // "const &" flavors.
181 
182 template<> inline std::string getString<const bool> ( const bool b )
183 { return (b)?"True":"False" ; }
184 
185 template<> inline std::string getString<const int> ( const int i )
186 { std::ostringstream os (""); os << i; return os.str(); }
187 
188 template<> inline std::string getString<const long> ( const long l )
189 { std::ostringstream os (""); os << l; return os.str(); }
190 
191 template<> inline std::string getString<const unsigned int> ( const unsigned int u )
192 { std::ostringstream os (""); os << u; return os.str(); }
193 
194 template<> inline std::string getString<const unsigned long> ( const unsigned long ul )
195 { std::ostringstream os (""); os << ul; return os.str(); }
196 
197 template<> inline std::string getString<const unsigned long long> ( const unsigned long long ull )
198 { std::ostringstream os (""); os << ull; return os.str(); }
199 
200 template<> inline std::string getString<const unsigned short int> ( const unsigned short int us )
201 { std::ostringstream os (""); os << us; return os.str(); }
202 
203 template<> inline std::string getString<const float> ( const float f )
204 { std::ostringstream os (""); os << f; return os.str(); }
205 
206 template<> inline std::string getString<const double> ( const double d )
207 { std::ostringstream os; os << d; return os.str(); }
208 
209 template<> inline std::string getString<const std::string> ( const std::string s )
210 { return s; }
211 
212 // "const *" flavors.
213 
214 template<> inline std::string getString<const bool*> ( const bool* b )
215 { return (*b)?"True":"False" ; }
216 
217 template<> inline std::string getString<const char*> ( const char* c )
218 { return c; }
219 
220 template<> inline std::string getString<const int*> ( const int* i )
221 { std::ostringstream os (""); os << *i; return os.str(); }
222 
223 template<> inline std::string getString<const long*> ( const long* l )
224 { std::ostringstream os (""); os << *l; return os.str(); }
225 
226 template<> inline std::string getString<const unsigned int*> ( const unsigned int* u )
227 { std::ostringstream os (""); os << *u; return os.str(); }
228 
229 template<> inline std::string getString<const unsigned long*> ( const unsigned long* ul )
230 { std::ostringstream os (""); os << *ul; return os.str(); }
231 
232 template<> inline std::string getString<const unsigned long long*> ( const unsigned long long* ull )
233 { std::ostringstream os (""); os << *ull; return os.str(); }
234 
235 template<> inline std::string getString<const unsigned short int*> ( const unsigned short int* us )
236 { std::ostringstream os (""); os << *us; return os.str(); }
237 
238 template<> inline std::string getString<const float*> ( const float* f )
239 { std::ostringstream os (""); os << *f; return os.str(); }
240 
241 template<> inline std::string getString<const double*> ( const double* d )
242 { std::ostringstream os; os << *d; return os.str(); }
243 
244 template<> inline std::string getString<const void*> ( const void* p )
245 { std::ostringstream os ("0x"); os << std::hex << p; return os.str(); }
246 
247 template<> inline std::string getString<const std::string*> ( const std::string* s )
248 { return *s; }
249 
250 
251 // "*" flavors.
252 
253 template<> inline std::string getString<bool*> ( bool* b )
254 { return (*b)?"True":"False" ; }
255 
256 template<> inline std::string getString<char*> ( char* c )
257 { return c; }
258 
259 template<> inline std::string getString<int*> ( int* i )
260 { std::ostringstream os (""); os << *i; return os.str(); }
261 
262 template<> inline std::string getString<long*> ( long* l )
263 { std::ostringstream os (""); os << *l; return os.str(); }
264 
265 template<> inline std::string getString<unsigned int*> ( unsigned int* u )
266 { std::ostringstream os (""); os << *u; return os.str(); }
267 
268 template<> inline std::string getString<unsigned long*> ( unsigned long* ul )
269 { std::ostringstream os (""); os << *ul; return os.str(); }
270 
271 template<> inline std::string getString<unsigned long long*> ( unsigned long long* ull )
272 { std::ostringstream os (""); os << *ull; return os.str(); }
273 
274 template<> inline std::string getString<unsigned short int*> ( unsigned short int* us )
275 { std::ostringstream os (""); os << *us; return os.str(); }
276 
277 template<> inline std::string getString<float*> ( float* f )
278 { std::ostringstream os (""); os << *f; return os.str(); }
279 
280 template<> inline std::string getString<double*> ( double* d )
281 { std::ostringstream os; os << *d; return os.str(); }
282 
283 template<> inline std::string getString<void*> ( void* p )
284 { std::ostringstream os ("0x"); os << std::hex << p; return os.str(); }
285 
286 template<> inline std::string getString<std::string*> ( std::string* s )
287 { return *s; }
288 
289 
290 // "by value" flavors.
291 
292 template<> inline std::string getString<bool> ( bool b )
293 { return (b)?"True":"False" ; }
294 
295 template<> inline std::string getString<char> ( char c )
296 { return std::string(1,c); }
297 
298 template<> inline std::string getString<int> ( int i )
299 { std::ostringstream os (""); os << i; return os.str(); }
300 
301 template<> inline std::string getString<long> ( long l )
302 { std::ostringstream os (""); os << l; return os.str(); }
303 
304 template<> inline std::string getString<unsigned int> ( unsigned int u )
305 { std::ostringstream os (""); os << u; return os.str(); }
306 
307 template<> inline std::string getString<unsigned long> ( unsigned long ul )
308 { std::ostringstream os (""); os << ul; return os.str(); }
309 
310 template<> inline std::string getString<unsigned long long> ( unsigned long long ull )
311 { std::ostringstream os (""); os << ull; return os.str(); }
312 
313 template<> inline std::string getString<unsigned short int> ( unsigned short int us )
314 { std::ostringstream os (""); os << us; return os.str(); }
315 
316 template<> inline std::string getString<float> ( float f )
317 { std::ostringstream os (""); os << f; return os.str(); }
318 
319 template<> inline std::string getString<double> ( double d )
320 { std::ostringstream os; os << d; return os.str(); }
321 
322 template<> inline std::string getString<std::string> ( std::string s )
323 { return s; }
324 
325 
326 template<typename Data> inline Hurricane::Record* getRecord ( Data data )
327 { return NULL; }
328 
329 
330 // -------------------------------------------------------------------
331 // Inspector Support for : "[const] std::pair<T,U>&".
332 
333 template<typename T, typename U>
334 inline std::string getString ( const std::pair<T,U>& p )
335 {
336  return "const std::pair<T,U>";
337 }
338 
339 
340 template<typename T, typename U>
341 inline Hurricane::Record* getRecord ( const std::pair<T,U>& p )
342 {
343  Hurricane::Record* record = NULL;
344  record = new Hurricane::Record ( "const std::pair<T,U>" );
345  record->add( getSlot<const T>(std::string("first" ), &p.first ) );
346  record->add( getSlot<const U>(std::string("second"), &p.second) );
347  return record;
348 }
349 
350 
351 template<typename T, typename U>
352 inline std::string getString ( std::pair<T,U>& p )
353 {
354  return "std::pair<T,U>";
355 }
356 
357 
358 template<typename T, typename U>
359 inline Hurricane::Record* getRecord ( std::pair<T,U>& p )
360 {
361  Hurricane::Record* record = NULL;
362  record = new Hurricane::Record ( "std::pair<T,U>" );
363  record->add( getSlot<T>(std::string("first" ), &p.first ) );
364  record->add( getSlot<U>(std::string("second"), &p.second) );
365  return record;
366 }
367 
368 
369 // -------------------------------------------------------------------
370 // Inspector Support for : "[const] std::array<Element>*".
371 
372 
373 template<typename Element,size_t N>
374 inline std::string getString ( std::array<Element,N>* v )
375 {
376  std::string name = "const std::array<Element,N>:";
377  return name + getString<size_t>(v->size());
378 }
379 
380 
381 template<typename Element,size_t N>
382 inline Hurricane::Record* getRecord ( std::array<Element,N>* v )
383 {
384  Hurricane::Record* record = NULL;
385  if ( !v->empty() ) {
386  record = new Hurricane::Record ( "std::array<Element,N>" );
387  unsigned n = 0;
388  typename std::array<Element,N>::iterator iterator = v->begin();
389  while ( iterator != v->end() ) {
390  record->add ( getSlot<Element>(getString(n++), *iterator) );
391  ++iterator;
392  }
393  }
394  return record;
395 }
396 
397 
398 template<typename Element,size_t N>
399 inline std::string getString ( const std::array<Element,N>* v )
400 {
401  std::string name = "const std::array<Element,N>:";
402  return name + getString<size_t>(v->size());
403 }
404 
405 
406 template<typename Element,size_t N>
407 inline Hurricane::Record* getRecord ( const std::array<Element,N>* v )
408 {
409  Hurricane::Record* record = NULL;
410  if ( !v->empty() ) {
411  record = new Hurricane::Record ( "const std::array<Element,N>" );
412  unsigned n = 0;
413  typename std::array<Element,N>::const_iterator iterator = v->begin();
414  while ( iterator != v->end() ) {
415  record->add ( getSlot<const Element>(getString(n++), *iterator) );
416  ++iterator;
417  }
418  }
419  return record;
420 }
421 
422 
423 template<typename Element,size_t N>
424 inline std::string getString ( std::array<Element,N>& v )
425 {
426  std::string name = "std::array<Element,N>&:";
427  return name + getString<size_t>(v.size());
428 }
429 
430 
431 template<typename Element,size_t N>
432 inline Hurricane::Record* getRecord ( std::array<Element,N>& v )
433 {
434  Hurricane::Record* record = NULL;
435  if (not v.empty()) {
436  record = new Hurricane::Record ( "std::array<Element,N>&" );
437  unsigned n = 0;
438  for ( auto element : v )
439  record->add( getSlot<Element>(getString(n++), element) );
440  }
441  return record;
442 }
443 
444 
445 template<typename Element,size_t N>
446 inline std::string getString ( const std::array<Element,N>& v )
447 {
448  std::string name = "const std::array<Element,N>&:";
449  return name + getString<size_t>(v.size());
450 }
451 
452 
453 template<typename Element,size_t N>
454 inline Hurricane::Record* getRecord ( const std::array<Element,N>& v )
455 {
456  Hurricane::Record* record = NULL;
457  if (not v.empty()) {
458  record = new Hurricane::Record ( "const std::array<Element,N>&" );
459  unsigned n = 0;
460  for ( auto element : v )
461  record->add( getSlot<Element>(getString(n++), element) );
462  }
463  return record;
464 }
465 
466 
467 // -------------------------------------------------------------------
468 // Inspector Support for : "[const] std::vector<Element>*".
469 
470 
471 template<typename Element>
472 inline std::string getString ( std::vector<Element>* v )
473 {
474  std::string name = "const std::vector<Element>:";
475  return name + getString<size_t>(v->size());
476 }
477 
478 
479 template<typename Element>
480 inline Hurricane::Record* getRecord ( std::vector<Element>* v )
481 {
482  Hurricane::Record* record = NULL;
483  if ( !v->empty() ) {
484  record = new Hurricane::Record ( "std::vector<Element>" );
485  unsigned n = 0;
486  typename std::vector<Element>::iterator iterator = v->begin();
487  while ( iterator != v->end() ) {
488  record->add ( getSlot<Element>(getString(n++), *iterator) );
489  ++iterator;
490  }
491  }
492  return record;
493 }
494 
495 
496 template<typename Element>
497 inline std::string getString ( const std::vector<Element>* v )
498 {
499  std::string name = "const std::vector<Element>:";
500  return name + getString<size_t>(v->size());
501 }
502 
503 
504 template<typename Element>
505 inline Hurricane::Record* getRecord ( const std::vector<Element>* v )
506 {
507  Hurricane::Record* record = NULL;
508  if ( !v->empty() ) {
509  record = new Hurricane::Record ( "const std::vector<Element>" );
510  unsigned n = 0;
511  typename std::vector<Element>::const_iterator iterator = v->begin();
512  while ( iterator != v->end() ) {
513  record->add ( getSlot<const Element>(getString(n++), *iterator) );
514  ++iterator;
515  }
516  }
517  return record;
518 }
519 
520 
521 // -------------------------------------------------------------------
522 // Inspector Support for : "const std::list<Element>*".
523 
524 
525 template<typename Element>
526 inline std::string getString ( const std::list<Element>* l )
527 {
528  std::string name = "const std::list<Element>:";
529  return name + getString<size_t>(l->size());
530 }
531 
532 
533 template<typename Element>
534 inline Hurricane::Record* getRecord ( const std::list<Element>* l )
535 {
536  Hurricane::Record* record = NULL;
537  if ( !l->empty() ) {
538  record = new Hurricane::Record ( "const std::list<Element>" );
539  unsigned n = 1;
540  typename std::list<Element>::const_iterator iterator = l->begin();
541  while ( iterator != l->end() ) {
542  record->add ( getSlot<const Element>(getString(n++), *iterator) );
543  ++iterator;
544  }
545  }
546  return record;
547 }
548 
549 
550 template<typename Element>
551 inline std::string getString ( std::list<Element>* l )
552 {
553  std::string name = "std::list<Element>:";
554  return name + getString<size_t>(l->size());
555 }
556 
557 
558 template<typename Element>
559 inline Hurricane::Record* getRecord ( std::list<Element>* l )
560 {
561  Hurricane::Record* record = NULL;
562  if ( !l->empty() ) {
563  record = new Hurricane::Record ( "std::list<Element>" );
564  unsigned n = 1;
565  typename std::list<Element>::iterator iterator = l->begin();
566  while ( iterator != l->end() ) {
567  record->add ( getSlot<Element>(getString(n++), *iterator) );
568  ++iterator;
569  }
570  }
571  return record;
572 }
573 
574 
575 // -------------------------------------------------------------------
576 // Inspector Support for : "[const] std::map<Key,Element,Compare>*.
577 
578 
579 template<typename Key, typename Element>
580 inline std::string getString ( std::map<Key,Element>* m )
581 {
582  std::string name = "std::map<Element>:";
583  return name + getString<size_t>(m->size());
584 }
585 
586 
587 template<typename Key, typename Element>
588 inline Hurricane::Record* getRecord ( std::map<Key,Element>* m )
589 {
590  Hurricane::Record* record = NULL;
591  if ( !m->empty() ) {
592  record = new Hurricane::Record ( "std::map<Element>" );
593  typename std::map<Key,Element>::iterator iterator = m->begin();
594  while ( iterator != m->end() ) {
595  record->add ( getSlot<Element>(getString(iterator->first), iterator->second) );
596  ++iterator;
597  }
598  }
599  return record;
600 }
601 
602 
603 template<typename Key, typename Element>
604 inline std::string getString ( const std::map<Key,Element>* m )
605 {
606  std::string name = "const std::map<Element>:";
607  return name + getString<size_t>(m->size());
608 }
609 
610 
611 template<typename Key, typename Element>
612 inline Hurricane::Record* getRecord ( const std::map<Key,Element>* m )
613 {
614  Hurricane::Record* record = NULL;
615  if ( !m->empty() ) {
616  record = new Hurricane::Record ( "const std::map<Element>" );
617  typename std::map<Key,Element>::const_iterator iterator = m->begin();
618  while ( iterator != m->end() ) {
619  record->add ( getSlot<const Element>(getString(iterator->first), iterator->second) );
620  ++iterator;
621  }
622  }
623  return record;
624 }
625 
626 
627 // -------------------------------------------------------------------
628 // Inspector Support for : "[const] std::map<Key,Element,Compare>*.
629 
630 
631 template<typename Key, typename Element, typename Compare>
632 inline std::string getString ( std::map<Key,Element,Compare>* m )
633 {
634  std::string name = "std::map<Element>:";
635  return name + getString<size_t>(m->size());
636 }
637 
638 
639 template<typename Key, typename Element, typename Compare>
640 inline Hurricane::Record* getRecord ( std::map<Key,Element,Compare>* m )
641 {
642  Hurricane::Record* record = NULL;
643  if ( !m->empty() ) {
644  record = new Hurricane::Record ( "std::map<Element>" );
645  typename std::map<Key,Element,Compare>::iterator iterator = m->begin();
646  while ( iterator != m->end() ) {
647  record->add ( getSlot<Element>(getString(iterator->first), iterator->second) );
648  ++iterator;
649  }
650  }
651  return record;
652 }
653 
654 
655 template<typename Key, typename Element, typename Compare>
656 inline std::string getString ( const std::map<Key,Element,Compare>* m )
657 {
658  std::string name = "const std::map<Element>:";
659  return name + getString<size_t>(m->size());
660 }
661 
662 
663 template<typename Key, typename Element, typename Compare>
664 inline Hurricane::Record* getRecord ( const std::map<Key,Element,Compare>* m )
665 {
666  Hurricane::Record* record = NULL;
667  if ( !m->empty() ) {
668  record = new Hurricane::Record ( "const std::map<Element>" );
669  typename std::map<Key,Element,Compare>::const_iterator iterator = m->begin();
670  while ( iterator != m->end() ) {
671  record->add ( getSlot<const Element>(getString(iterator->first), iterator->second) );
672  ++iterator;
673  }
674  }
675  return record;
676 }
677 
678 
679 // -------------------------------------------------------------------
680 // Inspector Support for : "const std::multimap<Key,Element,Compare>*".
681 
682 
683 template<typename Key, typename Element, typename Compare>
684 inline std::string getString ( const std::multimap<Key,Element,Compare>* m )
685 {
686  std::string name = "const std::multimap<Element>:";
687  return name + getString<size_t>(m->size());
688 }
689 
690 
691 template<typename Key, typename Element, typename Compare>
692 inline Hurricane::Record* getRecord ( const std::multimap<Key,Element,Compare>* m )
693 {
694  Hurricane::Record* record = NULL;
695  if ( !m->empty() ) {
696  record = new Hurricane::Record ( "const std::multimap<Element>" );
697  typename std::multimap<Key,Element,Compare>::const_iterator iterator = m->begin();
698  while ( iterator != m->end() ) {
699  record->add ( getSlot<const Element>(getString(iterator->first), iterator->second) );
700  ++iterator;
701  }
702  }
703  return record;
704 }
705 
706 
707 template<typename Key, typename Element, typename Compare>
708 inline std::string getString ( std::multimap<Key,Element,Compare>* m )
709 {
710  std::string name = "std::multimap<Element>:";
711  return name + getString<size_t>(m->size());
712 }
713 
714 
715 template<typename Key, typename Element, typename Compare>
716 inline Hurricane::Record* getRecord ( std::multimap<Key,Element,Compare>* m )
717 {
718  Hurricane::Record* record = NULL;
719  if ( !m->empty() ) {
720  record = new Hurricane::Record ( "std::multimap<Element>" );
721  typename std::multimap<Key,Element,Compare>::iterator iterator = m->begin();
722  while ( iterator != m->end() ) {
723  record->add ( getSlot<Element>(getString(iterator->first), iterator->second) );
724  ++iterator;
725  }
726  }
727  return record;
728 }
729 
730 
731 // -------------------------------------------------------------------
732 // Inspector Support for : "[const] std::set<Element,Compare>*".
733 
734 
735 template<typename Element, typename Compare>
736 inline std::string getString ( const std::set<Element,Compare>* s )
737 {
738  std::string name = "const std::set<Element>:";
739  return name + getString<size_t>(s->size());
740 }
741 
742 
743 template<typename Element, typename Compare>
744 inline Hurricane::Record* getRecord ( const std::set<Element,Compare>* s )
745 {
746  Hurricane::Record* record = NULL;
747  if ( !s->empty() ) {
748  record = new Hurricane::Record ( "const std::set<Element>" );
749  unsigned n = 1;
750  typename std::set<Element,Compare>::const_iterator iterator = s->begin();
751  while ( iterator != s->end() ) {
752  record->add ( getSlot<const Element>(getString(n++), *iterator) );
753  ++iterator;
754  }
755  }
756  return record;
757 }
758 
759 
760 template< typename Element, typename Compare, typename Allocator >
761 inline std::string getString ( std::set<Element,Compare,Allocator>* s )
762 {
763  std::string name = "std::set<Element>:";
764  return name + getString<size_t>(s->size());
765 }
766 
767 
768 template< typename Element, typename Compare, typename Allocator >
769 inline Hurricane::Record* getRecord ( std::set<Element,Compare,Allocator>* s )
770 {
771  Hurricane::Record* record = NULL;
772  if ( !s->empty() ) {
773  record = new Hurricane::Record ( "std::set<Element>" );
774  unsigned n = 1;
775  typename std::set<Element,Compare,Allocator>::iterator iterator = s->begin();
776  while ( iterator != s->end() ) {
777  record->add ( getSlot<Element>(getString(n++), *iterator) );
778  ++iterator;
779  }
780  }
781  return record;
782 }
783 
784 // -------------------------------------------------------------------
785 // Inspector Support for : "[const] std::set<Element,Compare>&".
786 
787 
788 template<typename Element, typename Compare>
789 inline std::string getString ( const std::set<Element,Compare>& s )
790 {
791  std::string name = "const std::set<Element>:";
792  return name + getString<size_t>(s.size());
793 }
794 
795 
796 template<typename Element, typename Compare>
797 inline Hurricane::Record* getRecord ( const std::set<Element,Compare>& s )
798 {
799  Hurricane::Record* record = NULL;
800  if ( !s.empty() ) {
801  record = new Hurricane::Record ( "const std::set<Element>" );
802  unsigned n = 1;
803  typename std::set<Element,Compare>::const_iterator iterator = s.begin();
804  while ( iterator != s.end() ) {
805  record->add ( getSlot<Element>(getString(n++), *iterator) );
806  ++iterator;
807  }
808  }
809  return record;
810 }
811 
812 // -------------------------------------------------------------------
813 // Inspector Support for : "const std::multiset<Element,Compare>*".
814 
815 
816 template<typename Element, typename Compare>
817 inline std::string getString ( const std::multiset<Element,Compare>* s )
818 {
819  std::string name = "std::multiset<Element>:";
820  return name + getString<size_t>(s->size());
821 }
822 
823 
824 template<typename Element, typename Compare>
825 inline Hurricane::Record* getRecord ( const std::multiset<Element,Compare>* s )
826 {
827  Hurricane::Record* record = NULL;
828  if ( !s->empty() ) {
829  record = new Hurricane::Record ( "std::multiset<Element>" );
830  unsigned n = 1;
831  typename std::multiset<Element,Compare>::const_iterator iterator = s->begin();
832  while ( iterator != s->end() ) {
833  record->add ( getSlot<Element>(getString(n++), *iterator) );
834  ++iterator;
835  }
836  }
837  return record;
838 }
839 
840 
841 # define GETSTRING_POINTER_SUPPORT(Data) \
842  template<> inline std::string getString<Data*>( Data* data ) \
843  { \
844  if (!data) return "NULL [" #Data "]"; \
845  return data->_getString(); \
846  } \
847  \
848  template<> inline std::string getString<const Data*>( const Data* data ) \
849  { if (!data) return "NULL [const " #Data "]"; return data->_getString(); }
850 
851 
852 # define IOSTREAM_POINTER_SUPPORT(Data) \
853  inline std::ostream& operator<< ( std::ostream& o, Data* d ) \
854  { \
855  if (!d) return o << "NULL [" #Data "]"; \
856  return o << "&" << getString<const Data*>(d); \
857  } \
858  inline std::ostream& operator<< ( std::ostream& o, const Data* d ) \
859  { \
860  if (!d) return o << "NULL [const " #Data "]"; \
861  return o << "&" << getString<const Data*>(d); \
862  } \
863 
864 
865 # define GETRECORD_POINTER_SUPPORT(Data) \
866  template<> inline Hurricane::Record* getRecord<Data*>( Data* data ) \
867  { if (!data) return NULL; return data->_getRecord(); } \
868  \
869  template<> inline Hurricane::Record* getRecord<const Data*>( const Data* data ) \
870  { if (!data) return NULL; return data->_getRecord(); }
871 
872 
873 # define GETSTRING_REFERENCE_SUPPORT(Data) \
874  template<> inline std::string getString<Data&>( Data& data ) \
875  { return data._getString(); } \
876  \
877  template<> inline std::string getString<const Data&>( const Data& data ) \
878  { return data._getString(); }
879 
880 
881 # define IOSTREAM_REFERENCE_SUPPORT(Data) \
882  inline std::ostream& operator<< ( std::ostream& o, Data& d ) \
883  { return o << getString<Data&>(d); } \
884  \
885  inline std::ostream& operator<< ( std::ostream& o, const Data& d ) \
886  { return o << getString<const Data&>(d); } \
887  \
888 
889 # define GETRECORD_REFERENCE_SUPPORT(Data) \
890  template<> inline Hurricane::Record* getRecord<Data&>( Data& data ) \
891  { return data._getRecord(); } \
892  \
893  template<> inline Hurricane::Record* getRecord<const Data&>( const Data& data ) \
894  { return data._getRecord(); }
895 
896 
897 # define GETSTRING_VALUE_SUPPORT(Data) \
898  template<> inline std::string getString<Data>( Data data ) \
899  { return data._getString(); }
900 
901 
902 # define IOSTREAM_VALUE_SUPPORT(Data) \
903  inline std::ostream& operator<< ( std::ostream& o, Data d ) \
904  { return o << getString<Data>(d); }
905 
906 
907 # define GETRECORD_VALUE_SUPPORT(Data) \
908  template<> inline Hurricane::Record* getRecord<Data>( Data data ) \
909  { return data._getRecord(); }
910 
911 
912 # define INSPECTOR_P_SUPPORT(Data) \
913  GETRECORD_POINTER_SUPPORT(Data) \
914  GETSTRING_POINTER_SUPPORT(Data) \
915  IOSTREAM_POINTER_SUPPORT(Data)
916 
917 
918 # define INSPECTOR_R_SUPPORT(Data) \
919  GETRECORD_REFERENCE_SUPPORT(Data) \
920  GETSTRING_REFERENCE_SUPPORT(Data) \
921  IOSTREAM_REFERENCE_SUPPORT(Data)
922 
923 
924 # define INSPECTOR_V_SUPPORT(Data) \
925  GETRECORD_VALUE_SUPPORT(Data) \
926  GETSTRING_VALUE_SUPPORT(Data) \
927  IOSTREAM_VALUE_SUPPORT(Data)
928 
929 
930 # define INSPECTOR_PR_SUPPORT(Data) \
931  GETRECORD_POINTER_SUPPORT(Data) \
932  GETSTRING_POINTER_SUPPORT(Data) \
933  GETRECORD_REFERENCE_SUPPORT(Data) \
934  GETSTRING_REFERENCE_SUPPORT(Data) \
935  IOSTREAM_POINTER_SUPPORT(Data) \
936  IOSTREAM_REFERENCE_SUPPORT(Data)
937 
938 
939 # define INSPECTOR_PV_SUPPORT(Data) \
940  GETRECORD_POINTER_SUPPORT(Data) \
941  GETSTRING_POINTER_SUPPORT(Data) \
942  GETRECORD_VALUE_SUPPORT(Data) \
943  GETSTRING_VALUE_SUPPORT(Data) \
944  IOSTREAM_POINTER_SUPPORT(Data) \
945  IOSTREAM_VALUE_SUPPORT(Data)
946 
947 
948 #include "hurricane/Tabulation.h"
949 
950 
951 // -------------------------------------------------------------------
952 // Class : "::cdebug()".
953 //
954 // Wrapper around the STL ostream which to print debugging messages.
955 
956 class tstream : public std::ostream {
957  public:
958  inline int getMinLevel () const;
959  inline int getMaxLevel () const;
960  inline int setMinLevel ( int );
961  inline int setMaxLevel ( int );
962  inline int getLevel () const;
963  inline int setLevel ( int );
964  inline bool enabled () const;
965  inline bool enabled ( int ) const;
966  inline tstream& log ( int level, int count=0 );
967  inline tstream& tabw ( int level, int count );
968  inline tstream ( std::ostream & );
969  inline tstream& put ( char c );
970  inline tstream& flush ();
971  private:
972  inline tstream& _tab ();
973  inline tstream& _tabw ( int count );
974  public:
975  // Overload for manipulators.
976  inline tstream& operator<< ( std::ostream& (*pf)(std::ostream &) );
977  private:
978  int _minLevel;
979  int _maxLevel;
980  int _level;
981  Hurricane::Tabulation _tabulation;
982 };
983 
984 
985 inline tstream::tstream ( std::ostream& s )
986  : std::ostream(s.rdbuf())
987  , _minLevel (100000)
988  , _maxLevel (0)
989  , _level (0)
990  , _tabulation(" ")
991 { }
992 
993 inline int tstream::getMinLevel () const { return _minLevel; }
994 inline int tstream::getMaxLevel () const { return _maxLevel; }
995 inline int tstream::setMinLevel ( int l ) { int pl=_minLevel; _minLevel=l; return pl; }
996 inline int tstream::setMaxLevel ( int l ) { int pl=_maxLevel; _maxLevel=l; return pl; }
997 inline int tstream::getLevel () const { return _level; }
998 inline int tstream::setLevel ( int l ) { int pl=_level; _level=l; return pl; }
999 inline bool tstream::enabled () const { return (_level >= _minLevel) and (_level < _maxLevel); }
1000 inline bool tstream::enabled ( int l ) const { return (l >= _minLevel) and (l < _maxLevel); }
1001 inline tstream& tstream::tabw ( int level, int count ) { setLevel(level); return _tabw(count); }
1002 inline tstream& tstream::put ( char c ) { if (enabled()) static_cast<std::ostream*>(this)->put(c); return *this; }
1003 inline tstream& tstream::flush () { if (enabled()) static_cast<std::ostream*>(this)->flush(); return *this; }
1004 inline tstream& tstream::operator<< ( std::ostream& (*pf)(std::ostream&) ) { if (enabled()) (*pf)(*this); return *this; }
1005 
1006 
1007 inline tstream& tstream::_tab () { if (enabled()) (*this) << _tabulation; return *this; }
1008 inline tstream& tstream::_tabw ( int count )
1009 {
1010  if (enabled()) {
1011  if (count > 0) while(count--) _tabulation++;
1012  else if (count < 0) while(count++) _tabulation--;
1013  }
1014  return *this;
1015 }
1016 
1017 inline tstream& tstream::log ( int level, int count )
1018 { setLevel(level); _tab(); return _tabw(count); }
1019 
1020 // For STL Types.
1021 inline tstream& operator<< ( tstream& o, const std::string s )
1022 { if (o.enabled()) { static_cast<std::ostream&>(o) << s; } return o; };
1023 
1024 // For POD Types.
1025 // template<typename T>
1026 // inline tstream& operator<< ( tstream& o, T& t )
1027 // { if (o.enabled()) { static_cast<std::ostream&>(o) << getString<T&>(t); } return o; };
1028 
1029 template<typename T>
1030 inline tstream& operator<< ( tstream& o, T* t )
1031 { if (o.enabled()) { static_cast<std::ostream&>(o) << getString<T*>(t); } return o; };
1032 
1033 // template<typename T>
1034 // inline tstream& operator<< ( tstream& o, const T& t )
1035 // { if (o.enabled()) { static_cast<std::ostream&>(o) << getString<const T&>(t); } return o; };
1036 
1037 template<typename T>
1038 inline tstream& operator<< ( tstream& o, T t )
1039 { if (o.enabled()) { static_cast<std::ostream&>(o) << getString<T>(t); } return o; };
1040 
1041 template<typename T>
1042 inline tstream& operator<< ( tstream& o, const T* t )
1043 { if (o.enabled()) { static_cast<std::ostream&>(o) << getString<const T*>(t); } return o; };
1044 
1045 template<>
1046 inline tstream& operator<< ( tstream& o, std::ios_base& (*pf)(std::ios_base&) )
1047 { if (o.enabled()) { static_cast<std::ostream&>(o) << pf; } return o; };
1048 
1049 struct _Tsetw { int n_; };
1050 inline _Tsetw tsetw ( int n ) { return { n }; }
1051 
1052 struct _Tsetf { int n_; };
1053 inline _Tsetf tsetf ( int n ) { return { n }; }
1054 
1055 template<>
1056 inline tstream& operator<< ( tstream& o, _Tsetw manip )
1057 { if (o.enabled()) { static_cast<std::ostream&>(o) << std::setw(manip.n_); } return o; }
1058 
1059 extern tstream cdebug;
1060 
1061 
1062 #define cdebug_log(level,indent) if (cdebug.enabled(level)) cdebug.log(level,indent)
1063 #define cdebug_tabw(level,indent) cdebug.tabw(level,indent)
1064 
1065 
1066 // x-----------------------------------------------------------------x
1067 // | Classes Neededs in All Hurricane Modules |
1068 // x-----------------------------------------------------------------x
1069 
1070 #include "hurricane/Slot.h"
1071 #include "hurricane/Initializer.h"
1072 #include "hurricane/JsonWriter.h"
1073 #include "hurricane/JsonObject.h"
1074 
1075 
1076 #endif // HURRICANE_COMMONS_H
int getLevel() const
Definition: Commons.h:997
+
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/Commons.h" |
29 // +-----------------------------------------------------------------+
30 
31 
32 #pragma once
33 #define HURRICANE_COMMONS_H
34 
35 #include <cstdio>
36 #include <cassert>
37 #include <cmath>
38 #include <memory>
39 #include <string>
40 #include <list>
41 #include <set>
42 #include <map>
43 #include <stack>
44 #include <array>
45 #include <vector>
46 #include <iostream>
47 #include <iomanip>
48 #include <fstream>
49 #include <sstream>
50 
51 
52 // +-----------------------------------------------------------------+
53 // | Macros Definition |
54 // +-----------------------------------------------------------------+
55 
56 
57 namespace Hurricane {
58 
59  using namespace std;
60 
61  class Slot;
62 
63 
64  // +-------------------------------------------------------------+
65  // | shared_ptr<> support for DBo |
66  // +-------------------------------------------------------------+
67 
68 
69  template<typename DboType>
70  class DboDestroy {
71  public:
72  inline void operator() ( DboType* dbo ) { dbo->destroy(); }
73  };
74 
75 
76  template<typename DboType>
77  class dbo_ptr : public std::shared_ptr<DboType> {
78  public:
79  dbo_ptr ( DboType* dbo ) : std::shared_ptr<DboType>(dbo,DboDestroy<DboType>()) { }
80  };
81 
82 
83 
84 
85  // +-------------------------------------------------------------+
86  // | Miscellaneous Utilites |
87  // +-------------------------------------------------------------+
88 
89 
90  inline string _TName ( const string& s ) { return s; }
91  inline string _PName ( const string& s ) { return "Hurricane::" + s; }
92 
93  template<class Type>
94  inline Type abs ( const Type& value ) { return (value<0) ? -value : value; }
95 
96  string demangle ( const char* symbol );
97  inline string demangle ( string symbol ) { return demangle(symbol.c_str()); }
98  inline string demangle ( const type_info& info ) { return demangle(info.name()); }
99 
100  template<typename Element>
101  inline void erase_element ( vector<Element*>& v, const Element* e )
102  {
103  for ( auto ielement = v.begin() ; ielement != v.end() ; ++ielement )
104  if (*ielement == e) { v.erase( ielement ); return; }
105  }
106 
107 
108 #if DEPRECATED
109 // For a complete explanation of this function, please look at :
110 // http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm
111 
112  inline int floatCompare ( float a, float b )
113  {
114  assert ( sizeof(float) == sizeof(int) );
115 
116  if ( a == b ) return 0;
117  return *(int*)&a - *(int*)&b;
118  }
119 
120  inline int floatDifference ( float a, float b, int threshold )
121  {
122  int difference = floatCompare(a,b);
123  if ( abs(difference) < threshold ) return 0;
124 
125  return (difference<0) ? -1 : 1;
126  }
127 
128 
129  inline void floatRound ( float& value, float precision )
130  {
131  float rounded = roundf ( value*precision );
132  value = rounded / precision;
133  }
134 #endif
135 
136  inline float roundfp ( float value, float precision=100.0 ) { return roundf(value*precision)/precision; }
137 
138 
139  template<typename Type> inline void order ( Type& a, Type& b ) { if (a>b) std::swap(a,b); }
140 
141  template<typename Type> inline Type setInBound ( Type lower, Type upper, Type& value )
142  {
143  if (value < lower) value = lower;
144  else if (value > upper) value = upper;
145  return value;
146  }
147 
148 
149 } // End of Hurricane namespace.
150 
151 
152 #include "hurricane/Record.h"
153 
154 
155 // +-----------------------------------------------------------------+
156 // | Functions for Inspector Support |
157 // +-----------------------------------------------------------------+
158 
159 // Note 1: Theses are specialized templates for "getString<>()" & "getRecord<>()".
160 // Note 2: we are outside the Hurricane namespace.
161 // Note 3: thoses templates manage all POD & STL types.
162 
163 
164 // Forward declaration of "getSlot<>()" template.
165 
166 template<typename Data> inline Hurricane::Slot* getSlot ( std::string name, Data );
167 template<typename Data> inline Hurricane::Slot* getSlot ( std::string name, Data* );
168 
169 
170 // -------------------------------------------------------------------
171 // Inspector Support for : "POD types".
172 
173 // Default match.
174 
175 template<typename Data> inline std::string getString ( Data data )
176 { return std::string("<type ")
177  + Hurricane::demangle(typeid(data).name())
178  + std::string(" unsupported by getString()>"); }
179 
180 // "const &" flavors.
181 
182 template<> inline std::string getString<const bool&> ( const bool& b )
183 { return (b)?"True":"False" ; }
184 
185 template<> inline std::string getString<const int&> ( const int& i )
186 { std::ostringstream os (""); os << i; return os.str(); }
187 
188 template<> inline std::string getString<const long&> ( const long& l )
189 { std::ostringstream os (""); os << l; return os.str(); }
190 
191 template<> inline std::string getString<const unsigned int&> ( const unsigned int& u )
192 { std::ostringstream os (""); os << u; return os.str(); }
193 
194 template<> inline std::string getString<const unsigned long&> ( const unsigned long& ul )
195 { std::ostringstream os (""); os << ul; return os.str(); }
196 
197 template<> inline std::string getString<const unsigned long long&> ( const unsigned long long& ull )
198 { std::ostringstream os (""); os << ull; return os.str(); }
199 
200 template<> inline std::string getString<const unsigned short int&> ( const unsigned short int& us )
201 { std::ostringstream os (""); os << us; return os.str(); }
202 
203 template<> inline std::string getString<const float&> ( const float& f )
204 { std::ostringstream os (""); os << f; return os.str(); }
205 
206 template<> inline std::string getString<const double&> ( const double& d )
207 { std::ostringstream os; os << d; return os.str(); }
208 
209 template<> inline std::string getString<const std::string&> ( const std::string& s )
210 { return s; }
211 
212 // "const *" flavors.
213 
214 template<> inline std::string getString<const bool*> ( const bool* b )
215 { return (*b)?"True":"False" ; }
216 
217 template<> inline std::string getString<const char*> ( const char* c )
218 { return c; }
219 
220 template<> inline std::string getString<const int*> ( const int* i )
221 { std::ostringstream os (""); os << *i; return os.str(); }
222 
223 template<> inline std::string getString<const long*> ( const long* l )
224 { std::ostringstream os (""); os << *l; return os.str(); }
225 
226 template<> inline std::string getString<const unsigned int*> ( const unsigned int* u )
227 { std::ostringstream os (""); os << *u; return os.str(); }
228 
229 template<> inline std::string getString<const unsigned long*> ( const unsigned long* ul )
230 { std::ostringstream os (""); os << *ul; return os.str(); }
231 
232 template<> inline std::string getString<const unsigned long long*> ( const unsigned long long* ull )
233 { std::ostringstream os (""); os << *ull; return os.str(); }
234 
235 template<> inline std::string getString<const unsigned short int*> ( const unsigned short int* us )
236 { std::ostringstream os (""); os << *us; return os.str(); }
237 
238 template<> inline std::string getString<const float*> ( const float* f )
239 { std::ostringstream os (""); os << *f; return os.str(); }
240 
241 template<> inline std::string getString<const double*> ( const double* d )
242 { std::ostringstream os; os << *d; return os.str(); }
243 
244 template<> inline std::string getString<const void*> ( const void* p )
245 { std::ostringstream os ("0x"); os << std::hex << p; return os.str(); }
246 
247 template<> inline std::string getString<const std::string*> ( const std::string* s )
248 { return *s; }
249 
250 
251 // "*" flavors.
252 
253 template<> inline std::string getString<bool*> ( bool* b )
254 { return (*b)?"True":"False" ; }
255 
256 template<> inline std::string getString<char*> ( char* c )
257 { return c; }
258 
259 template<> inline std::string getString<int*> ( int* i )
260 { std::ostringstream os (""); os << *i; return os.str(); }
261 
262 template<> inline std::string getString<long*> ( long* l )
263 { std::ostringstream os (""); os << *l; return os.str(); }
264 
265 template<> inline std::string getString<unsigned int*> ( unsigned int* u )
266 { std::ostringstream os (""); os << *u; return os.str(); }
267 
268 template<> inline std::string getString<unsigned long*> ( unsigned long* ul )
269 { std::ostringstream os (""); os << *ul; return os.str(); }
270 
271 template<> inline std::string getString<unsigned long long*> ( unsigned long long* ull )
272 { std::ostringstream os (""); os << *ull; return os.str(); }
273 
274 template<> inline std::string getString<unsigned short int*> ( unsigned short int* us )
275 { std::ostringstream os (""); os << *us; return os.str(); }
276 
277 template<> inline std::string getString<float*> ( float* f )
278 { std::ostringstream os (""); os << *f; return os.str(); }
279 
280 template<> inline std::string getString<double*> ( double* d )
281 { std::ostringstream os; os << *d; return os.str(); }
282 
283 template<> inline std::string getString<void*> ( void* p )
284 { std::ostringstream os ("0x"); os << std::hex << p; return os.str(); }
285 
286 template<> inline std::string getString<std::string*> ( std::string* s )
287 { return *s; }
288 
289 
290 // "by value" flavors.
291 
292 template<> inline std::string getString<bool> ( bool b )
293 { return (b)?"True":"False" ; }
294 
295 template<> inline std::string getString<char> ( char c )
296 { return std::string(1,c); }
297 
298 template<> inline std::string getString<int> ( int i )
299 { std::ostringstream os (""); os << i; return os.str(); }
300 
301 template<> inline std::string getString<long> ( long l )
302 { std::ostringstream os (""); os << l; return os.str(); }
303 
304 template<> inline std::string getString<unsigned int> ( unsigned int u )
305 { std::ostringstream os (""); os << u; return os.str(); }
306 
307 template<> inline std::string getString<unsigned long> ( unsigned long ul )
308 { std::ostringstream os (""); os << ul; return os.str(); }
309 
310 template<> inline std::string getString<unsigned long long> ( unsigned long long ull )
311 { std::ostringstream os (""); os << ull; return os.str(); }
312 
313 template<> inline std::string getString<unsigned short int> ( unsigned short int us )
314 { std::ostringstream os (""); os << us; return os.str(); }
315 
316 template<> inline std::string getString<float> ( float f )
317 { std::ostringstream os (""); os << f; return os.str(); }
318 
319 template<> inline std::string getString<double> ( double d )
320 { std::ostringstream os; os << d; return os.str(); }
321 
322 template<> inline std::string getString<std::string> ( std::string s )
323 { return s; }
324 
325 
326 template<typename Data> inline Hurricane::Record* getRecord ( Data data )
327 { return NULL; }
328 
329 
330 // -------------------------------------------------------------------
331 // Inspector Support for : "[const] std::pair<T,U>&".
332 
333 template<typename T, typename U>
334 inline std::string getString ( const std::pair<T,U>& p )
335 {
336  return "const std::pair<T,U>";
337 }
338 
339 
340 template<typename T, typename U>
341 inline Hurricane::Record* getRecord ( const std::pair<T,U>& p )
342 {
343  Hurricane::Record* record = NULL;
344  record = new Hurricane::Record ( "const std::pair<T,U>" );
345  record->add( getSlot<const T>(std::string("first" ), &p.first ) );
346  record->add( getSlot<const U>(std::string("second"), &p.second) );
347  return record;
348 }
349 
350 
351 template<typename T, typename U>
352 inline std::string getString ( std::pair<T,U>& p )
353 {
354  return "std::pair<T,U>";
355 }
356 
357 
358 template<typename T, typename U>
359 inline Hurricane::Record* getRecord ( std::pair<T,U>& p )
360 {
361  Hurricane::Record* record = NULL;
362  record = new Hurricane::Record ( "std::pair<T,U>" );
363  record->add( getSlot<T>(std::string("first" ), &p.first ) );
364  record->add( getSlot<U>(std::string("second"), &p.second) );
365  return record;
366 }
367 
368 
369 // -------------------------------------------------------------------
370 // Inspector Support for : "[const] std::array<Element>*".
371 
372 
373 template<typename Element,size_t N>
374 inline std::string getString ( std::array<Element,N>* v )
375 {
376  std::string name = "const std::array<Element,N>:";
377  return name + getString<size_t>(v->size());
378 }
379 
380 
381 template<typename Element,size_t N>
382 inline Hurricane::Record* getRecord ( std::array<Element,N>* v )
383 {
384  Hurricane::Record* record = NULL;
385  if ( !v->empty() ) {
386  record = new Hurricane::Record ( "std::array<Element,N>" );
387  unsigned n = 0;
388  typename std::array<Element,N>::iterator iterator = v->begin();
389  while ( iterator != v->end() ) {
390  record->add ( getSlot<Element>(getString(n++), *iterator) );
391  ++iterator;
392  }
393  }
394  return record;
395 }
396 
397 
398 template<typename Element,size_t N>
399 inline std::string getString ( const std::array<Element,N>* v )
400 {
401  std::string name = "const std::array<Element,N>:";
402  return name + getString<size_t>(v->size());
403 }
404 
405 
406 template<typename Element,size_t N>
407 inline Hurricane::Record* getRecord ( const std::array<Element,N>* v )
408 {
409  Hurricane::Record* record = NULL;
410  if ( !v->empty() ) {
411  record = new Hurricane::Record ( "const std::array<Element,N>" );
412  unsigned n = 0;
413  typename std::array<Element,N>::const_iterator iterator = v->begin();
414  while ( iterator != v->end() ) {
415  record->add ( getSlot<const Element>(getString(n++), *iterator) );
416  ++iterator;
417  }
418  }
419  return record;
420 }
421 
422 
423 template<typename Element,size_t N>
424 inline std::string getString ( std::array<Element,N>& v )
425 {
426  std::string name = "std::array<Element,N>&:";
427  return name + getString<size_t>(v.size());
428 }
429 
430 
431 template<typename Element,size_t N>
432 inline Hurricane::Record* getRecord ( std::array<Element,N>& v )
433 {
434  Hurricane::Record* record = NULL;
435  if (not v.empty()) {
436  record = new Hurricane::Record ( "std::array<Element,N>&" );
437  unsigned n = 0;
438  for ( auto element : v )
439  record->add( getSlot<Element>(getString(n++), element) );
440  }
441  return record;
442 }
443 
444 
445 template<typename Element,size_t N>
446 inline std::string getString ( const std::array<Element,N>& v )
447 {
448  std::string name = "const std::array<Element,N>&:";
449  return name + getString<size_t>(v.size());
450 }
451 
452 
453 template<typename Element,size_t N>
454 inline Hurricane::Record* getRecord ( const std::array<Element,N>& v )
455 {
456  Hurricane::Record* record = NULL;
457  if (not v.empty()) {
458  record = new Hurricane::Record ( "const std::array<Element,N>&" );
459  unsigned n = 0;
460  for ( auto element : v )
461  record->add( getSlot<Element>(getString(n++), element) );
462  }
463  return record;
464 }
465 
466 
467 // -------------------------------------------------------------------
468 // Inspector Support for : "std::vector<Element>*".
469 
470 
471 template<typename Element>
472 inline std::string getString ( std::vector<Element>* v )
473 {
474  std::string name = "std::vector<Element>*:";
475  return name + getString<size_t>(v->size());
476 }
477 
478 
479 template<typename Element>
480 inline Hurricane::Record* getRecord ( std::vector<Element>* v )
481 {
482  Hurricane::Record* record = NULL;
483  if ( !v->empty() ) {
484  record = new Hurricane::Record ( "std::vector<Element>*" );
485  unsigned n = 0;
486  typename std::vector<Element>::iterator iterator = v->begin();
487  while ( iterator != v->end() ) {
488  record->add ( getSlot<Element>(getString(n++), &(*iterator)) );
489  ++iterator;
490  }
491  }
492  return record;
493 }
494 
495 
496 // -------------------------------------------------------------------
497 // Inspector Support for : "std::vector<Element*>*".
498 
499 
500 template<typename Element>
501 inline std::string getString ( std::vector<Element*>* v )
502 {
503  std::string name = "std::vector<Element*>*:";
504  return name + getString<size_t>(v->size());
505 }
506 
507 
508 template<typename Element>
509 inline Hurricane::Record* getRecord ( std::vector<Element*>* v )
510 {
511  Hurricane::Record* record = NULL;
512  if ( !v->empty() ) {
513  record = new Hurricane::Record ( "std::vector<Element*>*" );
514  unsigned n = 0;
515  typename std::vector<Element>::iterator iterator = v->begin();
516  while ( iterator != v->end() ) {
517  record->add ( getSlot<Element>(getString(n++), *iterator) );
518  ++iterator;
519  }
520  }
521  return record;
522 }
523 
524 
525 // -------------------------------------------------------------------
526 // Inspector Support for : "const std::vector<Element>*".
527 
528 
529 template<typename Element>
530 inline std::string getString ( const std::vector<Element>* v )
531 {
532  std::string name = "const std::vector<Element>*:";
533  return name + getString<size_t>(v->size());
534 }
535 
536 
537 template<typename Element>
538 inline Hurricane::Record* getRecord ( const std::vector<Element>* v )
539 {
540  Hurricane::Record* record = NULL;
541  if ( !v->empty() ) {
542  record = new Hurricane::Record ( "const std::vector<Element>*" );
543  unsigned n = 0;
544  typename std::vector<Element>::const_iterator iterator = v->begin();
545  while ( iterator != v->end() ) {
546  record->add ( getSlot<const Element>(getString(n++), &(*iterator)) );
547  ++iterator;
548  }
549  }
550  return record;
551 }
552 
553 
554 // -------------------------------------------------------------------
555 // Inspector Support for : "const std::vector<Element*>*".
556 
557 
558 template<typename Element>
559 inline std::string getString ( const std::vector<Element*>* v )
560 {
561  std::string name = "const std::vector<Element*>*:";
562  return name + getString<size_t>(v->size());
563 }
564 
565 
566 template<typename Element>
567 inline Hurricane::Record* getRecord ( const std::vector<Element*>* v )
568 {
569  Hurricane::Record* record = NULL;
570  if (not v->empty()) {
571  record = new Hurricane::Record ( "const std::vector<Element*>*" );
572  size_t n = 0;
573  typename std::vector<Element*>::const_iterator iterator = v->begin();
574  while (iterator != v->end()) {
575  record->add ( getSlot<const Element*>(getString(n++), *iterator) );
576  ++iterator;
577  }
578  }
579  return record;
580 }
581 
582 
583 // -------------------------------------------------------------------
584 // Inspector Support for : "const std::list<Element>*".
585 
586 
587 template<typename Element>
588 inline std::string getString ( const std::list<Element>* l )
589 {
590  std::string name = "const std::list<Element>:";
591  return name + getString<size_t>(l->size());
592 }
593 
594 
595 template<typename Element>
596 inline Hurricane::Record* getRecord ( const std::list<Element>* l )
597 {
598  Hurricane::Record* record = NULL;
599  if ( !l->empty() ) {
600  record = new Hurricane::Record ( "const std::list<Element>" );
601  unsigned n = 1;
602  typename std::list<Element>::const_iterator iterator = l->begin();
603  while ( iterator != l->end() ) {
604  record->add ( getSlot<const Element>(getString(n++), *iterator) );
605  ++iterator;
606  }
607  }
608  return record;
609 }
610 
611 
612 template<typename Element>
613 inline std::string getString ( std::list<Element>* l )
614 {
615  std::string name = "std::list<Element>:";
616  return name + getString<size_t>(l->size());
617 }
618 
619 
620 template<typename Element>
621 inline Hurricane::Record* getRecord ( std::list<Element>* l )
622 {
623  Hurricane::Record* record = NULL;
624  if ( !l->empty() ) {
625  record = new Hurricane::Record ( "std::list<Element>" );
626  unsigned n = 1;
627  typename std::list<Element>::iterator iterator = l->begin();
628  while ( iterator != l->end() ) {
629  record->add ( getSlot<Element>(getString(n++), *iterator) );
630  ++iterator;
631  }
632  }
633  return record;
634 }
635 
636 
637 // -------------------------------------------------------------------
638 // Inspector Support for : "[const] std::map<Key,Element,Compare>*.
639 
640 
641 template<typename Key, typename Element>
642 inline std::string getString ( std::map<Key,Element>* m )
643 {
644  std::string name = "std::map<Element>:";
645  return name + getString<size_t>(m->size());
646 }
647 
648 
649 template<typename Key, typename Element>
650 inline Hurricane::Record* getRecord ( std::map<Key,Element>* m )
651 {
652  Hurricane::Record* record = NULL;
653  if ( !m->empty() ) {
654  record = new Hurricane::Record ( "std::map<Element>" );
655  typename std::map<Key,Element>::iterator iterator = m->begin();
656  while ( iterator != m->end() ) {
657  record->add ( getSlot<Element>(getString(iterator->first), iterator->second) );
658  ++iterator;
659  }
660  }
661  return record;
662 }
663 
664 
665 template<typename Key, typename Element>
666 inline std::string getString ( const std::map<Key,Element>* m )
667 {
668  std::string name = "const std::map<Element>:";
669  return name + getString<size_t>(m->size());
670 }
671 
672 
673 template<typename Key, typename Element>
674 inline Hurricane::Record* getRecord ( const std::map<Key,Element>* m )
675 {
676  Hurricane::Record* record = NULL;
677  if ( !m->empty() ) {
678  record = new Hurricane::Record ( "const std::map<Element>" );
679  typename std::map<Key,Element>::const_iterator iterator = m->begin();
680  while ( iterator != m->end() ) {
681  record->add ( getSlot<const Element>(getString(iterator->first), iterator->second) );
682  ++iterator;
683  }
684  }
685  return record;
686 }
687 
688 
689 // -------------------------------------------------------------------
690 // Inspector Support for : "[const] std::map<Key,Element,Compare>*.
691 
692 
693 template<typename Key, typename Element, typename Compare>
694 inline std::string getString ( std::map<Key,Element,Compare>* m )
695 {
696  std::string name = "std::map<Element>:";
697  return name + getString<size_t>(m->size());
698 }
699 
700 
701 template<typename Key, typename Element, typename Compare>
702 inline Hurricane::Record* getRecord ( std::map<Key,Element,Compare>* m )
703 {
704  Hurricane::Record* record = NULL;
705  if ( !m->empty() ) {
706  record = new Hurricane::Record ( "std::map<Element>" );
707  typename std::map<Key,Element,Compare>::iterator iterator = m->begin();
708  while ( iterator != m->end() ) {
709  record->add ( getSlot<Element>(getString(iterator->first), iterator->second) );
710  ++iterator;
711  }
712  }
713  return record;
714 }
715 
716 
717 template<typename Key, typename Element, typename Compare>
718 inline std::string getString ( const std::map<Key,Element,Compare>* m )
719 {
720  std::string name = "const std::map<Element>:";
721  return name + getString<size_t>(m->size());
722 }
723 
724 
725 template<typename Key, typename Element, typename Compare>
726 inline Hurricane::Record* getRecord ( const std::map<Key,Element,Compare>* m )
727 {
728  Hurricane::Record* record = NULL;
729  if ( !m->empty() ) {
730  record = new Hurricane::Record ( "const std::map<Element>" );
731  typename std::map<Key,Element,Compare>::const_iterator iterator = m->begin();
732  while ( iterator != m->end() ) {
733  record->add ( getSlot<const Element>(getString(iterator->first), iterator->second) );
734  ++iterator;
735  }
736  }
737  return record;
738 }
739 
740 
741 // -------------------------------------------------------------------
742 // Inspector Support for : "const std::multimap<Key,Element,Compare>*".
743 
744 
745 template<typename Key, typename Element, typename Compare>
746 inline std::string getString ( const std::multimap<Key,Element,Compare>* m )
747 {
748  std::string name = "const std::multimap<Element>:";
749  return name + getString<size_t>(m->size());
750 }
751 
752 
753 template<typename Key, typename Element, typename Compare>
754 inline Hurricane::Record* getRecord ( const std::multimap<Key,Element,Compare>* m )
755 {
756  Hurricane::Record* record = NULL;
757  if ( !m->empty() ) {
758  record = new Hurricane::Record ( "const std::multimap<Element>" );
759  typename std::multimap<Key,Element,Compare>::const_iterator iterator = m->begin();
760  while ( iterator != m->end() ) {
761  record->add ( getSlot<const Element>(getString(iterator->first), iterator->second) );
762  ++iterator;
763  }
764  }
765  return record;
766 }
767 
768 
769 template<typename Key, typename Element, typename Compare>
770 inline std::string getString ( std::multimap<Key,Element,Compare>* m )
771 {
772  std::string name = "std::multimap<Element>:";
773  return name + getString<size_t>(m->size());
774 }
775 
776 
777 template<typename Key, typename Element, typename Compare>
778 inline Hurricane::Record* getRecord ( std::multimap<Key,Element,Compare>* m )
779 {
780  Hurricane::Record* record = NULL;
781  if ( !m->empty() ) {
782  record = new Hurricane::Record ( "std::multimap<Element>" );
783  typename std::multimap<Key,Element,Compare>::iterator iterator = m->begin();
784  while ( iterator != m->end() ) {
785  record->add ( getSlot<Element>(getString(iterator->first), iterator->second) );
786  ++iterator;
787  }
788  }
789  return record;
790 }
791 
792 
793 // -------------------------------------------------------------------
794 // Inspector Support for : "[const] std::set<Element,Compare>*".
795 
796 
797 template<typename Element, typename Compare>
798 inline std::string getString ( const std::set<Element,Compare>* s )
799 {
800  std::string name = "const std::set<Element>:";
801  return name + getString<size_t>(s->size());
802 }
803 
804 
805 template<typename Element, typename Compare>
806 inline Hurricane::Record* getRecord ( const std::set<Element,Compare>* s )
807 {
808  Hurricane::Record* record = NULL;
809  if ( !s->empty() ) {
810  record = new Hurricane::Record ( "const std::set<Element>" );
811  unsigned n = 1;
812  typename std::set<Element,Compare>::const_iterator iterator = s->begin();
813  while ( iterator != s->end() ) {
814  record->add ( getSlot<const Element>(getString(n++), *iterator) );
815  ++iterator;
816  }
817  }
818  return record;
819 }
820 
821 
822 template< typename Element, typename Compare, typename Allocator >
823 inline std::string getString ( std::set<Element,Compare,Allocator>* s )
824 {
825  std::string name = "std::set<Element>:";
826  return name + getString<size_t>(s->size());
827 }
828 
829 
830 template< typename Element, typename Compare, typename Allocator >
831 inline Hurricane::Record* getRecord ( std::set<Element,Compare,Allocator>* s )
832 {
833  Hurricane::Record* record = NULL;
834  if ( !s->empty() ) {
835  record = new Hurricane::Record ( "std::set<Element>" );
836  unsigned n = 1;
837  typename std::set<Element,Compare,Allocator>::iterator iterator = s->begin();
838  while ( iterator != s->end() ) {
839  record->add ( getSlot<Element>(getString(n++), *iterator) );
840  ++iterator;
841  }
842  }
843  return record;
844 }
845 
846 // -------------------------------------------------------------------
847 // Inspector Support for : "[const] std::set<Element,Compare>&".
848 
849 
850 template<typename Element, typename Compare>
851 inline std::string getString ( const std::set<Element,Compare>& s )
852 {
853  std::string name = "const std::set<Element>:";
854  return name + getString<size_t>(s.size());
855 }
856 
857 
858 template<typename Element, typename Compare>
859 inline Hurricane::Record* getRecord ( const std::set<Element,Compare>& s )
860 {
861  Hurricane::Record* record = NULL;
862  if ( !s.empty() ) {
863  record = new Hurricane::Record ( "const std::set<Element>" );
864  unsigned n = 1;
865  typename std::set<Element,Compare>::const_iterator iterator = s.begin();
866  while ( iterator != s.end() ) {
867  record->add ( getSlot<Element>(getString(n++), *iterator) );
868  ++iterator;
869  }
870  }
871  return record;
872 }
873 
874 // -------------------------------------------------------------------
875 // Inspector Support for : "const std::multiset<Element,Compare>*".
876 
877 
878 template<typename Element, typename Compare>
879 inline std::string getString ( const std::multiset<Element,Compare>* s )
880 {
881  std::string name = "std::multiset<Element>:";
882  return name + getString<size_t>(s->size());
883 }
884 
885 
886 template<typename Element, typename Compare>
887 inline Hurricane::Record* getRecord ( const std::multiset<Element,Compare>* s )
888 {
889  Hurricane::Record* record = NULL;
890  if ( !s->empty() ) {
891  record = new Hurricane::Record ( "std::multiset<Element>" );
892  unsigned n = 1;
893  typename std::multiset<Element,Compare>::const_iterator iterator = s->begin();
894  while ( iterator != s->end() ) {
895  record->add ( getSlot<Element>(getString(n++), *iterator) );
896  ++iterator;
897  }
898  }
899  return record;
900 }
901 
902 
903 # define GETSTRING_POINTER_SUPPORT(Data) \
904  template<> inline std::string getString<Data*>( Data* data ) \
905  { \
906  if (!data) return "NULL [" #Data "]"; \
907  return data->_getString(); \
908  } \
909  \
910  template<> inline std::string getString<const Data*>( const Data* data ) \
911  { if (!data) return "NULL [const " #Data "]"; return data->_getString(); }
912 
913 
914 # define IOSTREAM_POINTER_SUPPORT(Data) \
915  inline std::ostream& operator<< ( std::ostream& o, Data* d ) \
916  { \
917  if (!d) return o << "NULL [" #Data "]"; \
918  return o << "&" << getString<const Data*>(d); \
919  } \
920  inline std::ostream& operator<< ( std::ostream& o, const Data* d ) \
921  { \
922  if (!d) return o << "NULL [const " #Data "]"; \
923  return o << "&" << getString<const Data*>(d); \
924  } \
925 
926 
927 # define GETRECORD_POINTER_SUPPORT(Data) \
928  template<> inline Hurricane::Record* getRecord<Data*>( Data* data ) \
929  { if (!data) return NULL; return data->_getRecord(); } \
930  \
931  template<> inline Hurricane::Record* getRecord<const Data*>( const Data* data ) \
932  { if (!data) return NULL; return data->_getRecord(); }
933 
934 
935 # define GETSTRING_REFERENCE_SUPPORT(Data) \
936  template<> inline std::string getString<Data&>( Data& data ) \
937  { return data._getString(); } \
938  \
939  template<> inline std::string getString<const Data&>( const Data& data ) \
940  { return data._getString(); }
941 
942 
943 # define IOSTREAM_REFERENCE_SUPPORT(Data) \
944  inline std::ostream& operator<< ( std::ostream& o, Data& d ) \
945  { return o << getString<Data&>(d); } \
946  \
947  inline std::ostream& operator<< ( std::ostream& o, const Data& d ) \
948  { return o << getString<const Data&>(d); } \
949  \
950 
951 # define GETRECORD_REFERENCE_SUPPORT(Data) \
952  template<> inline Hurricane::Record* getRecord<Data&>( Data& data ) \
953  { return data._getRecord(); } \
954  \
955  template<> inline Hurricane::Record* getRecord<const Data&>( const Data& data ) \
956  { return data._getRecord(); }
957 
958 
959 # define GETSTRING_VALUE_SUPPORT(Data) \
960  template<> inline std::string getString<Data>( Data data ) \
961  { return data._getString(); }
962 
963 
964 # define IOSTREAM_VALUE_SUPPORT(Data) \
965  inline std::ostream& operator<< ( std::ostream& o, Data d ) \
966  { return o << getString<Data>(d); }
967 
968 
969 # define GETRECORD_VALUE_SUPPORT(Data) \
970  template<> inline Hurricane::Record* getRecord<Data>( Data data ) \
971  { return data._getRecord(); }
972 
973 
974 # define INSPECTOR_P_SUPPORT(Data) \
975  GETRECORD_POINTER_SUPPORT(Data) \
976  GETSTRING_POINTER_SUPPORT(Data) \
977  IOSTREAM_POINTER_SUPPORT(Data)
978 
979 
980 # define INSPECTOR_R_SUPPORT(Data) \
981  GETRECORD_REFERENCE_SUPPORT(Data) \
982  GETSTRING_REFERENCE_SUPPORT(Data) \
983  IOSTREAM_REFERENCE_SUPPORT(Data)
984 
985 
986 # define INSPECTOR_PR_SUPPORT(Data) \
987  GETSTRING_POINTER_SUPPORT(Data) \
988  GETSTRING_REFERENCE_SUPPORT(Data) \
989  GETSTRING_VALUE_SUPPORT(Data) \
990  IOSTREAM_POINTER_SUPPORT(Data) \
991  IOSTREAM_REFERENCE_SUPPORT(Data) \
992  GETRECORD_POINTER_SUPPORT(Data) \
993  GETRECORD_REFERENCE_SUPPORT(Data)
994 
995 
996 #include "hurricane/Tabulation.h"
997 
998 
999 // -------------------------------------------------------------------
1000 // Class : "::cdebug()".
1001 //
1002 // Wrapper around the STL ostream which to print debugging messages.
1003 
1004 class tstream : public std::ostream {
1005  public:
1006  inline int getMinLevel () const;
1007  inline int getMaxLevel () const;
1008  inline int setMinLevel ( int );
1009  inline int setMaxLevel ( int );
1010  inline int getLevel () const;
1011  inline int setLevel ( int );
1012  inline bool enabled () const;
1013  inline bool enabled ( int ) const;
1014  inline tstream& log ( int level, int count=0 );
1015  inline tstream& tabw ( int level, int count );
1016  inline tstream ( std::ostream & );
1017  inline tstream& put ( char c );
1018  inline tstream& flush ();
1019  private:
1020  inline tstream& _tab ();
1021  inline tstream& _tabw ( int count );
1022  public:
1023  // Overload for manipulators.
1024  inline tstream& operator<< ( std::ostream& (*pf)(std::ostream &) );
1025  private:
1026  int _minLevel;
1027  int _maxLevel;
1028  int _level;
1029  Hurricane::Tabulation _tabulation;
1030 };
1031 
1032 
1033 inline tstream::tstream ( std::ostream& s )
1034  : std::ostream(s.rdbuf())
1035  , _minLevel (100000)
1036  , _maxLevel (0)
1037  , _level (0)
1038  , _tabulation(" ")
1039 { }
1040 
1041 inline int tstream::getMinLevel () const { return _minLevel; }
1042 inline int tstream::getMaxLevel () const { return _maxLevel; }
1043 inline int tstream::setMinLevel ( int l ) { int pl=_minLevel; _minLevel=l; return pl; }
1044 inline int tstream::setMaxLevel ( int l ) { int pl=_maxLevel; _maxLevel=l; return pl; }
1045 inline int tstream::getLevel () const { return _level; }
1046 inline int tstream::setLevel ( int l ) { int pl=_level; _level=l; return pl; }
1047 inline bool tstream::enabled () const { return (_level >= _minLevel) and (_level < _maxLevel); }
1048 inline bool tstream::enabled ( int l ) const { return (l >= _minLevel) and (l < _maxLevel); }
1049 inline tstream& tstream::tabw ( int level, int count ) { setLevel(level); return _tabw(count); }
1050 inline tstream& tstream::put ( char c ) { if (enabled()) static_cast<std::ostream*>(this)->put(c); return *this; }
1051 inline tstream& tstream::flush () { if (enabled()) static_cast<std::ostream*>(this)->flush(); return *this; }
1052 inline tstream& tstream::operator<< ( std::ostream& (*pf)(std::ostream&) ) { if (enabled()) (*pf)(*this); return *this; }
1053 
1054 
1055 inline tstream& tstream::_tab () { if (enabled()) (*this) << _tabulation; return *this; }
1056 inline tstream& tstream::_tabw ( int count )
1057 {
1058  if (enabled()) {
1059  if (count > 0) while(count--) _tabulation++;
1060  else if (count < 0) while(count++) _tabulation--;
1061  }
1062  return *this;
1063 }
1064 
1065 inline tstream& tstream::log ( int level, int count )
1066 { setLevel(level); _tab(); return _tabw(count); }
1067 
1068 // For STL Types.
1069 inline tstream& operator<< ( tstream& o, const std::string s )
1070 { if (o.enabled()) { static_cast<std::ostream&>(o) << s; } return o; };
1071 
1072 // For POD Types.
1073 // template<typename T>
1074 // inline tstream& operator<< ( tstream& o, T& t )
1075 // { if (o.enabled()) { static_cast<std::ostream&>(o) << getString<T&>(t); } return o; };
1076 
1077 template<typename T>
1078 inline tstream& operator<< ( tstream& o, T* t )
1079 { if (o.enabled()) { static_cast<std::ostream&>(o) << getString<T*>(t); } return o; };
1080 
1081 // template<typename T>
1082 // inline tstream& operator<< ( tstream& o, const T& t )
1083 // { if (o.enabled()) { static_cast<std::ostream&>(o) << getString<const T&>(t); } return o; };
1084 
1085 template<typename T>
1086 inline tstream& operator<< ( tstream& o, T t )
1087 { if (o.enabled()) { static_cast<std::ostream&>(o) << getString<T>(t); } return o; };
1088 
1089 template<typename T>
1090 inline tstream& operator<< ( tstream& o, const T* t )
1091 { if (o.enabled()) { static_cast<std::ostream&>(o) << getString<const T*>(t); } return o; };
1092 
1093 template<>
1094 inline tstream& operator<< ( tstream& o, std::ios_base& (*pf)(std::ios_base&) )
1095 { if (o.enabled()) { static_cast<std::ostream&>(o) << pf; } return o; };
1096 
1097 struct _Tsetw { int n_; };
1098 inline _Tsetw tsetw ( int n ) { return { n }; }
1099 
1100 struct _Tsetf { int n_; };
1101 inline _Tsetf tsetf ( int n ) { return { n }; }
1102 
1103 template<>
1104 inline tstream& operator<< ( tstream& o, _Tsetw manip )
1105 { if (o.enabled()) { static_cast<std::ostream&>(o) << std::setw(manip.n_); } return o; }
1106 
1107 extern tstream cdebug;
1108 
1109 
1110 #define cdebug_log(level,indent) if (cdebug.enabled(level)) cdebug.log(level,indent)
1111 #define cdebug_tabw(level,indent) cdebug.tabw(level,indent)
1112 
1113 
1114 // x-----------------------------------------------------------------x
1115 // | Classes Neededs in All Hurricane Modules |
1116 // x-----------------------------------------------------------------x
1117 
1118 #include "hurricane/Slot.h"
1119 #include "hurricane/Initializer.h"
1120 #include "hurricane/JsonWriter.h"
1121 #include "hurricane/JsonObject.h"
int getLevel() const
Definition: Commons.h:1045
Definition: JsonObject.h:213
string demangle(const char *symbol)
-
int setMaxLevel(int)
Definition: Commons.h:996
-
tstream & tabw(int level, int count)
Definition: Commons.h:1001
-
tstream & log(int level, int count=0)
Definition: Commons.h:1017
-
int setMinLevel(int)
Definition: Commons.h:995
+
int setMaxLevel(int)
Definition: Commons.h:1044
+
tstream & tabw(int level, int count)
Definition: Commons.h:1049
+
tstream & log(int level, int count=0)
Definition: Commons.h:1065
+
int setMinLevel(int)
Definition: Commons.h:1043
Tabulation description (API)
Definition: Tabulation.h:35
-
int getMinLevel() const
Definition: Commons.h:993
-
Trace & indentation enabled stream.
Definition: Commons.h:956
-
int setLevel(int)
Definition: Commons.h:998
+
int getMinLevel() const
Definition: Commons.h:1041
+
Trace & indentation enabled stream.
Definition: Commons.h:1004
+
int setLevel(int)
Definition: Commons.h:1046
The namespace dedicated to Hurricane.
Definition: Generalities.dox:5
-
bool enabled() const
Definition: Commons.h:999
-
int getMaxLevel() const
Definition: Commons.h:994
+
bool enabled() const
Definition: Commons.h:1047
+
int getMaxLevel() const
Definition: Commons.h:1042


- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 485d64d3..66d52c11 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 18319269..68a0565e 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 62b703f9..bb87ffb1 100644 --- a/hurricane/doc/hurricane/html/ContactLayer_8h_source.html +++ b/hurricane/doc/hurricane/html/ContactLayer_8h_source.html @@ -46,20 +46,20 @@ $(function() {
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 : Jean-Paul Chaput |
26 // | E-mail : Jean-Paul.Chaput@lip6.fr |
27 // | =============================================================== |
28 // | C++ Header : "./hurricane/ContactLayer.h" |
29 // +-----------------------------------------------------------------+
30 
31 
32 #ifndef HURRICANE_CONTACT_LAYER_H
33 #define HURRICANE_CONTACT_LAYER_H
34 
35 #include <vector>
36 
37 #include "hurricane/Layer.h"
38 
39 
40 namespace Hurricane {
41 
42 
43 // -------------------------------------------------------------------
44 // Class : "Hurricane::ContactLayer".
45 
46  class ContactLayer : public Layer {
47  public:
48  typedef Layer Super;
49 
50  public:
51  // Constructor.
52  static ContactLayer* create ( Technology* technology
53  , const Name& name
54  , BasicLayer* metalLayer
55  , BasicLayer* cutLayer
56  , BasicLayer* activeLayer
57  , BasicLayer* diffusionLayer
58  , BasicLayer* wellLayer
59  );
60  // Accessors.
61  virtual BasicLayers getBasicLayers () const;
62  virtual DbU::Unit getEnclosure ( uint32_t flags ) const;
63  virtual DbU::Unit getEnclosure ( const BasicLayer* layer, uint32_t flags ) const;
64  // Updators.
65  virtual void setEnclosure ( const BasicLayer* layer, DbU::Unit enclosure, uint32_t flags );
66  // Hurricane Managment.
67  virtual void _toJson ( JsonWriter* ) const;
68  virtual void _onDbuChange ( float scale );
69  virtual string _getTypeName () const;
70  virtual string _getString () const;
71  virtual Record* _getRecord () const;
72 
73  private:
74  // Internal: Attributes
75  vector<BasicLayer*> _basicLayers;
76  vector< pair<DbU::Unit,DbU::Unit> > _enclosures;
77  DbU::Unit _maximalEnclosure;
78 
79  protected:
80  ContactLayer ( Technology* technology
81  , const Name& name
82  , BasicLayer* metalLayer
83  , BasicLayer* cutLayer
84  , BasicLayer* activeLayer
85  , BasicLayer* diffusionLayer
86  , BasicLayer* wellLayer
87  );
88  };
89 
90 
91 // -------------------------------------------------------------------
92 // Class : "Hurricane::JsonContactLayer".
93 
94  class JsonContactLayer : public JsonLayer {
95  public:
96  static void initialize ();
97  JsonContactLayer ( unsigned long flags );
98  ~JsonContactLayer ();
99  virtual string getTypeName () const;
100  virtual JsonContactLayer* clone ( unsigned long ) const;
101  virtual void toData ( JsonStack& );
102  };
103 
104 
105 } // End of Hurricane namespace.
106 
107 
108 INSPECTOR_P_SUPPORT(Hurricane::ContactLayer);
109 
110 
111 # endif
BasicLayer description (API)
Definition: BasicLayer.h:44
static ContactLayer * create(Technology *technology, const Name &name, BasicLayer *metalLayer, BasicLayer *cutLayer, BasicLayer *activeLayer, BasicLayer *diffusionLayer, BasicLayer *wellLayer)
-
Name description (API)
Definition: Name.h:36
+
Name description (API)
Definition: Name.h:35
std::int64_t Unit
Definition: DbU.h:70
ContactLayer description (API)
Definition: ContactLayer.h:46
DataBase object root class (API).
Definition: DBo.h:47
JSON Parser Stack.
Definition: JsonObject.h:249
Layer description (API)
Definition: Layer.h:52
The namespace dedicated to Hurricane.
Definition: Generalities.dox:5
-
Technological rules description (API).
Definition: Technology.h:66
+
Technological rules description (API).
Definition: Technology.h:62


- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 273b1d0c..d9f6f255 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 9016a05e..97df0162 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 8655b923..c9e08093 100644 --- a/hurricane/doc/hurricane/html/DBo_8h_source.html +++ b/hurricane/doc/hurricane/html/DBo_8h_source.html @@ -46,7 +46,7 @@ $(function() {
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/Error.h"
36 #include "hurricane/DBos.h"
37 #include "hurricane/Name.h"
38 #include "hurricane/Properties.h"
39 
40 
41 namespace Hurricane {
42 
43 
44 // -------------------------------------------------------------------
45 // Class : "Hurricane::DBo".
46 
47  class DBo {
48  public:
49  enum DBoFlags { ForcedIdMode = (1<<0)
50  , NextIdSet = (1<<1)
51  };
52  public:
53  static void setMemoryLimit ( unsigned int );
54  static void setIdCounterLimit ( unsigned int );
55  static unsigned int getIdCounter ();
56  unsigned int getNextId ();
57  static void setNextId ( unsigned int );
58  static void resetId ();
59  static bool inForcedIdMode ();
60  static void enableForcedIdMode ();
61  static void disableForcedIdMode ();
62  static void useIdCounter2 ();
63  public:
64  virtual void destroy ();
65  inline set<Property*>& _getPropertySet ();
66  void _onDestroyed ( Property* property );
67  inline unsigned int getId () const;
68  Property* getProperty ( const Name& ) const;
69  Properties getProperties () const;
70  inline bool hasProperty () const;
71  void setId ( unsigned int );
72  void put ( Property* );
73  void remove ( Property* );
74  void removeProperty ( const Name& );
75  void clearProperties ();
76  virtual string _getTypeName () const;
77  virtual string _getString () const;
78  virtual Record* _getRecord () const;
79  virtual void _toJson ( JsonWriter* ) const;
80  virtual void _toJsonCollections ( JsonWriter* ) const;
81  virtual void _toJsonSignature ( JsonWriter* ) const;
82  void toJson ( JsonWriter* ) const;
83  void toJsonSignature ( JsonWriter* ) const;
84  protected:
85  DBo ();
86  virtual ~DBo () throw(Error);
87  virtual void _postCreate ();
88  virtual void _preDestroy ();
89  private:
90  DBo ( const DBo& ) = delete;
91  DBo& operator= ( const DBo& ) = delete;
92  private:
93  static unsigned int _memoryLimit;
94  static unsigned long _flags;
95  static unsigned int _nextId;
96  static unsigned int _idCount;
97  static unsigned int _idCounter;
98  static unsigned int _idCounterLimit;
99  unsigned int _id;
100  mutable set<Property*> _propertySet;
101  public:
102  struct CompareById : public std::binary_function<const DBo*,const DBo*,bool> {
103  template<typename Key>
104  inline bool operator() ( const Key* lhs, const Key* rhs ) const;
105  };
106  };
107 
108 
109 // Inline Functions.
110  inline set<Property*>& DBo::_getPropertySet () { return _propertySet; }
111  inline bool DBo::hasProperty () const { return !_propertySet.empty(); }
112  inline unsigned int DBo::getId () const { return _id; }
113 
114  template<typename Key>
115  inline bool DBo::CompareById::operator() ( const Key* lhs, const Key* rhs ) const
116  { return ((lhs)?lhs->getId():0) < ((rhs)?rhs->getId():0); }
117 
118 
119 // -------------------------------------------------------------------
120 // Class : "Hurricane::JsonDBo".
121 
122  class JsonDBo : public JsonObject {
123  public:
124  JsonDBo ( unsigned int flags );
125  template<typename T> inline void update ( JsonStack&, T );
126  };
127 
128 
129  template<typename T> inline void JsonDBo::update ( JsonStack& stack, T hobject )
130  {
131  JsonObject::update<T>( stack, hobject );
132  stack.push_back_dbo( dynamic_cast<DBo*>(hobject) );
133  }
134 
135 
136 } // Hurricane namespace.
137 
138 INSPECTOR_P_SUPPORT(Hurricane::DBo);
139 
140 #endif // HURRICANE_DBO_H
Error description (API)
Definition: Error.h:43
void removeProperty(const Name &)
-
Name description (API)
Definition: Name.h:36
+
Name description (API)
Definition: Name.h:35
DataBase object root class (API).
Definition: DBo.h:47
void clearProperties()
bool hasProperty() const
Definition: DBo.h:111
@@ -62,7 +62,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 96b7b449..ddc67052 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 6339f831..94137cd7 100644 --- a/hurricane/doc/hurricane/html/DataBase_8h_source.html +++ b/hurricane/doc/hurricane/html/DataBase_8h_source.html @@ -53,13 +53,13 @@ $(function() {
The whole DataBase (API).
Definition: DataBase.h:40
static DataBase * getDB()
The namespace dedicated to Hurricane.
Definition: Generalities.dox:5
-
Technological rules description (API).
Definition: Technology.h:66
+
Technological rules description (API).
Definition: Technology.h:62


- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 9ff92225..75efc931 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 9e9485a1..2a1a6eec 100644 --- a/hurricane/doc/hurricane/html/DebugSession_8h_source.html +++ b/hurricane/doc/hurricane/html/DebugSession_8h_source.html @@ -45,24 +45,24 @@ $(function() {
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 : Jean-Paul Chaput |
26 // | E-mail : Jean-Paul.Chaput@lip6.fr |
27 // | =============================================================== |
28 // | C++ Header : "./hurricane/DebugSession.h" |
29 // +-----------------------------------------------------------------+
30 
31 
32 #ifndef HURRICANE_DEBUG_SESSION_H
33 #define HURRICANE_DEBUG_SESSION_H
34 
35 #include <set>
36 #include <stack>
37 #include "hurricane/Commons.h"
38 
39 
40 namespace Hurricane {
41 
42  class Name;
43  class Net;
44  class Cell;
45 
46  using std::pair;
47  using std::make_pair;
48  using std::set;
49  using std::stack;
50 
51 
52 // -------------------------------------------------------------------
53 // Class : "Hurricane::DebugSession".
54 
55  class DebugSession {
56 
57  public:
58  // Static Access.
59  static DebugSession* create ();
60  static inline DebugSession* get ();
61  static inline bool isTraced ( const void* symbol );
62  static inline void isTracedNet ( const Net* );
63  static inline void addToTrace ( const void* symbol );
64  static inline void addToTrace ( const Cell*, const Name& );
65  static inline void addToTrace ( const Net* );
66  static inline void open ( int minLevel, int maxLevel );
67  static inline void open ( const void* symbol, int minLevel, int maxLevel );
68  static inline void close ();
69  // Singleton Access.
70  inline bool _isTraced ( const void* symbol ) const;
71  inline void _addToTrace ( const void* symbol );
72  void _addToTrace ( const Cell*, const Name& );
73  inline void _addToTrace ( const Net* net );
74  // Inspector Management.
75  Record* _getRecord () const;
76  string _getString () const;
77  string _getTypeName () const;
78 
79  protected:
80  // Internal: Attributes.
81  static DebugSession* _singleton;
82  set<const void*> _symbols;
83  stack< pair<int,int> > _levels;
84 
85  protected:
86  // Internal: Constructor & Destructor.
87  DebugSession ();
88  ~DebugSession ();
89  private:
90  DebugSession ( const DebugSession& );
91  DebugSession& operator= ( const DebugSession& );
92  };
93 
94 
95 // Inline Functions.
96 
97  void DebugSession::open ( int minLevel, int maxLevel )
98  {
99  if (cdebug.getMinLevel() < minLevel) minLevel = cdebug.getMinLevel();
100  if (cdebug.getMaxLevel() > maxLevel) maxLevel = cdebug.getMaxLevel();
101 
102  _singleton->_levels.push( make_pair( cdebug.setMinLevel(minLevel)
103  , cdebug.setMaxLevel(maxLevel) ) );
104 
105  //std::cerr << "DebugSession::open() " << minLevel << ":" << maxLevel << std::endl;
106  }
107 
108 
109  void DebugSession::open ( const void* symbol, int minLevel, int maxLevel )
110  {
111  if (cdebug.getMinLevel() < minLevel) minLevel = cdebug.getMinLevel();
112  if (cdebug.getMaxLevel() > maxLevel) maxLevel = cdebug.getMaxLevel();
113 
114  if ( _singleton->_isTraced(symbol) ) {
115  _singleton->_levels.push( make_pair( cdebug.setMinLevel(minLevel)
116  , cdebug.setMaxLevel(maxLevel) ) );
117 
118  //std::cerr << "DebugSession::open() " << symbol << " " << minLevel << ":" << maxLevel << std::endl;
119  } else {
120  _singleton->_levels.push ( make_pair( cdebug.getMinLevel()
121  , cdebug.getMaxLevel() ) );
122 
123  //std::cerr << "DebugSession::open() Same level " << minLevel << ":" << maxLevel << std::endl;
124  }
125  }
126 
127 
129  {
130  if ( not _singleton->_levels.empty() ) {
131  cdebug.setMinLevel( _singleton->_levels.top().first );
132  cdebug.setMaxLevel( _singleton->_levels.top().second );
133  _singleton->_levels.pop ();
134 
135  //std::cerr << "DebugSession::close() " << cdebug.getMinLevel() << ":" << cdebug.getMaxLevel() << std::endl;
136  }
137  }
138 
139 
140  DebugSession* DebugSession::get () { return _singleton; }
141  bool DebugSession::isTraced ( const void* symbol ) { return _singleton->_isTraced(symbol); }
142  void DebugSession::addToTrace ( const void* symbol ) { _singleton->_addToTrace(symbol); }
143  void DebugSession::addToTrace ( const Net* net ) { _singleton->_addToTrace(net); }
144  void DebugSession::addToTrace ( const Cell* cell
145  , const Name& name ) { _singleton->_addToTrace( cell, name ); }
146  bool DebugSession::_isTraced ( const void* symbol ) const { return _symbols.find(symbol) != _symbols.end(); }
147  void DebugSession::_addToTrace ( const void* symbol ) { _symbols.insert( symbol ); }
148  void DebugSession::_addToTrace ( const Net* net ) { _addToTrace( static_cast<const void*>(net) ); }
149 
150 
151 
152 } // Hurricane namespace.
153 
154 
155 INSPECTOR_P_SUPPORT(Hurricane::DebugSession);
156 
157 
158 #endif // HURRICANE_DEBUG_SESSION_H
static void addToTrace(const void *symbol)
Definition: DebugSession.h:142
-
Name description (API)
Definition: Name.h:36
-
int setMaxLevel(int)
Definition: Commons.h:996
+
Name description (API)
Definition: Name.h:35
+
int setMaxLevel(int)
Definition: Commons.h:1044
The model (API).
Definition: Cell.h:66
static void close()
Definition: DebugSession.h:128
-
int setMinLevel(int)
Definition: Commons.h:995
-
int getMinLevel() const
Definition: Commons.h:993
+
int setMinLevel(int)
Definition: Commons.h:1043
+
int getMinLevel() const
Definition: Commons.h:1041
Enable/Disable trace information (API).
Definition: DebugSession.h:55
The namespace dedicated to Hurricane.
Definition: Generalities.dox:5
static bool isTraced(const void *symbol)
Definition: DebugSession.h:141
Net description (API)
Definition: Net.h:48
-
int getMaxLevel() const
Definition: Commons.h:994
+
int getMaxLevel() const
Definition: Commons.h:1042
static void open(int minLevel, int maxLevel)
Definition: DebugSession.h:97


- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 3e1dc337..310570bf 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 1390e1b0..e78f445a 100644 --- a/hurricane/doc/hurricane/html/DiffusionLayer_8h_source.html +++ b/hurricane/doc/hurricane/html/DiffusionLayer_8h_source.html @@ -46,20 +46,20 @@ $(function() {
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 : Jean-Paul Chaput |
26 // | E-mail : Jean-Paul.Chaput@lip6.fr |
27 // | =============================================================== |
28 // | C++ Header : "./hurricane/DiffusionLayer.h" |
29 // +-----------------------------------------------------------------+
30 
31 
32 #ifndef HURRICANE_DIFFUSION_LAYER_H
33 #define HURRICANE_DIFFUSION_LAYER_H
34 
35 #include <vector>
36 
37 #include "hurricane/Layer.h"
38 
39 
40 namespace Hurricane {
41 
42 // -------------------------------------------------------------------
43 // Class : "Hurricane::DiffusionLayer".
44 
45  class DiffusionLayer : public Layer {
46  public:
47  typedef Layer Super;
48 
49  public:
50  // Constructor.
51  static DiffusionLayer* create ( Technology* technology
52  , const Name& name
53  , BasicLayer* activeLayer
54  , BasicLayer* diffusionLayer
55  , BasicLayer* wellLayer
56  );
57  // Accessors.
58  virtual BasicLayers getBasicLayers () const;
59  virtual DbU::Unit getExtentionCap () const;
60  virtual DbU::Unit getExtentionWidth () const;
61  virtual DbU::Unit getExtentionCap ( const BasicLayer* layer ) const;
62  virtual DbU::Unit getExtentionWidth ( const BasicLayer* layer ) const;
63  // Updators.
64  virtual void setExtentionCap ( const BasicLayer* layer, DbU::Unit cap );
65  virtual void setExtentionWidth ( const BasicLayer* layer, DbU::Unit width );
66  // Hurricane Managment.
67  virtual void _toJson ( JsonWriter* ) const;
68  virtual void _onDbuChange ( float scale );
69  virtual string _getTypeName () const;
70  virtual string _getString () const;
71  virtual Record* _getRecord () const;
72 
73  private:
74  // Internal: Attributes
75  vector<BasicLayer*> _basicLayers;
76  vector<DbU::Unit> _extentionCaps;
77  vector<DbU::Unit> _extentionWidths;
78  DbU::Unit _maximalExtentionCap;
79  DbU::Unit _maximalExtentionWidth;
80 
81  protected:
82  // Internal: Constructors & Destructors.
83  DiffusionLayer ( Technology* technology
84  , const Name& name
85  , BasicLayer* activeLayer
86  , BasicLayer* diffusionLayer
87  , BasicLayer* wellLayer
88  );
89  };
90 
91 
92 // -------------------------------------------------------------------
93 // Class : "Hurricane::JsonDiffusionLayer".
94 
95  class JsonDiffusionLayer : public JsonLayer {
96  public:
97  static void initialize ();
98  JsonDiffusionLayer ( unsigned long flags );
99  ~JsonDiffusionLayer ();
100  virtual string getTypeName () const;
101  virtual JsonDiffusionLayer* clone ( unsigned long ) const;
102  virtual void toData ( JsonStack& );
103  };
104 
105 
106 } // End of Hurricane namespace.
107 
108 
109 INSPECTOR_P_SUPPORT(Hurricane::DiffusionLayer);
110 
111 
112 #endif
BasicLayer description (API)
Definition: BasicLayer.h:44
DiffusionLayer description (API)
Definition: DiffusionLayer.h:45
-
Name description (API)
Definition: Name.h:36
+
Name description (API)
Definition: Name.h:35
std::int64_t Unit
Definition: DbU.h:70
DataBase object root class (API).
Definition: DBo.h:47
JSON Parser Stack.
Definition: JsonObject.h:249
Layer description (API)
Definition: Layer.h:52
The namespace dedicated to Hurricane.
Definition: Generalities.dox:5
static DiffusionLayer * create(Technology *technology, const Name &name, BasicLayer *activeLayer, BasicLayer *diffusionLayer, BasicLayer *wellLayer)
-
Technological rules description (API).
Definition: Technology.h:66
+
Technological rules description (API).
Definition: Technology.h:62


- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 87cba9fb..5152ce8b 100644 --- a/hurricane/doc/hurricane/html/Entities_8h_source.html +++ b/hurricane/doc/hurricane/html/Entities_8h_source.html @@ -57,7 +57,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 7455861b..6fb8082f 100644 --- a/hurricane/doc/hurricane/html/Entity_8h_source.html +++ b/hurricane/doc/hurricane/html/Entity_8h_source.html @@ -60,7 +60,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 a394a2c3..5cdb5aa1 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 3f408d7a..bd6252b4 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 6f526006..147512c8 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 bf9b1290..9c4871c1 100644 --- a/hurricane/doc/hurricane/html/Go_8h_source.html +++ b/hurricane/doc/hurricane/html/Go_8h_source.html @@ -64,7 +64,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 ffd22e73..8175243e 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 0496dc7d..5671a32f 100644 --- a/hurricane/doc/hurricane/html/Hook_8h_source.html +++ b/hurricane/doc/hurricane/html/Hook_8h_source.html @@ -68,7 +68,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 274175d9..ddcd5363 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 04a7cd32..b07da95f 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 b818a19d..1d9b90f5 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 bec98fbc..6a3d5af1 100644 --- a/hurricane/doc/hurricane/html/HyperNet_8h_source.html +++ b/hurricane/doc/hurricane/html/HyperNet_8h_source.html @@ -62,7 +62,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 8198f698..2315cfe9 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 8bdc3514..29a5181b 100644 --- a/hurricane/doc/hurricane/html/Instance_8h_source.html +++ b/hurricane/doc/hurricane/html/Instance_8h_source.html @@ -52,7 +52,7 @@ $(function() {
Cell * getMasterCell() const
Definition: Instance.h:123
Plugs getPlugs() const
Definition: Instance.h:127
Plugs getConnectedPlugs() const
-
Name description (API)
Definition: Name.h:36
+
Name description (API)
Definition: Name.h:35
static InstanceFilter getIsUnderFilter(const Box &area)
Code
Definition: Instance.h:48
std::int64_t Unit
Definition: DbU.h:70
@@ -86,7 +86,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 76b0849e..5d478dce 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 2d12a8d5..655673fb 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 1b1e5d01..d0129a0f 100644 --- a/hurricane/doc/hurricane/html/Interval_8h_source.html +++ b/hurricane/doc/hurricane/html/Interval_8h_source.html @@ -44,7 +44,7 @@ $(function() {
Interval.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 : 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
+
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_PR_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 &)
@@ -72,7 +72,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 c8370548..dd867c85 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 7a84babe..c5f42e78 100644 --- a/hurricane/doc/hurricane/html/JsonObject_8h_source.html +++ b/hurricane/doc/hurricane/html/JsonObject_8h_source.html @@ -92,7 +92,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 6dc17ce1..a334a761 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 4d824303..593a355c 100644 --- a/hurricane/doc/hurricane/html/Layer_8h_source.html +++ b/hurricane/doc/hurricane/html/Layer_8h_source.html @@ -44,13 +44,13 @@ $(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* getCut () const;
76  virtual const Layer* getTop () const;
77  virtual const Layer* getBottom () const;
78  virtual const Layer* getOpposite ( const Layer* ) const;
79  Layer* getMetalAbove ( bool useSymbolic=true ) const;
80  Layer* getMetalBelow ( bool useSymbolic=true ) const;
81  Layer* getCutAbove ( bool useSymbolic=true ) const;
82  Layer* getCutBelow ( bool useSymbolic=true ) const;
83  virtual DbU::Unit getEnclosure ( uint32_t flags ) const;
84  virtual DbU::Unit getExtentionCap () const;
85  virtual DbU::Unit getExtentionWidth () const;
86  virtual DbU::Unit getEnclosure ( const BasicLayer* layer, uint32_t flags ) const;
87  virtual DbU::Unit getExtentionCap ( const BasicLayer* layer ) const;
88  virtual DbU::Unit getExtentionWidth ( const BasicLayer* layer ) const;
89  virtual DbU::Unit getTopEnclosure ( uint32_t flags ) const;
90  virtual DbU::Unit getBottomEnclosure ( uint32_t flags ) const;
91  // Predicates
92  inline bool above ( const Layer* layer ) const;
93  inline bool below ( const Layer* layer ) const;
94  bool contains ( const Layer* layer ) const;
95  bool intersect ( const Layer* layer ) const;
96  inline bool isSymbolic () const;
97  inline bool isBlockage () const;
98  // Updators
99  void setName ( const Name& name );
100  inline void setSymbolic ( bool );
101  inline void setBlockage ( bool );
102  void setMinimalSize ( const DbU::Unit& minimalSize );
103  void setMinimalSpacing ( const DbU::Unit& minimalSpacing );
104  virtual void setEnclosure ( const BasicLayer* layer, DbU::Unit, uint32_t flags );
105  virtual void setExtentionCap ( const BasicLayer* layer, DbU::Unit );
106  virtual void setExtentionWidth ( const BasicLayer* layer, DbU::Unit );
107  // Hurricane Managment.
108  virtual void _toJson ( JsonWriter* ) const;
109  virtual string _getString () const;
110  virtual Record* _getRecord () const;
111  inline Layer* _getNextOfTechnologyLayerMap () const;
112  inline void _setMask ( const Mask& mask );
113  inline void _setExtractMask ( const Mask& extractMask );
114  inline void _setNextOfTechnologyLayerMap ( Layer* layer );
115  virtual void _onDbuChange ( float scale );
116  static const Name& _sgetName ( const Layer* );
117 
118  private:
119  // Internal: Attributes
120  Technology* _technology;
121  Name _name;
122  Mask _mask;
123  Mask _extractMask;
124  DbU::Unit _minimalSize;
125  DbU::Unit _minimalSpacing;
126  Layer* _nextOfTechnologyLayerMap;
127  bool _symbolic;
128  bool _blockage;
129 
130  protected:
131  // Internal: Constructors & Destructors.
132  Layer ( Technology* technology
133  , const Name& name
134  , const DbU::Unit& minimalSize = 0
135  , const DbU::Unit& minimalSpacing = 0
136  , const DbU::Unit& pitch = 0
137  );
138  virtual void _postCreate ();
139  virtual void _preDestroy ();
140 
141  public:
142  struct CompareByMask : public binary_function<const Layer*,const Layer*,bool> {
143  inline bool operator() ( const Layer* lhs, const Layer* rhs ) const;
144  };
145  };
146 
147 
148 // Inline Functions.
149  inline bool Layer::isSymbolic () const { return _symbolic; }
150  inline bool Layer::isBlockage () const { return _blockage; }
151  inline bool Layer::above ( const Layer* layer ) const { return _mask > layer->getMask(); }
152  inline bool Layer::below ( const Layer* layer ) const { return _mask < layer->getMask(); }
153  inline Technology* Layer::getTechnology () const { return _technology; }
154  inline const Name& Layer::getName () const { return _name; }
155  inline const Layer::Mask& Layer::getMask () const { return _mask; }
156  inline const Layer::Mask& Layer::getExtractMask () const { return _extractMask; }
157  inline const DbU::Unit& Layer::getMinimalSize () const { return _minimalSize; }
158  inline const DbU::Unit& Layer::getMinimalSpacing () const { return _minimalSpacing; }
159  inline void Layer::setSymbolic ( bool state ) { _symbolic = state; }
160  inline void Layer::setBlockage ( bool state ) { _blockage = state; }
161  inline Layer* Layer::_getNextOfTechnologyLayerMap () const { return _nextOfTechnologyLayerMap; }
162  inline void Layer::_setMask ( const Mask& mask ) { _mask = mask; }
163  inline void Layer::_setExtractMask ( const Mask& extractMask ) { _extractMask = extractMask; }
164  inline void Layer::_setNextOfTechnologyLayerMap ( Layer* layer ) { _nextOfTechnologyLayerMap = layer; }
165 
166  inline bool Layer::CompareByMask::operator() ( const Layer* lhs, const Layer* rhs ) const
167  { return (lhs?lhs->getMask():Layer::Mask()) < (rhs?rhs->getMask():Layer::Mask()); }
168 
169 
170 // -------------------------------------------------------------------
171 // Class : "Hurricane::JsonLayer".
172 
173  class JsonLayer : public JsonDBo {
174  public:
175  JsonLayer ( unsigned long flags );
176  Technology* lookupTechnology ( JsonStack&, const string& fname ) const;
177  };
178 
179 
180 } // Hurricane namespace.
181 
182 
183 INSPECTOR_P_SUPPORT(Hurricane::Layer);
184 INSPECTOR_PV_SUPPORT(Hurricane::Layer::Mask);
185 
186 
187 #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* getCut () const;
76  virtual const Layer* getTop () const;
77  virtual const Layer* getBottom () const;
78  virtual const Layer* getOpposite ( const Layer* ) const;
79  Layer* getMetalAbove ( bool useSymbolic=true ) const;
80  Layer* getMetalBelow ( bool useSymbolic=true ) const;
81  Layer* getCutAbove ( bool useSymbolic=true ) const;
82  Layer* getCutBelow ( bool useSymbolic=true ) const;
83  virtual DbU::Unit getEnclosure ( uint32_t flags ) const;
84  virtual DbU::Unit getExtentionCap () const;
85  virtual DbU::Unit getExtentionWidth () const;
86  virtual DbU::Unit getEnclosure ( const BasicLayer* layer, uint32_t flags ) const;
87  virtual DbU::Unit getExtentionCap ( const BasicLayer* layer ) const;
88  virtual DbU::Unit getExtentionWidth ( const BasicLayer* layer ) const;
89  virtual DbU::Unit getTopEnclosure ( uint32_t flags ) const;
90  virtual DbU::Unit getBottomEnclosure ( uint32_t flags ) const;
91  // Predicates
92  inline bool above ( const Layer* layer ) const;
93  inline bool below ( const Layer* layer ) const;
94  bool contains ( const Layer* layer ) const;
95  bool intersect ( const Layer* layer ) const;
96  inline bool isSymbolic () const;
97  inline bool isBlockage () const;
98  // Updators
99  void setName ( const Name& name );
100  inline void setSymbolic ( bool );
101  inline void setBlockage ( bool );
102  void setMinimalSize ( const DbU::Unit& minimalSize );
103  void setMinimalSpacing ( const DbU::Unit& minimalSpacing );
104  virtual void setEnclosure ( const BasicLayer* layer, DbU::Unit, uint32_t flags );
105  virtual void setExtentionCap ( const BasicLayer* layer, DbU::Unit );
106  virtual void setExtentionWidth ( const BasicLayer* layer, DbU::Unit );
107  // Hurricane Managment.
108  virtual void _toJson ( JsonWriter* ) const;
109  virtual string _getString () const;
110  virtual Record* _getRecord () const;
111  inline Layer* _getNextOfTechnologyLayerMap () const;
112  inline void _setMask ( const Mask& mask );
113  inline void _setExtractMask ( const Mask& extractMask );
114  inline void _setNextOfTechnologyLayerMap ( Layer* layer );
115  virtual void _onDbuChange ( float scale );
116  static const Name& _sgetName ( const Layer* );
117 
118  private:
119  // Internal: Attributes
120  Technology* _technology;
121  Name _name;
122  Mask _mask;
123  Mask _extractMask;
124  DbU::Unit _minimalSize;
125  DbU::Unit _minimalSpacing;
126  Layer* _nextOfTechnologyLayerMap;
127  bool _symbolic;
128  bool _blockage;
129 
130  protected:
131  // Internal: Constructors & Destructors.
132  Layer ( Technology* technology
133  , const Name& name
134  , const DbU::Unit& minimalSize = 0
135  , const DbU::Unit& minimalSpacing = 0
136  , const DbU::Unit& pitch = 0
137  );
138  virtual void _postCreate ();
139  virtual void _preDestroy ();
140 
141  public:
142  struct CompareByMask : public binary_function<const Layer*,const Layer*,bool> {
143  inline bool operator() ( const Layer* lhs, const Layer* rhs ) const;
144  };
145  };
146 
147 
148 // Inline Functions.
149  inline bool Layer::isSymbolic () const { return _symbolic; }
150  inline bool Layer::isBlockage () const { return _blockage; }
151  inline bool Layer::above ( const Layer* layer ) const { return _mask > layer->getMask(); }
152  inline bool Layer::below ( const Layer* layer ) const { return _mask < layer->getMask(); }
153  inline Technology* Layer::getTechnology () const { return _technology; }
154  inline const Name& Layer::getName () const { return _name; }
155  inline const Layer::Mask& Layer::getMask () const { return _mask; }
156  inline const Layer::Mask& Layer::getExtractMask () const { return _extractMask; }
157  inline const DbU::Unit& Layer::getMinimalSize () const { return _minimalSize; }
158  inline const DbU::Unit& Layer::getMinimalSpacing () const { return _minimalSpacing; }
159  inline void Layer::setSymbolic ( bool state ) { _symbolic = state; }
160  inline void Layer::setBlockage ( bool state ) { _blockage = state; }
161  inline Layer* Layer::_getNextOfTechnologyLayerMap () const { return _nextOfTechnologyLayerMap; }
162  inline void Layer::_setMask ( const Mask& mask ) { _mask = mask; }
163  inline void Layer::_setExtractMask ( const Mask& extractMask ) { _extractMask = extractMask; }
164  inline void Layer::_setNextOfTechnologyLayerMap ( Layer* layer ) { _nextOfTechnologyLayerMap = layer; }
165 
166  inline bool Layer::CompareByMask::operator() ( const Layer* lhs, const Layer* rhs ) const
167  { return (lhs?lhs->getMask():Layer::Mask()) < (rhs?rhs->getMask():Layer::Mask()); }
168 
169 
170 // -------------------------------------------------------------------
171 // Class : "Hurricane::JsonLayer".
172 
173  class JsonLayer : public JsonDBo {
174  public:
175  JsonLayer ( unsigned long flags );
176  Technology* lookupTechnology ( JsonStack&, const string& fname ) const;
177  };
178 
179 
180 } // Hurricane namespace.
181 
182 
183 INSPECTOR_P_SUPPORT(Hurricane::Layer);
184 INSPECTOR_PR_SUPPORT(Hurricane::Layer::Mask);
185 
186 
187 #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:153
const DbU::Unit & getMinimalSpacing() const
Definition: Layer.h:158
bool contains(const Layer *layer) const
-
Name description (API)
Definition: Name.h:36
+
Name description (API)
Definition: Name.h:35
Layer * getCutBelow(bool useSymbolic=true) const
virtual const Layer * getOpposite(const Layer *) const
std::int64_t Unit
Definition: DbU.h:70
@@ -74,14 +74,14 @@ $(function() {
const DbU::Unit & getMinimalSize() const
Definition: Layer.h:157
Layer * getMetalBelow(bool useSymbolic=true) const
virtual void setExtentionCap(const BasicLayer *layer, DbU::Unit)
-
Technological rules description (API).
Definition: Technology.h:66
+
Technological rules description (API).
Definition: Technology.h:62
bool below(const Layer *layer) const
Definition: Layer.h:152


- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 6de71c00..c455171e 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 d154caaf..03b731e2 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 1c40d1b4..d943a14a 100644 --- a/hurricane/doc/hurricane/html/Library_8h_source.html +++ b/hurricane/doc/hurricane/html/Library_8h_source.html @@ -47,7 +47,7 @@ $(function() {
1 // ****************************************************************************************************
2 // File: ./hurricane/Library.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_LIBRARY
21 #define HURRICANE_LIBRARY
22 
23 #include "hurricane/DBo.h"
24 #include "hurricane/Libraries.h"
25 #include "hurricane/Cell.h"
26 #include "hurricane/IntrusiveMap.h"
27 
28 namespace Hurricane {
29 
30 class DataBase;
31 
32 
33 
34 // ****************************************************************************************************
35 // Library declaration
36 // ****************************************************************************************************
37 
38 class Library : public DBo {
39 // ***********************
40 
41 // Types
42 // *****
43 
44  public: typedef DBo Inherit;
45 
46  public: class LibraryMap : public IntrusiveMap<Name, Library> {
47  // **********************************************************
48 
49  public: typedef IntrusiveMap<Name, Library> Inherit;
50 
51  public: LibraryMap();
52 
53  public: virtual Name _getKey(Library* library) const;
54  public: virtual unsigned _getHashValue(Name name) const;
55  public: virtual Library* _getNextElement(Library* library) const;
56  public: virtual void _setNextElement(Library* library, Library* nextLibrary) const;
57 
58  };
59 
60  public: class CellMap : public IntrusiveMap<Name, Cell> {
61  // ****************************************************
62 
63  public: typedef IntrusiveMap<Name, Cell> Inherit;
64 
65  public: CellMap();
66 
67  public: virtual Name _getKey(Cell* cell) const;
68  public: virtual unsigned _getHashValue(Name name) const;
69  public: virtual Cell* _getNextElement(Cell* cell) const;
70  public: virtual void _setNextElement(Cell* cell, Cell* nextCell) const;
71 
72  };
73 
74 // Attributes
75 // **********
76 
77  private: DataBase* _dataBase;
78  private: Library* _library;
79  private: Name _name;
80  private: LibraryMap _libraryMap;
81  private: CellMap _cellMap;
82  private: Library* _nextOfLibraryLibraryMap;
83 
84 // Constructors
85 // ************
86 
87  protected: Library(DataBase* dataBase, Library* library, const Name& name);
88 
89  public: static Library* create(DataBase* dataBase, const Name& name);
90  public: static Library* create(Library* library, const Name& name);
91 
92 // Accessors
93 // *********
94 
95  public: DataBase* getDataBase() const {return _dataBase;};
96  public: Library* getLibrary() const {return _library;};
97  public: const Name& getName() const {return _name;};
98  public: string getHierarchicalName () const;
99  public: Library* getLibrary(const Name& name) const {return _libraryMap.getElement(name);};
100  public: Libraries getLibraries() const {return _libraryMap.getElements();};
101  public: Cell* getCell(const Name& name) const {return _cellMap.getElement(name);};
102  public: Cells getCells() const {return _cellMap.getElements();};
103 
104 // Updators
105 // ********
106 
107  public: void setName(const Name& name);
108 
109 // Others
110 // ******
111 
112  protected: virtual void _postCreate();
113 
114  protected: virtual void _preDestroy();
115 
116  public: virtual string _getTypeName() const {return _TName("Library");};
117  public: virtual string _getString() const;
118  public: virtual Record* _getRecord() const;
119  public: virtual void _toJson( JsonWriter* ) const;
120  public: LibraryMap& _getLibraryMap() {return _libraryMap;};
121  public: CellMap& _getCellMap() {return _cellMap;};
122  public: Library* _getNextOfLibraryLibraryMap() const {return _nextOfLibraryLibraryMap;};
123 
124  public: void _setNextOfLibraryLibraryMap(Library* library) {_nextOfLibraryLibraryMap = library;};
125 
126 };
127 
128 
129 class JsonLibrary : public JsonDBo {
130 // *******************************
131 
132  public: static void initialize();
133  public: JsonLibrary(unsigned long flags);
134  public: virtual string getTypeName() const;
135  public: virtual JsonLibrary* clone(unsigned long) const;
136  public: virtual void toData(JsonStack&);
137 };
138 
139 
140 } // End of Hurricane namespace.
141 
142 
143 INSPECTOR_P_SUPPORT(Hurricane::Library);
144 INSPECTOR_P_SUPPORT(Hurricane::Library::LibraryMap);
145 INSPECTOR_P_SUPPORT(Hurricane::Library::CellMap);
146 
147 #endif // HURRICANE_LIBRARY
148 
149 
150 // ****************************************************************************************************
151 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
152 // ****************************************************************************************************
Library * getLibrary(const Name &name) const
Definition: Library.h:99
Library description (API)
Definition: Library.h:38
Cells getCells() const
Definition: Library.h:102
-
Name description (API)
Definition: Name.h:36
+
Name description (API)
Definition: Name.h:35
The model (API).
Definition: Cell.h:66
Cell * getCell(const Name &name) const
Definition: Library.h:101
DataBase object root class (API).
Definition: DBo.h:47
@@ -66,7 +66,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 4e306c82..4e360f48 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 5c56b346..276ffe79 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 aff80bfb..bafad008 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 f9b55496..df6d35d9 100644 --- a/hurricane/doc/hurricane/html/Name_8h_source.html +++ b/hurricane/doc/hurricane/html/Name_8h_source.html @@ -44,11 +44,11 @@ $(function() {
Name.h
-
1 // ****************************************************************************************************
2 // File: ./hurricane/Name.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_NAME
21 #define HURRICANE_NAME
22 
23 #include "hurricane/Commons.h"
24 #include "hurricane/Names.h"
25 
26 namespace Hurricane {
27 
28 class SharedName;
29 
30 
31 
32 // ****************************************************************************************************
33 // Name declaration
34 // ****************************************************************************************************
35 
36 class Name {
37 // *******
38 
39  private: static const Name _emptyName;
40  public: static const Name& emptyName () { return _emptyName; };
41 
42 // Attributes
43 // **********
44 
45  private: SharedName* _sharedName;
46 
47 // Constructors
48 // ************
49 
50  public: Name();
51 
52  public: Name(const char* c);
53  public: Name(const string& s);
54 
55  public: Name(const Name& name);
56 
57 // Destructor
58 // **********
59 
60  public: ~Name();
61 
62 // Operators
63 // *********
64 
65  public: Name& operator=(const Name& name);
66 
67  public: bool operator==(const Name& name) const;
68  public: bool operator!=(const Name& name) const;
69  public: bool operator<(const Name& name) const;
70  public: bool operator<=(const Name& name) const;
71  public: bool operator>(const Name& name) const;
72  public: bool operator>=(const Name& name) const;
73 
74  public: char operator[](unsigned index) const;
75 
76 // Predicates
77 // **********
78 
79  public: bool isEmpty() const;
80  public: size_t size() const;
81 
82 // Others
83 // ******
84 
85  public: string _getTypeName() const { return _TName("Name"); };
86  public: string _getString() const;
87  public: Record* _getRecord() const;
88  public: SharedName* _getSharedName() const {return _sharedName;};
89 
90 };
91 
92 
93 } // End of Hurricane namespace.
94 
95 
96 INSPECTOR_PV_SUPPORT(Hurricane::Name);
97 
98 inline void jsonWrite ( JsonWriter* w, Hurricane::Name name )
99 { w->write( getString(name).c_str() ); }
100 
101 inline void jsonWrite ( JsonWriter* w, const std::string& key, Hurricane::Name name )
102 { w->key( key ); w->write( getString(name).c_str() ); }
103 
104 
105 #endif // HURRICANE_NAME
106 
107 
108 // ****************************************************************************************************
109 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
110 // ****************************************************************************************************
bool operator==(const Name &name) const
+
1 // ****************************************************************************************************
2 // File: ./hurricane/Name.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 
21 #pragma once
22 #include "hurricane/Commons.h"
23 #include "hurricane/Names.h"
24 
25 namespace Hurricane {
26 
27 class SharedName;
28 
29 
30 
31 // ****************************************************************************************************
32 // Name declaration
33 // ****************************************************************************************************
34 
35 class Name {
36 // *******
37 
38  private: static const Name _emptyName;
39  public: static const Name& emptyName () { return _emptyName; };
40 
41 // Attributes
42 // **********
43 
44  private: SharedName* _sharedName;
45 
46 // Constructors
47 // ************
48 
49  public: Name();
50 
51  public: Name(const char* c);
52  public: Name(const string& s);
53 
54  public: Name(const Name& name);
55 
56 // Destructor
57 // **********
58 
59  public: ~Name();
60 
61 // Operators
62 // *********
63 
64  public: Name& operator=(const Name& name);
65 
66  public: bool operator==(const Name& name) const;
67  public: bool operator!=(const Name& name) const;
68  public: bool operator<(const Name& name) const;
69  public: bool operator<=(const Name& name) const;
70  public: bool operator>(const Name& name) const;
71  public: bool operator>=(const Name& name) const;
72 
73  public: char operator[](unsigned index) const;
74 
75 // Predicates
76 // **********
77 
78  public: bool isEmpty() const;
79  public: size_t size() const;
80 
81 // Others
82 // ******
83 
84  public: string _getTypeName() const { return _TName("Name"); };
85  public: string _getString() const;
86  public: Record* _getRecord() const;
87  public: SharedName* _getSharedName() const {return _sharedName;};
88 
89 };
90 
91 
92 } // End of Hurricane namespace.
93 
94 
95 //template<> inline std::string getString<Hurricane::Name&>( Hurricane::Name& data )
96 //{ return data._getString(); }
97 //
98 //template<> inline std::string getString<const Hurricane::Name&>( const Hurricane::Name& data )
99 //{ return data._getString(); }
100 //
101 //
102 //template<> inline std::string getString<Hurricane::Name>( Hurricane::Name data )
103 //{ return data._getString(); }
104 //
105 //template<> inline std::string getString<const Hurricane::Name>( const Hurricane::Name data )
106 //{ return data._getString(); }
107 //
108 //
109 //inline std::ostream& operator<< ( std::ostream& o, Hurricane::Name& d )
110 //{ return o << getString<Hurricane::Name&>(d); }
111 //
112 //inline std::ostream& operator<< ( std::ostream& o, const Hurricane::Name& d )
113 //{ return o << getString<const Hurricane::Name&>(d); }
114 //
115 //
116 //template<> inline Hurricane::Record* getRecord<Hurricane::Name&>( Hurricane::Name& data )
117 //{ return data._getRecord(); }
118 //
119 //template<> inline Hurricane::Record* getRecord<const Hurricane::Name&>( const Hurricane::Name& data )
120 //{ return data._getRecord(); }
121 
122 
123 INSPECTOR_PR_SUPPORT(Hurricane::Name);
124 
125 inline void jsonWrite ( JsonWriter* w, Hurricane::Name name )
126 { w->write( getString(name).c_str() ); }
127 
128 inline void jsonWrite ( JsonWriter* w, const std::string& key, Hurricane::Name name )
129 { w->key( key ); w->write( getString(name).c_str() ); }
130 
131 
132 // ****************************************************************************************************
133 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
134 // ****************************************************************************************************
bool operator==(const Name &name) const
bool operator!=(const Name &name) const
bool operator<(const Name &name) const
-
Name description (API)
Definition: Name.h:36
+
Name description (API)
Definition: Name.h:35
char operator[](unsigned index) const
Name & operator=(const Name &name)
bool isEmpty() const
@@ -62,7 +62,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 e8511ff0..a3ca7b57 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 33796d9c..bc3c75ac 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, 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()
+
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_PR_SUPPORT(Hurricane::Net::Type);
434 INSPECTOR_PR_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
@@ -57,7 +57,7 @@ $(function() {
Plugs getSlavePlugs() const
void setDirection(const Direction &direction)
-
Name description (API)
Definition: Name.h:36
+
Name description (API)
Definition: Name.h:35
bool isExternal() const
Definition: Net.h:215
Definition: Net.h:81
GenericFilter< Net * > NetFilter
Definition: Nets.h:51
@@ -123,7 +123,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 4619f406..d845315c 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 95fd362e..c34ba2c4 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_PR_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)
@@ -53,7 +53,7 @@ $(function() {
Property * getProperty(const Name &name) const
bool isValid() const
Definition: Occurrence.h:81
Properties getProperties() const
-
Name description (API)
Definition: Name.h:36
+
Name description (API)
Definition: Name.h:35
Cell * getMasterCell() const
bool hasProperty() const
The model (API).
Definition: Cell.h:66
@@ -76,7 +76,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 a121b771..e72ce39e 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 08cf0875..25e46833 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 34ffaa91..b952b3b5 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 95ead3eb..4b60e54c 100644 --- a/hurricane/doc/hurricane/html/Path_8h_source.html +++ b/hurricane/doc/hurricane/html/Path_8h_source.html @@ -44,7 +44,7 @@ $(function() {
Path.h
-
1 // ****************************************************************************************************
2 // File: ./hurricane/Path.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_PATH
21 #define HURRICANE_PATH
22 
23 #include "hurricane/Instances.h"
24 #include "hurricane/Transformation.h"
25 
26 namespace Hurricane {
27 
28 class Cell;
29 class SharedPath;
30 
31 
32 
33 // ****************************************************************************************************
34 // Path declaration
35 // ****************************************************************************************************
36 
37 class Path {
38 // *******
39 
40 // Attributes
41 // **********
42 
43  private: SharedPath* _sharedPath;
44 
45 // Constructors
46 // ************
47 
48  public: Path(SharedPath* sharedPath = NULL);
49  public: Path(Instance* instance);
50  public: Path(Instance* headInstance, const Path& tailPath);
51  public: Path(const Path& headPath, Instance* tailInstance);
52  public: Path(Cell* cell, const string& pathName);
53  public: Path(const Path& headPath, const Path& tailPath);
54  public: Path(const Path& path);
55 
56 // Destructor
57 // **********
58 
59  public: ~Path();
60 
61 // Operators
62 // *********
63 
64  public: Path& operator=(const Path& path);
65 
66  public: bool operator==(const Path& path) const;
67  public: bool operator!=(const Path& path) const;
68 
69  public: bool operator<(const Path& path) const; // for stl set -> less predicate
70 
71 // Accessors
72 // *********
73 
74  public: static char getNameSeparator();
75 
76  public: Instance* getHeadInstance() const;
77  public: Path getTailPath() const;
78  public: Path getHeadPath() const;
79  public: Instance* getTailInstance() const;
80  public: string getName() const;
81  public: Cell* getOwnerCell() const;
82  public: Cell* getMasterCell() const;
83  public: Instances getInstances() const;
84  public: Transformation getTransformation(const Transformation& transformation = Transformation()) const;
85 
86 // Predicates
87 // **********
88 
89  public: bool isEmpty() const;
90 
91 // Updators
92 // ********
93 
94  public: void makeEmpty();
95  public: static void setNameSeparator(char nameSeparator);
96 
97 // Others
98 // ******
99 
100  public: string getCompactString() const;
101  public: string getJsonString(unsigned long flags) const;
102  public: string _getTypeName() const { return _TName("Occurrence"); };
103  public: string _getString() const;
104  public: Record* _getRecord() const;
105 
106  public: SharedPath* _getSharedPath() const {return _sharedPath;};
107 
108 };
109 
110 
111 
112 } // End of Hurricane namespace.
113 
114 
115 INSPECTOR_PV_SUPPORT(Hurricane::Path);
116 
117 
118 #endif // HURRICANE_PATH
119 
120 
121 // ****************************************************************************************************
122 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
123 // ****************************************************************************************************
Path description (API)
Definition: Path.h:37
+
1 // ****************************************************************************************************
2 // File: ./hurricane/Path.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_PATH
21 #define HURRICANE_PATH
22 
23 #include "hurricane/Instances.h"
24 #include "hurricane/Transformation.h"
25 
26 namespace Hurricane {
27 
28 class Cell;
29 class SharedPath;
30 
31 
32 
33 // ****************************************************************************************************
34 // Path declaration
35 // ****************************************************************************************************
36 
37 class Path {
38 // *******
39 
40 // Attributes
41 // **********
42 
43  private: SharedPath* _sharedPath;
44 
45 // Constructors
46 // ************
47 
48  public: Path(SharedPath* sharedPath = NULL);
49  public: Path(Instance* instance);
50  public: Path(Instance* headInstance, const Path& tailPath);
51  public: Path(const Path& headPath, Instance* tailInstance);
52  public: Path(Cell* cell, const string& pathName);
53  public: Path(const Path& headPath, const Path& tailPath);
54  public: Path(const Path& path);
55 
56 // Destructor
57 // **********
58 
59  public: ~Path();
60 
61 // Operators
62 // *********
63 
64  public: Path& operator=(const Path& path);
65 
66  public: bool operator==(const Path& path) const;
67  public: bool operator!=(const Path& path) const;
68 
69  public: bool operator<(const Path& path) const; // for stl set -> less predicate
70 
71 // Accessors
72 // *********
73 
74  public: static char getNameSeparator();
75 
76  public: Instance* getHeadInstance() const;
77  public: Path getTailPath() const;
78  public: Path getHeadPath() const;
79  public: Instance* getTailInstance() const;
80  public: string getName() const;
81  public: Cell* getOwnerCell() const;
82  public: Cell* getMasterCell() const;
83  public: Instances getInstances() const;
84  public: Transformation getTransformation(const Transformation& transformation = Transformation()) const;
85 
86 // Predicates
87 // **********
88 
89  public: bool isEmpty() const;
90 
91 // Updators
92 // ********
93 
94  public: void makeEmpty();
95  public: static void setNameSeparator(char nameSeparator);
96 
97 // Others
98 // ******
99 
100  public: string getCompactString() const;
101  public: string getJsonString(unsigned long flags) const;
102  public: string _getTypeName() const { return _TName("Occurrence"); };
103  public: string _getString() const;
104  public: Record* _getRecord() const;
105 
106  public: SharedPath* _getSharedPath() const {return _sharedPath;};
107 
108 };
109 
110 
111 
112 } // End of Hurricane namespace.
113 
114 
115 INSPECTOR_PR_SUPPORT(Hurricane::Path);
116 
117 
118 #endif // HURRICANE_PATH
119 
120 
121 // ****************************************************************************************************
122 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
123 // ****************************************************************************************************
Path description (API)
Definition: Path.h:37
static char getNameSeparator()
Path getHeadPath() const
Path & operator=(const Path &path)
@@ -73,7 +73,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 74602a6e..852c8871 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
diff --git a/hurricane/doc/hurricane/html/PhysicalRule_8h_source.html b/hurricane/doc/hurricane/html/PhysicalRule_8h_source.html new file mode 100644 index 00000000..211722aa --- /dev/null +++ b/hurricane/doc/hurricane/html/PhysicalRule_8h_source.html @@ -0,0 +1,75 @@ + + + + + Hurricane Documentation + + + + + +

Hurricane VLSI Database

+ +
+ + + + + + + +
+
+
+
PhysicalRule.h
+
+
+
1 // -*- C++ -*-
2 //
3 // This file is part of the Coriolis Software.
4 // Copyright (c) UPMC 2009-2018, All Rights Reserved
5 //
6 // +-----------------------------------------------------------------+
7 // | C O R I O L I S |
8 // | H u r r i c a n e A n a l o g |
9 // | |
10 // | Authors : Damien Dupuis |
11 // | E-mail : Jean-Paul.Chaput@lip6.fr |
12 // | =============================================================== |
13 // | C++ Header : "./hurricane/PhysicalRule.h" |
14 // +-----------------------------------------------------------------+
15 
16 
17 #pragma once
18 #include <tuple>
19 #include "hurricane/DbU.h"
20 #include "hurricane/Rule.h"
21 
22 
23 namespace Hurricane {
24 
25 
26  class RuleStep {
27  public:
28  inline RuleStep ( Hurricane::DbU::Unit uValue );
29  inline RuleStep ( Hurricane::DbU::Unit hValue, Hurricane::DbU::Unit vValue );
30  inline Hurricane::DbU::Unit getValue () const;
31  inline Hurricane::DbU::Unit getHValue () const;
32  inline Hurricane::DbU::Unit getVValue () const;
33  inline Hurricane::DbU::Unit getThreshold () const;
34  inline void setThreshold ( Hurricane::DbU::Unit );
35  public:
36  std::string _getTypeName () const;
37  std::string _getString () const;
38  Record* _getRecord () const;
39  private:
40  Hurricane::DbU::Unit _hValue;
41  Hurricane::DbU::Unit _vValue;
42  Hurricane::DbU::Unit _threshold;
43  };
44 
45 
46  inline RuleStep::RuleStep ( Hurricane::DbU::Unit uValue )
47  : _hValue (uValue)
48  , _vValue (uValue)
49  , _threshold(0)
50  { }
51 
52  inline RuleStep::RuleStep ( Hurricane::DbU::Unit hValue, Hurricane::DbU::Unit vValue )
53  : _hValue (hValue)
54  , _vValue (vValue)
55  , _threshold(0)
56  { }
57 
58  inline Hurricane::DbU::Unit RuleStep::getValue () const { return _hValue; }
59  inline Hurricane::DbU::Unit RuleStep::getHValue () const { return _hValue; }
60  inline Hurricane::DbU::Unit RuleStep::getVValue () const { return _vValue; }
61  inline Hurricane::DbU::Unit RuleStep::getThreshold () const { return _threshold; }
62  inline void RuleStep::setThreshold ( Hurricane::DbU::Unit t ) { _threshold = t; }
63 
64 
65  class PhysicalRule : public Rule {
66  public:
67  typedef Rule Super;
68  typedef std::vector<RuleStep> Steps;
69  public:
70  inline PhysicalRule ( const Name& name, const std::string& reference );
71  inline PhysicalRule ( const PhysicalRule& rule );
72  virtual ~PhysicalRule ();
73  inline bool isDouble () const;
74  inline bool isDbU () const;
75  inline bool isSymmetric () const;
76  inline bool hasSteps () const;
77  inline void setSymmetric ( bool );
78  inline double getDoubleValue () const;
79  inline DbU::Unit getValue ( Hurricane::DbU::Unit length=0, bool hDir=true ) const;
80  inline void addValue ( double );
81  inline void addValue ( Hurricane::DbU::Unit value
82  , Hurricane::DbU::Unit maxLength );
83  inline void addValue ( Hurricane::DbU::Unit hValue
84  , Hurricane::DbU::Unit vValue
85  , Hurricane::DbU::Unit maxLength );
86  public:
87  virtual std::string _getTypeName () const;
88  virtual std::string _getString () const;
89  virtual Record* _getRecord () const;
90  public:
91  inline void _addValue ( const RuleStep& );
92  private:
93  Steps _stepsValue;
94  double _doubleValue;
95  bool _symmetric;
96  };
97 
98 
99  inline PhysicalRule::PhysicalRule ( const Name& name
100  , const std::string& reference )
101  : Rule(name,reference)
102  , _stepsValue ()
103  , _doubleValue(0.0)
104  , _symmetric (true)
105  { }
106 
107 
108  inline PhysicalRule::PhysicalRule ( const PhysicalRule& rule )
109  : Rule(rule.getName(),rule.getReference())
110  , _stepsValue (rule._stepsValue)
111  , _doubleValue(rule._doubleValue)
112  { }
113 
114 
115  inline bool PhysicalRule::isDouble () const { return _doubleValue != 0; }
116  inline bool PhysicalRule::isDbU () const { return not _stepsValue.empty(); }
117  inline bool PhysicalRule::isSymmetric () const { return _symmetric; }
118  inline bool PhysicalRule::hasSteps () const { return not _stepsValue.size() > 1; }
119  inline double PhysicalRule::getDoubleValue () const { return _doubleValue; }
120  inline void PhysicalRule::setSymmetric ( bool state ) { _symmetric = state; }
121  inline void PhysicalRule::addValue ( double value ) { _doubleValue = value; }
122 
123 
125  {
126  if (_stepsValue.empty()) return 0;
127  for ( const RuleStep& step : _stepsValue ) {
128  if (length < step.getThreshold()) {
129  return (hDir) ? step.getHValue() : step.getVValue();
130  }
131  }
132  return (hDir) ? _stepsValue.back().getHValue() : _stepsValue.back().getVValue();;
133  }
134 
135 
137  {
138  RuleStep step ( value );
139  step.setThreshold( maxLength );
140  _addValue( step );
141  }
142 
143 
145  {
146  RuleStep step ( hValue, vValue );
147  step.setThreshold( maxLength );
148  _addValue( step );
149  }
150 
151 
152  inline void PhysicalRule::_addValue ( const RuleStep& step )
153  {
154  for ( auto istep = _stepsValue.begin() ; istep != _stepsValue.end() ; ++istep ) {
155  if (step.getThreshold() < (*istep).getThreshold()) {
156  _stepsValue.insert( istep, step );
157  return;
158  }
159  }
160  _stepsValue.push_back( step );
161  }
162 
163 
164 } // Hurricane namespace.
165 
166 
167 INSPECTOR_P_SUPPORT(Hurricane::PhysicalRule);
168 INSPECTOR_PR_SUPPORT(Hurricane::RuleStep);
DbU::Unit getValue(Hurricane::DbU::Unit length=0, bool hDir=true) const
Definition: PhysicalRule.h:124
+
bool isSymmetric() const
Definition: PhysicalRule.h:117
+
double getDoubleValue() const
Definition: PhysicalRule.h:119
+
Name description (API)
Definition: Name.h:35
+
std::int64_t Unit
Definition: DbU.h:70
+
bool hasSteps() const
Definition: PhysicalRule.h:118
+
void addValue(double)
Definition: PhysicalRule.h:121
+
bool isDbU() const
Definition: PhysicalRule.h:116
+
bool isDouble() const
Definition: PhysicalRule.h:115
+
Define a rule for the technology (API).
Definition: PhysicalRule.h:65
+
The namespace dedicated to Hurricane.
Definition: Generalities.dox:5
+
void setSymmetric(bool)
Definition: PhysicalRule.h:120
+
+
+
+ + + + + +
Generated by doxygen 1.8.14 on Tue Jul 21 2020Return to top of page
+ + + + + +
Hurricane VLSI DatabaseCopyright © 2000-2016 Bull S.A. All rights reserved
+ + diff --git a/hurricane/doc/hurricane/html/Pin_8h_source.html b/hurricane/doc/hurricane/html/Pin_8h_source.html index 2cdf7d18..18b16c9f 100644 --- a/hurricane/doc/hurricane/html/Pin_8h_source.html +++ b/hurricane/doc/hurricane/html/Pin_8h_source.html @@ -44,8 +44,8 @@ $(function() {
Pin.h
-
1 // ****************************************************************************************************
2 // File: ./hurricane/Pin.h
3 // Authors: C. Alexandre
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_PIN
21 #define HURRICANE_PIN
22 
23 #include "hurricane/Contact.h"
24 #include "hurricane/Pins.h"
25 
26 namespace Hurricane {
27 
28 
29 
30 // ****************************************************************************************************
31 // Pin declaration
32 // ****************************************************************************************************
33 
34 class Pin : public Contact {
35 // ***********************
36 
37 // Types
38 // *****
39 
40  public: typedef Contact Inherit;
41 
42  public: class AccessDirection {
43  // **************************
44 
45  public: enum Code {UNDEFINED=0, NORTH=1, SOUTH=2, EAST=3, WEST=4};
46 
47  private: Code _code;
48 
49  public: AccessDirection(const Code& code = UNDEFINED);
50  public: AccessDirection(const AccessDirection& accessDirection);
51 
52  public: AccessDirection& operator=(const AccessDirection& accessDirection);
53 
54  public: operator const Code&() const {return _code;};
55 
56  public: const Code& getCode() const {return _code;};
57 
58  public: string _getTypeName() const { return _TName("Pin::AccessDirection"); };
59  public: string _getString() const;
60  public: Record* _getRecord() const;
61 
62  };
63 
64  public: class PlacementStatus {
65  // **************************
66 
67  public: enum Code {UNPLACED=0, PLACED=1, FIXED=2};
68 
69  private: Code _code;
70 
71  public: PlacementStatus(const Code& code = UNPLACED);
72  public: PlacementStatus(const PlacementStatus& placementstatus);
73 
74  public: PlacementStatus& operator=(const PlacementStatus& placementstatus);
75 
76  public: operator const Code&() const {return _code;};
77 
78  public: const Code& getCode() const {return _code;};
79 
80  public: string _getTypeName() const { return _TName("Pin::PlacementStatus"); };
81  public: string _getString() const;
82  public: Record* _getRecord() const;
83 
84  };
85 
86 // Attributes
87 // **********
88 
89  private: Name _name;
90  private: AccessDirection _accessDirection;
91  private: PlacementStatus _placementStatus;
92  private: Pin* _nextOfCellPinMap;
93 
94 // Constructors
95 // ************
96 
97  protected: Pin( Net* net
98  , const Name& name
99  , const AccessDirection& accessDirection
100  , const PlacementStatus& placementStatus
101  , const Layer* layer
102  , const DbU::Unit& x
103  , const DbU::Unit& y
104  , const DbU::Unit& width = 0
105  , const DbU::Unit& height = 0
106  );
107  public: static Pin* create( Net* net
108  , const Name& name
109  , const AccessDirection& accessDirection
110  , const PlacementStatus& placementStatus
111  , const Layer* layer
112  , const DbU::Unit& x
113  , const DbU::Unit& y
114  , const DbU::Unit& width = 0
115  , const DbU::Unit& height = 0
116  );
117 
118 // Accessors
119 // *********
120 
121  public: const Name& getName() const {return _name;};
122  public: const AccessDirection& getAccessDirection() const {return _accessDirection;};
123  public: const PlacementStatus& getPlacementStatus() const {return _placementStatus;};
124 
125 // Predicates
126 // **********
127 
128  public: bool isUnplaced() const {return _placementStatus == PlacementStatus::UNPLACED;};
129  public: bool isPlaced() const {return _placementStatus == PlacementStatus::PLACED;};
130  public: bool isFixed() const {return _placementStatus == PlacementStatus::FIXED;};
131 
132 // Updators
133 // ********
134 
135  public: void setPlacementStatus(const PlacementStatus& placementstatus);
136 
137 // Others
138 // ******
139 
140  protected: virtual void _postCreate();
141 
142  protected: virtual void _preDestroy();
143 
144  public: virtual string _getTypeName() const {return _TName("Pin");};
145  public: virtual string _getString() const;
146  public: virtual Record* _getRecord() const;
147 
148  public: Pin* _getNextOfCellPinMap() const {return _nextOfCellPinMap;};
149 
150  public: void _setNextOfCellPinMap(Pin* pin) {_nextOfCellPinMap = pin;};
151 
152 };
153 
154 
155 } // End of Hurricane namespace.
156 
157 
158 INSPECTOR_P_SUPPORT(Hurricane::Pin);
159 INSPECTOR_PV_SUPPORT(Hurricane::Pin::AccessDirection);
160 INSPECTOR_PV_SUPPORT(Hurricane::Pin::PlacementStatus);
161 
162 
163 #endif // HURRICANE_PIN
164 
165 // ****************************************************************************************************
166 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
167 // ****************************************************************************************************
Pin description (API)
Definition: Pin.h:34
-
Name description (API)
Definition: Name.h:36
+
1 // ****************************************************************************************************
2 // File: ./hurricane/Pin.h
3 // Authors: C. Alexandre
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_PIN
21 #define HURRICANE_PIN
22 
23 #include "hurricane/Contact.h"
24 #include "hurricane/Pins.h"
25 
26 namespace Hurricane {
27 
28 
29 
30 // ****************************************************************************************************
31 // Pin declaration
32 // ****************************************************************************************************
33 
34 class Pin : public Contact {
35 // ***********************
36 
37 // Types
38 // *****
39 
40  public: typedef Contact Inherit;
41 
42  public: class AccessDirection {
43  // **************************
44 
45  public: enum Code {UNDEFINED=0, NORTH=1, SOUTH=2, EAST=3, WEST=4};
46 
47  private: Code _code;
48 
49  public: AccessDirection(const Code& code = UNDEFINED);
50  public: AccessDirection(const AccessDirection& accessDirection);
51 
52  public: AccessDirection& operator=(const AccessDirection& accessDirection);
53 
54  public: operator const Code&() const {return _code;};
55 
56  public: const Code& getCode() const {return _code;};
57 
58  public: string _getTypeName() const { return _TName("Pin::AccessDirection"); };
59  public: string _getString() const;
60  public: Record* _getRecord() const;
61 
62  };
63 
64  public: class PlacementStatus {
65  // **************************
66 
67  public: enum Code {UNPLACED=0, PLACED=1, FIXED=2};
68 
69  private: Code _code;
70 
71  public: PlacementStatus(const Code& code = UNPLACED);
72  public: PlacementStatus(const PlacementStatus& placementstatus);
73 
74  public: PlacementStatus& operator=(const PlacementStatus& placementstatus);
75 
76  public: operator const Code&() const {return _code;};
77 
78  public: const Code& getCode() const {return _code;};
79 
80  public: string _getTypeName() const { return _TName("Pin::PlacementStatus"); };
81  public: string _getString() const;
82  public: Record* _getRecord() const;
83 
84  };
85 
86 // Attributes
87 // **********
88 
89  private: Name _name;
90  private: AccessDirection _accessDirection;
91  private: PlacementStatus _placementStatus;
92  private: Pin* _nextOfCellPinMap;
93 
94 // Constructors
95 // ************
96 
97  protected: Pin( Net* net
98  , const Name& name
99  , const AccessDirection& accessDirection
100  , const PlacementStatus& placementStatus
101  , const Layer* layer
102  , const DbU::Unit& x
103  , const DbU::Unit& y
104  , const DbU::Unit& width = 0
105  , const DbU::Unit& height = 0
106  );
107  public: static Pin* create( Net* net
108  , const Name& name
109  , const AccessDirection& accessDirection
110  , const PlacementStatus& placementStatus
111  , const Layer* layer
112  , const DbU::Unit& x
113  , const DbU::Unit& y
114  , const DbU::Unit& width = 0
115  , const DbU::Unit& height = 0
116  );
117 
118 // Accessors
119 // *********
120 
121  public: const Name& getName() const {return _name;};
122  public: const AccessDirection& getAccessDirection() const {return _accessDirection;};
123  public: const PlacementStatus& getPlacementStatus() const {return _placementStatus;};
124 
125 // Predicates
126 // **********
127 
128  public: bool isUnplaced() const {return _placementStatus == PlacementStatus::UNPLACED;};
129  public: bool isPlaced() const {return _placementStatus == PlacementStatus::PLACED;};
130  public: bool isFixed() const {return _placementStatus == PlacementStatus::FIXED;};
131 
132 // Updators
133 // ********
134 
135  public: void setPlacementStatus(const PlacementStatus& placementstatus);
136 
137 // Others
138 // ******
139 
140  protected: virtual void _postCreate();
141 
142  protected: virtual void _preDestroy();
143 
144  public: virtual string _getTypeName() const {return _TName("Pin");};
145  public: virtual string _getString() const;
146  public: virtual Record* _getRecord() const;
147 
148  public: Pin* _getNextOfCellPinMap() const {return _nextOfCellPinMap;};
149 
150  public: void _setNextOfCellPinMap(Pin* pin) {_nextOfCellPinMap = pin;};
151 
152 };
153 
154 
155 } // End of Hurricane namespace.
156 
157 
158 INSPECTOR_P_SUPPORT(Hurricane::Pin);
159 INSPECTOR_PR_SUPPORT(Hurricane::Pin::AccessDirection);
160 INSPECTOR_PR_SUPPORT(Hurricane::Pin::PlacementStatus);
161 
162 
163 #endif // HURRICANE_PIN
164 
165 // ****************************************************************************************************
166 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
167 // ****************************************************************************************************
Pin description (API)
Definition: Pin.h:34
+
Name description (API)
Definition: Name.h:35
Contact description (API)
Definition: Contact.h:33
std::int64_t Unit
Definition: DbU.h:70
DataBase object root class (API).
Definition: DBo.h:47
@@ -57,7 +57,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 1e93f6c3..8ac00ddd 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 e9e3c8b2..9ac7c251 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 561d43e2..c79c4746 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 c052dba5..ed0a57cd 100644 --- a/hurricane/doc/hurricane/html/Point_8h_source.html +++ b/hurricane/doc/hurricane/html/Point_8h_source.html @@ -44,7 +44,7 @@ $(function() {
Point.h
-
1 // ****************************************************************************************************
2 // File: ./hurricane/Point.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_POINT
21 #define HURRICANE_POINT
22 
23 #include "hurricane/DbU.h"
24 
25 namespace Hurricane {
26 
27 
28 // ****************************************************************************************************
29 // Point declaration
30 // ****************************************************************************************************
31 
32 class Point {
33 // ********
34 
35 // Attributes
36 // **********
37 
38  private: DbU::Unit _x;
39  private: DbU::Unit _y;
40 
41 // Constructors
42 // ************
43 
44  public: Point();
45 
46  public: Point(const DbU::Unit& x, const DbU::Unit& y);
47 
48  public: Point(const Point& point);
49 
50 // Operators
51 // *********
52 
53  public: Point& operator=(const Point& point);
54 
55  public: bool operator==(const Point& point) const;
56  public: bool operator!=(const Point& point) const;
57 
58  public: Point operator+(const Point& point) const;
59  public: Point operator-(const Point& point) const;
60  public: Point& operator+=(const Point& point);
61  public: Point& operator-=(const Point& point);
62 
63 // Accessors
64 // *********
65 
66  public: const DbU::Unit& getX() const {return _x;};
67  public: const DbU::Unit& getY() const {return _y;};
68  public: DbU::Unit manhattanDistance(const Point pt) const
69  { return abs(_x - pt.getX()) + abs(_y - pt.getY()); }
70 
71 // Updators
72 // ********
73 
74  public: void setX(const DbU::Unit& x) {_x = x;};
75  public: void setY(const DbU::Unit& y) {_y = y;};
76  public: Point& translate(const DbU::Unit& dx, const DbU::Unit& dy);
77  public: Point getTranslated(const DbU::Unit& dx, const DbU::Unit& dy) const;
78 
79 // Others
80 // ******
81 
82  public: string _getTypeName() const { return _TName("Point"); };
83  public: string _getString() const;
84  public: Record* _getRecord() const;
85  public: void toJson(JsonWriter*) const;
86 
87 };
88 
89 
90 class JsonPoint : public JsonObject {
91 // **********************************
92 
93  public: static void initialize();
94  public: JsonPoint(unsigned long);
95  public: virtual string getTypeName() const;
96  public: virtual JsonPoint* clone(unsigned long) const;
97  public: virtual void toData(JsonStack&);
98 };
99 
100 
101 } // End of Hurricane namespace.
102 
103 INSPECTOR_PV_SUPPORT(Hurricane::Point);
104 
105 
106 #endif // HURRICANE_POINT
107 
108 
109 // ****************************************************************************************************
110 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
111 // ****************************************************************************************************
Point & translate(const DbU::Unit &dx, const DbU::Unit &dy)
+
1 // ****************************************************************************************************
2 // File: ./hurricane/Point.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_POINT
21 #define HURRICANE_POINT
22 
23 #include "hurricane/DbU.h"
24 
25 namespace Hurricane {
26 
27 
28 // ****************************************************************************************************
29 // Point declaration
30 // ****************************************************************************************************
31 
32 class Point {
33 // ********
34 
35 // Attributes
36 // **********
37 
38  private: DbU::Unit _x;
39  private: DbU::Unit _y;
40 
41 // Constructors
42 // ************
43 
44  public: Point();
45 
46  public: Point(const DbU::Unit& x, const DbU::Unit& y);
47 
48  public: Point(const Point& point);
49 
50 // Operators
51 // *********
52 
53  public: Point& operator=(const Point& point);
54 
55  public: bool operator==(const Point& point) const;
56  public: bool operator!=(const Point& point) const;
57 
58  public: Point operator+(const Point& point) const;
59  public: Point operator-(const Point& point) const;
60  public: Point& operator+=(const Point& point);
61  public: Point& operator-=(const Point& point);
62 
63 // Accessors
64 // *********
65 
66  public: const DbU::Unit& getX() const {return _x;};
67  public: const DbU::Unit& getY() const {return _y;};
68  public: DbU::Unit manhattanDistance(const Point pt) const
69  { return abs(_x - pt.getX()) + abs(_y - pt.getY()); }
70 
71 // Updators
72 // ********
73 
74  public: void setX(const DbU::Unit& x) {_x = x;};
75  public: void setY(const DbU::Unit& y) {_y = y;};
76  public: Point& translate(const DbU::Unit& dx, const DbU::Unit& dy);
77  public: Point getTranslated(const DbU::Unit& dx, const DbU::Unit& dy) const;
78 
79 // Others
80 // ******
81 
82  public: string _getTypeName() const { return _TName("Point"); };
83  public: string _getString() const;
84  public: Record* _getRecord() const;
85  public: void toJson(JsonWriter*) const;
86 
87 };
88 
89 
90 class JsonPoint : public JsonObject {
91 // **********************************
92 
93  public: static void initialize();
94  public: JsonPoint(unsigned long);
95  public: virtual string getTypeName() const;
96  public: virtual JsonPoint* clone(unsigned long) const;
97  public: virtual void toData(JsonStack&);
98 };
99 
100 
101 } // End of Hurricane namespace.
102 
103 INSPECTOR_PR_SUPPORT(Hurricane::Point);
104 
105 
106 #endif // HURRICANE_POINT
107 
108 
109 // ****************************************************************************************************
110 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
111 // ****************************************************************************************************
Point & translate(const DbU::Unit &dx, const DbU::Unit &dy)
bool operator==(const Point &point) const
Point & operator=(const Point &point)
std::int64_t Unit
Definition: DbU.h:70
@@ -59,7 +59,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 4ec098ed..1a0fd7fb 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 4ca6b1e9..4228620c 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 ad6283fd..b68d6682 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 5e628bc3..277d564d 100644 --- a/hurricane/doc/hurricane/html/Property_8h_source.html +++ b/hurricane/doc/hurricane/html/Property_8h_source.html @@ -44,12 +44,12 @@ $(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 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
+
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&>(_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
virtual void destroy()
-
Name description (API)
Definition: Name.h:36
+
Name description (API)
Definition: Name.h:35
virtual void onCapturedBy(DBo *owner)=0
SharedProperty description (API)
Definition: Property.h:388
DataBase object root class (API).
Definition: DBo.h:47
@@ -66,7 +66,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 c0b86590..6042e1f0 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 f0d236d3..dab6437c 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 51c59df0..4476eadb 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 da77ffa9..27b854c4 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 ad02d33a..0409596f 100644 --- a/hurricane/doc/hurricane/html/RegularLayer_8h_source.html +++ b/hurricane/doc/hurricane/html/RegularLayer_8h_source.html @@ -46,7 +46,7 @@ $(function() {
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 : Jean-Paul Chaput |
27 // | E-mail : Jean-Paul.Chaput@lip6.fr |
28 // | =============================================================== |
29 // | C++ Header : "./hurricane/RegularLayer.h" |
30 // +-----------------------------------------------------------------+
31 
32 
33 #ifndef HURRICANE_REGULAR_LAYER_H
34 #define HURRICANE_REGULAR_LAYER_H
35 
36 #include "hurricane/Layer.h"
37 #include "hurricane/RegularLayers.h"
38 
39 
40 namespace Hurricane {
41 
42 // -------------------------------------------------------------------
43 // Class : "Hurricane::RegularLayer".
44 
45  class RegularLayer : public Layer {
46  public:
47  typedef Layer Super;
48 
49  public:
50  // Constructor.
51  static RegularLayer* create ( Technology* technology
52  , const Name& name
53  , BasicLayer* layer
54  );
55  // Accessors.
56  virtual BasicLayers getBasicLayers () const;
57  inline BasicLayer* getBasicLayer () const;
58  virtual const Layer* getBlockageLayer () const;
59  virtual const Layer* getTop () const;
60  virtual const Layer* getBottom () const;
61  virtual const Layer* getOpposite ( const Layer* ) const;
62  virtual DbU::Unit getEnclosure ( uint32_t flags=0 ) const;
63  virtual DbU::Unit getExtentionCap () const;
64  virtual DbU::Unit getExtentionWidth () const;
65  virtual DbU::Unit getEnclosure ( const BasicLayer* layer, uint32_t flags=0 ) const;
66  virtual DbU::Unit getExtentionCap ( const BasicLayer* layer ) const;
67  virtual DbU::Unit getExtentionWidth ( const BasicLayer* layer ) const;
68  // Updators
69  void setBasicLayer ( BasicLayer* layer );
70  virtual void setEnclosure ( const BasicLayer* layer, DbU::Unit enclosure, uint32_t flags=0 );
71  virtual void setExtentionCap ( const BasicLayer* layer, DbU::Unit cap );
72  virtual void setExtentionWidth ( const BasicLayer* layer, DbU::Unit width );
73  // Hurricane Managment.
74  virtual void _toJson ( JsonWriter* ) const;
75  virtual void _onDbuChange ( float scale );
76  virtual string _getTypeName () const;
77  virtual string _getString () const;
78  virtual Record* _getRecord () const;
79 
80  private:
81  // Internal: Attributes
82  BasicLayer* _basicLayer;
83  DbU::Unit _enclosure;
84  DbU::Unit _extentionCap;
85  DbU::Unit _extentionWidth;
86 
87  protected:
88  // Internal: Constructors & Destructors.
89  RegularLayer ( Technology* technology
90  , const Name& name
91  );
92  };
93 
94 
95 // Inline Functions.
96  inline BasicLayer* RegularLayer::getBasicLayer () const { return _basicLayer; }
97 
98 
99 // -------------------------------------------------------------------
100 // Class : "Hurricane::JsonRegularLayer".
101 
102  class JsonRegularLayer : public JsonLayer {
103  public:
104  static void initialize ();
105  JsonRegularLayer ( unsigned long flags );
106  ~JsonRegularLayer ();
107  virtual string getTypeName () const;
108  virtual JsonRegularLayer* clone ( unsigned long ) const;
109  virtual void toData ( JsonStack& );
110  };
111 
112 
113 } // Hurricane namespace.
114 
115 INSPECTOR_P_SUPPORT(Hurricane::RegularLayer);
116 
117 #endif // HURRICANE_REGULAR_LAYER_H
RegularLayer description (API)
Definition: RegularLayer.h:45
BasicLayer description (API)
Definition: BasicLayer.h:44
-
Name description (API)
Definition: Name.h:36
+
Name description (API)
Definition: Name.h:35
std::int64_t Unit
Definition: DbU.h:70
DataBase object root class (API).
Definition: DBo.h:47
BasicLayer * getBasicLayer() const
Definition: RegularLayer.h:96
@@ -54,13 +54,13 @@ $(function() {
JSON Parser Stack.
Definition: JsonObject.h:249
Layer description (API)
Definition: Layer.h:52
The namespace dedicated to Hurricane.
Definition: Generalities.dox:5
-
Technological rules description (API).
Definition: Technology.h:66
+
Technological rules description (API).
Definition: Technology.h:62


- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 17d205c7..05bf5ac6 100644 --- a/hurricane/doc/hurricane/html/Relation_8h_source.html +++ b/hurricane/doc/hurricane/html/Relation_8h_source.html @@ -46,7 +46,7 @@ $(function() {
1 // ****************************************************************************************************
2 // File: ./hurricane/Relation.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_RELATION_H
21 #define HURRICANE_RELATION_H
22 
23 #include "hurricane/Property.h"
24 
25 namespace Hurricane {
26 
27 
28 
29 // ****************************************************************************************************
30 // Relation declaration
31 // ****************************************************************************************************
32 
33 class Relation : public SharedProperty {
34 // ***********************************
35 
36 // Types
37 // *****
38 
39  public: typedef SharedProperty Inherit;
40 
41 // Attributes
42 // **********
43 
44  private: DBo* _masterOwner;
45 
46 // Constructors
47 // ************
48 
49  protected: Relation(DBo* masterOwner);
50 
51 // Accessors
52 // *********
53 
54  public: DBo* getMasterOwner() const {return _masterOwner;};
55  public: DBos getSlaveOwners() const;
56 
57 // Managers
58 // ********
59 
60  public: virtual void onReleasedBy(DBo* owner);
61 
62 // Others
63 // ******
64 
65  public: void _setMasterOwner(DBo* owner) {_masterOwner=owner; }
66  protected: virtual void _postCreate();
67 
68  public: virtual string _getTypeName() const {return _TName("Relation");};
69  public: virtual string _getString() const;
70  public: virtual Record* _getRecord() const;
71 
72 };
73 
74 
75 
76 // ****************************************************************************************************
77 // StandardRelation declaration
78 // ****************************************************************************************************
79 
80 class StandardRelation : public Relation {
81 // *************************************
82 
83 // Types
84 // *****
85 
86  public: typedef Relation Inherit;
87 
88 // Attributes
89 // **********
90 
91  private: Name _name;
92 
93 // Constructors
94 // ************
95 
96  protected: StandardRelation(DBo* masterOwner, const Name& name);
97 
98  public: static StandardRelation* create(DBo* masterOwner, const Name& name);
99 
100 // Accessors
101 // *********
102 
103  public: virtual Name getName() const {return _name;};
104 
105 // Others
106 // ******
107 
108  public: virtual string _getTypeName() const {return _TName("StandardRelation");};
109  public: virtual string _getString() const;
110  public: virtual Record* _getRecord() const;
111 
112 };
113 
114 
115 } // End of Hurricane namespace.
116 
117 
118 #endif // HURRICANE_RELATION
119 
120 
121 // ****************************************************************************************************
122 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
123 // ****************************************************************************************************
Relation description (API)
Definition: Relation.h:33
StandardRelation description (API)
Definition: Relation.h:80
-
Name description (API)
Definition: Name.h:36
+
Name description (API)
Definition: Name.h:35
SharedProperty description (API)
Definition: Property.h:388
DataBase object root class (API).
Definition: DBo.h:47
Generic Collection auto-pointer.
Definition: Collection.h:28
@@ -56,7 +56,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 4c8283f1..f12c9e86 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 e4001fe9..f341f699 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 b1a65ab8..a9cc3d60 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 4b5e6ff2..16ce2790 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 b5410a81..642699c9 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 e25b3f94..87812079 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 9282679b..08477a6b 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 9e870228..762aeb4b 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
diff --git a/hurricane/doc/hurricane/html/SoC.css b/hurricane/doc/hurricane/html/SoC.css index 44bae898..a610f444 100644 --- a/hurricane/doc/hurricane/html/SoC.css +++ b/hurricane/doc/hurricane/html/SoC.css @@ -610,6 +610,16 @@ margin-right: 5% } + div.fragment a.code:link, + div.fragment a.code:visited, + div.fragment a.codeRef:link, + div.fragment a.codeRef:visited { + text-decoration: none; + font-weight: bold; + color: black; + border: none; + } + div.line { white-space: pre; padding: 0pt; diff --git a/hurricane/doc/hurricane/html/Tabulation_8h_source.html b/hurricane/doc/hurricane/html/Tabulation_8h_source.html index 91b8f845..1a2b8d88 100644 --- a/hurricane/doc/hurricane/html/Tabulation_8h_source.html +++ b/hurricane/doc/hurricane/html/Tabulation_8h_source.html @@ -44,7 +44,7 @@ $(function() {
Tabulation.h
-
1 // ****************************************************************************************************
2 // File: ./hurricane/Tabulation.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_TABULATION_H
21 #define HURRICANE_TABULATION_H
22 
23 #ifndef HURRICANE_COMMONS_H
24 #error "Tabulation.h must be included through Commons.h"
25 #endif
26 
27 namespace Hurricane {
28 
29 
30 
31 // ****************************************************************************************************
32 // Tabulation declaration
33 // ****************************************************************************************************
34 
35 class Tabulation {
36 // *************
37 
38 // Attributes
39 // **********
40 
41  private: string _s;
42  private: unsigned _n;
43 
44 // Constructors
45 // ************
46 
47  public: Tabulation(const string& s = " ");
48 
49  public: Tabulation(const Tabulation& tabulation);
50 
51 // Destructor
52 // **********
53 
54  public: ~Tabulation();
55 
56 // Operators
57 // *********
58 
59  public: Tabulation& operator=(const Tabulation& tabulation);
60 
61  public: Tabulation& operator++();
62  public: Tabulation operator++(int);
63  public: Tabulation& operator--();
64  public: Tabulation operator--(int);
65 
66 // Others
67 // ******
68 
69  public: unsigned getWidth() const { return _s.size()*_n; };
70  public: string _getTypeName() const { return _TName("Tabulation"); };
71  public: string _getString() const;
72  public: Record* _getRecord() const { return NULL; };
73  public: Slot* _getSlot() const { return NULL; };
74 
75 };
76 
77 
78 
79 // ****************************************************************************************************
80 // Variables
81 // ****************************************************************************************************
82 
83 extern Tabulation tab;
84 
85 
86 
87 } // End of Hurricane namespace.
88 
89 
90 INSPECTOR_PV_SUPPORT(Hurricane::Tabulation);
91 
92 
93 
94 // ****************************************************************************************************
95 // Generic functions
96 // ****************************************************************************************************
97 
98 #endif // HURRICANE_TABULATION_H
99 
100 
101 // ****************************************************************************************************
102 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
103 // ****************************************************************************************************
Tabulation & operator--()
+
1 // ****************************************************************************************************
2 // File: ./hurricane/Tabulation.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_TABULATION_H
21 #define HURRICANE_TABULATION_H
22 
23 #ifndef HURRICANE_COMMONS_H
24 #error "Tabulation.h must be included through Commons.h"
25 #endif
26 
27 namespace Hurricane {
28 
29 
30 
31 // ****************************************************************************************************
32 // Tabulation declaration
33 // ****************************************************************************************************
34 
35 class Tabulation {
36 // *************
37 
38 // Attributes
39 // **********
40 
41  private: string _s;
42  private: unsigned _n;
43 
44 // Constructors
45 // ************
46 
47  public: Tabulation(const string& s = " ");
48 
49  public: Tabulation(const Tabulation& tabulation);
50 
51 // Destructor
52 // **********
53 
54  public: ~Tabulation();
55 
56 // Operators
57 // *********
58 
59  public: Tabulation& operator=(const Tabulation& tabulation);
60 
61  public: Tabulation& operator++();
62  public: Tabulation operator++(int);
63  public: Tabulation& operator--();
64  public: Tabulation operator--(int);
65 
66 // Others
67 // ******
68 
69  public: unsigned getWidth() const { return _s.size()*_n; };
70  public: string _getTypeName() const { return _TName("Tabulation"); };
71  public: string _getString() const;
72  public: Record* _getRecord() const { return NULL; };
73  public: Slot* _getSlot() const { return NULL; };
74 
75 };
76 
77 
78 
79 // ****************************************************************************************************
80 // Variables
81 // ****************************************************************************************************
82 
83 extern Tabulation tab;
84 
85 
86 
87 } // End of Hurricane namespace.
88 
89 
90 INSPECTOR_PR_SUPPORT(Hurricane::Tabulation);
91 
92 
93 
94 // ****************************************************************************************************
95 // Generic functions
96 // ****************************************************************************************************
97 
98 #endif // HURRICANE_TABULATION_H
99 
100 
101 // ****************************************************************************************************
102 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
103 // ****************************************************************************************************
Tabulation & operator--()
Tabulation & operator=(const Tabulation &tabulation)
Tabulation(const string &s=" ")
@@ -56,7 +56,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 0fb76ba0..eba55eee 100644 --- a/hurricane/doc/hurricane/html/Technology_8h_source.html +++ b/hurricane/doc/hurricane/html/Technology_8h_source.html @@ -44,34 +44,37 @@ $(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 #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
+
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 #pragma once
33 #include <set>
34 #include <map>
35 #include "hurricane/Mask.h"
36 #include "hurricane/DBo.h"
37 #include "hurricane/Layer.h"
38 #include "hurricane/BasicLayers.h"
39 #include "hurricane/RegularLayers.h"
40 #include "hurricane/ViaLayers.h"
41 #include "hurricane/IntrusiveMap.h"
42 #include "hurricane/DeviceDescriptor.h"
43 #include "hurricane/ModelDescriptor.h"
44 #include "hurricane/Rule.h"
45 #include "hurricane/PhysicalRule.h"
46 
47 
48 namespace Hurricane {
49 
50  using std::set;
51  using std::multimap;
52 
53  class DataBase;
54  class BasicLayer;
55  class RegularLayer;
56  class ViaLayer;
57 
58 
59 // -------------------------------------------------------------------
60 // Class : "Hurricane::Technology".
61 
62  class Technology : public DBo {
63 
64  public:
65  typedef DBo Super;
66  typedef multimap<Layer::Mask,Layer*> LayerMaskMap;
67  typedef set<DeviceDescriptor*, DeviceDescriptor::DeviceDescriptorComp> DeviceDescriptors;
68  typedef set<ModelDescriptor* , ModelDescriptor::ModelDescriptorComp> ModelDescriptors;
69  public:
70  struct RuleNameCompare {
71  inline bool operator() ( const PhysicalRule* rule1 , const PhysicalRule* rule2 ) const
72  { return rule1->getName() < rule2->getName(); }
73  inline bool operator() ( const Rule* rule1 , const Rule* rule2 ) const
74  { return rule1->getName() < rule2->getName(); }
75  };
76  public:
77  typedef std::pair<const Hurricane::Layer*, const Hurricane::Layer*> LayerPair;
78  typedef std::set<PhysicalRule* , RuleNameCompare> UnitRules;
79  typedef std::set<PhysicalRule* , RuleNameCompare> PhysicalRules;
80  typedef std::map<const Hurricane::Layer* , PhysicalRules> OneLayerRules;
81  typedef std::map<LayerPair , PhysicalRules> TwoLayersRules;
82 
83  public:
84  // Sub-class : LayerMap.
85  class LayerMap : public IntrusiveMap<Name,Layer> {
86  public:
87  typedef IntrusiveMap<Name,Layer> Super;
88  public:
89  LayerMap ();
90  virtual Name _getKey ( Layer* ) const;
91  virtual unsigned _getHashValue ( Name ) const;
92  virtual Layer* _getNextElement ( Layer* ) const;
93  virtual void _setNextElement ( Layer* , Layer* nextLayer) const;
94  };
95 
96  public:
97  // Constructor.
98  static Technology* create ( DataBase* , const Name& );
99  // Accessors.
100  inline bool isMetal ( const Layer* ) const;
101  inline DataBase* getDataBase () const;
102  inline const Name& getName () const;
103  inline Layer* getLayer ( const Name& ) const;
104  BasicLayer* getBasicLayer ( const Name& ) const;
105  RegularLayer* getRegularLayer ( const Name& ) const;
106  ViaLayer* getViaLayer ( const Name& ) const;
107  inline Layers getLayers () const;
108  BasicLayers getBasicLayers () const;
109  BasicLayers getBasicLayers ( const Layer::Mask& ) const;
110  RegularLayers getRegularLayers () const;
111  ViaLayers getViaLayers () const;
112  Layer* getLayer ( const Layer::Mask&, bool useSymbolic=true ) const;
113  Layer* getMetalAbove ( const Layer*, bool useSymbolic=true ) const;
114  Layer* getMetalBelow ( const Layer*, bool useSymbolic=true ) const;
115  Layer* getCutAbove ( const Layer*, bool useSymbolic=true ) const;
116  Layer* getCutBelow ( const Layer*, bool useSymbolic=true ) const;
117  Layer* getViaBetween ( const Layer*, const Layer*, bool useSymbolic=true ) const;
118  Layer* getNthMetal ( int ) const;
119  Layer* getNthCut ( int ) const;
120  DeviceDescriptor* getDeviceDescriptor ( const Name& );
121  ModelDescriptor* getModelDescriptor (const Name& );
122  inline ModelDescriptors& getModelDescriptors ();
123  PhysicalRule* getUnitRule ( std::string ruleName ) const;
124  PhysicalRule* getPhysicalRule ( std::string ruleName ) const;
125  PhysicalRule* getPhysicalRule ( std::string ruleName
126  , std::string layerName ) const;
127  PhysicalRule* getPhysicalRule ( std::string ruleName
128  , std::string layer1Name
129  , std::string layer2Name ) const;
130  inline const UnitRules& getUnitRules () const;
131  inline const PhysicalRules& getNoLayerRules () const;
132  inline const OneLayerRules& getOneLayerRules () const;
133  inline const TwoLayersRules& getTwoLayersRules () const;
134  void toDtr ( std::ostream& );
135  inline void setName ( const std::string& name );
136  // Updators.
137  void setName ( const Name& );
138  bool setSymbolicLayer ( const Name& );
139  bool setSymbolicLayer ( const Layer* );
140  DeviceDescriptor* addDeviceDescriptor ( const Name& );
141  ModelDescriptor* addModelDescriptor ( const Name& name
142  , const Name& simul
143  , const Name& model
144  , std::string netlist
145  , const Name& name_n
146  , const Name& name_p
147  , bool precise );
148  PhysicalRule* addUnitRule ( std::string ruleName
149  , std::string reference );
150  PhysicalRule* addPhysicalRule ( std::string ruleName
151  , std::string reference );
152  void _addPhysicalRule ( std::string layerName
153  , PhysicalRule* );
154  PhysicalRule* addPhysicalRule ( std::string ruleName
155  , std::string layerName
156  , std::string reference);
157  PhysicalRule* addPhysicalRule ( std::string ruleName
158  , std::string layer1Name
159  , std::string layer2Name
160  , std::string reference );
161  // Others.
162  inline LayerMap& _getLayerMap ();
163  inline LayerMaskMap& _getLayerMaskMap ();
164  void _insertInLayerMaskMap ( Layer* );
165  void _removeFromLayerMaskMap ( Layer* );
166  inline Layer::Mask& _getCutMask ();
167  inline Layer::Mask& _getMetalMask ();
168  void _onDbuChange ( float scale );
169  // Hurricane Managment.
170  virtual void _toJson ( JsonWriter* ) const;
171  virtual void _toJsonCollections ( JsonWriter* ) const;
172  virtual string _getTypeName () const;
173  virtual string _getString () const;
174  virtual Record* _getRecord () const;
175 
176  private:
177  // Internal: Attributes.
178  DataBase* _dataBase;
179  Name _name;
180  LayerMap _layerMap;
181  LayerMaskMap _layerMaskMap;
182  Layer::Mask _cutMask;
183  Layer::Mask _metalMask;
184  DeviceDescriptors _deviceDescriptors;
185  ModelDescriptors _modelDescriptors;
186  UnitRules _unitRules;
187  PhysicalRules _noLayerRules;
188  OneLayerRules _oneLayerRules;
189  TwoLayersRules _twoLayersRules;
190 
191  protected:
192  // Constructors & Destructors.
193  Technology ( DataBase* , const Name& );
194  virtual void _postCreate ();
195  virtual void _preDestroy ();
196  };
197 
198 
199 // Inline Functions.
200  inline bool Technology::isMetal ( const Layer* layer ) const { return _metalMask.contains(layer->getMask()); }
201  inline DataBase* Technology::getDataBase () const { return _dataBase; }
202  inline const Name& Technology::getName () const { return _name; }
203  inline Layer* Technology::getLayer ( const Name& name ) const { return _layerMap.getElement(name); }
204  inline Layers Technology::getLayers () const { return getCollection(&_layerMaskMap); }
205  inline Technology::ModelDescriptors& Technology::getModelDescriptors () { return _modelDescriptors; }
206  inline Technology::LayerMap& Technology::_getLayerMap () { return _layerMap; }
207  inline Technology::LayerMaskMap& Technology::_getLayerMaskMap () { return _layerMaskMap; }
208  inline Layer::Mask& Technology::_getCutMask () { return _cutMask; }
209  inline Layer::Mask& Technology::_getMetalMask () { return _metalMask; }
210 
211 
212 // -------------------------------------------------------------------
213 // Class : "Hurricane::JsonTechnology".
214 
215  class JsonTechnology : public JsonDBo {
216  public:
217  static void initialize ();
218  JsonTechnology ( unsigned long flags );
219  virtual ~JsonTechnology ();
220  virtual string getTypeName () const;
221  virtual JsonTechnology* clone ( unsigned long ) const;
222  virtual void toData ( JsonStack& );
223  void addBlockageRef ( const std::string&, BasicLayer* );
224  private:
225  std::map< string, vector<BasicLayer*> > _blockagesMap;
226  };
227 
228 
229 } // Hurricane namespace.
230 
231 
232 // -------------------------------------------------------------------
233 // Inspector Support for : Hurricane::Technology::LayerPair".
234 
235 template<>
236 inline std::string getString<Hurricane::Technology::LayerPair>( Hurricane::Technology::LayerPair lp )
237 { return "<LayerPair layer1=" + getString(lp.first) + ", layer2=" + getString(lp.second) + ">"; }
238 
239 
240 INSPECTOR_P_SUPPORT(Hurricane::Technology);
const Name & getName() const
Definition: Technology.h:202
BasicLayer * getBasicLayer(const Name &) const
RegularLayer description (API)
Definition: RegularLayer.h:45
+
PhysicalRule * addUnitRule(std::string ruleName, std::string reference)
ViaLayer * getViaLayer(const Name &) const
BasicLayer description (API)
Definition: BasicLayer.h:44
RegularLayers getRegularLayers() const
BasicLayers getBasicLayers() const
-
Name description (API)
Definition: Name.h:36
-
std::int64_t Unit
Definition: DbU.h:70
+
PhysicalRule * addPhysicalRule(std::string ruleName, std::string reference)
+
Name description (API)
Definition: Name.h:35
+
PhysicalRule * getUnitRule(std::string ruleName) const
ViaLayers getViaLayers() const
DataBase object root class (API).
Definition: DBo.h:47
-
bool isMetal(const Layer *) const
Definition: Technology.h:210
+
bool isMetal(const Layer *) const
Definition: Technology.h:200
Hurricane::Mask< unsigned long long > Mask
Definition: Layer.h:65
-
Layers getLayers() const
Definition: Technology.h:214
+
Layers getLayers() const
Definition: Technology.h:204
Generic Collection auto-pointer.
Definition: Collection.h:28
-
Layer * getLayer(const Name &) const
Definition: Technology.h:213
-
static Technology * create(DataBase *, const Name &)
+
Layer * getLayer(const Name &) const
Definition: Technology.h:203
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:155
-
DataBase * getDataBase() const
Definition: Technology.h:211
+
DataBase * getDataBase() const
Definition: Technology.h:201
Layer * getNthMetal(int) const
+
Define a rule for the technology (API).
Definition: PhysicalRule.h:65
+
static Technology * create(DataBase *, const Name &)
The namespace dedicated to Hurricane.
Definition: Generalities.dox:5
RegularLayer * getRegularLayer(const Name &) const
Layer * getCutAbove(const Layer *, bool useSymbolic=true) const
Layer * getMetalBelow(const Layer *, bool useSymbolic=true) const
-
Technological rules description (API).
Definition: Technology.h:66
+
Technological rules description (API).
Definition: Technology.h:62
ViaLayer description (API)
Definition: ViaLayer.h:46
Layer * getViaBetween(const Layer *, const Layer *, bool useSymbolic=true) const
Layer * getMetalAbove(const Layer *, bool useSymbolic=true) const
@@ -80,7 +83,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 66653e75..0515cc3d 100644 --- a/hurricane/doc/hurricane/html/Transformation_8h_source.html +++ b/hurricane/doc/hurricane/html/Transformation_8h_source.html @@ -44,7 +44,7 @@ $(function() {
Transformation.h
-
1 // ****************************************************************************************************
2 // File: ./hurricane/Transformation.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_TRANSFORMATION
21 #define HURRICANE_TRANSFORMATION
22 
23 #include "hurricane/Box.h"
24 
25 namespace Hurricane {
26 
27 
28 // ****************************************************************************************************
29 // Transformation declaration
30 // ****************************************************************************************************
31 
33 // *****************
34 
35 // Types
36 // *****
37 
38  public: class Orientation {
39  // **********************
40 
41  public: enum Code {ID=0, R1=1, R2=2, R3=3, MX=4, XR=5, MY=6, YR=7};
42 
43  private: Code _code;
44 
45  public: Orientation(const Code& code = ID);
46  public: Orientation(const Orientation& orientation);
47  public: Orientation(const string& );
48 
49  public: Orientation& operator=(const Orientation& orientation);
50 
51  public: operator const Code&() const {return _code;};
52 
53  public: const Code& getCode() const {return _code;};
54 
55  public: string _getTypeName() const { return _TName("Transformation::Orientation"); };
56  public: string _getString() const;
57  public: Record* _getRecord() const;
58  };
59 
60 // Attributes
61 // **********
62 
63  private: DbU::Unit _tx;
64  private: DbU::Unit _ty;
65  private: Orientation _orientation;
66 
67 // Constructors
68 // ************
69 
70  public: Transformation();
71 
72  public: Transformation(const DbU::Unit& tx, const DbU::Unit& ty, const Orientation& orientation = Orientation::ID);
73  public: Transformation(const Point& translation, const Orientation& orientation = Orientation::ID);
74 
75  public: Transformation(const Transformation& transformation);
76 
77 // Operators
78 // *********
79 
80  public: Transformation& operator=(const Transformation& transformation);
81 
82  public: bool operator==(const Transformation& transformation) const;
83  public: bool operator!=(const Transformation& transformation) const;
84 
85 // Accessors
86 // *********
87 
88  public: const DbU::Unit& getTx() const {return _tx;};
89  public: const DbU::Unit& getTy() const {return _ty;};
90  public: Point getTranslation() const {return Point(_tx, _ty);};
91  public: const Orientation& getOrientation() const {return _orientation;};
92 
93  public: DbU::Unit getX(const DbU::Unit& x, const DbU::Unit& y) const;
94  public: DbU::Unit getY(const DbU::Unit& x, const DbU::Unit& y) const;
95 
96  public: DbU::Unit getX(const Point& point) const;
97  public: DbU::Unit getY(const Point& point) const;
98 
99  public: DbU::Unit getDx(const DbU::Unit& dx, const DbU::Unit& dy) const;
100  public: DbU::Unit getDy(const DbU::Unit& dx, const DbU::Unit& dy) const;
101 
102  public: Point getPoint(const DbU::Unit& x, const DbU::Unit& y) const;
103  public: Point getPoint(const Point& point) const;
104 
105  public: Box getBox(const DbU::Unit& x1, const DbU::Unit& y1, const DbU::Unit& x2, const DbU::Unit& y2) const;
106  public: Box getBox(const Point& point1, const Point& point2) const;
107  public: Box getBox(const Box& box) const;
108 
109  public: Transformation getTransformation(const Transformation& transformation) const;
110 
111  public: Transformation getInvert() const;
112 
113 // Predicates
114 // **********
115 
116  public: bool isEven() const {return !(_orientation.getCode() & 1);};
117  public: bool isOdd() const {return (_orientation.getCode() & 1);};
118 
119 // Updators
120 // ********
121 
122  public: Transformation& invert();
123 
124 // Manipulators
125 // ************
126 
127  public: void applyOn(DbU::Unit& x, DbU::Unit& y) const;
128  public: void applyOn(Point& point) const;
129  public: void applyOn(Box& box) const;
130  public: void applyOn(Transformation& transformation) const;
131 
132 // Others
133 // ******
134 
135  public: string _getTypeName() const { return _TName("Transformation"); };
136  public: string _getString() const;
137  public: Record* _getRecord() const;
138  public: void toJson(JsonWriter*) const;
139 
140 };
141 
142 class JsonTransformation : public JsonObject {
143 // *******************************************
144 
145  public: static void initialize();
146  public: JsonTransformation(unsigned long);
147  public: virtual string getTypeName() const;
148  public: virtual JsonTransformation* clone(unsigned long) const;
149  public: virtual void toData(JsonStack&);
150 };
151 
152 
153 } // End of Hurricane namespace.
154 
155 
156 // -------------------------------------------------------------------
157 // Inspector Support for : "Transformation::Orientation::Code*".
158 
159 template<>
160 inline std::string getString<const Hurricane::Transformation::Orientation::Code*>
161  ( const Hurricane::Transformation::Orientation::Code* object )
162  {
163  switch ( *object ) {
164  case Hurricane::Transformation::Orientation::ID: return "ID";
165  case Hurricane::Transformation::Orientation::R1: return "R1";
166  case Hurricane::Transformation::Orientation::R2: return "R2";
167  case Hurricane::Transformation::Orientation::R3: return "R3";
168  case Hurricane::Transformation::Orientation::MX: return "MX";
169  case Hurricane::Transformation::Orientation::XR: return "XR";
170  case Hurricane::Transformation::Orientation::MY: return "MY";
171  case Hurricane::Transformation::Orientation::YR: return "YR";
172  }
173  return "ABNORMAL";
174  }
175 
176 template<>
177 inline Hurricane::Record* getRecord<const Hurricane::Transformation::Orientation::Code*>
178  ( const Hurricane::Transformation::Orientation::Code* object )
179  {
180  Hurricane::Record* record = new Hurricane::Record(getString(object));
181  record->add(getSlot("Code", (unsigned int*)object));
182  return record;
183  }
184 
185 template<>
186 inline std::string getString<Hurricane::Transformation::Orientation::Code*>
187  ( Hurricane::Transformation::Orientation::Code* object )
188  {
189  switch ( *object ) {
190  case Hurricane::Transformation::Orientation::ID: return "ID";
191  case Hurricane::Transformation::Orientation::R1: return "R1";
192  case Hurricane::Transformation::Orientation::R2: return "R2";
193  case Hurricane::Transformation::Orientation::R3: return "R3";
194  case Hurricane::Transformation::Orientation::MX: return "MX";
195  case Hurricane::Transformation::Orientation::XR: return "XR";
196  case Hurricane::Transformation::Orientation::MY: return "MY";
197  case Hurricane::Transformation::Orientation::YR: return "YR";
198  }
199  return "ABNORMAL";
200  }
201 
202 template<>
203 inline Hurricane::Record* getRecord<Hurricane::Transformation::Orientation::Code*>
204  ( Hurricane::Transformation::Orientation::Code* object )
205  {
206  Hurricane::Record* record = new Hurricane::Record(getString(object));
207  record->add(getSlot("Code", (unsigned int*)object));
208  return record;
209  }
210 
211 
212 INSPECTOR_PV_SUPPORT(Hurricane::Transformation);
213 INSPECTOR_PV_SUPPORT(Hurricane::Transformation::Orientation);
214 IOSTREAM_POINTER_SUPPORT(Hurricane::Transformation::Orientation::Code);
215 
216 #endif // HURRICANE_TRANSFORMATION
217 
218 
219 // ****************************************************************************************************
220 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
221 // ****************************************************************************************************
Transformation & operator=(const Transformation &transformation)
+
1 // ****************************************************************************************************
2 // File: ./hurricane/Transformation.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_TRANSFORMATION
21 #define HURRICANE_TRANSFORMATION
22 
23 #include "hurricane/Box.h"
24 
25 namespace Hurricane {
26 
27 
28 // ****************************************************************************************************
29 // Transformation declaration
30 // ****************************************************************************************************
31 
33 // *****************
34 
35 // Types
36 // *****
37 
38  public: class Orientation {
39  // **********************
40 
41  public: enum Code {ID=0, R1=1, R2=2, R3=3, MX=4, XR=5, MY=6, YR=7};
42 
43  private: Code _code;
44 
45  public: Orientation(const Code& code = ID);
46  public: Orientation(const Orientation& orientation);
47  public: Orientation(const string& );
48 
49  public: Orientation& operator=(const Orientation& orientation);
50 
51  public: operator const Code&() const {return _code;};
52 
53  public: const Code& getCode() const {return _code;};
54 
55  public: string _getTypeName() const { return _TName("Transformation::Orientation"); };
56  public: string _getString() const;
57  public: Record* _getRecord() const;
58  };
59 
60 // Attributes
61 // **********
62 
63  private: DbU::Unit _tx;
64  private: DbU::Unit _ty;
65  private: Orientation _orientation;
66 
67 // Constructors
68 // ************
69 
70  public: Transformation();
71 
72  public: Transformation(const DbU::Unit& tx, const DbU::Unit& ty, const Orientation& orientation = Orientation::ID);
73  public: Transformation(const Point& translation, const Orientation& orientation = Orientation::ID);
74 
75  public: Transformation(const Transformation& transformation);
76 
77 // Operators
78 // *********
79 
80  public: Transformation& operator=(const Transformation& transformation);
81 
82  public: bool operator==(const Transformation& transformation) const;
83  public: bool operator!=(const Transformation& transformation) const;
84 
85 // Accessors
86 // *********
87 
88  public: const DbU::Unit& getTx() const {return _tx;};
89  public: const DbU::Unit& getTy() const {return _ty;};
90  public: Point getTranslation() const {return Point(_tx, _ty);};
91  public: const Orientation& getOrientation() const {return _orientation;};
92 
93  public: DbU::Unit getX(const DbU::Unit& x, const DbU::Unit& y) const;
94  public: DbU::Unit getY(const DbU::Unit& x, const DbU::Unit& y) const;
95 
96  public: DbU::Unit getX(const Point& point) const;
97  public: DbU::Unit getY(const Point& point) const;
98 
99  public: DbU::Unit getDx(const DbU::Unit& dx, const DbU::Unit& dy) const;
100  public: DbU::Unit getDy(const DbU::Unit& dx, const DbU::Unit& dy) const;
101 
102  public: Point getPoint(const DbU::Unit& x, const DbU::Unit& y) const;
103  public: Point getPoint(const Point& point) const;
104 
105  public: Box getBox(const DbU::Unit& x1, const DbU::Unit& y1, const DbU::Unit& x2, const DbU::Unit& y2) const;
106  public: Box getBox(const Point& point1, const Point& point2) const;
107  public: Box getBox(const Box& box) const;
108 
109  public: Transformation getTransformation(const Transformation& transformation) const;
110 
111  public: Transformation getInvert() const;
112 
113 // Predicates
114 // **********
115 
116  public: bool isEven() const {return !(_orientation.getCode() & 1);};
117  public: bool isOdd() const {return (_orientation.getCode() & 1);};
118 
119 // Updators
120 // ********
121 
122  public: Transformation& invert();
123 
124 // Manipulators
125 // ************
126 
127  public: void applyOn(DbU::Unit& x, DbU::Unit& y) const;
128  public: void applyOn(Point& point) const;
129  public: void applyOn(Box& box) const;
130  public: void applyOn(Transformation& transformation) const;
131 
132 // Others
133 // ******
134 
135  public: string _getTypeName() const { return _TName("Transformation"); };
136  public: string _getString() const;
137  public: Record* _getRecord() const;
138  public: void toJson(JsonWriter*) const;
139 
140 };
141 
142 class JsonTransformation : public JsonObject {
143 // *******************************************
144 
145  public: static void initialize();
146  public: JsonTransformation(unsigned long);
147  public: virtual string getTypeName() const;
148  public: virtual JsonTransformation* clone(unsigned long) const;
149  public: virtual void toData(JsonStack&);
150 };
151 
152 
153 } // End of Hurricane namespace.
154 
155 
156 // -------------------------------------------------------------------
157 // Inspector Support for : "Transformation::Orientation::Code*".
158 
159 template<>
160 inline std::string getString<const Hurricane::Transformation::Orientation::Code*>
161  ( const Hurricane::Transformation::Orientation::Code* object )
162  {
163  switch ( *object ) {
164  case Hurricane::Transformation::Orientation::ID: return "ID";
165  case Hurricane::Transformation::Orientation::R1: return "R1";
166  case Hurricane::Transformation::Orientation::R2: return "R2";
167  case Hurricane::Transformation::Orientation::R3: return "R3";
168  case Hurricane::Transformation::Orientation::MX: return "MX";
169  case Hurricane::Transformation::Orientation::XR: return "XR";
170  case Hurricane::Transformation::Orientation::MY: return "MY";
171  case Hurricane::Transformation::Orientation::YR: return "YR";
172  }
173  return "ABNORMAL";
174  }
175 
176 template<>
177 inline Hurricane::Record* getRecord<const Hurricane::Transformation::Orientation::Code*>
178  ( const Hurricane::Transformation::Orientation::Code* object )
179  {
180  Hurricane::Record* record = new Hurricane::Record(getString(object));
181  record->add(getSlot("Code", (unsigned int*)object));
182  return record;
183  }
184 
185 template<>
186 inline std::string getString<Hurricane::Transformation::Orientation::Code*>
187  ( Hurricane::Transformation::Orientation::Code* object )
188  {
189  switch ( *object ) {
190  case Hurricane::Transformation::Orientation::ID: return "ID";
191  case Hurricane::Transformation::Orientation::R1: return "R1";
192  case Hurricane::Transformation::Orientation::R2: return "R2";
193  case Hurricane::Transformation::Orientation::R3: return "R3";
194  case Hurricane::Transformation::Orientation::MX: return "MX";
195  case Hurricane::Transformation::Orientation::XR: return "XR";
196  case Hurricane::Transformation::Orientation::MY: return "MY";
197  case Hurricane::Transformation::Orientation::YR: return "YR";
198  }
199  return "ABNORMAL";
200  }
201 
202 template<>
203 inline Hurricane::Record* getRecord<Hurricane::Transformation::Orientation::Code*>
204  ( Hurricane::Transformation::Orientation::Code* object )
205  {
206  Hurricane::Record* record = new Hurricane::Record(getString(object));
207  record->add(getSlot("Code", (unsigned int*)object));
208  return record;
209  }
210 
211 
212 INSPECTOR_PR_SUPPORT(Hurricane::Transformation);
213 INSPECTOR_PR_SUPPORT(Hurricane::Transformation::Orientation);
214 IOSTREAM_POINTER_SUPPORT(Hurricane::Transformation::Orientation::Code);
215 
216 #endif // HURRICANE_TRANSFORMATION
217 
218 
219 // ****************************************************************************************************
220 // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved
221 // ****************************************************************************************************
Transformation & operator=(const Transformation &transformation)
bool operator==(const Transformation &transformation) const
Definition: Transformation.h:38
Point getPoint(const DbU::Unit &x, const DbU::Unit &y) const
@@ -73,7 +73,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 4293f9d6..608dd517 100644 --- a/hurricane/doc/hurricane/html/TransistorLayer_8h_source.html +++ b/hurricane/doc/hurricane/html/TransistorLayer_8h_source.html @@ -45,7 +45,7 @@ $(function() {
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 : Jean-Paul Chaput |
26 // | E-mail : Jean-Paul.Chaput@lip6.fr |
27 // | =============================================================== |
28 // | C++ Header : "./hurricane/TransistorLayer.h" |
29 // +-----------------------------------------------------------------+
30 
31 
32 #ifndef HURRICANE_TRANSISTOR_LAYER_H
33 #define HURRICANE_TRANSISTOR_LAYER_H
34 
35 #include <vector>
36 
37 #include "hurricane/Layer.h"
38 #include "hurricane/TransistorLayers.h"
39 
40 
41 namespace Hurricane {
42 
43 // -------------------------------------------------------------------
44 // Class : "Hurricane::TransistorLayer".
45 
46  class TransistorLayer : public Layer {
47  public:
48  typedef Layer Super;
49 
50  public:
51  // Constructor.
52  static TransistorLayer* create ( Technology* technology
53  , const Name& name
54  , BasicLayer* gateLayer
55  , BasicLayer* activeLayer
56  , BasicLayer* diffusionLayer
57  , BasicLayer* wellLayer
58  );
59  // Accessors.
60  virtual BasicLayers getBasicLayers () const;
61  virtual DbU::Unit getExtentionCap () const;
62  virtual DbU::Unit getExtentionWidth () const;
63  virtual DbU::Unit getExtentionCap ( const BasicLayer* layer ) const;
64  virtual DbU::Unit getExtentionWidth ( const BasicLayer* layer ) const;
65  // Updators.
66  virtual void setExtentionCap ( const BasicLayer* layer, DbU::Unit cap );
67  virtual void setExtentionWidth ( const BasicLayer* layer, DbU::Unit width );
68  // Hurricane Managment.
69  virtual void _toJson ( JsonWriter* ) const;
70  virtual void _onDbuChange ( float scale );
71  virtual string _getTypeName () const;
72  virtual string _getString () const;
73  virtual Record* _getRecord () const;
74 
75  private:
76  // Internal: Attributes
77  vector<BasicLayer*> _basicLayers;
78  vector<DbU::Unit> _extentionCaps;
79  vector<DbU::Unit> _extentionWidths;
80  DbU::Unit _maximalExtentionCap;
81  DbU::Unit _maximalExtentionWidth;
82 
83  protected:
84  // Internal: Constructors & Destructors.
85  TransistorLayer ( Technology* technology
86  , const Name& name
87  , BasicLayer* gateLayer
88  , BasicLayer* activeLayer
89  , BasicLayer* diffusionLayer
90  , BasicLayer* wellLayer
91  );
92  };
93 
94 
95 // -------------------------------------------------------------------
96 // Class : "Hurricane::JsonTransistorLayer".
97 
98  class JsonTransistorLayer : public JsonLayer {
99  public:
100  static void initialize ();
101  JsonTransistorLayer ( unsigned long flags );
102  ~JsonTransistorLayer ();
103  virtual string getTypeName () const;
104  virtual JsonTransistorLayer* clone ( unsigned long ) const;
105  virtual void toData ( JsonStack& );
106  };
107 
108 
109 } // End of Hurricane namespace.
110 
111 
112 INSPECTOR_P_SUPPORT(Hurricane::TransistorLayer);
113 
114 
115 # endif
BasicLayer description (API)
Definition: BasicLayer.h:44
-
Name description (API)
Definition: Name.h:36
+
Name description (API)
Definition: Name.h:35
std::int64_t Unit
Definition: DbU.h:70
DataBase object root class (API).
Definition: DBo.h:47
TransistorLayer description (API)
Definition: TransistorLayer.h:46
@@ -53,13 +53,13 @@ $(function() {
static TransistorLayer * create(Technology *technology, const Name &name, BasicLayer *gateLayer, BasicLayer *activeLayer, BasicLayer *diffusionLayer, BasicLayer *wellLayer)
Layer description (API)
Definition: Layer.h:52
The namespace dedicated to Hurricane.
Definition: Generalities.dox:5
-
Technological rules description (API).
Definition: Technology.h:66
+
Technological rules description (API).
Definition: Technology.h:62


- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 0c2b5176..41e2b9ac 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  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
+
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:35
SharedProperty description (API)
Definition: Property.h:388
DataBase object root class (API).
Definition: DBo.h:47
UpdateSession description (API)
Definition: UpdateSession.h:35
@@ -54,7 +54,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 8a2b9cd1..659d59c5 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 9f596ec7..4591ec5f 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 455f47fb..630a1aff 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 8743e256..c8b9fe03 100644 --- a/hurricane/doc/hurricane/html/ViaLayer_8h_source.html +++ b/hurricane/doc/hurricane/html/ViaLayer_8h_source.html @@ -45,13 +45,13 @@ $(function() {
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 : Jean-Paul Chaput |
26 // | E-mail : Jean-Paul.Chaput@lip6.fr |
27 // | =============================================================== |
28 // | C++ Header : "./hurricane/ViaLayer.h" |
29 // +-----------------------------------------------------------------+
30 
31 
32 #ifndef HURRICANE_VIA_LAYER_H
33 #define HURRICANE_VIA_LAYER_H
34 
35 #include <vector>
36 
37 #include "hurricane/Layer.h"
38 #include "hurricane/ViaLayers.h"
39 
40 
41 namespace Hurricane {
42 
43 // -------------------------------------------------------------------
44 // Class : "Hurricane::ViaLayer".
45 
46  class ViaLayer : public Layer {
47  public:
48  typedef Layer Super;
49 
50  public:
51  // Constructor.
52  static ViaLayer* create ( Technology* technology
53  , const Name& name
54  , BasicLayer* bottomLayer
55  , BasicLayer* cutLayer
56  , BasicLayer* topLayer
57  );
58  // Accessors.
59  virtual BasicLayers getBasicLayers () const;
60  virtual const Layer* getCut () const;
61  virtual const Layer* getTop () const;
62  virtual const Layer* getBottom () const;
63  virtual const Layer* getOpposite ( const Layer* ) const;
64  virtual DbU::Unit getEnclosure ( uint32_t flags ) const;
65  virtual DbU::Unit getEnclosure ( const BasicLayer* layer, uint32_t flags ) const;
66  virtual DbU::Unit getTopEnclosure ( uint32_t flags ) const;
67  virtual DbU::Unit getBottomEnclosure ( uint32_t flags ) const;
68  // Updators.
69  virtual void setEnclosure ( const BasicLayer* layer, DbU::Unit enclosure, uint32_t flags );
70  // Hurricane Managment.
71  virtual void _toJson ( JsonWriter* ) const;
72  virtual void _onDbuChange ( float scale );
73  virtual string _getTypeName () const;
74  virtual string _getString () const;
75  virtual Record* _getRecord () const;
76 
77  private:
78  // Internal: Attributes
79  vector<BasicLayer*> _basicLayers;
80  vector< pair<DbU::Unit,DbU::Unit> > _enclosures;
81  DbU::Unit _maximalEnclosure;
82 
83  protected:
84  // Internal: Constructors & Destructors.
85  ViaLayer ( Technology* technology
86  , const Name& name
87  , BasicLayer* bottomLayer
88  , BasicLayer* cutLayer
89  , BasicLayer* topLayer
90  );
91  };
92 
93 
94 // -------------------------------------------------------------------
95 // Class : "Hurricane::JsonViaLayer".
96 
97  class JsonViaLayer : public JsonLayer {
98  public:
99  static void initialize ();
100  JsonViaLayer ( unsigned long flags );
101  ~JsonViaLayer ();
102  virtual string getTypeName () const;
103  virtual JsonViaLayer* clone ( unsigned long ) const;
104  virtual void toData ( JsonStack& );
105  };
106 
107 
108 } // End of Hurricane namespace.
109 
110 
111 INSPECTOR_P_SUPPORT(Hurricane::ViaLayer);
112 
113 
114 # endif
BasicLayer description (API)
Definition: BasicLayer.h:44
-
Name description (API)
Definition: Name.h:36
+
Name description (API)
Definition: Name.h:35
std::int64_t Unit
Definition: DbU.h:70
DataBase object root class (API).
Definition: DBo.h:47
JSON Parser Stack.
Definition: JsonObject.h:249
Layer description (API)
Definition: Layer.h:52
The namespace dedicated to Hurricane.
Definition: Generalities.dox:5
-
Technological rules description (API).
Definition: Technology.h:66
+
Technological rules description (API).
Definition: Technology.h:62
ViaLayer description (API)
Definition: ViaLayer.h:46
static ViaLayer * create(Technology *technology, const Name &name, BasicLayer *bottomLayer, BasicLayer *cutLayer, BasicLayer *topLayer)
@@ -59,7 +59,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 1db3a08d..4f7a3e00 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
diff --git a/hurricane/doc/hurricane/html/annotated.html b/hurricane/doc/hurricane/html/annotated.html index 0617b3b5..66a4f7a2 100644 --- a/hurricane/doc/hurricane/html/annotated.html +++ b/hurricane/doc/hurricane/html/annotated.html @@ -92,41 +92,42 @@ $(function() {  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 + CPhysicalRuleDefine a rule for the technology (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
@@ -134,7 +135,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
diff --git a/hurricane/doc/hurricane/html/classDebugSession.html b/hurricane/doc/hurricane/html/classDebugSession.html deleted file mode 100644 index ea6daeac..00000000 --- a/hurricane/doc/hurricane/html/classDebugSession.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - Hurricane Documentation - - - - -

Hurricane VLSI Database

- -
- - - - -
-
-
-
DebugSession Class Reference
-
-
- -

Enable/Disable trace information (API). - More...

-

Detailed Description

-

Enable/Disable trace information (API).

-

-Trace Levels

-

DebugSession allows to display selectively the trace/debug messages between a minLevel (included) and maxLevel (excluded) .

-

To avoid mixing messages between different parts of the software, the following allotments have been done:

- - - - - - -
Trace/Debug level allotments (provisional)
Tool/Library Minimum Maximum
Hurricane 0 20 Isobar 30 40
-

The documentation for this class was generated from the following file:
    -
  • DebugSession.dox
  • -
-
-
-
- - - - - -
Generated by doxygen 1.8.5 on Mon May 16 2016Return to top of page
- - - - - -
Hurricane VLSI DatabaseCopyright © 2000-2016 Bull S.A. All rights reserved
- - diff --git a/hurricane/doc/hurricane/html/classEntity_1_1CompareById.html b/hurricane/doc/hurricane/html/classEntity_1_1CompareById.html index c73bb78d..88514879 100644 --- a/hurricane/doc/hurricane/html/classEntity_1_1CompareById.html +++ b/hurricane/doc/hurricane/html/classEntity_1_1CompareById.html @@ -58,7 +58,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1BasicLayer-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1BasicLayer-members.html index 14a6e5a2..6a11e050 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 fe55dd3d..d0b3c8f1 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1BasicLayer.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1BasicLayer.html @@ -223,7 +223,7 @@ Additional Inherited Members

creates and returns a new basic layer named <name>, of type <material> for the given technology (some geometrical characteristics can also be specified).

Caution: Throws an exception if the technology is null, if the name is
empty, if a layer of same name already exists or if we overflow the capacity of the bit field associated to the layer mask.
-
Remark: The extract number is a kind of logic number. In example the
CP layer which represent a poly layer should have the same extract number as the CPG layer which represent a poly layer used to realize the transistor gates. While extractions process, layers which have the same extract number are considered as equivalents. A null value indicates that the extraction should ignore this layer.
+
Remarks
The extract number is a kind of logic number. In example the CP layer which represent a poly layer should have the same extract number as the CPG layer which represent a poly layer used to realize the transistor gates. While extractions process, layers which have the same extract number are considered as equivalents. A null value indicates that the extraction should ignore this layer.
@@ -342,7 +342,7 @@ Additional Inherited Members
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 bbb415c3..dec2db26 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 60a2b491..618d8064 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 ebb9fa30..60aaa2c0 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 a315d4ee..a28c78d5 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Box.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Box.html @@ -331,7 +331,7 @@ Remark on Modifiers

Equality operator.

-
Remark: Two empty boxes are always different.
+
Remarks
Two empty boxes are always different.
@@ -1104,7 +1104,7 @@ Remark on Modifiers
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 4613590b..14c30aea 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Cell-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Cell-members.html @@ -99,7 +99,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 8b4ab50d..14c1e244 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Cell.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Cell.html @@ -649,7 +649,7 @@ Layout vs. Netlist Cell Hierarchy

Returns the Collection of all Occurrences belonging to this Cell.

-
Remark: The search depth is decremented each time a hirearchical
level is crossed. The search ends when depth becomes null (the value INFINITE is equal to (unsigned)-1) .
+
Remarks
The search depth is decremented each time a hirearchical level is crossed. The search ends when depth becomes null (the value INFINITE is equal to (unsigned)-1) .
@@ -679,7 +679,7 @@ Layout vs. Netlist Cell Hierarchy

Returns the Collection of all Occurrences belonging to this Cell and intersecting the given rectangular area.

-
Remark: The search depth is decremented each time a hirearchical
level is crossed. The search ends when depth becomes null (the value INFINITE is equal to (unsigned)-1) .
+
Remarks
The search depth is decremented each time a hirearchical level is crossed. The search ends when depth becomes null (the value INFINITE is equal to (unsigned)-1) .
Caution: Only occurences corresponding to currently materialized
entities are taken into account in this Collection.
@@ -909,7 +909,7 @@ Layout vs. Netlist Cell Hierarchy

Allows to change the Cell Name.

-
Remark: Throws an exception if the new name is empty or if the
Library owning the Cell has already a Cell with the same name.
+
Remarks
Throws an exception if the new name is empty or if the Library owning the Cell has already a Cell with the same name.
@@ -929,7 +929,7 @@ Layout vs. Netlist Cell Hierarchy

sets Cell abutment box.

-
Remark: At the Cell creation the abutment box is empty. This one must
be set through this function. It is possible also, once fixed, to reset it to empty (undefined) by passing an empty Box as argument.
+
Remarks
At the Cell creation the abutment box is empty. This one must be set through this function. It is possible also, once fixed, to reset it to empty (undefined) by passing an empty Box as argument.
@@ -1053,7 +1053,7 @@ Layout vs. Netlist Cell Hierarchy
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 4d6c1d9b..95c4062b 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 b5aa1c25..0b21e2c1 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Collection.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Collection.html @@ -117,7 +117,7 @@ The forEach Macro (obsoleted)

To use the forEach macro outside the Hurricane namespace, the following statement is necessary:

using Hurricane::ForEachIterator

Here is a small example of a loop:

using Hurricane::ForEachIterator;
Cell* cell = ...; // Get a Cell from somewhere.
forEach( Net*, inet, cell->getNets() ) {
cout << "This is " << (*inet);
if (inet->isExternal())
cout << " [external net].";
cout << endl;
}

The Generic getCollection

The collections provide the generic getCollection() function which allows to convert its argument into a generic collection. It has no specific interest for Hurricane collections, but this function is overloaded for STL containers.

-

This allows to handle a STL containers like a normal collection as shown in the following example:

set<Instance*> instanceSet;
// here we fill the set with the desired instances...
forEach(Instance*, iinstance, getCollection(instanceSet)) {
// process here each instance of the set
// (the elements are visited according to the set ordering)
}
Remark: This approach is a little bit less efficient than the use of
STL iterators, not much indeed, but has the advantage to be homogeneous with the remaining code (recall: the created collection doesn't make a copy of the STL container and its creation time is negligible).
+

This allows to handle a STL containers like a normal collection as shown in the following example:

set<Instance*> instanceSet;
// here we fill the set with the desired instances...
forEach(Instance*, iinstance, getCollection(instanceSet)) {
// process here each instance of the set
// (the elements are visited according to the set ordering)
}
Remarks
This approach is a little bit less efficient than the use of STL iterators, not much indeed, but has the advantage to be homogeneous with the remaining code (recall: the created collection doesn't make a copy of the STL container and its creation time is negligible).
Caution: The returned collection is valid whenever the STL container
is valid. Then you should not do the following:
GenericCollection<Instance*> getInstances(...)
{
set<Instance*> instanceSet;
// we fill the container with the appropriate instances
return getCollection(instanceSet); // instanceSet deleted after return
}

The same will occur anyway if you do:

Cell* cell = ...; // we get the cell
Nets nets = cell->getNets();
cell->destroy();
forEach(Net*, inet, nets) {
...
}

Locators

@@ -180,7 +180,7 @@ template<class Type>

Allocates and returns a clone (copy) of the collection (whatever be its type).

-
Remark: In principle there is no need to use this function. However,
if you do so, don't forget to delete the clone after use. It is indeed much easier to use generic collections which do that for you, as we will see later.
+
Remarks
In principle there is no need to use this function. However, if you do so, don't forget to delete the clone after use. It is indeed much easier to use generic collections which do that for you, as we will see later.
@@ -209,7 +209,7 @@ template<class Type>

Allocates and returns a locator adapted to visit the elements of the collection.

-
Remark: In principle there is no need to use this function. Use
preferably the macro for_each described below. However, if you do so, don't forget to delete this locator after use, else use generic locators, which do that for you, as we will see later.
+
Remarks
In principle there is no need to use this function. Use preferably the macro for_each described below. However, if you do so, don't forget to delete this locator after use, else use generic locators, which do that for you, as we will see later.

Referenced by Hurricane::Collection< SubType >::getFirst(), and Hurricane::Collection< SubType >::getSize().

@@ -240,7 +240,7 @@ template<class Type>

Returns: the number of objects identified within the collection.

-
Remark: Very fast in some cases, but may need to visit the collection
in most ones.
+
Remarks
Very fast in some cases, but may need to visit the collection in most ones.
@@ -269,7 +269,7 @@ template<class Type>

Returns: the first element of the collection.

-
Remark: The result is meaningful only when the collection is non
empty.
+
Remarks
The result is meaningful only when the collection is non empty.
@@ -328,7 +328,7 @@ template<class SubType >

Returns: the collection corresponding to the subset of elements of type <SubType>.

-
Remark: The returned collection is a collection of objects of type
SubType and not of type Type.
+
Remarks
The returned collection is a collection of objects of type SubType and not of type Type.
{
return getComponents().getSubSet<Contact*>();
}

Referenced by Hurricane::Collection< SubType >::getSubSet().

@@ -362,7 +362,7 @@ template<class SubType >

Returns: the collection representing the subset of elements of type <SubType> accepted by the filter.

-
Remark: The returned collection is a collection of elements of type
SubType and not of type Type and the filter must be a filter of elements of type SubType.
+
Remarks
The returned collection is a collection of elements of type SubType and not of type Type and the filter must be a filter of elements of type SubType.
Sample: Filter Hurricane::Segment according to their Layer.
class IsOnLayer : public Filter<Segment*> {
public:
Layer* _layer;
public:
IsOnLayer(Layer* layer)
: _layer(layer)
{
if (!_layer) throw Error("Can't create IsOnLayer filter : null layer");
};
IsOnLayer(const IsOnLayer& isOnLayer)
: _layer(isOnLayer._layer)
{ };
IsOnLayer& operator=(const IsOnLayer& isOnLayer)
{
_layer = isOnLayer._layer;
return *this;
};
virtual Filter<Net*>* getClone() const
{
return new IsOnLayer(*this);
};
virtual bool Accept(Segment* segment) const
{
return (segmentgetLayer() == _layer);
};
};

And somewher later:

Layer* metal = getDataBase()->getTechnology()->getLayer("metal");
Segments segments = net->getComponents()->getSubSet<Segment*>(IsOnLayer(metal));
// segments represents here the subset of net components
// which are of type Segment and located on layer metal
@@ -376,7 +376,7 @@ template<class SubType >
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 bf5b36a8..12110d6f 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Component-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Component-members.html @@ -78,7 +78,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 9300a8c2..18cb0407 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Component.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Component.html @@ -152,7 +152,7 @@ Introduction Concept of Location

Some components (for instance the segments) bear on contacts or other segments, more precisely they bear an extremity (the origin or the extremity), possibly through an offset on other components. The real location of the concerned part is therefore relative to the location of the component on which this part bears.

For that purpose each components must be able to return a location from which a relative calculations can be done. The methods getX() and getY() provide this information and must be overloaded for each sub-type of component in oder to get the desired effect.

-
Remark: The fact that a null value is systematically returned by one
of this methods means that the locations are computed relative to a null value, which is equivalent to say they are absolute values (see for instance the Horizontal segment whose getX() returns always null, while getY() return the ordinate of its axis).
+
Remarks
The fact that a null value is systematically returned by one of this methods means that the locations are computed relative to a null value, which is equivalent to say they are absolute values (see for instance the Horizontal segment whose getX() returns always null, while getY() return the ordinate of its axis).

Destruction

When a component is destroyed, all components which are anchored on its body (through the body hook) are also destroyed. This may recursively propagate to other components anchored on the body of those last ones.

@@ -444,7 +444,7 @@ Predefined filters

Returns: the collection of "connex components" to the component <this> (which includes at least this one).

-
Remark: A componnent is said connex to an other one if it is
attached directly or indirectly through hyper-hooks, that is if there exist a sequence of components whose parts (extremities or body) are either sharing the same anchor or anchored one upon the other.
+
Remarks
A componnent is said connex to an other one if it is attached directly or indirectly through hyper-hooks, that is if there exist a sequence of components whose parts (extremities or body) are either sharing the same anchor or anchored one upon the other.

If the layout elements are correctly assembled and on the proper layers, this "connex components collection" represents an geometrically and electrically connected subset of layout elements

On the other hand, if layout anchored objects don't overlap on the same conducting layers (either by a wrong contact layer or by an offset which forbids layout intersection) electrical continuity will not be ensured.

@@ -504,7 +504,7 @@ Predefined filters
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 fb3b5ccc..f48914fb 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 5fd7d7f0..44f2fede 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 2654216d..21ccbd48 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Contact-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Contact-members.html @@ -92,7 +92,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 da65249d..35ee284f 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Contact.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Contact.html @@ -311,7 +311,7 @@ Introduction

creates and returns a new contact on the layer <layer>, of size <width> and <height> attached upon the component <anchor> through an offset defined by <dx> et <dy>.

Caution: Throws an exception if the layer or the anchor is null or if
the anchor is an unconnected plug.
-
Remark: The new contact belongs to the anchor's net.
+
Remarks
The new contact belongs to the anchor's net.
@@ -382,7 +382,7 @@ Introduction

Returns: the relative abscissa of the contact.

-
Remark: If you want to get the absolute one use the member function
getX() defined at the Component level.
+
Remarks
If you want to get the absolute one use the member function getX() defined at the Component level.
@@ -409,7 +409,7 @@ Introduction

Returns: the relative ordinate of the contact.

-
Remark: If you want to get the absolute one use the member function
getY() defined at the Component level.
+
Remarks
If you want to get the absolute one use the member function getY() defined at the Component level.
@@ -705,7 +705,7 @@ Introduction

Allows to change the horizontal offset of the contact.

-
Remark: If the contact is absolute, this amounts to change its
absolute abscissa.
+
Remarks
If the contact is absolute, this amounts to change its absolute abscissa.
@@ -725,7 +725,7 @@ Introduction

Allows to change the vertical offset of the contact.

-
Remark: If the contact is absolute, this amounts to change its
absolute ordinate.
+
Remarks
If the contact is absolute, this amounts to change its absolute ordinate.
@@ -755,7 +755,7 @@ Introduction

Allows to change the offset of the contact.

-
Remark: If the contact is absolute, this amounts to change its
absolute location.
+
Remarks
If the contact is absolute, this amounts to change its absolute location.
@@ -768,7 +768,7 @@ Introduction
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 0ec943ea..ef8e60e3 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 8dc6b0f9..5ff20cb3 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 e898d983..52f1d2c9 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 e1bf2135..914b45dd 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Contact_1_1AnchorHook.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Contact_1_1AnchorHook.html @@ -83,7 +83,7 @@ Additional Inherited Members

Detailed Description

With contacts, a new type of Hook appears : the AnchorHook, which allows to attach a contact upon an other component, on which it is said to be "anchored". It becomes then a "relative contact" with respect of the coordinates of this component. The AnchorHook is always a slave hook.

-
Remark: A contact has two attributes <Dx> and <Dy> which
represent the relative coordinates of the contact with respect to the coordinates of the component on which it is anchored (through this AnchorHook). When it is not anchored, those coordinates becomes relative to the origin of the cell, which means they are absolute.
+
Remarks
A contact has two attributes <Dx> and <Dy> which represent the relative coordinates of the contact with respect to the coordinates of the component on which it is anchored (through this AnchorHook). When it is not anchored, those coordinates becomes relative to the origin of the cell, which means they are absolute.

The documentation for this class was generated from the following file: @@ -92,7 +92,7 @@ Additional Inherited Members
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 debdc876..9f951a04 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 ab5c863a..fb1569e3 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1DBo.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1DBo.html @@ -127,7 +127,7 @@ Deletion process

A process similar but opposite to the creation process is required. A function _preDestroy must be called upon before the effective object destruction. As a matter of fact, if we take again the case of the Line for example, the line must be removed from the QuadTree before the destruction of its geometric characteristics (inverse of the previous phenomenon). Therefore the destroy function is implemented that way :

// ***************
{
_preDestroy();
delete this;
}

Extentions

For any new sub-type of DBo you must adhere to the same protocol. That is provide the methods _postCreate and _preDestroy calling the methods _postCreate and _preDestroy of their base class. Furthermore you must provide when this class is instantiable a creation function (caution : only the creation function, if any, must be public (and static) the others must be protected).

-

Extracted from the .h of a new type of cell.

class MyCell : public Cell {
public:
typedef Cell Inherit;
public:
// User-accessible creation method.
static MyCell* Create (Library* library, const Name& name);
protected:
// Internally used constructors & destructors.
MyCell (Library* library, const Name& name);
virtual void _postCreate ();
virtual void _preDestroy ();
};

Extracted from the .cpp for this new type of cell.

MyCell::MyCell(Library* library, const Name&amp; name)
: Inherit(library, name)
{ }
MyCell* MyCell::Create(Library* library, const Name& name)
{
MyCell* myCell = new MyCell(library, name);
if (!myCell) throw Error("Can't create MyCell : allocation failed");
myCell->_postCreate(); // must not be forgotten!
return myCell;
}
void MyCell::_postCreate()
{
Inherit::_postCreate(); // must not be forgotten!
// complete here the post creation
}
void MyCell::_preDestroy()
{
Inherit::_preDestroy(); // must not be forgotten!
// complete here the pre-deletion.
}
Remark: The destructor, strictly speaking, is not defined because
necessary operations are done within the method _preDestroy. In the implementation of the class MyCell we have only used the type Inherit (and never Cell). This opens the door to hierarchy changes without affecting the code already written.
+

Extracted from the .h of a new type of cell.

class MyCell : public Cell {
public:
typedef Cell Inherit;
public:
// User-accessible creation method.
static MyCell* Create (Library* library, const Name& name);
protected:
// Internally used constructors & destructors.
MyCell (Library* library, const Name& name);
virtual void _postCreate ();
virtual void _preDestroy ();
};

Extracted from the .cpp for this new type of cell.

MyCell::MyCell(Library* library, const Name&amp; name)
: Inherit(library, name)
{ }
MyCell* MyCell::Create(Library* library, const Name& name)
{
MyCell* myCell = new MyCell(library, name);
if (!myCell) throw Error("Can't create MyCell : allocation failed");
myCell->_postCreate(); // must not be forgotten!
return myCell;
}
void MyCell::_postCreate()
{
Inherit::_postCreate(); // must not be forgotten!
// complete here the post creation
}
void MyCell::_preDestroy()
{
Inherit::_preDestroy(); // must not be forgotten!
// complete here the pre-deletion.
}
Remarks
The destructor, strictly speaking, is not defined because necessary operations are done within the method _preDestroy. In the implementation of the class MyCell we have only used the type Inherit (and never Cell). This opens the door to hierarchy changes without affecting the code already written.

Remark

The construction and deletion process of property objects is the same. It is mandatory for any new type of property to adopt the same protocol.

@@ -180,7 +180,7 @@ Remark
Returns
The property of Name name attached to the object, if it exists, else NULL.
-
Remark: When writting what follows :
forEach(DBo*, idbo, dbos) {
Property* property = idbo->getProperty("width");
if (property) {
// do something
}
}
+
Remarks
When writting what follows :
forEach(DBo*, idbo, dbos) {
Property* property = idbo->getProperty("width");
if (property) {
// do something
}
}

There is construction of a name (from a character string) for each visited dbo in order to find the property. It's more efficient to write :

Name width = "width";
forEach(DBo*, idbo, dbos) {
Property* property = idbo->getProperty(width);
if (property) {
// do something
}
}

Or still better :

static Name WIDTH = "width";
forEach(DBo*, idbo, dbos) {
Property* property = idbo->getProperty(WIDTH);
if (property) {
// do something
}
}

This remark applies each time you handle names.

@@ -245,7 +245,7 @@ Remark

Adds the Property property to the set of object properties. Properties being named, if an other one already exists in the set, with the same name, this last will be in a first step removed from the set.

-
Remark: Does nothing if the Property object is already attached to the
object.
+
Remarks
Does nothing if the Property object is already attached to the object.
Caution: An exception is thrown if the Property pointer is NULL.
@@ -266,7 +266,7 @@ Remark

removes the property property from the set of object properties.

-
Remark: Does nothing if the Property object is not attached to the object.
+
Remarks
Does nothing if the Property object is not attached to the object.
Caution: An exception is thrown if the Property pointer is NULL.
@@ -317,7 +317,7 @@ Remark
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 66f55dc3..d381ff6d 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 e92a9b28..5708d86e 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 c05560f8..bd51ffca 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 bac7b2ac..cceecdbe 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 bc28ff0d..07d0fd5f 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 dcbd250a..5d30a9cd 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1DebugSession.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1DebugSession.html @@ -69,7 +69,7 @@ Static Public Member Functions

Detailed Description

Enable/Disable trace information (API).

DebugSession provide a way to control what and when text send through the cdebug stream is printed. cdebug display selectively the trace/debug messages between a minLevel and a maxLevel :

-\[ minLevel \leq level < maxLevel \] +\[ minLevel \leq level < maxLevel \]

DebugSession manage a stack of (min,max) pairs so multiple session can be opened. On opening a new session the (min,max) pair is pushed on the top of the stack and define the active range of trace levels. On closing, the pair is removed from the top and the previous range became active again. Do not forget to match any opening with a closing.

In addition to the levels, a DebugSession also can be triggered by a symbol (i.e. a (void*) pointer). The DebugSession has contains a user managed table of symbols. When, in opening a session, you give a symbol, the session will actually changes the trace levels only if the symbol is in the internal table. Otherwise a session is still opened but it will keep the current trace levels. So, in any case the session must be closed.

@@ -378,7 +378,7 @@ Trace Levels
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 bdda5aa1..6afe96c1 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Diagonal-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Diagonal-members.html @@ -75,7 +75,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 fd218dc8..5b622dde 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Diagonal.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Diagonal.html @@ -212,7 +212,7 @@ Introduction
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 4a5180d8..2289f915 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 203749c6..897d5876 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 fba69c6f..e6fa792d 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Entity-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Entity-members.html @@ -62,7 +62,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 95aeceb8..bf7646e5 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Entity.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Entity.html @@ -159,7 +159,7 @@ Unique Identifier
Returns
Returns the bounding box of the entity. It is defined as the smallest box enclosing the entity or its constituents.
-
Remark: For the Plugs, which are not objects of the physical layout,
the returned envelope is a Box of null dimensions (ponctual) centered on the location of the master Net of the Plug, to which has been applied the transformation associated to the Instance of the Plug.
+
Remarks
For the Plugs, which are not objects of the physical layout, the returned envelope is a Box of null dimensions (ponctual) centered on the location of the master Net of the Plug, to which has been applied the transformation associated to the Instance of the Plug.

Implemented in Hurricane::RoutingPad.

@@ -174,7 +174,7 @@ Unique Identifier
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Entity_1_1CompareById-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Entity_1_1CompareById-members.html deleted file mode 100644 index fac3cdcb..00000000 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Entity_1_1CompareById-members.html +++ /dev/null @@ -1,74 +0,0 @@ - - - - - Hurricane Documentation - - - - - -

Hurricane VLSI Database

- -
- - - - - -
-
-
-
Hurricane::Entity::CompareById Member List
-
-
- -

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

- -
-
-
- - - - - -
Generated by doxygen 1.8.5 on Mon Oct 1 2018Return to top of page
- - - - - -
Hurricane VLSI DatabaseCopyright © 2000-2016 Bull S.A. All rights reserved
- - diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Error-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Error-members.html index 19addf69..8178ac12 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 6e72b6a3..b02f2dc0 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 9392de80..1e74fcb7 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 15995918..8c4eaf9b 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Exception.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Exception.html @@ -83,7 +83,7 @@ Static Public Member Functions

Introduction

The Exception class groups all exceptions thrown by functions from the API. This virtual class is only useful to catch exceptions originating from one of those functions.

-
Remark: Copy construction is disabled.
+
Remarks
Copy construction is disabled.

Example

try {
// do something
}
catch (Exception& exception) {
// Go through here if the exception comes from a function of the API
cerr << exception.what() << endl;
exit(1);
}
catch (...) {
// Go through here for all other system exceptions
cerr << Error("abnormal termination") << endl;
// We use the Error() in order to get the same kind of printing
exit(2);
}

Member Function Documentation

@@ -234,7 +234,7 @@ Example
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 90b814e5..2b8065d4 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 b1902b2e..34c79b4d 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 1d991404..17450e48 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 7f9f437a..026126bd 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1GenericCollection.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1GenericCollection.html @@ -87,7 +87,7 @@ class Hurricane::GenericCollection< Type >

Generic Collection auto-pointer.

This class is an auto-pointer like wrapped around the raw collection. The database systematically returns collections wrapped inside GenericCollection.

-
Remark: The destruction of a GenericCollection triggers the destruction of
the raw collection.
+
Remarks
The destruction of a GenericCollection triggers the destruction of the raw collection.

Constructor & Destructor Documentation

◆ GenericCollection() [1/3]

@@ -115,7 +115,7 @@ template<class Type>

Constructor from a raw Collection.

-
Remark: This constructor build a copy of the raw collection. So the originating
collection can be safely deleted.
+
Remarks
This constructor build a copy of the raw collection. So the originating collection can be safely deleted.
@@ -145,7 +145,7 @@ template<class Type>

Constructor from a raw Collection.

-
Remark: This constructor build a copy of the raw collection. So the originating
collection can be safely deleted.
+
Remarks
This constructor build a copy of the raw collection. So the originating collection can be safely deleted.
@@ -175,7 +175,7 @@ template<class Type>

Constructor from a raw Collection.

-
Remark: This constructor do not build a copy of the raw collection. So the original
raw collection must not be deleted. It's deletion will occurs with the one of the GenericCollection.
+
Remarks
This constructor do not build a copy of the raw collection. So the original raw collection must not be deleted. It's deletion will occurs with the one of the GenericCollection.
@@ -188,7 +188,7 @@ template<class Type>
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 21a9c4fb..e0a6fb50 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 63481451..28dae93e 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1GenericFilter.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1GenericFilter.html @@ -77,7 +77,7 @@ class Hurricane::GenericFilter< Type >

Generic Filter auto-pointer.

This class is an auto-pointer like wrapped around the raw filter. The database systematically returns filters wrapped inside GenericFilter.

-
Remark: The destruction of a GenericFilter triggers the destruction of
the raw filter.
+
Remarks
The destruction of a GenericFilter triggers the destruction of the raw filter.

Constructor & Destructor Documentation

◆ GenericFilter() [1/3]

@@ -105,7 +105,7 @@ template<class Type >

Constructor from a raw Filter.

-
Remark: This constructor build a copy of the raw filter. So the originating
filter can be safely deleted.
+
Remarks
This constructor build a copy of the raw filter. So the originating filter can be safely deleted.
@@ -135,7 +135,7 @@ template<class Type >

Constructor from a raw Filter.

-
Remark: This constructor build a copy of the raw filter. So the originating
filter can be safely deleted.
+
Remarks
This constructor build a copy of the raw filter. So the originating filter can be safely deleted.
@@ -165,7 +165,7 @@ template<class Type >

Constructor from a raw Filter.

-
Remark: This constructor do not build a copy of the raw filter. So the original
raw filter must not be deleted. It's deletion will occurs with the one of the GenericFilter.
+
Remarks
This constructor do not build a copy of the raw filter. So the original raw filter must not be deleted. It's deletion will occurs with the one of the GenericFilter.
@@ -178,7 +178,7 @@ template<class Type >
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 b583773f..601aa93e 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 17efcba2..d6015989 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1GenericLocator.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1GenericLocator.html @@ -74,7 +74,7 @@ class Hurricane::GenericLocator< Type >

Generic Locator auto-pointer.

This class is an auto-pointer like wrapped around the raw locator.

-
Remark: The destruction of a GenericLocator triggers the destruction of
the raw locator.
+
Remarks
The destruction of a GenericLocator triggers the destruction of the raw locator.

Constructor & Destructor Documentation

◆ GenericLocator() [1/3]

@@ -102,7 +102,7 @@ template<class Type>

Constructor from a primary Locator.

-
Remark: This constructor build a copy of the raw locator. So the originating
locator can be safely deleted.
+
Remarks
This constructor build a copy of the raw locator. So the originating locator can be safely deleted.
@@ -132,7 +132,7 @@ template<class Type>

Constructor from a primary Locator and a Filter.

-
Remark: This constructor build a copy of the raw locator. So the originating
locator can be safely deleted.
+
Remarks
This constructor build a copy of the raw locator. So the originating locator can be safely deleted.
@@ -162,7 +162,7 @@ template<class Type>

Constructor from a raw Locator.

-
Remark: This constructor do not build a copy of the raw locator. So the original
raw locator must not be deleted. It's deletion will occurs with the one of the GenericLocator.
+
Remarks
This constructor do not build a copy of the raw locator. So the original raw locator must not be deleted. It's deletion will occurs with the one of the GenericLocator.
@@ -175,7 +175,7 @@ template<class Type>
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 17992406..f30b57b9 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Go-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Go-members.html @@ -70,7 +70,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 2b55886b..cd9d852b 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Go.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Go.html @@ -129,7 +129,7 @@ Materialization

A graphical object can be materialized or not.

A graphical object is said materialized when it is effectively inserted into a quadtree. It has then a graphical appearance (it's the least it can do) but also it will be taken into account within each collection which uses quadtrees in order to find its constituents (like the collection returned by the call cell->GetComponentsUnder(area) for instance).

On the other hand, non materialized graphic objects will neither be visible nor taken into account by those collections. This may be a significant advantage in some situations and a great drawback in others.

-
Remark: Plugs are never materialized.
+
Remarks
Plugs are never materialized.

Update sessions

The location of an object within its quadtree depends of its bounding box, if a modification of this one must occur for any reason, the object must be removed from the quadtree before doing the modification and re-inserted after, at the right place, according to its new bounding box.

@@ -386,7 +386,7 @@ Construction and destruction
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 e268fe4d..500bbf12 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 beca4210..88b9da83 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Hook.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Hook.html @@ -149,7 +149,7 @@ Constructor and Destructor

Returns: the component whose hook represents a part.

-
Remark: The result is never NULL because hooks are byforce nested
objects in their component.
+
Remarks
The result is never NULL because hooks are byforce nested objects in their component.
@@ -168,7 +168,7 @@ Constructor and Destructor

Returns: the next hook within the ring.

-
Remark: The result is never NULL because every hook has by
construction its next one (which may be itself is the ring is empty).
+
Remarks
The result is never NULL because every hook has by construction its next one (which may be itself is the ring is empty).
@@ -187,7 +187,7 @@ Constructor and Destructor

Returns: the previous hook within the ring.

-
Remark: Less efficient than getNextHook because it requires a
complete ring loop.
+
Remarks
Less efficient than getNextHook because it requires a complete ring loop.
@@ -206,7 +206,7 @@ Constructor and Destructor

Returns: the master of the relation master-slaves identified by the hook.

-
Remark: May return itself if the hook is a master and return NULL if
the hook is a slave and has no associated master.
+
Remarks
May return itself if the hook is a master and return NULL if the hook is a slave and has no associated master.
@@ -225,7 +225,7 @@ Constructor and Destructor

Returns: the first master found when starting the search immediately after the given hook.

-
Remark: May return NULL if there is no master within the ring or
return the hook itself if it is a master and the only one in the ring.
+
Remarks
May return NULL if there is no master within the ring or return the hook itself if it is a master and the only one in the ring.
@@ -244,8 +244,9 @@ Constructor and Destructor

Returns: the first master found when starting a backwards search immediately before the given hook.

-
Remark: May return NULL if there is no master within the ring or
return the hook itself if it is a master and the only one in the ring.
-
Remark: Of course the search is done in the natural forward direction
(else it would be trully inefficient).
+
Remarks
May return NULL if there is no master within the ring or return the hook itself if it is a master and the only one in the ring.
+
+Of course the search is done in the natural forward direction (else it would be trully inefficient).
@@ -312,7 +313,7 @@ Constructor and Destructor

Returns: true if the hook must be considered as a master, else false.

-
Remark: For any new kind of hook this predicate must be overloaded.
+
Remarks
For any new kind of hook this predicate must be overloaded.
@@ -332,7 +333,7 @@ Constructor and Destructor

If the hook is a slave :

Returns: true if the hook has an associated master, else false.

-
Remark: You can't find two slaves in the same ring without at least a
master.
+
Remarks
You can't find two slaves in the same ring without at least a master.

If the hook is a master :

Let us consider the hyper-ring made upon hyper-hooks. Then the function returns true if the ring contains at least an other master else false.

Caution: The meaning here is very different than for a slave hook!
@@ -355,7 +356,7 @@ Constructor and Destructor

If the hook is a slave :

detaches the hook from its ring and returns its old predecessor.

-
Remark: Will return NULL if the hook is the only one in the ring.
+
Remarks
Will return NULL if the hook is the only one in the ring.

If the hook is a master :

Let us consider the hyper-ring made upon hyper-hooks. Then, the function detaches the hyper-hook (the sub-ring made up of the master and its slaves, if any) from the hyper-ring and returns the old predecessor of the hyper-hook.

Within the detached hyper-hook, the relationship master hook

    @@ -406,7 +407,7 @@ Constructor and Destructor

merges the rings represented by the two hooks which both must be masters, returns <masterHook>.

-
Remark: Throws an exception if both hooks are not masters.
+
Remarks
Throws an exception if both hooks are not masters.

This function doesn't change the two relatioships master-slaves but modifies the connection request between corresponding hyper-hooks.

@@ -420,7 +421,7 @@ Constructor and Destructor
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 9bd53cbb..7b6924bc 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Horizontal-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Horizontal-members.html @@ -92,7 +92,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 c265e8e6..9e1dd1d0 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Horizontal.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Horizontal.html @@ -341,7 +341,7 @@ Introduction

Returns: the relative source abscissa of the segment (may be absolute if the source extremity isn't anchored).

-
Remark: If you want to get the absolute one use the member function
getSourceY() defined at the Segment level.
+
Remarks
If you want to get the absolute one use the member function getSourceY() defined at the Segment level.
@@ -368,7 +368,7 @@ Introduction

Returns: the relative target abscissa of the segment (may be absolute if the target extremity isn't anchored).

-
Remark: If you want to get the absolute one use the member function
getTargetY() defined at the Segment level.
+
Remarks
If you want to get the absolute one use the member function getTargetY() defined at the Segment level.
@@ -419,7 +419,7 @@ Introduction
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 f3a2305c..db8d8f0b 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1HyperNet-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1HyperNet-members.html @@ -57,7 +57,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 5d70b1c4..c78deaad 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1HyperNet.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1HyperNet.html @@ -70,7 +70,7 @@ Public Member Functions Introduction

The HyperNet is a part of the trans-hierarchical mechanism. An HyperNet is build upon a Net Occurrence, this occurrence is the root of a tree of Net occurrences which represent the Net as if flattened. The walkthroughs are provided as Collections.

In all the walkthrough, if doExtraction is set, a simple layout extraction is performed. Of course, it makes the walkthrough much slower. By default it's disabled and the Net occurrence tree is created only from the Plug information.

-
Remark: The allowInteruption is deprecated and do nothing.
+
Remarks
The allowInteruption is deprecated and do nothing.

Constructor & Destructor Documentation

◆ HyperNet()

@@ -234,7 +234,7 @@ Introduction
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 abca1b3b..905d371a 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 ce68ab43..4ed5a1fd 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 8a5efe1d..0b0f978b 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Instance-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Instance-members.html @@ -82,7 +82,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 9c66d8a5..6c9ca627 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Instance.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Instance.html @@ -288,7 +288,7 @@ Instance Destruction

Create and return a pointer to a new instance of name <name> belonging to the cell <cell> and refering the cell <masterCell> through a transformation <transformation> if it is provided (else the identity transform is assumed).

Caution: Throws an exception if the cell <cell> is null, if the
<masterCell> is null, if an instance of same name already exists or if a cyclic assembly is detected.
-
Remark: If the <secureFlag> is set to false the verification of
the lack of cyclic assembly is skipped (you save some cpu time, but at your own risks).
+
Remarks
If the <secureFlag> is set to false the verification of the lack of cyclic assembly is skipped (you save some cpu time, but at your own risks).
@@ -542,7 +542,7 @@ Instance Destruction

Allows to change the instance name.

-
Remark: Throws an exception if the name is empty or if an instance
with the same name exists in the owner cell.
+
Remarks
Throws an exception if the name is empty or if an instance with the same name exists in the owner cell.
@@ -592,7 +592,7 @@ Instance Destruction

Allows to change the cell referenced by this instance.

Caution: Throws an exception if either the cell is null, a cyclic
assembly is detected or the substitution can't succeed.
-
Remark: If the <secureFlag> is set to false the verification of
the lack of cyclic assembly is skipped (you save some cpu time, but at your own risks).
+
Remarks
If the <secureFlag> is set to false the verification of the lack of cyclic assembly is skipped (you save some cpu time, but at your own risks).
Important: In order to succeed with the substitution, it is necessary
that for each connected plug, refering an external net of the old master cell, a net of same name can be found in the new master cell.

The properties of the instance, of its existing plugs and of the different occurences of those ones are preserved. On the other hand, all the hierarchical pathes going through that instance and not ending on it, as well as all associated occurences, become obsolete. The properties attached to those occurences are therefore deleted.

@@ -646,7 +646,7 @@ Instance Destruction
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 79e3ab0a..6d3b24ff 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 c7e9e427..196b9be9 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 3b61cb6a..7efe15fc 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 9141bcc1..86badf53 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 7192874b..6faf523b 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Interval-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Interval-members.html @@ -79,7 +79,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 d0e0b7a0..ed349f44 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Interval.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Interval.html @@ -239,7 +239,7 @@ Remark

Equality operator.

-
Remark: Two empty intervals are always different.
+
Remarks
Two empty intervals are always different.
@@ -737,7 +737,7 @@ Remark
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 9b8a1ba3..d17eab1b 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 a3762483..d813e4f1 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 d1f4b8fe..f0711451 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 67c42aaa..34d34e89 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 c82eaaed..9a62c33d 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 d3644cf2..8e41e4f2 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Layer.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Layer.html @@ -394,7 +394,7 @@ Looking Up a Layer from a Mask

Returns: the collection of basic layers within this layer.

-
Remark: For a basic layer the collection contains this one only.
+
Remarks
For a basic layer the collection contains this one only.
@@ -421,7 +421,7 @@ Looking Up a Layer from a Mask

Returns: The uppermost layer of that layer. On BasicLayer, it is always the layer itself. In symbolic layers the meaning depends on the object structure.

-
Remark: In symbolic layers, top & bottom are not related to the Layer::Mask
but to the structuration of the layer. It is advisable that the designer create layers and symbolic layers in way that ensure the top layer is indeed the one with the greater mask.
+
Remarks
In symbolic layers, top & bottom are not related to the Layer::Mask but to the structuration of the layer. It is advisable that the designer create layers and symbolic layers in way that ensure the top layer is indeed the one with the greater mask.
@@ -666,7 +666,7 @@ Looking Up a Layer from a Mask

sets or changes the layer name.

-
Remark: An exception is thrown if the name is empty or if there is an
other layer with that name.
+
Remarks
An exception is thrown if the name is empty or if there is an other layer with that name.
@@ -834,7 +834,7 @@ Looking Up a Layer from a Mask
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 ee547313..ed4cd15f 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 c528f54d..f718649d 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Library.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Library.html @@ -408,7 +408,7 @@ Introduction

Allows to change the library name.

-
Remark: Throws an exception if the new name is empty or if the
library owning the library (if any) has already a sub library with the same name.
+
Remarks
Throws an exception if the new name is empty or if the library owning the library (if any) has already a sub library with the same name.
@@ -421,7 +421,7 @@ Introduction
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 a3d52f32..0b22da75 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 cc26e834..8ec498fb 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 4dd27058..95924a02 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 b15c3cff..4d4d633a 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Locator.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Locator.html @@ -87,7 +87,7 @@ General concepts

Walk progression The function progress() moves forward the locator on the next element of the set (does nothing if called after the last element).

Usage examples

-

The following sample code shows how to trace the nets of a given cell

Cell* cell = ...; // we get the cell
if (cell) {
// cell->getNets()
// returns the nets collection of the cell
// and getLocator()
// allocates and returns a locator for traversing those nets
Locator<Net*>* locator = cell->getNets().getLocator();
while (locator->isValid()) {
Net* net = locator->getElement();
assert(net->getCell() == cell);
locator->progress();
}
// don't forget to release the allocated locator
delete locator;
}

And this one how to print all pairs of nets of a given cell

Cell* cell = ...; // we get a cell
if (cell) {
Locator<Net*>* locator1 = cell->GetNets().getLocator();
while (locator1->isValid()) {
Net* net1 = locator1->getElement();
Locator<Net*>* locator2 = locator1->getClone();
while (locator2->isValid()) {
Net* net2 = locator2->getElement();
cerr << net1 << " " << net2 << endl;
locator2->progress();
}
delete locator2;
locator1->progress();
}
delete locator1;
}
Remark: Those examples are given in order to explain how locators
work. We will see in the following how to do that more simply by using generic locators, or even simpler by using the forEach macros.
+

The following sample code shows how to trace the nets of a given cell

Cell* cell = ...; // we get the cell
if (cell) {
// cell->getNets()
// returns the nets collection of the cell
// and getLocator()
// allocates and returns a locator for traversing those nets
Locator<Net*>* locator = cell->getNets().getLocator();
while (locator->isValid()) {
Net* net = locator->getElement();
assert(net->getCell() == cell);
locator->progress();
}
// don't forget to release the allocated locator
delete locator;
}

And this one how to print all pairs of nets of a given cell

Cell* cell = ...; // we get a cell
if (cell) {
Locator<Net*>* locator1 = cell->GetNets().getLocator();
while (locator1->isValid()) {
Net* net1 = locator1->getElement();
Locator<Net*>* locator2 = locator1->getClone();
while (locator2->isValid()) {
Net* net2 = locator2->getElement();
cerr << net1 << " " << net2 << endl;
locator2->progress();
}
delete locator2;
locator1->progress();
}
delete locator1;
}
Remarks
Those examples are given in order to explain how locators work. We will see in the following how to do that more simply by using generic locators, or even simpler by using the forEach macros.

Member Function Documentation

◆ getElement()

@@ -142,7 +142,7 @@ template<class Type>

This function allocates and returns a new locator that will have the same visiting course than the remaining one of the locator being cloned.

-
Remark: In principle there is no need to call this function, but if
you do so you must not forget to release the clone after its use or, from it, build a generic locator which will do that for you (to be explained later).
+
Remarks
In principle there is no need to call this function, but if you do so you must not forget to release the clone after its use or, from it, build a generic locator which will do that for you (to be explained later).
@@ -211,7 +211,7 @@ template<class Type>
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 50459ce3..13b51eea 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 628ee6fd..ec440440 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 b7ab9a57..88284533 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 dffaf369..807054ff 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Name.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Name.html @@ -218,7 +218,7 @@ Introduction

Equality operator. Very fast because it only tests the equality of pointers to the two shared strings (and not the equality of the two strings).

-
Remark: Don't loose on one side what you save on the other as shown
in the following code :
Cell* cell = ...; // we get the cell
for_each_net(net, cellGetNets()) {
if (netGetName() == "vdd") {
... ;
}
end_for;
}
Indeed, for each equality test, a name will be created from the string "vdd". If the equality test is very fast, it is not the same for the name construction. So it is faster to write :
Cell* cell = ...; // we get the cell
Name vdd = "vdd";
for_each_net(net, cellGetNets()) {
if (netGetName() == vdd) {
...
}
end_for;
}
Or yet faster :
Cell* cell = ...; // we get the cell
static Name VDD = "vdd";
for_each_net(net, cellGetNets()) {
if (netGetName() == VDD) {
...
}
end_for;
}
+
Remarks
Don't loose on one side what you save on the other as shown in the following code :
Cell* cell = ...; // we get the cell
for_each_net(net, cellGetNets()) {
if (netGetName() == "vdd") {
... ;
}
end_for;
}
Indeed, for each equality test, a name will be created from the string "vdd". If the equality test is very fast, it is not the same for the name construction. So it is faster to write :
Cell* cell = ...; // we get the cell
Name vdd = "vdd";
for_each_net(net, cellGetNets()) {
if (netGetName() == vdd) {
...
}
end_for;
}
Or yet faster :
Cell* cell = ...; // we get the cell
static Name VDD = "vdd";
for_each_net(net, cellGetNets()) {
if (netGetName() == VDD) {
...
}
end_for;
}
@@ -363,7 +363,7 @@ Introduction
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 af9acc4d..ba4fd028 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Net-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Net-members.html @@ -103,7 +103,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 0c5665ea..7547c790 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Net.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Net.html @@ -364,7 +364,7 @@ Predefined filters

Returns: the signal direction (by default set to UNDEFINED).

-
Remark: This direction is meaningfull only for external nets.
+
Remarks
This direction is meaningfull only for external nets.
@@ -639,7 +639,7 @@ Predefined filters

Returns: the collection of plugs which have this net as master.

-
Remark: Meaningfull only for external nets.
+
Remarks
Meaningfull only for external nets.
@@ -658,7 +658,7 @@ Predefined filters

Returns: the collection of connected plugs which have this net as master.

-
Remark: Meaningfull only for external nets.
+
Remarks
Meaningfull only for external nets.
@@ -677,7 +677,7 @@ Predefined filters

Returns: the collection of unconnected plugs which have this net as master.

-
Remark: Meaningfull only for external nets.
+
Remarks
Meaningfull only for external nets.
@@ -961,7 +961,7 @@ Predefined filters

Allows to change net name.

-
Remark: Throws an exception if the new name is empty, or if a net
with same net already exists in the cell.
+
Remarks
Throws an exception if the new name is empty, or if a net with same net already exists in the cell.
@@ -1019,7 +1019,7 @@ Predefined filters

Sets the external net status to <state>.

-
Remark: This function will throw an exception if the net switches to
internal and there is a plug refering to it.
+
Remarks
This function will throw an exception if the net switches to internal and there is a plug refering to it.
@@ -1133,8 +1133,9 @@ Predefined filters

Merges the net <net> to the net <this> which keeps its characteristics (arity, global, external and direction).

Caution: An exception is thrown if the <net> is null or equal to
<this>, if the two nets don't belong to the same cell or if <net> is external and master net of a connected plug while net <this> is not external.
-
Remark: All the rubbers and the components of the <net> (and
also the plugs) become rubbers or components of the net <this>. Nevertheless if for a particular slave instance there was both a plug referencing the <net> and an other plug referencing <this>, the first is deleted to the advantage of the second, because a net can't have more than one plug for a given instance (the rings of the body hooks are then merged).
-
Remark: Once the merger done the net <net> is definitively
deleted. Its properties and those of its deleted plugs, if any, are lost (as well as the ones which could be attached to their occurences).
+
Remarks
All the rubbers and the components of the <net> (and also the plugs) become rubbers or components of the net <this>. Nevertheless if for a particular slave instance there was both a plug referencing the <net> and an other plug referencing <this>, the first is deleted to the advantage of the second, because a net can't have more than one plug for a given instance (the rings of the body hooks are then merged).
+
+Once the merger done the net <net> is definitively deleted. Its properties and those of its deleted plugs, if any, are lost (as well as the ones which could be attached to their occurences).
@@ -1154,7 +1155,7 @@ Predefined filters

Build a duplicate of net ( <this>) inside a cloned Cell <cloneCell>. The connectivity (Plug) or components of the original net are not copied.

-
Remark: It is likely that is a copy of this net's onwer Cell,
but it is not mandatory.
+
Remarks
It is likely that <cloneCell> is a copy of this net's onwer Cell, but it is not mandatory.
@@ -1167,7 +1168,7 @@ Predefined filters
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 ee7f0859..263f2125 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 7f53bb8b..cf080ff4 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 7c3adf34..91d7dd0c 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 cb5abd49..cb447b07 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 66f0f801..573ca549 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 dc39eb2b..2c16b4a5 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1NotFilter.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1NotFilter.html @@ -75,7 +75,7 @@ class Hurricane::NotFilter< Type >

Filter negation.

This filter invert the matching criterion of any other filter.

-
Remark: This is a raw Filter.
+
Remarks
This is a raw Filter.

Constructor & Destructor Documentation

◆ NotFilter() [1/2]

@@ -103,7 +103,7 @@ template<class Type>

Constructor from a raw Filter.

-
Remark: This constructor build a copy of the raw filter. So the originating
filter can be safely deleted.
+
Remarks
This constructor build a copy of the raw filter. So the originating filter can be safely deleted.
@@ -133,7 +133,7 @@ template<class Type>

Copy constructor.

-
Remark: This constructor build a copy of the raw filter. So the originating
filter can be safely deleted.
+
Remarks
This constructor build a copy of the raw filter. So the originating filter can be safely deleted.
@@ -146,7 +146,7 @@ template<class Type>
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 6bff64cd..d391a6b5 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 2e686256..786246dc 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Occurrence.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Occurrence.html @@ -128,7 +128,7 @@ Remarks

Builds an occurrence refering to an entity through a void path, in some way it is equivalent to the entity itself.

-
Remark: If the entity is null the occurrence is invalid.
+
Remarks
If the entity is null the occurrence is invalid.
@@ -159,7 +159,7 @@ Remarks

Builds an occurrence refering to an entity through a path (possibly void).

Caution: If the entity is null or if the path is uncompatible with the
entity, an exception is thrown.
-
Remark: The entity and the path are compatible if the path is void or
if the master cell of the path is the cell owning the entity.
+
Remarks
The entity and the path are compatible if the path is void or if the master cell of the path is the cell owning the entity.
@@ -485,7 +485,7 @@ Remarks

removes the property <property> from the occurrence property set.

-
Remark: Does nothing if the occurrence doesn't own this property
object.
+
Remarks
Does nothing if the occurrence doesn't own this property object.
Caution: If the occurrence is invalid or the property null, an
exception is thrown.
@@ -538,7 +538,7 @@ Remarks
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 c77a319e..50073875 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Pad-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Pad-members.html @@ -74,7 +74,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 889958ea..3c1151d6 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Pad.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Pad.html @@ -198,7 +198,7 @@ Introduction
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 16ee28a4..b986c247 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 5e0c9fb9..8838790f 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Path.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Path.html @@ -131,7 +131,7 @@ Remarks

Default constructor : the path is then void.

-
Remark: This path has no instance and will be the tail terminal path
of any other path.
+
Remarks
This path has no instance and will be the tail terminal path of any other path.
@@ -182,7 +182,7 @@ Remarks

Builds the path with head instance <headInstance> and tail path <tailPath>.

Caution: If the instance is null, or if the tail path is not
compatible with this head instance, an exception is thrown.
-
Remark: The head instance and the tail path are compatible if the
tail path is void or if the owner cell of the tail path is the model cell referenced by the head instance.
+
Remarks
The head instance and the tail path are compatible if the tail path is void or if the owner cell of the tail path is the model cell referenced by the head instance.
@@ -213,7 +213,7 @@ Remarks

Builds the path with head path <headPath> and tail instance <tailInstance>.

Caution: If the tail instance is null, or if the head path is not
compatible with this tail instance, an exception is thrown.
-
Remark: The tail instance and the head path are compatible if the
owner cell of the tail instance is the master cell of the head path (which is recall it, the model cell referenced by the last instance of the head path) or if the head path is empty (then compatible with any non null instance).
+
Remarks
The tail instance and the head path are compatible if the owner cell of the tail instance is the master cell of the head path (which is recall it, the model cell referenced by the last instance of the head path) or if the head path is empty (then compatible with any non null instance).
@@ -605,7 +605,7 @@ Remarks
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1PhysicalRule-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1PhysicalRule-members.html new file mode 100644 index 00000000..2b969666 --- /dev/null +++ b/hurricane/doc/hurricane/html/classHurricane_1_1PhysicalRule-members.html @@ -0,0 +1,76 @@ + + + + + Hurricane Documentation + + + + + +

Hurricane VLSI Database

+ +
+ + + + + + + + +
+
+
Hurricane::PhysicalRule Member List
+
+
+ +

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

+ + + + + + + + + + + +
addValue(double)Hurricane::PhysicalRuleinline
addValue(Hurricane::DbU::Unit value, Hurricane::DbU::Unit maxLength)Hurricane::PhysicalRuleinline
addValue(Hurricane::DbU::Unit hValue, Hurricane::DbU::Unit vValue, Hurricane::DbU::Unit maxLength)Hurricane::PhysicalRuleinline
getDoubleValue() constHurricane::PhysicalRuleinline
getValue(Hurricane::DbU::Unit length=0, bool hDir=true) constHurricane::PhysicalRuleinline
hasSteps() constHurricane::PhysicalRuleinline
isDbU() constHurricane::PhysicalRuleinline
isDouble() constHurricane::PhysicalRuleinline
isSymmetric() constHurricane::PhysicalRuleinline
setSymmetric(bool)Hurricane::PhysicalRuleinline
+
+
+ + + + + +
Generated by doxygen 1.8.14 on Tue Jul 21 2020Return to top of page
+ + + + + +
Hurricane VLSI DatabaseCopyright © 2000-2016 Bull S.A. All rights reserved
+ + diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1PhysicalRule.html b/hurricane/doc/hurricane/html/classHurricane_1_1PhysicalRule.html new file mode 100644 index 00000000..155f9453 --- /dev/null +++ b/hurricane/doc/hurricane/html/classHurricane_1_1PhysicalRule.html @@ -0,0 +1,431 @@ + + + + + Hurricane Documentation + + + + + +

Hurricane VLSI Database

+ +
+ + + + + + + + +
+ +
+
Hurricane::PhysicalRule Class Reference
+
+
+ +

Define a rule for the technology (API). + More...

+ +

Inherits Rule.

+ + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

bool isDouble () const
 
bool isDbU () const
 
bool isSymmetric () const
 
bool hasSteps () const
 
void setSymmetric (bool)
 
double getDoubleValue () const
 
DbU::Unit getValue (Hurricane::DbU::Unit length=0, bool hDir=true) const
 
void addValue (double)
 
void addValue (Hurricane::DbU::Unit value, Hurricane::DbU::Unit maxLength)
 
void addValue (Hurricane::DbU::Unit hValue, Hurricane::DbU::Unit vValue, Hurricane::DbU::Unit maxLength)
 
+

Detailed Description

+

Define a rule for the technology (API).

+

+Introduction

+

The constructor of Physical rule is not directly accessible, as thoses objects must be created only through the Technology class API (to be stored in the relevant tables).

+

PhysicalRule is a "one size fit class". As there will be only a small number of objects created (compare to other kinds) we choose to implement all variant in one class instead of creating a flock of derived classes and all the assorted paraphernalia. As a consequence, not all fields will be used at the same time, they are mutually exclusive.

+

Member Function Documentation

+ +

◆ isDouble()

+ +
+
+ + + + + +
+ + + + + + + +
bool Hurricane::PhysicalRule::isDouble () const
+
+inline
+
+

Tells if the rule describe non-length values (Volts, Ohms, Henry, Celsius, ...).

+ +
+
+ +

◆ isDbU()

+ +
+
+ + + + + +
+ + + + + + + +
bool Hurricane::PhysicalRule::isDbU () const
+
+inline
+
+

Tells if the rule uses physical lengths, with multiple steps or not.

+ +
+
+ +

◆ isSymmetric()

+ +
+
+ + + + + +
+ + + + + + + +
bool Hurricane::PhysicalRule::isSymmetric () const
+
+inline
+
+

Tells if the rule is symmetric.

+ +
+
+ +

◆ hasSteps()

+ +
+
+ + + + + +
+ + + + + + + +
bool Hurricane::PhysicalRule::hasSteps () const
+
+inline
+
+

Tells if the rule has more than one step, that is, is not uniform for all length.

+ +
+
+ +

◆ setSymmetric()

+ +
+
+ + + + + +
+ + + + + + + + +
void Hurricane::PhysicalRule::setSymmetric (bool state)
+
+inline
+
+

Set the symmetric state of the rule. This used only for rules bound to two layers.

+ +
+
+ +

◆ getDoubleValue()

+ +
+
+ + + + + +
+ + + + + + + +
double Hurricane::PhysicalRule::getDoubleValue () const
+
+inline
+
+
Returns
The double value of the rule.
+ +
+
+ +

◆ getValue()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
double Hurricane::PhysicalRule::getValue (Hurricane::DbU::Unit length = 0,
bool hDir = true 
) const
+
+inline
+
+
Parameters
+ + + +
lengthThe length for which we want the rule's value.
hDirIn case of non-isotropic rule, which dimension do we want.
+
+
+
Returns
The rule's value for the given length. If no parameter is supplied, then, the X value of the first step is returned.
+ +
+
+ +

◆ addValue() [1/3]

+ +
+
+ + + + + +
+ + + + + + + + +
void Hurricane::PhysicalRule::addValue (double value)
+
+inline
+
+

Set the double value of a rule.

+ +
+
+ +

◆ addValue() [2/3]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void Hurricane::PhysicalRule::addValue (Hurricane::DbU::Unit value,
Hurricane::DbU::Unit maxLength 
)
+
+inline
+
+
Parameters
+ + + +
valueThe value of the step to add.
maxLengthThe length up to which the rule is valid. passing zero as this argument means always valid.
+
+
+

Adds a new stepping value to the rule. If the rules never change, give a maxLength of zero and only call this function once on the rule. The rule is isotropic in X and Y.

+

This function can be called multiple time on a rule, each call will add a new step. Steps are defined and ordered according to maxLength.

+ +
+
+ +

◆ addValue() [3/3]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void Hurricane::PhysicalRule::addValue (Hurricane::DbU::Unit hValue,
Hurricane::DbU::Unit vValue,
Hurricane::DbU::Unit maxLength 
)
+
+inline
+
+
Parameters
+ + + + +
hvalueThe horizontal value of the step to add.
vvalueThe vertical value of the step to add.
maxLengthThe length up to which the rule is valid. passing zero as this argument means always valid.
+
+
+

Adds a new stepping value to the rule. If the rules never change, give a maxLength of zero and only call this function once on the rule. The rule is not isotropic, it defines a different value for X and Y.

+

This function can be called multiple time on a rule, each call will add a new step. Steps are defined and ordered according to maxLength.

+ +
+
+
The documentation for this class was generated from the following files: +
+
+
+ + + + + +
Generated by doxygen 1.8.14 on Tue Jul 21 2020Return to top of page
+ + + + + +
Hurricane VLSI DatabaseCopyright © 2000-2016 Bull S.A. All rights reserved
+ + diff --git a/hurricane/doc/hurricane/html/classHurricane_1_1Pin-members.html b/hurricane/doc/hurricane/html/classHurricane_1_1Pin-members.html index 9a43a08d..076e6013 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Pin-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Pin-members.html @@ -91,7 +91,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 0f124a19..a8376254 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Pin.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Pin.html @@ -166,7 +166,7 @@ Additional Inherited Members
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 6586a7ba..f76b7f7e 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Plug-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Plug-members.html @@ -77,7 +77,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 394cd963..c870f9ae 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Plug.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Plug.html @@ -139,7 +139,7 @@ Introduction net" because it is a net of the instance master cell (notice that this net can be asimilated to a "logical port").

A plug is unique, that is, for a given instance there is one and only one plug refering to a given master net.

Caution: When created, an instance creates all plugs corresponding to
the external nets of its master cell. So, some plugs may exist without being connected. Plugs are the only components which have this characteristic.
-
Remark: Plugs being completely managed by the system, you can't
define sub-types of plugs.
+
Remarks
Plugs being completely managed by the system, you can't define sub-types of plugs.

Constructors & Destructors

Plugs being completely managed by the system, there is no constructor nor destructor provided.

@@ -212,7 +212,7 @@ Predefined filters

Returns: the external net referenced by the plug in the master cell of its instance.

-
Remark: Don't mistake with getNet() which returns the net owning the
plug (or NULL if is unconnected).
+
Remarks
Don't mistake with getNet() which returns the net owning the plug (or NULL if is unconnected).
@@ -291,7 +291,7 @@ Predefined filters

Returns: true if the plug is connected, else false.

-
Remark: A plug is connected if the call upon getNet() doesn't
return NULL.
+
Remarks
A plug is connected if the call upon getNet() doesn't return NULL.

References Hurricane::Component::getNet().

@@ -314,7 +314,7 @@ Predefined filters

This method allows to connect or change the net of a plug.

Caution: An exception is thrown if the net owner cell differs from the
plug owner cell, or if there are components (contact, segments, ...) currently anchored on the plug.
-
Remark: The properties attached to this plug and its occurences are
left unchanged.
+
Remarks
The properties attached to this plug and its occurences are left unchanged.
@@ -327,7 +327,7 @@ Predefined filters
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 5c959ad2..b49420cc 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 01dbe8d9..3148029e 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 25da1d30..d14718b7 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Polygon-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Polygon-members.html @@ -75,7 +75,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 a7685438..b54e3bca 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Polygon.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Polygon.html @@ -200,7 +200,7 @@ Introduction
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 96af1d89..89c54539 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 619e6c94..0ce649cd 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1PrivateProperty.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1PrivateProperty.html @@ -107,7 +107,7 @@ Introduction

Destruction

The property has an owner, this one is informed of the property deletion and detaches it from its property list. If the object is a quark and if this was the last property owned it automatically deletes itself.

-
Remark: Once the property is attached to an object this one becomes
responsible of its automatic destruction. When a property changes its owner, the old owner delegates this task to the new one. On the other hand, a property which has never been attached to an owner will never be deleted automatically.
+
Remarks
Once the property is attached to an object this one becomes responsible of its automatic destruction. When a property changes its owner, the old owner delegates this task to the new one. On the other hand, a property which has never been attached to an owner will never be deleted automatically.

Returns: the current owner of the property (or NULL if at not been assigned yet).

@@ -121,7 +121,7 @@ Destruction
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 b66a96c7..a02b6e1a 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 d60c922f..5ad89927 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Property.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Property.html @@ -83,13 +83,13 @@ Introduction

Properties can be attached to the data base objects. Those properties must have a name in order to access them unambiguously. Of course only one property of a given name can be attached to an object.

In a first step we define two great categories of properties : the private properties which can be attached to only one object and the shared properties which can be attached to a large number of objects.

We will detail separately their respective behaviour, but we ensure that the management of each of those two property categories is absolutely secure. That is, on one side you can destroy explicitely a property (and the objects will be notified) and on the other side the properties will be automatically destroyed when no more object reference them.

-
Remark: By overloading some messages, as we will see later, it is
possible to set up different behaviours (like avoid the automatic delete).
+
Remarks
By overloading some messages, as we will see later, it is possible to set up different behaviours (like avoid the automatic delete).

The Quarks

As we shall see, the occurences are very simple objects which are used to designate some entity of the virtually unfolded hierarchy. Indeed, those occurences, which are built and deleted very quickly, are very volatile objects to which obvioulsy we can't attach properties directly.

But the interest of occurences is precisely to be able to attach them properties. In order to be able to do that, properties must be stored in a secure place where we could find them when needed. The quarks are here for that purpose : they are subtypes of data base object and therefore can store the properties attached to occurences.

Important: only one quark is attached to all occurences which refer the
same entity of the virtually unfolded hierarchy. This means that a property placed on an occurence can be read by any other occurence which refers the same entity of the virtually unfolded hierarchy.
-
Remark: Those quarks are also volatile objects because their only
reason to exist is that at least one property is attached to them.
+
Remarks
Those quarks are also volatile objects because their only reason to exist is that at least one property is attached to them.

How that works

We will detail the way properties are managed by analysing more precisely what happens at the level of property access functions both for data base objects and for occurences.

@@ -107,7 +107,7 @@ How that works

Two important things might happen then : The property is already owned by an other object (may be a quark) and that property is not a shared one and/or the object owns already a property with the same name.

Therefore it may happen, within this step, that adding a property to an object leads to the deletion of an other property on that object (name unicity) or on an other object (unicity of owner for a private property).

Which behaviour should we have in such conditions ? Shall we destroy the property which has been detached ? There is no unique behaviour which matches all needs. In order to solve this problem the properties must answer to two specific messages which are : onCapturedBy(DBo* dbo) when the property is attached to an object and onReleasedBy(DBo* dbo) when it is detached from the object. It is within that last message that the decision about the future of the property must be taken.

-
Remark: We will detail below those messages for both private and
shared properties.
+
Remarks
We will detail below those messages for both private and shared properties.

Removing a property

void DBo::remove(Property* property);

Removes the property <property> from the set of properties of the object.

void Occurrence::remove(Property* property);

The function searches for the quark associated to the occurence.

If the quark doesn't exist, there is nothing to do, the occurence has no properties.

Else the property is removed from the set of quark properties by calling the previous function. Furthermore if this removed property is the last one, the quark is automatically deleted.

@@ -127,7 +127,7 @@ Naming Conventions

In order to avoid that you must take some precautions in the choice of the property names.

So Hurricane uses properties prefixed by the string "Hurricane::",like for instance "Hurricane::Selector" for the property of type Selector.

So I suggest that different tools use a similar namming strategy which would keep confident all the community of hurricaners

-
Remark: Using names like "ZenTek::TimingNode" for the TimingNode type
property managed by tools from the ZenTek society decreases name conflicts, unless with other tools from the same society. A property name "SocietyName::ToolName::PropertyName" would be more secure.
+
Remarks
Using names like "ZenTek::TimingNode" for the TimingNode type property managed by tools from the ZenTek society decreases name conflicts, unless with other tools from the same society. A property name "SocietyName::ToolName::PropertyName" would be more secure.

Furthermore, if the community adopts this convention it will be possible to simplify some parts of the code by avoiding for example calls to the macro is_a to check that the collected property is of the expected type, as shown in the following example :

Property* property = occurence.getProperty("Hurricane::Selector");
if (property && is_a<Selector*>(property)) {
Selector* selector = (Selector*)property;
// ...
}

Which could become :

Selector* selector = (Selector*)occurence.getProperty("Hurricane::Selector");
if (selector) {
// ...
}

Remarks

The name of properties being of type Name and not of type string, the comparison between two names operates on their pointers and not on their character strings. The length of the name doesn't affect the comparison performance.

@@ -216,7 +216,7 @@ Remarks

This message is called upon when the property is added to the properties of <dbo>.

By default this function does nothing particular, but it must be overloaded for all property sub-classes. We will detail later the reaction to this message as taken by the private and shared property classes.

-
Remark: This message being already overloaded for private and shared
property classes there is no need to overload it again when specializing any of those two classes.
+
Remarks
This message being already overloaded for private and shared property classes there is no need to overload it again when specializing any of those two classes.
@@ -245,7 +245,7 @@ Remarks

This message is called upon when the property is removed from the <dbo> properties.

Important: The argument <dbo> is not (or no more) necessarily the
owner of the property which receives the message. The processing to be done in reaction to this message often depends on this observation. We will better understand this subtlety when studying private properties.
-
Remark: This message being already overloaded for private and shared
property classes there is no need to overload it again when specializing any of those two classes.
+
Remarks
This message being already overloaded for private and shared property classes there is no need to overload it again when specializing any of those two classes.
@@ -258,7 +258,7 @@ Remarks
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 372a6887..75891d23 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 436c3c57..40653026 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1QuadTree.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1QuadTree.html @@ -216,7 +216,7 @@ Introduction

inserts the graphic object within the quadtree (if not yet inserted).

Caution: If the graphic object pointer is NULL an exception is thrown.
-
Remark: When the number of objects contained in a quadtree leaf is
greater than some threshold, this leaf is split into four balanced sub-quadtrees. This recursive division provides a faster access even for very large quadtrees (to the detriment of some memory loss).
+
Remarks
When the number of objects contained in a quadtree leaf is greater than some threshold, this leaf is split into four balanced sub-quadtrees. This recursive division provides a faster access even for very large quadtrees (to the detriment of some memory loss).
@@ -237,7 +237,7 @@ Introduction

removes the object from the quadtree.

Caution: If the graphic object is NULL an exception is thrown.
-
Remark: When the number of objects included in the quadtree goes
below an other threshold, the inverse behaviour happens : the sub-quadtrees are deleted and the contained objects are taken in charge by this quadtree node (and memory is released to the system).
+
Remarks
When the number of objects included in the quadtree goes below an other threshold, the inverse behaviour happens : the sub-quadtrees are deleted and the contained objects are taken in charge by this quadtree node (and memory is released to the system).
@@ -250,7 +250,7 @@ Introduction
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 315fea1b..f88ab029 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 0d766865..3c569b6b 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 eaa3bb1b..38a35525 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 c8bef07a..0fcc98de 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 b772c332..170f4857 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1RegularLayer-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1RegularLayer-members.html @@ -80,7 +80,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 8981c986..57c77fc3 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1RegularLayer.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1RegularLayer.html @@ -222,7 +222,7 @@ RegularLayer::getOpposite()
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 2c95ae26..ed1cbfa9 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 71eed076..f1d4f271 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 13f3a6bd..19670bf3 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1RoutingPad-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1RoutingPad-members.html @@ -98,7 +98,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 9a55aff5..1ee828b4 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1RoutingPad.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1RoutingPad.html @@ -671,7 +671,7 @@ Introduction

When the RoutingPad is anchored on a Plug, allow to set the component that we will anchor on. The Occurrence of the RoutingPad is updated from the Plug to the component.

-
Remark: component must be tagged as Net external.
+
Remarks
component must be tagged as Net external.
@@ -721,7 +721,7 @@ Introduction
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 e5130e54..fbf5c484 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Rubber-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Rubber-members.html @@ -69,7 +69,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 7ceeb27e..0104f9e4 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Rubber.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Rubber.html @@ -208,7 +208,7 @@ Constructors & Destructors

Returns: the count associated to the rubber (in fact the number of master hooks of the ring).

-
Remark: This count is at least equal to two else the rubber doesn't
exists (no need).
+
Remarks
This count is at least equal to two else the rubber doesn't exists (no need).
@@ -257,7 +257,7 @@ Constructors & Destructors
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 2fd7eee7..72dabf6f 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Segment-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Segment-members.html @@ -93,7 +93,7 @@ $(function() {
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 7e89e19a..4d650d25 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Segment.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Segment.html @@ -644,7 +644,7 @@ Introduction
- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 9350d207..c53f77e9 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 95ebef2c..a934d673 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 2cf4659a..f644f0c6 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 a69cb4e6..2e6929a6 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 0d630dce..831d52a9 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 47279ec2..071354a2 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 a115d592..1227eff0 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 f23f9edb..83f3b996 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 8003a58f..a77663ba 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 40e40eb0..d72fb90c 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 eab6f296..6327109c 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 0e7b1b19..c7840412 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 dcf97fe2..af05549a 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 544272fc..ee639a7f 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 ada80efd..1e348bd2 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 8f5a107a..66d16397 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 8077f263..2e4f4fd6 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 e18b4d33..c909f6db 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 6d206011..e5b5c4de 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 6f8f3486..3ad0fed8 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 ba44738c..2d61bded 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 09dbe839..06995316 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 c8c9f937..7b9caa48 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Technology-members.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Technology-members.html @@ -47,8 +47,12 @@ $(function() {

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

+ + + + - + @@ -63,26 +67,29 @@ $(function() { + + - - - - - - - - - - + + + + + + + + + + +
addPhysicalRule(std::string ruleName, std::string reference)Hurricane::Technology
addPhysicalRule(std::string ruleName, std::string layerName, std::string reference)Hurricane::Technology
addPhysicalRule(std::string ruleName, std::string layer1Name, std::string layer2Name, std::string reference)Hurricane::Technology
addUnitRule(std::string ruleName, std::string reference)Hurricane::Technology
clearProperties()Hurricane::DBo
create(DataBase *, const Name &)Hurricane::Technologystatic
create(DataBase *, const Name &)Hurricane::Technologystatic
destroy()Hurricane::DBovirtual
getBasicLayer(const Name &) constHurricane::Technology
getBasicLayers() constHurricane::Technology
getMetalBelow(const Layer *, bool useSymbolic=true) constHurricane::Technology
getName() constHurricane::Technologyinline
getNthMetal(int) constHurricane::Technology
getPhysicalRule(std::string ruleName, std::string layerName) constHurricane::Technology
getPhysicalRule(std::string ruleName, std::string layer1Name, std::string layer2Name) constHurricane::Technology
getProperties() constHurricane::DBo
getProperty(const Name &) constHurricane::DBo
getRegularLayer(const Name &) constHurricane::Technology
getRegularLayers() constHurricane::Technology
getViaBetween(const Layer *, const Layer *, bool useSymbolic=true) constHurricane::Technology
getViaLayer(const Name &) constHurricane::Technology
getViaLayers() constHurricane::Technology
hasProperty() constHurricane::DBoinline
isMetal(const Layer *) constHurricane::Technologyinline
put(Property *)Hurricane::DBo
remove(Property *)Hurricane::DBo
removeProperty(const Name &)Hurricane::DBo
setName(const Name &)Hurricane::Technology
setSymbolicLayer(const Layer *)Hurricane::Technology
getUnitRule(std::string ruleName) constHurricane::Technology
getViaBetween(const Layer *, const Layer *, bool useSymbolic=true) constHurricane::Technology
getViaLayer(const Name &) constHurricane::Technology
getViaLayers() constHurricane::Technology
hasProperty() constHurricane::DBoinline
isMetal(const Layer *) constHurricane::Technologyinline
put(Property *)Hurricane::DBo
remove(Property *)Hurricane::DBo
removeProperty(const Name &)Hurricane::DBo
setName(const Name &)Hurricane::Technology
setSymbolicLayer(const Layer *)Hurricane::Technology


- +
Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 a85a586d..a6533c74 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Technology.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Technology.html @@ -100,10 +100,24 @@ Public Member Functions   LayergetNthMetal (int) const   +PhysicalRulegetUnitRule (std::string ruleName) const +  +PhysicalRulegetPhysicalRule (std::string ruleName, std::string layerName) const +  +PhysicalRulegetPhysicalRule (std::string ruleName, std::string layer1Name, std::string layer2Name) const +  void setName (const Name &)   bool setSymbolicLayer (const Layer *)   +PhysicalRuleaddUnitRule (std::string ruleName, std::string reference) +  +PhysicalRuleaddPhysicalRule (std::string ruleName, std::string reference) +  +PhysicalRuleaddPhysicalRule (std::string ruleName, std::string layerName, std::string reference) +  +PhysicalRuleaddPhysicalRule (std::string ruleName, std::string layer1Name, std::string layer2Name, std::string reference) +  - Public Member Functions inherited from Hurricane::DBo virtual void destroy ()   @@ -124,18 +138,34 @@ Public Member Functions - - + +

Static Public Member Functions

static Technologycreate (DataBase *, const Name &)
 
static Technologycreate (DataBase *, const Name &)
 

Detailed Description

Technological rules description (API).

Introduction

-

The Technology object provides the description of all the technology rules needed by the tools, currently it is limited to the description of all layers available. This object must be created once within the DataBase, and, in principle never destroyed (this would destroy layers and all objects laying on them ...).

-
Remark: There is only one technology for the current DataBase, and only one
Database object, so only one technology defined.
-

Member Function Documentation

- -

◆ create()

+

The Technology object provides the description of all the technology rules needed by the tools, currently it contains:

+
    +
  • The layers, roughly from bottom (i.e. closest to the subtsrate) to top. Layers can be basic, that is, match a real physical layer, or composite, like for VIAs in symbolic for macro-generation. It also provides a connexity table between layers.
  • +
  • Three sets of rules describing the technology rules (formerly the DTR in Alliance).
      +
    1. Zero Layer: rules not associated to any layer.
    2. +
    3. One Layer: rules associated to one layer.
    4. +
    5. Two Layers: rules associated to two layer.
    6. +
    +
  • +
+

This object must be created once within the DataBase, and, in principle never destroyed (this would destroy layers and all objects laying on them ...).

+

Here

+
Remarks
There is only one technology for the current DataBase, and only one Database object, so only one technology defined.
+

+Using PhysicalRules

+

How to create a simple one layer rule, setup the minimal width of metal1 layer to 0.5µm.

+
PhysicalRule* rule = tech->addPhysicalRule( "minWidth", "metal1" );
rule->addValue( DbU::fromPhysical( 0.5, DbU::UnitPower::Micro ), 0 );

How to create a one layer rule, with multiple steps. The minimal spacing of metal1 layer which will depend on the wire length. The spacing will be of 2µm for length below 50µm and 4µm above.

+
PhysicalRule* rule = tech->addPhysicalRule( "minWidth", "metal1" );
rule->addValue( DbU::fromPhysical( 2.0, DbU::UnitPower::Micro )
, DbU::fromPhysical( 50.0, DbU::UnitPower::Micro ) );
rule->addValue( DbU::fromPhysical( 4.0, DbU::UnitPower::Micro )
, DbU::fromPhysical( 1000.0, DbU::UnitPower::Micro ) );

How to create a two layers rule, with non-isomorphic values. The minimum enclosure of metal1 layer over cut1 will be 1µm in horizontal direction and 0.5µm in vertical. The order of layers is significant in the function call, it must be read as "The encolusre of metal1 over cut1".

+
PhysicalRule* rule = tech->addPhysicalRule( "minWidth", "metal1", "cut1" );
rule->addValue( DbU::fromPhysical( 1.0, DbU::UnitPower::Micro )
, DbU::fromPhysical( 0.5, DbU::UnitPower::Micro )
, 0 );

Member Function Documentation

+ +

◆ create()

@@ -144,7 +174,7 @@ Introduction - + @@ -168,7 +198,7 @@ Introduction
Technology * Hurricane::Technology::create *Technology * Hurricane::Technology::create ( DataBase dataBase,

Returns: a newly created technology named <name> for the data base <dataBase>.

-
Caution: Throws an exception if the dataBase is NULL, if the name is empty or if
the dataBase has already a technology.
+
Warning
Throws an exception if the dataBase is NULL, if the name is empty or if the dataBase has already a technology.
@@ -360,7 +390,7 @@ Introduction

Returns: the collection of layers of the technology.

-
Remark: The layers are traversed according to their
creation order. This order is very important, notably for the graphical display. Therefore deeper basic layers must be created first and upper layers later (the order of composite layers has no importance).
+
Remarks
The layers are traversed according to their creation order. This order is very important, notably for the graphical display. Therefore deeper basic layers must be created first and upper layers later (the order of composite layers has no importance).
@@ -634,6 +664,110 @@ Introduction

Returns: the Nth metal layer from the substrate. So a depth of zero should mean metal1.

+
+ + +

◆ getUnitRule()

+ +
+
+ + + + + + + + +
PhysicalRule * Hurricane::Technology::getUnitRule (std::string ruleName) const
+
+
Parameters
+ + +
ruleNameThe name of the rule
+
+
+

Returns: The matching rule in the table of unit rules.

+ +
+
+ +

◆ getPhysicalRule() [1/2]

+ +
+
+ + + + + + + + + + + + + + + + + + +
PhysicalRule * Hurricane::Technology::getPhysicalRule (std::string ruleName,
std::string layerName 
) const
+
+
Parameters
+ + + +
ruleNameThe name of the rule
layerNameThe name of the layer
+
+
+

Returns: The matching rule in the table of one layer rules.

+ +
+
+ +

◆ getPhysicalRule() [2/2]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
PhysicalRule * Hurricane::Technology::getPhysicalRule (std::string ruleName,
std::string layer1Name,
std::string layer2Name 
) const
+
+
Parameters
+ + + + +
ruleNameThe name of the rule
layer1NameThe name of the first layer
layer2NameThe name of the second layer
+
+
+

Returns: The matching rule in the table of two layers rules. The order of layers arguments is meaningful and should match The one used at rule creation.

+
@@ -672,6 +806,175 @@ Introduction

Sets this exact layer as symbolic (not is mask). Returns true on success (the layer exists).

+
+ + +

◆ addUnitRule()

+ +
+
+ + + + + + + + + + + + + + + + + + +
PhysicalRule * Hurricane::Technology::addUnitRule (std::string ruleName,
std::string reference 
)
+
+
Parameters
+ + + +
ruleNameThe name of the rule
referenceA free comentary string for further reference.
+
+
+

Returns: The newly added rule.

+

Create and add to Technology a rule whithout associated layer. The rule should contain a value which is anything but a length (Volt, Henry, Ohm, ...) The rule is created empty. For a detailed explanation see PhysicalRule.

+ +
+
+ +

◆ addPhysicalRule() [1/3]

+ +
+
+ + + + + + + + + + + + + + + + + + +
PhysicalRule * Hurricane::Technology::addPhysicalRule (std::string ruleName,
std::string reference 
)
+
+
Parameters
+ + + +
ruleNameThe name of the rule
referenceA free comentary string for further reference.
+
+
+

Returns: The newly added rule.

+

Create and add to Technology a rule whithout associated layer. The rule should contain only length value(s) (so DbU::Unit). The rule is created empty. For a detailed explanation see PhysicalRule.

+ +
+
+ +

◆ addPhysicalRule() [2/3]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
PhysicalRule * Hurricane::Technology::addPhysicalRule (std::string ruleName,
std::string layerName,
std::string reference 
)
+
+
Parameters
+ + + + +
ruleNameThe name of the rule
layerNameThe one layer associated to the rule.
referenceA free comentary string for further reference.
+
+
+

Returns: The newly added rule.

+

Create and add to Technology a rule associated to one layer. The rule should contain only length value(s) (so DbU::Unit). The rule is created empty. For a detailed explanation see PhysicalRule.

+ +
+
+ +

◆ addPhysicalRule() [3/3]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PhysicalRule * Hurricane::Technology::addPhysicalRule (std::string ruleName,
std::string layer1Name,
std::string layer2Name,
std::string reference 
)
+
+
Parameters
+ + + + + +
ruleNameThe name of the rule
layer1NameFirst layer associated to the rule.
layer2NameFirst layer associated to the rule.
referenceA free comentary string for further reference.
+
+
+

Returns: The newly added rule.

+

Create and add to Technology a rule associated to two layers. The order of layers is meaningful in case of an asymmetric rule. The rule should contain only length value(s) (so DbU::Unit). The rule is created empty. For a detailed explanation see PhysicalRule.

+

The documentation for this class was generated from the following files:
    @@ -683,7 +986,7 @@ Introduction
    - +
    Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 1182b62a..3398912d 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 4917ee70..134208d6 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Transformation.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Transformation.html @@ -124,10 +124,10 @@ Public Member Functions Introduction

    Transformation objects are a combination of a translation and an orientation defined by the new enumeration Transformation::Orientation whose different values are described in table below. The orientation is done before the translation, which is to say that the orientation is applied in the coordinate system of the model.

    The transformation formula is given by:

    -\[ \Large \left \{ \begin{array}{r c l l l l l} x' & = & (a \times x) & + & (b \times y) & + & tx \\ y' & = & (c \times x) & + & (d \times y) & + & ty \end{array} \right . \] +\[ \Large \left \{ \begin{array}{r c l l l l l} x' & = & (a \times x) & + & (b \times y) & + & tx \\ y' & = & (c \times x) & + & (d \times y) & + & ty \end{array} \right . \]

    where x and y are the coordinates of any point, x' and y' the coordinates of the transformed point, tx and ty the horizontal and vertical components of the translation and where a, b, c and d are the coefficients of the matrix associated to the orientation. See Orientation for the value of a, b, c & d.

    -
    Remark: Rotations are done counter clock wise
    +
    Remarks
    Rotations are done counter clock wise

    Constructor & Destructor Documentation

    ◆ Transformation() [1/4]

    @@ -840,7 +840,7 @@ Transformers
    - +
    Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 5e1f07bd..a469a3d4 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 713f11b9..3135e8df 100644 --- a/hurricane/doc/hurricane/html/classHurricane_1_1Transformation_1_1Orientation.html +++ b/hurricane/doc/hurricane/html/classHurricane_1_1Transformation_1_1Orientation.html @@ -95,7 +95,7 @@ $(function() {
    7
    Vertical symetry followed by a 90° rotation
    0
    1
    1
    0

    The transformation formula is given by:

    -\[ \Large \left \{ \begin{array}{r c l l l l l} x' & = & (a \times x) & + & (b \times y) & + & tx \\ y' & = & (c \times x) & + & (d \times y) & + & ty \end{array} \right . \] +\[ \Large \left \{ \begin{array}{r c l l l l l} x' & = & (a \times x) & + & (b \times y) & + & tx \\ y' & = & (c \times x) & + & (d \times y) & + & ty \end{array} \right . \]

    where x and y are the coordinates of any point, x' and y' the coordinates of the transformed point, tx and ty the horizontal and vertical components of the translation and where a, b, c and d are the coefficients of the matrix associated to the orientation.


    The documentation for this class was generated from the following file: @@ -227,7 +230,7 @@ $(function() {
    - +
    Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 b7030274..1df7f7f2 100644 --- a/hurricane/doc/hurricane/html/functions_func_t.html +++ b/hurricane/doc/hurricane/html/functions_func_t.html @@ -84,7 +84,7 @@ $(function() {
    - +
    Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 fc6b6c5e..5600c572 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 6235d52c..6f781463 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 61512490..e613282d 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
    diff --git a/hurricane/doc/hurricane/html/functions_g.html b/hurricane/doc/hurricane/html/functions_g.html index cdcc3125..2ad67ec3 100644 --- a/hurricane/doc/hurricane/html/functions_g.html +++ b/hurricane/doc/hurricane/html/functions_g.html @@ -178,6 +178,9 @@ $(function() {
  • getDirection() : Hurricane::Net
  • +
  • getDoubleValue() +: Hurricane::PhysicalRule +
  • getDx() : Hurricane::Contact , Hurricane::Transformation @@ -474,6 +477,9 @@ $(function() { , Hurricane::Occurrence , Hurricane::Query
  • +
  • getPhysicalRule() +: Hurricane::Technology +
  • getPlug() : Hurricane::Instance
  • @@ -596,7 +602,7 @@ $(function() { : Hurricane::Query
  • getSubSet() -: Hurricane::Collection< Type > +: Hurricane::Collection< Type >
  • getSupplyNets() : Hurricane::Cell @@ -672,6 +678,12 @@ $(function() { : Hurricane::Box , Hurricane::Interval
  • +
  • getUnitRule() +: Hurricane::Technology +
  • +
  • getValue() +: Hurricane::PhysicalRule +
  • getValueString() : Hurricane::DbU
  • @@ -702,7 +714,7 @@ $(function() { : Hurricane::Component , Hurricane::Net , Hurricane::RoutingPad -, Hurricane::Transformation +, Hurricane::Transformation
  • getXCenter() : Hurricane::Box @@ -717,7 +729,7 @@ $(function() { : Hurricane::Component , Hurricane::Net , Hurricane::RoutingPad -, Hurricane::Transformation +, Hurricane::Transformation
  • getYCenter() : Hurricane::Box @@ -746,7 +758,7 @@ $(function() {
    - +
    Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
    diff --git a/hurricane/doc/hurricane/html/functions_h.html b/hurricane/doc/hurricane/html/functions_h.html index 1d389f51..f1aae6a6 100644 --- a/hurricane/doc/hurricane/html/functions_h.html +++ b/hurricane/doc/hurricane/html/functions_h.html @@ -61,6 +61,9 @@ $(function() {
  • hasRubberCallback() : Hurricane::Query
  • +
  • hasSteps() +: Hurricane::PhysicalRule +
  • HighestLayer : Hurricane::RoutingPad
  • @@ -79,7 +82,7 @@ $(function() {
    - +
    Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
    diff --git a/hurricane/doc/hurricane/html/functions_i.html b/hurricane/doc/hurricane/html/functions_i.html index 7c5a5d82..bb5352b1 100644 --- a/hurricane/doc/hurricane/html/functions_i.html +++ b/hurricane/doc/hurricane/html/functions_i.html @@ -112,6 +112,12 @@ $(function() {
  • isConstrainedBy() : Hurricane::Box
  • +
  • isDbU() +: Hurricane::PhysicalRule +
  • +
  • isDouble() +: Hurricane::PhysicalRule +
  • isDummy() : Hurricane::JsonObject
  • @@ -156,6 +162,9 @@ $(function() {
  • isSupply() : Hurricane::Net
  • +
  • isSymmetric() +: Hurricane::PhysicalRule +
  • isTerminal() : Hurricane::Cell
  • @@ -184,7 +193,7 @@ $(function() {
    - +
    Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
    diff --git a/hurricane/doc/hurricane/html/functions_j.html b/hurricane/doc/hurricane/html/functions_j.html index 3957904b..d26b393e 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
    diff --git a/hurricane/doc/hurricane/html/functions_k.html b/hurricane/doc/hurricane/html/functions_k.html index 2e4efd5c..1b7a9bd5 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
    diff --git a/hurricane/doc/hurricane/html/functions_l.html b/hurricane/doc/hurricane/html/functions_l.html index 54c39f42..0b6a0116 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
    diff --git a/hurricane/doc/hurricane/html/functions_m.html b/hurricane/doc/hurricane/html/functions_m.html index 059f023a..8f858b74 100644 --- a/hurricane/doc/hurricane/html/functions_m.html +++ b/hurricane/doc/hurricane/html/functions_m.html @@ -81,7 +81,7 @@ $(function() {
    - +
    Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
    diff --git a/hurricane/doc/hurricane/html/functions_n.html b/hurricane/doc/hurricane/html/functions_n.html index 2a8bba96..05106153 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
    diff --git a/hurricane/doc/hurricane/html/functions_o.html b/hurricane/doc/hurricane/html/functions_o.html index bc96dd74..e9f12dea 100644 --- a/hurricane/doc/hurricane/html/functions_o.html +++ b/hurricane/doc/hurricane/html/functions_o.html @@ -122,7 +122,7 @@ $(function() {
    - +
    Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
    diff --git a/hurricane/doc/hurricane/html/functions_p.html b/hurricane/doc/hurricane/html/functions_p.html index 3c7aa8f5..3216c985 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
    diff --git a/hurricane/doc/hurricane/html/functions_q.html b/hurricane/doc/hurricane/html/functions_q.html index 52200fa9..77620211 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
    diff --git a/hurricane/doc/hurricane/html/functions_r.html b/hurricane/doc/hurricane/html/functions_r.html index 3ab685ff..90763b87 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
    diff --git a/hurricane/doc/hurricane/html/functions_s.html b/hurricane/doc/hurricane/html/functions_s.html index cf6072b1..52c69664 100644 --- a/hurricane/doc/hurricane/html/functions_s.html +++ b/hurricane/doc/hurricane/html/functions_s.html @@ -185,6 +185,9 @@ $(function() {
  • setSymbolicSnapGridStep() : Hurricane::DbU
  • +
  • setSymmetric() +: Hurricane::PhysicalRule +
  • setTerminalNetlist() : Hurricane::Cell
  • @@ -246,7 +249,7 @@ $(function() {
    - +
    Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
    diff --git a/hurricane/doc/hurricane/html/functions_t.html b/hurricane/doc/hurricane/html/functions_t.html index ace3cad0..f5c92516 100644 --- a/hurricane/doc/hurricane/html/functions_t.html +++ b/hurricane/doc/hurricane/html/functions_t.html @@ -90,7 +90,7 @@ $(function() {
    - +
    Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
    diff --git a/hurricane/doc/hurricane/html/functions_type.html b/hurricane/doc/hurricane/html/functions_type.html index d2ab928b..9015d9ab 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
    diff --git a/hurricane/doc/hurricane/html/functions_u.html b/hurricane/doc/hurricane/html/functions_u.html index 67df6f0e..985e5e41 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
    diff --git a/hurricane/doc/hurricane/html/functions_v.html b/hurricane/doc/hurricane/html/functions_v.html index 0c1fa9c4..dd089324 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
    diff --git a/hurricane/doc/hurricane/html/functions_w.html b/hurricane/doc/hurricane/html/functions_w.html index b10f0449..f13b8e92 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
    diff --git a/hurricane/doc/hurricane/html/graph_legend.html b/hurricane/doc/hurricane/html/graph_legend.html index 6867a639..13b29ecd 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
    diff --git a/hurricane/doc/hurricane/html/graph_legend.png b/hurricane/doc/hurricane/html/graph_legend.png index 2cfe61c6b05ff210ef1dc49b9b8bafefa1729bec..79e54025451bab12c874557f8ae7f36b9b8083de 100644 GIT binary patch literal 17670 zcma*P1zc6pwmu4if;5uSASEsBrjc%>Te_vYq`SKX>6C5|X^>7y>F)0T#B=X?=bm@& z|2^f$g3a1bre3U5YH9ks^CQ)iKZ0s$Xwe@*c{CyPF6dqfRi7|ec+yo*FHNtwXSxBJ z-KU<%qP7jU^RZ3y3mpra8E4z`4|9(`A&eW{`!k`)T ziTtDKvS76}>8JoWPmz|IdZyMgm7jzJf|e|hCFgmwO@)Dhkqtwdv1Lb!!|-*@;H3ze zM@%d!Dh$*YncTcQ5m8YLLVvp8hzJ>JX$lBJA<2yR85i=$SdDJd!K zJ<_Xw|1?>obY;$)$+&n0&gq4iav8w;|KxHyaCUKd4hMHhHx!P~QKr?zuGU^`7W^So zGrFR(a<a2nx6uGpVj^PV z$jA=8io5%JX=&-(^WDweT@4+bNHkjq2a0Gh1Lofo6K8?MocjgHzlIMCD4bpjgXJ|D`BJlU;(>k}8hm5qeRaI5DE1`^wEpCa) z$=7Gw;%Hs%}b zTwGk-E)Uq)*!IU!*XvG66h(wel^I;&S! z!^CA4!PwL^IJ4}>Ydkzka`HdruaRB|7Bn{E5z~{C!xC#NDfy%6F(*4?r^UvOw-a=9 zbl}jd`?Y-@5=_BoWMJrCLV$gS7oL!uoSd2(ibli8*b}%)Wkf?m1G(1I(gv>MYpImFzv{+7KBjj!$%xB%_g^;$|>gxGgOAR~UH=+^T zwrlVKy0x{nJrRT*a11)F1f*;0>s>}wZrH{>-~#jW^Js!|bykP{SMXU$Nl6Us3`;jV znnBUg@+u9C8tWK3{H>jn;01}$xxZ=hK7Pd6P)nGf3*Mc1^NmR>^NYz$jIRvbp$B+ z4d^T^RSD&DL?k}Gz8^k(U}0ts3lE^V3y5^u>XPJw84jNMz(-VJR*ug1BE< z%gMY(IVemoSl=BlRYjMoCddLoLYc2GciTUv+{m&;SCo&^*od(h}`t}e3AU?`PCb|Oi? zJM1M23Inh&$30x%_8;XG=Rb~Dd)^Zab%o-9edl;E|NF!MX$xE2fV926Jw84@ARwTu ztn74i_|X2Ypnw_?5z*M#7_8gb*;!vKRccbw-N^uBC=O%ZsEN0?H$DFEW|vdoE+-}? zj@%4nGI@FQI^l6}aCmrHtXi+T2L>dCg`bmRVqhq!s2G3#e6X{#v%US>Ne3G&K;6>< zq(?>$U+mApA>-L!?ES8>Ik2kv_QO|2-#MO-x)|+SL_0 z03;4P9_qaY${2(oRzoF^{os%9gMW!mDHPvV&>FS%h5t6^9b$v~_3Pw2*-w}V4c9wJ z;JgtE|55n+NBRT<8k(5KTPG+Pys9X^M=1=1=U3+5{LahIG~j z!>*G8b`WP@FaF?H+KxeaVK35H88wiYS<^`1`|ab~L`J??cWyAEfzcE++r_XU1a$dp;_K7|R)@t-gP!VnN#uiDY_ro>)=QQXsfso3m z>gu~l;@twp%1Y*%N#b~kvZ5ldo9ZuHxM0S_DndjHDxO8hqp9T%X1-cc&JO7j3WR_7 zaK_?5@p*>n{s+G?LtX%=Q@GkZPUWqk-dSZv{9WGpXli!1ScN>0C|xz@n7%qoC*j42buG8k( z+S+=1vA^3j9cBEFF^z$n2l>S7*RMfrG@mLFmyr0$R1!K4-10Ib@ZxBKAX3vRyoB|+ zy1H5)NK8#m22q?41Q%-R0^{}po?bz)61^-Q9`|3qeAyh%q@tu8GhszVMFm0Pu=TbK zxL{-Cm_9PpbZ~tXB&3}2ZBI{6BO@blNpW#;a6=FXgeOdUQQ)t2kcPcxq2%POFDTfW zsnADy@rIHz&v+mAZ!|o)zN;lBa0QW(S#+=M; zIa>{)#d*Cyh_P;NZjTppR_yHTrI3OEKff~wf7i3W#&Z;zpe8ILB64c3q%^s)NREPn zVzt;DZEs+UP}U2E0`cK*Ao!AoSLM3}&rkK&o=EcT>4GAl?4SMjIsXox{;$7BDU@G) zRdEYKd1ep$cWXQ?Y4FomD|cRRXtr;1)#!rH1n5V-N&L{_C0g7r z%f5ZnKTO5rc4mt0+w(0x^&aS-TEzafSbU8Nmv4XYB zfEni5v(8E!D0=^ZfDrRjUxx`{Je*=q>Ab}dm2br80`A0)T3gAXZ zUcP@Q?LSu8g>dGf74)?6o4&_+)<#5<_$Ltg%bD+f96wK=pwX`+0WyGqV?cfnG8>Tf zAFhHBe0*_n&@WY}SX5DQ3?QYSpzh%&ZMtiNUr#u`)5%(2#$Y4IIGM1zw3eo5`onjw zkuHZU&Vl*PPI5A`?DZ&b7`XoR_HT))S*#}i0LAg$J_}mEW!69C{>icA+F5Qu^YZdS z>Iex91u)HMIOBfVmptU>9~ST%x6{Eq7$Aa}kHI_nm46fk9d<}nN{%t%+aYGSNHw2>Gg_Vqn6mZf(t! zI@q1an=aGlam)UI9@|GAEe7z!)!cNs4i^LhJcqgYE`VA!mPP9?-(iQYA0Aqnna!5# z@agC*-Q3(H=zlC!go6tNp03&T9D#UcXGel8y4Rqxuy7ld?{38X!yUL~DQRgoR#pN+ z!b~2w0MwHI7lPg!e6?j>n(#e7eiG!Ge2;f_^z@|wG@}yp(y3Jn$;!&==y+Y9tOHL6 zPYN(DNOrMkm7~PSxwyEopM(iLj?MkQ@>;uvD~pergQ zz?Ltyl{cDL*6l^h- zgnaN20MXAKzsprqR-OWYAUr(0rKJTK8F^u0VJ>3)1Ztuyer&8io>oawabq}>&wguU zp~-1;ef`|_8m&Ns3$Ehs8N~$S+JAt`aBmnjY61K(wz09fzP<)-^zvZA{Q7O?uq^Q1 zl9J{O&~EoP4oDr&+>5!Ai2&3)JlwhX$vHYY0;Hy>IMEYH>~(*x;!YyiJ3h`rMYZ{G ze+wY^8zUZF{&ee|)$He+3Vr z<9^)L;7!b#=R}vK&|C3y?LZuWjMqf+5rrQ<)n}Q*9_pOvGSuj9*?WN zsw!@5UszC3@8DofWu>jXJ-6$b$?4;AWp)!6-0|JB3T&|L)samTtEyN$U)0yuI^N%$ ztE;Pnd%+F(FNR^22^Yyv4&?uTnSi-kOY;o(wccpa2!eK|UsF>TAZT9w*qC;Xi3f~> zV;+5ncBB2<$R2Zi4QJ=8Y~fHQq=A8f@sW|$ry_z|6!hK5N{W&9^_vJ9Ft$DCT^We$G#m!by;2d$p>u1Fnzf>{+6Hj0Xh zb4IC&NK-Wq-hBhiZBB>Ur;HMq`ueL&p0}mzXds{1=rT7oef{c{Pg}RF1yiz=Jji5I zBMbJkebY5eOiWHyNTS66op3b=EbsF|Bi63UX-xjP1{|lDG)4G3px{Nd0Q9mKNiWDVh&=K5^|# z4P_a({isF1IMNhzcIFHg!eccV0aPO3QcB9pmyWMM=0UIHB*)VB_3IbGtfbV`x_kJg zZN$GU1Pg9hJgv$~2cu^FClH7V3&qKz0sVK}4G2K61=~P^Vzb&^3Wxvzyy3I%?%e&N zva(1QWkJIBU6t;xq`n%x#xFc9><9XfmC zAa%>n4~(2DLhn+OPA~hWtX!gM1Aud0ULLSpkUsv(glLnbGstS@_r(4A^9Ka?urMUBYHa3HfdA0dD$`!tmM~4^Ckcv-)M<5ZNKRG* zyL7oD(AUSOkyBLsA2TbU+4e*GT&A?RSW;X(nb{D5S58{G)Wx!9r!de9SyNk^C|w3; zvNAaMWh)ET>vzc(Mn<)O(gAxDkyPoU2nKF0E+BW}U}eq8%>_BOtVkx+XCtGHwY9a)O%-+Z z{!dI(PgU&{=aw)`aiQV0BW`7+fssm!w`hV-F~}&xBTCE zH6jHW%s;uWLE}^#US3|nl@bF703LsJWd-7CYow?c=kMw!ny3W#xhj?aKx zT=r-X_E>jJw8O~{4-PIYE@t82aB^@sKRdH{ja8C|QleTx_U_&2#Dx7%zn52N@{%tc zT(n61)i!`f1_bw#*JBF+VWp+?@e=p9hi&n3agYp&2`iZ>9$e9 z3qfO=_o%(l|9JH+g~`v#Y`#ypA4jvP3l$2?3@98bD=CG=eY109ls{6@7AgcqRH*!e zRmf4)XL}TPewQpLNbdLYyQ5^e{A8b^Qe_N{;qH-wU~L%Tlp&qwQ(kXlvPEl(UpR%$ z=E#K7CeUkz#!l9Xwi>Gl`zlnLjs$W01w*2ame$jk(xlweccsX-b!%sQj-iq9aWV)$ z804hepz>m%N|RK_;JNFoWIwc<3AaBxY^%exnTelF^hRW`#}0fWvBKqoLPDzX@%y-m z{CnQ)ZhN$tj>jV7$7n=+%Mr?z6MF{Ty?V^Uv)`2A@8|D-f4!OMfmWlq8dLwg|G7j` z3_@PEPa!p8{4vgo8Q=T&E-RhED`wIGQ_-$k>CBNTxa#`KGZLk7%Tp0n(vi_Ogn zsKRr?@U+T7o8N3Rjp~;f}tt>XP?oU{N@4fjeJfX>=ii#BR@E+a{h-Fb9 zJC|nK4y_&^i#{7QDS9J{vZL1o4Gm4m{Yy4tGIm#|sI^mW*IxUzf^v795)+nERuN5J z5uKv408Pp>X_!`ly4g%ln-!2bbiFFFD1EaKNeuTcdGh{tGd1;;i58$djJh}JAZ zw;gA5Z*R5vw6<)T2_1(Tm`@3~$m5-avhtf1z0yVqO{VO|F||9dI0?z=H93;`qmAUw zj=S)HAY>+DhC=#R51oiDvLN|{(Pl83Ai2SXaGUrN-rK_1Xu7>7;E+>jMOVf4FCC!a zkDYyvj;`)+F#s~-AAvkK70HUy((ESUY1E9V=qqT`dEhy`ba4-3#H?-OjxUff5ZXYz z?pHLtu(Ci*6b$|p!#;Odv1XiFBHr z8CyXHGscRBLpmcdqVm3RD?E z@wDl&6Cdv)mD|Pd+bWZ2k1hnV6B8*{%T4RbPH%vhIjI$=3=$%1S-f}c{DJ-o zMapsE`k?7o0X1}FAR3uMA*SJaAD2_a{SIyRY7EcImumPNBGXgse^frb#XK?2M2-wO zA%!sf?p|gMC%pCW@VHf(r^c*INjYh-<6Z4emf&RCR=jVO7xyiBFW0dCqZ`k2qB;>b zV3|<9)Z>L`qZ!GA`jkB28HMeU#v&wgIo~7W^DUCUJEl*hMMHRut=rxmpI@NL$;SaT z(hk5HF0|gKv=;!B3IjI=;q}e_j#Q1j;SQl_lOBJWg(vs+sIZ!LhagCg^!Vc5V; z;qJ>|X%TrPB^_bW)$(^)a=n{vZ5~amJPW<;0%{7eGcyLDk}|jSIA7kjXkxMU686zz zmHgGo<)hx2$@^_gK}-q?3E}6rle9*~=~RM261nat!5fpsyFFp(vQ}8hKlH5atQ4o$ z*e-|{hrCM78Wjx(r;L3Hi`KFOYml+Hk$G}ow;{iVDAcWvOESX_`P;*UPS(3!#@lUv z>@|4R`u^=(`2>cV+v6TabiwoUdE;ROV(wngD<&?M*sP)=R?p_b*zu za6;zaPj6LAkvTJLX6(eRCR%uAM+0K3ZCBJ%^|f;f+TMmzPh?0DS-iNc>Y zIzJGwlKcA`rBn4jFSrV4MO9W_jG34bhH0u^y(1;11z&7zkpt`a_?JCyQSKMNk0PiP zVJDF%hi=nZLYR+){G=!|k08tMM^B%xcD3Ka$x>zJ6^@l2Eh3gCog6N< z)LW=E5k~`lDx}}1${4w)Bb?|lIzzkOdil`3^~)E$4NlOU;8qe&=s7(^EJ1#Ce3W^3u z-;~3iNbRmwS)?8DssEiUE8p9P8r9?**}4*2IuHxt#le=u`p;S5~jZDX9 zoY0Xt?`+8 zGM0yjNbuT_1rL5sd)Kj2TuuprpqM`>Qg`m{U0~v<#EOwSUA}C4*kLf{*)%)BXFH2O zZY2D=OM*x$qNH^HP4qn~u@Mzzt3FfF#ALjsh18J@IX1Sv@Gk0TueqkRN&6Dx<06aG zuv1m5`T5(#;c)TL>-7yrH3~J94+OQpW>z3mN~75FDw;ZV44XF&cQVOF1_-&2-*xRG ziKp4wDQTEYm34-Z;e#SV-A2u1#j>K((*n|Yb|n=*RZ_6A9bO#=a(p(}*)aowNOzK^ z#~Y?*F2eE5WTi|i@&3MTrunxpFT1X`?|1U}L9sGJZoSEPc4=gGw$vBX^G$G-Xe(IQ zp6*vnx62)SaHy5$=J+p=Mk=dVoa_nM9d^Wox2pYDUpjk{-&b@x1}B)^`X9YRYC64; zx!OOfPqg{)0_iw)<+5gVdZ&NH@<`{s*P};Q&*su1GWn~Y-zy{&q!yYIvrFceb3zV& zCHKtL-v6%TCDn}B4rzoOtPc!7T&*t8)#d8aIQ>U#{AjYQ%F=tbVWR=%jc{a8UxPWSKk24gu{fhaDZjQ&j5`e>=`(UXJQy)RKG;td4y z_NN}(iXk5;(~8Fic%DyoCbRVPt6h#6NjvzgP+4r~V>iWdo&J%_?uZ8S*qgK=LmnJ# zrB>3tA<2%Q&CUCkB%W=SU8`zgm1k{d5CPLr~R=W zBwiweWmCb*it74q6Yc|X)%&oXnqNI7CphQ00cYI>ky*|8MD1z7Z~?_v5P_pp}qwC7~SbjzuLMT zUpoGk@YnQY!chVAz3aYMC#OACG%UlD-^M~cWb|d4F0GFH$sK__3-cvG5yFjs*rsLE z#As-X0UaDyS2vy`{$YK!dlm(gw_tKa;l`jI5_8H(<3NHK%^}B4G~H>{7-M6obJsd? zr?|!JgLVTbWuH!=VU0RgxSx;rTlcr93=CO-T?R5O6!4hQzobMI6;J#TO=)N(5OE?d z&+j!e9Pz?y?p82s6S687afO>TX=}jn#$b5TxVTjNKSSPiGN1CKr;nFRZ1tWS9BE^l#uy(*RG-qMf-t=M z;iuZQ`@)Dh^f*Wp?R-`U1rH7 z$6Ux>E=KwKVqZ-~#oWrOr&J?2!e6YlH9scSZgtgnw)C)24pP>@Fm8r`Hy#;>o&UXo zu62Xou#qtQvn)&XWK0#@SU&*2m=R<+k>%?X8Sd`P<`wrdZle41QtQ$2mAoTC+Jg`sTIhB!?*Z?}8MZiMhW$VxL` z$GOL8gL`M~q9clQdi_!wUb;`R;$5v8i1M%IC=@HRHFN4;qeZ#xPE~5uRm0KFBMWVB z`=4$;*1A-MW-cja>ywH&nU_iOVaG~-8`w|h3W2Ib`x2Fn9cgvIte0cHcAH#Y9$OyK zIKQDicoiNFpin`7KT#s1LL6qniM^rW!rAsM9o-g{Y+1~qo#%c`e#)+U#CPth)-3_c zWnVl;@z|cpcj^HrBca0YK!sRcp?c-m1dwwmi#4HJs^mf>Xbf7e)dgFtgQ?yj<81hSDud@m1Tv!?>PF1P+*L#vdYNGp zxZKeqb<=oEBEC}c_0=Cg1DygSo3m?GjbJLche~kuL-ORWWNeoE{A*eK_u*S#Z${>d zRm#h?xNdu+b*qff2}8;E7TkE4nU8mrybuwET`scjCN*X6bV%P6PW@0H7*QVR71y}O zcn*oB>H)-r7DbWs9oQ6xXFA2Teo0IWEC>1cd=zc63AYSyjx}nVn_MSPH>54~^|ST2 zH2{Fo*6#W6fd`xZV~{9Ozxkkpwy&IcxYQ>lK>snr!1#uQgvjz<=lG89?d>&#(oahZ z1$L4YkSN%vl3_;5GD@MgVR%0DT|=wGxTm?__vXu8x1FV_3Q!IjJFOf3Nf`xozoO1W?J$){k6O6anHNxE!7*?#DPp6E=>|N z?Y33{C8f`@e+E7eI`E3Brga-pRweb(Vfz;6$h=GYY6y`w4hm%$&8qpPgdLNT(g@_I zpe6`PdPuLC4M2Toce-3fLBW?UM+3~J-kb8S)!*TJd_?!?325B~dc8V{(U-@^UZtAv zS-9ONe4Ya*-W4`SU^olf_;r^ z@x5xU%2WYRl*1tX2|_6igcWR`3@b+A<07##Xqmg2SXGd|qs;bw70JcrxJL}BX68!W z;_uu88IA9Y=kxW^;`SsfJ?kfB+8zfxjY~g1b%32Ql;$!&@`D0WkkQ+wv2YYU-3|}x z!+=wXrIa2U8Nq#TYak)f52VOQ$jGLwv(q|W^l0#qq^Xe+CQ?#pufb1DXo8cIlehu? zfq_7)2gD(=DXedKcnFET2aN#Hyx7|-rlH|BRigI%`SYuzn3x!~DkD=<({O_K%w%NG zNPz;F6ca&ON(!7Ye&7y7#F2zt0c{y<=GadVJUJ-|6bD7AF;_a~!m}2SowWNp z35iaiL+hyCq@_E4PtqFeAnyYL$zP2a#kacSv7z0GQVre{b#ClLRFGB-6N z<1mn1a(pJp@Ha3tB=w7ljh#!k8lZ#i**pbxW_E+#C?I*(!=3t!l>IE$4JbGIuCFQ% zb|yDd*}J5YzR&&mU zLVAg|OPWPuGiMJu3f=O%XQ!VTB{M4Brs8sQ4NXj_A8vp+n*3E^Ss98~ll}HssYab6 zlVy{dn6`FCK!AwRhSyNkawawo&Z^b(XVBpy1E4JN&%)l5yxo`-$ZJL6v9PdexRz?w z;2F5N-AA*9aRX}bKQzH$d2`PXK^gd$l?9}x#;2xYnb|B^33V>CxRnoR9y`NW`f61< zJ%10E?q_!`D*9vTQ1N9ATzS%|G_y?~Q{Bb(GU^AS5P<&LdmH+IpMuK>Zn0~)5`Yl<;_NFK}m@o*b)RR{_&NWeeOS3?7Hk6 z$H&G_ekHS9?E;P4lZ-l2xl|oUB$nE%KLj8(xSrEIK)~j{_i95+<0s*?+dv8zDK0N( zq@yE`?E?jkQgssthBe^H3WVFx`1sl!H|N|LKpiklFzXH|>FKZ~|Ei^b&(78oR2d=> zqQ>bnKSn-_a==7z*_&zi^iIjGRX1c%+*elIM6*j1j8f`GY5ALZq<<%++zKOA+MbRl zE-nrO&lS}1->>$hz9N)Fed#~b5%_x`QB)@7Z2Wxp_3o6k%Z0_XH;iQNW(A{W!dJ55 z)`dtU%NmP&WMnE6`MBV=$*%tX9nePrL=&Jaqfu+o4hIzZ?zj7OK*G;WBuj#3{Z!vF zF)(0tyRZOiI1ns>xVgHz8u)sf22DFVJD@9Z*qs8!V4#!-a%yBNKOr(gi2c^p@v27M z=Rr{7GcoDy@1Je;aI>(m7=SwJ1`=*Ct-z1`{P`0S1Uz7jrlub$1o_!l4=gN;W{lwQ zK?WFK_&%FoK-F%!(R973fq(w6^!EnD`KLq7fj?b`WX8ls_a%pE%nmr>;#l*>d zB{7PQ`t&*^Ek2vMePgoJI=95EY!Vo5-_NG*V#C zg}0C~H7xa+_8ul1B!C9-7FdzPp9}~Zy|(O6OjBqq{X0U=6{b&|abtf=M;kJEJ&Dw_-% z0f0*qD+EM7N^%1Va)aDFVCQ!L2WNV)r-{UdNRn#ua!}G!UKt(j#!UZ%NFqzu62a~3 z!{O%Uy*=PcEpMZQU`OxlHdGnyPmg_Uu;0cnEY0>tGc#LRYCPZB8tptgdxnU3Q)zgC zh&@wK_*Rnll|bzGJr^Dpf2FjaH%T2?)X``3Y@ntT+Xrc(+k@su1(Um`tpA3Qo}ReP z;B*HoR){Q|$TG-@tfGpA>MqD%cP72g>8Dj-PfHj+^QWLC%(imEHf0rMD)u7fk0=Dr z1g}m7X~Z#j_A+3?7x? zjB^`XJQ;hseKF}lF3-E=aQtM@7KDf+quO8_!#eSNg98EI{3-?JB_}crzXmV^|8e)F zLtnVxH8sc|KXO07+;#+uQlZShms3+|_-}raJ_sQ%w>u?;g~jNM7-IjhJ^pc0fSjkr z`r&Sg-OBO!G*!Z$?s2qekvF0>YC~hxsk$Sb@BdBbj)=G(syn!6oyM`Js3J!&%lA(9mJaWUu9-dtXIIaAUQ=#LpLyDgzc^wG${#Ov_lhFOBUxBBuukhv#F%zy*EG6>&PH`}caYX!`uX}PIT@j6%RmqEFGWvXf zs4X&3+ujOd#f&Wfq;hw>6}fb9r!24XuE%VsdmGZVg_-Ovi3H zoN7(%VhrA4{&;+IuEtUK($n+8+dC%BstSOa*DQj@!?ic-I8K7k(BS=?4qJo6+)2Ds zcAH=5nnF^Of9g?InIqzZ3Q@(tnWZxRSywX@34#GBls$e$*J^50Sdxd{#o&ZhGnI>Z zfmj*h&(m0{!-JU$5}N+Cs$p_=1%m&H|HOaVS*h7AwCffCim2N3+f9K!U1+<<_xu9x zDw*D%8&rjFbE8Q6CNQO}Z~Lv=pZDTFO%fJpci8moz285uibj1?h*^}_G7aV^+&=u~ zvm^a|i>HTxUN%^f6c~z|`T8$kPC2Yv8(mmNX6oC>H)*d^cBRjKdfJg12?s}Hz>Xce z#)gW41%hzBH`go2HEFZ4k+KI(HRWkayqDt*(Bsc2Q)Kr-U)OXNmq(_sNtSwfT_)i& zD+vz2iwKcetX%(jyh>~ID@yKld}~?5&?dq_#`J5M5i;@Lu{h9CfLMk?<9mq{X|=+k z)mQ)O74ZrAV{mxIAgJyo&M;)f+%oYMxZhp?foe@%-Re}S2S*}6Wr_8T2RcR%KiEzEbPFQY zDmv|@k&+EUszR5-WEM)wSAU#~k&!?|2L3F-x_ns^%X7ZF4Y>qY;LNa36U=k|?e^Rg z-DG}ARWrQKo`rg$neam-cw7@ zO2=M^nDVNJU@F5wJ+*PbM)4mzV+T5{90x~TMXl_t0H&p`(ZT_DW#raKV}*k~!@=$w z4XvAItCajs?Bh0|)GrSsA5Uf5j#s5`vpwETYxc;!2`w+8&uV3c`l}KlQO(4T+M+ffy-*4duE{LDt@&m10Z z>-`RVZSO(fX!?5vI^-2Vho_}~pp?dQ-HOV`O~q0fbRb2gmC?t^|DN=AZ|9OAgjsy) zV=VAQvN`9(GI!rBp`x&!E|Ytc?d+~Cyf_Lc8p+K`hK7JGtJ-XH)2(}>SAYA)b0EP< zrQCI~xzLg>1BIG9qR??T-+DvVbQh?dU8HX9p$@ z*|G*C%Uc+xM`!9#u7IM0%1NII?OD|l`T6Q6u2R@P*{xC)blZl_&0pvUu#)9k--<%A z6b3H#6ZP~JR#({19+v4mRP53RR*FZyBEmzpJatl33Was8`u`=dHu3rRJRfIfduP2; z9#>w5##8g`8K^7BSsQhSMW1fUf?{z-&B$JV{HFPI#(Vdf@xj3&j{UQ|4G1XOK4iCY z#w*?VS+==+e^Bk4?1kgc0`BWe$t#uPs||)XFx4-vIIl}G8?{wF)WID$M@BxHulFY} zFMq?P+iG8XWIcKC4VB!Ap>S++9Nf2g!&BT4@lt+$?nQGk+yfHM0;!oj*KE*rrV0Le z-{}r$Z3456>Z-%t`bWQg`8F_;m$M(^C}D=-DW!^575=}q*<^9KoMrAUEV^_}~y99$?5ka$6@Nic@?RN?>LR2UBI z3|#Z<-4{qiC(R^o`6QsAwJ^3j9Y4|NQ5;l$Sh%(}e|7a0)ZCibMtik`p`c*DJ$)`f zma19VbUYhd#q-7w6KLGi&!NPe9lJ)$EyU`#WsKV zhfX&|A(^0K!_My`+Rl)tps!RJ4uTsRd2$IQrfnlveBK5uZ(C!@sw2i3gN zvS}fz9JAwC##yO6>Q5M`AVLs5sIk5IlcMFT^?RIvlLOc^7)4a@;j-;9TsgIRv(D-^ z`Gfd7s2q6ik1wIR1hb+*ag>!UH3&s$jMt>q7ZVoB6y|R~4^$BJzZ}1+03sCQ)vKTs zHy}R++C0z|5)7IMNASVALj_d>`9^&`XZE-M>SFsMmdarj5frpFu13J^Yz^41D|66r z0A9S<-h+br_|J|vB1vSZtyfl7R&H*$D&^Xs)L_xa}6VvxeYm`8Y z*RPY~;uLjstboD~6vKebq?r)(qJZ~2wVgbF{v_+FG8zOz#wpMo54b7czyE-a+XX;2 zd3yJ|E1RWO571c*^8zV}t8Npu1qKQY<*84oaR-R}fg&-HLCe&ljqbL`hg;o_0L$N%>wpe|LnYe# z>JPdBK*t&2ur7Ltz5Hl7p`PRsP*7Uu>!8$z`%X|;*l;NAJpk6ke4dzW&Dq&2K+l`X zZV9BFaw;l1Ev^orJplB9^FDy)U!cpBrgW-)M4uD{EdoFz&CmZOB4X&PfUmo|`^}v> z4Ac$MQ|q67d_)Aw0~q@`Y3I7FFmew@+>=sreGLe9!Mor|d3ai6HkH)XXFnqXCI?VD zgLVY0CUV1Vs8C-_o>sBb>dy~v@>km@>jSLnT&TU^qZIaKCQtT)3a|mKhlh`EZf15Q z1S_iy1;zZgr>he*b_}<-FN4o*Fk(*DWVqa)s{>r@pJQi2+1%pd)Wk$8z@D1uj(in( zYLrGrEeEaJ^z=NgX9Ys7Xi#5efj@%U!T_Rs(5gNQo)u8Us05r$`rSwr6uA*pYR%5a zKp>u$o<3csH79@wK0;#6no}~7VF7$>23TV9RwSseR#7Q#r7%#KflWEB;>jzEG62@=ejZ}S4(47WmXWbcWHh=c;6 zpiGd>@}GSTLO?(ORB2FzV0L#Tv6Y^lpgktkm&bqhI(w2nU5Dfa*rEUF*!>6{H?~0g T@DlU*>F?sgGD2m7pM3rg(vR9p literal 21130 zcmb5W1z1(>+AcZ)r9(ivB&0-2=~5b`yIWE~kZx&^RJvQbyE~=3JEXhgyz^WCI{Tcx z_P@_Q=mlJpImUS7d7rrN`dUj!@$&u|&kUfG4S1&7swS6yA*h&=SsAKwQ&*xM(#dZ@_z;ALxQXpD@F z!9q5+x8We%_PY}!zw%=L{E_P2v`sf;hAx{K`rY2{`>XrH4C{si&L&7}kXx^!*x`x9PU~E!!N>!fEB(H|&Yplhli?!2>ib6jR#OQAi zCGX6XQC3z}t?uq3uXx@)_#j}k&&=R+b92Y>I5Hxmpy2es09LcGu;B6()7dG^>wa6g zw5}g2R!WpytX1dT6Hc~XRI`+CGt=7oL0C*|y*HBb`tj~4G9@Lf%3^vAOs&@Cg5JQu zKu%81OXLSG45YlgoY`WEq48?TwfE1TPB5ocFzl$Pmz`Z*Fp$T`J8S6F{QUgBe*M}S z$6^@q^QX6APuOY?nP;bU%Y(oD-jqI=!%T$<#@N_csq>lfmzmOZ`E3-iXE~_(^8(FZ z&$gs_UCt3bA8%-;N_4{`B3@8YQ@7906D6`+3Ywdn&z9=w=+t^Va2M+|1zSuPuihQC zl-SNGDd|0Wcl3x@+BVL^xYK|4NXUPH$0igH8=`B1Hl$K!nxEbDZ`Y80 z$j$}I;Ws_ND(U*i$15D}e#a_RGZkAsi7VAJHMw3fVq*3gl}qZ1iHXIA^3c=gf8mAB zJw72pCC*AigRn@aDWTqePxKeHG=;9N?$16W`+i-5GBv5Y%Y#gEA^(xq?{H?rDSS#` zlh&_v*uHH^C2)N+E^6t?pI(`cqR-FYAvFR#LvmeK|2%D z$;i(3o2@W01dED@hSrt9X0fun8$2>HV$1d%+h6bZk#1Aixd_YcY5HTn|8q%{NpRN7 zr!mO*JNu*Gz(l1qKV7efpA0aytSmLTa=M(GMsv;8ScgYaig^e2KYo&y?yCE?t!Hi? ze0+Rt+p*l@se3}!2OX>;80;PeJA3v1^62O&4!VrGre;T9A5uz6%1pien~coNz33M1 z^z`(Zx^FaA%gv$AXIpK(y}6?~T`y^zwr}d|>md*_GP01qe7V%Roqh)XEFw|PIcQ3>3PbO7$$yr!1S65fn z%8ihWhmzC}zk#p)`5FxH8Z#@acXBcbF$syy?YUX6QMt<#X_;CGFe`)J2=X`qPkzxb z;-CNwG6P_*Bje)*SJ&zfNIFptyAw!OR#snaZK3|`%a<=NZ|_k8)-V8gVr5N6d<1|3Iq9KX{m2$=mUnF4$e5I<00|o z(J}@lC1nT+53b^GnJ$x5cmLO)Vpe|1^0zJ2eH$$^6sxVRZCzY!8r^yhJ@E|S#83J8 z_`tzqkcMz9yJ1^5U8u~?4yqCm5*qv+%MJ_*YHM^pD|Nqf;Ptq#A!0e@0*G7JQ4KP-)z`ZEEAe+4W2|0zTjj-Kz&R){3mn}i1ZP=J~}3pMBeCg6ts z`%SgD@=-cXgp_vApchSwXrzrG#r>31bn5*(PQ)U*`1)m@{-n?4F-a7oT~xobD@rnm z=4x+PwI!~mmDL4qVXOVn#mv7KkI28=IyeZ8e`kVBlG&AaBc2yez-+03Eu5EV89q(sFWwf6-W@Bn3m$6=Vrc1&t6`uf}JA z0*Db>Gg4A=gVnT6&hJPG2%JBcWGfIfHdzZYT2ICHLQ{;lWPP80$T{~tExnO^p5liX z8}!fJnNsUL$=|#oBPU-lf#w}K6JtJJYaypcdAVnF_bSEexY^**G%^eHJoZoC_4V{J zDUFnJ^w3?RqdE~c!@Om!%c`V}{^Z-&`D~iu$5_jwi|@k18uHO6D%K=^_uqnL|Cq{a zawZt8$K1y2C|(2wxCDM|MdZP9T0ZAf+=&VLa2+{0-`3WxNhBsPgeh~XJJ|BZegQ>! zCcfZ)jcjApC|ul_mHV5o;@Qz;Xv)gUZDocv37k0K&D}45ens>$-%Ra$-MYT+rL>S0 z8E0$iAY%5RmG33qr-FMe`sj{j0W1R>iRcb!+9CxRgI)P+=9Rw`E~N2{mv7uIK5h(L z@YlNKd1ekmW=xd$>Nei&`|r>V&WWS>4N>oM73{}^ajMLeSYzHCD-0f6SP)#O#YD)@ zqksN&?OAHO2^dFIFoiZhCJaH_2ML+=ZGA}*;b0{vNeY1$d>fm;n@cFDZeD0aLmku8 z*$a2(=J}=NtY-aA;5z&QnajoC--qr25I7Y$>afja>vv_A`xRnWCbUC8>dP`=# z57V|sUEMJb&3C(Z(2EpV;o;tR>ee8PEajM0FlUb!$}GQwZc159(7(^r|G~jS>iI&L zW=L&^obxO}IaUsOXA6DNdvZJ29I9*a|2_}>pOe*u=(sriKw*k>!&3O}f90QE$Wd{Y!b3y-a&nAkEh5EzwHqATIy;}axVWfQnd3lO7Z!*i%x>3T zwd(Ei+MTelu}{wbj{9HZ6vBM{S6-b>9xZ8ee{BQx$%;8rA8l-G{PY8J+wZ=A{~j0? z)(t}9@x#?JB_ChYe&xfm=Tj()VYd>#tgS68@bt&40b~>)EDKL?3Ix;n{%eJi82R`} zET#%Sf<(gRc;zF5W;JR!DW7*_WTfEo)9C~Pahmh*WKL> zk=tuHt*WeKcD?-K>+f%Hb-2j+Z3|UOS{jpxNVDLi^i~m@8v;EQ8XSB4+N&EI&p=KN zGWI{I0%T1t7x|N%yYnJSrlzzGhYLX*AeEC`#{1DV)8NSDk4oTubGB``(HrS>eM}DG9s*cA z7uncJ^nXo85!v70U#;Gb4kW|O)=Ru!mYYe!$pnh0IYHtNf}rBx#VZ&XnA)$au)Msy z&>Z$p{5u3tcU&Zp7Vu!QooNorB-Mrv3kU>mY!nHK>4SNxSw5FVxMhHZh$1HYB88OD zK})!}um3jLb3W+g|CgoH|7^1V`6ek&iKP!8e~!?_VXgeDB5X%WK{tAalI%?f^M4Y= z{`&*h&XNef6Nd!75nDPO)D0El5JBt9xSuPO|54@re-AZ;<=^$tl8uer215Dmfq{u~AOeSa+19(#+rz2reZOczS*@mOfgz@slq}P( zr|`SGWQNq_6_UBb=*T}{#!N}<(Arn)wZVqqvt-D3FD}g2&_^FU(G$~2OGBtoaNmA_dp_bXLBDHiOagkHpYSU6rE>vQt( zaNOF}K1As%G9bJ&8S?%8+ayyqAlf|tqCvOCBa|O)>Z`Z6H=#QrNOj^sNdW$+OobH$ zUU*yNUN9$f%J%@KeqR{+_!%VYxKnzPOpVIHH1r0<;tXCtXNZ7GwOkY|k6_ zv+4NANKB8%n{DpRI-7O))3dXaKAP0`;xREf`dXpRA+N}H)b zVg7Q9{qx0W#C+_Q@mQ9GxP-(}e!qvL#Q<<0 z$=uNn9`kkIOzv;@N|@Q%MZw{oy}JN55)M4aG}o{{8WFSkM6S!WX%J!g0qeVWzhPwb|Nb3jD47QV z+(0YwvX~K=$YPK%#r|9s3N<^SDt)C*Qq>f^Fh%6@&%QIgyc^$ z4<5iMkUs|o27Ul#kl&SV@pGLG`O0M7n7FvW-?FJwR^64%_OrO`x7;5~j?d4tB$tYD zAplazY;5H19~j8=^?e57T1K<`-A^sX-(Xpg*Pnd=<>lv8E>2E4H#gqJx^Dqs;mz8- zpKmr_owleJs(l2wP6h%7=?F01zNMuU{@a~Q`m@fSo?n@nluK4nb3JGoPWSJz+k05=pJ6zyWP*%>~-~WR3qiX_eqy|VFJ{ub= zfMWu1gE3H!zf4iJk8i1xpFeps=Ww<)n7Oc^MM06k>&(i<%?*wc7N66x7d#rFaB*?* z=k*_9Vbm1)4jy!4{=p$8lljUMd5SdLo{zlXrel66c)4JuKc9VwkM#r9$QTH1IHb+h zyR47kR5O*t0zAgZ*jUuIE-5fjCYf6V>>5?1cz*IQQ%-@nt7?pV{9I+(^wGqG5;7{P zlGAnUwuSu>TpEbPiXI;P$pAZm$br)ox~Hl<@4Y*9w0nub^vDNbCNR5=^>rag@9b=R zr-6-nH2|9YVt(~|j2Da-3}1@KgM=q4Awi?yXaXK`dVXGbaYb)|BC=ILad2j^fK4q$ zTVt);=wy>U{+i+^z!mprSP0q7U#hFA$$@MuG#e?fZj*%|DSDA?&r zlVQ^SzCQ9gEg5HLXR2R)JO9Fyl&w}Tj*ru9*1PF=OQOnXm9q|XUSfc^WMyOs0#Jm3 zs0V;4eG?OvU)-2*Z+Ew1DJ*k)oj|EBDHcXdca_-K*w~Mg-Cxf@Yay?ZxVgG{Q4WAB zJ3G4_P`?WcZ)|J`55&Bs%-G#N`|+24Y)SdEQVhH0kjUTYH>!bw;*7De?mCON%8S)$ z^%t6v8Rv(K4Z^};eDv<%02PhcD$H8D*t=ZJHq+*F;baH@Q5Bi{o$ua|muKepHzzxL zba%2K4`66e(DwA=;&r@Kj-0W`d>yMnS={BpyqJ(bYC1rbpr#4{wX`jQtKcoQs408R z8M!@S<-6bT4LR?*xe57PFO^Ky@;B^e29`mxSa@l75AsMoeSP`MIRIiU?5UmssBaw# zFLnlDM}qjkZaKFC78r_b2vdBIj#i$%;KfB!x|X}CneXvsE_{&4cZ z^7Fhd1jG(_xks+0$s%1gOO%(|EpGKNX; z?DAqw14F}sN3e<72i|61zJ&ZgVYUL|X6ZzB=p!Pcqy4~X1E|#MdbmJ0Q_H=#>(${Z zfLA|v1a}#LT4x<({=NPE?EtocGchqSGBQeYzq`cevZcyBM|>BE2$F!$(|@Xrm{c4< ztOCrN%$T`XTb7q5k1J z#Y;0Lk>Du*h33j!n8IJ<)HOy)L@bAgM3GmR5+`-Q9(SxVgE>DJXaY8blS}c(vV6TuMsV$%!+DLERf9 zm9_mRgGpT21F=kEc6RR-6cqumqF~jA;002;tehMQHZ~mDRQ@gufqRIdp`qR1vFEmR z#Na<6At5azV>iHdArRmhBKnL(Q#;NYeOM;s5KvN^kGBsa`5;bfW7zo)6vtzdYNzk%OCLHY+y5J)xKzMZU%cL zC@1$KhEZF?ino#BJ&CKUtC5LG$KW8^x9y>~t}XR9_udo-53n_P2FAlFp~L)lsGy{A zI^95mk_F(=2Dj&bN2aGsPVRv1PFkYmYqsFblF?=~A56;4$HwHOPy3WK-{vngy90o9 zlb?fwqX)#t7o?=d1L?s08@;|6TQ^Djr;TWxogw!Y8{o z_w_o88jJS8cY%mKQEjQYJCY7Z!ud6=-JS;UG8AxdaOU&XZ{2VI{#Me`(%NLp1|j}@ z)+9BuxtZV0%xo0IG`e^1Dzs8mpY|pT@W7Hsqg4QCb8LK^5?JV5tqo-;5l7hh#YIq{ z>C@u_G^Wwh(;Hb?=^SeG0BT?)f?P;kS~`^5VPAaN?F>yKTfuKTniUL7dtTXLP+n9N zzUk@lE~}_W`u6trz2~DFn4qw*k%h%4u-A4cYa$f+E*_H;{=s2l^wB>P6N&5(7vhza zmCcS<+U$T)o0rfj$9(>%UP4zicq%u03e9CBii;UHx3^=V`%`G@+R~d_Xqo?IIw~eA zYUFC!Q`XqnI4eJ2GMUFQ2Lx&r(?r$zhpxSZsgnHa=WIpG$_E(v0}8Wy2{FI&o2TXG z@kH2uTSx}&^6Tn)JQyr!R(~M}3pX}8n(p~@w@iimqacY<{_mg+l!6E)c;^qeHj6)6 zi4GpKpfCdHeh^??G)fYabfgsHL6U0MR5DOqnm!eje<_>c>G3tbBLJggcD7F0&WFOc zJEdj8V=$ni;vJ+FFdyn+smc>Gd%A$r0JS%>%lVEdfq(_^$B!R(KvJI_%f;r4w^-Ta z@=`$@R24gu1*!!zcx;#Vs@<1GCE)(jF4F%(aSWqZ|IKp#R}sjT3*tz1u;Nvr{(lyn zT0VTEL7JWAQ@(1TkHw^Veu{jAjd@#50WCS+&&nDGqi}hKkAg5ORz2 zd{8Y$A&EzyNMBkRKfS!PI;XKC=6A!#3d)lIO^!&R7T`zT)(-0|d7fl$ZGA)?KLnVB z1S4*=?}1-8dbN#=Hr5MDL=j1TciB2PbOVdnyLS%~el8+nPRpnwWK|3w=*6ggnwF>j zv^`v*(6nS09wN?y$mSS5c_c)MsyXwVKA!?|VXgaFaq_W5P~P0w*dKt?Y!bOsqC!Ic zEQaqfajE^(3gJIIqb>c~Jd*Ci2#>z6alpLbaWSqkg?sS%z(#S8I_;$8icK7@-d4LZ zy2`Iut7cz-qz-*fE|FW>Vy@B*pZ$v(-0Kok0C~Tyc=a3-iAebR^$ro{_pHOk$f@j4 zZ>O@l$7l9Za&o9cLP7}b3DM}7O7P#PJbT58%}c8$JQSM@7Yo(e9F7TQMp@ zn=*Q26y<^7;dVjgz^+|dI(a`SYI=^w?9aG(S;z_O!={HV|JDLn68`z~C!ZvTRuef$ zEo}Gl2Fy87$t!Z%QD_+HU?8+5JJ0-yhT?Eh<%Q>?Gs+J^mGB%5+om1C_U5G6}VlQ<}79%2EFsfaK$Nt~j!?HXsnIB|D!W37+qYRZw7E zt>Kd4a6v*?CJcW#WmAZeX>qY2FHcZJ(W3<0;MJjxo**Eg(G&o*C8 zaS-)!oTkl*J}bK1?ft|E)5N;0JRv;tUe2e39R***93@K4Nh=DOmY*N)+xDT*moEu| zet#n=&sfZrQmMteA$ptf(P}ovB1I{ZV;!XkYg1ip2K1ML8p6-exw&B>N)r%IZaaMsYE$=aXx#3!7*Q8@UwB;rU1ktaZrC%55gvmV@EcL zPQSZ(b@9OezMZG#-2CD>U8|U6boXq9tb}9W>yr}CgSJRY zPs(@ibkok?#)4HFuJG_5m!rwe&sE_{Qljpfqq9h4CV+!fU{bzPaQ(Xji}}I#ZfS}0 zy$5d!&1)pQVjM2lOUC_uc4b=e?_*X+{unhcXbHaAC(9Xryqz^MtbL^{=VAntLW8T! zBW3@bPR<37AJSOUf`OM+0-#JuQHn_Y!Gw1+O?OOz!r4T2U?&$^THx#JH^XmvU1P$% zyu`0>Mb}DNNCg2g)1AXZOj5MEGn0Dv?8^t%I#fkRnXa3_vxxreO@2jH<$(NPdjAW2 z|4Bs^Lt)v&%bdKdg*v$5AnZ2}QXAZ7ZIR z?GeLLyS)5$QF1?N*2gcRS2C0&onk03;RwB+@VrF-s$G%p2(!7XXWts zcs^EOI3Dr)OR3yMa)SI=D&-3tMtJu@cseWQrG&xnjQqY>B3YiPrByb7 zGLo6$4u*#dH3L@u3cgD8J?ZSjcWH>1V#H9Mq zcO895;XXbV`>)&VW|$j2k6%sL+a=Jd57=+ZU@bYDScG=un0n6mMNfIB=4${x$P0GmZZEuSjf*uUUGMQ;c-7&*S=|h>Xf49 zE0D7kpyFzOjz5jgM}nru`=O@N!e%NL%-2>SkGQJ~YiDQT!9O%GkmmR*+&5hI+2OLR ze@Y5&ch~`nn3%=P+-1>Mbx6U|S^IYBqUjHw@FNK1ux{BWI!L)rf5<=8Z=R0Bmk+%I zft^gR%k|Aj%{N{0wQ8qn&wEVrL=GX9E+1InrC-HLvX~8%o)Zc*2aQ)riHKkoYS8Dz!ef~Ui}nAh>6+OLj#-0aksYGp#(}6JqC>p2+EJs@D(()(4H&_QV0Yg z;1S4y(DAY+#p|NOWqj;kDXdCX(%Hz*^;5n6{P^t|8`gA5&qrnD=hiKYDCp=@r8P(4 zVI*~DHX^(Op75D|qH%hBFx$9E1$Oup?Lj;=D-LsLSHF%roNM1LEZO_`VJ@GKM*IX? zfmMlL^o>jk@-TgyJ6CN8rP_5^3AeYfSr)U0OYR}hQFt-&V&(tR-J_G(VPcj^dKtYX z!z6#TLdtG+E~2Ew3U=`o?pxarM@z~1_hHG4)V-U}bai7@+^Y+-KEUI!$%k@KmF4t^ zn7xTf)`oxx0@hzxZbS&Aeauc@IXJm5d#+F5^sJWLNKI&cqqga2V{kKF0}dzAX=u0_ zt(@8(LU`6#*O<49xUL=6YM3o_9}NG-85m(9dF(F|js5&tegzgjEhjIC1;DFE8&rDr zF|xo#Ej7Y{C*5z;ea!AM`%Aa>eWp(Fq?t9|02cO8e*jm&H$b56`eaJ2vKJHRD2h*9 zk&uSugD(WK646ysL?cOCR1q7wj=80jv=W?ZNpiaBgkW9I!Aj zR}s<5UMYM$kKbro*x=DveUMYTbMf-Df_O5#}=rh^opiEO}*k6)Y_JFRX*cohMyl|%l%^`j#1aUEjugCO4ctAoE92lQR|Xk zVFi`ycT{Ry<>L z7MgEwUxF<5R0u2}(6p?XpNQQ>)GxJwInVD>&Av=@# zvJVrgz_YbzKcHC*6@4`Jpynrepo8KS!^A}5czI<3oOIGH~V@p_{gqg-1ZIk^=5 zCcM<_7n7jSy1vOY1|uUnK4)pcNLiFd|AE`JI}VCjBx*8zjbEKRPh2?Lid9?`P)iny z%FFj1U%YKXXXCwRnX8`kEh>859Zm+(oNoq@_)Bhs3MDGKb|%jUZ~N`(^t4(CN;hMx zK|mMt2>T0ejfyj{)-27CiyKQA<_4}=m7pt!Uc8n z!=-lmdL=D~Rj2;CD4A9hp-;{7VJJ|pu-KVmq#M%V{KQ@+ScU}~zPo?(jRjaeR3s70 zD3V?(=l#*AzP&B|JV;@3@p(Ue|Jy%ZQz)8cYi(E1Sw_mxQ~%9_~oV&JGvL_<(0QcT6|x|8-9V*5kSjLA98-J<dKw_-mQkN$cE8hKPhAu@v=8bjT-%TbEj1HFja)>(dO&A0$*? z8L{T>vgR8n|TwX#P9qq{8L*<;c=B6pSAEO)2B z(aY~Z{@mpZJ&_E9KD>E~8J)TcIq`-%3?x;ypk~1Ta6Q!oT zDtdNMZ_y4$w&eiN%)BiyqDjvvsh;V2&3uu%CrA19>d+8mvaM57Sm@{vELKT4=NC8U zpX`5r`&o8*ud&};PNY3&|9!r}>MQ9XDjN>tz6B*6C%z{q*J_il$HybbB}{Ia3O4H{ zn1#Aufvv5tFI>j7EF7LZSizcoZ+YTFC7!`4E?(ESu%H9G_{&B%#5avNZk`}b$og&i zdMS0Q2%UvOUf%HPw(4!~xW%-=2Vs2vMw;&MBMjHO$DJ|1Bi<5817ix6RL#%_)vJz- z%;(Li*L+Djj^4q6sgfDA0;;N=w|9nzn*$?Xre$_G2g5)}emqNc=X7%-6%E~`1nWdY zPybxA`g#?pg48q<4Mr&tfV;!y#x<1m`Jq4^x3E9~v>;^7&6tQldDGZPfr>wZ1C|5i znq=;G35X=}bX~@s?I3*cK3)1o2jMI%f9r{AQ+&0CzGk766dT~4Db}%HRKwiXAp{1{ zf3|H9LfQnADW++#H$@=WW2OSqj;@%ukDRXTs4+3gtGnE!mzNJ32i%Fj~xew6<8RBD_JsCdcrEaBh+RYR!pcs_||Wp8F^)}TMV%$>sLu0&8$cJ8<+&yAw3 zO?K!g)9g7;n6>!oIZSedx-ve-7KDb_8Z=vR^4R9H!(to)EGN_tCHxib4ve>V%<*du z09+2pAI-jxw!0{O#9)eUHbDA=4CKr-OU_(UcwHL8b*Gs_$AMW~aON2z{w#wEr`#zb#qljdecVu9_|iME^LE>BXOE4;Nv zV^H)j6@xF!Wr95l<|YD9#Ihy2JxQ$}Oe;4Z^(<^}PKEx&m7%y^4RwJCD%d0M0%B*W zeSyH^{TVI;19y8@7b!Lkx_LBTgmCJB;PsK&CbImQ4gAh~H9WUXOjjJdY^lFp-8r#~ zeV*Gg6mymGK%ndnQcg0kzIuAC4^FTjOa*D1d2UGV4{!99j^x$&KC_9Q6O#jDREmrC zbFZ%6+1x>FKqK-E%bY+)4rXyVhX-e=qgeaiH)j_lNCtZW;tQSj#0AFcvENEdD5 zWe#Kic!3w;lhjEuQ@qP)M?576lvEnef`t7orX{VTPR|+wqN0f75(r!W2^Adynw7yM zBA@@)$uNjGe)pB{_iL&|o-hPDO*uHg^rHc$*B!PP2oj{V*6&YbS!Pp!>aI{))uyxW%sx^NNoTgU3OuHCi!jXR3s@r|lB8S#H}0M2rOmVS&I5+8}Vh{PaKu#0@L!>u{>7s!)s(DAiUoDubXa z-v}_yr-eSUAP|3m5Y#)8@~(BXOkjWiwkCgXV}mMS8jYzo)kaK9lz6L=4Pja49@qF_ z&^L^ln1cA5gQ$l&J^$&2U%u$xtxq;9s3W^OgXT-E77^muew5U>Uow#KIO=qMha(4x z5&#$sSNHGX-@n%oQx%~~z_t2OOP{7C^DxP~x%rQrB!mc4r!RYZW*&a3|JCh= zc6)jp8@!uGE`T0Nd^5`CbHsy22VvA=g&}K^r3HeA#Ntt%|qfx~UNYF=* z1>?Nw?dR|Cx;@}_Jhb6xBOhof>YTfeEYwLnr$^+%u+2@rW z4_v#m-;mTbJwE|AEN);^Hd02YB_l|_xRfmD=<&%c;sgfN5XO;e4Ael35Bp(gXb8|1 ze}P8(nU{h>eyWPSh?#=}dtO1oIMCbEa&W`~QHdC!*rSq@r2*>A%G zxuT-t9OyzR(x?gs9YMlC`t=+9r5*_Q><{LmA#w%=6fm#K)C#{AgO`EY;x#a1C{gd} z=?VJ*5FwMsg@^A{f`L#iP@E!i6y*3j^VUyU=|YQn-?mHsR!ysnlz(2byE%oUr;9`; zDU-*Ec{x^%GT%GX6=x?foxSPF_`A@XA>ELTu1-ocfJQcFnS?}wIuf{!7gt9#zv5>p zZZD=^fu&jlNv-AFhES6$Q?|!Lb29Lm5?~AhXkpm@x$?wlEn-mht-$2 z7vT& zht=qSqOd^N>Dq9vvM-=J?BP4N<72|@xw&8J3CFz_ewsVKi={5 z0xwZ-uPHS&)H2fMLmriItF_}4x>k41Rm9okecm!b(@}zE<}(c6&(x2{t@5k3*$@Fb zb5@HP=j!*sZ)I35;*NI&pnapS;p!b`$^bDf*Lrz#;`cBsSlw9LZv_GdQ(DPS3<-kl zd^r=Pygxa{mWk2SqnbI_;**lJE}Oi)VUf|%sWZkhqd`X$4Gs>Dq^#_3K;(>p{;q-0 zH*9RtfYpPFGd4Cil@H$mqNkkV8%VXzN5#mLdrt>BmgSC?ng%v0==t1BfZW9M>45_? zS^!x~yL*@45SnKd;+B`6_6_WD4<B z=E~M#FZQm`E)JWbK$@PuJzUU|6ERsx9y|sl39uhP=Ue95nt?{C-pAQ1+i%|_G&K{4 zQUzpzI>v5yg3cWDsBCU+DFB}F@87>*NIbMWJc$$(6kr{jH-L!)opU-ch+pC17*Nra zp57~<2#Ugq2lB0~k`h^HQ_f~9iJDWbgoVPH$*nMXQO2^v2Wvj zo4F`v?)f4)#W|I4O!06&X)J}3F=Z_`hyf3|GquztC}w5{^i(-gH<8_;^E0O<$&3u? zsh;Rm7JJrtCd02Qtrpe$hZtXQt1R{fjkTZsor~#tN%ZQTZ3Rs}3JVj6#N_9zE%Sr| z(CvVyw_ToZ@f3)UkB<`{WyfIMo^)KJW#IuO|)(%&r_0A$cqAA zKNn~Mpu95ZDa-+PiRK|8BPEpy3k%E2&K3bq)yUFPy5;H7b#}WXrCGPZ;VoF|$nfU`k8q-f_u6zdekh?NV#A5YF1N>o_b@ALus1oFPGc9q?l))!we-3h6; zsSFQps%G3jbJSPv!PYn~uJA4pn9~nF)imwyc8Av1xpElm)uQePOxTzwJ@6)>>Z=9gH-`#*Ccc zTf6{{W~w)Zf6%|hlgiDF;^bFURaG?!Apn5I(aD^s+UU19!ByyeM@jCzX^Ma^WnvL6rIeWlt6EU3pyH<+!O&p1XpQ_WGnt8(17E^6Sv80$T@6Rg znw#54jc4dU{x`r+p!#4MnZ` zb6o(E09t+soHJ;j!CTGy<8w21K-C48v{VP=<$WI+&3}zKaLmbxcY^mV!tR30sLK`~ zW1?$MH=)%@@2p`dy3D^Fbh}6bh1Z0qRaEc?wVD4wUaI`UawGn`I?*1h)CeiV-Hn-s z7E$A19tDhMD5dEKpz~ICMsI*rzGlQ`SD29|39uUg>>y`3Az1SCM8svR42X}nU3O2g zDS)3=_VsJ!{FG4>6d@>NRBjBp@ z`s6_$RMgt_v{&-vklGjaFw4pJ=+o;Z>x(c)29q1g_b<yHgRWD#BMw%nsHUChrelXHaAvk#e{T>%SVh|5A8)ul6b^mG z%gc49ybH9%$};P>LuzX|)2x?=1bgUz-N=PNhlTj(qr(@>%DIB{`5g!R(>$cgxid58 z?p<$?z-y${)}mft`$GM{;~`asG?9G>=^_GvXn0VzA%5V%TTdKe*FBF%Uc7`^_6J;C{UQ z&i6o8XldMF$6@Tl70ba000O|F6hU!GBQW#^6igW|=*z-*e9U${)vd!qi#>Zb@}TDR=4YyINNX!ClrCQDqTSfSZSU`Yw%(%&e3(FCk+fe}AcX{`$ITvI zAx{hX^RDM=%nmTPJPiKdt8Fh>iP>Ra6bL<$?k*oR zcQ~Vwk%HPV1g=-QLpf*WGz?DGPVjlv>X=sbLfFtjones;#8i)uJh=S)t58GS*!X_| zHy@;>YtJIVb7wGX;fNmC1*v28S8M&$Olw|PvPExiW%LR>dM#&&#MzuuNqza^8>aZZ z;f~J9dGUkXh$qNPw8G~aZ79(N?pJ&wBJdj@9IR{Wxj`>Askc!iZr{nZIU^S1X4)$u z@1T}TEGh)UA`)nW*bB_|j#Q{|1K;Fy{OUQ7Vi+!PzTxE7fJ!miQtp3g#{DS5t2VG` zRRM%@$7CB$>bwVfGJC&`oFFx?e5aY~--Cxt! zqv}8>ED^`;T7R^d)7jH}!&PqXfP475^@o>oUmJ}G>G6|LaZshvq`!&l$@#wLRj-wq zHCKHzZ@EcJqDq)pt`aX_$2M(MQc+_ZIWXtk=l#)!cCeASCYLsc8t=LE>kqzz_FMP* z8gD;+^1q4n(D7ucIXe4OihH(t!xtObmX+1X>ULekcqArd|L(P}ihO0=&vo6D%(}LZ z!^dIgKla;O5v;~OJ7dDpMg{kN4h|mr8EvoM@wnLV!*qHmnZ@wdund)g-u%U4L&GC& zXYd>{t~y>BrwI!QkDbxsbsaCu7E&W`=%V$RmKoguB_)#QxxA>rU17R=U2b}MP+Z*f z-`R?H1O&1xTgGnfa}~dV+=R7k7M%qQ3OY7hqf&DB*?TQ=KdxxVHOATNkuMZ_g%Sl@ zBB(iX^c1Q}Ivy$e`);6QnJwRB4hj z`n=u^x8Q6du=S^m*`>0qCvmHUJ2Y08=Qiw6%2gLb=#GLyK#mqCQn#qO8hjjwkXq5r zmjx%U{(gL1%A#>R`>E@%1M+g(76UH^%lMISZ^HJkRq=!N&K0i$P?-ntuC zqUlP)NuaIxWr4kby7~<P#V8Y%(j=L(2`R6n!;@YYGVhsWY;>+Y&UB6k# zzX%poT^WXL8MCgf+nfPeFPp{Jv#*P8U72FC*fbj zfelF5+M=%a1XS$`z}YKHyYW_eC5(q&-#We;S%~+D)ZW3IlmAU0bRR|+6)awmpPQ?{ z-tD7Sbk{fd00a!8?HzEXYVi7HzF03OxG7y+!;d~c*5A05Utx>Fhi>@!;?;6wU3ARN z3I(W{l`(JCZR6ht2voYbLL3@=`hLaAsZRI$qrKBEZ}}oWsty*cQ2mU_+uJ1~iC9Q$ zK`&OCpm&&4x`fC5uR~(Zr#bA%so&sKF)D(~wo^SrClh2H9Qc>rRfWEO#V{}s3<~|f z>NxXwDEBXpOSzHIv`E=9Le^mtLbQ-@&8rCAWEWiq(^X7Lx#xfIQ$bQe<`|t1f{QJC~=lgxW-*e9Qd7X3KABk@XCd1 zRVq~c(Hpo};n6S5kqlz+CMg9)RRIHNg^_A8hvUb|wIUG5gO#)cUAXN?Ll2mPe}>kzAB&n`E^m(4}&Gwgs?0`f*UhwF^ZfPW|MeFhaQ}pTco5W z;yZKAKOVmtw8yeOHG4QB_uR(&n4}d~DkFm+V+%$-7li$+CvJ7Z! z{%DK!B`LF?&W&re+sOQ;oc%16h9=o(mi6G)kH00u`DncWCw*uHFLEdpJugRoYD9U2 zbW!o!=KnkQ>k00;+w(;IcYZ0P(>9hty5Rl&<0)xQNjW*tH*PjWQG83IL8p)hM8eqE zeHOjB+U9K$uNx))DzjDL;uT^~?OF<1C5f^3u%bpbz7W&hyttjIre0N}L*#UafXy(2 zPa5hf3!5&shcR82WH)* z%;($Pnte<6@l$N}XY>wKO|a?QLR-zH7)gnjg(8NbF*%MV&JP!?_qX-Pc`p~UyNOv= z%rb4}owYX!@}&(Mw^g;=er+G?&@Kymr<}Noijg8A)%+w!Mzqbn_|pSC_@|KUN{@`~ z7<;X_fk#8ig9>eig_Wyi~cqjWrhWLw^&O`Xr>4Ts2GY|3RD z$eJ-+8u5ONhGVAu4>o4YSAIbtv}Hf8aj5&#w5w(lBeD4oMUtj#^G1bs#OAIpp5ez5 zGWN+BQCvLLhT{Bw`1^s`*E@dwvnNwr3rRPJ4Xf9In$F}(wEap)mq`MJq6Sf0Ff|Q- zp&XNyOAC*myHH->XIWhwig!^(gp!E-wjWo2?zmz0!ZLz)CCJyqO`&b`<`U2cu&fbE zkYnG?%DVUEOQ$rwvzLppvoi@_EX#K;=hac&*HbIP`IDrGKpI72_n?M)t>e`>_lc{) z6Zbc8?!w(UpljAbCG+;W#kTVWzE@^agmLt&8Bb2FAq5U4uy96oQ)M1nY2r_d*VkQz z+S}U?sH?|Tdbh1(<*8XY%b|R{VePGZp<&GqR{l>dN3S_VXGO9Zj z6(iXTAh=X9lv6L!L^v}faGri)->OWYq>?i-+M~pF;TIWUk#j%Ov|TcQI|Z=_zoofv z=^TjDs=%}Yb`07UzX7=_3BqV93jm%W_U^TU5)R~Hg-qxBP6>grIzWAABJTQhsEMXi z=>a{xhd@Nme)dkR44~`KZ-Jf${dm>{kx< z-vcgfcDkzfQBu+!$oT@%2Wn+dP&;jHEe2o^;K>373n9P~+XU2NadBQ{C87?e^=tq; zK0{%)GMOYuXS$a{y`%>k&_Ef_v-!>@NR&l6yGMMi=sjaG=C5xLpMMhA#8xPoAe2uF zopo>sVOMTdzzd;JC}6{XIUX3OEg;Q?hO&Tp7@eBx0^zPqV4Ka$hWfT=j znzc6zjAae59guYf zxVS(9uHl-yrKJd;&(}9JbgvmNFF6b85FDxS5>vpPQS*PvnGMD79TUflo39KB6^fH3=fJ-m?fA|R8zwdBp&%ckeGtMFEM+*uH z_A#Oj)C~>k-*pJ>5*7kiy8z~Oxidxmbl6i`zn?O)Y;3$QzxCg@>(bQ!d;I^5UbnIJ YaH&mk?`_{25SJ9Pw!~PJo%Fc-4}@QkFaQ7m diff --git a/hurricane/doc/hurricane/html/group__DbUGroup.html b/hurricane/doc/hurricane/html/group__DbUGroup.html index 1ddc17e1..67a72756 100644 --- a/hurricane/doc/hurricane/html/group__DbUGroup.html +++ b/hurricane/doc/hurricane/html/group__DbUGroup.html @@ -170,7 +170,7 @@ Obsoleteds

    Introduction

    The DbU class provides the DbU::Unit type for modelling geometric length, that is abscissas, ordinates, widths, offsets and a set of functions to convert DbU::Unit to and from external coordinates.

    -
    Remark: The DbU class contains only static methods, and is not meant to
    be instanciated. The working type is DbU::Unit.
    +
    Remarks
    The DbU class contains only static methods, and is not meant to be instanciated. The working type is DbU::Unit.

    The DbU class manage three king of length :

    • DbU::Unit : the working type. It is currently associated to a long integer and a precision/resolution. This way all numbers are bound to the same precision (unlike floating point numbers) preventing rounding errors.
    • @@ -806,7 +806,7 @@ Translators
      Returns
      A character string representing the external value of <unit>. The value is converted in the length according to setStringMode(): database, grid or symbolic.
      -
      Remark: This string is shorter than the one we could print from the
      external value because non needed decimals are not drawn (nor the point if value is integer).
      +
      Remarks
      This string is shorter than the one we could print from the external value because non needed decimals are not drawn (nor the point if value is integer).
      @@ -844,7 +844,7 @@ Translators

      Allows to set the precision at a requested value. This must be done at the begining of the program (before the creation of the first unit) and not changed for the following (unless mandatory and for a temporary period because all existing units would be misinterpreted).

      -
      Remark: This function throws an exception if the requested precision
      is greater than the maximal one.
      +
      Remarks
      This function throws an exception if the requested precision is greater than the maximal one.
      @@ -1293,7 +1293,7 @@ Translators
      - +
      Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
      diff --git a/hurricane/doc/hurricane/html/group__Generalities.html b/hurricane/doc/hurricane/html/group__Generalities.html index 54e33d50..30d33f16 100644 --- a/hurricane/doc/hurricane/html/group__Generalities.html +++ b/hurricane/doc/hurricane/html/group__Generalities.html @@ -63,7 +63,7 @@ Introduction

      Namming conventions

      The name of "C macros" are written with lower case letters and underscores (examples : is_a, for_each_cell or end_for) while the name of generic functions and member functions never use the underscore and always start with an Upper case letter (examples : GetUnit, GetMasterCell, IsCalledBy).

      -
      Remark: When examining .h include files for more detailed information
      you will find member functions which start with an underscore. While being "public" those functions must never be called upon. In principle, only here'after documented functions should be used by the application programmer.
      +
      Remarks
      When examining .h include files for more detailed information you will find member functions which start with an underscore. While being "public" those functions must never be called upon. In principle, only here'after documented functions should be used by the application programmer.

      GetString

      string GetString(const Object& object);
      string GetString(const Object* object);

      Thoses generic function allows you to get into a string an explicit description of any kind of Hurricane object pointer or reference.

      ostream& operator<< (ostream& stream, const Object& object);
      ostream& operator<< (ostream& stream, const Object* object);

      All Hurricane objects have printing operators for a reference or a pointer. Those printing operators use the generic function Hurricane::GetString() previously studied.

      @@ -89,7 +89,7 @@ Trace utilities
    • Hurricane::trace
    -
    void MyFunction(MyData* data)
    // **************************
    {
    trace << "entering in MyFunction with " << data << endl;
    trace_in();
    ...
    trace << "exiting of MyFunction" << endl;
    trace_out();
    }
    Remark: Debugger enthousiastic users will probably ignore this trace
    capability which presents the annoying need to be inserted into the code... For myself, I do prefer those facilities...
    +
    void MyFunction(MyData* data)
    // **************************
    {
    trace << "entering in MyFunction with " << data << endl;
    trace_in();
    ...
    trace << "exiting of MyFunction" << endl;
    trace_out();
    }
    Remarks
    Debugger enthousiastic users will probably ignore this trace capability which presents the annoying need to be inserted into the code... For myself, I do prefer those facilities...

    Remarks

    Many other global and generic functions exist. Each one will be studied within the description of the classes which create or specialize them (example: Hurricane::GetUnit will be introduced with the Unit class and Hurricane::GetCollection with the Collection class).

    @@ -155,7 +155,7 @@ Remarks
    - +
    Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
    diff --git a/hurricane/doc/hurricane/html/group__JsonSupport.html b/hurricane/doc/hurricane/html/group__JsonSupport.html index e3aee1f2..ec4f9155 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
    diff --git a/hurricane/doc/hurricane/html/group__NetClass.html b/hurricane/doc/hurricane/html/group__NetClass.html deleted file mode 100644 index 5a732952..00000000 --- a/hurricane/doc/hurricane/html/group__NetClass.html +++ /dev/null @@ -1,1184 +0,0 @@ - - - - - Hurricane Documentation - - -

    Hurricane Documentation

    -
    - - - - - - - - - -
    SummaryNamespacesClass HierarchyClassesMember Index
    -
    -
    -
    - - - -
    - -
    -
    Net Class
    -
    -
    - - - - - - -

    -Classes

    class  Hurricane::Net::Type
     
    class  Hurricane::Net::Direction
     
    - - - - - -

    -Typedefs

    typedef Entity Hurricane::Net::Inherit
     
    typedef unsigned Hurricane::Net::Arity
     
    - - - - - -

    -Enumerations

    enum  Hurricane::Net::Type::Code {
    -  Hurricane::Net::Type::UNDEFINED =0, -
    -  Hurricane::Net::Type::LOGICAL =1, -
    -  Hurricane::Net::Type::CLOCK =2, -
    -  Hurricane::Net::Type::POWER =3, -
    -  Hurricane::Net::Type::GROUND =4 -
    - }
     
    enum  Hurricane::Net::Direction::Code {
    -  Hurricane::Net::Direction::UNDEFINED =0, -
    -  Hurricane::Net::Direction::IN =1, -
    -  Hurricane::Net::Direction::OUT =2, -
    -  Hurricane::Net::Direction::INOUT =3, -
    -  Hurricane::Net::Direction::TRISTATE =4 -
    - }
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Functions

    static Net * Hurricane::Net::create (Cell *cell, const Name &name)
     
    const Name & Hurricane::Net::getName () const
     
    const Arity & Hurricane::Net::getArity () const
     
    const Type & Hurricane::Net::getType () const
     
    const Direction & Hurricane::Net::getDirection () const
     
    const Point & Hurricane::Net::getPosition () const
     
    const DbU::Unit & Hurricane::Net::getX () const
     
    const DbU::Unit & Hurricane::Net::getY () const
     
    Rubbers Hurricane::Net::getRubbers () const
     
    Components Hurricane::Net::getComponents () const
     
    Plugs Hurricane::Net::getPlugs () const
     
    Contacts Hurricane::Net::getContacts () const
     
    Segments Hurricane::Net::getSegments () const
     
    Verticals Hurricane::Net::getVerticals () const
     
    Horizontals Hurricane::Net::getHorizontals () const
     
    Pads Hurricane::Net::getPads () const
     
    RoutingPads Hurricane::Net::getRoutingPads () const
     
    Plugs Hurricane::Net::getSlavePlugs () const
     
    Plugs Hurricane::Net::getConnectedSlavePlugs () const
     
    Plugs Hurricane::Net::getUnconnectedSlavePlugs () const
     
    bool Hurricane::Net::isGlobal () const
     
    bool Hurricane::Net::isExternal () const
     
    bool Hurricane::Net::isLogical () const
     
    bool Hurricane::Net::isClock () const
     
    bool Hurricane::Net::isSupply () const
     
    void Hurricane::Net::setName (const Name &name)
     
    void Hurricane::Net::setArity (const Arity &arity)
     
    void Hurricane::Net::setGlobal (bool isGlobal)
     
    void Hurricane::Net::setExternal (bool isExternal)
     
    void Hurricane::Net::setType (const Type &type)
     
    void Hurricane::Net::setDirection (const Direction &direction)
     
    void Hurricane::Net::setPosition (const Point &position)
     
    void Hurricane::Net::materialize ()
     
    void Hurricane::Net::unmaterialize ()
     
    void Hurricane::Net::merge (Net *net)
     
    static NetFilter Hurricane::Net::getIsGlobalFilter ()
     
    static NetFilter Hurricane::Net::getIsExternalFilter ()
     
    static NetFilter Hurricane::Net::getIsInternalFilter ()
     
    static NetFilter Hurricane::Net::getIsClockFilter ()
     
    static NetFilter Hurricane::Net::getIsSupplyFilter ()
     
    - - - - - - - - - -

    -Net Collection

    #define for_each_net(net, nets)
     
    typedef GenericCollection< Net * > Hurricane::Nets
     
    typedef GenericLocator< Net * > Hurricane::NetLocator
     
    typedef GenericFilter< Net * > Hurricane::NetFilter
     
    -

    Detailed Description

    -

    Le groupe Net.

    -

    Macro Definition Documentation

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define for_each_net( net,
     nets 
    )
    -
    -

    Macro for visiting all the nets of a collection of nets.

    - -
    -
    -

    Typedef Documentation

    - -
    -
    -

    Useful for calling upon methods of the base class without knowing it.

    - -
    -
    - -
    -
    -

    This type allows to represent the number of bits associated to a net (a null value meaning undefined).

    - -
    -
    - -
    -
    - - - - -
    Hurricane::Nets
    -
    -

    Generic collection representing a set of nets.

    - -
    -
    - -
    -
    -

    Generic locator for traversing a collection of nets.

    - -
    -
    - -
    -
    -

    Generic filter allowing to select a subset of nets matching some criteria.

    - -
    -
    -

    Enumeration Type Documentation

    - -
    -
    - - - - -
    enum Hurricane::Net::Type::Code
    -
    -

    This enumeration defines the signal category inside the Net::Type.

    - - - - - - -
    Enumerator
    UNDEFINED  -

    Type undefined.

    -
    LOGICAL  -

    Type assigned to ordinary signals.

    -
    CLOCK  -

    Type assigned to clock signals.

    -
    POWER  -

    Type assigned to supply signals.

    -
    GROUND  -

    Type assigned to supply signals.

    -
    - -
    -
    - -
    -
    -

    This enumeration defines the signal direction inside the Net::Direction.

    - - - - - - -
    Enumerator
    UNDEFINED  -

    Undefined direction.

    -
    IN  -

    There must be no driver inside and a single permanent driver outside.

    -
    OUT  -

    There must be no driver outside and a single permanent driver inside.

    -
    INOUT  -

    No constraint.

    -
    TRISTATE  -

    Type assigned to logical tri-states signals.

    -
    - -
    -
    -

    Function Documentation

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    Net * Hurricane::Net::create (Cellcell,
    const Namename 
    )
    -
    -static
    -
    -
              Creates and returns a new net named \c \<name\> for the cell 
    -          \c \<cell\>. 
    -
    Caution:
    Throws an exception if the cell is null, if the name empty or if a net with same name already exists.
    - -
    -
    - -
    -
    - - - - - -
    - - - - - - - -
    const Name & Hurricane::Net::getName () const
    -
    -inline
    -
    -

    Returns: the net name.

    - -
    -
    - -
    -
    - - - - - -
    - - - - - - - -
    const Net::Arity & Hurricane::Net::getArity () const
    -
    -inline
    -
    -

    Returns: the signal arity (by default set to 1).

    - -
    -
    - -
    -
    - - - - - -
    - - - - - - - -
    const Net::Type & Hurricane::Net::getType () const
    -
    -inline
    -
    -

    Returns: the signal type (by default set to UNDEFINED).

    - -
    -
    - -
    -
    - - - - - -
    - - - - - - - -
    const Net::Direction & Hurricane::Net::getDirection () const
    -
    -inline
    -
    -

    Returns: the signal direction (by default set to UNDEFINED).

    -
    Remark:
    This direction is meaningfull only for external nets.
    - -
    -
    - -
    -
    - - - - - -
    - - - - - - - -
    const Point & Hurricane::Net::getPosition () const
    -
    -inline
    -
    -

    Returns: the X,Y position of the net. This position is used for computing the location of the plugs (on slave instances calling the cell owning this net) having that net as master.

    - -
    -
    - -
    -
    - - - - - -
    - - - - - - - -
    const Unit & Hurricane::Net::getX () const
    -
    -inline
    -
    -

    Returns: net abscissa.

    - -
    -
    - -
    -
    - - - - - -
    - - - - - - - -
    const Unit & Hurricane::Net::getY () const
    -
    -inline
    -
    -

    Returns: net ordinate.

    - -
    -
    - -
    -
    - - - - - -
    - - - - - - - -
    Rubbers Hurricane::Net::getRubbers () const
    -
    -inline
    -
    -

    Returns: the collection of net's rubbers.

    - -
    -
    - -
    -
    - - - - - -
    - - - - - - - -
    Components Hurricane::Net::getComponents () const
    -
    -inline
    -
    -

    Returns: the collection of net's components.

    - -
    -
    - -
    -
    - - - - - - - -
    Plugs Hurricane::Net::getPlugs () const
    -
    -

    Returns: the collection of net's plugs.

    - -
    -
    - -
    -
    - - - - - - - -
    Contacts Hurricane::Net::getContacts () const
    -
    -

    Returns: the collection of net's contacts.

    - -
    -
    - -
    -
    - - - - - - - -
    Segments Hurricane::Net::getSegments () const
    -
    -

    Returns: the collection of net's segments.

    - -
    -
    - -
    -
    - - - - - - - -
    Verticals Hurricane::Net::getVerticals () const
    -
    -

    Returns: the collection of net's vertical segments.

    - -
    -
    - -
    -
    - - - - - - - -
    Horizontals Hurricane::Net::getHorizontals () const
    -
    -

    Returns: the collection of net's horizontal segments.

    - -
    -
    - -
    -
    - - - - - - - -
    Pads Hurricane::Net::getPads () const
    -
    -

    Returns: the collection of net's pads.

    - -
    -
    - -
    -
    - - - - - - - -
    RoutingPads Hurricane::Net::getRoutingPads () const
    -
    -

    Returns: the collection of net's RoutingPads.

    - -
    -
    - -
    -
    - - - - - - - -
    Plugs Hurricane::Net::getSlavePlugs () const
    -
    -

    Returns: the collection of plugs which have this net as master.

    -
    Remark:
    Meaningfull only for external nets.
    - -
    -
    - -
    -
    - - - - - - - -
    Plugs Hurricane::Net::getConnectedSlavePlugs () const
    -
    -

    Returns: the collection of connected plugs which have this net as master.

    -
    Remark:
    Meaningfull only for external nets.
    - -
    -
    - -
    -
    - - - - - - - -
    Plugs Hurricane::Net::getUnconnectedSlavePlugs () const
    -
    -

    Returns: the collection of unconnected plugs which have this net as master.

    -
    Remark:
    Meaningfull only for external nets.
    - -
    -
    - -
    -
    - - - - - -
    - - - - - - - -
    bool Hurricane::Net::isGlobal () const
    -
    -inline
    -
    -

    Returns: true if the net is global else false.

    - -
    -
    - -
    -
    - - - - - -
    - - - - - - - -
    bool Hurricane::Net::isExternal () const
    -
    -inline
    -
    -

    Returns: true if the net is external else false.

    - -
    -
    - -
    -
    - - - - - -
    - - - - - - - -
    bool Hurricane::Net::isLogical () const
    -
    -inline
    -
    -

    Returns: true if the net is logical else false.

    - -

    References Hurricane::Net::Type::LOGICAL.

    - -
    -
    - -
    -
    - - - - - -
    - - - - - - - -
    bool Hurricane::Net::isClock () const
    -
    -inline
    -
    -

    Returns: true if the net is a clock else false.

    - -

    References Hurricane::Net::Type::CLOCK.

    - -
    -
    - -
    -
    - - - - - -
    - - - - - - - -
    bool Hurricane::Net::isSupply () const
    -
    -inline
    -
    -

    Returns: true if the net is a supply else false.

    - -
    -
    - -
    -
    - - - - - - - - -
    void Hurricane::Net::setName (const Namename)
    -
    -
              Allows to change net name. 
    -
    Remark:
    Throws an exception if the new name is empty, or if a net with same net already exists in the cell.
    - -
    -
    - -
    -
    - - - - - - - - -
    void Hurricane::Net::setArity (const Arityarity)
    -
    -

    Sets the signal arity to <arity>.

    - -
    -
    - -
    -
    - - - - - - - - -
    void Hurricane::Net::setGlobal (bool state)
    -
    -

    Sets global signal status to <state>.

    - -
    -
    - -
    -
    - - - - - - - - -
    void Hurricane::Net::setExternal (bool state)
    -
    -
              Sets the external net status to \c \<state\>. 
    -
    Remark:
    This function will throw an exception if the net switches to internal and there is a plug refering to it.
    - -
    -
    - -
    -
    - - - - - - - - -
    void Hurricane::Net::setType (const Typetype)
    -
    -

    Sets the signal type of the net.

    - -
    -
    - -
    -
    - - - - - - - - -
    void Hurricane::Net::setDirection (const Directiondirection)
    -
    -

    Sets the signal direction of the net.

    - -
    -
    - -
    -
    - - - - - - - - -
    void Hurricane::Net::setPosition (const Pointposition)
    -
    -

    Sets the X,Y location of the net. By default it is located at the coordinates origin of the cell (point 0,0).

    - -
    -
    - -
    -
    - - - - - - - -
    void Hurricane::Net::materialize ()
    -
    -

    Materializes all the rubbers and components of a net.

    - -
    -
    - -
    -
    - - - - - - - -
    void Hurricane::Net::unmaterialize ()
    -
    -

    De-materializes all rubbers and the components of a net.

    - -
    -
    - -
    -
    - - - - - - - - -
    void Hurricane::Net::merge (Netnet)
    -
    -
              Merges the net \c \<net\> to the net \c \<this\> which keeps 
    -          its characteristics (arity, global, external and direction). 
    -
    Caution:
    An exception is thrown if the <net> is null or equal to <this>, if the two nets don't belong to the same cell or if <net> is external and master net of a connected plug while net <this> is not external.
    -
    Remark:
    All the rubbers and the components of the <net> (and also the plugs) become rubbers or components of the net <this>. Nevertheless if for a particular slave instance there was both a plug referencing the <net> and an other plug referencing <this>, the first is deleted to the advantage of the second, because a net can't have more than one plug for a given instance (the rings of the body hooks are then merged).
    -
    Remark:
    Once the merger done the net <net> is definitively deleted. Its properties and those of its deleted plugs, if any, are lost (as well as the ones which could be attached to their occurences).
    - -
    -
    - -
    -
    - - - - - -
    - - - - - - - -
    NetFilter Hurricane::Net::getIsGlobalFilter ()
    -
    -static
    -
    -

    Returns: the filter selecting global nets.

    - -
    -
    - -
    -
    - - - - - -
    - - - - - - - -
    NetFilter Hurricane::Net::getIsExternalFilter ()
    -
    -static
    -
    -

    Returns: the filter selecting external nets.

    - -
    -
    - -
    -
    - - - - - -
    - - - - - - - -
    NetFilter Hurricane::Net::getIsInternalFilter ()
    -
    -static
    -
    -

    Returns: the filter selecting internal nets.

    - -
    -
    - -
    -
    - - - - - -
    - - - - - - - -
    NetFilter Hurricane::Net::getIsClockFilter ()
    -
    -static
    -
    -

    Returns: the filter selecting clock nets.

    - -
    -
    - -
    -
    - - - - - -
    - - - - - - - -
    NetFilter Hurricane::Net::getIsSupplyFilter ()
    -
    -static
    -
    -

    Returns: the filter selecting supply nets.

    - -
    -
    -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.5 on Fri May 9 2014Return to top of page
    - - - - - -
    Hurricane DocumentationCopyright © 2000-2012 Bull S.A. All rights reserved
    - - diff --git a/hurricane/doc/hurricane/html/group__grpSynthHierarchy.html b/hurricane/doc/hurricane/html/group__grpSynthHierarchy.html index 98d5d18f..de207e99 100644 --- a/hurricane/doc/hurricane/html/group__grpSynthHierarchy.html +++ b/hurricane/doc/hurricane/html/group__grpSynthHierarchy.html @@ -238,7 +238,7 @@ $(function() {
    - +
    Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
    diff --git a/hurricane/doc/hurricane/html/hierarchy.html b/hurricane/doc/hurricane/html/hierarchy.html index 5414d311..d43cd84b 100644 --- a/hurricane/doc/hurricane/html/hierarchy.html +++ b/hurricane/doc/hurricane/html/hierarchy.html @@ -119,23 +119,24 @@ $(function() {  CHurricane::OccurrenceOccurrence description (API)  CHurricane::Transformation::Orientation  CHurricane::PathPath description (API) - CHurricane::Instance::PlacementStatusInstance Placement Status (API) - CHurricane::PointPoint description (API) - CHurricane::PropertyProperty description (API) - CHurricane::PrivatePropertyPrivateProperty description (API) - CHurricane::StandardPrivateProperty< Value, JsonState >StandardPrivateProperty description (API) - CHurricane::SharedPropertySharedProperty description (API) - CHurricane::RelationRelation description (API) - CHurricane::StandardRelationStandardRelation description (API) - CHurricane::StandardSharedProperty< Value >StandardSharedProperty description (API) - CHurricane::UpdateSessionUpdateSession description (API) - CHurricane::QuadTreeQuadTree description (API) - CHurricane::QueryQuery description (API) - CHurricane::SliceSlice description (API) - CHurricane::TabulationTabulation description (API) - CHurricane::TransformationTransformation description (API) - CtstreamTrace & indentation enabled stream - CHurricane::Net::Type + CHurricane::PhysicalRuleDefine a rule for the technology (API) + CHurricane::Instance::PlacementStatusInstance Placement Status (API) + CHurricane::PointPoint description (API) + CHurricane::PropertyProperty description (API) + CHurricane::PrivatePropertyPrivateProperty description (API) + CHurricane::StandardPrivateProperty< Value, JsonState >StandardPrivateProperty description (API) + CHurricane::SharedPropertySharedProperty description (API) + CHurricane::RelationRelation description (API) + CHurricane::StandardRelationStandardRelation description (API) + CHurricane::StandardSharedProperty< Value >StandardSharedProperty description (API) + CHurricane::UpdateSessionUpdateSession description (API) + CHurricane::QuadTreeQuadTree description (API) + CHurricane::QueryQuery description (API) + CHurricane::SliceSlice description (API) + CHurricane::TabulationTabulation description (API) + CHurricane::TransformationTransformation description (API) + CtstreamTrace & indentation enabled stream + CHurricane::Net::Type @@ -143,7 +144,7 @@ $(function() {
    - +
    Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
    diff --git a/hurricane/doc/hurricane/html/hurricane.tag b/hurricane/doc/hurricane/html/hurricane.tag index d0a5417c..394ff8d3 100644 --- a/hurricane/doc/hurricane/html/hurricane.tag +++ b/hurricane/doc/hurricane/html/hurricane.tag @@ -4529,6 +4529,81 @@ secPathIntro secPathRemarks + + Hurricane::PhysicalRule + classHurricane_1_1PhysicalRule.html + + bool + isDouble + classHurricane_1_1PhysicalRule.html + ad419b79177064cab06f7c8dbeccc4dce + () const + + + bool + isDbU + classHurricane_1_1PhysicalRule.html + af1e9eeb3499bfd66cedf5756e2d7e2a3 + () const + + + bool + isSymmetric + classHurricane_1_1PhysicalRule.html + a56f3eed5835ad1c268638f0f813fc029 + () const + + + bool + hasSteps + classHurricane_1_1PhysicalRule.html + a8cc9f7f2dfc580e4f91b7f93ce8a26cc + () const + + + void + setSymmetric + classHurricane_1_1PhysicalRule.html + afc1e61c5b2baa1126a2e253e02f40f40 + (bool) + + + double + getDoubleValue + classHurricane_1_1PhysicalRule.html + a89a0cd27aec78836500a5066c276bbf0 + () const + + + DbU::Unit + getValue + classHurricane_1_1PhysicalRule.html + aa3548c58b42cd29cbe07d1a0289416a0 + (Hurricane::DbU::Unit length=0, bool hDir=true) const + + + void + addValue + classHurricane_1_1PhysicalRule.html + ada08351fb24f36a63f4e3a3c524000a2 + (double) + + + void + addValue + classHurricane_1_1PhysicalRule.html + ac25990fc4aff5e5739ae9632f43d9bf8 + (Hurricane::DbU::Unit value, Hurricane::DbU::Unit maxLength) + + + void + addValue + classHurricane_1_1PhysicalRule.html + a51356a2e3e6cae11c8063b6a092f304d + (Hurricane::DbU::Unit hValue, Hurricane::DbU::Unit vValue, Hurricane::DbU::Unit maxLength) + + sPhysicalRuleIntro + Hurricane::Pin classHurricane_1_1Pin.html @@ -5987,6 +6062,27 @@ a81a3f3e479aeb686c61a2d0fa2931f3b (int) const + + PhysicalRule * + getUnitRule + classHurricane_1_1Technology.html + a6ab76e8a246a10a395d68341bca9ea96 + (std::string ruleName) const + + + PhysicalRule * + getPhysicalRule + classHurricane_1_1Technology.html + a21ef6f7507785a587e56aecc52a0c0ee + (std::string ruleName, std::string layerName) const + + + PhysicalRule * + getPhysicalRule + classHurricane_1_1Technology.html + aec2ce8a8195e90537e6d35cb3ba8b58f + (std::string ruleName, std::string layer1Name, std::string layer2Name) const + void setName @@ -6001,14 +6097,43 @@ a26c12c5828acaeb33068a2899df1134b (const Layer *) + + PhysicalRule * + addUnitRule + classHurricane_1_1Technology.html + a96d62a8b3eb12560a9cb778328f8a301 + (std::string ruleName, std::string reference) + + + PhysicalRule * + addPhysicalRule + classHurricane_1_1Technology.html + a267e44b205b97ff46297d16ed278a5bc + (std::string ruleName, std::string reference) + + + PhysicalRule * + addPhysicalRule + classHurricane_1_1Technology.html + a4210936e097a774035bf52bce7d962bc + (std::string ruleName, std::string layerName, std::string reference) + + + PhysicalRule * + addPhysicalRule + classHurricane_1_1Technology.html + a3f04a0d9fe9c76fc3c0911c76c120e00 + (std::string ruleName, std::string layer1Name, std::string layer2Name, std::string reference) + static Technology * create classHurricane_1_1Technology.html - a8fd65387c7fd6ba1396f905fadf20087 + a64670f0d48e9460342005df52f25c152 (DataBase *, const Name &) sTechnologyIntro + sTechnologyRules Hurricane::Transformation @@ -6571,6 +6696,7 @@ Hurricane::Occurrence Hurricane::Pad Hurricane::Path + Hurricane::PhysicalRule Hurricane::Pin Hurricane::Plug Hurricane::Point diff --git a/hurricane/doc/hurricane/html/index.html b/hurricane/doc/hurricane/html/index.html index fca7657c..f4b594bf 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
    diff --git a/hurricane/doc/hurricane/html/modules.html b/hurricane/doc/hurricane/html/modules.html index 08feb663..ef243ebb 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
    diff --git a/hurricane/doc/hurricane/html/namespaceHurricane.html b/hurricane/doc/hurricane/html/namespaceHurricane.html index 7474d1b5..3d9becc6 100644 --- a/hurricane/doc/hurricane/html/namespaceHurricane.html +++ b/hurricane/doc/hurricane/html/namespaceHurricane.html @@ -173,6 +173,9 @@ Classes class  Path  Path description (API) More...
      +class  PhysicalRule + Define a rule for the technology (API). More...
    +  class  Pin  Pin description (API) More...
      @@ -1378,7 +1381,7 @@ Functions
    - +
    Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
    diff --git a/hurricane/doc/hurricane/html/namespacemembers.html b/hurricane/doc/hurricane/html/namespacemembers.html index e3d33ada..6eae44e0 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
    diff --git a/hurricane/doc/hurricane/html/namespacemembers_func.html b/hurricane/doc/hurricane/html/namespacemembers_func.html index 8bd2d802..8fe538c4 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
    diff --git a/hurricane/doc/hurricane/html/namespacemembers_type.html b/hurricane/doc/hurricane/html/namespacemembers_type.html index 757e60fb..33600284 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
    diff --git a/hurricane/doc/hurricane/html/namespaces.html b/hurricane/doc/hurricane/html/namespaces.html index c63d52d6..8cf7fdbd 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
    diff --git a/hurricane/doc/hurricane/html/structHurricane_1_1Entity_1_1CompareById-members.html b/hurricane/doc/hurricane/html/structHurricane_1_1Entity_1_1CompareById-members.html deleted file mode 100644 index eadf9afe..00000000 --- a/hurricane/doc/hurricane/html/structHurricane_1_1Entity_1_1CompareById-members.html +++ /dev/null @@ -1,66 +0,0 @@ - - - - - Hurricane Documentation - - - - - -

    Hurricane VLSI Database

    - -
    - - - - - - - - -
    -
    -
    Hurricane::Entity::CompareById Member List
    -
    -
    - -

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

    - -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Fri Oct 19 2018Return to top of page
    - - - - - -
    Hurricane VLSI DatabaseCopyright © 2000-2016 Bull S.A. All rights reserved
    - - diff --git a/hurricane/doc/hurricane/html/structHurricane_1_1Entity_1_1CompareById.html b/hurricane/doc/hurricane/html/structHurricane_1_1Entity_1_1CompareById.html deleted file mode 100644 index 2875ee21..00000000 --- a/hurricane/doc/hurricane/html/structHurricane_1_1Entity_1_1CompareById.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - - Hurricane Documentation - - - - - -

    Hurricane VLSI Database

    - -
    - - - - - - - - -
    - -
    -
    Hurricane::Entity::CompareById Class Reference
    -
    -
    - -

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

    - -

    Inherits binary_function< const Entity *, const Entity *, bool >.

    -

    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: -
    -
    -
    - - - - - -
    Generated by doxygen 1.8.14 on Fri Oct 19 2018Return to top of page
    - - - - - -
    Hurricane VLSI DatabaseCopyright © 2000-2016 Bull S.A. All rights reserved
    - - diff --git a/hurricane/doc/hurricane/html/tab_b.gif b/hurricane/doc/hurricane/html/tab_b.gif deleted file mode 100644 index 0d623483ffdf5f9f96900108042a7ab0643fe2a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35 ncmZ?wbhEHbWMp7uXkcJy*>IeJfk6j|fqX^=1|}vKMh0sDa2W*H diff --git a/hurricane/doc/hurricane/html/tab_l.gif b/hurricane/doc/hurricane/html/tab_l.gif deleted file mode 100644 index 9b1e6337c9299a700401a2a78a2c6ffced475216..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 706 zcmZ?wbhEHbZT`}F1e&(Gg}Y(8=I;HA5#Z$3JI=gGB)FQ#odI(O&E^@q;x zK6mr*m3xOS-#u~t!I@i+u0DKm^U160k6t`|^WpV}&n+8{U%dD9&a>B#U%!9-@yol< zU%&tQ{rk_K|NsC0`}dE5ET99@1@a36+kb~?0UJ*yc&I3X_m z!ND^5$O7$#8OFRuDhG}!?8z?cdZK&!`PWjdR;Aj^wZ` zeK{IEYHBJ)6K8VIp1`BVt++swf6j+=L{p1*nO(VhE`pFexG@5$|>uaCcd z`0m=9m+yak{QmXN#Sc$^{$X9h9&q2jiKAI|&T)a;PPx2K9p`YIdw8HtR5k2Q$2-O2 z*;3y{MQ-RnJTgJfI&R5|O)AHxDf_00XbPvDZPy4t=hHd)nfLPvms&O`Ok(sD()5v$ z5U@&h;a=#xbxVbo2~X&Xj0Ie(f{v>vERH+qC+nTG=B8Nca=wU-O$?1&vUgV~9=!H; zx>3p9Yn%*<>t~sk+&0xfyS8RsPfYBd<~wWK%j-LmpU>O7yX^h#UCp1x-p#i7@bE;py8XI6 zmY<)m>~)W~yIWcMVoiPg{duuf<*)9qZ9l$m*Ph&W&$jlv*Vpa+{pH@n=IQ$L?0$ax ec60Ul|8o2P|NVbd{6P)#weSbE3}s?04AuZvx_~SI diff --git a/hurricane/doc/hurricane/html/tab_r.gif b/hurricane/doc/hurricane/html/tab_r.gif deleted file mode 100644 index ce9dd9f533cb5486d6941844f442b59d4a9e9175..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2585 zcmbV}`9Bkk1ILFF--w5zJc=ZZT(zjE=;2|_S)Qm~rCWz1Pc)KPl;jv%A#&v2*x}yc zmf2~Jm~&=xjJY?PqwIN}f8qQ2{r$uH{c*nJbmr{cR5??*egHrs-B=MzCF`3%e{FAW z{oL5xTHn~5TM{jaB;@|_Ue5F&Zb@p(kMyG{*;gWDg zyeL|eZf7Qd8=#bXzSiR{yzRgLSj-fJS8>lBjVHN z^o-0eS=nE6a`W;LChBs=`+QAJP~{b93>H^eRb5kCSC1zUNezun%`L5M?RDzv#%jk7 zYVRX=vATPD`+oEfum^{RM@GjuP?-r=yh0!p;Vx^T9G7~`7%5ydH%70=jyJ;;`d;hv92x3R=z{xp+Lg2!*@OK*K15-t&okoPtSED)h&$RLxdbA zseWm^C3d%-yRNi-ryk^!ek+C`n&~cd$#ZWct_cUL{l~i+Nzx^5d!n94(>bW-iL~Rl z&8r)?q|1DIo=0=judQ{FaGcfLERz8gfn3-Qt<2lksh{mzpT}DXxUuR^z=^key&q4! z+wWI45vL0k$R^(F#{qfqhUsN@WA+w-V?LPH33!Q?WFSB3)WBojE@hK41Nb?KfS+Qo zXgrzfsP$wr4Qzy*{OD>uJBjdgGM@VMml5)2f~_}lD*YyOb}Hjeobhz#4c`w(l^>KK zr?Ud;W~Z}*w;%hZ|2^p^+f06gJDJQD zeIhGADbDmm&6arh(q>EZ<7mjzg7l|z$hRL8=1>)Nv=S7CY$B}iYJ&*T_-T_OG*L1q ztZ3Lana33?y3AKnyq^YCF|4x%Rb5WU&2qcl{TFKey%QJeMxn^SdT!hZ5+0i1zeusiYVp-phBl7b5+Px-X&LhByq z0F&<;K0l2+v>qiHlXb#$jXMv$uK-dEGE9L~qtdU(XeRXmvu*K2Q&6!fD**JxYP4b4BR7FdJ$Qx9G9`J%-_X!a#LGpp3g9)VWytGCa;7`S1_e8F~!R+aSJ zOF17p2`H?2kPs8Q`_;U}+D%3p zs2-0BTqFwpUoBk`?P;iPQ(IbEA|JmMx!P&YYG|R@S=5Mnw;-?A6rEEVyV%d7{iU4a zNk`i!%F(Ykpm`}#oH;BjY->@b8vQedv;pza2FL&*6ufjd+*3Ute&>kes~TU?^KkojsTh(o~(3tk1Y6>4(yn( z#U*ID9@eg-beKo1B;HXe+}{Z%n@7m0+yxivuqk9~;!1LGQlah)xYK4>wgL}l6dsaN zIxlRlq`*`j9PG4*0hD6YV_b_2w5b#)o7J?`q#{GjvvKlD`T*dWcZx<-s(ZvLB44E# z=!|sw!?)@%y$oRNL#25WS3lzdii}TuQ3?CLnvQ1_n};2sT_;Y;#d3=+-(O% zMN$>O!3;ke(UuLR%h_&)N zs^!-@A>QR}4yB1bPp`9S19ikTbZ~O{&FF-yHK{En;mmShDUIEw03`j(DBIsM}Rjki2J#SQa3gFZTKBPDeIiLt9Z z%bL3(B@Qw%(B`wSMS~dPh$=R`(}lBoFXKy(s|*{#ru$wjsBc_O#zxNk9w+UUHmx(U zmJ8+M+ndtnZ<7|VU9Mbt61zpo9T&3%Wx&XII=#QJxjR`CZf22ac3d51Z?GD%LEe_&*t46Qf;4`bZ7p2K(Ab5>GfT^}4! zBT&HZD`^PEgWoI&{~o-ID0F?O`75sm(87x%A{(}Ch1)QlzdJ)1B-eqe5a(weg0`4lQIf1evjvbBY50DVbzO7CLf|vP z2#0(U-|jZ`H{y5N^o7%iK6H>_HEGN->U6^!)1{XpJV!!4(Ig7wzZQ*9WYF4X1rG0x z=1uA@i`rIAciubDC{;~b(|&|A@xkjRP5aRcvRU9tvIm}jDB6J eQ0-6-y)mpwdT=ayS0tBxKDA*~;EWmo diff --git a/hurricane/doc/hurricane/latex/annotated.tex b/hurricane/doc/hurricane/latex/annotated.tex index 9a27a5a7..fd5a24bd 100644 --- a/hurricane/doc/hurricane/latex/annotated.tex +++ b/hurricane/doc/hurricane/latex/annotated.tex @@ -47,6 +47,7 @@ Here are the classes, structs, unions and interfaces with brief descriptions\+:\ \item\contentsline{section}{\mbox{\hyperlink{classHurricane_1_1Transformation_1_1Orientation}{Hurricane\+::\+Transformation\+::\+Orientation}} }{\pageref{classHurricane_1_1Transformation_1_1Orientation}}{} \item\contentsline{section}{\mbox{\hyperlink{classHurricane_1_1Pad}{Hurricane\+::\+Pad}} \\*\mbox{\hyperlink{classHurricane_1_1Pad}{Pad}} description ({\bfseries A\+PI}) }{\pageref{classHurricane_1_1Pad}}{} \item\contentsline{section}{\mbox{\hyperlink{classHurricane_1_1Path}{Hurricane\+::\+Path}} \\*\mbox{\hyperlink{classHurricane_1_1Path}{Path}} description ({\bfseries A\+PI}) }{\pageref{classHurricane_1_1Path}}{} +\item\contentsline{section}{\mbox{\hyperlink{classHurricane_1_1PhysicalRule}{Hurricane\+::\+Physical\+Rule}} \\*Define a rule for the technology ({\bfseries A\+PI}) }{\pageref{classHurricane_1_1PhysicalRule}}{} \item\contentsline{section}{\mbox{\hyperlink{classHurricane_1_1Pin}{Hurricane\+::\+Pin}} \\*\mbox{\hyperlink{classHurricane_1_1Pin}{Pin}} description ({\bfseries A\+PI}) }{\pageref{classHurricane_1_1Pin}}{} \item\contentsline{section}{\mbox{\hyperlink{classHurricane_1_1Instance_1_1PlacementStatus}{Hurricane\+::\+Instance\+::\+Placement\+Status}} \\*\mbox{\hyperlink{classHurricane_1_1Instance}{Instance}} Placement Status ({\bfseries A\+PI}) }{\pageref{classHurricane_1_1Instance_1_1PlacementStatus}}{} \item\contentsline{section}{\mbox{\hyperlink{classHurricane_1_1Plug}{Hurricane\+::\+Plug}} \\*\mbox{\hyperlink{classHurricane_1_1Plug}{Plug}} description ({\bfseries A\+PI}) }{\pageref{classHurricane_1_1Plug}}{} diff --git a/hurricane/doc/hurricane/latex/classHurricane_1_1BasicLayer.tex b/hurricane/doc/hurricane/latex/classHurricane_1_1BasicLayer.tex index 7e5f88c1..bcf37818 100644 --- a/hurricane/doc/hurricane/latex/classHurricane_1_1BasicLayer.tex +++ b/hurricane/doc/hurricane/latex/classHurricane_1_1BasicLayer.tex @@ -57,9 +57,9 @@ creates and returns a new basic layer named {\ttfamily $<$name$>$}, of type {\tt \begin{DoxyParagraph}{Caution\+: Throws an exception if the technology is null, if the name is } empty, if a layer of same name already exists or if we overflow the capacity of the bit field associated to the layer mask. \end{DoxyParagraph} -\begin{DoxyParagraph}{Remark\+: The extract number is a kind of logic number. In example the } -CP layer which represent a poly layer should have the same extract number as the C\+PG layer which represent a poly layer used to realize the transistor gates. While extractions process, layers which have the same extract number are considered as equivalents. A null value indicates that the extraction should ignore this layer. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +The extract number is a kind of logic number. In example the CP layer which represent a poly layer should have the same extract number as the C\+PG layer which represent a poly layer used to realize the transistor gates. While extractions process, layers which have the same extract number are considered as equivalents. A null value indicates that the extraction should ignore this layer. +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1BasicLayer_aeb7fd37db4ecf8e56e1992d6350fac58}\label{classHurricane_1_1BasicLayer_aeb7fd37db4ecf8e56e1992d6350fac58}} \index{Hurricane\+::\+Basic\+Layer@{Hurricane\+::\+Basic\+Layer}!get\+Material@{get\+Material}} \index{get\+Material@{get\+Material}!Hurricane\+::\+Basic\+Layer@{Hurricane\+::\+Basic\+Layer}} diff --git a/hurricane/doc/hurricane/latex/classHurricane_1_1Box.tex b/hurricane/doc/hurricane/latex/classHurricane_1_1Box.tex index 440be585..72888949 100644 --- a/hurricane/doc/hurricane/latex/classHurricane_1_1Box.tex +++ b/hurricane/doc/hurricane/latex/classHurricane_1_1Box.tex @@ -158,9 +158,9 @@ Assignment operator. \mbox{\Hypertarget{classHurricane_1_1Box_a2a363ad0fdfda5a2f Equality operator. -\begin{DoxyParagraph}{Remark\+: Two empty boxes are always different. } - -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +Two empty boxes are always different. +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1Box_a77a0e8c424c246973c455ce8e3ada8fb}\label{classHurricane_1_1Box_a77a0e8c424c246973c455ce8e3ada8fb}} \index{Hurricane\+::\+Box@{Hurricane\+::\+Box}!operator"!=@{operator"!=}} \index{operator"!=@{operator"!=}!Hurricane\+::\+Box@{Hurricane\+::\+Box}} diff --git a/hurricane/doc/hurricane/latex/classHurricane_1_1Cell.tex b/hurricane/doc/hurricane/latex/classHurricane_1_1Cell.tex index b7fa3e03..84a5385d 100644 --- a/hurricane/doc/hurricane/latex/classHurricane_1_1Cell.tex +++ b/hurricane/doc/hurricane/latex/classHurricane_1_1Cell.tex @@ -265,9 +265,9 @@ in this collection. Returns the \mbox{\hyperlink{classHurricane_1_1Collection}{Collection}} of all Occurrences belonging to this \mbox{\hyperlink{classHurricane_1_1Cell}{Cell}}. -\begin{DoxyParagraph}{Remark\+: The search depth is decremented each time a hirearchical} -level is crossed. The search ends when depth becomes null (the value {\ttfamily I\+N\+F\+I\+N\+I\+TE} is equal to {\ttfamily }(unsigned)-\/1) . -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +The search depth is decremented each time a hirearchical level is crossed. The search ends when depth becomes null (the value {\ttfamily I\+N\+F\+I\+N\+I\+TE} is equal to {\ttfamily }(unsigned)-\/1) . +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1Cell_a7fb09c8e350923c47ce4c4407bdb00ce}\label{classHurricane_1_1Cell_a7fb09c8e350923c47ce4c4407bdb00ce}} \index{Hurricane\+::\+Cell@{Hurricane\+::\+Cell}!get\+Occurrences\+Under@{get\+Occurrences\+Under}} \index{get\+Occurrences\+Under@{get\+Occurrences\+Under}!Hurricane\+::\+Cell@{Hurricane\+::\+Cell}} @@ -276,9 +276,9 @@ level is crossed. The search ends when depth becomes null (the value {\ttfamily Returns the \mbox{\hyperlink{classHurricane_1_1Collection}{Collection}} of all Occurrences belonging to this \mbox{\hyperlink{classHurricane_1_1Cell}{Cell}} and intersecting the given rectangular area. -\begin{DoxyParagraph}{Remark\+: The search depth is decremented each time a hirearchical} -level is crossed. The search ends when depth becomes null (the value {\ttfamily I\+N\+F\+I\+N\+I\+TE} is equal to {\ttfamily }(unsigned)-\/1) . -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +The search depth is decremented each time a hirearchical level is crossed. The search ends when depth becomes null (the value {\ttfamily I\+N\+F\+I\+N\+I\+TE} is equal to {\ttfamily }(unsigned)-\/1) . +\end{DoxyRemark} \begin{DoxyParagraph}{Caution\+: Only occurences corresponding to currently materialized} entities are taken into account in this \mbox{\hyperlink{classHurricane_1_1Collection}{Collection}}. \end{DoxyParagraph} @@ -354,9 +354,9 @@ Returns {\bfseries true} if the \mbox{\hyperlink{classHurricane_1_1Cell}{Cell}} Allows to change the \mbox{\hyperlink{classHurricane_1_1Cell}{Cell}} \mbox{\hyperlink{classHurricane_1_1Name}{Name}}. -\begin{DoxyParagraph}{Remark\+: Throws an exception if the new {\itshape name} is empty or if the} -\mbox{\hyperlink{classHurricane_1_1Library}{Library}} owning the \mbox{\hyperlink{classHurricane_1_1Cell}{Cell}} has already a \mbox{\hyperlink{classHurricane_1_1Cell}{Cell}} with the same name. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +Throws an exception if the new {\itshape name} is empty or if the \mbox{\hyperlink{classHurricane_1_1Library}{Library}} owning the \mbox{\hyperlink{classHurricane_1_1Cell}{Cell}} has already a \mbox{\hyperlink{classHurricane_1_1Cell}{Cell}} with the same name. +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1Cell_ab1949e2b708f0bd2d215ab90cfe864e0}\label{classHurricane_1_1Cell_ab1949e2b708f0bd2d215ab90cfe864e0}} \index{Hurricane\+::\+Cell@{Hurricane\+::\+Cell}!set\+Abutment\+Box@{set\+Abutment\+Box}} \index{set\+Abutment\+Box@{set\+Abutment\+Box}!Hurricane\+::\+Cell@{Hurricane\+::\+Cell}} @@ -365,9 +365,9 @@ Allows to change the \mbox{\hyperlink{classHurricane_1_1Cell}{Cell}} \mbox{\hype sets \mbox{\hyperlink{classHurricane_1_1Cell}{Cell}} abutment box. -\begin{DoxyParagraph}{Remark\+: At the Cell creation the abutment box is empty. This one must} -be set through this function. It is possible also, once fixed, to reset it to empty (undefined) by passing an empty \mbox{\hyperlink{classHurricane_1_1Box}{Box}} as argument. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +At the \mbox{\hyperlink{classHurricane_1_1Cell}{Cell}} creation the abutment box is empty. This one must be set through this function. It is possible also, once fixed, to reset it to empty (undefined) by passing an empty \mbox{\hyperlink{classHurricane_1_1Box}{Box}} as argument. +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1Cell_a15958b25e911e8f5543557b6deea5618}\label{classHurricane_1_1Cell_a15958b25e911e8f5543557b6deea5618}} \index{Hurricane\+::\+Cell@{Hurricane\+::\+Cell}!set\+Terminal\+Netlist@{set\+Terminal\+Netlist}} \index{set\+Terminal\+Netlist@{set\+Terminal\+Netlist}!Hurricane\+::\+Cell@{Hurricane\+::\+Cell}} diff --git a/hurricane/doc/hurricane/latex/classHurricane_1_1Collection.tex b/hurricane/doc/hurricane/latex/classHurricane_1_1Collection.tex index 1cab7f50..36ce4e27 100644 --- a/hurricane/doc/hurricane/latex/classHurricane_1_1Collection.tex +++ b/hurricane/doc/hurricane/latex/classHurricane_1_1Collection.tex @@ -115,9 +115,9 @@ forEach(Instance*, iinstance, getCollection(instanceSet)) \{ \end{DoxyCode} -\begin{DoxyParagraph}{Remark\+: This approach is a little bit less efficient than the use of } -S\+TL iterators, not much indeed, but has the advantage to be homogeneous with the remaining code (recall\+: the created collection doesn\textquotesingle{}t make a copy of the S\+TL container and its creation time is negligible). -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +This approach is a little bit less efficient than the use of S\+TL iterators, not much indeed, but has the advantage to be homogeneous with the remaining code (recall\+: the created collection doesn\textquotesingle{}t make a copy of the S\+TL container and its creation time is negligible). +\end{DoxyRemark} \begin{DoxyParagraph}{Caution\+: The returned collection is valid whenever the S\+TL container } is valid. Then you should not do the following\+: \begin{DoxyCode} @@ -173,9 +173,9 @@ Destroys the collection but doesn\textquotesingle{}t acts on elements refered by Allocates and returns a clone (copy) of the collection (whatever be its type). -\begin{DoxyParagraph}{Remark\+: In principle there is no need to use this function. However, } -if you do so, don\textquotesingle{}t forget to delete the clone after use. It is indeed much easier to use generic collections which do that for you, as we will see later. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +In principle there is no need to use this function. However, if you do so, don\textquotesingle{}t forget to delete the clone after use. It is indeed much easier to use generic collections which do that for you, as we will see later. +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1Collection_a48fd1a0a2b6d2530a87e22ba65aa3152}\label{classHurricane_1_1Collection_a48fd1a0a2b6d2530a87e22ba65aa3152}} \index{Hurricane\+::\+Collection@{Hurricane\+::\+Collection}!get\+Locator@{get\+Locator}} \index{get\+Locator@{get\+Locator}!Hurricane\+::\+Collection@{Hurricane\+::\+Collection}} @@ -185,9 +185,9 @@ if you do so, don\textquotesingle{}t forget to delete the clone after use. It is Allocates and returns a locator adapted to visit the elements of the collection. -\begin{DoxyParagraph}{Remark\+: In principle there is no need to use this function. Use } -preferably the macro {\bfseries for\+\_\+each} described below. However, if you do so, don\textquotesingle{}t forget to delete this locator after use, else use generic locators, which do that for you, as we will see later. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +In principle there is no need to use this function. Use preferably the macro {\bfseries for\+\_\+each} described below. However, if you do so, don\textquotesingle{}t forget to delete this locator after use, else use generic locators, which do that for you, as we will see later. +\end{DoxyRemark} Referenced by Hurricane\+::\+Collection$<$ Sub\+Type $>$\+::get\+First(), and Hurricane\+::\+Collection$<$ Sub\+Type $>$\+::get\+Size(). @@ -201,9 +201,9 @@ unsigned \mbox{\hyperlink{classHurricane_1_1Collection}{Hurricane\+::\+Collectio {\bfseries Returns\+:} the number of objects identified within the collection. -\begin{DoxyParagraph}{Remark\+: Very fast in some cases, but may need to visit the collection } -in most ones. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +Very fast in some cases, but may need to visit the collection in most ones. +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1Collection_a846a042646e02a0f77d2ce0f6190288a}\label{classHurricane_1_1Collection_a846a042646e02a0f77d2ce0f6190288a}} \index{Hurricane\+::\+Collection@{Hurricane\+::\+Collection}!get\+First@{get\+First}} \index{get\+First@{get\+First}!Hurricane\+::\+Collection@{Hurricane\+::\+Collection}} @@ -213,9 +213,9 @@ Type \mbox{\hyperlink{classHurricane_1_1Collection}{Hurricane\+::\+Collection}}$ {\bfseries Returns\+:} the first element of the collection. -\begin{DoxyParagraph}{Remark\+: The result is meaningful only when the collection is non } -empty. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +The result is meaningful only when the collection is non empty. +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1Collection_aa32ea7249d57ee05e3c71dcde8106832}\label{classHurricane_1_1Collection_aa32ea7249d57ee05e3c71dcde8106832}} \index{Hurricane\+::\+Collection@{Hurricane\+::\+Collection}!get\+Sub\+Set@{get\+Sub\+Set}} \index{get\+Sub\+Set@{get\+Sub\+Set}!Hurricane\+::\+Collection@{Hurricane\+::\+Collection}} @@ -240,9 +240,9 @@ template$<$class Sub\+Type $>$ \\ {\bfseries Returns\+:} the collection corresponding to the subset of elements of type {\ttfamily $<$Sub\+Type$>$}. -\begin{DoxyParagraph}{Remark\+: The returned collection is a collection of objects of type } -{\bfseries Sub\+Type} and not of type {\bfseries Type}. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +The returned collection is a collection of objects of type {\bfseries Sub\+Type} and not of type {\bfseries Type}. +\end{DoxyRemark} \begin{DoxyCode} \mbox{\hyperlink{namespaceHurricane_a1e6a8ab09f688509bd727b3fee02d0d2}{Contacts}} \mbox{\hyperlink{classHurricane_1_1Net_a9c397596fe9ecbf674712c72e0b9010c}{Net::getContacts}}()\textcolor{keyword}{ const} @@ -264,9 +264,9 @@ template$<$class Sub\+Type $>$ \\ {\bfseries Returns\+:} the collection representing the subset of elements of type {\ttfamily $<$Sub\+Type$>$} accepted by the filter. -\begin{DoxyParagraph}{Remark\+: The returned collection is a collection of elements of type } -{\bfseries Sub\+Type} and not of type {\bfseries Type} and the filter must be a filter of elements of type {\bfseries Sub\+Type}. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +The returned collection is a collection of elements of type {\bfseries Sub\+Type} and not of type {\bfseries Type} and the filter must be a filter of elements of type {\bfseries Sub\+Type}. +\end{DoxyRemark} \begin{DoxyParagraph}{Sample\+: Filter Hurricane\+:\+:Segment according to their Layer.} \begin{DoxyCode} diff --git a/hurricane/doc/hurricane/latex/classHurricane_1_1Component.tex b/hurricane/doc/hurricane/latex/classHurricane_1_1Component.tex index f04fa93e..1dfa55fc 100644 --- a/hurricane/doc/hurricane/latex/classHurricane_1_1Component.tex +++ b/hurricane/doc/hurricane/latex/classHurricane_1_1Component.tex @@ -65,9 +65,9 @@ Some components (for instance the segments) bear on contacts or other segments, For that purpose each components must be able to return a location from which a relative calculations can be done. The methods {\bfseries \mbox{\hyperlink{classHurricane_1_1Component_a0f8299ed73705fd4fbf56589dcc7e074}{get\+X()}}} and {\bfseries \mbox{\hyperlink{classHurricane_1_1Component_a727da3f127c3a7a0a09468219f98c3e6}{get\+Y()}}} provide this information and must be overloaded for each sub-\/type of component in oder to get the desired effect. -\begin{DoxyParagraph}{Remark\+: The fact that a null value is systematically returned by one } -of this methods means that the locations are computed relative to a null value, which is equivalent to say they are absolute values (see for instance the \mbox{\hyperlink{classHurricane_1_1Horizontal}{Horizontal}} segment whose \mbox{\hyperlink{classHurricane_1_1Component_a0f8299ed73705fd4fbf56589dcc7e074}{get\+X()}} returns always null, while \mbox{\hyperlink{classHurricane_1_1Component_a727da3f127c3a7a0a09468219f98c3e6}{get\+Y()}} return the ordinate of its axis). -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +The fact that a null value is systematically returned by one of this methods means that the locations are computed relative to a null value, which is equivalent to say they are absolute values (see for instance the \mbox{\hyperlink{classHurricane_1_1Horizontal}{Horizontal}} segment whose \mbox{\hyperlink{classHurricane_1_1Component_a0f8299ed73705fd4fbf56589dcc7e074}{get\+X()}} returns always null, while \mbox{\hyperlink{classHurricane_1_1Component_a727da3f127c3a7a0a09468219f98c3e6}{get\+Y()}} return the ordinate of its axis). +\end{DoxyRemark} \hypertarget{classHurricane_1_1Component_secComponentDestruction}{}\subsection{Destruction}\label{classHurricane_1_1Component_secComponentDestruction} When a component is destroyed, all components which are anchored on its body (through the body hook) are also destroyed. This may recursively propagate to other components anchored on the body of those last ones. @@ -205,9 +205,9 @@ Implemented in \mbox{\hyperlink{classHurricane_1_1RoutingPad_a7f1e300e4148556fa2 {\bfseries Returns\+:} the collection of \char`\"{}connex components\char`\"{} to the component {\ttfamily $<$this$>$} (which includes at least this one). -\begin{DoxyParagraph}{Remark\+: A componnent is said connex to an other one if it is } -attached directly or indirectly through hyper-\/hooks, that is if there exist a sequence of components whose parts (extremities or body) are either sharing the same anchor or anchored one upon the other. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +A componnent is said {\bfseries connex} to an other one if it is attached directly or indirectly through hyper-\/hooks, that is if there exist a sequence of components whose parts (extremities or body) are either sharing the same anchor or anchored one upon the other. +\end{DoxyRemark} If the layout elements are correctly assembled and on the proper layers, this \char`\"{}connex components collection\char`\"{} represents an geometrically and electrically connected subset of layout elements On the other hand, if layout anchored objects don\textquotesingle{}t overlap on the same conducting layers (either by a wrong contact layer or by an offset which forbids layout intersection) electrical continuity will not be ensured. \mbox{\Hypertarget{classHurricane_1_1Component_af6d6b7c6b3cb18754cfa02bc5fb1e754}\label{classHurricane_1_1Component_af6d6b7c6b3cb18754cfa02bc5fb1e754}} diff --git a/hurricane/doc/hurricane/latex/classHurricane_1_1Contact.tex b/hurricane/doc/hurricane/latex/classHurricane_1_1Contact.tex index ecc8bb1a..8fa445a2 100644 --- a/hurricane/doc/hurricane/latex/classHurricane_1_1Contact.tex +++ b/hurricane/doc/hurricane/latex/classHurricane_1_1Contact.tex @@ -112,9 +112,9 @@ creates and returns a new contact on the layer {\ttfamily $<$layer$>$}, of size \begin{DoxyParagraph}{Caution\+: Throws an exception if the layer or the anchor is null or if } the anchor is an unconnected plug. \end{DoxyParagraph} -\begin{DoxyParagraph}{Remark\+: The new contact belongs to the anchor\textquotesingle{}s net. } - -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +The new contact belongs to the anchor\textquotesingle{}s net. +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1Contact_a300306b006397377bc9a54ea783c1150}\label{classHurricane_1_1Contact_a300306b006397377bc9a54ea783c1150}} \index{Hurricane\+::\+Contact@{Hurricane\+::\+Contact}!get\+Anchor\+Hook@{get\+Anchor\+Hook}} \index{get\+Anchor\+Hook@{get\+Anchor\+Hook}!Hurricane\+::\+Contact@{Hurricane\+::\+Contact}} @@ -135,9 +135,9 @@ The anchor hook of the contact being a slave one, it may have a master hook repr {\bfseries Returns\+:} the relative abscissa of the contact. -\begin{DoxyParagraph}{Remark\+: If you want to get the absolute one use the member function } -get\+X() defined at the \mbox{\hyperlink{classHurricane_1_1Component}{Component}} level. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +If you want to get the absolute one use the member function get\+X() defined at the \mbox{\hyperlink{classHurricane_1_1Component}{Component}} level. +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1Contact_aa7bc32ab9211fd5f6ad3aacdf1214f20}\label{classHurricane_1_1Contact_aa7bc32ab9211fd5f6ad3aacdf1214f20}} \index{Hurricane\+::\+Contact@{Hurricane\+::\+Contact}!get\+Dy@{get\+Dy}} \index{get\+Dy@{get\+Dy}!Hurricane\+::\+Contact@{Hurricane\+::\+Contact}} @@ -146,9 +146,9 @@ get\+X() defined at the \mbox{\hyperlink{classHurricane_1_1Component}{Component} {\bfseries Returns\+:} the relative ordinate of the contact. -\begin{DoxyParagraph}{Remark\+: If you want to get the absolute one use the member function } -get\+Y() defined at the \mbox{\hyperlink{classHurricane_1_1Component}{Component}} level. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +If you want to get the absolute one use the member function get\+Y() defined at the \mbox{\hyperlink{classHurricane_1_1Component}{Component}} level. +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1Contact_a28bd18de9ca6e5cf2b77fce5e22af43a}\label{classHurricane_1_1Contact_a28bd18de9ca6e5cf2b77fce5e22af43a}} \index{Hurricane\+::\+Contact@{Hurricane\+::\+Contact}!get\+Width@{get\+Width}} \index{get\+Width@{get\+Width}!Hurricane\+::\+Contact@{Hurricane\+::\+Contact}} @@ -229,9 +229,9 @@ Allows to change the absolute location of the contact (if it has a location rela Allows to change the horizontal offset of the contact. -\begin{DoxyParagraph}{Remark\+: If the contact is absolute, this amounts to change its } -absolute abscissa. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +If the contact is absolute, this amounts to change its absolute abscissa. +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1Contact_a32ee96c21115ee9d197bc505fd48e37d}\label{classHurricane_1_1Contact_a32ee96c21115ee9d197bc505fd48e37d}} \index{Hurricane\+::\+Contact@{Hurricane\+::\+Contact}!set\+Dy@{set\+Dy}} \index{set\+Dy@{set\+Dy}!Hurricane\+::\+Contact@{Hurricane\+::\+Contact}} @@ -240,9 +240,9 @@ absolute abscissa. Allows to change the vertical offset of the contact. -\begin{DoxyParagraph}{Remark\+: If the contact is absolute, this amounts to change its } -absolute ordinate. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +If the contact is absolute, this amounts to change its absolute ordinate. +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1Contact_a41ba972136e77d768f58ad0407d18f8e}\label{classHurricane_1_1Contact_a41ba972136e77d768f58ad0407d18f8e}} \index{Hurricane\+::\+Contact@{Hurricane\+::\+Contact}!set\+Offset@{set\+Offset}} \index{set\+Offset@{set\+Offset}!Hurricane\+::\+Contact@{Hurricane\+::\+Contact}} @@ -251,9 +251,9 @@ absolute ordinate. Allows to change the offset of the contact. -\begin{DoxyParagraph}{Remark\+: If the contact is absolute, this amounts to change its } -absolute location. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +If the contact is absolute, this amounts to change its absolute location. +\end{DoxyRemark} The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize} diff --git a/hurricane/doc/hurricane/latex/classHurricane_1_1Contact_1_1AnchorHook.tex b/hurricane/doc/hurricane/latex/classHurricane_1_1Contact_1_1AnchorHook.tex index fde61656..58c084ee 100644 --- a/hurricane/doc/hurricane/latex/classHurricane_1_1Contact_1_1AnchorHook.tex +++ b/hurricane/doc/hurricane/latex/classHurricane_1_1Contact_1_1AnchorHook.tex @@ -15,9 +15,9 @@ Inheritance diagram for Hurricane\+:\+:Contact\+:\+:Anchor\+Hook\+:\nopagebreak \subsection{Detailed Description} With contacts, a new type of \mbox{\hyperlink{classHurricane_1_1Hook}{Hook}} appears \+: the {\bfseries \mbox{\hyperlink{classHurricane_1_1Contact_1_1AnchorHook}{Anchor\+Hook}}}, which allows to attach a contact upon an other component, on which it is said to be \char`\"{}anchored\char`\"{}. It becomes then a \char`\"{}relative contact\char`\"{} with respect of the coordinates of this component. The \mbox{\hyperlink{classHurricane_1_1Contact_1_1AnchorHook}{Anchor\+Hook}} is always a slave hook. -\begin{DoxyParagraph}{Remark\+: A contact has two attributes {\ttfamily $<$Dx$>$} and {\ttfamily $<$Dy$>$} which } -represent the relative coordinates of the contact with respect to the coordinates of the component on which it is anchored (through this \mbox{\hyperlink{classHurricane_1_1Contact_1_1AnchorHook}{Anchor\+Hook}}). When it is not anchored, those coordinates becomes relative to the origin of the cell, which means they are absolute. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +A contact has two attributes {\ttfamily $<$Dx$>$} and {\ttfamily $<$Dy$>$} which represent the relative coordinates of the contact with respect to the coordinates of the component on which it is anchored (through this \mbox{\hyperlink{classHurricane_1_1Contact_1_1AnchorHook}{Anchor\+Hook}}). When it is not anchored, those coordinates becomes relative to the origin of the cell, which means they are absolute. +\end{DoxyRemark} The documentation for this class was generated from the following file\+:\begin{DoxyCompactItemize} diff --git a/hurricane/doc/hurricane/latex/classHurricane_1_1DBo.tex b/hurricane/doc/hurricane/latex/classHurricane_1_1DBo.tex index 53697a67..2f4ddf90 100644 --- a/hurricane/doc/hurricane/latex/classHurricane_1_1DBo.tex +++ b/hurricane/doc/hurricane/latex/classHurricane_1_1DBo.tex @@ -139,9 +139,9 @@ MyCell* MyCell::Create(Library* library, \textcolor{keyword}{const} Name& name) \end{DoxyCode} -\begin{DoxyParagraph}{Remark\+: The destructor, strictly speaking, is not defined because} -necessary operations are done within the method {\bfseries \+\_\+pre\+Destroy}. In the implementation of the class {\bfseries My\+Cell} we have only used the type {\bfseries Inherit} (and never {\bfseries \mbox{\hyperlink{classHurricane_1_1Cell}{Cell}}}). This opens the door to hierarchy changes without affecting the code already written. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +The destructor, strictly speaking, is not defined because necessary operations are done within the method {\bfseries \+\_\+pre\+Destroy}. In the implementation of the class {\bfseries My\+Cell} we have only used the type {\bfseries Inherit} (and never {\bfseries \mbox{\hyperlink{classHurricane_1_1Cell}{Cell}}}). This opens the door to hierarchy changes without affecting the code already written. +\end{DoxyRemark} \hypertarget{classHurricane_1_1DBo_sDBoRemark}{}\subsection{Remark}\label{classHurricane_1_1DBo_sDBoRemark} The construction and deletion process of property objects is the same. It is mandatory for any new type of property to adopt the same protocol. @@ -166,8 +166,8 @@ The legal method to delete any \mbox{\hyperlink{classHurricane_1_1DBo}{D\+Bo}} o \begin{DoxyReturn}{Returns} The property of \mbox{\hyperlink{classHurricane_1_1Name}{Name}} {\itshape name} attached to the object, if it exists, else {\ttfamily N\+U\+LL}. \end{DoxyReturn} -\begin{DoxyParagraph}{Remark\+: When writting what follows \+:} - +\begin{DoxyRemark}{Remarks} +When writting what follows \+: \begin{DoxyCode} forEach(DBo*, idbo, dbos) \{ Property* \textcolor{keyword}{property} = idbo->getProperty(\textcolor{stringliteral}{"width"}); @@ -177,7 +177,7 @@ forEach(DBo*, idbo, dbos) \{ \} \end{DoxyCode} -\end{DoxyParagraph} +\end{DoxyRemark} There is construction of a name (from a character string) for each visited dbo in order to find the property. It\textquotesingle{}s more efficient to write \+: \begin{DoxyCode} Name width = \textcolor{stringliteral}{"width"}; @@ -224,9 +224,9 @@ The property \mbox{\hyperlink{classHurricane_1_1Collection}{Collection}} associa Adds the \mbox{\hyperlink{classHurricane_1_1Property}{Property}} {\itshape property} to the set of object properties. Properties being named, if an other one already exists in the set, with the same name, this last will be in a first step removed from the set. -\begin{DoxyParagraph}{Remark\+: Does nothing if the Property object is already attached to the} -object. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +Does nothing if the \mbox{\hyperlink{classHurricane_1_1Property}{Property}} object is already attached to the object. +\end{DoxyRemark} \begin{DoxyParagraph}{Caution\+: An exception is thrown if the Property pointer is {\ttfamily N\+U\+LL}.} \end{DoxyParagraph} @@ -238,9 +238,9 @@ object. removes the property {\itshape property} from the set of object properties. -\begin{DoxyParagraph}{Remark\+: Does nothing if the Property object is not attached to the object.} - -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +Does nothing if the \mbox{\hyperlink{classHurricane_1_1Property}{Property}} object is not attached to the object. +\end{DoxyRemark} \begin{DoxyParagraph}{Caution\+: An exception is thrown if the Property pointer is {\ttfamily N\+U\+LL}.} \end{DoxyParagraph} diff --git a/hurricane/doc/hurricane/latex/classHurricane_1_1DBo__inherit__graph.pdf b/hurricane/doc/hurricane/latex/classHurricane_1_1DBo__inherit__graph.pdf index 887eafaf74dd4861c8c5bcb6d87ffdd00ced11b3..81c61ae94d16b56c9fb32651da71f3af11785d76 100644 GIT binary patch delta 22 dcmZojY)IU2P><8x$iT?J#Kg#C^C`V;i~w6u2bKT; delta 22 dcmZojY)IU2P><8Z$js2p*wn~u^C`V;i~w7z2cQ4| diff --git a/hurricane/doc/hurricane/latex/classHurricane_1_1Entity.tex b/hurricane/doc/hurricane/latex/classHurricane_1_1Entity.tex index c1015ced..3b3975d4 100644 --- a/hurricane/doc/hurricane/latex/classHurricane_1_1Entity.tex +++ b/hurricane/doc/hurricane/latex/classHurricane_1_1Entity.tex @@ -50,9 +50,9 @@ The identifier is generated from an ever incrementing counter on 32 bits or 64 b \begin{DoxyReturn}{Returns} Returns the bounding box of the entity. It is defined as the smallest box enclosing the entity or its constituents. \end{DoxyReturn} -\begin{DoxyParagraph}{Remark\+: For the Plugs, which are not objects of the physical layout,} -the returned envelope is a \mbox{\hyperlink{classHurricane_1_1Box}{Box}} of null dimensions (ponctual) centered on the location of the master \mbox{\hyperlink{classHurricane_1_1Net}{Net}} of the \mbox{\hyperlink{classHurricane_1_1Plug}{Plug}}, to which has been applied the transformation associated to the \mbox{\hyperlink{classHurricane_1_1Instance}{Instance}} of the \mbox{\hyperlink{classHurricane_1_1Plug}{Plug}}. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +For the Plugs, which are not objects of the physical layout, the returned envelope is a \mbox{\hyperlink{classHurricane_1_1Box}{Box}} of null dimensions (ponctual) centered on the location of the master \mbox{\hyperlink{classHurricane_1_1Net}{Net}} of the \mbox{\hyperlink{classHurricane_1_1Plug}{Plug}}, to which has been applied the transformation associated to the \mbox{\hyperlink{classHurricane_1_1Instance}{Instance}} of the \mbox{\hyperlink{classHurricane_1_1Plug}{Plug}}. +\end{DoxyRemark} Implemented in \mbox{\hyperlink{classHurricane_1_1RoutingPad_a2cc2894b5e1c82b725dedcf1978dc773}{Hurricane\+::\+Routing\+Pad}}. diff --git a/hurricane/doc/hurricane/latex/classHurricane_1_1Exception.tex b/hurricane/doc/hurricane/latex/classHurricane_1_1Exception.tex index bb665605..6203d4bb 100644 --- a/hurricane/doc/hurricane/latex/classHurricane_1_1Exception.tex +++ b/hurricane/doc/hurricane/latex/classHurricane_1_1Exception.tex @@ -38,9 +38,9 @@ static void \mbox{\hyperlink{classHurricane_1_1Exception_a0effe808df00f4efe10925 \hypertarget{classHurricane_1_1Exception_secExceptionIntro}{}\subsection{Introduction}\label{classHurricane_1_1Exception_secExceptionIntro} The \mbox{\hyperlink{classHurricane_1_1Exception}{Exception}} class groups all exceptions thrown by functions from the A\+PI. This virtual class is only useful to catch exceptions originating from one of those functions. -\begin{DoxyParagraph}{Remark\+: Copy construction is disabled.} - -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +Copy construction is disabled. +\end{DoxyRemark} \hypertarget{classHurricane_1_1Exception_secExceptionExample}{}\subsection{Example}\label{classHurricane_1_1Exception_secExceptionExample} \begin{DoxyCode} diff --git a/hurricane/doc/hurricane/latex/classHurricane_1_1GenericCollection.tex b/hurricane/doc/hurricane/latex/classHurricane_1_1GenericCollection.tex index 87037589..2e2d76dd 100644 --- a/hurricane/doc/hurricane/latex/classHurricane_1_1GenericCollection.tex +++ b/hurricane/doc/hurricane/latex/classHurricane_1_1GenericCollection.tex @@ -33,9 +33,9 @@ Generic \mbox{\hyperlink{classHurricane_1_1Collection}{Collection}} auto-\/point This class is an auto-\/pointer like wrapped around the raw collection. The database systematically returns collections wrapped inside \mbox{\hyperlink{classHurricane_1_1GenericCollection}{Generic\+Collection}}. -\begin{DoxyParagraph}{Remark\+: The destruction of a Generic\+Collection triggers the destruction of} -the raw collection. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +The destruction of a \mbox{\hyperlink{classHurricane_1_1GenericCollection}{Generic\+Collection}} triggers the destruction of the raw collection. +\end{DoxyRemark} \subsection{Constructor \& Destructor Documentation} @@ -48,9 +48,9 @@ the raw collection. Constructor from a raw \mbox{\hyperlink{classHurricane_1_1Collection}{Collection}}. -\begin{DoxyParagraph}{Remark\+: This constructor build a {\itshape copy} of the raw collection. So the originating} -collection can be safely deleted. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +This constructor build a {\itshape copy} of the raw collection. So the originating collection can be safely deleted. +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1GenericCollection_a9b77dc014864c2248f31b9dfee242d25}\label{classHurricane_1_1GenericCollection_a9b77dc014864c2248f31b9dfee242d25}} \index{Hurricane\+::\+Generic\+Collection@{Hurricane\+::\+Generic\+Collection}!Generic\+Collection@{Generic\+Collection}} \index{Generic\+Collection@{Generic\+Collection}!Hurricane\+::\+Generic\+Collection@{Hurricane\+::\+Generic\+Collection}} @@ -60,9 +60,9 @@ collection can be safely deleted. Constructor from a raw \mbox{\hyperlink{classHurricane_1_1Collection}{Collection}}. -\begin{DoxyParagraph}{Remark\+: This constructor build a {\itshape copy} of the raw collection. So the originating} -collection can be safely deleted. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +This constructor build a {\itshape copy} of the raw collection. So the originating collection can be safely deleted. +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1GenericCollection_a8e4f70213efb85c0ba802b7de9c03b32}\label{classHurricane_1_1GenericCollection_a8e4f70213efb85c0ba802b7de9c03b32}} \index{Hurricane\+::\+Generic\+Collection@{Hurricane\+::\+Generic\+Collection}!Generic\+Collection@{Generic\+Collection}} \index{Generic\+Collection@{Generic\+Collection}!Hurricane\+::\+Generic\+Collection@{Hurricane\+::\+Generic\+Collection}} @@ -72,9 +72,9 @@ collection can be safely deleted. Constructor from a raw \mbox{\hyperlink{classHurricane_1_1Collection}{Collection}}. -\begin{DoxyParagraph}{Remark\+: This constructor do not build a copy of the raw collection. So the original} -raw collection must not be deleted. It\textquotesingle{}s deletion will occurs with the one of the \mbox{\hyperlink{classHurricane_1_1GenericCollection}{Generic\+Collection}}. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +This constructor do not build a copy of the raw collection. So the original raw collection must not be deleted. It\textquotesingle{}s deletion will occurs with the one of the \mbox{\hyperlink{classHurricane_1_1GenericCollection}{Generic\+Collection}}. +\end{DoxyRemark} The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize} diff --git a/hurricane/doc/hurricane/latex/classHurricane_1_1GenericFilter.tex b/hurricane/doc/hurricane/latex/classHurricane_1_1GenericFilter.tex index fd721694..992d3b39 100644 --- a/hurricane/doc/hurricane/latex/classHurricane_1_1GenericFilter.tex +++ b/hurricane/doc/hurricane/latex/classHurricane_1_1GenericFilter.tex @@ -33,9 +33,9 @@ Generic \mbox{\hyperlink{classHurricane_1_1Filter}{Filter}} auto-\/pointer. This class is an auto-\/pointer like wrapped around the raw filter. The database systematically returns filters wrapped inside \mbox{\hyperlink{classHurricane_1_1GenericFilter}{Generic\+Filter}}. -\begin{DoxyParagraph}{Remark\+: The destruction of a Generic\+Filter triggers the destruction of} -the raw filter. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +The destruction of a \mbox{\hyperlink{classHurricane_1_1GenericFilter}{Generic\+Filter}} triggers the destruction of the raw filter. +\end{DoxyRemark} \subsection{Constructor \& Destructor Documentation} @@ -48,9 +48,9 @@ the raw filter. Constructor from a raw \mbox{\hyperlink{classHurricane_1_1Filter}{Filter}}. -\begin{DoxyParagraph}{Remark\+: This constructor build a {\itshape copy} of the raw filter. So the originating} -filter can be safely deleted. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +This constructor build a {\itshape copy} of the raw filter. So the originating filter can be safely deleted. +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1GenericFilter_adf44866e7507f45dd0d612743f2d9a71}\label{classHurricane_1_1GenericFilter_adf44866e7507f45dd0d612743f2d9a71}} \index{Hurricane\+::\+Generic\+Filter@{Hurricane\+::\+Generic\+Filter}!Generic\+Filter@{Generic\+Filter}} \index{Generic\+Filter@{Generic\+Filter}!Hurricane\+::\+Generic\+Filter@{Hurricane\+::\+Generic\+Filter}} @@ -60,9 +60,9 @@ filter can be safely deleted. Constructor from a raw \mbox{\hyperlink{classHurricane_1_1Filter}{Filter}}. -\begin{DoxyParagraph}{Remark\+: This constructor build a {\itshape copy} of the raw filter. So the originating} -filter can be safely deleted. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +This constructor build a {\itshape copy} of the raw filter. So the originating filter can be safely deleted. +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1GenericFilter_aac847f0c0d6ee640c54847e374287fe1}\label{classHurricane_1_1GenericFilter_aac847f0c0d6ee640c54847e374287fe1}} \index{Hurricane\+::\+Generic\+Filter@{Hurricane\+::\+Generic\+Filter}!Generic\+Filter@{Generic\+Filter}} \index{Generic\+Filter@{Generic\+Filter}!Hurricane\+::\+Generic\+Filter@{Hurricane\+::\+Generic\+Filter}} @@ -72,9 +72,9 @@ filter can be safely deleted. Constructor from a raw \mbox{\hyperlink{classHurricane_1_1Filter}{Filter}}. -\begin{DoxyParagraph}{Remark\+: This constructor do not build a copy of the raw filter. So the original} -raw filter must not be deleted. It\textquotesingle{}s deletion will occurs with the one of the \mbox{\hyperlink{classHurricane_1_1GenericFilter}{Generic\+Filter}}. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +This constructor do not build a copy of the raw filter. So the original raw filter must not be deleted. It\textquotesingle{}s deletion will occurs with the one of the \mbox{\hyperlink{classHurricane_1_1GenericFilter}{Generic\+Filter}}. +\end{DoxyRemark} The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize} diff --git a/hurricane/doc/hurricane/latex/classHurricane_1_1GenericLocator.tex b/hurricane/doc/hurricane/latex/classHurricane_1_1GenericLocator.tex index 90dcb055..28301be8 100644 --- a/hurricane/doc/hurricane/latex/classHurricane_1_1GenericLocator.tex +++ b/hurricane/doc/hurricane/latex/classHurricane_1_1GenericLocator.tex @@ -33,9 +33,9 @@ Generic \mbox{\hyperlink{classHurricane_1_1Locator}{Locator}} auto-\/pointer. This class is an auto-\/pointer like wrapped around the raw locator. -\begin{DoxyParagraph}{Remark\+: The destruction of a Generic\+Locator triggers the destruction of} -the raw locator. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +The destruction of a \mbox{\hyperlink{classHurricane_1_1GenericLocator}{Generic\+Locator}} triggers the destruction of the raw locator. +\end{DoxyRemark} \subsection{Constructor \& Destructor Documentation} @@ -48,9 +48,9 @@ the raw locator. Constructor from a primary \mbox{\hyperlink{classHurricane_1_1Locator}{Locator}}. -\begin{DoxyParagraph}{Remark\+: This constructor build a {\itshape copy} of the raw locator. So the originating} -locator can be safely deleted. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +This constructor build a {\itshape copy} of the raw locator. So the originating locator can be safely deleted. +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1GenericLocator_aa314dea86573d1cee1d1eea8ac2ab49e}\label{classHurricane_1_1GenericLocator_aa314dea86573d1cee1d1eea8ac2ab49e}} \index{Hurricane\+::\+Generic\+Locator@{Hurricane\+::\+Generic\+Locator}!Generic\+Locator@{Generic\+Locator}} \index{Generic\+Locator@{Generic\+Locator}!Hurricane\+::\+Generic\+Locator@{Hurricane\+::\+Generic\+Locator}} @@ -60,9 +60,9 @@ locator can be safely deleted. Constructor from a primary \mbox{\hyperlink{classHurricane_1_1Locator}{Locator}} and a \mbox{\hyperlink{classHurricane_1_1Filter}{Filter}}. -\begin{DoxyParagraph}{Remark\+: This constructor build a {\itshape copy} of the raw locator. So the originating} -locator can be safely deleted. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +This constructor build a {\itshape copy} of the raw locator. So the originating locator can be safely deleted. +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1GenericLocator_a4706b6502b806f90f2374df76791a729}\label{classHurricane_1_1GenericLocator_a4706b6502b806f90f2374df76791a729}} \index{Hurricane\+::\+Generic\+Locator@{Hurricane\+::\+Generic\+Locator}!Generic\+Locator@{Generic\+Locator}} \index{Generic\+Locator@{Generic\+Locator}!Hurricane\+::\+Generic\+Locator@{Hurricane\+::\+Generic\+Locator}} @@ -72,9 +72,9 @@ locator can be safely deleted. Constructor from a raw \mbox{\hyperlink{classHurricane_1_1Locator}{Locator}}. -\begin{DoxyParagraph}{Remark\+: This constructor do not build a copy of the raw locator. So the original} -raw locator must not be deleted. It\textquotesingle{}s deletion will occurs with the one of the \mbox{\hyperlink{classHurricane_1_1GenericLocator}{Generic\+Locator}}. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +This constructor do not build a copy of the raw locator. So the original raw locator must not be deleted. It\textquotesingle{}s deletion will occurs with the one of the \mbox{\hyperlink{classHurricane_1_1GenericLocator}{Generic\+Locator}}. +\end{DoxyRemark} The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize} diff --git a/hurricane/doc/hurricane/latex/classHurricane_1_1Go.tex b/hurricane/doc/hurricane/latex/classHurricane_1_1Go.tex index 2221b0e1..90d8308c 100644 --- a/hurricane/doc/hurricane/latex/classHurricane_1_1Go.tex +++ b/hurricane/doc/hurricane/latex/classHurricane_1_1Go.tex @@ -51,9 +51,9 @@ A graphical object is said materialized when it is effectively inserted into a q On the other hand, non materialized graphic objects will neither be visible nor taken into account by those collections. This may be a significant advantage in some situations and a great drawback in others. -\begin{DoxyParagraph}{Remark\+: Plugs are never materialized. } - -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +{\bfseries Plugs are never materialized}. +\end{DoxyRemark} \hypertarget{classHurricane_1_1Go_secGoUpdateSessions}{}\subsection{Update sessions}\label{classHurricane_1_1Go_secGoUpdateSessions} The location of an object within its quadtree depends of its bounding box, if a modification of this one must occur for any reason, the object must be removed from the quadtree before doing the modification and re-\/inserted after, at the right place, according to its new bounding box. diff --git a/hurricane/doc/hurricane/latex/classHurricane_1_1Hook.tex b/hurricane/doc/hurricane/latex/classHurricane_1_1Hook.tex index 1ea6657d..3d0e1ebc 100644 --- a/hurricane/doc/hurricane/latex/classHurricane_1_1Hook.tex +++ b/hurricane/doc/hurricane/latex/classHurricane_1_1Hook.tex @@ -88,9 +88,9 @@ On the same way, hooks disapear automatically with their owner. {\bfseries Returns\+:} the component whose hook represents a part. -\begin{DoxyParagraph}{Remark\+: The result is never N\+U\+LL because hooks are byforce nested } -objects in their component. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +The result is never N\+U\+LL because hooks are byforce nested objects in their component. +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1Hook_a03044fa995d6d784d6c441927ca8af04}\label{classHurricane_1_1Hook_a03044fa995d6d784d6c441927ca8af04}} \index{Hurricane\+::\+Hook@{Hurricane\+::\+Hook}!get\+Next\+Hook@{get\+Next\+Hook}} \index{get\+Next\+Hook@{get\+Next\+Hook}!Hurricane\+::\+Hook@{Hurricane\+::\+Hook}} @@ -99,9 +99,9 @@ objects in their component. {\bfseries Returns\+:} the next hook within the ring. -\begin{DoxyParagraph}{Remark\+: The result is never N\+U\+LL because every hook has by } -construction its next one (which may be itself is the ring is empty). -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +The result is never N\+U\+LL because every hook has by construction its next one (which may be itself is the ring is empty). +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1Hook_ad69ebbbf3d64343aca23ca435f24c624}\label{classHurricane_1_1Hook_ad69ebbbf3d64343aca23ca435f24c624}} \index{Hurricane\+::\+Hook@{Hurricane\+::\+Hook}!get\+Previous\+Hook@{get\+Previous\+Hook}} \index{get\+Previous\+Hook@{get\+Previous\+Hook}!Hurricane\+::\+Hook@{Hurricane\+::\+Hook}} @@ -110,9 +110,9 @@ construction its next one (which may be itself is the ring is empty). {\bfseries Returns\+:} the previous hook within the ring. -\begin{DoxyParagraph}{Remark\+: Less efficient than get\+Next\+Hook because it requires a } -complete ring loop. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +Less efficient than get\+Next\+Hook because it requires a complete ring loop. +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1Hook_af18e0531df4ed14b64cf058b780aee46}\label{classHurricane_1_1Hook_af18e0531df4ed14b64cf058b780aee46}} \index{Hurricane\+::\+Hook@{Hurricane\+::\+Hook}!get\+Master\+Hook@{get\+Master\+Hook}} \index{get\+Master\+Hook@{get\+Master\+Hook}!Hurricane\+::\+Hook@{Hurricane\+::\+Hook}} @@ -121,9 +121,9 @@ complete ring loop. {\bfseries Returns\+:} the master of the relation master-\/slaves identified by the hook. -\begin{DoxyParagraph}{Remark\+: May return itself if the hook is a master and return N\+U\+LL if } -the hook is a slave and has no associated master. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +May return itself if the hook is a master and return N\+U\+LL if the hook is a slave and has no associated master. +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1Hook_a0923a5a2d0a7ee0458876eed72008e46}\label{classHurricane_1_1Hook_a0923a5a2d0a7ee0458876eed72008e46}} \index{Hurricane\+::\+Hook@{Hurricane\+::\+Hook}!get\+Next\+Master\+Hook@{get\+Next\+Master\+Hook}} \index{get\+Next\+Master\+Hook@{get\+Next\+Master\+Hook}!Hurricane\+::\+Hook@{Hurricane\+::\+Hook}} @@ -132,9 +132,9 @@ the hook is a slave and has no associated master. {\bfseries Returns\+:} the first master found when starting the search immediately after the given hook. -\begin{DoxyParagraph}{Remark\+: May return N\+U\+LL if there is no master within the ring or } -return the hook itself if it is a master and the only one in the ring. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +May return N\+U\+LL if there is no master within the ring or return the hook itself if it is a master and the only one in the ring. +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1Hook_a80bf5cdd4e81952064f1be94fe10188f}\label{classHurricane_1_1Hook_a80bf5cdd4e81952064f1be94fe10188f}} \index{Hurricane\+::\+Hook@{Hurricane\+::\+Hook}!get\+Previous\+Master\+Hook@{get\+Previous\+Master\+Hook}} \index{get\+Previous\+Master\+Hook@{get\+Previous\+Master\+Hook}!Hurricane\+::\+Hook@{Hurricane\+::\+Hook}} @@ -143,12 +143,11 @@ return the hook itself if it is a master and the only one in the ring. {\bfseries Returns\+:} the first master found when starting a backwards search immediately before the given hook. -\begin{DoxyParagraph}{Remark\+: May return N\+U\+LL if there is no master within the ring or } -return the hook itself if it is a master and the only one in the ring. -\end{DoxyParagraph} -\begin{DoxyParagraph}{Remark\+: Of course the search is done in the natural forward direction } -(else it would be trully inefficient). -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +May return N\+U\+LL if there is no master within the ring or return the hook itself if it is a master and the only one in the ring. + +Of course the search is done in the natural forward direction (else it would be trully inefficient). +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1Hook_a2def96fbcd444bebc16e589357c2a779}\label{classHurricane_1_1Hook_a2def96fbcd444bebc16e589357c2a779}} \index{Hurricane\+::\+Hook@{Hurricane\+::\+Hook}!get\+Hooks@{get\+Hooks}} \index{get\+Hooks@{get\+Hooks}!Hurricane\+::\+Hook@{Hurricane\+::\+Hook}} @@ -181,9 +180,9 @@ The master is not included in this collection. \mbox{\Hypertarget{classHurricane {\bfseries Returns\+:} {\bfseries true} if the hook must be considered as a master, else {\bfseries false}. -\begin{DoxyParagraph}{Remark\+: For any new kind of hook this predicate must be overloaded. } - -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +For any new kind of hook this predicate must be overloaded. +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1Hook_acd62c7de2c023a1013d5a728159d068d}\label{classHurricane_1_1Hook_acd62c7de2c023a1013d5a728159d068d}} \index{Hurricane\+::\+Hook@{Hurricane\+::\+Hook}!is\+Attached@{is\+Attached}} \index{is\+Attached@{is\+Attached}!Hurricane\+::\+Hook@{Hurricane\+::\+Hook}} @@ -194,9 +193,9 @@ If the hook is a slave \+: {\bfseries Returns\+:} {\bfseries true} if the hook has an associated master, else {\bfseries false}. -\begin{DoxyParagraph}{Remark\+: You can\textquotesingle{}t find two slaves in the same ring without at least a } -master. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +You can\textquotesingle{}t find two slaves in the same ring without at least a master. +\end{DoxyRemark} If the hook is a master \+: Let us consider the hyper-\/ring made upon hyper-\/hooks. Then the function returns {\bfseries true} if the ring contains at least an other master else {\bfseries false}. @@ -214,9 +213,9 @@ If the hook is a slave \+: detaches the hook from its ring and returns its old predecessor. -\begin{DoxyParagraph}{Remark\+: Will return N\+U\+LL if the hook is the only one in the ring. } - -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +Will return N\+U\+LL if the hook is the only one in the ring. +\end{DoxyRemark} If the hook is a master \+: Let us consider the hyper-\/ring made upon hyper-\/hooks. Then, the function detaches the hyper-\/hook (the sub-\/ring made up of the master and its slaves, if any) from the hyper-\/ring and returns the old predecessor of the hyper-\/hook. @@ -257,9 +256,9 @@ attached within a ring including an other master or if {\ttfamily $<$master\+Hoo merges the rings represented by the two hooks which both must be masters, returns {\ttfamily $<$master\+Hook$>$}. -\begin{DoxyParagraph}{Remark\+: Throws an exception if both hooks are not masters. } - -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +Throws an exception if both hooks are not masters. +\end{DoxyRemark} This function doesn\textquotesingle{}t change the two relatioships master-\/slaves but modifies the connection request between corresponding hyper-\/hooks. The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize} diff --git a/hurricane/doc/hurricane/latex/classHurricane_1_1Horizontal.tex b/hurricane/doc/hurricane/latex/classHurricane_1_1Horizontal.tex index cfb26c48..5928088d 100644 --- a/hurricane/doc/hurricane/latex/classHurricane_1_1Horizontal.tex +++ b/hurricane/doc/hurricane/latex/classHurricane_1_1Horizontal.tex @@ -82,9 +82,9 @@ No description. \mbox{\Hypertarget{classHurricane_1_1Horizontal_a7fdafaa2a7e9314 {\bfseries Returns\+:} the relative source abscissa of the segment (may be absolute if the source extremity isn\textquotesingle{}t anchored). -\begin{DoxyParagraph}{Remark\+: If you want to get the absolute one use the member function } -get\+Source\+Y() defined at the \mbox{\hyperlink{classHurricane_1_1Segment}{Segment}} level. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +If you want to get the absolute one use the member function get\+Source\+Y() defined at the \mbox{\hyperlink{classHurricane_1_1Segment}{Segment}} level. +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1Horizontal_aab807785755e4229f215aee3f3b16941}\label{classHurricane_1_1Horizontal_aab807785755e4229f215aee3f3b16941}} \index{Hurricane\+::\+Horizontal@{Hurricane\+::\+Horizontal}!get\+Dx\+Target@{get\+Dx\+Target}} \index{get\+Dx\+Target@{get\+Dx\+Target}!Hurricane\+::\+Horizontal@{Hurricane\+::\+Horizontal}} @@ -93,9 +93,9 @@ get\+Source\+Y() defined at the \mbox{\hyperlink{classHurricane_1_1Segment}{Segm {\bfseries Returns\+:} the relative target abscissa of the segment (may be absolute if the target extremity isn\textquotesingle{}t anchored). -\begin{DoxyParagraph}{Remark\+: If you want to get the absolute one use the member function } -get\+Target\+Y() defined at the \mbox{\hyperlink{classHurricane_1_1Segment}{Segment}} level. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +If you want to get the absolute one use the member function get\+Target\+Y() defined at the \mbox{\hyperlink{classHurricane_1_1Segment}{Segment}} level. +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1Horizontal_a794aa68157beb2d04816a5f4e9160187}\label{classHurricane_1_1Horizontal_a794aa68157beb2d04816a5f4e9160187}} \index{Hurricane\+::\+Horizontal@{Hurricane\+::\+Horizontal}!setY@{setY}} \index{setY@{setY}!Hurricane\+::\+Horizontal@{Hurricane\+::\+Horizontal}} diff --git a/hurricane/doc/hurricane/latex/classHurricane_1_1HyperNet.tex b/hurricane/doc/hurricane/latex/classHurricane_1_1HyperNet.tex index 5c940997..3cdf871b 100644 --- a/hurricane/doc/hurricane/latex/classHurricane_1_1HyperNet.tex +++ b/hurricane/doc/hurricane/latex/classHurricane_1_1HyperNet.tex @@ -28,9 +28,9 @@ The \mbox{\hyperlink{classHurricane_1_1HyperNet}{Hyper\+Net}} is a part of the t In all the walkthrough, if {\ttfamily do\+Extraction} is set, a simple layout extraction is performed. Of course, it makes the walkthrough much slower. By default it\textquotesingle{}s disabled and the \mbox{\hyperlink{classHurricane_1_1Net}{Net}} occurrence tree is created only from the \mbox{\hyperlink{classHurricane_1_1Plug}{Plug}} information. -\begin{DoxyParagraph}{Remark\+: The {\ttfamily allow\+Interuption} is deprecated and do nothing.} - -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +The {\ttfamily allow\+Interuption} is deprecated and do nothing. +\end{DoxyRemark} \subsection{Constructor \& Destructor Documentation} diff --git a/hurricane/doc/hurricane/latex/classHurricane_1_1Instance.tex b/hurricane/doc/hurricane/latex/classHurricane_1_1Instance.tex index 7ba09c90..ac73c174 100644 --- a/hurricane/doc/hurricane/latex/classHurricane_1_1Instance.tex +++ b/hurricane/doc/hurricane/latex/classHurricane_1_1Instance.tex @@ -111,9 +111,9 @@ Create and return a pointer to a new instance of name {\ttfamily $<$name$>$} bel \begin{DoxyParagraph}{Caution\+: Throws an exception if the cell {\ttfamily $<$cell$>$} is null, if the } {\ttfamily $<$master\+Cell$>$} is null, if an instance of same name already exists or if a cyclic assembly is detected. \end{DoxyParagraph} -\begin{DoxyParagraph}{Remark\+: If the {\ttfamily $<$secure\+Flag$>$} is set to {\bfseries false} the verification of } -the lack of cyclic assembly is skipped (you save some cpu time, but at your own risks). -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +If the {\ttfamily $<$secure\+Flag$>$} is set to {\bfseries false} the verification of the lack of cyclic assembly is skipped (you save some cpu time, but at your own risks). +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1Instance_aa48280b4d7127d283c89983cf7a42c23}\label{classHurricane_1_1Instance_aa48280b4d7127d283c89983cf7a42c23}} \index{Hurricane\+::\+Instance@{Hurricane\+::\+Instance}!get\+Name@{get\+Name}} \index{get\+Name@{get\+Name}!Hurricane\+::\+Instance@{Hurricane\+::\+Instance}} @@ -194,9 +194,9 @@ consistent with the instance (that is if the owner cell of the tail path is not Allows to change the instance name. -\begin{DoxyParagraph}{Remark\+: Throws an exception if the name is empty or if an instance } -with the same name exists in the owner cell. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +Throws an exception if the name is empty or if an instance with the same name exists in the owner cell. +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1Instance_a8890d2e1b2ba2542997454297e63512f}\label{classHurricane_1_1Instance_a8890d2e1b2ba2542997454297e63512f}} \index{Hurricane\+::\+Instance@{Hurricane\+::\+Instance}!set\+Transformation@{set\+Transformation}} \index{set\+Transformation@{set\+Transformation}!Hurricane\+::\+Instance@{Hurricane\+::\+Instance}} @@ -214,9 +214,9 @@ Allows to change the cell referenced by this instance. \begin{DoxyParagraph}{Caution\+: Throws an exception if either the cell is null, a cyclic } assembly is detected or the substitution can\textquotesingle{}t succeed. \end{DoxyParagraph} -\begin{DoxyParagraph}{Remark\+: If the {\ttfamily $<$secure\+Flag$>$} is set to {\bfseries false} the verification of } -the lack of cyclic assembly is skipped (you save some cpu time, but at your own risks). -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +If the {\ttfamily $<$secure\+Flag$>$} is set to {\bfseries false} the verification of the lack of cyclic assembly is skipped (you save some cpu time, but at your own risks). +\end{DoxyRemark} \begin{DoxyParagraph}{Important\+: In order to succeed with the substitution, it is necessary } that for each connected plug, refering an external net of the old master cell, a net of same name can be found in the new master cell. \end{DoxyParagraph} diff --git a/hurricane/doc/hurricane/latex/classHurricane_1_1Interval.tex b/hurricane/doc/hurricane/latex/classHurricane_1_1Interval.tex index a8319797..acfe9417 100644 --- a/hurricane/doc/hurricane/latex/classHurricane_1_1Interval.tex +++ b/hurricane/doc/hurricane/latex/classHurricane_1_1Interval.tex @@ -113,9 +113,9 @@ Assignment operator. \mbox{\Hypertarget{classHurricane_1_1Interval_a1b022ac0ad97 Equality operator. -\begin{DoxyParagraph}{Remark\+: Two empty intervals are always different. } - -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +Two empty intervals are always different. +\end{DoxyRemark} \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}} diff --git a/hurricane/doc/hurricane/latex/classHurricane_1_1Layer.tex b/hurricane/doc/hurricane/latex/classHurricane_1_1Layer.tex index 18bdea5e..647e7c11 100644 --- a/hurricane/doc/hurricane/latex/classHurricane_1_1Layer.tex +++ b/hurricane/doc/hurricane/latex/classHurricane_1_1Layer.tex @@ -177,9 +177,9 @@ Two differents basic layers have different masks but may have same extraction ma {\bfseries Returns\+:} the collection of basic layers within this layer. -\begin{DoxyParagraph}{Remark\+: For a basic layer the collection contains this one only. } - -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +For a basic layer the collection contains this one only. +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1Layer_a5f7c43a29f3dd02a9ebccbcbf91d6727}\label{classHurricane_1_1Layer_a5f7c43a29f3dd02a9ebccbcbf91d6727}} \index{Hurricane\+::\+Layer@{Hurricane\+::\+Layer}!get\+Top@{get\+Top}} \index{get\+Top@{get\+Top}!Hurricane\+::\+Layer@{Hurricane\+::\+Layer}} @@ -188,9 +188,9 @@ Two differents basic layers have different masks but may have same extraction ma {\bfseries Returns\+:} The uppermost layer of that layer. On \mbox{\hyperlink{classHurricane_1_1BasicLayer}{Basic\+Layer}}, it is always the layer itself. In symbolic layers the meaning depends on the object structure. -\begin{DoxyParagraph}{Remark\+: In symbolic layers, top \& bottom are not related to the Layer\+:\+:Mask} -but to the {\itshape structuration} of the layer. It is advisable that the designer create layers and symbolic layers in way that ensure the top layer is indeed the one with the greater mask. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +In symbolic layers, top \& bottom are not related to the \mbox{\hyperlink{classHurricane_1_1Layer_af5277c670637bd5d910237e7afe01a91}{Layer\+::\+Mask}} but to the {\itshape structuration} of the layer. It is advisable that the designer create layers and symbolic layers in way that ensure the top layer is indeed the one with the greater mask. +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1Layer_a4dab4552a219d2d900ed0b1245dc6580}\label{classHurricane_1_1Layer_a4dab4552a219d2d900ed0b1245dc6580}} \index{Hurricane\+::\+Layer@{Hurricane\+::\+Layer}!get\+Bottom@{get\+Bottom}} \index{get\+Bottom@{get\+Bottom}!Hurricane\+::\+Layer@{Hurricane\+::\+Layer}} @@ -267,9 +267,9 @@ References get\+Mask(). sets or changes the layer name. -\begin{DoxyParagraph}{Remark\+: An exception is thrown if the name is empty or if there is an } -other layer with that name. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +An exception is thrown if the name is empty or if there is an other layer with that name. +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1Layer_a400d17fe999c0080bb50489948986fe7}\label{classHurricane_1_1Layer_a400d17fe999c0080bb50489948986fe7}} \index{Hurricane\+::\+Layer@{Hurricane\+::\+Layer}!set\+Minimal\+Size@{set\+Minimal\+Size}} \index{set\+Minimal\+Size@{set\+Minimal\+Size}!Hurricane\+::\+Layer@{Hurricane\+::\+Layer}} diff --git a/hurricane/doc/hurricane/latex/classHurricane_1_1Library.tex b/hurricane/doc/hurricane/latex/classHurricane_1_1Library.tex index 54b1b14c..f6574d2c 100644 --- a/hurricane/doc/hurricane/latex/classHurricane_1_1Library.tex +++ b/hurricane/doc/hurricane/latex/classHurricane_1_1Library.tex @@ -137,9 +137,9 @@ empty or if a sub library with same name already exists in the library. Allows to change the library name. -\begin{DoxyParagraph}{Remark\+: Throws an exception if the new name is empty or if the } -library owning the library (if any) has already a sub library with the same name. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +Throws an exception if the new name is empty or if the library owning the library (if any) has already a sub library with the same name. +\end{DoxyRemark} The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize} diff --git a/hurricane/doc/hurricane/latex/classHurricane_1_1Locator.tex b/hurricane/doc/hurricane/latex/classHurricane_1_1Locator.tex index 91a1a3a4..a206c5db 100644 --- a/hurricane/doc/hurricane/latex/classHurricane_1_1Locator.tex +++ b/hurricane/doc/hurricane/latex/classHurricane_1_1Locator.tex @@ -88,9 +88,9 @@ Cell* cell = ...; \textcolor{comment}{// we get a cell} \textcolor{keyword}{delete} locator1; \} \end{DoxyCode} - \begin{DoxyParagraph}{Remark\+: Those examples are given in order to explain how locators } -work. We will see in the following how to do that more simply by using generic locators, or even simpler by using the for\+Each macros. -\end{DoxyParagraph} + \begin{DoxyRemark}{Remarks} +Those examples are given in order to explain how locators work. We will see in the following how to do that more simply by using generic locators, or even simpler by using the for\+Each macros. +\end{DoxyRemark} \subsection{Member Function Documentation} @@ -110,9 +110,9 @@ Type \mbox{\hyperlink{classHurricane_1_1Locator}{Hurricane\+::\+Locator}}$<$ Typ This function allocates and returns a new locator that will have the same visiting course than the remaining one of the locator being cloned. -\begin{DoxyParagraph}{Remark\+: In principle there is no need to call this function, but if } -you do so you must not forget to release the clone after its use or, from it, build a generic locator which will do that for you (to be explained later). -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +In principle there is no need to call this function, but if you do so you must not forget to release the clone after its use or, from it, build a generic locator which will do that for you (to be explained later). +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1Locator_abb6e5255372e22e31bf0a8e4cae93f87}\label{classHurricane_1_1Locator_abb6e5255372e22e31bf0a8e4cae93f87}} \index{Hurricane\+::\+Locator@{Hurricane\+::\+Locator}!is\+Valid@{is\+Valid}} \index{is\+Valid@{is\+Valid}!Hurricane\+::\+Locator@{Hurricane\+::\+Locator}} diff --git a/hurricane/doc/hurricane/latex/classHurricane_1_1Name.tex b/hurricane/doc/hurricane/latex/classHurricane_1_1Name.tex index f99f79a4..0f19dacd 100644 --- a/hurricane/doc/hurricane/latex/classHurricane_1_1Name.tex +++ b/hurricane/doc/hurricane/latex/classHurricane_1_1Name.tex @@ -94,8 +94,8 @@ Assignment operator. Very fast because there is only an assignement of pointer t Equality operator. Very fast because it only tests the equality of pointers to the two shared strings (and not the equality of the two strings). -\begin{DoxyParagraph}{Remark\+: Don\textquotesingle{}t loose on one side what you save on the other as shown } -in the following code \+: +\begin{DoxyRemark}{Remarks} +Don\textquotesingle{}t loose on one side what you save on the other as shown in the following code \+: \begin{DoxyCode} Cell* cell = ...; \textcolor{comment}{// we get the cell} @@ -131,7 +131,7 @@ for\_each\_net(net, cellGetNets()) \{ \} \end{DoxyCode} -\end{DoxyParagraph} +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1Name_aff97f0bcf698ad76f6f3c9a4c4833cc3}\label{classHurricane_1_1Name_aff97f0bcf698ad76f6f3c9a4c4833cc3}} \index{Hurricane\+::\+Name@{Hurricane\+::\+Name}!operator"!=@{operator"!=}} \index{operator"!=@{operator"!=}!Hurricane\+::\+Name@{Hurricane\+::\+Name}} diff --git a/hurricane/doc/hurricane/latex/classHurricane_1_1Net.tex b/hurricane/doc/hurricane/latex/classHurricane_1_1Net.tex index cb9fdfc0..4431f46c 100644 --- a/hurricane/doc/hurricane/latex/classHurricane_1_1Net.tex +++ b/hurricane/doc/hurricane/latex/classHurricane_1_1Net.tex @@ -184,9 +184,9 @@ if a net with same name already exists. {\bfseries Returns\+:} the signal direction (by default set to U\+N\+D\+E\+F\+I\+N\+ED). -\begin{DoxyParagraph}{Remark\+: This direction is meaningfull only for external nets. } - -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +This direction is meaningfull only for external nets. +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1Net_abcfdec9c953d228845fdb9d75e8173cc}\label{classHurricane_1_1Net_abcfdec9c953d228845fdb9d75e8173cc}} \index{Hurricane\+::\+Net@{Hurricane\+::\+Net}!get\+Position@{get\+Position}} \index{get\+Position@{get\+Position}!Hurricane\+::\+Net@{Hurricane\+::\+Net}} @@ -267,9 +267,9 @@ if a net with same name already exists. {\bfseries Returns\+:} the collection of plugs which have this net as master. -\begin{DoxyParagraph}{Remark\+: Meaningfull only for external nets. } - -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +Meaningfull only for external nets. +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1Net_a08560ffa6b0f5ecc442bf232486dd8ff}\label{classHurricane_1_1Net_a08560ffa6b0f5ecc442bf232486dd8ff}} \index{Hurricane\+::\+Net@{Hurricane\+::\+Net}!get\+Connected\+Slave\+Plugs@{get\+Connected\+Slave\+Plugs}} \index{get\+Connected\+Slave\+Plugs@{get\+Connected\+Slave\+Plugs}!Hurricane\+::\+Net@{Hurricane\+::\+Net}} @@ -278,9 +278,9 @@ if a net with same name already exists. {\bfseries Returns\+:} the collection of connected plugs which have this net as master. -\begin{DoxyParagraph}{Remark\+: Meaningfull only for external nets. } - -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +Meaningfull only for external nets. +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1Net_aad3f3ea88bdea914cab3f38bdcdb843d}\label{classHurricane_1_1Net_aad3f3ea88bdea914cab3f38bdcdb843d}} \index{Hurricane\+::\+Net@{Hurricane\+::\+Net}!get\+Unconnected\+Slave\+Plugs@{get\+Unconnected\+Slave\+Plugs}} \index{get\+Unconnected\+Slave\+Plugs@{get\+Unconnected\+Slave\+Plugs}!Hurricane\+::\+Net@{Hurricane\+::\+Net}} @@ -289,9 +289,9 @@ if a net with same name already exists. {\bfseries Returns\+:} the collection of unconnected plugs which have this net as master. -\begin{DoxyParagraph}{Remark\+: Meaningfull only for external nets. } - -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +Meaningfull only for external nets. +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1Net_a1730ed1247cd9bce7fcf519ea60dc738}\label{classHurricane_1_1Net_a1730ed1247cd9bce7fcf519ea60dc738}} \index{Hurricane\+::\+Net@{Hurricane\+::\+Net}!get\+Is\+Global\+Filter@{get\+Is\+Global\+Filter}} \index{get\+Is\+Global\+Filter@{get\+Is\+Global\+Filter}!Hurricane\+::\+Net@{Hurricane\+::\+Net}} @@ -368,9 +368,9 @@ References Hurricane\+::\+Net\+::\+Type\+::\+C\+L\+O\+CK. Allows to change net name. -\begin{DoxyParagraph}{Remark\+: Throws an exception if the new name is empty, or if a net } -with same net already exists in the cell. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +Throws an exception if the new name is empty, or if a net with same net already exists in the cell. +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1Net_af5dfdca4401902ee7e1e46a1a486da38}\label{classHurricane_1_1Net_af5dfdca4401902ee7e1e46a1a486da38}} \index{Hurricane\+::\+Net@{Hurricane\+::\+Net}!set\+Arity@{set\+Arity}} \index{set\+Arity@{set\+Arity}!Hurricane\+::\+Net@{Hurricane\+::\+Net}} @@ -391,9 +391,9 @@ Sets global signal status to {\ttfamily $<$state$>$}. \mbox{\Hypertarget{classHu Sets the external net status to {\ttfamily $<$state$>$}. -\begin{DoxyParagraph}{Remark\+: This function will throw an exception if the net switches to } -internal and there is a plug refering to it. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +This function will throw an exception if the net switches to internal and there is a plug refering to it. +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1Net_a83f5ce12291b0ec5ab584d515dd8963c}\label{classHurricane_1_1Net_a83f5ce12291b0ec5ab584d515dd8963c}} \index{Hurricane\+::\+Net@{Hurricane\+::\+Net}!set\+Type@{set\+Type}} \index{set\+Type@{set\+Type}!Hurricane\+::\+Net@{Hurricane\+::\+Net}} @@ -435,12 +435,11 @@ Merges the net {\ttfamily $<$net$>$} to the net {\ttfamily $<$this$>$} which kee \begin{DoxyParagraph}{Caution\+: An exception is thrown if the {\ttfamily $<$net$>$} is null or equal to } {\ttfamily $<$this$>$}, if the two nets don\textquotesingle{}t belong to the same cell or if {\ttfamily $<$net$>$} is external and master net of a connected plug while net {\ttfamily $<$this$>$} is not external. \end{DoxyParagraph} -\begin{DoxyParagraph}{Remark\+: All the rubbers and the components of the {\ttfamily $<$net$>$} (and } -also the plugs) become rubbers or components of the net {\ttfamily $<$this$>$}. Nevertheless if for a particular slave instance there was both a plug referencing the {\ttfamily $<$net$>$} and an other plug referencing {\ttfamily $<$this$>$}, the first is deleted to the advantage of the second, because a net can\textquotesingle{}t have more than one plug for a given instance (the rings of the body hooks are then merged). -\end{DoxyParagraph} -\begin{DoxyParagraph}{Remark\+: Once the merger done the net {\ttfamily $<$net$>$} is definitively } -deleted. Its properties and those of its deleted plugs, if any, are lost (as well as the ones which could be attached to their occurences). -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +All the rubbers and the components of the {\ttfamily $<$net$>$} (and also the plugs) become rubbers or components of the net {\ttfamily $<$this$>$}. Nevertheless if for a particular slave instance there was both a plug referencing the {\ttfamily $<$net$>$} and an other plug referencing {\ttfamily $<$this$>$}, the first is deleted to the advantage of the second, because a net can\textquotesingle{}t have more than one plug for a given instance (the rings of the body hooks are then merged). + +Once the merger done the net {\ttfamily $<$net$>$} is definitively deleted. Its properties and those of its deleted plugs, if any, are lost (as well as the ones which could be attached to their occurences). +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1Net_a4bd27e6ae22606463491c28437c4068f}\label{classHurricane_1_1Net_a4bd27e6ae22606463491c28437c4068f}} \index{Hurricane\+::\+Net@{Hurricane\+::\+Net}!get\+Clone@{get\+Clone}} \index{get\+Clone@{get\+Clone}!Hurricane\+::\+Net@{Hurricane\+::\+Net}} @@ -449,9 +448,9 @@ deleted. Its properties and those of its deleted plugs, if any, are lost (as wel Build a duplicate of net ({\ttfamily } $<$this$>$) inside a cloned \mbox{\hyperlink{classHurricane_1_1Cell}{Cell}} {\ttfamily } $<$clone\+Cell$>$. The connectivity (\mbox{\hyperlink{classHurricane_1_1Plug}{Plug}}) or components of the original net are {\bfseries not} copied. -\begin{DoxyParagraph}{Remark\+: It is likely that {\ttfamily } is a copy of this net\textquotesingle{}s onwer Cell,} -but it is not mandatory. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +It is likely that {\ttfamily } $<$clone\+Cell$>$ is a copy of this net\textquotesingle{}s onwer \mbox{\hyperlink{classHurricane_1_1Cell}{Cell}}, but it is not mandatory. +\end{DoxyRemark} The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize} diff --git a/hurricane/doc/hurricane/latex/classHurricane_1_1NotFilter.tex b/hurricane/doc/hurricane/latex/classHurricane_1_1NotFilter.tex index d0806064..305c4522 100644 --- a/hurricane/doc/hurricane/latex/classHurricane_1_1NotFilter.tex +++ b/hurricane/doc/hurricane/latex/classHurricane_1_1NotFilter.tex @@ -31,9 +31,9 @@ class Hurricane\+::\+Not\+Filter$<$ Type $>$} This filter invert the matching criterion of any other filter. -\begin{DoxyParagraph}{Remark\+: This is a raw Filter.} - -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +This is a raw \mbox{\hyperlink{classHurricane_1_1Filter}{Filter}}. +\end{DoxyRemark} \subsection{Constructor \& Destructor Documentation} @@ -46,9 +46,9 @@ This filter invert the matching criterion of any other filter. Constructor from a raw \mbox{\hyperlink{classHurricane_1_1Filter}{Filter}}. -\begin{DoxyParagraph}{Remark\+: This constructor build a {\itshape copy} of the raw filter. So the originating} -filter can be safely deleted. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +This constructor build a {\itshape copy} of the raw filter. So the originating filter can be safely deleted. +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1NotFilter_a232102dc584111a704e66b2ac793af86}\label{classHurricane_1_1NotFilter_a232102dc584111a704e66b2ac793af86}} \index{Hurricane\+::\+Not\+Filter@{Hurricane\+::\+Not\+Filter}!Not\+Filter@{Not\+Filter}} \index{Not\+Filter@{Not\+Filter}!Hurricane\+::\+Not\+Filter@{Hurricane\+::\+Not\+Filter}} @@ -58,9 +58,9 @@ filter can be safely deleted. Copy constructor. -\begin{DoxyParagraph}{Remark\+: This constructor build a {\itshape copy} of the raw filter. So the originating} -filter can be safely deleted. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +This constructor build a {\itshape copy} of the raw filter. So the originating filter can be safely deleted. +\end{DoxyRemark} The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize} diff --git a/hurricane/doc/hurricane/latex/classHurricane_1_1Occurrence.tex b/hurricane/doc/hurricane/latex/classHurricane_1_1Occurrence.tex index 9db8cd34..cf342597 100644 --- a/hurricane/doc/hurricane/latex/classHurricane_1_1Occurrence.tex +++ b/hurricane/doc/hurricane/latex/classHurricane_1_1Occurrence.tex @@ -79,9 +79,9 @@ All constructors, the destructor and the different operators are very efficient. Builds an occurrence refering to an entity through a void path, in some way it is equivalent to the entity itself. -\begin{DoxyParagraph}{Remark\+: If the entity is null the occurrence is invalid. } - -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +If the entity is null the occurrence is invalid. +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1Occurrence_afedb5d75781a9a4f0a19d37f0e8c88a8}\label{classHurricane_1_1Occurrence_afedb5d75781a9a4f0a19d37f0e8c88a8}} \index{Hurricane\+::\+Occurrence@{Hurricane\+::\+Occurrence}!Occurrence@{Occurrence}} \index{Occurrence@{Occurrence}!Hurricane\+::\+Occurrence@{Hurricane\+::\+Occurrence}} @@ -93,9 +93,9 @@ Builds an occurrence refering to an entity through a path (possibly void). \begin{DoxyParagraph}{Caution\+: If the entity is null or if the path is uncompatible with the } entity, an exception is thrown. \end{DoxyParagraph} -\begin{DoxyParagraph}{Remark\+: The entity and the path are compatible if the path is void or } -if the master cell of the path is the cell owning the entity. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +The entity and the path are compatible if the path is void or if the master cell of the path is the cell owning the entity. +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1Occurrence_affec5f25b9c2efa2bcde02e9c4833626}\label{classHurricane_1_1Occurrence_affec5f25b9c2efa2bcde02e9c4833626}} \index{Hurricane\+::\+Occurrence@{Hurricane\+::\+Occurrence}!Occurrence@{Occurrence}} \index{Occurrence@{Occurrence}!Hurricane\+::\+Occurrence@{Hurricane\+::\+Occurrence}} @@ -209,9 +209,9 @@ exception is thrown. removes the property {\ttfamily $<$property$>$} from the occurrence property set. -\begin{DoxyParagraph}{Remark\+: Does nothing if the occurrence doesn\textquotesingle{}t own this property } -object. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +Does nothing if the occurrence doesn\textquotesingle{}t own this property object. +\end{DoxyRemark} \begin{DoxyParagraph}{Caution\+: If the occurrence is invalid or the property null, an } exception is thrown. \end{DoxyParagraph} diff --git a/hurricane/doc/hurricane/latex/classHurricane_1_1Path.tex b/hurricane/doc/hurricane/latex/classHurricane_1_1Path.tex index c49cf297..9694379c 100644 --- a/hurricane/doc/hurricane/latex/classHurricane_1_1Path.tex +++ b/hurricane/doc/hurricane/latex/classHurricane_1_1Path.tex @@ -79,9 +79,9 @@ The different constructors (appart the one which analyses the names of the path) Default constructor \+: the path is then void. -\begin{DoxyParagraph}{Remark\+: This path has no instance and will be the tail terminal path } -of any other path. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +This path has no instance and will be the tail terminal path of any other path. +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1Path_aa1a70f922b9b6a78fd3ac9b7bd94d158}\label{classHurricane_1_1Path_aa1a70f922b9b6a78fd3ac9b7bd94d158}} \index{Hurricane\+::\+Path@{Hurricane\+::\+Path}!Path@{Path}} \index{Path@{Path}!Hurricane\+::\+Path@{Hurricane\+::\+Path}} @@ -104,9 +104,9 @@ Builds the path with head instance {\ttfamily $<$head\+Instance$>$} and tail pat \begin{DoxyParagraph}{Caution\+: If the instance is null, or if the tail path is not } compatible with this head instance, an exception is thrown. \end{DoxyParagraph} -\begin{DoxyParagraph}{Remark\+: The head instance and the tail path are compatible if the } -tail path is void or if the owner cell of the tail path is the model cell referenced by the head instance. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +The head instance and the tail path are compatible if the tail path is void or if the owner cell of the tail path is the model cell referenced by the head instance. +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1Path_add5812ab3bb9a4cf6dbe49d1e4e932cb}\label{classHurricane_1_1Path_add5812ab3bb9a4cf6dbe49d1e4e932cb}} \index{Hurricane\+::\+Path@{Hurricane\+::\+Path}!Path@{Path}} \index{Path@{Path}!Hurricane\+::\+Path@{Hurricane\+::\+Path}} @@ -118,9 +118,9 @@ Builds the path with head path {\ttfamily $<$head\+Path$>$} and tail instance {\ \begin{DoxyParagraph}{Caution\+: If the tail instance is null, or if the head path is not } compatible with this tail instance, an exception is thrown. \end{DoxyParagraph} -\begin{DoxyParagraph}{Remark\+: The tail instance and the head path are compatible if the } -owner cell of the tail instance is the master cell of the head path (which is recall it, the model cell referenced by the last instance of the head path) or if the head path is empty (then compatible with any non null instance). -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +The tail instance and the head path are compatible if the owner cell of the tail instance is the master cell of the head path (which is recall it, the model cell referenced by the last instance of the head path) or if the head path is empty (then compatible with any non null instance). +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1Path_a6e3d331f5c5a0dcb91d10516a4beb6bc}\label{classHurricane_1_1Path_a6e3d331f5c5a0dcb91d10516a4beb6bc}} \index{Hurricane\+::\+Path@{Hurricane\+::\+Path}!Path@{Path}} \index{Path@{Path}!Hurricane\+::\+Path@{Hurricane\+::\+Path}} diff --git a/hurricane/doc/hurricane/latex/classHurricane_1_1PhysicalRule.tex b/hurricane/doc/hurricane/latex/classHurricane_1_1PhysicalRule.tex new file mode 100644 index 00000000..e91184e4 --- /dev/null +++ b/hurricane/doc/hurricane/latex/classHurricane_1_1PhysicalRule.tex @@ -0,0 +1,144 @@ +\hypertarget{classHurricane_1_1PhysicalRule}{}\section{Hurricane\+:\+:Physical\+Rule Class Reference} +\label{classHurricane_1_1PhysicalRule}\index{Hurricane\+::\+Physical\+Rule@{Hurricane\+::\+Physical\+Rule}} + + +Define a rule for the technology ({\bfseries A\+PI}). + + + + +Inherits Rule. + +\subsection*{Public Member Functions} +\begin{DoxyCompactItemize} +\item +bool \mbox{\hyperlink{classHurricane_1_1PhysicalRule_ad419b79177064cab06f7c8dbeccc4dce}{is\+Double}} () const +\item +bool \mbox{\hyperlink{classHurricane_1_1PhysicalRule_af1e9eeb3499bfd66cedf5756e2d7e2a3}{is\+DbU}} () const +\item +bool \mbox{\hyperlink{classHurricane_1_1PhysicalRule_a56f3eed5835ad1c268638f0f813fc029}{is\+Symmetric}} () const +\item +bool \mbox{\hyperlink{classHurricane_1_1PhysicalRule_a8cc9f7f2dfc580e4f91b7f93ce8a26cc}{has\+Steps}} () const +\item +void \mbox{\hyperlink{classHurricane_1_1PhysicalRule_afc1e61c5b2baa1126a2e253e02f40f40}{set\+Symmetric}} (bool) +\item +double \mbox{\hyperlink{classHurricane_1_1PhysicalRule_a89a0cd27aec78836500a5066c276bbf0}{get\+Double\+Value}} () const +\item +\mbox{\hyperlink{group__DbUGroup_ga4fbfa3e8c89347af76c9628ea06c4146}{Db\+U\+::\+Unit}} \mbox{\hyperlink{classHurricane_1_1PhysicalRule_aa3548c58b42cd29cbe07d1a0289416a0}{get\+Value}} (\mbox{\hyperlink{group__DbUGroup_ga4fbfa3e8c89347af76c9628ea06c4146}{Hurricane\+::\+Db\+U\+::\+Unit}} length=0, bool h\+Dir=true) const +\item +void \mbox{\hyperlink{classHurricane_1_1PhysicalRule_ada08351fb24f36a63f4e3a3c524000a2}{add\+Value}} (double) +\item +void \mbox{\hyperlink{classHurricane_1_1PhysicalRule_ac25990fc4aff5e5739ae9632f43d9bf8}{add\+Value}} (\mbox{\hyperlink{group__DbUGroup_ga4fbfa3e8c89347af76c9628ea06c4146}{Hurricane\+::\+Db\+U\+::\+Unit}} value, \mbox{\hyperlink{group__DbUGroup_ga4fbfa3e8c89347af76c9628ea06c4146}{Hurricane\+::\+Db\+U\+::\+Unit}} max\+Length) +\item +void \mbox{\hyperlink{classHurricane_1_1PhysicalRule_a51356a2e3e6cae11c8063b6a092f304d}{add\+Value}} (\mbox{\hyperlink{group__DbUGroup_ga4fbfa3e8c89347af76c9628ea06c4146}{Hurricane\+::\+Db\+U\+::\+Unit}} h\+Value, \mbox{\hyperlink{group__DbUGroup_ga4fbfa3e8c89347af76c9628ea06c4146}{Hurricane\+::\+Db\+U\+::\+Unit}} v\+Value, \mbox{\hyperlink{group__DbUGroup_ga4fbfa3e8c89347af76c9628ea06c4146}{Hurricane\+::\+Db\+U\+::\+Unit}} max\+Length) +\end{DoxyCompactItemize} + + +\subsection{Detailed Description} +Define a rule for the technology ({\bfseries A\+PI}). + +\hypertarget{classHurricane_1_1PhysicalRule_sPhysicalRuleIntro}{}\subsection{Introduction}\label{classHurricane_1_1PhysicalRule_sPhysicalRuleIntro} +The constructor of Physical rule is not directly accessible, as thoses objects must be created only through the \mbox{\hyperlink{classHurricane_1_1Technology}{Technology}} class {\ttfamily A\+PI} (to be stored in the relevant tables). + +\mbox{\hyperlink{classHurricane_1_1PhysicalRule}{Physical\+Rule}} is a {\itshape \char`\"{}one size fit class\char`\"{}}. As there will be only a small number of objects created (compare to other kinds) we choose to implement all variant in one class instead of creating a flock of derived classes and all the assorted paraphernalia. As a consequence, not all fields will be used at the same time, they are mutually exclusive. + +\subsection{Member Function Documentation} +\mbox{\Hypertarget{classHurricane_1_1PhysicalRule_ad419b79177064cab06f7c8dbeccc4dce}\label{classHurricane_1_1PhysicalRule_ad419b79177064cab06f7c8dbeccc4dce}} +\index{Hurricane\+::\+Physical\+Rule@{Hurricane\+::\+Physical\+Rule}!is\+Double@{is\+Double}} +\index{is\+Double@{is\+Double}!Hurricane\+::\+Physical\+Rule@{Hurricane\+::\+Physical\+Rule}} +\subsubsection{\texorpdfstring{is\+Double()}{isDouble()}} +{\footnotesize\ttfamily bool Hurricane\+::\+Physical\+Rule\+::is\+Double (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inline]}} + +Tells if the rule describe non-\/length values (Volts, Ohms, Henry, Celsius, ...). \mbox{\Hypertarget{classHurricane_1_1PhysicalRule_af1e9eeb3499bfd66cedf5756e2d7e2a3}\label{classHurricane_1_1PhysicalRule_af1e9eeb3499bfd66cedf5756e2d7e2a3}} +\index{Hurricane\+::\+Physical\+Rule@{Hurricane\+::\+Physical\+Rule}!is\+DbU@{is\+DbU}} +\index{is\+DbU@{is\+DbU}!Hurricane\+::\+Physical\+Rule@{Hurricane\+::\+Physical\+Rule}} +\subsubsection{\texorpdfstring{is\+Db\+U()}{isDbU()}} +{\footnotesize\ttfamily bool Hurricane\+::\+Physical\+Rule\+::is\+DbU (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inline]}} + +Tells if the rule uses physical lengths, with multiple steps or not. \mbox{\Hypertarget{classHurricane_1_1PhysicalRule_a56f3eed5835ad1c268638f0f813fc029}\label{classHurricane_1_1PhysicalRule_a56f3eed5835ad1c268638f0f813fc029}} +\index{Hurricane\+::\+Physical\+Rule@{Hurricane\+::\+Physical\+Rule}!is\+Symmetric@{is\+Symmetric}} +\index{is\+Symmetric@{is\+Symmetric}!Hurricane\+::\+Physical\+Rule@{Hurricane\+::\+Physical\+Rule}} +\subsubsection{\texorpdfstring{is\+Symmetric()}{isSymmetric()}} +{\footnotesize\ttfamily bool Hurricane\+::\+Physical\+Rule\+::is\+Symmetric (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inline]}} + +Tells if the rule is symmetric. \mbox{\Hypertarget{classHurricane_1_1PhysicalRule_a8cc9f7f2dfc580e4f91b7f93ce8a26cc}\label{classHurricane_1_1PhysicalRule_a8cc9f7f2dfc580e4f91b7f93ce8a26cc}} +\index{Hurricane\+::\+Physical\+Rule@{Hurricane\+::\+Physical\+Rule}!has\+Steps@{has\+Steps}} +\index{has\+Steps@{has\+Steps}!Hurricane\+::\+Physical\+Rule@{Hurricane\+::\+Physical\+Rule}} +\subsubsection{\texorpdfstring{has\+Steps()}{hasSteps()}} +{\footnotesize\ttfamily bool Hurricane\+::\+Physical\+Rule\+::has\+Steps (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inline]}} + +Tells if the rule has more than one step, that is, is not uniform for all length. \mbox{\Hypertarget{classHurricane_1_1PhysicalRule_afc1e61c5b2baa1126a2e253e02f40f40}\label{classHurricane_1_1PhysicalRule_afc1e61c5b2baa1126a2e253e02f40f40}} +\index{Hurricane\+::\+Physical\+Rule@{Hurricane\+::\+Physical\+Rule}!set\+Symmetric@{set\+Symmetric}} +\index{set\+Symmetric@{set\+Symmetric}!Hurricane\+::\+Physical\+Rule@{Hurricane\+::\+Physical\+Rule}} +\subsubsection{\texorpdfstring{set\+Symmetric()}{setSymmetric()}} +{\footnotesize\ttfamily void Hurricane\+::\+Physical\+Rule\+::set\+Symmetric (\begin{DoxyParamCaption}\item[{bool}]{state }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}} + +Set the symmetric state of the rule. This used only for rules bound to two layers. \mbox{\Hypertarget{classHurricane_1_1PhysicalRule_a89a0cd27aec78836500a5066c276bbf0}\label{classHurricane_1_1PhysicalRule_a89a0cd27aec78836500a5066c276bbf0}} +\index{Hurricane\+::\+Physical\+Rule@{Hurricane\+::\+Physical\+Rule}!get\+Double\+Value@{get\+Double\+Value}} +\index{get\+Double\+Value@{get\+Double\+Value}!Hurricane\+::\+Physical\+Rule@{Hurricane\+::\+Physical\+Rule}} +\subsubsection{\texorpdfstring{get\+Double\+Value()}{getDoubleValue()}} +{\footnotesize\ttfamily double Hurricane\+::\+Physical\+Rule\+::get\+Double\+Value (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inline]}} + +\begin{DoxyReturn}{Returns} +The {\ttfamily double} value of the rule. +\end{DoxyReturn} +\mbox{\Hypertarget{classHurricane_1_1PhysicalRule_aa3548c58b42cd29cbe07d1a0289416a0}\label{classHurricane_1_1PhysicalRule_aa3548c58b42cd29cbe07d1a0289416a0}} +\index{Hurricane\+::\+Physical\+Rule@{Hurricane\+::\+Physical\+Rule}!get\+Value@{get\+Value}} +\index{get\+Value@{get\+Value}!Hurricane\+::\+Physical\+Rule@{Hurricane\+::\+Physical\+Rule}} +\subsubsection{\texorpdfstring{get\+Value()}{getValue()}} +{\footnotesize\ttfamily double Hurricane\+::\+Physical\+Rule\+::get\+Value (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{group__DbUGroup_ga4fbfa3e8c89347af76c9628ea06c4146}{Hurricane\+::\+Db\+U\+::\+Unit}}}]{length = {\ttfamily 0}, }\item[{bool}]{h\+Dir = {\ttfamily true} }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inline]}} + + +\begin{DoxyParams}{Parameters} +{\em length} & The length for which we want the rule\textquotesingle{}s value. \\ +\hline +{\em h\+Dir} & In case of non-\/isotropic rule, which dimension do we want. \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +The rule\textquotesingle{}s value for the given length. If no parameter is supplied, then, the X value of the first step is returned. +\end{DoxyReturn} +\mbox{\Hypertarget{classHurricane_1_1PhysicalRule_ada08351fb24f36a63f4e3a3c524000a2}\label{classHurricane_1_1PhysicalRule_ada08351fb24f36a63f4e3a3c524000a2}} +\index{Hurricane\+::\+Physical\+Rule@{Hurricane\+::\+Physical\+Rule}!add\+Value@{add\+Value}} +\index{add\+Value@{add\+Value}!Hurricane\+::\+Physical\+Rule@{Hurricane\+::\+Physical\+Rule}} +\subsubsection{\texorpdfstring{add\+Value()}{addValue()}\hspace{0.1cm}{\footnotesize\ttfamily [1/3]}} +{\footnotesize\ttfamily void Hurricane\+::\+Physical\+Rule\+::add\+Value (\begin{DoxyParamCaption}\item[{double}]{value }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}} + +Set the {\ttfamily double} value of a rule. \mbox{\Hypertarget{classHurricane_1_1PhysicalRule_ac25990fc4aff5e5739ae9632f43d9bf8}\label{classHurricane_1_1PhysicalRule_ac25990fc4aff5e5739ae9632f43d9bf8}} +\index{Hurricane\+::\+Physical\+Rule@{Hurricane\+::\+Physical\+Rule}!add\+Value@{add\+Value}} +\index{add\+Value@{add\+Value}!Hurricane\+::\+Physical\+Rule@{Hurricane\+::\+Physical\+Rule}} +\subsubsection{\texorpdfstring{add\+Value()}{addValue()}\hspace{0.1cm}{\footnotesize\ttfamily [2/3]}} +{\footnotesize\ttfamily void Hurricane\+::\+Physical\+Rule\+::add\+Value (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{group__DbUGroup_ga4fbfa3e8c89347af76c9628ea06c4146}{Hurricane\+::\+Db\+U\+::\+Unit}}}]{value, }\item[{\mbox{\hyperlink{group__DbUGroup_ga4fbfa3e8c89347af76c9628ea06c4146}{Hurricane\+::\+Db\+U\+::\+Unit}}}]{max\+Length }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}} + + +\begin{DoxyParams}{Parameters} +{\em value} & The {\itshape value} of the step to add. \\ +\hline +{\em max\+Length} & The length up to which the rule is valid. passing zero as this argument means always valid.\\ +\hline +\end{DoxyParams} +Adds a new stepping value to the rule. If the rules never change, give a {\ttfamily max\+Length} of zero and only call this function once on the rule. The rule is isotropic in X and Y. + +This function can be called multiple time on a rule, each call will add a new step. Steps are defined and ordered according to {\ttfamily max\+Length}. \mbox{\Hypertarget{classHurricane_1_1PhysicalRule_a51356a2e3e6cae11c8063b6a092f304d}\label{classHurricane_1_1PhysicalRule_a51356a2e3e6cae11c8063b6a092f304d}} +\index{Hurricane\+::\+Physical\+Rule@{Hurricane\+::\+Physical\+Rule}!add\+Value@{add\+Value}} +\index{add\+Value@{add\+Value}!Hurricane\+::\+Physical\+Rule@{Hurricane\+::\+Physical\+Rule}} +\subsubsection{\texorpdfstring{add\+Value()}{addValue()}\hspace{0.1cm}{\footnotesize\ttfamily [3/3]}} +{\footnotesize\ttfamily void Hurricane\+::\+Physical\+Rule\+::add\+Value (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{group__DbUGroup_ga4fbfa3e8c89347af76c9628ea06c4146}{Hurricane\+::\+Db\+U\+::\+Unit}}}]{h\+Value, }\item[{\mbox{\hyperlink{group__DbUGroup_ga4fbfa3e8c89347af76c9628ea06c4146}{Hurricane\+::\+Db\+U\+::\+Unit}}}]{v\+Value, }\item[{\mbox{\hyperlink{group__DbUGroup_ga4fbfa3e8c89347af76c9628ea06c4146}{Hurricane\+::\+Db\+U\+::\+Unit}}}]{max\+Length }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}} + + +\begin{DoxyParams}{Parameters} +{\em hvalue} & The horizontal {\itshape value} of the step to add. \\ +\hline +{\em vvalue} & The vertical {\itshape value} of the step to add. \\ +\hline +{\em max\+Length} & The length up to which the rule is valid. passing zero as this argument means always valid.\\ +\hline +\end{DoxyParams} +Adds a new stepping value to the rule. If the rules never change, give a {\ttfamily max\+Length} of zero and only call this function once on the rule. The rule is {\bfseries not} isotropic, it defines a different value for X and Y. + +This function can be called multiple time on a rule, each call will add a new step. Steps are defined and ordered according to {\ttfamily max\+Length}. + +The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize} +\item +Physical\+Rule.\+h\item +Physical\+Rule.\+dox\end{DoxyCompactItemize} diff --git a/hurricane/doc/hurricane/latex/classHurricane_1_1Plug.tex b/hurricane/doc/hurricane/latex/classHurricane_1_1Plug.tex index 2d7e34f3..08169eb1 100644 --- a/hurricane/doc/hurricane/latex/classHurricane_1_1Plug.tex +++ b/hurricane/doc/hurricane/latex/classHurricane_1_1Plug.tex @@ -51,9 +51,9 @@ A plug is unique, that is, for a given instance there is one and only one plug r \begin{DoxyParagraph}{Caution\+: When created, an instance creates all plugs corresponding to } the external nets of its master cell. So, some plugs may exist without being connected. Plugs are the only components which have this characteristic. \end{DoxyParagraph} -\begin{DoxyParagraph}{Remark\+: Plugs being completely managed by the system, you can\textquotesingle{}t } -define sub-\/types of plugs. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +Plugs being completely managed by the system, you can\textquotesingle{}t define sub-\/types of plugs. +\end{DoxyRemark} \hypertarget{classHurricane_1_1Plug_secPlugConstructors}{}\subsection{Constructors \& Destructors}\label{classHurricane_1_1Plug_secPlugConstructors} Plugs being completely managed by the system, there is no constructor nor destructor provided.\hypertarget{classHurricane_1_1Plug_secPlugPredefinedFilters}{}\subsection{Predefined filters}\label{classHurricane_1_1Plug_secPlugPredefinedFilters} {\bfseries \mbox{\hyperlink{classHurricane_1_1Plug_a51bd5d04a337544709950d7cace05f0d}{Hurricane\+::\+Plug\+::get\+Is\+Connected\+Filter}}} {\bfseries \mbox{\hyperlink{classHurricane_1_1Plug_af27b873ed2420329a63ea67dcc243f07}{Hurricane\+::\+Plug\+::get\+Is\+Unconnected\+Filter}}} @@ -82,9 +82,9 @@ Useful for calling upon methods of the base class without knowing it. {\bfseries Returns\+:} the external net referenced by the plug in the master cell of its instance. -\begin{DoxyParagraph}{Remark\+: Don\textquotesingle{}t mistake with get\+Net() which returns the net owning the } -plug (or N\+U\+LL if is unconnected). -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +Don\textquotesingle{}t mistake with \mbox{\hyperlink{classHurricane_1_1Component_a1556ef77d6b89bfc17698d52ebde9791}{get\+Net()}} which returns the net owning the plug (or N\+U\+LL if is unconnected). +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1Plug_a51bd5d04a337544709950d7cace05f0d}\label{classHurricane_1_1Plug_a51bd5d04a337544709950d7cace05f0d}} \index{Hurricane\+::\+Plug@{Hurricane\+::\+Plug}!get\+Is\+Connected\+Filter@{get\+Is\+Connected\+Filter}} \index{get\+Is\+Connected\+Filter@{get\+Is\+Connected\+Filter}!Hurricane\+::\+Plug@{Hurricane\+::\+Plug}} @@ -105,9 +105,9 @@ plug (or N\+U\+LL if is unconnected). {\bfseries Returns\+:} {\bfseries true} if the plug is connected, else {\bfseries false}. -\begin{DoxyParagraph}{Remark\+: A plug is connected if the call upon get\+Net() doesn\textquotesingle{}t } -return N\+U\+LL. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +A plug is connected if the call upon {\bfseries \mbox{\hyperlink{classHurricane_1_1Component_a1556ef77d6b89bfc17698d52ebde9791}{get\+Net()}}} doesn\textquotesingle{}t return N\+U\+LL. +\end{DoxyRemark} References Hurricane\+::\+Component\+::get\+Net(). @@ -123,9 +123,9 @@ This method allows to connect or change the net of a plug. \begin{DoxyParagraph}{Caution\+: An exception is thrown if the net owner cell differs from the } plug owner cell, or if there are components (contact, segments, ...) currently anchored on the plug. \end{DoxyParagraph} -\begin{DoxyParagraph}{Remark\+: The properties attached to this plug and its occurences are } -left unchanged. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +The properties attached to this plug and its occurences are left unchanged. +\end{DoxyRemark} The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize} diff --git a/hurricane/doc/hurricane/latex/classHurricane_1_1PrivateProperty.tex b/hurricane/doc/hurricane/latex/classHurricane_1_1PrivateProperty.tex index 5162be84..dcabd7a8 100644 --- a/hurricane/doc/hurricane/latex/classHurricane_1_1PrivateProperty.tex +++ b/hurricane/doc/hurricane/latex/classHurricane_1_1PrivateProperty.tex @@ -49,9 +49,9 @@ If the property owner is destroyed \+: All properties owned by the object are th \hypertarget{classHurricane_1_1PrivateProperty_secPrivatePropertyDestruction}{}\subsection{Destruction}\label{classHurricane_1_1PrivateProperty_secPrivatePropertyDestruction} The property has an owner, this one is informed of the property deletion and detaches it from its property list. If the object is a quark and if this was the last property owned it automatically deletes itself. -\begin{DoxyParagraph}{Remark\+: Once the property is attached to an object this one becomes } -responsible of its automatic destruction. When a property changes its owner, the old owner delegates this task to the new one. On the other hand, a property which has never been attached to an owner will never be deleted automatically. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +Once the property is attached to an object this one becomes responsible of its automatic destruction. When a property changes its owner, the old owner delegates this task to the new one. On the other hand, a property which has never been attached to an owner will never be deleted automatically. +\end{DoxyRemark} {\bfseries Returns\+:} the current owner of the property (or N\+U\+LL if at not been assigned yet). The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize} diff --git a/hurricane/doc/hurricane/latex/classHurricane_1_1Property.tex b/hurricane/doc/hurricane/latex/classHurricane_1_1Property.tex index 121b4a4d..28cfc28d 100644 --- a/hurricane/doc/hurricane/latex/classHurricane_1_1Property.tex +++ b/hurricane/doc/hurricane/latex/classHurricane_1_1Property.tex @@ -37,9 +37,9 @@ In a first step we define two great categories of properties \+: the private pro We will detail separately their respective behaviour, but we ensure that the management of each of those two property categories is absolutely secure. That is, on one side you can destroy explicitely a property (and the objects will be notified) and on the other side the properties will be automatically destroyed when no more object reference them. -\begin{DoxyParagraph}{Remark\+: By overloading some messages, as we will see later, it is } -possible to set up different behaviours (like avoid the automatic delete). -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +By overloading some messages, as we will see later, it is possible to set up different behaviours (like avoid the automatic delete). +\end{DoxyRemark} \hypertarget{classHurricane_1_1Property_secPropertyTheQuarks}{}\subsection{The Quarks}\label{classHurricane_1_1Property_secPropertyTheQuarks} As we shall see, the occurences are very simple objects which are used to designate some entity of the virtually unfolded hierarchy. Indeed, those occurences, which are built and deleted very quickly, are very volatile objects to which obvioulsy we can\textquotesingle{}t attach properties directly. @@ -48,9 +48,9 @@ But the interest of occurences is precisely to be able to attach them properties \begin{DoxyParagraph}{Important\+: only one quark is attached to all occurences which refer the } same entity of the virtually unfolded hierarchy. This means that a property placed on an occurence can be read by any other occurence which refers the same entity of the virtually unfolded hierarchy. \end{DoxyParagraph} -\begin{DoxyParagraph}{Remark\+: Those quarks are also volatile objects because their only } -reason to exist is that at least one property is attached to them. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +Those quarks are also volatile objects because their only reason to exist is that at least one property is attached to them. +\end{DoxyRemark} \hypertarget{classHurricane_1_1Property_secPropertyHowThatWorks}{}\subsection{How that works}\label{classHurricane_1_1Property_secPropertyHowThatWorks} We will detail the way properties are managed by analysing more precisely what happens at the level of property access functions both for data base objects and for occurences. @@ -114,9 +114,9 @@ Therefore it may happen, within this step, that adding a property to an object l Which behaviour should we have in such conditions ? Shall we destroy the property which has been detached ? There is no unique behaviour which matches all needs. In order to solve this problem the properties must answer to two specific messages which are \+: {\bfseries \mbox{\hyperlink{classHurricane_1_1Property_ac7b936414d9d85bb6509100b5dd6a667}{on\+Captured\+By(\+D\+Bo$\ast$ dbo)}}} when the property is attached to an object and {\bfseries on\+Released\+By(D\+Bo$\ast$ dbo)} when it is detached from the object. It is within that last message that the decision about the future of the property must be taken. -\begin{DoxyParagraph}{Remark\+: We will detail below those messages for both private and } -shared properties. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +We will detail below those messages for both private and shared properties. +\end{DoxyRemark} {\bfseries Removing a property} \begin{DoxyCode} \textcolor{keywordtype}{void} \mbox{\hyperlink{classHurricane_1_1DBo_a7833a1f0b8c704930bdc00861e63cf5e}{DBo::remove}}(Property* property); @@ -160,9 +160,9 @@ So \mbox{\hyperlink{namespaceHurricane}{Hurricane}} uses properties prefixed by So I suggest that different tools use a similar namming strategy which would keep confident all the community of {\bfseries {\itshape hurricaners}} -\begin{DoxyParagraph}{Remark\+: Using names like \char`\"{}\+Zen\+Tek\+::\+Timing\+Node\char`\"{} for the Timing\+Node type } -property managed by tools from the Zen\+Tek society decreases name conflicts, unless with other tools from the same society. A property name \char`\"{}\+Society\+Name\+::\+Tool\+Name\+::\+Property\+Name\char`\"{} would be more secure. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +Using names like \char`\"{}\+Zen\+Tek\+::\+Timing\+Node\char`\"{} for the Timing\+Node type property managed by tools from the Zen\+Tek society decreases name conflicts, unless with other tools from the same society. A property name \char`\"{}\+Society\+Name\+::\+Tool\+Name\+::\+Property\+Name\char`\"{} would be more secure. +\end{DoxyRemark} Furthermore, if the community adopts this convention it will be possible to simplify some parts of the code by avoiding for example calls to the macro {\bfseries is\+\_\+a} to check that the collected property is of the expected type, as shown in the following example \+: \begin{DoxyCode} Property* \textcolor{keyword}{property} = occurence.getProperty(\textcolor{stringliteral}{"Hurricane::Selector"}); @@ -250,9 +250,9 @@ This message is called upon when the property is added to the properties of {\tt By default this function does nothing particular, but it must be overloaded for all property sub-\/classes. We will detail later the reaction to this message as taken by the private and shared property classes. -\begin{DoxyParagraph}{Remark\+: This message being already overloaded for private and shared } -property classes there is no need to overload it again when specializing any of those two classes. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +This message being already overloaded for private and shared property classes there is no need to overload it again when specializing any of those two classes. +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1Property_a0ea7ee2089f1463c0c16e30313b54083}\label{classHurricane_1_1Property_a0ea7ee2089f1463c0c16e30313b54083}} \index{Hurricane\+::\+Property@{Hurricane\+::\+Property}!on\+Released\+By@{on\+Released\+By}} \index{on\+Released\+By@{on\+Released\+By}!Hurricane\+::\+Property@{Hurricane\+::\+Property}} @@ -264,9 +264,9 @@ This message is called upon when the property is removed from the {\ttfamily $<$ \begin{DoxyParagraph}{Important\+: The argument {\ttfamily $<$dbo$>$} is not (or no more) necessarily the } owner of the property which receives the message. The processing to be done in reaction to this message often depends on this observation. We will better understand this subtlety when studying private properties. \end{DoxyParagraph} -\begin{DoxyParagraph}{Remark\+: This message being already overloaded for private and shared } -property classes there is no need to overload it again when specializing any of those two classes. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +This message being already overloaded for private and shared property classes there is no need to overload it again when specializing any of those two classes. +\end{DoxyRemark} The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize} diff --git a/hurricane/doc/hurricane/latex/classHurricane_1_1QuadTree.tex b/hurricane/doc/hurricane/latex/classHurricane_1_1QuadTree.tex index a5d05345..f5a96cbb 100644 --- a/hurricane/doc/hurricane/latex/classHurricane_1_1QuadTree.tex +++ b/hurricane/doc/hurricane/latex/classHurricane_1_1QuadTree.tex @@ -96,9 +96,9 @@ inserts the graphic object within the quadtree (if not yet inserted). \begin{DoxyParagraph}{Caution\+: If the graphic object pointer is N\+U\+LL an exception is thrown. } \end{DoxyParagraph} -\begin{DoxyParagraph}{Remark\+: When the number of objects contained in a quadtree leaf is } -greater than some threshold, this leaf is split into four balanced sub-\/quadtrees. This recursive division provides a faster access even for very large quadtrees (to the detriment of some memory loss). -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +When the number of objects contained in a quadtree leaf is greater than some threshold, this leaf is split into four balanced sub-\/quadtrees. This recursive division provides a faster access even for very large quadtrees (to the detriment of some memory loss). +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1QuadTree_af646d2864c70f6456d845c2d6a8d1785}\label{classHurricane_1_1QuadTree_af646d2864c70f6456d845c2d6a8d1785}} \index{Hurricane\+::\+Quad\+Tree@{Hurricane\+::\+Quad\+Tree}!remove@{remove}} \index{remove@{remove}!Hurricane\+::\+Quad\+Tree@{Hurricane\+::\+Quad\+Tree}} @@ -110,9 +110,9 @@ removes the object from the quadtree. \begin{DoxyParagraph}{Caution\+: If the graphic object is N\+U\+LL an exception is thrown. } \end{DoxyParagraph} -\begin{DoxyParagraph}{Remark\+: When the number of objects included in the quadtree goes } -below an other threshold, the inverse behaviour happens \+: the sub-\/quadtrees are deleted and the contained objects are taken in charge by this quadtree node (and memory is released to the system). -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +When the number of objects included in the quadtree goes below an other threshold, the inverse behaviour happens \+: the sub-\/quadtrees are deleted and the contained objects are taken in charge by this quadtree node (and memory is released to the system). +\end{DoxyRemark} The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize} diff --git a/hurricane/doc/hurricane/latex/classHurricane_1_1RoutingPad.tex b/hurricane/doc/hurricane/latex/classHurricane_1_1RoutingPad.tex index 8398a0f0..cc490337 100644 --- a/hurricane/doc/hurricane/latex/classHurricane_1_1RoutingPad.tex +++ b/hurricane/doc/hurricane/latex/classHurricane_1_1RoutingPad.tex @@ -317,9 +317,9 @@ Implements \mbox{\hyperlink{classHurricane_1_1Go_a54c4351dbbf4045e1aa89f06bb8934 When the \mbox{\hyperlink{classHurricane_1_1RoutingPad}{Routing\+Pad}} is anchored on a \mbox{\hyperlink{classHurricane_1_1Plug}{Plug}}, allow to set the {\ttfamily component} that we will anchor on. The \mbox{\hyperlink{classHurricane_1_1Occurrence}{Occurrence}} of the \mbox{\hyperlink{classHurricane_1_1RoutingPad}{Routing\+Pad}} is updated from the \mbox{\hyperlink{classHurricane_1_1Plug}{Plug}} to the {\ttfamily component}. -\begin{DoxyParagraph}{Remark\+: {\ttfamily component} must be tagged as Net external. } - -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +{\ttfamily component} must be tagged as \mbox{\hyperlink{classHurricane_1_1Net}{Net}} external. +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1RoutingPad_a410992ef75c40f9a898c36f39a7d1a1a}\label{classHurricane_1_1RoutingPad_a410992ef75c40f9a898c36f39a7d1a1a}} \index{Hurricane\+::\+Routing\+Pad@{Hurricane\+::\+Routing\+Pad}!set\+On\+Best\+Component@{set\+On\+Best\+Component}} \index{set\+On\+Best\+Component@{set\+On\+Best\+Component}!Hurricane\+::\+Routing\+Pad@{Hurricane\+::\+Routing\+Pad}} diff --git a/hurricane/doc/hurricane/latex/classHurricane_1_1Rubber.tex b/hurricane/doc/hurricane/latex/classHurricane_1_1Rubber.tex index 22d9e05b..e8df6a8f 100644 --- a/hurricane/doc/hurricane/latex/classHurricane_1_1Rubber.tex +++ b/hurricane/doc/hurricane/latex/classHurricane_1_1Rubber.tex @@ -72,9 +72,9 @@ Useful for calling upon methods of the base class without knowing it. {\bfseries Returns\+:} the count associated to the rubber (in fact the number of master hooks of the ring). -\begin{DoxyParagraph}{Remark\+: This count is at least equal to two else the rubber doesn\textquotesingle{}t } -exists (no need). -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +This count is at least equal to two else the rubber doesn\textquotesingle{}t exists (no need). +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1Rubber_a124ef92401fd95ff794e381acd24e4ff}\label{classHurricane_1_1Rubber_a124ef92401fd95ff794e381acd24e4ff}} \index{Hurricane\+::\+Rubber@{Hurricane\+::\+Rubber}!get\+Center@{get\+Center}} \index{get\+Center@{get\+Center}!Hurricane\+::\+Rubber@{Hurricane\+::\+Rubber}} diff --git a/hurricane/doc/hurricane/latex/classHurricane_1_1Technology.tex b/hurricane/doc/hurricane/latex/classHurricane_1_1Technology.tex index 9874010d..1ed75574 100644 --- a/hurricane/doc/hurricane/latex/classHurricane_1_1Technology.tex +++ b/hurricane/doc/hurricane/latex/classHurricane_1_1Technology.tex @@ -55,14 +55,28 @@ Via\+Layers \mbox{\hyperlink{classHurricane_1_1Technology_aacde973f6a02a232a01f3 \item \mbox{\hyperlink{classHurricane_1_1Layer}{Layer}} $\ast$ \mbox{\hyperlink{classHurricane_1_1Technology_a81a3f3e479aeb686c61a2d0fa2931f3b}{get\+Nth\+Metal}} (int) const \item +\mbox{\hyperlink{classHurricane_1_1PhysicalRule}{Physical\+Rule}} $\ast$ \mbox{\hyperlink{classHurricane_1_1Technology_a6ab76e8a246a10a395d68341bca9ea96}{get\+Unit\+Rule}} (std\+::string rule\+Name) const +\item +\mbox{\hyperlink{classHurricane_1_1PhysicalRule}{Physical\+Rule}} $\ast$ \mbox{\hyperlink{classHurricane_1_1Technology_a21ef6f7507785a587e56aecc52a0c0ee}{get\+Physical\+Rule}} (std\+::string rule\+Name, std\+::string layer\+Name) const +\item +\mbox{\hyperlink{classHurricane_1_1PhysicalRule}{Physical\+Rule}} $\ast$ \mbox{\hyperlink{classHurricane_1_1Technology_aec2ce8a8195e90537e6d35cb3ba8b58f}{get\+Physical\+Rule}} (std\+::string rule\+Name, std\+::string layer1\+Name, std\+::string layer2\+Name) const +\item void \mbox{\hyperlink{classHurricane_1_1Technology_a247b75d5cbb85198cea9e5e609304cd0}{set\+Name}} (const \mbox{\hyperlink{classHurricane_1_1Name}{Name}} \&) \item bool \mbox{\hyperlink{classHurricane_1_1Technology_a26c12c5828acaeb33068a2899df1134b}{set\+Symbolic\+Layer}} (const \mbox{\hyperlink{classHurricane_1_1Layer}{Layer}} $\ast$) +\item +\mbox{\hyperlink{classHurricane_1_1PhysicalRule}{Physical\+Rule}} $\ast$ \mbox{\hyperlink{classHurricane_1_1Technology_a96d62a8b3eb12560a9cb778328f8a301}{add\+Unit\+Rule}} (std\+::string rule\+Name, std\+::string reference) +\item +\mbox{\hyperlink{classHurricane_1_1PhysicalRule}{Physical\+Rule}} $\ast$ \mbox{\hyperlink{classHurricane_1_1Technology_a267e44b205b97ff46297d16ed278a5bc}{add\+Physical\+Rule}} (std\+::string rule\+Name, std\+::string reference) +\item +\mbox{\hyperlink{classHurricane_1_1PhysicalRule}{Physical\+Rule}} $\ast$ \mbox{\hyperlink{classHurricane_1_1Technology_a4210936e097a774035bf52bce7d962bc}{add\+Physical\+Rule}} (std\+::string rule\+Name, std\+::string layer\+Name, std\+::string reference) +\item +\mbox{\hyperlink{classHurricane_1_1PhysicalRule}{Physical\+Rule}} $\ast$ \mbox{\hyperlink{classHurricane_1_1Technology_a3f04a0d9fe9c76fc3c0911c76c120e00}{add\+Physical\+Rule}} (std\+::string rule\+Name, std\+::string layer1\+Name, std\+::string layer2\+Name, std\+::string reference) \end{DoxyCompactItemize} \subsection*{Static Public Member Functions} \begin{DoxyCompactItemize} \item -static \mbox{\hyperlink{classHurricane_1_1Technology}{Technology}} $\ast$ \mbox{\hyperlink{classHurricane_1_1Technology_a8fd65387c7fd6ba1396f905fadf20087}{create}} (\mbox{\hyperlink{classHurricane_1_1DataBase}{Data\+Base}} $\ast$, const \mbox{\hyperlink{classHurricane_1_1Name}{Name}} \&) +static \mbox{\hyperlink{classHurricane_1_1Technology}{Technology}} $\ast$ \mbox{\hyperlink{classHurricane_1_1Technology_a64670f0d48e9460342005df52f25c152}{create}} (\mbox{\hyperlink{classHurricane_1_1DataBase}{Data\+Base}} $\ast$, const \mbox{\hyperlink{classHurricane_1_1Name}{Name}} \&) \end{DoxyCompactItemize} @@ -70,25 +84,74 @@ static \mbox{\hyperlink{classHurricane_1_1Technology}{Technology}} $\ast$ \mbox{ Technological rules description ({\bfseries A\+PI}). \hypertarget{classHurricane_1_1Technology_sTechnologyIntro}{}\subsection{Introduction}\label{classHurricane_1_1Technology_sTechnologyIntro} -The \mbox{\hyperlink{classHurricane_1_1Technology}{Technology}} object provides the description of all the technology rules needed by the tools, currently it is limited to the description of all layers available. This object must be created once within the \mbox{\hyperlink{classHurricane_1_1DataBase}{Data\+Base}}, and, in principle never destroyed (this would destroy layers and all objects laying on them ...). +The \mbox{\hyperlink{classHurricane_1_1Technology}{Technology}} object provides the description of all the technology rules needed by the tools, currently it contains\+: -\begin{DoxyParagraph}{Remark\+: There is only one technology for the current Data\+Base, and only one} -Database object, so only one technology defined. -\end{DoxyParagraph} +\begin{DoxyItemize} +\item The layers, roughly from bottom (i.\+e. closest to the subtsrate) to top. Layers can be basic, that is, match a real physical layer, or composite, like for V\+I\+As in symbolic for macro-\/generation. It also provides a connexity table between layers. +\item Three sets of rules describing the technology rules (formerly the {\ttfamily D\+TR} in Alliance). +\begin{DoxyEnumerate} +\item {\ttfamily Zero \mbox{\hyperlink{classHurricane_1_1Layer}{Layer}}}\+: rules not associated to any layer. +\item {\ttfamily One \mbox{\hyperlink{classHurricane_1_1Layer}{Layer}}}\+: rules associated to one layer. +\item {\ttfamily Two Layers}\+: rules associated to two layer. +\end{DoxyEnumerate} +\end{DoxyItemize} + +This object must be created once within the \mbox{\hyperlink{classHurricane_1_1DataBase}{Data\+Base}}, and, in principle never destroyed (this would destroy layers and all objects laying on them ...). + +Here + +\begin{DoxyRemark}{Remarks} +There is only one technology for the current \mbox{\hyperlink{classHurricane_1_1DataBase}{Data\+Base}}, and only one Database object, so only one technology defined. +\end{DoxyRemark} +\hypertarget{classHurricane_1_1Technology_sTechnologyRules}{}\subsection{Using Physical\+Rules}\label{classHurricane_1_1Technology_sTechnologyRules} +How to create a simple one layer rule, setup the minimal width of {\ttfamily metal1} layer to 0.\+5{$\mu$}m. + + +\begin{DoxyCode} +tech = \mbox{\hyperlink{classHurricane_1_1DataBase_a53d0b9fcd06b73f3968c8f238f377a88}{DataBase::getDB}}()->\mbox{\hyperlink{classHurricane_1_1DataBase_a144480c54b0f9fbda57622ad6767ab8a}{getTechnology}}(); +PhysicalRule* rule = tech->\mbox{\hyperlink{classHurricane_1_1Technology_a267e44b205b97ff46297d16ed278a5bc}{addPhysicalRule}}( \textcolor{stringliteral}{"minWidth"}, \textcolor{stringliteral}{"metal1"} ); +rule->\mbox{\hyperlink{classHurricane_1_1PhysicalRule_ada08351fb24f36a63f4e3a3c524000a2}{addValue}}( \mbox{\hyperlink{group__DbUGroup_ga11d4dbd9134a19bda35cbacde1cb2769}{DbU::fromPhysical}}( 0.5, DbU::UnitPower::Micro ), 0 ); +\end{DoxyCode} + + +How to create a one layer rule, with multiple steps. The minimal spacing of {\ttfamily metal1} layer which will depend on the wire length. The spacing will be of 2{$\mu$}m for length below 50{$\mu$}m and 4{$\mu$}m above. + + +\begin{DoxyCode} +tech = \mbox{\hyperlink{classHurricane_1_1DataBase_a53d0b9fcd06b73f3968c8f238f377a88}{DataBase::getDB}}()->\mbox{\hyperlink{classHurricane_1_1DataBase_a144480c54b0f9fbda57622ad6767ab8a}{getTechnology}}(); +PhysicalRule* rule = tech->\mbox{\hyperlink{classHurricane_1_1Technology_a267e44b205b97ff46297d16ed278a5bc}{addPhysicalRule}}( \textcolor{stringliteral}{"minWidth"}, \textcolor{stringliteral}{"metal1"} ); +rule->\mbox{\hyperlink{classHurricane_1_1PhysicalRule_ada08351fb24f36a63f4e3a3c524000a2}{addValue}}( \mbox{\hyperlink{group__DbUGroup_ga11d4dbd9134a19bda35cbacde1cb2769}{DbU::fromPhysical}}( 2.0, DbU::UnitPower::Micro ) + , \mbox{\hyperlink{group__DbUGroup_ga11d4dbd9134a19bda35cbacde1cb2769}{DbU::fromPhysical}}( 50.0, DbU::UnitPower::Micro ) ); +rule->addValue( \mbox{\hyperlink{group__DbUGroup_ga11d4dbd9134a19bda35cbacde1cb2769}{DbU::fromPhysical}}( 4.0, DbU::UnitPower::Micro ) + , \mbox{\hyperlink{group__DbUGroup_ga11d4dbd9134a19bda35cbacde1cb2769}{DbU::fromPhysical}}( 1000.0, DbU::UnitPower::Micro ) ); +\end{DoxyCode} + + +How to create a two layers rule, with non-\/isomorphic values. The minimum enclosure of {\ttfamily metal1} layer over {\ttfamily cut1} will be 1{$\mu$}m in horizontal direction and 0.\+5{$\mu$}m in vertical. The order of layers is significant in the function call, it must be read as {\itshape \char`\"{}\+The encolusre of metal1 over cut1\char`\"{}}. + + +\begin{DoxyCode} +tech = \mbox{\hyperlink{classHurricane_1_1DataBase_a53d0b9fcd06b73f3968c8f238f377a88}{DataBase::getDB}}()->\mbox{\hyperlink{classHurricane_1_1DataBase_a144480c54b0f9fbda57622ad6767ab8a}{getTechnology}}(); +PhysicalRule* rule = tech->\mbox{\hyperlink{classHurricane_1_1Technology_a267e44b205b97ff46297d16ed278a5bc}{addPhysicalRule}}( \textcolor{stringliteral}{"minWidth"}, \textcolor{stringliteral}{"metal1"}, \textcolor{stringliteral}{"cut1"} ); +rule->\mbox{\hyperlink{classHurricane_1_1PhysicalRule_ada08351fb24f36a63f4e3a3c524000a2}{addValue}}( \mbox{\hyperlink{group__DbUGroup_ga11d4dbd9134a19bda35cbacde1cb2769}{DbU::fromPhysical}}( 1.0, DbU::UnitPower::Micro ) + , \mbox{\hyperlink{group__DbUGroup_ga11d4dbd9134a19bda35cbacde1cb2769}{DbU::fromPhysical}}( 0.5, DbU::UnitPower::Micro ) + , 0 ); +\end{DoxyCode} + \subsection{Member Function Documentation} -\mbox{\Hypertarget{classHurricane_1_1Technology_a8fd65387c7fd6ba1396f905fadf20087}\label{classHurricane_1_1Technology_a8fd65387c7fd6ba1396f905fadf20087}} +\mbox{\Hypertarget{classHurricane_1_1Technology_a64670f0d48e9460342005df52f25c152}\label{classHurricane_1_1Technology_a64670f0d48e9460342005df52f25c152}} \index{Hurricane\+::\+Technology@{Hurricane\+::\+Technology}!create@{create}} \index{create@{create}!Hurricane\+::\+Technology@{Hurricane\+::\+Technology}} \subsubsection{\texorpdfstring{create()}{create()}} -{\footnotesize\ttfamily \mbox{\hyperlink{classHurricane_1_1Technology}{Technology}} $\ast$ Hurricane\+::\+Technology\+::create (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classHurricane_1_1DataBase}{Data\+Base}} $\ast$}]{data\+Base, }\item[{const \mbox{\hyperlink{classHurricane_1_1Name}{Name}} \&}]{name }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}} +{\footnotesize\ttfamily $\ast$\mbox{\hyperlink{classHurricane_1_1Technology}{Technology}} $\ast$ Hurricane\+::\+Technology\+::create (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classHurricane_1_1DataBase}{Data\+Base}} $\ast$}]{data\+Base, }\item[{const \mbox{\hyperlink{classHurricane_1_1Name}{Name}} \&}]{name }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}} {\bfseries Returns\+:} a newly created technology named {\ttfamily $<$name$>$} for the data base {\ttfamily $<$data\+Base$>$}. -\begin{DoxyParagraph}{Caution\+: Throws an exception if the {\ttfamily data\+Base} is {\ttfamily N\+U\+LL}, if the name is empty or if} -the {\ttfamily data\+Base} has already a technology. -\end{DoxyParagraph} +\begin{DoxyWarning}{Warning} +Throws an exception if the {\ttfamily data\+Base} is {\ttfamily N\+U\+LL}, if the name is empty or if the {\ttfamily data\+Base} has already a technology. +\end{DoxyWarning} \mbox{\Hypertarget{classHurricane_1_1Technology_ae5590e455d35f76531a6feb0c0f111a2}\label{classHurricane_1_1Technology_ae5590e455d35f76531a6feb0c0f111a2}} \index{Hurricane\+::\+Technology@{Hurricane\+::\+Technology}!is\+Metal@{is\+Metal}} \index{is\+Metal@{is\+Metal}!Hurricane\+::\+Technology@{Hurricane\+::\+Technology}} @@ -143,9 +206,9 @@ References Hurricane\+::\+Layer\+::get\+Mask(). {\bfseries Returns\+:} the collection of layers of the technology. -\begin{DoxyParagraph}{Remark\+: The layers are traversed according to their} -creation order. This order is very important, notably for the graphical display. Therefore deeper basic layers must be created first and upper layers later (the order of composite layers has no importance). -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +The layers are traversed according to their creation order. This order is very important, notably for the graphical display. Therefore deeper basic layers must be created first and upper layers later (the order of composite layers has no importance). +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1Technology_a7fccff9da6604fafb90408ba56184fc0}\label{classHurricane_1_1Technology_a7fccff9da6604fafb90408ba56184fc0}} \index{Hurricane\+::\+Technology@{Hurricane\+::\+Technology}!get\+Basic\+Layers@{get\+Basic\+Layers}} \index{get\+Basic\+Layers@{get\+Basic\+Layers}!Hurricane\+::\+Technology@{Hurricane\+::\+Technology}} @@ -212,7 +275,46 @@ creation order. This order is very important, notably for the graphical display. \subsubsection{\texorpdfstring{get\+Nth\+Metal()}{getNthMetal()}} {\footnotesize\ttfamily \mbox{\hyperlink{classHurricane_1_1Layer}{Layer}} $\ast$ Hurricane\+::\+Technology\+::get\+Nth\+Metal (\begin{DoxyParamCaption}\item[{int}]{depth }\end{DoxyParamCaption}) const} -{\bfseries Returns\+:} the {\ttfamily Nth} metal layer from the substrate. So a {\ttfamily depth} of zero should mean {\ttfamily metal1}. \mbox{\Hypertarget{classHurricane_1_1Technology_a247b75d5cbb85198cea9e5e609304cd0}\label{classHurricane_1_1Technology_a247b75d5cbb85198cea9e5e609304cd0}} +{\bfseries Returns\+:} the {\ttfamily Nth} metal layer from the substrate. So a {\ttfamily depth} of zero should mean {\ttfamily metal1}. \mbox{\Hypertarget{classHurricane_1_1Technology_a6ab76e8a246a10a395d68341bca9ea96}\label{classHurricane_1_1Technology_a6ab76e8a246a10a395d68341bca9ea96}} +\index{Hurricane\+::\+Technology@{Hurricane\+::\+Technology}!get\+Unit\+Rule@{get\+Unit\+Rule}} +\index{get\+Unit\+Rule@{get\+Unit\+Rule}!Hurricane\+::\+Technology@{Hurricane\+::\+Technology}} +\subsubsection{\texorpdfstring{get\+Unit\+Rule()}{getUnitRule()}} +{\footnotesize\ttfamily \mbox{\hyperlink{classHurricane_1_1PhysicalRule}{Physical\+Rule}} $\ast$ Hurricane\+::\+Technology\+::get\+Unit\+Rule (\begin{DoxyParamCaption}\item[{std\+::string}]{rule\+Name }\end{DoxyParamCaption}) const} + + +\begin{DoxyParams}{Parameters} +{\em rule\+Name} & The name of the rule\\ +\hline +\end{DoxyParams} +{\bfseries Returns\+:} The matching rule in the table of {\bfseries unit} rules. \mbox{\Hypertarget{classHurricane_1_1Technology_a21ef6f7507785a587e56aecc52a0c0ee}\label{classHurricane_1_1Technology_a21ef6f7507785a587e56aecc52a0c0ee}} +\index{Hurricane\+::\+Technology@{Hurricane\+::\+Technology}!get\+Physical\+Rule@{get\+Physical\+Rule}} +\index{get\+Physical\+Rule@{get\+Physical\+Rule}!Hurricane\+::\+Technology@{Hurricane\+::\+Technology}} +\subsubsection{\texorpdfstring{get\+Physical\+Rule()}{getPhysicalRule()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}} +{\footnotesize\ttfamily \mbox{\hyperlink{classHurricane_1_1PhysicalRule}{Physical\+Rule}} $\ast$ Hurricane\+::\+Technology\+::get\+Physical\+Rule (\begin{DoxyParamCaption}\item[{std\+::string}]{rule\+Name, }\item[{std\+::string}]{layer\+Name }\end{DoxyParamCaption}) const} + + +\begin{DoxyParams}{Parameters} +{\em rule\+Name} & The name of the rule \\ +\hline +{\em layer\+Name} & The name of the layer\\ +\hline +\end{DoxyParams} +{\bfseries Returns\+:} The matching rule in the table of {\bfseries one layer} rules. \mbox{\Hypertarget{classHurricane_1_1Technology_aec2ce8a8195e90537e6d35cb3ba8b58f}\label{classHurricane_1_1Technology_aec2ce8a8195e90537e6d35cb3ba8b58f}} +\index{Hurricane\+::\+Technology@{Hurricane\+::\+Technology}!get\+Physical\+Rule@{get\+Physical\+Rule}} +\index{get\+Physical\+Rule@{get\+Physical\+Rule}!Hurricane\+::\+Technology@{Hurricane\+::\+Technology}} +\subsubsection{\texorpdfstring{get\+Physical\+Rule()}{getPhysicalRule()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}} +{\footnotesize\ttfamily \mbox{\hyperlink{classHurricane_1_1PhysicalRule}{Physical\+Rule}} $\ast$ Hurricane\+::\+Technology\+::get\+Physical\+Rule (\begin{DoxyParamCaption}\item[{std\+::string}]{rule\+Name, }\item[{std\+::string}]{layer1\+Name, }\item[{std\+::string}]{layer2\+Name }\end{DoxyParamCaption}) const} + + +\begin{DoxyParams}{Parameters} +{\em rule\+Name} & The name of the rule \\ +\hline +{\em layer1\+Name} & The name of the first layer \\ +\hline +{\em layer2\+Name} & The name of the second layer\\ +\hline +\end{DoxyParams} +{\bfseries Returns\+:} The matching rule in the table of {\bfseries two layers} rules. The order of layers arguments is meaningful and should match The one used at rule creation. \mbox{\Hypertarget{classHurricane_1_1Technology_a247b75d5cbb85198cea9e5e609304cd0}\label{classHurricane_1_1Technology_a247b75d5cbb85198cea9e5e609304cd0}} \index{Hurricane\+::\+Technology@{Hurricane\+::\+Technology}!set\+Name@{set\+Name}} \index{set\+Name@{set\+Name}!Hurricane\+::\+Technology@{Hurricane\+::\+Technology}} \subsubsection{\texorpdfstring{set\+Name()}{setName()}} @@ -224,7 +326,73 @@ Allows to change the technology name (if empty name, throws an exception). \mbox \subsubsection{\texorpdfstring{set\+Symbolic\+Layer()}{setSymbolicLayer()}} {\footnotesize\ttfamily bool Hurricane\+::\+Technology\+::set\+Symbolic\+Layer (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classHurricane_1_1Layer}{Layer}} $\ast$}]{layer }\end{DoxyParamCaption})} -Sets this exact {\ttfamily layer} as symbolic (not is mask). Returns {\bfseries true} on success (the layer exists). +Sets this exact {\ttfamily layer} as symbolic (not is mask). Returns {\bfseries true} on success (the layer exists). \mbox{\Hypertarget{classHurricane_1_1Technology_a96d62a8b3eb12560a9cb778328f8a301}\label{classHurricane_1_1Technology_a96d62a8b3eb12560a9cb778328f8a301}} +\index{Hurricane\+::\+Technology@{Hurricane\+::\+Technology}!add\+Unit\+Rule@{add\+Unit\+Rule}} +\index{add\+Unit\+Rule@{add\+Unit\+Rule}!Hurricane\+::\+Technology@{Hurricane\+::\+Technology}} +\subsubsection{\texorpdfstring{add\+Unit\+Rule()}{addUnitRule()}} +{\footnotesize\ttfamily \mbox{\hyperlink{classHurricane_1_1PhysicalRule}{Physical\+Rule}} $\ast$ Hurricane\+::\+Technology\+::add\+Unit\+Rule (\begin{DoxyParamCaption}\item[{std\+::string}]{rule\+Name, }\item[{std\+::string}]{reference }\end{DoxyParamCaption})} + + +\begin{DoxyParams}{Parameters} +{\em rule\+Name} & The name of the rule \\ +\hline +{\em reference} & A free comentary string for further reference.\\ +\hline +\end{DoxyParams} +{\bfseries Returns\+:} The newly added rule. + +Create and add to \mbox{\hyperlink{classHurricane_1_1Technology}{Technology}} a rule whithout associated layer. The rule should contain a value which is anything but a length (Volt, Henry, Ohm, ...) The rule is created empty. For a detailed explanation see \mbox{\hyperlink{classHurricane_1_1PhysicalRule}{Physical\+Rule}}. \mbox{\Hypertarget{classHurricane_1_1Technology_a267e44b205b97ff46297d16ed278a5bc}\label{classHurricane_1_1Technology_a267e44b205b97ff46297d16ed278a5bc}} +\index{Hurricane\+::\+Technology@{Hurricane\+::\+Technology}!add\+Physical\+Rule@{add\+Physical\+Rule}} +\index{add\+Physical\+Rule@{add\+Physical\+Rule}!Hurricane\+::\+Technology@{Hurricane\+::\+Technology}} +\subsubsection{\texorpdfstring{add\+Physical\+Rule()}{addPhysicalRule()}\hspace{0.1cm}{\footnotesize\ttfamily [1/3]}} +{\footnotesize\ttfamily \mbox{\hyperlink{classHurricane_1_1PhysicalRule}{Physical\+Rule}} $\ast$ Hurricane\+::\+Technology\+::add\+Physical\+Rule (\begin{DoxyParamCaption}\item[{std\+::string}]{rule\+Name, }\item[{std\+::string}]{reference }\end{DoxyParamCaption})} + + +\begin{DoxyParams}{Parameters} +{\em rule\+Name} & The name of the rule \\ +\hline +{\em reference} & A free comentary string for further reference.\\ +\hline +\end{DoxyParams} +{\bfseries Returns\+:} The newly added rule. + +Create and add to \mbox{\hyperlink{classHurricane_1_1Technology}{Technology}} a rule whithout associated layer. The rule should contain only length value(s) (so \mbox{\hyperlink{group__DbUGroup_ga4fbfa3e8c89347af76c9628ea06c4146}{Db\+U\+::\+Unit}}). The rule is created empty. For a detailed explanation see \mbox{\hyperlink{classHurricane_1_1PhysicalRule}{Physical\+Rule}}. \mbox{\Hypertarget{classHurricane_1_1Technology_a4210936e097a774035bf52bce7d962bc}\label{classHurricane_1_1Technology_a4210936e097a774035bf52bce7d962bc}} +\index{Hurricane\+::\+Technology@{Hurricane\+::\+Technology}!add\+Physical\+Rule@{add\+Physical\+Rule}} +\index{add\+Physical\+Rule@{add\+Physical\+Rule}!Hurricane\+::\+Technology@{Hurricane\+::\+Technology}} +\subsubsection{\texorpdfstring{add\+Physical\+Rule()}{addPhysicalRule()}\hspace{0.1cm}{\footnotesize\ttfamily [2/3]}} +{\footnotesize\ttfamily \mbox{\hyperlink{classHurricane_1_1PhysicalRule}{Physical\+Rule}} $\ast$ Hurricane\+::\+Technology\+::add\+Physical\+Rule (\begin{DoxyParamCaption}\item[{std\+::string}]{rule\+Name, }\item[{std\+::string}]{layer\+Name, }\item[{std\+::string}]{reference }\end{DoxyParamCaption})} + + +\begin{DoxyParams}{Parameters} +{\em rule\+Name} & The name of the rule \\ +\hline +{\em layer\+Name} & The one layer associated to the rule. \\ +\hline +{\em reference} & A free comentary string for further reference.\\ +\hline +\end{DoxyParams} +{\bfseries Returns\+:} The newly added rule. + +Create and add to \mbox{\hyperlink{classHurricane_1_1Technology}{Technology}} a rule associated to {\bfseries one} layer. The rule should contain only length value(s) (so \mbox{\hyperlink{group__DbUGroup_ga4fbfa3e8c89347af76c9628ea06c4146}{Db\+U\+::\+Unit}}). The rule is created empty. For a detailed explanation see \mbox{\hyperlink{classHurricane_1_1PhysicalRule}{Physical\+Rule}}. \mbox{\Hypertarget{classHurricane_1_1Technology_a3f04a0d9fe9c76fc3c0911c76c120e00}\label{classHurricane_1_1Technology_a3f04a0d9fe9c76fc3c0911c76c120e00}} +\index{Hurricane\+::\+Technology@{Hurricane\+::\+Technology}!add\+Physical\+Rule@{add\+Physical\+Rule}} +\index{add\+Physical\+Rule@{add\+Physical\+Rule}!Hurricane\+::\+Technology@{Hurricane\+::\+Technology}} +\subsubsection{\texorpdfstring{add\+Physical\+Rule()}{addPhysicalRule()}\hspace{0.1cm}{\footnotesize\ttfamily [3/3]}} +{\footnotesize\ttfamily \mbox{\hyperlink{classHurricane_1_1PhysicalRule}{Physical\+Rule}} $\ast$ Hurricane\+::\+Technology\+::add\+Physical\+Rule (\begin{DoxyParamCaption}\item[{std\+::string}]{rule\+Name, }\item[{std\+::string}]{layer1\+Name, }\item[{std\+::string}]{layer2\+Name, }\item[{std\+::string}]{reference }\end{DoxyParamCaption})} + + +\begin{DoxyParams}{Parameters} +{\em rule\+Name} & The name of the rule \\ +\hline +{\em layer1\+Name} & First layer associated to the rule. \\ +\hline +{\em layer2\+Name} & First layer associated to the rule. \\ +\hline +{\em reference} & A free comentary string for further reference.\\ +\hline +\end{DoxyParams} +{\bfseries Returns\+:} The newly added rule. + +Create and add to \mbox{\hyperlink{classHurricane_1_1Technology}{Technology}} a rule associated to {\bfseries two} layers. The order of layers is meaningful in case of an asymmetric rule. The rule should contain only length value(s) (so \mbox{\hyperlink{group__DbUGroup_ga4fbfa3e8c89347af76c9628ea06c4146}{Db\+U\+::\+Unit}}). The rule is created empty. For a detailed explanation see \mbox{\hyperlink{classHurricane_1_1PhysicalRule}{Physical\+Rule}}. The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize} \item diff --git a/hurricane/doc/hurricane/latex/classHurricane_1_1Transformation.tex b/hurricane/doc/hurricane/latex/classHurricane_1_1Transformation.tex index 428e8449..67977ec6 100644 --- a/hurricane/doc/hurricane/latex/classHurricane_1_1Transformation.tex +++ b/hurricane/doc/hurricane/latex/classHurricane_1_1Transformation.tex @@ -81,9 +81,9 @@ void \mbox{\hyperlink{classHurricane_1_1Transformation_a3ac2c40977ecf061b4316ece The transformation formula is given by\+: \[ \Large \left \{ \begin{array}{r c l l l l l} x' & = & (a \times x) & + & (b \times y) & + & tx \\ y' & = & (c \times x) & + & (d \times y) & + & ty \end{array} \right . \] where x and y are the coordinates of any point, x\textquotesingle{} and y\textquotesingle{} the coordinates of the transformed point, tx and ty the horizontal and vertical components of the translation and where a, b, c and d are the coefficients of the matrix associated to the orientation. See \mbox{\hyperlink{classHurricane_1_1Transformation_1_1Orientation}{Orientation}} for the value of a, b, c \& d. -\begin{DoxyParagraph}{Remark\+: Rotations are done counter clock wise} - -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +{\bfseries Rotations are done counter clock wise} +\end{DoxyRemark} \subsection{Constructor \& Destructor Documentation} diff --git a/hurricane/doc/hurricane/latex/classHurricane_1_1Vertical.tex b/hurricane/doc/hurricane/latex/classHurricane_1_1Vertical.tex index 677734de..f086a6f0 100644 --- a/hurricane/doc/hurricane/latex/classHurricane_1_1Vertical.tex +++ b/hurricane/doc/hurricane/latex/classHurricane_1_1Vertical.tex @@ -87,9 +87,9 @@ pointers is null or if the two component don\textquotesingle{}t belong to the sa {\bfseries Returns\+:} the relative source ordinate of the segment (may be absolute if the source extremity isn\textquotesingle{}t anchored). -\begin{DoxyParagraph}{Remark\+: If you want to get the absolute one use the member function } -get\+Source\+X() defined at the \mbox{\hyperlink{classHurricane_1_1Segment}{Segment}} level. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +If you want to get the absolute one use the member function get\+Source\+X() defined at the \mbox{\hyperlink{classHurricane_1_1Segment}{Segment}} level. +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1Vertical_af9ae34d224436db7c4c30f18fbd8f9a3}\label{classHurricane_1_1Vertical_af9ae34d224436db7c4c30f18fbd8f9a3}} \index{Hurricane\+::\+Vertical@{Hurricane\+::\+Vertical}!get\+Dy\+Target@{get\+Dy\+Target}} \index{get\+Dy\+Target@{get\+Dy\+Target}!Hurricane\+::\+Vertical@{Hurricane\+::\+Vertical}} @@ -98,9 +98,9 @@ get\+Source\+X() defined at the \mbox{\hyperlink{classHurricane_1_1Segment}{Segm {\bfseries Returns\+:} the relative target ordinate of the segment (may be absolute if the target extremity isn\textquotesingle{}t anchored). -\begin{DoxyParagraph}{Remark\+: If you want to get the absolute one use the member function } -get\+Target\+X() defined at the \mbox{\hyperlink{classHurricane_1_1Segment}{Segment}} level. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +If you want to get the absolute one use the member function get\+Target\+X() defined at the \mbox{\hyperlink{classHurricane_1_1Segment}{Segment}} level. +\end{DoxyRemark} \mbox{\Hypertarget{classHurricane_1_1Vertical_aaea60cb8247f4ea837f90a4532901143}\label{classHurricane_1_1Vertical_aaea60cb8247f4ea837f90a4532901143}} \index{Hurricane\+::\+Vertical@{Hurricane\+::\+Vertical}!setX@{setX}} \index{setX@{setX}!Hurricane\+::\+Vertical@{Hurricane\+::\+Vertical}} diff --git a/hurricane/doc/hurricane/latex/group__DbUGroup.tex b/hurricane/doc/hurricane/latex/group__DbUGroup.tex index fde9249e..144a9ae2 100644 --- a/hurricane/doc/hurricane/latex/group__DbUGroup.tex +++ b/hurricane/doc/hurricane/latex/group__DbUGroup.tex @@ -123,9 +123,9 @@ Fixed point numbers management. \hypertarget{group__DbUGroup_secDbUIntro}{}\subsection{Introduction}\label{group__DbUGroup_secDbUIntro} The \mbox{\hyperlink{classHurricane_1_1DbU}{DbU}} class provides the \mbox{\hyperlink{group__DbUGroup_ga4fbfa3e8c89347af76c9628ea06c4146}{Db\+U\+::\+Unit}} type for modelling geometric length, that is abscissas, ordinates, widths, offsets and a set of functions to convert \mbox{\hyperlink{group__DbUGroup_ga4fbfa3e8c89347af76c9628ea06c4146}{Db\+U\+::\+Unit}} to and from external coordinates. -\begin{DoxyParagraph}{Remark\+: The DbU class contains only static methods, and is not meant to} -be instanciated. The working type is \mbox{\hyperlink{group__DbUGroup_ga4fbfa3e8c89347af76c9628ea06c4146}{Db\+U\+::\+Unit}}. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +The \mbox{\hyperlink{classHurricane_1_1DbU}{DbU}} class contains only static methods, and is not meant to be instanciated. The working type is \mbox{\hyperlink{group__DbUGroup_ga4fbfa3e8c89347af76c9628ea06c4146}{Db\+U\+::\+Unit}}. +\end{DoxyRemark} The \mbox{\hyperlink{classHurricane_1_1DbU}{DbU}} class manage three king of length \+: \begin{DoxyItemize} \item {\bfseries \mbox{\hyperlink{group__DbUGroup_ga4fbfa3e8c89347af76c9628ea06c4146}{Db\+U\+::\+Unit}}} \+: the working type. It is currently associated to a long integer and a precision/resolution. This way all numbers are bound to the same precision (unlike floating point numbers) preventing rounding errors. @@ -395,9 +395,9 @@ Sets in which length the units are to be displayed by \mbox{\hyperlink{group__Db \begin{DoxyReturn}{Returns} A character string representing the external value of {\ttfamily $<$unit$>$}. The value is converted in the length according to \mbox{\hyperlink{group__DbUGroup_ga89ab8f8326c54113336086663ecf1d25}{set\+String\+Mode()}}\+: database, grid or symbolic. \end{DoxyReturn} -\begin{DoxyParagraph}{Remark\+: This string is shorter than the one we could print from the } -external value because non needed decimals are not drawn (nor the point if value is integer). -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +This string is shorter than the one we could print from the external value because non needed decimals are not drawn (nor the point if value is integer). +\end{DoxyRemark} \mbox{\Hypertarget{group__DbUGroup_gace9a8644e7e80dcaed2a8a95deeb1622}\label{group__DbUGroup_gace9a8644e7e80dcaed2a8a95deeb1622}} \index{Db\+U/\+Unit description@{Db\+U/\+Unit description}!set\+Precision@{set\+Precision}} \index{set\+Precision@{set\+Precision}!Db\+U/\+Unit description@{Db\+U/\+Unit description}} @@ -406,9 +406,9 @@ external value because non needed decimals are not drawn (nor the point if value Allows to set the precision at a requested value. This must be done at the begining of the program (before the creation of the first unit) and not changed for the following (unless mandatory and for a temporary period because all existing units would be misinterpreted). -\begin{DoxyParagraph}{Remark\+: This function throws an exception if the requested precision } -is greater than the maximal one. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +This function throws an exception if the requested precision is greater than the maximal one. +\end{DoxyRemark} \mbox{\Hypertarget{group__DbUGroup_ga202cc3aa3364c2224647a29dde047fae}\label{group__DbUGroup_ga202cc3aa3364c2224647a29dde047fae}} \index{Db\+U/\+Unit description@{Db\+U/\+Unit description}!set\+Real\+Snap\+Grid\+Step@{set\+Real\+Snap\+Grid\+Step}} \index{set\+Real\+Snap\+Grid\+Step@{set\+Real\+Snap\+Grid\+Step}!Db\+U/\+Unit description@{Db\+U/\+Unit description}} diff --git a/hurricane/doc/hurricane/latex/group__Generalities.tex b/hurricane/doc/hurricane/latex/group__Generalities.tex index c238396a..4ea7fb8d 100644 --- a/hurricane/doc/hurricane/latex/group__Generalities.tex +++ b/hurricane/doc/hurricane/latex/group__Generalities.tex @@ -25,9 +25,9 @@ In the same way, some opetators or global functions are defined for all object t terminology In the following, we will describe operators and functions applying to objects of different types. Therefore we will name \char`\"{}\+Object\char`\"{} any of those types.\hypertarget{group__Generalities_secGeneralitiesNammingConventions}{}\subsection{Namming conventions}\label{group__Generalities_secGeneralitiesNammingConventions} The name of \char`\"{}\+C macros\char`\"{} are written with lower case letters and underscores (examples \+: {\bfseries is\+\_\+a}, {\bfseries for\+\_\+each\+\_\+cell} or {\bfseries end\+\_\+for}) while the name of generic functions and member functions never use the underscore and always start with an Upper case letter (examples \+: {\bfseries Get\+Unit}, {\bfseries Get\+Master\+Cell}, {\bfseries Is\+Called\+By}). -\begin{DoxyParagraph}{Remark\+: When examining {\ttfamily }.h include files for more detailed information } -you will find member functions which start with an underscore. {\bfseries While being \char`\"{}public\char`\"{} those functions must never be called upon}. In principle, only here\textquotesingle{}after documented functions should be used by the application programmer. -\end{DoxyParagraph} +\begin{DoxyRemark}{Remarks} +When examining {\ttfamily }.h include files for more detailed information you will find member functions which start with an underscore. {\bfseries While being \char`\"{}public\char`\"{} those functions must never be called upon}. In principle, only here\textquotesingle{}after documented functions should be used by the application programmer. +\end{DoxyRemark} \hypertarget{group__Generalities_secGeneralitiesGetString}{}\subsection{Get\+String}\label{group__Generalities_secGeneralitiesGetString} \begin{DoxyCode} @@ -100,9 +100,9 @@ The library provides some usefull utilities for generating trace printings with trace\_out(); \} \end{DoxyCode} - \begin{DoxyParagraph}{Remark\+: Debugger enthousiastic users will probably ignore this trace } -capability which presents the annoying need to be inserted into the code... For myself, I do prefer those facilities... -\end{DoxyParagraph} + \begin{DoxyRemark}{Remarks} +Debugger enthousiastic users will probably ignore this trace capability which presents the annoying need to be inserted into the code... For myself, I do prefer those facilities... +\end{DoxyRemark} \hypertarget{group__Generalities_secGeneralitiesRemarks}{}\subsection{Remarks}\label{group__Generalities_secGeneralitiesRemarks} Many other global and generic functions exist. Each one will be studied within the description of the classes which create or specialize them (example\+: {\bfseries Hurricane\+::\+Get\+Unit} will be introduced with the Unit class and {\bfseries Hurricane\+::\+Get\+Collection} with the \mbox{\hyperlink{classHurricane_1_1Collection}{Collection}} class). diff --git a/hurricane/doc/hurricane/latex/hierarchy.tex b/hurricane/doc/hurricane/latex/hierarchy.tex index 4fde8e3f..6522842d 100644 --- a/hurricane/doc/hurricane/latex/hierarchy.tex +++ b/hurricane/doc/hurricane/latex/hierarchy.tex @@ -107,6 +107,7 @@ This inheritance list is sorted roughly, but not completely, alphabetically\+:\b \item \contentsline{section}{Hurricane\+:\+:Occurrence}{\pageref{classHurricane_1_1Occurrence}}{} \item \contentsline{section}{Hurricane\+:\+:Transformation\+:\+:Orientation}{\pageref{classHurricane_1_1Transformation_1_1Orientation}}{} \item \contentsline{section}{Hurricane\+:\+:Path}{\pageref{classHurricane_1_1Path}}{} +\item \contentsline{section}{Hurricane\+:\+:Physical\+Rule}{\pageref{classHurricane_1_1PhysicalRule}}{} \item \contentsline{section}{Hurricane\+:\+:Instance\+:\+:Placement\+Status}{\pageref{classHurricane_1_1Instance_1_1PlacementStatus}}{} \item \contentsline{section}{Hurricane\+:\+:Point}{\pageref{classHurricane_1_1Point}}{} \item \contentsline{section}{Hurricane\+:\+:Property}{\pageref{classHurricane_1_1Property}}{} diff --git a/hurricane/doc/hurricane/latex/namespaceHurricane.tex b/hurricane/doc/hurricane/latex/namespaceHurricane.tex index cebb1c57..4c354c7d 100644 --- a/hurricane/doc/hurricane/latex/namespaceHurricane.tex +++ b/hurricane/doc/hurricane/latex/namespaceHurricane.tex @@ -90,6 +90,8 @@ class \mbox{\hyperlink{classHurricane_1_1Pad}{Pad}} \begin{DoxyCompactList}\small\item\em \mbox{\hyperlink{classHurricane_1_1Pad}{Pad}} description ({\bfseries A\+PI}) \end{DoxyCompactList}\item class \mbox{\hyperlink{classHurricane_1_1Path}{Path}} \begin{DoxyCompactList}\small\item\em \mbox{\hyperlink{classHurricane_1_1Path}{Path}} description ({\bfseries A\+PI}) \end{DoxyCompactList}\item +class \mbox{\hyperlink{classHurricane_1_1PhysicalRule}{Physical\+Rule}} +\begin{DoxyCompactList}\small\item\em Define a rule for the technology ({\bfseries A\+PI}). \end{DoxyCompactList}\item class \mbox{\hyperlink{classHurricane_1_1Pin}{Pin}} \begin{DoxyCompactList}\small\item\em \mbox{\hyperlink{classHurricane_1_1Pin}{Pin}} description ({\bfseries A\+PI}) \end{DoxyCompactList}\item class \mbox{\hyperlink{classHurricane_1_1Plug}{Plug}} diff --git a/hurricane/doc/hurricane/latex/refman.tex b/hurricane/doc/hurricane/latex/refman.tex index 3b3fab69..5ac25edb 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 Mon Apr 27 2020 11:34:57}\\ + {\small Tue Jul 21 2020 11:06:16}\\ \end{center} \end{titlepage} @@ -110,6 +110,7 @@ \input{classHurricane_1_1Transformation_1_1Orientation} \input{classHurricane_1_1Pad} \input{classHurricane_1_1Path} +\input{classHurricane_1_1PhysicalRule} \input{classHurricane_1_1Pin} \input{classHurricane_1_1Instance_1_1PlacementStatus} \input{classHurricane_1_1Plug} diff --git a/hurricane/doc/viewer/CellPrinter.dox b/hurricane/doc/viewer/CellPrinter.dox index ba8aa39f..e6627c29 100644 --- a/hurricane/doc/viewer/CellPrinter.dox +++ b/hurricane/doc/viewer/CellPrinter.dox @@ -29,6 +29,7 @@ * * * Code example (took from CellViewer): + * \code void CellViewer::printDisplay () { diff --git a/hurricane/doc/viewer/html/CellImage_8h_source.html b/hurricane/doc/viewer/html/CellImage_8h_source.html index 9a468f7f..56a0e36f 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 2053e8b1..51ccb4a3 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 a791d382..6dc31a41 100644 --- a/hurricane/doc/viewer/html/CellViewer_8h_source.html +++ b/hurricane/doc/viewer/html/CellViewer_8h_source.html @@ -71,7 +71,7 @@ $(function() {
    - +
    Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 5d923dfd..1a4bdfa3 100644 --- a/hurricane/doc/viewer/html/CellWidget_8h_source.html +++ b/hurricane/doc/viewer/html/CellWidget_8h_source.html @@ -86,7 +86,7 @@ $(function() {
    - +
    Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 8c4fe1af..22825071 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 85a56c5f..4d845705 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 1d8f0ba8..453b4e47 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
    diff --git a/hurricane/doc/viewer/html/annotated.html b/hurricane/doc/viewer/html/annotated.html index 3f711db8..62ac783e 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 583a3726..8640dec1 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 16bc3490..71215060 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 40916cec..cf639826 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 60d1ac23..911cabc9 100644 --- a/hurricane/doc/viewer/html/classHurricane_1_1CellPrinter.html +++ b/hurricane/doc/viewer/html/classHurricane_1_1CellPrinter.html @@ -83,7 +83,8 @@ Draw into a QPrinter (CellViewer):

    void CellViewer::printDisplay ()
    {
    if (_cellWidget == NULL) return;
    if (_cellWidget->getCell() == NULL) {
    cerr << Warning("Unable to print, no cell loaded yet.") << endl;
    return;
    }
    QPrinter printer( QPrinter::ScreenResolution );
    printer.setPaperSize
    ( (QPrinter::PaperSize)Cfg::getParamEnumerate("viewer.printer.paper",0)->asInt() );
    printer.setOutputFileName ( "unicorn-snapshot.pdf" );
    QPrintDialog dialog ( &printer );
    if ( dialog.exec() == QDialog::Accepted ) {
    CellPrinter* cellPrinter = new CellPrinter();
    cellPrinter->setScreenCellWidget( _cellWidget );
    cellPrinter->toPdf ( &printer, false );
    delete cellPrinter;
    }
    }
    Remark: The generated PDF file are bitmaps, so they can grew very large if
    you uses paper above A2...
    +

    Code example (took from CellViewer):

    +
    void CellViewer::printDisplay ()
    {
    if (_cellWidget == NULL) return;
    if (_cellWidget->getCell() == NULL) {
    cerr << Warning("Unable to print, no cell loaded yet.") << endl;
    return;
    }
    QPrinter printer( QPrinter::ScreenResolution );
    printer.setPaperSize
    ( (QPrinter::PaperSize)Cfg::getParamEnumerate("viewer.printer.paper",0)->asInt() );
    printer.setOutputFileName ( "unicorn-snapshot.pdf" );
    QPrintDialog dialog ( &printer );
    if ( dialog.exec() == QDialog::Accepted ) {
    CellPrinter* cellPrinter = new CellPrinter();
    cellPrinter->setScreenCellWidget( _cellWidget );
    cellPrinter->toPdf ( &printer, false );
    delete cellPrinter;
    }
    }
    Remark: The generated PDF file are bitmaps, so they can grew very large if
    you uses paper above A2...

    Configuration Variables

    The CellPrinter reads the following configuration variables for it's defaults settings (they are located in misc.conf, for the system-wide settings).

      @@ -239,7 +240,7 @@ Implementation details
      - +
      Generated by doxygen 1.8.14 on Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 4f2b1b8f..be78b830 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 f1467a6d..d55dfa72 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 5057668a..9fb8db6b 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 5143fddc..1b35db9e 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 d610e13b..7e4ed7c7 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 bf99cc69..d5fb6b8e 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 db7ff0f6..d1e4533c 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 7e1945b4..6312d840 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 a681f1c6..33814101 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 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 46de022b..9a1f3b3c 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
      diff --git a/hurricane/doc/viewer/html/classes.html b/hurricane/doc/viewer/html/classes.html index d7e8fa06..414cab60 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
      diff --git a/hurricane/doc/viewer/html/dir_0afc25342c548a63e1813d8fbde8101d.html b/hurricane/doc/viewer/html/dir_0afc25342c548a63e1813d8fbde8101d.html index 8ce7c5e7..3f04d093 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
      diff --git a/hurricane/doc/viewer/html/dir_22af1943967c75aa4d199e6ffd8de9d2.html b/hurricane/doc/viewer/html/dir_22af1943967c75aa4d199e6ffd8de9d2.html index 9e0b3ecf..36a52630 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
      diff --git a/hurricane/doc/viewer/html/dir_53ec41d7bc61ef1f85d867f95df84d28.html b/hurricane/doc/viewer/html/dir_53ec41d7bc61ef1f85d867f95df84d28.html index 8e59c1e2..915adc7f 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
      diff --git a/hurricane/doc/viewer/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/hurricane/doc/viewer/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html index f80044a8..51d74f2a 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
      diff --git a/hurricane/doc/viewer/html/files.html b/hurricane/doc/viewer/html/files.html index 94f93139..2327917a 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
      diff --git a/hurricane/doc/viewer/html/functions.html b/hurricane/doc/viewer/html/functions.html index 9603cf68..89c9b22e 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
      diff --git a/hurricane/doc/viewer/html/functions_enum.html b/hurricane/doc/viewer/html/functions_enum.html index e2bd5590..beb5139a 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
      diff --git a/hurricane/doc/viewer/html/functions_eval.html b/hurricane/doc/viewer/html/functions_eval.html index cef492fa..5dc8b403 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
      diff --git a/hurricane/doc/viewer/html/functions_func.html b/hurricane/doc/viewer/html/functions_func.html index 675b4cc6..377fd501 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
      diff --git a/hurricane/doc/viewer/html/graph_legend.html b/hurricane/doc/viewer/html/graph_legend.html index a0d98026..a186bdaf 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
      diff --git a/hurricane/doc/viewer/html/group__graphicsGroup.html b/hurricane/doc/viewer/html/group__graphicsGroup.html index b71e73bc..3d5caa8c 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
      diff --git a/hurricane/doc/viewer/html/index.html b/hurricane/doc/viewer/html/index.html index be230fde..0e729198 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
      diff --git a/hurricane/doc/viewer/html/modules.html b/hurricane/doc/viewer/html/modules.html index ab936a9a..0c02cc87 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 Mon Apr 27 2020Generated by doxygen 1.8.14 on Tue Jul 21 2020 Return to top of page
      diff --git a/hurricane/doc/viewer/latex/classHurricane_1_1CellPrinter.tex b/hurricane/doc/viewer/latex/classHurricane_1_1CellPrinter.tex index cb85efa1..eba79016 100644 --- a/hurricane/doc/viewer/latex/classHurricane_1_1CellPrinter.tex +++ b/hurricane/doc/viewer/latex/classHurricane_1_1CellPrinter.tex @@ -42,7 +42,9 @@ It\textquotesingle{}s use is straigtforward, as shown in the example below. It c \item Delete the widget. \end{DoxyEnumerate} -Code example (took from \mbox{\hyperlink{classHurricane_1_1CellViewer}{Cell\+Viewer}})\+: +Code example (took from \mbox{\hyperlink{classHurricane_1_1CellViewer}{Cell\+Viewer}})\+: + + \begin{DoxyCode} \textcolor{keywordtype}{void} CellViewer::printDisplay () \{ diff --git a/hurricane/doc/viewer/latex/refman.tex b/hurricane/doc/viewer/latex/refman.tex index 2e854484..7225ba49 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 Mon Apr 27 2020 11:34:57}\\ + {\small Tue Jul 21 2020 11:06:16}\\ \end{center} \end{titlepage} diff --git a/hurricane/src/analog/TransistorFamily.cpp b/hurricane/src/analog/TransistorFamily.cpp index 585f48e2..d9dddcf4 100644 --- a/hurricane/src/analog/TransistorFamily.cpp +++ b/hurricane/src/analog/TransistorFamily.cpp @@ -51,10 +51,10 @@ namespace Analog { _bulkType = addMCheckBoxParameter( "Bulk Type", bulkChoices ); Technology* techno = DataBase::getDB()->getTechnology(); - DbU::Unit transistorMinL = techno->getPhysicalRule( "transistorMinL" ).getValue(); - DbU::Unit transistorMaxL = techno->getPhysicalRule( "transistorMaxL" ).getValue(); - DbU::Unit transistorMinW = techno->getPhysicalRule( "transistorMinW" ).getValue(); - DbU::Unit transistorMaxW = techno->getPhysicalRule( "transistorMaxW" ).getValue(); + DbU::Unit transistorMinL = techno->getPhysicalRule( "transistorMinL" )->getValue(); + DbU::Unit transistorMaxL = techno->getPhysicalRule( "transistorMaxL" )->getValue(); + DbU::Unit transistorMinW = techno->getPhysicalRule( "transistorMinW" )->getValue(); + DbU::Unit transistorMaxW = techno->getPhysicalRule( "transistorMaxW" )->getValue(); _w = addStepParameter ( "W", transistorMinW, transistorMaxW, DbU::grid(1) ); _l = addStepParameter ( "L", transistorMinL, transistorMaxL, DbU::grid(1) ); diff --git a/hurricane/src/analog/hurricane/analog/AnalogCellExtension.h b/hurricane/src/analog/hurricane/analog/AnalogCellExtension.h index a6d993b9..45cdf6cd 100644 --- a/hurricane/src/analog/hurricane/analog/AnalogCellExtension.h +++ b/hurricane/src/analog/hurricane/analog/AnalogCellExtension.h @@ -49,6 +49,8 @@ namespace Analog { ~AnalogCellExtensionDatas (); template< typename Data > Data* get (); template< typename Data > void set ( Data* ); + private: + AnalogCellExtensionDatas ( const AnalogCellExtensionDatas& ) = delete; public: std::map _params; std::vector _datas; diff --git a/hurricane/src/hurricane/Cell.cpp b/hurricane/src/hurricane/Cell.cpp index b17a4460..970c2512 100644 --- a/hurricane/src/hurricane/Cell.cpp +++ b/hurricane/src/hurricane/Cell.cpp @@ -174,7 +174,7 @@ namespace Hurricane { string Cell::UniquifyRelation::JsonProperty::getTypeName () const - { return getString(Cell::UniquifyRelation::staticGetName()); } + { return "Cell::UniquifyRelation"; } void Cell::UniquifyRelation::JsonProperty::initialize () @@ -235,7 +235,7 @@ namespace Hurricane { string Cell::UniquifyRelation::JsonPropertyRef::getTypeName () const - { return string("&")+getString(Cell::UniquifyRelation::staticGetName()); } + { return "&Cell::UniquifyRelation"; } void Cell::UniquifyRelation::JsonPropertyRef::initialize () @@ -375,11 +375,13 @@ namespace Hurricane { string Cell::SlavedsRelation::JsonProperty::getTypeName () const - { return getString(Cell::SlavedsRelation::staticGetName()); } + { return "Cell::SlavedsRelation"; } void Cell::SlavedsRelation::JsonProperty::initialize () - { JsonTypes::registerType( new Cell::SlavedsRelation::JsonProperty (JsonWriter::RegisterMode) ); } + { + JsonTypes::registerType( new Cell::SlavedsRelation::JsonProperty (JsonWriter::RegisterMode) ); + } Cell::SlavedsRelation::JsonProperty* Cell::SlavedsRelation::JsonProperty::clone ( unsigned long flags ) const @@ -434,7 +436,7 @@ namespace Hurricane { string Cell::SlavedsRelation::JsonPropertyRef::getTypeName () const - { return string("&")+getString(Cell::SlavedsRelation::staticGetName()); } + { return "&Cell::SlavedsRelation"; } void Cell::SlavedsRelation::JsonPropertyRef::initialize () diff --git a/hurricane/src/hurricane/JsonObject.cpp b/hurricane/src/hurricane/JsonObject.cpp index fe3b0247..e8c67315 100644 --- a/hurricane/src/hurricane/JsonObject.cpp +++ b/hurricane/src/hurricane/JsonObject.cpp @@ -234,7 +234,7 @@ namespace Hurricane { void JsonTypes::_registerType ( JsonObject* object ) { if (_find(object->getTypeName())) { - throw Error( "JsonTypes::_registerType(): Attempt to register <%s> twice.", object->getTypeName().c_str() ); + throw Error( "JsonTypes::_registerType(): Attempt to register \"%s\" twice.", object->getTypeName().c_str() ); } _jsonObjects.insert( object ); } diff --git a/hurricane/src/hurricane/PhysicalRule.cpp b/hurricane/src/hurricane/PhysicalRule.cpp index d1307b65..ae4f36c4 100644 --- a/hurricane/src/hurricane/PhysicalRule.cpp +++ b/hurricane/src/hurricane/PhysicalRule.cpp @@ -22,16 +22,32 @@ namespace Hurricane { using namespace std; + string RuleStep::_getTypeName () const { return "RuleStep"; } + string RuleStep::_getString () const { return "<" + _getTypeName() + ">"; } + + Record* RuleStep::_getRecord () const + { + Record* record = new Record ( getString(this) ); + record->add( DbU::getValueSlot("_hValue" , &_hValue ) ); + record->add( DbU::getValueSlot("_vValue" , &_vValue ) ); + record->add( DbU::getValueSlot("_threshold", &_threshold) ); + return record; + } + + PhysicalRule::~PhysicalRule () { } string PhysicalRule::_getTypeName () const { return "PhysicalRule"; } - string PhysicalRule::_getString () const { return "<" + _getTypeName() + " " + getString(getName()) + ">"; } + string PhysicalRule::_getString () const + { return "<"+_getTypeName()+" \""+getString(getName())+"\""+" \""+getReference()+"\">"; } Record* PhysicalRule::_getRecord () const { Record* record = Super::_getRecord(); - record->add( getSlot( "_value", &_value ) ); + record->add( getSlot( "_doubleValue", &_doubleValue ) ); + record->add( getSlot( "_stepsValue" , &_stepsValue ) ); + record->add( getSlot( "_symmetric" , _symmetric ) ); return record; } diff --git a/hurricane/src/hurricane/Technology.cpp b/hurricane/src/hurricane/Technology.cpp index 56ee3ccf..60486a62 100644 --- a/hurricane/src/hurricane/Technology.cpp +++ b/hurricane/src/hurricane/Technology.cpp @@ -38,9 +38,7 @@ #include "hurricane/RegularLayer.h" #include "hurricane/ViaLayer.h" #include "hurricane/Error.h" -#include "hurricane/UnitRule.h" #include "hurricane/PhysicalRule.h" -#include "hurricane/TwoLayersPhysicalRule.h" namespace { @@ -77,10 +75,6 @@ namespace { void printRules ( const Technology::PhysicalRules& rules ) { for ( PhysicalRule* rule : rules ) printRule( rule ); } - - void printRules ( const Technology::TwoLayersRulesSet& rules ) - { for ( TwoLayersPhysicalRule* rule : rules ) printRule( rule ); } - #endif @@ -475,9 +469,9 @@ namespace Hurricane { for ( auto layerRuleSet : _twoLayersRules ) { for ( auto rule : layerRuleSet.second ) { - string flags = "Length"; - TwoLayersPhysicalRule* twoRule = dynamic_cast(rule); - if (twoRule and not twoRule->isSymetric()) + string flags = "Length"; + PhysicalRule* twoRule = dynamic_cast(rule); + if (twoRule and not twoRule->isSymmetric()) flags += "|Asymmetric"; o << " (" @@ -493,33 +487,33 @@ namespace Hurricane { } - UnitRule Technology::getUnitRule ( const string& ruleNameStr ) const + PhysicalRule* Technology::getUnitRule ( string ruleNameStr ) const { - Name ruleName ( ruleNameStr ); - UnitRule search ( ruleName, 0, "" ); + Name ruleName ( ruleNameStr ); + PhysicalRule search ( ruleName, "" ); UnitRules::iterator irule = _unitRules.find( &search ); if (irule == _unitRules.end()) { throw Error( "Technology::getUnitRule(): No rule named \"%s\"." , ruleNameStr.c_str() ); } - return **irule; + return *irule; } - PhysicalRule Technology::getPhysicalRule ( const string& ruleNameStr ) const + PhysicalRule* Technology::getPhysicalRule ( string ruleNameStr ) const { Name ruleName ( ruleNameStr ); - PhysicalRule search ( ruleName, 0, "" ); + PhysicalRule search ( ruleName, "" ); PhysicalRules::iterator irule = _noLayerRules.find( &search ); if (irule == _noLayerRules.end()) { throw Error( "Technology::getPhysicalRule(): No rule named \"%s\"." , ruleNameStr.c_str() ); } - return **irule; + return *irule; } - PhysicalRule Technology::getPhysicalRule ( const string& ruleNameStr, const string& layerStr ) const + PhysicalRule* Technology::getPhysicalRule ( string ruleNameStr, string layerStr ) const { Name layerName ( layerStr ); const Layer* layer = getLayer( layerName ); @@ -535,7 +529,7 @@ namespace Hurricane { const PhysicalRules& rules = ilayer->second; Name ruleName ( ruleNameStr ); - PhysicalRule search ( ruleName, 0, "" ); + PhysicalRule search ( ruleName, "" ); PhysicalRules::iterator irule = rules.find( &search ); if (irule == rules.end()) @@ -543,13 +537,13 @@ namespace Hurricane { , ruleNameStr.c_str() , getString(layer->getName()).c_str() ); - return **irule; + return *irule; } - PhysicalRule Technology::getPhysicalRule ( const string& ruleNameStr - , const string& layer1Str - , const string& layer2Str ) const + PhysicalRule* Technology::getPhysicalRule ( string ruleNameStr + , string layer1Str + , string layer2Str ) const { Name layer1Name ( layer1Str ); Name layer2Name ( layer2Str ); @@ -559,23 +553,23 @@ namespace Hurricane { LayerPair searchLayerPair(layer1, layer2); TwoLayersRules::const_iterator ilp = _twoLayersRules.find( searchLayerPair ); if (ilp != _twoLayersRules.end()) { - const TwoLayersRulesSet& rules = ilp->second; - Name ruleName ( ruleNameStr ); - TwoLayersPhysicalRule search ( ruleName, 0, "", true ); + const PhysicalRules& rules = ilp->second; + Name ruleName ( ruleNameStr ); + PhysicalRule search ( ruleName, "" ); - TwoLayersRulesSet::const_iterator irule = rules.find( &search ); - if (irule != rules.end()) return **irule; + PhysicalRules::const_iterator irule = rules.find( &search ); + if (irule != rules.end()) return *irule; } LayerPair reverseSearchLayerPair ( layer2, layer1 ); ilp = _twoLayersRules.find( reverseSearchLayerPair ); if (ilp != _twoLayersRules.end()) { - const TwoLayersRulesSet& rules = ilp->second; - Name ruleName ( ruleNameStr ); - TwoLayersPhysicalRule search ( ruleName, 0, "", true ); + const PhysicalRules& rules = ilp->second; + Name ruleName ( ruleNameStr ); + PhysicalRule search ( ruleName, "" ); - TwoLayersRulesSet::const_iterator irule = rules.find( &search ); - if (irule != rules.end() and (*irule)->isSymetric() ) return **irule; + PhysicalRules::const_iterator irule = rules.find( &search ); + if (irule != rules.end() and (*irule)->isSymmetric() ) return *irule; } throw Error( "Technology::getPhysicalRule(): No rule named \"%s\" for pair (%s,%s)." @@ -583,69 +577,75 @@ namespace Hurricane { } - void Technology::addUnitRule ( const string& name - , double value - , const string& reference ) + PhysicalRule* Technology::addUnitRule ( string name + , string reference ) { - Name ruleName ( name ); - UnitRule search ( ruleName, 0, "" ); + Name ruleName ( name ); + PhysicalRule search ( ruleName, "" ); UnitRules::iterator irule = _unitRules.find( &search ); if (irule != _unitRules.end()) throw Error( "Technology::addUnitRule(): Attempt to redefine rule \"%s\"." , name.c_str() ); - _unitRules.insert( new UnitRule ( ruleName, value, reference ) ); + PhysicalRule* rule = new PhysicalRule ( ruleName, reference ); + _unitRules.insert( rule ); + return rule; } - void Technology::addPhysicalRule ( const string& name - , DbU::Unit value - , const string& reference ) + PhysicalRule* Technology::addPhysicalRule ( string name, string reference ) { Name ruleName ( name ); - PhysicalRule search ( ruleName, 0, "" ); + PhysicalRule search ( ruleName, "" ); PhysicalRules::iterator irule = _noLayerRules.find( &search ); if (irule != _noLayerRules.end()) throw Error( "Technology::addPhysicalRule(): Attempt to redefine rule \"%s\"." , name.c_str() ); - _noLayerRules.insert( new PhysicalRule ( ruleName, value, reference ) ); + PhysicalRule* rule = new PhysicalRule ( ruleName, reference ); + _noLayerRules.insert( rule ); + + return rule; } - void Technology::addPhysicalRule ( const string& ruleNameStr - , const string& layerStr - , DbU::Unit value - , const string& reference ) + void Technology::_addPhysicalRule ( string layerStr, PhysicalRule* rule ) { - Name ruleName ( ruleNameStr ); Name layerName ( layerStr ); - const Layer* layer = getLayer( layerName ); + const Layer* layer = getLayer( layerName ); OneLayerRules::iterator ilayer = _oneLayerRules.find(layer); if (ilayer == _oneLayerRules.end()) { pair result = _oneLayerRules.insert( OneLayerRules::value_type( layer, PhysicalRules()) ); - result.first->second.insert( new PhysicalRule(ruleName,value,reference) ); + result.first->second.insert( rule ); } else { PhysicalRules& rules = ilayer->second; - PhysicalRule search ( ruleName, 0, "" ); + PhysicalRule search ( rule->getName(), "" ); if (rules.find(&search) != rules.end()) { + delete rule; throw Error( "Technology::addPhysicalRule(): Attempt to redefine rule \"%s\" for layer \"%s\"." - , ruleNameStr.c_str(), layerStr.c_str() ); + , getString(rule->getName()).c_str(), layerStr.c_str() ); } - - rules.insert( new PhysicalRule(ruleName,value,reference) ); + rules.insert( rule ); } } - void Technology::addPhysicalRule ( const string& ruleNameStr - , const string& layer1Str - , const string& layer2Str - , bool symetric - , DbU::Unit value - , const string& reference ) + PhysicalRule* Technology::addPhysicalRule ( string ruleNameStr + , string layerStr + , string reference ) + { + PhysicalRule* rule = new PhysicalRule ( ruleNameStr, reference ); + _addPhysicalRule( layerStr, rule ); + return rule; + } + + + PhysicalRule* Technology::addPhysicalRule ( string ruleNameStr + , string layer1Str + , string layer2Str + , string reference ) { Name ruleName ( ruleNameStr ); Name layer1Name ( layer1Str ); @@ -654,21 +654,25 @@ namespace Hurricane { const Layer* layer1 = getLayer(layer1Name); const Layer* layer2 = getLayer(layer2Name); LayerPair layerPair ( layer1, layer2 ); - - TwoLayersRules::iterator ilp = _twoLayersRules.find( layerPair ); + + PhysicalRule* rule = new PhysicalRule ( ruleName, reference ); + TwoLayersRules::iterator ilp = _twoLayersRules.find( layerPair ); if (ilp == _twoLayersRules.end()) { pair result = - _twoLayersRules.insert( TwoLayersRules::value_type(layerPair,TwoLayersRulesSet()) ); + _twoLayersRules.insert( TwoLayersRules::value_type(layerPair,PhysicalRules()) ); - result.first->second.insert( new TwoLayersPhysicalRule(ruleName,value,reference,symetric) ); + result.first->second.insert( rule ); } else { - TwoLayersRulesSet& rules = ilp->second; - TwoLayersPhysicalRule search ( ruleName, 0, "", true ); + PhysicalRules& rules = ilp->second; + PhysicalRule search ( ruleName, "" ); if (rules.find(&search) != rules.end()) { + delete rule; throw Error( "Technology::addPhysicalRule(): Attempt to redefine rule \"%s\"." , ruleNameStr.c_str() ); } - rules.insert( new TwoLayersPhysicalRule(ruleName,value,reference,symetric) ); + rules.insert( rule ); } + + return rule; } diff --git a/hurricane/src/hurricane/hurricane/Box.h b/hurricane/src/hurricane/hurricane/Box.h index cbe646fe..ae949785 100644 --- a/hurricane/src/hurricane/hurricane/Box.h +++ b/hurricane/src/hurricane/hurricane/Box.h @@ -145,7 +145,7 @@ class JsonBox : public JsonObject { } // End of Hurricane namespace. -INSPECTOR_PV_SUPPORT(Hurricane::Box); +INSPECTOR_PR_SUPPORT(Hurricane::Box); #endif // HURRICANE_BOX diff --git a/hurricane/src/hurricane/hurricane/Cell.h b/hurricane/src/hurricane/hurricane/Cell.h index 0bac8b8e..9b808f8f 100644 --- a/hurricane/src/hurricane/hurricane/Cell.h +++ b/hurricane/src/hurricane/hurricane/Cell.h @@ -586,6 +586,7 @@ INSPECTOR_P_SUPPORT(Hurricane::Cell::NetMap); INSPECTOR_P_SUPPORT(Hurricane::Cell::PinMap); INSPECTOR_P_SUPPORT(Hurricane::Cell::SliceMap); INSPECTOR_P_SUPPORT(Hurricane::Cell::MarkerSet); +INSPECTOR_PR_SUPPORT(Hurricane::Cell::SlavedsRelation); #endif // HURRICANE_CELL_H diff --git a/hurricane/src/hurricane/hurricane/Commons.h b/hurricane/src/hurricane/hurricane/Commons.h index b8ba0601..550986e1 100644 --- a/hurricane/src/hurricane/hurricane/Commons.h +++ b/hurricane/src/hurricane/hurricane/Commons.h @@ -29,8 +29,8 @@ // +-----------------------------------------------------------------+ -#ifndef HURRICANE_COMMONS_H -#define HURRICANE_COMMONS_H +#pragma once +#define HURRICANE_COMMONS_H #include #include @@ -179,34 +179,34 @@ template inline std::string getString ( Data data ) // "const &" flavors. -template<> inline std::string getString ( const bool b ) +template<> inline std::string getString ( const bool& b ) { return (b)?"True":"False" ; } -template<> inline std::string getString ( const int i ) +template<> inline std::string getString ( const int& i ) { std::ostringstream os (""); os << i; return os.str(); } -template<> inline std::string getString ( const long l ) +template<> inline std::string getString ( const long& l ) { std::ostringstream os (""); os << l; return os.str(); } -template<> inline std::string getString ( const unsigned int u ) +template<> inline std::string getString ( const unsigned int& u ) { std::ostringstream os (""); os << u; return os.str(); } -template<> inline std::string getString ( const unsigned long ul ) +template<> inline std::string getString ( const unsigned long& ul ) { std::ostringstream os (""); os << ul; return os.str(); } -template<> inline std::string getString ( const unsigned long long ull ) +template<> inline std::string getString ( const unsigned long long& ull ) { std::ostringstream os (""); os << ull; return os.str(); } -template<> inline std::string getString ( const unsigned short int us ) +template<> inline std::string getString ( const unsigned short int& us ) { std::ostringstream os (""); os << us; return os.str(); } -template<> inline std::string getString ( const float f ) +template<> inline std::string getString ( const float& f ) { std::ostringstream os (""); os << f; return os.str(); } -template<> inline std::string getString ( const double d ) +template<> inline std::string getString ( const double& d ) { std::ostringstream os; os << d; return os.str(); } -template<> inline std::string getString ( const std::string s ) +template<> inline std::string getString ( const std::string& s ) { return s; } // "const *" flavors. @@ -465,13 +465,13 @@ inline Hurricane::Record* getRecord ( const std::array& v ) // ------------------------------------------------------------------- -// Inspector Support for : "[const] std::vector*". +// Inspector Support for : "std::vector*". template inline std::string getString ( std::vector* v ) { - std::string name = "const std::vector:"; + std::string name = "std::vector*:"; return name + getString(v->size()); } @@ -481,7 +481,36 @@ inline Hurricane::Record* getRecord ( std::vector* v ) { Hurricane::Record* record = NULL; if ( !v->empty() ) { - record = new Hurricane::Record ( "std::vector" ); + record = new Hurricane::Record ( "std::vector*" ); + unsigned n = 0; + typename std::vector::iterator iterator = v->begin(); + while ( iterator != v->end() ) { + record->add ( getSlot(getString(n++), &(*iterator)) ); + ++iterator; + } + } + return record; +} + + +// ------------------------------------------------------------------- +// Inspector Support for : "std::vector*". + + +template +inline std::string getString ( std::vector* v ) +{ + std::string name = "std::vector*:"; + return name + getString(v->size()); +} + + +template +inline Hurricane::Record* getRecord ( std::vector* v ) +{ + Hurricane::Record* record = NULL; + if ( !v->empty() ) { + record = new Hurricane::Record ( "std::vector*" ); unsigned n = 0; typename std::vector::iterator iterator = v->begin(); while ( iterator != v->end() ) { @@ -493,10 +522,14 @@ inline Hurricane::Record* getRecord ( std::vector* v ) } +// ------------------------------------------------------------------- +// Inspector Support for : "const std::vector*". + + template inline std::string getString ( const std::vector* v ) { - std::string name = "const std::vector:"; + std::string name = "const std::vector*:"; return name + getString(v->size()); } @@ -506,11 +539,40 @@ inline Hurricane::Record* getRecord ( const std::vector* v ) { Hurricane::Record* record = NULL; if ( !v->empty() ) { - record = new Hurricane::Record ( "const std::vector" ); + record = new Hurricane::Record ( "const std::vector*" ); unsigned n = 0; typename std::vector::const_iterator iterator = v->begin(); while ( iterator != v->end() ) { - record->add ( getSlot(getString(n++), *iterator) ); + record->add ( getSlot(getString(n++), &(*iterator)) ); + ++iterator; + } + } + return record; +} + + +// ------------------------------------------------------------------- +// Inspector Support for : "const std::vector*". + + +template +inline std::string getString ( const std::vector* v ) +{ + std::string name = "const std::vector*:"; + return name + getString(v->size()); +} + + +template +inline Hurricane::Record* getRecord ( const std::vector* v ) +{ + Hurricane::Record* record = NULL; + if (not v->empty()) { + record = new Hurricane::Record ( "const std::vector*" ); + size_t n = 0; + typename std::vector::const_iterator iterator = v->begin(); + while (iterator != v->end()) { + record->add ( getSlot(getString(n++), *iterator) ); ++iterator; } } @@ -921,28 +983,14 @@ inline Hurricane::Record* getRecord ( const std::multiset* s ) IOSTREAM_REFERENCE_SUPPORT(Data) -# define INSPECTOR_V_SUPPORT(Data) \ - GETRECORD_VALUE_SUPPORT(Data) \ - GETSTRING_VALUE_SUPPORT(Data) \ - IOSTREAM_VALUE_SUPPORT(Data) - - # define INSPECTOR_PR_SUPPORT(Data) \ - GETRECORD_POINTER_SUPPORT(Data) \ GETSTRING_POINTER_SUPPORT(Data) \ - GETRECORD_REFERENCE_SUPPORT(Data) \ GETSTRING_REFERENCE_SUPPORT(Data) \ - IOSTREAM_POINTER_SUPPORT(Data) \ - IOSTREAM_REFERENCE_SUPPORT(Data) - - -# define INSPECTOR_PV_SUPPORT(Data) \ - GETRECORD_POINTER_SUPPORT(Data) \ - GETSTRING_POINTER_SUPPORT(Data) \ - GETRECORD_VALUE_SUPPORT(Data) \ GETSTRING_VALUE_SUPPORT(Data) \ IOSTREAM_POINTER_SUPPORT(Data) \ - IOSTREAM_VALUE_SUPPORT(Data) + IOSTREAM_REFERENCE_SUPPORT(Data) \ + GETRECORD_POINTER_SUPPORT(Data) \ + GETRECORD_REFERENCE_SUPPORT(Data) #include "hurricane/Tabulation.h" @@ -1071,6 +1119,3 @@ extern tstream cdebug; #include "hurricane/Initializer.h" #include "hurricane/JsonWriter.h" #include "hurricane/JsonObject.h" - - -#endif // HURRICANE_COMMONS_H diff --git a/hurricane/src/hurricane/hurricane/Flags.h b/hurricane/src/hurricane/hurricane/Flags.h index b73a9c22..9f76913a 100644 --- a/hurricane/src/hurricane/hurricane/Flags.h +++ b/hurricane/src/hurricane/hurricane/Flags.h @@ -181,6 +181,6 @@ namespace Hurricane { } // Hurricane namespace. -INSPECTOR_PV_SUPPORT(Hurricane::BaseFlags); +INSPECTOR_PR_SUPPORT(Hurricane::BaseFlags); # endif // HURRICANE_BASE_FLAGS_H diff --git a/hurricane/src/hurricane/hurricane/Interval.h b/hurricane/src/hurricane/hurricane/Interval.h index fdaea5bf..6a2d66a6 100644 --- a/hurricane/src/hurricane/hurricane/Interval.h +++ b/hurricane/src/hurricane/hurricane/Interval.h @@ -136,7 +136,7 @@ inline void jsonWrite ( JsonWriter* w, const std::string& key, const Hurricane: w->endArray(); } -INSPECTOR_PV_SUPPORT(Hurricane::Interval); +INSPECTOR_PR_SUPPORT(Hurricane::Interval); #endif // HURRICANE_INTERVAL_H diff --git a/hurricane/src/hurricane/hurricane/Layer.h b/hurricane/src/hurricane/hurricane/Layer.h index 805b372d..44ba202c 100644 --- a/hurricane/src/hurricane/hurricane/Layer.h +++ b/hurricane/src/hurricane/hurricane/Layer.h @@ -181,7 +181,7 @@ namespace Hurricane { INSPECTOR_P_SUPPORT(Hurricane::Layer); -INSPECTOR_PV_SUPPORT(Hurricane::Layer::Mask); +INSPECTOR_PR_SUPPORT(Hurricane::Layer::Mask); #endif // HURRICANE_LAYER_H diff --git a/hurricane/src/hurricane/hurricane/Name.h b/hurricane/src/hurricane/hurricane/Name.h index 792e0937..61ffcdfa 100644 --- a/hurricane/src/hurricane/hurricane/Name.h +++ b/hurricane/src/hurricane/hurricane/Name.h @@ -17,9 +17,8 @@ // not, see . // **************************************************************************************************** -#ifndef HURRICANE_NAME -#define HURRICANE_NAME +#pragma once #include "hurricane/Commons.h" #include "hurricane/Names.h" @@ -93,7 +92,35 @@ class Name { } // End of Hurricane namespace. -INSPECTOR_PV_SUPPORT(Hurricane::Name); +//template<> inline std::string getString( Hurricane::Name& data ) +//{ return data._getString(); } +// +//template<> inline std::string getString( const Hurricane::Name& data ) +//{ return data._getString(); } +// +// +//template<> inline std::string getString( Hurricane::Name data ) +//{ return data._getString(); } +// +//template<> inline std::string getString( const Hurricane::Name data ) +//{ return data._getString(); } +// +// +//inline std::ostream& operator<< ( std::ostream& o, Hurricane::Name& d ) +//{ return o << getString(d); } +// +//inline std::ostream& operator<< ( std::ostream& o, const Hurricane::Name& d ) +//{ return o << getString(d); } +// +// +//template<> inline Hurricane::Record* getRecord( Hurricane::Name& data ) +//{ return data._getRecord(); } +// +//template<> inline Hurricane::Record* getRecord( const Hurricane::Name& data ) +//{ return data._getRecord(); } + + +INSPECTOR_PR_SUPPORT(Hurricane::Name); inline void jsonWrite ( JsonWriter* w, Hurricane::Name name ) { w->write( getString(name).c_str() ); } @@ -102,9 +129,6 @@ inline void jsonWrite ( JsonWriter* w, const std::string& key, Hurricane::Name { w->key( key ); w->write( getString(name).c_str() ); } -#endif // HURRICANE_NAME - - // **************************************************************************************************** // Copyright (c) BULL S.A. 2000-2018, All Rights Reserved // **************************************************************************************************** diff --git a/hurricane/src/hurricane/hurricane/Net.h b/hurricane/src/hurricane/hurricane/Net.h index 0423b303..f95e2835 100644 --- a/hurricane/src/hurricane/hurricane/Net.h +++ b/hurricane/src/hurricane/hurricane/Net.h @@ -430,8 +430,8 @@ inline Hurricane::Record* getRecord INSPECTOR_P_SUPPORT(Hurricane::Net); INSPECTOR_P_SUPPORT(Hurricane::Net::ComponentSet); INSPECTOR_P_SUPPORT(Hurricane::Net::RubberSet); -INSPECTOR_PV_SUPPORT(Hurricane::Net::Type); -INSPECTOR_PV_SUPPORT(Hurricane::Net::Direction); +INSPECTOR_PR_SUPPORT(Hurricane::Net::Type); +INSPECTOR_PR_SUPPORT(Hurricane::Net::Direction); IOSTREAM_POINTER_SUPPORT(Hurricane::Net::Type::Code); IOSTREAM_VALUE_SUPPORT(Hurricane::Net::Type::Code); IOSTREAM_POINTER_SUPPORT(Hurricane::Net::Direction::Code); diff --git a/hurricane/src/hurricane/hurricane/Occurrence.h b/hurricane/src/hurricane/hurricane/Occurrence.h index e054dad8..eaf18c51 100644 --- a/hurricane/src/hurricane/hurricane/Occurrence.h +++ b/hurricane/src/hurricane/hurricane/Occurrence.h @@ -123,7 +123,7 @@ class JsonOccurrence : public JsonObject { } // End of Hurricane namespace. -INSPECTOR_PV_SUPPORT(Hurricane::Occurrence); +INSPECTOR_PR_SUPPORT(Hurricane::Occurrence); #endif // HURRICANE_OCCURENCE diff --git a/hurricane/src/hurricane/hurricane/Path.h b/hurricane/src/hurricane/hurricane/Path.h index 96ac1526..b7de9067 100644 --- a/hurricane/src/hurricane/hurricane/Path.h +++ b/hurricane/src/hurricane/hurricane/Path.h @@ -112,7 +112,7 @@ class Path { } // End of Hurricane namespace. -INSPECTOR_PV_SUPPORT(Hurricane::Path); +INSPECTOR_PR_SUPPORT(Hurricane::Path); #endif // HURRICANE_PATH diff --git a/hurricane/src/hurricane/hurricane/PhysicalRule.h b/hurricane/src/hurricane/hurricane/PhysicalRule.h index 44dd0727..4d12b80f 100644 --- a/hurricane/src/hurricane/hurricane/PhysicalRule.h +++ b/hurricane/src/hurricane/hurricane/PhysicalRule.h @@ -14,9 +14,8 @@ // +-----------------------------------------------------------------+ -#ifndef HURRICANE_PHYSICAL_RULE_H -#define HURRICANE_PHYSICAL_RULE_H - +#pragma once +#include #include "hurricane/DbU.h" #include "hurricane/Rule.h" @@ -24,43 +23,146 @@ namespace Hurricane { + class RuleStep { + public: + inline RuleStep ( Hurricane::DbU::Unit uValue ); + inline RuleStep ( Hurricane::DbU::Unit hValue, Hurricane::DbU::Unit vValue ); + inline Hurricane::DbU::Unit getValue () const; + inline Hurricane::DbU::Unit getHValue () const; + inline Hurricane::DbU::Unit getVValue () const; + inline Hurricane::DbU::Unit getThreshold () const; + inline void setThreshold ( Hurricane::DbU::Unit ); + public: + std::string _getTypeName () const; + std::string _getString () const; + Record* _getRecord () const; + private: + Hurricane::DbU::Unit _hValue; + Hurricane::DbU::Unit _vValue; + Hurricane::DbU::Unit _threshold; + }; + + + inline RuleStep::RuleStep ( Hurricane::DbU::Unit uValue ) + : _hValue (uValue) + , _vValue (uValue) + , _threshold(0) + { } + + inline RuleStep::RuleStep ( Hurricane::DbU::Unit hValue, Hurricane::DbU::Unit vValue ) + : _hValue (hValue) + , _vValue (vValue) + , _threshold(0) + { } + + inline Hurricane::DbU::Unit RuleStep::getValue () const { return _hValue; } + inline Hurricane::DbU::Unit RuleStep::getHValue () const { return _hValue; } + inline Hurricane::DbU::Unit RuleStep::getVValue () const { return _vValue; } + inline Hurricane::DbU::Unit RuleStep::getThreshold () const { return _threshold; } + inline void RuleStep::setThreshold ( Hurricane::DbU::Unit t ) { _threshold = t; } + + class PhysicalRule : public Rule { public: typedef Rule Super; + typedef std::vector Steps; public: - inline PhysicalRule ( const Name& name, DbU::Unit value, const std::string& reference ); - inline PhysicalRule ( const PhysicalRule& rule ); - virtual ~PhysicalRule (); - inline DbU::Unit getValue () const; + inline PhysicalRule ( const Name& name, const std::string& reference ); + inline PhysicalRule ( const PhysicalRule& rule ); + virtual ~PhysicalRule (); + inline bool isDouble () const; + inline bool isDbU () const; + inline bool isSymmetric () const; + inline bool hasSteps () const; + inline void setSymmetric ( bool ); + inline double getDoubleValue () const; + inline DbU::Unit getValue ( Hurricane::DbU::Unit length=0, bool hDir=true ) const; + inline void addValue ( double ); + inline void addValue ( Hurricane::DbU::Unit value + , Hurricane::DbU::Unit maxLength ); + inline void addValue ( Hurricane::DbU::Unit hValue + , Hurricane::DbU::Unit vValue + , Hurricane::DbU::Unit maxLength ); public: - // Inspector support. - virtual std::string _getTypeName () const; - virtual std::string _getString () const; - virtual Record* _getRecord () const; + virtual std::string _getTypeName () const; + virtual std::string _getString () const; + virtual Record* _getRecord () const; + public: + inline void _addValue ( const RuleStep& ); private: - const Hurricane::DbU::Unit _value; + Steps _stepsValue; + double _doubleValue; + bool _symmetric; }; inline PhysicalRule::PhysicalRule ( const Name& name - , DbU::Unit value , const std::string& reference ) : Rule(name,reference) - , _value(value) + , _stepsValue () + , _doubleValue(0.0) + , _symmetric (true) { } - + + inline PhysicalRule::PhysicalRule ( const PhysicalRule& rule ) : Rule(rule.getName(),rule.getReference()) - , _value(rule._value) + , _stepsValue (rule._stepsValue) + , _doubleValue(rule._doubleValue) { } - Hurricane::DbU::Unit PhysicalRule::getValue () const { return _value; } + inline bool PhysicalRule::isDouble () const { return _doubleValue != 0; } + inline bool PhysicalRule::isDbU () const { return not _stepsValue.empty(); } + inline bool PhysicalRule::isSymmetric () const { return _symmetric; } + inline bool PhysicalRule::hasSteps () const { return not _stepsValue.size() > 1; } + inline double PhysicalRule::getDoubleValue () const { return _doubleValue; } + inline void PhysicalRule::setSymmetric ( bool state ) { _symmetric = state; } + inline void PhysicalRule::addValue ( double value ) { _doubleValue = value; } + + + inline Hurricane::DbU::Unit PhysicalRule::getValue ( Hurricane::DbU::Unit length, bool hDir ) const + { + if (_stepsValue.empty()) return 0; + for ( const RuleStep& step : _stepsValue ) { + if (length < step.getThreshold()) { + return (hDir) ? step.getHValue() : step.getVValue(); + } + } + return (hDir) ? _stepsValue.back().getHValue() : _stepsValue.back().getVValue();; + } + + + inline void PhysicalRule::addValue ( Hurricane::DbU::Unit value, Hurricane::DbU::Unit maxLength ) + { + RuleStep step ( value ); + step.setThreshold( maxLength ); + _addValue( step ); + } + + + inline void PhysicalRule::addValue ( Hurricane::DbU::Unit hValue, Hurricane::DbU::Unit vValue, Hurricane::DbU::Unit maxLength ) + { + RuleStep step ( hValue, vValue ); + step.setThreshold( maxLength ); + _addValue( step ); + } + + + inline void PhysicalRule::_addValue ( const RuleStep& step ) + { + for ( auto istep = _stepsValue.begin() ; istep != _stepsValue.end() ; ++istep ) { + if (step.getThreshold() < (*istep).getThreshold()) { + _stepsValue.insert( istep, step ); + return; + } + } + _stepsValue.push_back( step ); + } } // Hurricane namespace. INSPECTOR_P_SUPPORT(Hurricane::PhysicalRule); - -#endif // HURRICANE_PHYSICAL_RULE_H +INSPECTOR_PR_SUPPORT(Hurricane::RuleStep); diff --git a/hurricane/src/hurricane/hurricane/Pin.h b/hurricane/src/hurricane/hurricane/Pin.h index 49c295ba..aa70fc7b 100644 --- a/hurricane/src/hurricane/hurricane/Pin.h +++ b/hurricane/src/hurricane/hurricane/Pin.h @@ -156,8 +156,8 @@ class Pin : public Contact { INSPECTOR_P_SUPPORT(Hurricane::Pin); -INSPECTOR_PV_SUPPORT(Hurricane::Pin::AccessDirection); -INSPECTOR_PV_SUPPORT(Hurricane::Pin::PlacementStatus); +INSPECTOR_PR_SUPPORT(Hurricane::Pin::AccessDirection); +INSPECTOR_PR_SUPPORT(Hurricane::Pin::PlacementStatus); #endif // HURRICANE_PIN diff --git a/hurricane/src/hurricane/hurricane/Point.h b/hurricane/src/hurricane/hurricane/Point.h index ec91dd55..7021fdb7 100644 --- a/hurricane/src/hurricane/hurricane/Point.h +++ b/hurricane/src/hurricane/hurricane/Point.h @@ -100,7 +100,7 @@ class JsonPoint : public JsonObject { } // End of Hurricane namespace. -INSPECTOR_PV_SUPPORT(Hurricane::Point); +INSPECTOR_PR_SUPPORT(Hurricane::Point); #endif // HURRICANE_POINT diff --git a/hurricane/src/hurricane/hurricane/Property.h b/hurricane/src/hurricane/hurricane/Property.h index 51fa4861..6a6797ad 100644 --- a/hurricane/src/hurricane/hurricane/Property.h +++ b/hurricane/src/hurricane/hurricane/Property.h @@ -364,7 +364,7 @@ namespace Hurricane { string StandardPrivateProperty::_getString () const { string s = PrivateProperty::_getString(); - s.insert(s.length() - 1, " " + getString(_value)); + s.insert(s.length() - 1, " " + getString(_value)); return s; } diff --git a/hurricane/src/hurricane/hurricane/Rule.h b/hurricane/src/hurricane/hurricane/Rule.h index 57b1be4a..469e6f79 100644 --- a/hurricane/src/hurricane/hurricane/Rule.h +++ b/hurricane/src/hurricane/hurricane/Rule.h @@ -14,9 +14,7 @@ // +-----------------------------------------------------------------+ -#ifndef HURRICANE_RULE_H -#define HURRICANE_RULE_H - +#pragma once #include #include "hurricane/Name.h" @@ -52,5 +50,3 @@ namespace Hurricane { INSPECTOR_P_SUPPORT(Hurricane::Rule); - -#endif // HURRICANE_RULE_H diff --git a/hurricane/src/hurricane/hurricane/Tabulation.h b/hurricane/src/hurricane/hurricane/Tabulation.h index cb8e2d73..e5fa9ac7 100644 --- a/hurricane/src/hurricane/hurricane/Tabulation.h +++ b/hurricane/src/hurricane/hurricane/Tabulation.h @@ -87,7 +87,7 @@ extern Tabulation tab; } // End of Hurricane namespace. -INSPECTOR_PV_SUPPORT(Hurricane::Tabulation); +INSPECTOR_PR_SUPPORT(Hurricane::Tabulation); diff --git a/hurricane/src/hurricane/hurricane/Technology.h b/hurricane/src/hurricane/hurricane/Technology.h index 7d1c1273..ee946ad8 100644 --- a/hurricane/src/hurricane/hurricane/Technology.h +++ b/hurricane/src/hurricane/hurricane/Technology.h @@ -29,9 +29,7 @@ // +-----------------------------------------------------------------+ -#ifndef HURRICANE_TECHNOLOGY_H -#define HURRICANE_TECHNOLOGY_H - +#pragma once #include #include #include "hurricane/Mask.h" @@ -44,9 +42,7 @@ #include "hurricane/DeviceDescriptor.h" #include "hurricane/ModelDescriptor.h" #include "hurricane/Rule.h" -#include "hurricane/UnitRule.h" #include "hurricane/PhysicalRule.h" -#include "hurricane/TwoLayersPhysicalRule.h" namespace Hurricane { @@ -74,18 +70,15 @@ namespace Hurricane { struct RuleNameCompare { inline bool operator() ( const PhysicalRule* rule1 , const PhysicalRule* rule2 ) const { return rule1->getName() < rule2->getName(); } - inline bool operator() ( const UnitRule* rule1 , const UnitRule* rule2 ) const - { return rule1->getName() < rule2->getName(); } inline bool operator() ( const Rule* rule1 , const Rule* rule2 ) const { return rule1->getName() < rule2->getName(); } }; public: typedef std::pair LayerPair; - typedef std::set UnitRules; + typedef std::set UnitRules; typedef std::set PhysicalRules; - typedef std::set TwoLayersRulesSet; typedef std::map OneLayerRules; - typedef std::map TwoLayersRules; + typedef std::map TwoLayersRules; public: // Sub-class : LayerMap. @@ -102,86 +95,83 @@ namespace Hurricane { public: // Constructor. - static Technology* create ( DataBase* , const Name& ); - // Accessors. - inline bool isMetal ( const Layer* ) const; - inline DataBase* getDataBase () const; - inline const Name& getName () const; - inline Layer* getLayer ( const Name& ) const; - BasicLayer* getBasicLayer ( const Name& ) const; - RegularLayer* getRegularLayer ( const Name& ) const; - ViaLayer* getViaLayer ( const Name& ) const; - inline Layers getLayers () const; - BasicLayers getBasicLayers () const; - BasicLayers getBasicLayers ( const Layer::Mask& ) const; - RegularLayers getRegularLayers () const; - ViaLayers getViaLayers () const; - Layer* getLayer ( const Layer::Mask&, bool useSymbolic=true ) const; - Layer* getMetalAbove ( const Layer*, bool useSymbolic=true ) const; - Layer* getMetalBelow ( const Layer*, bool useSymbolic=true ) const; - Layer* getCutAbove ( const Layer*, bool useSymbolic=true ) const; - Layer* getCutBelow ( const Layer*, bool useSymbolic=true ) const; - Layer* getViaBetween ( const Layer*, const Layer*, bool useSymbolic=true ) const; - Layer* getNthMetal ( int ) const; - Layer* getNthCut ( int ) const; - DeviceDescriptor* getDeviceDescriptor ( const Name& ); - ModelDescriptor* getModelDescriptor (const Name& ); - inline ModelDescriptors& getModelDescriptors (); - UnitRule getUnitRule ( const std::string& ruleName ) const; - PhysicalRule getPhysicalRule ( const std::string& ruleName ) const; - PhysicalRule getPhysicalRule ( const std::string& ruleName - , const std::string& layerName ) const; - PhysicalRule getPhysicalRule ( const std::string& ruleName - , const std::string& layer1Name - , const std::string& layer2Name ) const; - inline const UnitRules& getUnitRules () const; - inline const PhysicalRules& getNoLayerRules () const; - inline const OneLayerRules& getOneLayerRules () const; - inline const TwoLayersRules& getTwoLayersRules () const; - void toDtr ( std::ostream& ); - inline void setName ( const std::string& name ); - // Updators. - void setName ( const Name& ); - bool setSymbolicLayer ( const Name& ); - bool setSymbolicLayer ( const Layer* ); - DeviceDescriptor* addDeviceDescriptor ( const Name& ); - ModelDescriptor* addModelDescriptor ( const Name& name - , const Name& simul - , const Name& model - , std::string netlist - , const Name& name_n - , const Name& name_p - , bool precise ); - void addUnitRule ( const std::string& ruleName - , double value - , const std::string& reference ); - void addPhysicalRule ( const std::string& ruleName - , DbU::Unit value - , const std::string& reference ); - void addPhysicalRule ( const std::string& ruleName - , const std::string& layerName - , DbU::Unit value - , const std::string& reference); - void addPhysicalRule ( const std::string& ruleName - , const std::string& layer1Name - , const std::string& layer2Name - , bool symetric - , DbU::Unit value - , const std::string& reference ); - // Others. - inline LayerMap& _getLayerMap (); - inline LayerMaskMap& _getLayerMaskMap (); - void _insertInLayerMaskMap ( Layer* ); - void _removeFromLayerMaskMap ( Layer* ); - inline Layer::Mask& _getCutMask (); - inline Layer::Mask& _getMetalMask (); - void _onDbuChange ( float scale ); - // Hurricane Managment. - virtual void _toJson ( JsonWriter* ) const; - virtual void _toJsonCollections ( JsonWriter* ) const; - virtual string _getTypeName () const; - virtual string _getString () const; - virtual Record* _getRecord () const; + static Technology* create ( DataBase* , const Name& ); + // Accessors. + inline bool isMetal ( const Layer* ) const; + inline DataBase* getDataBase () const; + inline const Name& getName () const; + inline Layer* getLayer ( const Name& ) const; + BasicLayer* getBasicLayer ( const Name& ) const; + RegularLayer* getRegularLayer ( const Name& ) const; + ViaLayer* getViaLayer ( const Name& ) const; + inline Layers getLayers () const; + BasicLayers getBasicLayers () const; + BasicLayers getBasicLayers ( const Layer::Mask& ) const; + RegularLayers getRegularLayers () const; + ViaLayers getViaLayers () const; + Layer* getLayer ( const Layer::Mask&, bool useSymbolic=true ) const; + Layer* getMetalAbove ( const Layer*, bool useSymbolic=true ) const; + Layer* getMetalBelow ( const Layer*, bool useSymbolic=true ) const; + Layer* getCutAbove ( const Layer*, bool useSymbolic=true ) const; + Layer* getCutBelow ( const Layer*, bool useSymbolic=true ) const; + Layer* getViaBetween ( const Layer*, const Layer*, bool useSymbolic=true ) const; + Layer* getNthMetal ( int ) const; + Layer* getNthCut ( int ) const; + DeviceDescriptor* getDeviceDescriptor ( const Name& ); + ModelDescriptor* getModelDescriptor (const Name& ); + inline ModelDescriptors& getModelDescriptors (); + PhysicalRule* getUnitRule ( std::string ruleName ) const; + PhysicalRule* getPhysicalRule ( std::string ruleName ) const; + PhysicalRule* getPhysicalRule ( std::string ruleName + , std::string layerName ) const; + PhysicalRule* getPhysicalRule ( std::string ruleName + , std::string layer1Name + , std::string layer2Name ) const; + inline const UnitRules& getUnitRules () const; + inline const PhysicalRules& getNoLayerRules () const; + inline const OneLayerRules& getOneLayerRules () const; + inline const TwoLayersRules& getTwoLayersRules () const; + void toDtr ( std::ostream& ); + inline void setName ( const std::string& name ); + // Updators. + void setName ( const Name& ); + bool setSymbolicLayer ( const Name& ); + bool setSymbolicLayer ( const Layer* ); + DeviceDescriptor* addDeviceDescriptor ( const Name& ); + ModelDescriptor* addModelDescriptor ( const Name& name + , const Name& simul + , const Name& model + , std::string netlist + , const Name& name_n + , const Name& name_p + , bool precise ); + PhysicalRule* addUnitRule ( std::string ruleName + , std::string reference ); + PhysicalRule* addPhysicalRule ( std::string ruleName + , std::string reference ); + void _addPhysicalRule ( std::string layerName + , PhysicalRule* ); + PhysicalRule* addPhysicalRule ( std::string ruleName + , std::string layerName + , std::string reference); + PhysicalRule* addPhysicalRule ( std::string ruleName + , std::string layer1Name + , std::string layer2Name + , std::string reference ); + // Others. + inline LayerMap& _getLayerMap (); + inline LayerMaskMap& _getLayerMaskMap (); + void _insertInLayerMaskMap ( Layer* ); + void _removeFromLayerMaskMap ( Layer* ); + inline Layer::Mask& _getCutMask (); + inline Layer::Mask& _getMetalMask (); + void _onDbuChange ( float scale ); + // Hurricane Managment. + virtual void _toJson ( JsonWriter* ) const; + virtual void _toJsonCollections ( JsonWriter* ) const; + virtual string _getTypeName () const; + virtual string _getString () const; + virtual Record* _getRecord () const; private: // Internal: Attributes. @@ -248,6 +238,3 @@ inline std::string getString( Hurricane::Techn INSPECTOR_P_SUPPORT(Hurricane::Technology); - - -#endif // HURRICANE_TECHNOLOGY_H diff --git a/hurricane/src/hurricane/hurricane/Torus.h b/hurricane/src/hurricane/hurricane/Torus.h index 1312adb1..ce3cf77f 100644 --- a/hurricane/src/hurricane/hurricane/Torus.h +++ b/hurricane/src/hurricane/hurricane/Torus.h @@ -67,6 +67,6 @@ namespace Hurricane { } // End of Hurricane namespace. -INSPECTOR_PV_SUPPORT(Hurricane::Torus); +INSPECTOR_PR_SUPPORT(Hurricane::Torus); #endif // HURRICANE_TORUS_H diff --git a/hurricane/src/hurricane/hurricane/Transformation.h b/hurricane/src/hurricane/hurricane/Transformation.h index 979f3649..e222fac2 100644 --- a/hurricane/src/hurricane/hurricane/Transformation.h +++ b/hurricane/src/hurricane/hurricane/Transformation.h @@ -209,8 +209,8 @@ inline Hurricane::Record* getRecordgetValue( length, PyObject_IsTrue(hDir) ); + else if (length) value = rule->getValue( length ); + else value = rule->getValue(); + } else { + PyErr_SetString( ProxyError + , "invalid number or types of parameters for PhysicalRule.getValue()." ); + return NULL; + } + HCATCH + + return Py_BuildValue("I",value); + } + + + static PyObject* PyPhysicalRule_addValue ( PyPhysicalRule* self, PyObject *args ) + { + cdebug.log(49) << "PyPhysicalRule_addValue()" << endl; + METHOD_HEAD("PhysicalRule.addValue()") + + PyObject* arg0 = NULL; + PyObject* arg1 = NULL; + PyObject* arg2 = NULL; + + HTRY + __cs.init ("PhysicalRule.addValue"); + if (not PyArg_ParseTuple(args,"O&|O&O&:PhysicalRule.addValue" + ,Converter,&arg0 + ,Converter,&arg1 + ,Converter,&arg2 + )) { + PyErr_SetString( ConstructorError, "PhysicalRule.addValue(): invalid number of parameters." ); + return NULL; + } + if (__cs.getObjectIds() == ":float") + rule->addValue( PyFloat_AsDouble(arg0) ); + else if (__cs.getObjectIds() == ":int:int") + rule->addValue( PyAny_AsLong(arg0), PyAny_AsLong(arg1) ); + else if (__cs.getObjectIds() == ":int:int:int") + rule->addValue( PyAny_AsLong(arg0), PyAny_AsLong(arg1), PyAny_AsLong(arg2) ); + else { + PyErr_SetString( ConstructorError, "PhysicalRule.addValue(): Invalid number or bad type of parameters." ); + return NULL; + } + HCATCH + + Py_RETURN_NONE; + } PyMethodDef PyPhysicalRule_Methods[] = - { { "getValue" , (PyCFunction)PyPhysicalRule_getValue, METH_NOARGS + { { "isDouble" , (PyCFunction)PyPhysicalRule_isDouble, METH_NOARGS + , "Is the rule stored as a double." } + , { "isDbU" , (PyCFunction)PyPhysicalRule_isDbU, METH_NOARGS + , "Is the rule stored as a DbU::Unit." } + , { "isSymmetric" , (PyCFunction)PyPhysicalRule_isSymmetric, METH_NOARGS + , "Is the rule symmetric (for two layers rules)." } + , { "hasSteps" , (PyCFunction)PyPhysicalRule_hasSteps, METH_NOARGS + , "Does the rule have multiple length steps." } + , { "getDoubleValue" , (PyCFunction)PyPhysicalRule_getDoubleValue, METH_VARARGS + , "Returns the double value of the rule." } + , { "getValue" , (PyCFunction)PyPhysicalRule_getValue, METH_VARARGS , "Returns the value (DbU::Unit)." } + , { "addValue" , (PyCFunction)PyPhysicalRule_addValue, METH_VARARGS + , "Add any kind of value to the rule." } + , { "setSymmetric" , (PyCFunction)PyPhysicalRule_setSymmetric, METH_VARARGS + , "Set/reset the symmetric state of the rule." } , { "destroy" , (PyCFunction)PyPhysicalRule_destroy , METH_NOARGS , "Destroy associated hurricane object, the python object remains." } , { NULL, NULL, 0, NULL } /* sentinel */ @@ -57,7 +135,7 @@ namespace Isobar { // +-------------------------------------------------------------+ - DirectDeleteMethod(PyPhysicalRule_DeAlloc,PyPhysicalRule) + PythonOnlyDeleteMethod(PhysicalRule) PyTypeObjectLinkPyType(PhysicalRule) diff --git a/hurricane/src/isobar/PyRule.cpp b/hurricane/src/isobar/PyRule.cpp index 1fb0189f..9e881b6a 100644 --- a/hurricane/src/isobar/PyRule.cpp +++ b/hurricane/src/isobar/PyRule.cpp @@ -17,7 +17,6 @@ #include "hurricane/isobar/PyRule.h" #include "hurricane/isobar/PyUnitRule.h" #include "hurricane/isobar/PyPhysicalRule.h" -#include "hurricane/isobar/PyTwoLayersPhysicalRule.h" namespace Isobar { @@ -83,9 +82,6 @@ LinkCreateMethod(Rule) UnitRule* unitRule = dynamic_cast(object); if (unitRule) return PyUnitRule_Link(unitRule); - TwoLayersPhysicalRule* twoLayersPhysicalRule = dynamic_cast(object); - if (twoLayersPhysicalRule) return PyTwoLayersPhysicalRule_Link(twoLayersPhysicalRule); - PhysicalRule* physicalRule = dynamic_cast(object); if (physicalRule) return PyPhysicalRule_Link(physicalRule); diff --git a/hurricane/src/isobar/PyTechnology.cpp b/hurricane/src/isobar/PyTechnology.cpp index 2412adbf..a754ccc3 100644 --- a/hurricane/src/isobar/PyTechnology.cpp +++ b/hurricane/src/isobar/PyTechnology.cpp @@ -54,9 +54,7 @@ #include "hurricane/isobar/PyBasicLayerCollection.h" #include "hurricane/isobar/PyRegularLayerCollection.h" #include "hurricane/isobar/PyViaLayerCollection.h" -#include "hurricane/isobar/PyUnitRule.h" #include "hurricane/isobar/PyPhysicalRule.h" -#include "hurricane/isobar/PyTwoLayersPhysicalRule.h" #include "hurricane/isobar/PyDeviceDescriptor.h" @@ -226,7 +224,7 @@ extern "C" { cdebug.log(49) << "PyTechnology_getUnitRule()" << endl; METHOD_HEAD("Technology.getUnitRule()") - UnitRule* rule = NULL; + PhysicalRule* rule = NULL; HTRY char *arg0 = NULL; @@ -236,7 +234,7 @@ extern "C" { return NULL; } if (arg0) { - rule = new UnitRule( techno->getUnitRule(arg0) ); + rule = techno->getUnitRule( arg0 ); } else { PyErr_SetString( ProxyError, "invalid number of parameters for getUnitRule on Technology." ); return NULL; @@ -262,11 +260,11 @@ extern "C" { return NULL; } if (arg2) { - rule = new PhysicalRule( techno->getPhysicalRule(arg0,arg1,arg2) ); + rule = techno->getPhysicalRule( arg0, arg1, arg2 ); } else if (arg1) { - rule = new PhysicalRule( techno->getPhysicalRule(arg0,arg1) ); + rule = techno->getPhysicalRule( arg0, arg1 ); } else if (arg0) { - rule = new PhysicalRule( techno->getPhysicalRule(arg0) ); + rule = techno->getPhysicalRule( arg0 ); } else { PyErr_SetString( ProxyError, "invalid number of parameters for getPhysicalRule on Technology." ); return NULL; @@ -282,31 +280,29 @@ extern "C" { cdebug.log(49) << "PyTechnology_addUnitRule()" << endl; METHOD_HEAD("Technology.addUnitRule()") - PyObject* arg0 = NULL; - PyObject* arg1 = NULL; - PyObject* arg2 = NULL; + PyObject* arg0 = NULL; + PyObject* arg1 = NULL; + PhysicalRule* rule = NULL; HTRY __cs.init ("Technology.addUnitRule"); - if (not PyArg_ParseTuple(args,"O&O&O&:Technology.addUnitRule" + if (not PyArg_ParseTuple(args,"O&O&:Technology.addUnitRule" ,Converter,&arg0 ,Converter,&arg1 - ,Converter,&arg2 )) { - PyErr_SetString( ConstructorError, "Technology.addUnitRule(): invalid number of parameters." ); + PyErr_SetString( ConstructorError, "Technology.addUnitRule(): Invalid number of parameters." ); return NULL; } - if (__cs.getObjectIds() == ":string:float:string") - techno->addUnitRule( PyString_AsString(arg0) - , PyFloat_AsDouble(arg1) - , PyString_AsString(arg2) ); + if (__cs.getObjectIds() == ":string:string") + rule = techno->addUnitRule( PyString_AsString(arg0) + , PyString_AsString(arg1) ); else { - PyErr_SetString( ConstructorError, "Technology.addUnitRule(): Invalid number or bad type of parameters." ); + PyErr_SetString( ConstructorError, "Technology.addUnitRule(): Bad type of parameters." ); return NULL; } HCATCH - Py_RETURN_NONE; + return PyRule_LinkDerived(rule); } @@ -319,45 +315,38 @@ extern "C" { PyObject* arg1 = NULL; PyObject* arg2 = NULL; PyObject* arg3 = NULL; - PyObject* arg4 = NULL; - PyObject* arg5 = NULL; + PhysicalRule* rule = NULL; HTRY __cs.init ("Technology.addPhysicalRule"); - if (not PyArg_ParseTuple(args,"O&O&O&|O&O&O&:Technology.addPhysicalRule" + if (not PyArg_ParseTuple(args,"O&O&|O&O&:Technology.addPhysicalRule" ,Converter,&arg0 ,Converter,&arg1 ,Converter,&arg2 ,Converter,&arg3 - ,Converter,&arg4 - ,Converter,&arg5 )) { PyErr_SetString( ConstructorError, "Technology.addPhysicalRule(): invalid number of parameters." ); return NULL; } - if (__cs.getObjectIds() == ":string:int:string") - techno->addPhysicalRule( PyString_AsString(arg0) - , PyAny_AsLong (arg1) - , PyString_AsString(arg2) ); - else if (__cs.getObjectIds() == ":string:string:int:string") - techno->addPhysicalRule( PyString_AsString(arg0) - , PyString_AsString(arg1) - , PyAny_AsLong (arg2) - , PyString_AsString(arg3) ); - else if (__cs.getObjectIds() == ":string:string:string:bool:int:string") - techno->addPhysicalRule( PyString_AsString(arg0) - , PyString_AsString(arg1) - , PyString_AsString(arg2) - , PyObject_IsTrue (arg3) - , PyAny_AsLong (arg4) - , PyString_AsString(arg5) ); + if (__cs.getObjectIds() == ":string:string") + rule = techno->addPhysicalRule( PyString_AsString(arg0) + , PyString_AsString(arg1) ); + else if (__cs.getObjectIds() == ":string:string:string") + rule = techno->addPhysicalRule( PyString_AsString(arg0) + , PyString_AsString(arg1) + , PyString_AsString(arg2) ); + else if (__cs.getObjectIds() == ":string:string:string:string") + rule = techno->addPhysicalRule( PyString_AsString(arg0) + , PyString_AsString(arg1) + , PyString_AsString(arg2) + , PyString_AsString(arg3) ); else { PyErr_SetString( ConstructorError, "Technology.addPhysicalRule(): Invalid number or bad type of parameters." ); return NULL; } HCATCH - Py_RETURN_NONE; + return PyRule_LinkDerived(rule); } diff --git a/hurricane/src/isobar/PyTwoLayersPhysicalRule.cpp b/hurricane/src/isobar/PyTwoLayersPhysicalRule.cpp index 32f9e256..92605ba8 100644 --- a/hurricane/src/isobar/PyTwoLayersPhysicalRule.cpp +++ b/hurricane/src/isobar/PyTwoLayersPhysicalRule.cpp @@ -57,7 +57,7 @@ namespace Isobar { // +-------------------------------------------------------------+ - DirectDeleteMethod(PyTwoLayersPhysicalRule_DeAlloc,PyTwoLayersPhysicalRule) + PythonOnlyDeleteMethod(TwoLayersPhysicalRule) PyTypeObjectLinkPyType(TwoLayersPhysicalRule) diff --git a/hurricane/src/isobar/PyUnitRule.cpp b/hurricane/src/isobar/PyUnitRule.cpp index c55c1cd6..0d82f375 100644 --- a/hurricane/src/isobar/PyUnitRule.cpp +++ b/hurricane/src/isobar/PyUnitRule.cpp @@ -57,7 +57,7 @@ namespace Isobar { // +-------------------------------------------------------------+ - DirectDeleteMethod(PyUnitRule_DeAlloc,PyUnitRule) + PythonOnlyDeleteMethod(UnitRule) PyTypeObjectLinkPyType(UnitRule) diff --git a/hurricane/src/isobar/hurricane/isobar/PyHurricane.h b/hurricane/src/isobar/hurricane/isobar/PyHurricane.h index 44715b9b..dbe84cdb 100644 --- a/hurricane/src/isobar/hurricane/isobar/PyHurricane.h +++ b/hurricane/src/isobar/hurricane/isobar/PyHurricane.h @@ -15,12 +15,10 @@ // +-----------------------------------------------------------------+ -#ifndef HURRICANE_PYHURRICANE_H -#define HURRICANE_PYHURRICANE_H - // Enable Python debugging. // #define DEBUG 1 +#pragma once #include "Python.h" #include #include @@ -1642,5 +1640,3 @@ extern "C" { } // End of extern "C". } // End of Isobar namespace. - -# endif diff --git a/katabatic/src/katabatic/ChipTools.h b/katabatic/src/katabatic/ChipTools.h index 0231a3f8..d55430a8 100644 --- a/katabatic/src/katabatic/ChipTools.h +++ b/katabatic/src/katabatic/ChipTools.h @@ -14,9 +14,7 @@ // +-----------------------------------------------------------------+ -#ifndef KATABATIC_CHIP_TOOLS_H -#define KATABATIC_CHIP_TOOLS_H - +#pragma once #include #include "hurricane/DbU.h" #include "hurricane/Torus.h" @@ -113,6 +111,4 @@ namespace Katabatic { } // Katabatic namespace. -INSPECTOR_PV_SUPPORT(Katabatic::ChipTools); - -#endif // KATABATIC_CHIP_TOOLS_H +INSPECTOR_PR_SUPPORT(Katabatic::ChipTools); diff --git a/katana/src/katana/Constants.h b/katana/src/katana/Constants.h index 6ecb2fa3..c3aa32c9 100644 --- a/katana/src/katana/Constants.h +++ b/katana/src/katana/Constants.h @@ -14,9 +14,7 @@ // +-----------------------------------------------------------------+ -#ifndef KATANA_CONSTANTS_H -#define KATANA_CONSTANTS_H - +#pragma once #include "anabatic/Constants.h" namespace Katana { @@ -59,6 +57,4 @@ namespace Katana { } // Katana namespace. -INSPECTOR_PV_SUPPORT(Katana::Flags) - -#endif // KATANA_CONSTANTS_H +INSPECTOR_PR_SUPPORT(Katana::Flags); diff --git a/kite/src/kite/TrackCost.h b/kite/src/kite/TrackCost.h index f196dc55..412a5411 100644 --- a/kite/src/kite/TrackCost.h +++ b/kite/src/kite/TrackCost.h @@ -14,9 +14,7 @@ // +-----------------------------------------------------------------+ -#ifndef KITE_TRACK_COST_H -#define KITE_TRACK_COST_H - +#pragma once #include #include "hurricane/Interval.h" namespace Hurricane { @@ -197,7 +195,4 @@ namespace Kite { } // Kite namespace. -INSPECTOR_V_SUPPORT(Kite::TrackCost); - - -#endif // KITE_TRACK_COST_H +INSPECTOR_R_SUPPORT(Kite::TrackCost); diff --git a/oroshi/python/dtr.py b/oroshi/python/dtr.py index 1e127cc7..bc7fa7f5 100644 --- a/oroshi/python/dtr.py +++ b/oroshi/python/dtr.py @@ -1,122 +1,130 @@ # -*- coding: utf-8 -*- -from helpers import trace +from __future__ import print_function +from Hurricane import DbU +from helpers import trace class Rules ( object ): - ruleSet = [ 'minWidth_nWell' - , 'minSpacing_nWell' - , 'minWidth_pImplant' - , 'minSpacing_pImplant' - , 'minSpacing_rpolyh_pImplant' - , 'minEnclosure_pImplant_poly2con' - , 'minEnclosure_nImplant_active' - , 'minEnclosure_pImplant_active' - , 'minSpacing_nImplant_pImplant' - , 'minSpacing_cut0' - , 'minWidth_cut0' - , 'minWidth_active' - , 'minEnclosure_active_cut0' - , 'transistorMinL' - , 'transistorMinW' - , 'minSpacing_poly' - , 'minGateSpacing_poly' - , 'minSpacing_poly_active' - , 'minExtension_active_poly' - , 'minExtension_poly_active' - , 'minEnclosure_poly_cut0' - , 'minSpacing_cut0_poly' - , 'minWidth_cut0' - , 'minSpacing_cut0_active' - , 'minWidth_metal1' - , 'minSpacing_metal1' - , 'minEnclosure_metal1_cut0' - , 'minEnclosure_metal1_cut1' - , 'minWidth_cut1' - , 'minSpacing_cut1' - , 'minWidth_metal2' - , 'minSpacing_metal2' - , 'minEnclosure_metal2_cut1' - , 'minEnclosure_metal2_cut2' - , 'minWidth_cut2' - , 'minSpacing_cut2' - , 'minWidth_cut1' - , 'minSpacing_cut1' - , 'minWidth_metal3' - , 'minSpacing_metal3' - , 'minSpacingWide1_metal3' - , 'minEnclosure_metal3_cut2' - , 'minSpacingOnMetBot_cut2' - , 'minSpacingOnMetCap_cut2' - , 'maxWidth_metcap' - , 'minSpacing_metbot' - , 'minSpacing_cut1_metcap' - , 'minSpacing_cut2_metcap' - , 'minEnclosure_metbot_metcap' - , 'minEnclosure_metbot_cut1' - , 'minEnclosure_metbot_cut2' - , 'minEnclosure_metcap_cut2' - , 'minWidth_metcap' - , 'minWidth_metcapdum' - , 'minWidth_cpoly' - , 'minWidth_poly2' - , 'minWidth_rpolyh' - , 'minWidthHighPrec_rpolyh' - , 'minSpacing_cpoly' - , 'minSpacing_poly2' - , 'minSpacing_rpolyh' - , 'minSpacing_cut0_cpoly' - , 'minSpacing_diff_poly2' - , 'minSpacing_poly_poly2' - , 'minEnclosure_poly_cpoly' - , 'minEnclosure_cpoly_cut0' - , 'minEnclosure_poly2_cut0' - , 'MIMCap' - , 'PIPCap' - , 'MIMPerimeterCap' - , 'PIPPerimeterCap' - , 'RPOLYHSheetRes' - , 'RPOLY2PHSheetRes' - , 'MET1RPOLYHContRes' - , 'minWidth_hres' - , 'minSpacing_hres' - , 'minEnclosure_hres_poly2' - , 'minSpacing_hres_poly1' - , 'minSpacing_hres_poly2' - , 'minSpacing_hres_active' - , 'corrFactor90' - , 'corrFactor135' - , 'minRpolyhSquares' - ] + ruleSet = [ 'minWidth_nWell' + , 'minSpacing_nWell' + , 'minWidth_pImplant' + , 'minSpacing_pImplant' + , 'minSpacing_rpolyh_pImplant' + , 'minEnclosure_pImplant_poly2con' + , 'minEnclosure_nImplant_active' + , 'minEnclosure_pImplant_active' + , 'minSpacing_nImplant_pImplant' + , 'minSpacing_cut0' + , 'minWidth_cut0' + , 'minWidth_active' + , 'minEnclosure_active_cut0' + , 'transistorMinL' + , 'transistorMinW' + , 'minSpacing_poly' + , 'minGateSpacing_poly' + , 'minSpacing_poly_active' + , 'minExtension_active_poly' + , 'minExtension_poly_active' + , 'minEnclosure_poly_cut0' + , 'minSpacing_cut0_poly' + , 'minWidth_cut0' + , 'minSpacing_cut0_active' + , 'minWidth_metal1' + , 'minSpacing_metal1' + , 'minEnclosure_metal1_cut0' + , 'minEnclosure_metal1_cut1' + , 'minWidth_cut1' + , 'minSpacing_cut1' + , 'minWidth_metal2' + , 'minSpacing_metal2' + , 'minEnclosure_metal2_cut1' + , 'minEnclosure_metal2_cut2' + , 'minWidth_cut2' + , 'minSpacing_cut2' + , 'minWidth_cut1' + , 'minSpacing_cut1' + , 'minWidth_metal3' + , 'minSpacing_metal3' + , 'minSpacingWide1_metal3' + , 'minEnclosure_metal3_cut2' + , 'minSpacingOnMetBot_cut2' + , 'minSpacingOnMetCap_cut2' + , 'maxWidth_metcap' + , 'minSpacing_metbot' + , 'minSpacing_cut1_metcap' + , 'minSpacing_cut2_metcap' + , 'minEnclosure_metbot_metcap' + , 'minEnclosure_metbot_cut1' + , 'minEnclosure_metbot_cut2' + , 'minEnclosure_metcap_cut2' + , 'minWidth_metcap' + , 'minWidth_metcapdum' + , 'minWidth_cpoly' + , 'minWidth_poly2' + , 'minWidth_rpolyh' + , 'minWidthHighPrec_rpolyh' + , 'minSpacing_cpoly' + , 'minSpacing_poly2' + , 'minSpacing_rpolyh' + , 'minSpacing_cut0_cpoly' + , 'minSpacing_diff_poly2' + , 'minSpacing_poly_poly2' + , 'minEnclosure_poly_cpoly' + , 'minEnclosure_cpoly_cut0' + , 'minEnclosure_poly2_cut0' + , 'MIMCap' + , 'PIPCap' + , 'MIMPerimeterCap' + , 'PIPPerimeterCap' + , 'RPOLYHSheetRes' + , 'RPOLY2PHSheetRes' + , 'MET1RPOLYHContRes' + , 'minWidth_hres' + , 'minSpacing_hres' + , 'minEnclosure_hres_poly2' + , 'minSpacing_hres_poly1' + , 'minSpacing_hres_poly2' + , 'minSpacing_hres_active' + , 'corrFactor90' + , 'corrFactor135' + , 'minRpolyhSquares' + ] - def __init__ ( self, dtr ): - trace( 100, '\tRules.__init__()\n' ) - self.dtr = dtr - - for rule in Rules.ruleSet: self.addAttr(rule) - return - - def addAttr ( self, attribute ): - if self.__dict__.has_key(attribute): return - - #print 'Rules.addAttr(): %s' % attribute - value = None - words = attribute.split( '_' ) - try: - if len(words) == 1: - if words[0].endswith('Cap' ): value = self.dtr.getUnitRule( words[0] ).getValue() - elif words[0].endswith('ContRes' ): value = self.dtr.getUnitRule( words[0] ).getValue() - elif words[0].endswith('Res' ): value = self.dtr.getUnitRule( words[0] ).getValue() - elif words[0].endswith('ctor90' ): value = self.dtr.getUnitRule( words[0] ).getValue() - elif words[0].endswith('ctor135' ): value = self.dtr.getUnitRule( words[0] ).getValue() - elif words[0].endswith('quares' ): value = self.dtr.getUnitRule( words[0] ).getValue() - if (value is None) and len(words) < 4: - value = self.dtr.getPhysicalRule( *tuple(words) ).getValue() - except Exception, e: - print e - - if not value is None: - self.__dict__[attribute] = value - - return + def __init__ ( self, dtr ): + trace( 100, '\tRules.__init__()\n' ) + self.dtr = dtr + + for rule in Rules.ruleSet: self.addAttr(rule) + return + + def addAttr ( self, attribute ): + if self.__dict__.has_key(attribute): return + + #print( 'Rules.addAttr(): {}'.format(attribute) ) + value = None + words = attribute.split( '_' ) + try: + if len(words) == 1: + if words[0].endswith('Cap' ): value = self.dtr.getUnitRule( words[0] ).getDoubleValue() + elif words[0].endswith('ContRes' ): value = self.dtr.getUnitRule( words[0] ).getDoubleValue() + elif words[0].endswith('Res' ): value = self.dtr.getUnitRule( words[0] ).getDoubleValue() + elif words[0].endswith('ctor90' ): value = self.dtr.getUnitRule( words[0] ).getDoubleValue() + elif words[0].endswith('ctor135' ): value = self.dtr.getUnitRule( words[0] ).getDoubleValue() + elif words[0].endswith('quares' ): value = self.dtr.getUnitRule( words[0] ).getDoubleValue() + if (value is None) and len(words) < 4: + rule = self.dtr.getPhysicalRule( *tuple(words) ) + if rule.isDouble(): + value = rule.getDoubleValue() + #print( 'Accessed value (Unit):{}'.format(value) ) + else: + value = rule.getValue() + #print( 'Accessed value (DbU):{}'.format(DbU.getValueString(value)) ) + except Exception, e: + print( e ) + + if not value is None: + self.__dict__[attribute] = value + + return diff --git a/unittests/src/unittests.cpp b/unittests/src/unittests.cpp index cbc0f24f..232a2d0c 100644 --- a/unittests/src/unittests.cpp +++ b/unittests/src/unittests.cpp @@ -19,11 +19,11 @@ namespace Hurricane { } -INSPECTOR_PV_SUPPORT(Hurricane::RbInterval); -INSPECTOR_PV_SUPPORT(Hurricane::RbInterval::Node); -INSPECTOR_PV_SUPPORT(Hurricane::IntvString); -INSPECTOR_PV_SUPPORT(Hurricane::IntervalTreeString); -INSPECTOR_PV_SUPPORT(Hurricane::IntervalTreeString::Node); +INSPECTOR_PR_SUPPORT(Hurricane::RbInterval); +INSPECTOR_PR_SUPPORT(Hurricane::RbInterval::Node); +INSPECTOR_PR_SUPPORT(Hurricane::IntvString); +INSPECTOR_PR_SUPPORT(Hurricane::IntervalTreeString); +INSPECTOR_PR_SUPPORT(Hurricane::IntervalTreeString::Node); using namespace std; using namespace Hurricane;