coriolis/documentation/_build/html/PythonCpp/DBoHierarchy.html

989 lines
81 KiB
HTML

<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>4. Case 2 - Hierarchy of DBo Derived Classes &mdash; Coriolis 2 documentation</title>
<link rel="stylesheet" href="../_static/SoC.css" type="text/css" />
<link rel="index" title="Index"
href="../genindex.html"/>
<link rel="search" title="Search" href="../search.html"/>
<link rel="top" title="Coriolis 2 documentation" href="../index.html"/>
<link rel="up" title="Hurricane Python/C++ API Tutorial" href="index.html"/>
<link rel="next" title="5. Case 3 - Non-DBo Standalone Classe" href="NonDBo.html"/>
<link rel="prev" title="3. Case 1 - DBo Derived, Standalone" href="DBoStandalone.html"/>
<script src="_static/js/modernizr.min.js"></script>
</head>
<body class="wy-body-for-nav" role="document">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-nav-search">
<a href="../index.html" class="icon icon-home"> Coriolis
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../UsersGuide/index.html">Coriolis User&#8217;s Guide</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../UsersGuide/LicenseCredits.html">Credits &amp; License</a></li>
<li class="toctree-l2"><a class="reference internal" href="../UsersGuide/Releases.html">Release Notes</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Releases.html#release-1-0-1475">Release 1.0.1475</a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Releases.html#release-1-0-1963">Release 1.0.1963</a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Releases.html#release-1-0-2049">Release 1.0.2049</a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Releases.html#release-v2-0-1">Release v2.0.1</a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Releases.html#release-v2-1">Release v2.1</a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Releases.html#release-v2-2"><strong>Release v2.2</strong></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../UsersGuide/Installation.html">Installation</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Installation.html#fixed-directory-tree">Fixed Directory Tree</a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Installation.html#building-coriolis">Building Coriolis</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/Installation.html#building-the-devel-branch">Building the Devel Branch</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/Installation.html#additionnal-requirement-under-macos">Additionnal Requirement under <span class="sc">MacOS</span></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Installation.html#packaging-coriolis">Packaging Coriolis</a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Installation.html#hooking-up-into-alliance">Hooking up into <span class="sc">Alliance</span></a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Installation.html#setting-up-the-environment-coriolisenv-py">Setting up the Environment (coriolisEnv.py)</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../UsersGuide/Configuration.html">Coriolis Configuration &amp; Initialisation</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Configuration.html#general-software-architecture">General Software Architecture</a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Configuration.html#first-stage-technology-selection">First Stage: Technology Selection</a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Configuration.html#second-stage-technology-configuration-loading">Second Stage: Technology Configuration Loading</a></li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Configuration.html#configuration-helpers">Configuration Helpers</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/Configuration.html#alliance-helper"><span class="sc">Alliance</span> Helper</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/Configuration.html#tools-configuration-helpers">Tools Configuration Helpers</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/Configuration.html#hacking-the-configuration-files">Hacking the Configuration Files</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../UsersGuide/ViewerTools.html">CGT - The Graphical Interface</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/ViewerTools.html#viewer-tools">Viewer &amp; Tools</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#stratus-netlist-capture"><span class="sc">Stratus</span> Netlist Capture</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#the-hurricane-data-base">The <span class="sc">Hurricane</span> Data-Base</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#synthetizing-and-loading-a-design">Synthetizing and loading a design</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#etesian-placer">Etesian &#8211; Placer</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#knik-global-router">Knik &#8211; Global Router</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#kite-detailed-router">Kite &#8211; Detailed Router</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#executing-python-scripts-in-cgt">Executing Python Scripts in Cgt</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#printing-snapshots">Printing &amp; Snapshots</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#memento-of-shortcuts-in-graphic-mode">Memento of Shortcuts in Graphic Mode</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#cgt-command-line-options">Cgt Command Line Options</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#miscellaneous-settings">Miscellaneous Settings</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/ViewerTools.html#the-controller">The Controller</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#the-look-tab">The Look Tab</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#the-filter-tab">The Filter Tab</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#the-layers-go-tab">The Layers&amp;Go Tab</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#the-netlist-tab">The Netlist Tab</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#the-selection-tab">The Selection Tab</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#the-inspector-tab">The Inspector Tab</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ViewerTools.html#the-settings-tab">The Settings Tab</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../UsersGuide/ScriptsPlugins.html">Python Interface for <span class="sc">Hurricane</span> / <span class="sc">Coriolis</span></a><ul>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/ScriptsPlugins.html#plugins">Plugins</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ScriptsPlugins.html#chip-placement">Chip Placement</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ScriptsPlugins.html#clock-tree">Clock Tree</a></li>
<li class="toctree-l4"><a class="reference internal" href="../UsersGuide/ScriptsPlugins.html#recursive-save-rsave">Recursive-Save (RSave)</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../UsersGuide/ScriptsPlugins.html#a-simple-example-am2901">A Simple Example: AM2901</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../PythonTutorial/index.html">Hurricane+Python Tutorial</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../PythonTutorial/Introduction.html">1. Introduction</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../PythonTutorial/Introduction.html#terminology">1.1 Terminology</a></li>
<li class="toctree-l3"><a class="reference internal" href="../PythonTutorial/Introduction.html#generalities">1.2 Generalities</a></li>
<li class="toctree-l3"><a class="reference internal" href="../PythonTutorial/Introduction.html#various-kinds-of-constructors">1.3 Various Kinds of Constructors</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../PythonTutorial/Environment.html">2. Setting up the Environment</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../PythonTutorial/Environment.html#setting-up-the-pathes">2.1 Setting up the Pathes</a></li>
<li class="toctree-l3"><a class="reference internal" href="../PythonTutorial/Environment.html#user-s-configurations-file">2.2 User&#8217;s Configurations File</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../PythonTutorial/Environment.html#the-techno-py-file">2.2.1 The <span class="cb">techno.py</span> File</a></li>
<li class="toctree-l4"><a class="reference internal" href="../PythonTutorial/Environment.html#the-settings-py-file">2.2.2 The <span class="cb">settings.py</span> File</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../PythonTutorial/CellNetComponent.html">3. Making a Standard Cell &#8211; Layout</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../PythonTutorial/CellNetComponent.html#the-allianceframework-crl-core">3.1 The AllianceFramework (CRL Core)</a></li>
<li class="toctree-l3"><a class="reference internal" href="../PythonTutorial/CellNetComponent.html#session-mechanism-hurricane">3.2 Session Mechanism (Hurricane)</a></li>
<li class="toctree-l3"><a class="reference internal" href="../PythonTutorial/CellNetComponent.html#creating-a-new-cell-crl-core">3.3 Creating a new Cell (CRL Core)</a></li>
<li class="toctree-l3"><a class="reference internal" href="../PythonTutorial/CellNetComponent.html#the-dbu-measurement-unit">3.4 The DbU Measurement Unit</a></li>
<li class="toctree-l3"><a class="reference internal" href="../PythonTutorial/CellNetComponent.html#setting-up-the-abutment-box">3.5 Setting up the Abutment Box</a></li>
<li class="toctree-l3"><a class="reference internal" href="../PythonTutorial/CellNetComponent.html#adding-nets-and-components">3.6 Adding Nets and Components</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../PythonTutorial/CellNetComponent.html#getting-a-layer">3.6.1 Getting a Layer</a></li>
<li class="toctree-l4"><a class="reference internal" href="../PythonTutorial/CellNetComponent.html#creating-a-net">3.6.2 Creating a Net</a></li>
<li class="toctree-l4"><a class="reference internal" href="../PythonTutorial/CellNetComponent.html#id1">3.6.3 Creating a Component</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../PythonTutorial/CellNetComponent.html#saving-to-disk-crl-core">3.7 Saving to Disk (CRL Core)</a></li>
<li class="toctree-l3"><a class="reference internal" href="../PythonTutorial/CellNetComponent.html#the-complete-example-file">3.8 The Complete Example File</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../PythonTutorial/Collections.html">4. Manipulating Cells, Nets and Components</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../PythonTutorial/Collections.html#hurricane-collections">4.1 Hurricane Collections</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../PythonTutorial/Collections.html#restrictions-about-using-collections">4.1.1 Restrictions about using Collections</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../PythonTutorial/Collections.html#loading-a-cell-with-allianceframework">4.2 Loading a Cell with AllianceFramework</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../PythonTutorial/CgtScript.html">5. Make a script runnable through <span class="cb">cgt</span></a><ul>
<li class="toctree-l3"><a class="reference internal" href="../PythonTutorial/CgtScript.html#using-breakpoints">5.1 Using Breakpoints</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../PythonTutorial/Netlist.html">6. Making a hierarchical Cell &#8211; Netlist</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../PythonTutorial/Netlist.html#creating-an-instance">6.1 Creating an Instance</a></li>
<li class="toctree-l3"><a class="reference internal" href="../PythonTutorial/Netlist.html#id1">6.2 Creating Nets and connecting to Instances</a></li>
<li class="toctree-l3"><a class="reference internal" href="../PythonTutorial/Netlist.html#power-supplies-special-case">6.3 Power supplies special case</a></li>
<li class="toctree-l3"><a class="reference internal" href="../PythonTutorial/Netlist.html#creating-the-physical-view-of-a-cell-netlist">6.4 Creating the physical view of a Cell netlist</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../PythonTutorial/Netlist.html#id2">6.4.1 Transformation</a></li>
<li class="toctree-l4"><a class="reference internal" href="../PythonTutorial/Netlist.html#placing-an-instance">6.4.2 Placing an Instance</a></li>
<li class="toctree-l4"><a class="reference internal" href="../PythonTutorial/Netlist.html#nets-from-plugs-to-routingpads">6.4.3 Nets &#8211; From Plugs to RoutingPads</a></li>
<li class="toctree-l4"><a class="reference internal" href="../PythonTutorial/Netlist.html#nets-regular-wiring">6.4.4 Nets &#8211; Regular wiring</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../PythonTutorial/Netlist.html#the-complete-example-file">6.5 The Complete Example File</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../PythonTutorial/RealDesigns.html">7. Working in real mode</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../PythonTutorial/RealDesigns.html#loading-a-lef-file">7.1 Loading a <span class="sc">lef</span> file</a></li>
<li class="toctree-l3"><a class="reference internal" href="../PythonTutorial/RealDesigns.html#loading-a-blif-file-yosys">7.2 Loading a <span class="sc">blif</span> file &#8211; <span class="sc">Yosys</span></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../PythonTutorial/ToolEngines.html">8. Tool Engines (CRL Core)</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../PythonTutorial/ToolEngines.html#placer-etesian">8.1 Placer &#8211; Etesian</a></li>
<li class="toctree-l3"><a class="reference internal" href="../PythonTutorial/ToolEngines.html#router-katana">8.1 Router &#8211; Katana</a></li>
<li class="toctree-l3"><a class="reference internal" href="../PythonTutorial/ToolEngines.html#a-complete-example">8.2 A Complete Example</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../PythonTutorial/AdvancedTopics.html">9. Advanced Topics</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../PythonTutorial/AdvancedTopics.html#id1">9.1 Occurrence</a></li>
<li class="toctree-l3"><a class="reference internal" href="../PythonTutorial/AdvancedTopics.html#id2">9.2 RoutingPads</a></li>
<li class="toctree-l3"><a class="reference internal" href="../PythonTutorial/AdvancedTopics.html#hypernets">9.3 HyperNets</a></li>
<li class="toctree-l3"><a class="reference internal" href="../PythonTutorial/AdvancedTopics.html#miscellaeous-trans-hierarchical-functions">9.4 Miscellaeous trans-hierarchical functions</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../Stratus/index.html">Stratus : Netlist Capture Language</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../Stratus/Language.html">Stratus User&#8217;s Guide</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/Language.html#introduction">Introduction</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Language.html#stratus">Stratus</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Language.html#example">Example</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/Language.html#description-of-a-netlist">Description of a netlist</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Language.html#nets">Nets</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Language.html#instances">Instances</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Language.html#generators">Generators</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/Language.html#description-of-a-layout">Description of a layout</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Language.html#place">Place</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Language.html#placetop">PlaceTop</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Language.html#placebottom">PlaceBottom</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Language.html#placeright">PlaceRight</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Language.html#placeleft">PlaceLeft</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Language.html#setrefins">SetRefIns</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Language.html#defab">DefAb</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Language.html#resizeab">ResizeAb</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/Language.html#patterns-generation-extension">Patterns generation extension</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Language.html#description-of-the-stimuli">Description of the stimuli</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/Language.html#place-and-route">Place and Route</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Language.html#placesegment">PlaceSegment</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Language.html#placecontact">PlaceContact</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Language.html#placepin">PlacePin</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Language.html#placeref">PlaceRef</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Language.html#getrefxy">GetRefXY</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Language.html#copyupsegment">CopyUpSegment</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Language.html#placecentric">PlaceCentric</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Language.html#placeglu">PlaceGlu</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Language.html#fillcell">FillCell</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Language.html#pads">Pads</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Language.html#alimentation-rails">Alimentation rails</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Language.html#alimentation-connectors">Alimentation connectors</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Language.html#powerring">PowerRing</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Language.html#routeck">RouteCk</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/Language.html#instanciation-facilities">Instanciation facilities</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Language.html#buffer">Buffer</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Language.html#multiplexor">Multiplexor</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Language.html#shifter">Shifter</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Language.html#register">Register</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Language.html#constants">Constants</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Language.html#boolean-operations">Boolean operations</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Language.html#arithmetical-operations">Arithmetical operations</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Language.html#comparison-operations">Comparison operations</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Language.html#virtual-library">Virtual library</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/Language.html#useful-links">Useful links</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Language.html#dpgen-generators">DpGen generators</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Language.html#arithmetic-package-of-stratus">Arithmetic package of stratus</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Language.html#arithmetic-generators-and-some-stratus-packages">Arithmetic generators and some stratus packages</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Language.html#patterns-module">Patterns module</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../Stratus/Developper.html">Stratus Developper&#8217;s Guide</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/Developper.html#class-model">Class Model</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Developper.html#synopsys">Synopsys</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Developper.html#description">Description</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Developper.html#parameters">Parameters</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Developper.html#attributes">Attributes</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Developper.html#methods">Methods</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/Developper.html#nets">Nets</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Developper.html#id1">Synopsys</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Developper.html#id2">Description</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Developper.html#id3">Parameters</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Developper.html#id4">Attributes</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Developper.html#id5">Methods</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/Developper.html#instances">Instances</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Developper.html#id6">Synopsys</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Developper.html#id7">Description</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Developper.html#id8">Parameters</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Developper.html#id9">Attributes</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Developper.html#id10">Methods</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../Stratus/Patterns.html">Patterns module User&#8217;s Guide</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/Patterns.html#description">Description</a></li>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/Patterns.html#syntax">Syntax</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Patterns.html#declaration-part">Declaration part</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Patterns.html#description-part">Description part</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/Patterns.html#methods">Methods</a><ul>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Patterns.html#patwrite">PatWrite</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Patterns.html#declar">declar</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Patterns.html#declar-interface">declar_interface</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Patterns.html#id2">declar</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Patterns.html#affect-int">affect_int</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Patterns.html#affect-fix">affect_fix</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Patterns.html#affect-any">affect_any</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Patterns.html#addpat">addpat</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Patterns.html#pattern-begin">pattern_begin</a></li>
<li class="toctree-l4"><a class="reference internal" href="../Stratus/Patterns.html#pattern-end">pattern_end</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/Patterns.html#example">Example</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../Stratus/DpGen.html">DpGen generators manual</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/DpGen.html#dpgeninv">DpgenInv</a></li>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/DpGen.html#dpgenbuff">DpgenBuff</a></li>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/DpGen.html#dpgennand2">DpgenNand2</a></li>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/DpGen.html#dpgennand3">DpgenNand3</a></li>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/DpGen.html#dpgennand4">Dpgennand4</a></li>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/DpGen.html#dpgenand2">DpgenAnd2</a></li>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/DpGen.html#dpgenand3">DpgenAnd3</a></li>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/DpGen.html#dpgenand4">DpgenAnd4</a></li>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/DpGen.html#dpgennor2">DpgenNor2</a></li>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/DpGen.html#dpgennor3">DpgenNor3</a></li>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/DpGen.html#dpgennor4">DpgenNor4</a></li>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/DpGen.html#dpgenor2">DpgenOr2</a></li>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/DpGen.html#dpgenor3">DpgenOr3</a></li>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/DpGen.html#dpgenor4">DpgenOr4</a></li>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/DpGen.html#dpgenxor2">DpgenXor2</a></li>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/DpGen.html#dpgenxnor2">DpgenXnor2</a></li>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/DpGen.html#dpgennmux2">DpgenNmux2</a></li>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/DpGen.html#dpgenmux2">DpgenMux2</a></li>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/DpGen.html#dpgennbuse">DpgenNbuse</a></li>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/DpGen.html#dpgenbuse">DpgenBuse</a></li>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/DpGen.html#dpgennand2mask">DpgenNand2mask</a></li>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/DpGen.html#dpgennor2mask">DpgenNor2mask</a></li>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/DpGen.html#dpgenxnor2mask">DpgenXnor2mask</a></li>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/DpGen.html#dpgenadsb2f">DpgenAdsb2f</a></li>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/DpGen.html#dpgenshift">DpgenShift</a></li>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/DpGen.html#dpgenshrot">DpgenShrot</a></li>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/DpGen.html#dpgennul">DpgenNul</a></li>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/DpGen.html#dpgenconst">DpgenConst</a></li>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/DpGen.html#dpgenrom2">DpgenRom2</a></li>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/DpGen.html#dpgenrom4">DpgenRom4</a></li>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/DpGen.html#dpgenram">DpgenRam</a></li>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/DpGen.html#dpgenrf1">DpgenRf1</a></li>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/DpGen.html#dpgenrf1d">DpgenRf1d</a></li>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/DpGen.html#dpgenfifo">DpgenFifo</a></li>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/DpGen.html#dpgendff">DpgenDff</a></li>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/DpGen.html#dpgendfft">DpgenDfft</a></li>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/DpGen.html#dpgensff">DpgenSff</a></li>
<li class="toctree-l3"><a class="reference internal" href="../Stratus/DpGen.html#dpgensfft">DpgenSfft</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../Hurricane/Hurricane.html">Hurricane Reference</a></li>
<li class="toctree-l1"><a class="reference internal" href="../Viewer/Viewer.html">Viewer Reference</a></li>
<li class="toctree-l1"><a class="reference internal" href="../CrlCore/CrlCore.html">CRL Core Reference</a></li>
<li class="toctree-l1"><a class="reference internal" href="../Katabatic/Katabatic.html">Katabatic Reference</a></li>
<li class="toctree-l1"><a class="reference internal" href="../Kite/Kite.html">Kite Reference</a></li>
<li class="toctree-l1"><a class="reference internal" href="../Unicorn/Unicorn.html">Unicorn Reference</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html">Hurricane Python/C++ API Tutorial</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="Introduction.html">1. Introduction</a><ul>
<li class="toctree-l3"><a class="reference internal" href="Introduction.html#first-a-disclaimer">1.1 First, A Disclaimer</a></li>
<li class="toctree-l3"><a class="reference internal" href="Introduction.html#about-technical-choices">1.2 About Technical Choices</a></li>
<li class="toctree-l3"><a class="reference internal" href="Introduction.html#botched-design">1.3 Botched Design</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="Configuration.html">2. Basic File Structure and CMake configuration</a></li>
<li class="toctree-l2"><a class="reference internal" href="DBoStandalone.html">3. Case 1 - DBo Derived, Standalone</a><ul>
<li class="toctree-l3"><a class="reference internal" href="DBoStandalone.html#class-associated-header-file">3.1 Class Associated Header File</a></li>
<li class="toctree-l3"><a class="reference internal" href="DBoStandalone.html#class-associated-file">3.2 Class Associated File</a><ul>
<li class="toctree-l4"><a class="reference internal" href="DBoStandalone.html#head-of-the-file">3.2.1 Head of the file</a></li>
<li class="toctree-l4"><a class="reference internal" href="DBoStandalone.html#the-python-module-part">3.2.2 The Python Module Part</a></li>
<li class="toctree-l4"><a class="reference internal" href="DBoStandalone.html#python-type-linking">3.2.3 Python Type Linking</a></li>
<li class="toctree-l4"><a class="reference internal" href="DBoStandalone.html#the-shared-library-part">3.2.4 The Shared Library Part</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="DBoStandalone.html#python-module-c-namespace">3.3 Python Module (C++ namespace)</a></li>
</ul>
</li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">4. Case 2 - Hierarchy of DBo Derived Classes</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#base-class-header">4.1 Base Class Header</a></li>
<li class="toctree-l3"><a class="reference internal" href="#base-class-file">4.2 Base Class File</a></li>
<li class="toctree-l3"><a class="reference internal" href="#intermediate-class-header">4.3 Intermediate Class Header</a></li>
<li class="toctree-l3"><a class="reference internal" href="#intermediate-class-file">4.4 Intermediate Class File</a></li>
<li class="toctree-l3"><a class="reference internal" href="#terminal-class-header">4.5 Terminal Class Header</a></li>
<li class="toctree-l3"><a class="reference internal" href="#terminal-class-file">4.6 Terminal Class File</a></li>
<li class="toctree-l3"><a class="reference internal" href="#python-module">4.8 Python Module</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="NonDBo.html">5. Case 3 - Non-DBo Standalone Classe</a><ul>
<li class="toctree-l3"><a class="reference internal" href="NonDBo.html#class-header">5.1 Class Header</a></li>
<li class="toctree-l3"><a class="reference internal" href="NonDBo.html#class-file">5.2 Class File</a></li>
<li class="toctree-l3"><a class="reference internal" href="NonDBo.html#id1">5.2 Class File</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="DbU.html">6. Encapsulating DbU</a></li>
<li class="toctree-l2"><a class="reference internal" href="Name.html">7. No C++ Hurricane::Name encapsulation</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../RDS/index.html">RDS &#8211; Symbolic to Real Conversion in Alliance</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../RDS/RDSpage.html">Symbolic Layout</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../RDS/RDSpage.html#symbolic-components">Symbolic Components</a></li>
<li class="toctree-l3"><a class="reference internal" href="../RDS/RDSpage.html#symbolic-segments">Symbolic Segments</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../RDS/RDSpage.html#the-rds-file">The RDS File</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../RDS/RDSpage.html#physical-grid-lambda-value">Physical Grid &amp; Lambda Value</a></li>
<li class="toctree-l3"><a class="reference internal" href="../RDS/RDSpage.html#the-mbk-to-rds-segment-table">The <code class="docutils literal"><span class="pre">MBK_TO_RDS_SEGMENT</span></code> table</a></li>
<li class="toctree-l3"><a class="reference internal" href="../RDS/RDSpage.html#the-mbk-to-rds-via-table">The <code class="docutils literal"><span class="pre">MBK_TO_RDS_VIA</span></code> table</a></li>
<li class="toctree-l3"><a class="reference internal" href="../RDS/RDSpage.html#the-mbk-to-rds-bigvia-hole-table">The <code class="docutils literal"><span class="pre">MBK_TO_RDS_BIGVIA_HOLE</span></code> table</a></li>
<li class="toctree-l3"><a class="reference internal" href="../RDS/RDSpage.html#the-mbk-to-rds-bigvia-metal-table">The <code class="docutils literal"><span class="pre">MBK_TO_RDS_BIGVIA_METAL</span></code> table</a></li>
<li class="toctree-l3"><a class="reference internal" href="../RDS/RDSpage.html#the-mbk-wiresetting-table">The <code class="docutils literal"><span class="pre">MBK_WIRESETTING</span></code> table</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../Analog/Analog.html">Hurricane/Analog Reference</a></li>
<li class="toctree-l1"><a class="reference internal" href="../Oroshi/Oroshi.html">Oroshi Reference</a></li>
<li class="toctree-l1"><a class="reference internal" href="../lefapi/lefapi.html">LEF API Reference</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../lefapi/lefapi.html#implementation-notes">Implementation Notes</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../lefapi/lefapi.html#understanding-units">Understanding Units</a></li>
<li class="toctree-l3"><a class="reference internal" href="../lefapi/lefapi.html#callback-calling-order">Callback Calling Order</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../defapi/defapi.html">DEF API Reference</a></li>
<li class="toctree-l1"><a class="reference internal" href="../lefdef/lefdef.html">LEF/DEF Language Reference</a></li>
</ul>
</div>
&nbsp;
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" role="navigation" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">Coriolis</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html">Docs</a> &raquo;</li>
<li><a href="index.html">Hurricane Python/C++ API Tutorial</a> &raquo;</li>
<li>4. Case 2 - Hierarchy of DBo Derived Classes</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document">
<p></p>
<div class="section" id="case-2-hierarchy-of-dbo-derived-classes">
<h1>4. Case 2 - Hierarchy of DBo Derived Classes<a class="headerlink" href="#case-2-hierarchy-of-dbo-derived-classes" title="Permalink to this headline"></a></h1>
<p>Now we want to export the following C++ class hierarchy into Python:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">PyEntity</span> <span class="o">&lt;--</span> <span class="n">PyComponent</span> <span class="o">&lt;-+-</span> <span class="n">PyContact</span>
<span class="o">+-</span> <span class="n">PySegment</span> <span class="o">&lt;-+-</span> <span class="n">PyHorizontal</span>
<span class="o">+-</span> <span class="n">PyVertical</span>
</pre></div>
</div>
<div class="section" id="base-class-header">
<h2>4.1 Base Class Header<a class="headerlink" href="#base-class-header" title="Permalink to this headline"></a></h2>
<p><strong>Remark:</strong> this is only a partial description of the tree for the sake of
clarity.</p>
<p>One important fact to remember is that <code class="docutils literal"><span class="pre">PyEntity</span></code> and <code class="docutils literal"><span class="pre">PyComponent</span></code>
being related to C++ abstract classes, no objects of those types will be
created, only <code class="docutils literal"><span class="pre">PyContact</span></code>, <code class="docutils literal"><span class="pre">PyHorizontal</span></code> or <code class="docutils literal"><span class="pre">PyVertical</span></code> will.</p>
<p>The consequence is that there is no <code class="docutils literal"><span class="pre">PyEntity_Link()</span></code> like in <a class="reference internal" href="DBoStandalone.html#id1"><span class="std std-ref">3.1 Class Associated Header File</span></a>
but instead two functions:</p>
<ol class="arabic simple">
<li><code class="docutils literal"><span class="pre">PyEntity_NEW()</span></code> which create the relevant <code class="docutils literal"><span class="pre">PyEntity</span></code> <em>derived</em>
object from the <code class="docutils literal"><span class="pre">Entity</span></code> one. For example, if the <code class="docutils literal"><span class="pre">Entity*</span></code> given
as argument is in fact a <code class="docutils literal"><span class="pre">Horizontal*</span></code>, then the function will
return a <code class="docutils literal"><span class="pre">PyHorizontal*</span></code>.</li>
<li><code class="docutils literal"><span class="pre">EntityCast()</span></code> do the reverse of <code class="docutils literal"><span class="pre">PyEntity_NEW()</span></code> that is, from
a <code class="docutils literal"><span class="pre">PyEntity</span></code>, return the C++ <em>derived</em> object. Again, if the
<code class="docutils literal"><span class="pre">PyEntity*</span></code> is a <code class="docutils literal"><span class="pre">PyHorizontal*</span></code>, the function will cast it as
a <code class="docutils literal"><span class="pre">Horizontal*</span></code> <em>then</em> return it as an <code class="docutils literal"><span class="pre">Entity*</span></code>.</li>
</ol>
<div class="highlight-python"><div class="highlight"><pre><span></span><span class="c1">#ifndef ISOBAR_PY_ENTITY_H</span>
<span class="c1">#define ISOBAR_PY_ENTITY_H</span>
<span class="c1">#include &quot;hurricane/isobar/PyHurricane.h&quot;</span>
<span class="c1">#include &quot;hurricane/Entity.h&quot;</span>
<span class="n">namespace</span> <span class="n">Isobar</span> <span class="p">{</span>
<span class="n">extern</span> <span class="s2">&quot;C&quot;</span> <span class="p">{</span>
<span class="n">typedef</span> <span class="n">struct</span> <span class="p">{</span>
<span class="n">PyObject_HEAD</span>
<span class="n">Hurricane</span><span class="p">::</span><span class="n">Entity</span><span class="o">*</span> <span class="n">_object</span><span class="p">;</span>
<span class="p">}</span> <span class="n">PyEntity</span><span class="p">;</span>
<span class="n">extern</span> <span class="n">PyObject</span><span class="o">*</span> <span class="n">PyEntity_NEW</span> <span class="p">(</span> <span class="n">Hurricane</span><span class="p">::</span><span class="n">Entity</span><span class="o">*</span> <span class="n">entity</span> <span class="p">);</span>
<span class="n">extern</span> <span class="n">void</span> <span class="n">PyEntity_LinkPyType</span> <span class="p">();</span>
<span class="n">extern</span> <span class="n">PyTypeObject</span> <span class="n">PyTypeEntity</span><span class="p">;</span>
<span class="n">extern</span> <span class="n">PyMethodDef</span> <span class="n">PyEntity_Methods</span><span class="p">[];</span>
<span class="c1">#define IsPyEntity(v) ( (v)-&gt;ob_type == &amp;PyTypeEntity )</span>
<span class="c1">#define PYENTITY(v) ( (PyEntity*)(v) )</span>
<span class="c1">#define PYENTITY_O(v) ( PYENTITY(v)-&gt;_object )</span>
<span class="p">}</span> <span class="o">//</span> <span class="n">extern</span> <span class="s2">&quot;C&quot;</span><span class="o">.</span>
<span class="n">Hurricane</span><span class="p">::</span><span class="n">Entity</span><span class="o">*</span> <span class="n">EntityCast</span> <span class="p">(</span> <span class="n">PyObject</span><span class="o">*</span> <span class="n">derivedObject</span> <span class="p">);</span>
<span class="p">}</span> <span class="o">//</span> <span class="n">Isobar</span> <span class="n">namespace</span><span class="o">.</span>
<span class="c1">#endif // ISOBAR_PY_ENTITY_H</span>
</pre></div>
</div>
<p></p>
</div>
<div class="section" id="base-class-file">
<h2>4.2 Base Class File<a class="headerlink" href="#base-class-file" title="Permalink to this headline"></a></h2>
<p>Changes from <a class="reference internal" href="DBoStandalone.html#class-associated-file"><span class="std std-ref">3.2 Class Associated File</span></a> are:</p>
<ol class="arabic simple">
<li>No call to <code class="docutils literal"><span class="pre">DBoLinkCreateMethod()</span></code> because there must be no <code class="docutils literal"><span class="pre">PyEntity_Link()</span></code>,
but the definitions of <code class="docutils literal"><span class="pre">PyEntity_NEW()</span></code> and <code class="docutils literal"><span class="pre">EntityCast</span></code>.</li>
<li>For defining the <code class="docutils literal"><span class="pre">PyTypeEntity</span></code> Python type, we call a different
macro: <code class="docutils literal"><span class="pre">PyTypeRootObjectDefinitions</span></code>, dedicated to base classes.</li>
</ol>
<div class="highlight-c++"><div class="highlight"><pre><span></span><span class="cp">#include</span> <span class="cpf">&quot;hurricane/isobar/PyCell.h&quot;</span><span class="cp"></span>
<span class="cp">#include</span> <span class="cpf">&quot;hurricane/isobar/PyHorizontal.h&quot;</span><span class="cp"></span>
<span class="cp">#include</span> <span class="cpf">&quot;hurricane/isobar/PyVertical.h&quot;</span><span class="cp"></span>
<span class="cp">#include</span> <span class="cpf">&quot;hurricane/isobar/PyContact.h&quot;</span><span class="cp"></span>
<span class="k">namespace</span> <span class="n">Isobar</span> <span class="p">{</span>
<span class="k">using</span> <span class="k">namespace</span> <span class="n">Hurricane</span><span class="p">;</span>
<span class="k">extern</span> <span class="s">&quot;C&quot;</span> <span class="p">{</span>
<span class="cp">#if defined(__PYTHON_MODULE__)</span>
<span class="cp">#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(Entity,entity,function)</span>
<span class="n">DBoDestroyAttribute</span><span class="p">(</span><span class="n">PyEntity_destroy</span> <span class="p">,</span><span class="n">PyEntity</span><span class="p">)</span>
<span class="k">static</span> <span class="n">PyObject</span><span class="o">*</span> <span class="n">PyEntity_getCell</span> <span class="p">(</span> <span class="n">PyEntity</span> <span class="o">*</span><span class="n">self</span> <span class="p">)</span>
<span class="p">{</span>
<span class="n">Cell</span><span class="o">*</span> <span class="n">cell</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span>
<span class="n">HTRY</span>
<span class="nf">METHOD_HEAD</span><span class="p">(</span> <span class="s">&quot;Entity.getCell()&quot; )</span>
<span class="n">cell</span> <span class="o">=</span> <span class="n">entity</span><span class="o">-&gt;</span><span class="n">getCell</span><span class="p">();</span>
<span class="n">HCATCH</span>
<span class="k">return</span> <span class="nf">PyCell_Link</span><span class="p">(</span> <span class="n">cell</span> <span class="p">);</span>
<span class="p">}</span>
<span class="n">PyMethodDef</span> <span class="n">PyEntity_Methods</span><span class="p">[]</span> <span class="o">=</span>
<span class="p">{</span> <span class="p">{</span> <span class="s">&quot;getCell&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">PyCFunction</span><span class="p">)</span><span class="n">PyEntity_getCell</span><span class="p">,</span> <span class="n">METH_NOARGS</span>
<span class="p">,</span> <span class="s">&quot;Returns the entity cell.&quot;</span> <span class="p">}</span>
<span class="p">,</span> <span class="p">{</span> <span class="s">&quot;destroy&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">PyCFunction</span><span class="p">)</span><span class="n">PyEntity_destroy</span><span class="p">,</span> <span class="n">METH_NOARGS</span>
<span class="p">,</span> <span class="s">&quot;Destroy associated hurricane object, the python object remains.&quot;</span> <span class="p">}</span>
<span class="p">,</span> <span class="p">{</span><span class="nb">NULL</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">}</span> <span class="cm">/* sentinel */</span>
<span class="p">};</span>
<span class="n">DBoDeleteMethod</span><span class="p">(</span><span class="n">Entity</span><span class="p">)</span>
<span class="n">PyTypeObjectLinkPyType</span><span class="p">(</span><span class="n">Entity</span><span class="p">)</span>
<span class="cp">#else </span><span class="c1">// End of Python Module Code Part.</span>
<span class="n">PyObject</span><span class="o">*</span> <span class="n">PyEntity_NEW</span> <span class="p">(</span> <span class="n">Entity</span><span class="o">*</span> <span class="n">entity</span> <span class="p">)</span>
<span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="n">not</span> <span class="n">entity</span><span class="p">)</span> <span class="p">{</span>
<span class="n">PyErr_SetString</span> <span class="p">(</span> <span class="n">HurricaneError</span><span class="p">,</span> <span class="s">&quot;Invalid Entity (bad occurrence)&quot;</span> <span class="p">);</span>
<span class="k">return</span> <span class="nb">NULL</span><span class="p">;</span>
<span class="p">}</span>
<span class="n">Horizontal</span><span class="o">*</span> <span class="n">horizontal</span> <span class="o">=</span> <span class="k">dynamic_cast</span><span class="o">&lt;</span><span class="n">Horizontal</span><span class="o">*&gt;</span><span class="p">(</span><span class="n">entity</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="n">horizontal</span><span class="p">)</span> <span class="k">return</span> <span class="n">PyHorizontal_Link</span><span class="p">(</span> <span class="n">horizontal</span> <span class="p">);</span>
<span class="n">Vertical</span><span class="o">*</span> <span class="n">vertical</span> <span class="o">=</span> <span class="k">dynamic_cast</span><span class="o">&lt;</span><span class="n">Vertical</span><span class="o">*&gt;</span><span class="p">(</span><span class="n">entity</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="n">vertical</span><span class="p">)</span> <span class="k">return</span> <span class="n">PyVertical_Link</span><span class="p">(</span> <span class="n">vertical</span> <span class="p">);</span>
<span class="n">Contact</span><span class="o">*</span> <span class="n">contact</span> <span class="o">=</span> <span class="k">dynamic_cast</span><span class="o">&lt;</span><span class="n">Contact</span><span class="o">*&gt;</span><span class="p">(</span><span class="n">entity</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="n">contact</span><span class="p">)</span> <span class="k">return</span> <span class="n">PyContact_Link</span><span class="p">(</span> <span class="n">contact</span> <span class="p">);</span>
<span class="n">Py_RETURN_NONE</span><span class="p">;</span>
<span class="p">}</span>
<span class="n">PyTypeRootObjectDefinitions</span><span class="p">(</span><span class="n">Entity</span><span class="p">)</span>
<span class="cp">#endif </span><span class="c1">// Shared Library Code Part (1).</span>
<span class="p">}</span> <span class="c1">// extern &quot;C&quot;.</span>
<span class="cp">#if !defined(__PYTHON_MODULE__)</span>
<span class="n">Hurricane</span><span class="o">::</span><span class="n">Entity</span><span class="o">*</span> <span class="n">EntityCast</span> <span class="p">(</span> <span class="n">PyObject</span><span class="o">*</span> <span class="n">derivedObject</span> <span class="p">)</span> <span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="n">IsPyHorizontal</span><span class="p">(</span><span class="n">derivedObject</span><span class="p">))</span> <span class="k">return</span> <span class="n">PYHORIZONTAL_O</span><span class="p">(</span><span class="n">derivedObject</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="n">IsPyVertical</span> <span class="p">(</span><span class="n">derivedObject</span><span class="p">))</span> <span class="k">return</span> <span class="n">PYVERTICAL_O</span><span class="p">(</span><span class="n">derivedObject</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="n">IsPyContact</span> <span class="p">(</span><span class="n">derivedObject</span><span class="p">))</span> <span class="k">return</span> <span class="n">PYCONTACT_O</span><span class="p">(</span><span class="n">derivedObject</span><span class="p">);</span>
<span class="k">return</span> <span class="nb">NULL</span><span class="p">;</span>
<span class="p">}</span>
<span class="cp">#endif </span><span class="c1">// Shared Library Code Part (2).</span>
<span class="p">}</span> <span class="c1">// Isobar namespace.</span>
</pre></div>
</div>
<p></p>
</div>
<div class="section" id="intermediate-class-header">
<h2>4.3 Intermediate Class Header<a class="headerlink" href="#intermediate-class-header" title="Permalink to this headline"></a></h2>
<p>Changes from <a class="reference internal" href="DBoStandalone.html#class-associated-header-file"><span class="std std-ref">3.1 Class Associated Header File</span></a> are:</p>
<ol class="arabic simple">
<li>As for <code class="docutils literal"><span class="pre">PyEntity</span></code>, and because this is still an abstract class,
there is no <code class="docutils literal"><span class="pre">PyComponent_Link()</span></code> function.</li>
<li>The definition of the <code class="docutils literal"><span class="pre">PyComponent</span></code> <span class="cb">struct</span> is differs. There is
no <code class="docutils literal"><span class="pre">PyObject_HEAD</span></code> (it is a Python <em>derived</em> class). The only
field is of the base class type <code class="docutils literal"><span class="pre">PyEntity</span></code> and for use with
Coriolis macros, <strong>it must</strong> be named <code class="docutils literal"><span class="pre">_baseObject</span></code> (note that
this is <em>not</em> a pointer but a whole object).</li>
</ol>
<div class="highlight-c++"><div class="highlight"><pre><span></span><span class="cp">#ifndef ISOBAR_PY_COMPONENT_H</span>
<span class="cp">#define ISOBAR_PY_COMPONENT_H</span>
<span class="cp">#include</span> <span class="cpf">&quot;hurricane/isobar/PyEntity.h&quot;</span><span class="cp"></span>
<span class="cp">#include</span> <span class="cpf">&quot;hurricane/Component.h&quot;</span><span class="cp"></span>
<span class="k">namespace</span> <span class="n">Isobar</span> <span class="p">{</span>
<span class="k">extern</span> <span class="s">&quot;C&quot;</span> <span class="p">{</span>
<span class="k">typedef</span> <span class="k">struct</span> <span class="p">{</span>
<span class="n">PyEntity</span> <span class="n">_baseObject</span><span class="p">;</span>
<span class="p">}</span> <span class="n">PyComponent</span><span class="p">;</span>
<span class="k">extern</span> <span class="n">PyTypeObject</span> <span class="n">PyTypeComponent</span><span class="p">;</span>
<span class="k">extern</span> <span class="n">PyMethodDef</span> <span class="n">PyComponent_Methods</span><span class="p">[];</span>
<span class="k">extern</span> <span class="kt">void</span> <span class="nf">PyComponent_LinkPyType</span> <span class="p">();</span>
<span class="cp">#define IsPyComponent(v) ((v)-&gt;ob_type == &amp;PyTypeComponent)</span>
<span class="cp">#define PYCOMPONENT(v) ((PyComponent*)(v))</span>
<span class="cp">#define PYCOMPONENT_O(v) (static_cast&lt;Component*&gt;(PYCOMPONENT(v)-&gt;_baseObject._object))</span>
<span class="p">}</span> <span class="c1">// extern &quot;C&quot;.</span>
<span class="p">}</span> <span class="c1">// Isobar namespace.</span>
<span class="cp">#endif</span>
</pre></div>
</div>
</div>
<div class="section" id="intermediate-class-file">
<h2>4.4 Intermediate Class File<a class="headerlink" href="#intermediate-class-file" title="Permalink to this headline"></a></h2>
<p>Changes from <a class="reference internal" href="DBoStandalone.html#class-associated-file"><span class="std std-ref">3.2 Class Associated File</span></a> are:</p>
<ol class="arabic simple">
<li>Redefinition of the default macros <code class="docutils literal"><span class="pre">ACCESS_OBJECT</span></code> and <code class="docutils literal"><span class="pre">ACCESS_CLASS</span></code>.<ul>
<li>The pointer to the C++ encapsulated object (attribute <code class="docutils literal"><span class="pre">_object</span></code>) is hold
by the base class <code class="docutils literal"><span class="pre">PyEntity</span></code>. The <code class="docutils literal"><span class="pre">ACCESS_OBJECT</span></code> macro which is tasked
to give access to that attribute is then <code class="docutils literal"><span class="pre">_baseObject._object</span></code> as
<code class="docutils literal"><span class="pre">PyComponent</span></code> is a direct derived class of <code class="docutils literal"><span class="pre">PyEntity</span></code>.</li>
<li><code class="docutils literal"><span class="pre">ACCESS_CLASS</span></code> is similar to <code class="docutils literal"><span class="pre">ACCESS_OBJECT</span></code> for accessing the base
class, that is a pointer to <code class="docutils literal"><span class="pre">PyEntity</span></code>.</li>
</ul>
</li>
</ol>
<p></p>
<ol class="arabic simple" start="2">
<li>For defining the <code class="docutils literal"><span class="pre">PyTypeComponent</span></code> Python type, we call a yet different
macro: <code class="docutils literal"><span class="pre">PyTypeInheritedObjectDefinitions()</span></code>, dedicated to derived classes.
For this this macro we need to give as argument the derived class and the
base class.</li>
</ol>
<div class="highlight-c++"><div class="highlight"><pre><span></span><span class="cp">#include</span> <span class="cpf">&quot;hurricane/isobar/PyComponent.h&quot;</span><span class="cp"></span>
<span class="cp">#include</span> <span class="cpf">&quot;hurricane/isobar/PyNet.h&quot;</span><span class="cp"></span>
<span class="k">namespace</span> <span class="n">Isobar</span> <span class="p">{</span>
<span class="k">using</span> <span class="k">namespace</span> <span class="n">Hurricane</span><span class="p">;</span>
<span class="k">extern</span> <span class="s">&quot;C&quot;</span> <span class="p">{</span>
<span class="cp">#undef ACCESS_OBJECT</span>
<span class="cp">#undef ACCESS_CLASS</span>
<span class="cp">#define ACCESS_OBJECT _baseObject._object</span>
<span class="cp">#define ACCESS_CLASS(_pyObject) &amp;(_pyObject-&gt;_baseObject)</span>
<span class="cp">#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(Component,component,function)</span>
<span class="cp">#if defined(__PYTHON_MODULE__)</span>
<span class="n">DirectGetLongAttribute</span><span class="p">(</span><span class="n">PyComponent_getX</span><span class="p">,</span><span class="n">getX</span><span class="p">,</span><span class="n">PyComponent</span><span class="p">,</span><span class="n">Component</span><span class="p">)</span>
<span class="n">DirectGetLongAttribute</span><span class="p">(</span><span class="n">PyComponent_getY</span><span class="p">,</span><span class="n">getY</span><span class="p">,</span><span class="n">PyComponent</span><span class="p">,</span><span class="n">Component</span><span class="p">)</span>
<span class="n">DBoDestroyAttribute</span><span class="p">(</span><span class="n">PyComponent_destroy</span><span class="p">,</span><span class="n">PyComponent</span><span class="p">)</span>
<span class="k">static</span> <span class="n">PyObject</span><span class="o">*</span> <span class="n">PyComponent_getNet</span> <span class="p">(</span> <span class="n">PyComponent</span> <span class="o">*</span><span class="n">self</span> <span class="p">)</span>
<span class="p">{</span>
<span class="n">Net</span><span class="o">*</span> <span class="n">net</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span>
<span class="n">HTRY</span>
<span class="nf">METHOD_HEAD</span><span class="p">(</span> <span class="s">&quot;Component.getNet()&quot; )</span>
<span class="n">net</span> <span class="o">=</span> <span class="n">component</span><span class="o">-&gt;</span><span class="n">getNet</span><span class="p">(</span> <span class="p">);</span>
<span class="n">HCATCH</span>
<span class="k">return</span> <span class="nf">PyNet_Link</span><span class="p">(</span> <span class="n">net</span> <span class="p">);</span>
<span class="p">}</span>
<span class="n">PyMethodDef</span> <span class="n">PyComponent_Methods</span><span class="p">[]</span> <span class="o">=</span>
<span class="p">{</span> <span class="p">{</span> <span class="s">&quot;getX&quot;</span> <span class="p">,</span> <span class="p">(</span><span class="n">PyCFunction</span><span class="p">)</span><span class="n">PyComponent_getX</span> <span class="p">,</span> <span class="n">METH_NOARGS</span>
<span class="p">,</span> <span class="s">&quot;Return the Component X value.&quot;</span> <span class="p">}</span>
<span class="p">,</span> <span class="p">{</span> <span class="s">&quot;getY&quot;</span> <span class="p">,</span> <span class="p">(</span><span class="n">PyCFunction</span><span class="p">)</span><span class="n">PyComponent_getY</span> <span class="p">,</span> <span class="n">METH_NOARGS</span>
<span class="p">,</span> <span class="s">&quot;Return the Component Y value.&quot;</span> <span class="p">}</span>
<span class="p">,</span> <span class="p">{</span> <span class="s">&quot;getNet&quot;</span> <span class="p">,</span> <span class="p">(</span><span class="n">PyCFunction</span><span class="p">)</span><span class="n">PyComponent_getNet</span> <span class="p">,</span> <span class="n">METH_NOARGS</span>
<span class="p">,</span> <span class="s">&quot;Returns the net owning the component.&quot;</span> <span class="p">}</span>
<span class="p">,</span> <span class="p">{</span> <span class="s">&quot;destroy&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">PyCFunction</span><span class="p">)</span><span class="n">PyComponent_destroy</span><span class="p">,</span> <span class="n">METH_NOARGS</span>
<span class="p">,</span> <span class="s">&quot;destroy associated hurricane object, the python object remains.&quot;</span> <span class="p">}</span>
<span class="p">,</span> <span class="p">{</span><span class="nb">NULL</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">}</span> <span class="cm">/* sentinel */</span>
<span class="p">};</span>
<span class="n">DBoDeleteMethod</span><span class="p">(</span><span class="n">Component</span><span class="p">)</span>
<span class="n">PyTypeObjectLinkPyType</span><span class="p">(</span><span class="n">Component</span><span class="p">)</span>
<span class="cp">#else </span><span class="c1">// Python Module Code Part.</span>
<span class="n">PyTypeInheritedObjectDefinitions</span><span class="p">(</span><span class="n">Component</span><span class="p">,</span> <span class="n">Entity</span><span class="p">)</span>
<span class="cp">#endif </span><span class="c1">// Shared Library Code Part.</span>
<span class="p">}</span> <span class="c1">// extern &quot;C&quot;.</span>
<span class="p">}</span> <span class="c1">// Isobar namespace.</span>
</pre></div>
</div>
</div>
<div class="section" id="terminal-class-header">
<h2>4.5 Terminal Class Header<a class="headerlink" href="#terminal-class-header" title="Permalink to this headline"></a></h2>
<p>The contents of this file is almost identical to <a class="reference internal" href="#intermediate-class-header">4.3 Intermediate Class Header</a>,
save for the presence of a <code class="docutils literal"><span class="pre">PyContact_Link()</span></code> function. She is present
at this level because the class is a concrete one and can be instanciated.</p>
<div class="highlight-c++"><div class="highlight"><pre><span></span><span class="cp">#ifndef ISOBAR_PY_CONTACT_H</span>
<span class="cp">#define ISOBAR_PY_CONTACT_H</span>
<span class="cp">#include</span> <span class="cpf">&quot;hurricane/isobar/PyComponent.h&quot;</span><span class="cp"></span>
<span class="cp">#include</span> <span class="cpf">&quot;hurricane/Contact.h&quot;</span><span class="cp"></span>
<span class="k">namespace</span> <span class="n">Isobar</span> <span class="p">{</span>
<span class="k">extern</span> <span class="s">&quot;C&quot;</span> <span class="p">{</span>
<span class="k">typedef</span> <span class="k">struct</span> <span class="p">{</span>
<span class="n">PyComponent</span> <span class="n">_baseObject</span><span class="p">;</span>
<span class="p">}</span> <span class="n">PyContact</span><span class="p">;</span>
<span class="k">extern</span> <span class="n">PyTypeObject</span> <span class="n">PyTypeContact</span><span class="p">;</span>
<span class="k">extern</span> <span class="n">PyMethodDef</span> <span class="n">PyContact_Methods</span><span class="p">[];</span>
<span class="k">extern</span> <span class="n">PyObject</span><span class="o">*</span> <span class="nf">PyContact_Link</span> <span class="p">(</span> <span class="n">Hurricane</span><span class="o">::</span><span class="n">Contact</span><span class="o">*</span> <span class="n">object</span> <span class="p">);</span>
<span class="k">extern</span> <span class="kt">void</span> <span class="nf">PyContact_LinkPyType</span> <span class="p">();</span>
<span class="cp">#define IsPyContact(v) ( (v)-&gt;ob_type == &amp;PyTypeContact )</span>
<span class="cp">#define PYCONTACT(v) ( (PyContact*)(v) )</span>
<span class="cp">#define PYCONTACT_O(v) ( PYCONTACT(v)-&gt;_baseObject._baseObject._object )</span>
<span class="p">}</span> <span class="c1">// extern &quot;C&quot;.</span>
<span class="p">}</span> <span class="c1">// Isobar namespace.</span>
<span class="cp">#endif </span><span class="c1">// ISOBAR_PY_CONTACT_H</span>
</pre></div>
</div>
</div>
<div class="section" id="terminal-class-file">
<h2>4.6 Terminal Class File<a class="headerlink" href="#terminal-class-file" title="Permalink to this headline"></a></h2>
<p>Changes from <a class="reference internal" href="#intermediate-class-file">4.4 Intermediate Class File</a> are:</p>
<ol class="arabic simple">
<li>As previously, we have to redefine the macros <code class="docutils literal"><span class="pre">ACCESS_OBJECT</span></code> and <code class="docutils literal"><span class="pre">ACCESS_CLASS</span></code>.
But, as we are one level deeper into the hierarchy, one more level of
indirection using <code class="docutils literal"><span class="pre">_baseObject</span></code> must be used.<ul>
<li><code class="docutils literal"><span class="pre">ACCESS_OBJECT</span></code> becomes <code class="docutils literal"><span class="pre">_baseObject._baseObject._object</span></code>.</li>
<li><code class="docutils literal"><span class="pre">ACCESS_CLASS</span></code> becomes <code class="docutils literal"><span class="pre">&amp;(_pyObject-&gt;_baseObject._baseObject)</span></code>.</li>
</ul>
</li>
<li>For defining the <code class="docutils literal"><span class="pre">PyTypeContact</span></code> Python type, we call again
<code class="docutils literal"><span class="pre">PyTypeInheritedObjectDefinitions()</span></code>. It is the same whether the class is
terminal or not.</li>
<li>And, this time, as the Python class is concrete, we call the macro
<code class="docutils literal"><span class="pre">DBoLinkCreateMethod()</span></code> to create the <code class="docutils literal"><span class="pre">PyContact_Link()</span></code> function.</li>
</ol>
<div class="highlight-c++"><div class="highlight"><pre><span></span><span class="cp">#include</span> <span class="cpf">&quot;hurricane/isobar/PyContact.h&quot;</span><span class="cp"></span>
<span class="k">namespace</span> <span class="n">Isobar</span> <span class="p">{</span>
<span class="k">using</span> <span class="k">namespace</span> <span class="n">Hurricane</span><span class="p">;</span>
<span class="k">extern</span> <span class="s">&quot;C&quot;</span> <span class="p">{</span>
<span class="cp">#undef ACCESS_OBJECT</span>
<span class="cp">#undef ACCESS_CLASS</span>
<span class="cp">#define ACCESS_OBJECT _baseObject._baseObject._object</span>
<span class="cp">#define ACCESS_CLASS(_pyObject) &amp;(_pyObject-&gt;_baseObject._baseObject)</span>
<span class="cp">#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(Contact,contact,function)</span>
<span class="cp">#if defined(__PYTHON_MODULE__)</span>
<span class="n">DirectGetLongAttribute</span><span class="p">(</span><span class="n">PyContact_getWidth</span> <span class="p">,</span> <span class="n">getWidth</span> <span class="p">,</span> <span class="n">PyContact</span><span class="p">,</span><span class="n">Contact</span><span class="p">)</span>
<span class="n">DirectGetLongAttribute</span><span class="p">(</span><span class="n">PyContact_getHeight</span><span class="p">,</span> <span class="n">getHeight</span><span class="p">,</span> <span class="n">PyContact</span><span class="p">,</span><span class="n">Contact</span><span class="p">)</span>
<span class="n">DBoDestroyAttribute</span><span class="p">(</span><span class="n">PyContact_destroy</span><span class="p">,</span> <span class="n">PyContact</span><span class="p">)</span>
<span class="k">static</span> <span class="n">PyObject</span><span class="o">*</span> <span class="n">PyContact_create</span> <span class="p">(</span> <span class="n">PyObject</span><span class="o">*</span><span class="p">,</span> <span class="n">PyObject</span> <span class="o">*</span><span class="n">args</span> <span class="p">)</span>
<span class="p">{</span>
<span class="n">Contact</span><span class="o">*</span> <span class="n">contact</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span>
<span class="n">HTRY</span>
<span class="c1">// Usual signature then arguments parsing.</span>
<span class="n">HCATCH</span>
<span class="k">return</span> <span class="n">PyContact_Link</span><span class="p">(</span><span class="n">contact</span><span class="p">);</span>
<span class="p">}</span>
<span class="n">PyMethodDef</span> <span class="n">PyContact_Methods</span><span class="p">[]</span> <span class="o">=</span>
<span class="p">{</span> <span class="p">{</span> <span class="s">&quot;create&quot;</span> <span class="p">,</span> <span class="p">(</span><span class="n">PyCFunction</span><span class="p">)</span><span class="n">PyContact_create</span> <span class="p">,</span> <span class="n">METH_VARARGS</span><span class="o">|</span><span class="n">METH_STATIC</span>
<span class="p">,</span> <span class="s">&quot;Create a new Contact.&quot;</span> <span class="p">}</span>
<span class="p">,</span> <span class="p">{</span> <span class="s">&quot;destroy&quot;</span> <span class="p">,</span> <span class="p">(</span><span class="n">PyCFunction</span><span class="p">)</span><span class="n">PyContact_destroy</span> <span class="p">,</span> <span class="n">METH_NOARGS</span>
<span class="p">,</span> <span class="s">&quot;Destroy associated hurricane object, the python object remains.&quot;</span> <span class="p">}</span>
<span class="p">,</span> <span class="p">{</span> <span class="s">&quot;getWidth&quot;</span> <span class="p">,</span> <span class="p">(</span><span class="n">PyCFunction</span><span class="p">)</span><span class="n">PyContact_getWidth</span> <span class="p">,</span> <span class="n">METH_NOARGS</span>
<span class="p">,</span> <span class="s">&quot;Return the contact width.&quot;</span> <span class="p">}</span>
<span class="p">,</span> <span class="p">{</span> <span class="s">&quot;getHeight&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">PyCFunction</span><span class="p">)</span><span class="n">PyContact_getHeight</span><span class="p">,</span> <span class="n">METH_NOARGS</span>
<span class="p">,</span> <span class="s">&quot;Return the contact height.&quot;</span> <span class="p">}</span>
<span class="p">,</span> <span class="p">{</span><span class="nb">NULL</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">}</span> <span class="cm">/* sentinel */</span>
<span class="p">};</span>
<span class="n">DBoDeleteMethod</span><span class="p">(</span><span class="n">Contact</span><span class="p">)</span>
<span class="n">PyTypeObjectLinkPyType</span><span class="p">(</span><span class="n">Contact</span><span class="p">)</span>
<span class="cp">#else </span><span class="c1">// Python Module Code Part.</span>
<span class="n">DBoLinkCreateMethod</span><span class="p">(</span><span class="n">Contact</span><span class="p">)</span>
<span class="n">PyTypeInheritedObjectDefinitions</span><span class="p">(</span><span class="n">Contact</span><span class="p">,</span> <span class="n">Component</span><span class="p">)</span>
<span class="cp">#endif </span><span class="c1">// Shared Library Code Part.</span>
<span class="p">}</span> <span class="c1">// extern &quot;C&quot;.</span>
<span class="p">}</span> <span class="c1">// Isobar namespace.</span>
</pre></div>
</div>
</div>
<div class="section" id="python-module">
<h2>4.8 Python Module<a class="headerlink" href="#python-module" title="Permalink to this headline"></a></h2>
<div class="highlight-c++"><div class="highlight"><pre><span></span><span class="n">DL_EXPORT</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span> <span class="n">initHurricane</span> <span class="p">()</span>
<span class="p">{</span>
<span class="n">PyEntity_LinkPyType</span><span class="p">();</span> <span class="c1">// step 1.</span>
<span class="n">PyComponent_LinkPyType</span><span class="p">();</span>
<span class="n">PyContact_LinkPyType</span><span class="p">();</span>
<span class="n">PYTYPE_READY</span><span class="p">(</span> <span class="n">Entity</span> <span class="p">)</span> <span class="c1">// step 2.</span>
<span class="n">PYTYPE_READY_SUB</span><span class="p">(</span> <span class="n">Component</span><span class="p">,</span> <span class="n">Entity</span> <span class="p">)</span>
<span class="n">PYTYPE_READY_SUB</span><span class="p">(</span> <span class="n">Contact</span> <span class="p">,</span> <span class="n">Component</span> <span class="p">)</span>
<span class="n">__cs</span><span class="p">.</span><span class="n">addType</span><span class="p">(</span> <span class="s">&quot;ent&quot;</span> <span class="p">,</span> <span class="o">&amp;</span><span class="n">PyTypeEntity</span> <span class="p">,</span> <span class="s">&quot;&lt;Entity&gt;&quot;</span> <span class="p">,</span> <span class="nb">false</span> <span class="p">);</span> <span class="c1">// step 3.</span>
<span class="n">__cs</span><span class="p">.</span><span class="n">addType</span><span class="p">(</span> <span class="s">&quot;comp&quot;</span> <span class="p">,</span> <span class="o">&amp;</span><span class="n">PyTypeComponent</span><span class="p">,</span> <span class="s">&quot;&lt;Component&gt;&quot;</span><span class="p">,</span> <span class="nb">false</span><span class="p">,</span> <span class="s">&quot;ent&quot;</span> <span class="p">);</span>
<span class="n">__cs</span><span class="p">.</span><span class="n">addType</span><span class="p">(</span> <span class="s">&quot;contact&quot;</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">PyTypeContact</span> <span class="p">,</span> <span class="s">&quot;&lt;Contact&gt;&quot;</span> <span class="p">,</span> <span class="nb">false</span><span class="p">,</span> <span class="s">&quot;comp&quot;</span> <span class="p">);</span>
<span class="n">PyObject</span><span class="o">*</span> <span class="n">module</span> <span class="o">=</span> <span class="n">Py_InitModule</span><span class="p">(</span> <span class="s">&quot;Hurricane&quot;</span><span class="p">,</span> <span class="n">PyHurricane_Methods</span> <span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="n">module</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span>
<span class="n">cerr</span> <span class="o">&lt;&lt;</span> <span class="s">&quot;[ERROR]</span><span class="se">\n</span><span class="s">&quot;</span>
<span class="o">&lt;&lt;</span> <span class="s">&quot; Failed to initialize Hurricane module.&quot;</span> <span class="o">&lt;&lt;</span> <span class="n">endl</span><span class="p">;</span>
<span class="k">return</span><span class="p">;</span>
<span class="p">}</span>
<span class="n">Py_INCREF</span><span class="p">(</span> <span class="o">&amp;</span><span class="n">PyTypeContact</span> <span class="p">);</span> <span class="c1">// step 4.</span>
<span class="n">PyModule_AddObject</span><span class="p">(</span> <span class="n">module</span><span class="p">,</span> <span class="s">&quot;Contact&quot;</span><span class="p">,</span> <span class="p">(</span><span class="n">PyObject</span><span class="o">*</span><span class="p">)</span><span class="o">&amp;</span><span class="n">PyTypeContact</span> <span class="p">);</span> <span class="c1">// step 4.</span>
<span class="p">}</span>
</pre></div>
</div>
</div>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="NonDBo.html" class="btn btn-neutral float-right" title="5. Case 3 - Non-DBo Standalone Classe" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a>
<a href="DBoStandalone.html" class="btn btn-neutral" title="3. Case 1 - DBo Derived, Standalone" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous</a>
</div>
<hr/>
<div role="contentinfo">
<table class="footer1">
<tr>
<td class="LFooter"><small>
Generated by <a href="http://sphinx-doc.org/">Sphinx</a>
using a <a href="https://readthedocs.org">RTD</a> theme on Oct 01, 2018.
</small></td>
<td class="RFooter"></td>
</tr>
</table>
<table class="footer2">
<tr>
<td class="LFooter">Coriolis 2 Documentation</td>
<td class="RFooter"><small>
&copy; Copyright 2000-2018, UPMC.
</small></td>
</tr>
</table>
</div>
</footer>
</div>
</div>
</section>
</div>
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT:'../',
VERSION:'2',
COLLAPSE_INDEX:false,
FILE_SUFFIX:'.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../_static/jquery.js"></script>
<script type="text/javascript" src="../_static/underscore.js"></script>
<script type="text/javascript" src="../_static/doctools.js"></script>
<script type="text/javascript" src="../_static/js/theme.js"></script>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.StickyNav.enable();
});
</script>
</body>
</html>