2017-07-15 10:35:02 -05:00
<!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 — Coriolis 2 documentation< / title >
< link rel = "stylesheet" href = "../_static/SoC.css" type = "text/css" / >
2017-10-30 09:33:37 -05:00
< link rel = "index" title = "Index"
href="../genindex.html"/>
< link rel = "search" title = "Search" href = "../search.html" / >
2017-07-15 10:35:02 -05:00
< 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’ s Guide< / a > < ul >
< li class = "toctree-l2" > < a class = "reference internal" href = "../UsersGuide/LicenseCredits.html" > Credits & 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 & Initialisation< / a > < ul >
< li class = "toctree-l3" > < a class = "reference internal" href = "../UsersGuide/Configuration.html#general-software-architecture" > General Software Architecture< / a > < / li >
2017-11-17 05:04:33 -06:00
< li class = "toctree-l3" > < a class = "reference internal" href = "../UsersGuide/Configuration.html#first-stage-technology-selection" > First Stage: Technology Selection< / a > < / li >
2017-07-15 10:35:02 -05:00
< 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 & 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 – Placer< / a > < / li >
< li class = "toctree-l4" > < a class = "reference internal" href = "../UsersGuide/ViewerTools.html#knik-global-router" > Knik – Global Router< / a > < / li >
< li class = "toctree-l4" > < a class = "reference internal" href = "../UsersGuide/ViewerTools.html#kite-detailed-router" > Kite – 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 & 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& 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 = "../Stratus/Stratus.html" > Stratus Reference< / a > < / li >
< li class = "toctree-l1" > < a class = "reference internal" href = "../DpGen/DpGen.html" > DpGen Reference< / a > < / li >
< li class = "toctree-l1" > < a class = "reference internal" href = "../Patterns/Patterns.html" > Patterns Reference< / a > < / 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 >
2017-07-17 12:12:18 -05:00
< 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 >
2017-07-15 10:35:02 -05:00
< 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 >
2017-10-30 09:33:37 -05:00
< li class = "toctree-l2 current" > < a class = "current reference internal" href = "#" > 4. Case 2 - Hierarchy of DBo Derived Classes< / a > < ul >
2017-07-15 10:35:02 -05:00
< 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" > 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 & Lambda Value< / a > < / li >
2017-10-30 09:33:37 -05:00
< 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 >
2017-07-15 10:35:02 -05:00
< / ul >
< / li >
< / ul >
< / li >
2017-11-17 05:04:33 -06:00
< 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 >
2017-10-30 09:33:37 -05:00
< 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 >
2017-07-15 10:35:02 -05:00
< / ul >
< / div >
< / 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 > » < / li >
< li > < a href = "index.html" > Hurricane Python/C++ API Tutorial< / a > » < / 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 >
2017-10-30 09:33:37 -05:00
< div class = "highlight-default" > < div class = "highlight" > < pre > < span > < / span > < span class = "n" > PyEntity< / span > < span class = "o" > < --< / span > < span class = "n" > PyComponent< / span > < span class = "o" > < -+-< / span > < span class = "n" > PyContact< / span >
< span class = "o" > +-< / span > < span class = "n" > PySegment< / span > < span class = "o" > < -+-< / span > < span class = "n" > PyHorizontal< / span >
< span class = "o" > +-< / span > < span class = "n" > PyVertical< / span >
< / pre > < / div >
2017-07-15 10:35:02 -05:00
< / 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 >
2017-10-30 09:33:37 -05:00
< 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 >
2017-07-15 10:35:02 -05:00
being related to C++ abstract classes, no objects of those types will be
2017-10-30 09:33:37 -05:00
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 >
2017-07-15 10:35:02 -05:00
but instead two functions:< / p >
< ol class = "arabic simple" >
2017-10-30 09:33:37 -05:00
< 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 >
2017-07-15 10:35:02 -05:00
< / ol >
2017-10-30 09:33:37 -05:00
< 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 >
2017-07-15 10:35:02 -05:00
2017-10-30 09:33:37 -05:00
< span class = "c1" > #include " hurricane/isobar/PyHurricane.h" < / span >
< span class = "c1" > #include " hurricane/Entity.h" < / span >
2017-07-15 10:35:02 -05:00
< span class = "n" > namespace< / span > < span class = "n" > Isobar< / span > < span class = "p" > {< / span >
2017-10-30 09:33:37 -05:00
< span class = "n" > extern< / span > < span class = "s2" > " C" < / span > < span class = "p" > {< / span >
2017-07-15 10:35:02 -05:00
< 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 >
2017-10-30 09:33:37 -05:00
< span class = "c1" > #define IsPyEntity(v) ( (v)-> ob_type == & PyTypeEntity )< / span >
< span class = "c1" > #define PYENTITY(v) ( (PyEntity*)(v) )< / span >
< span class = "c1" > #define PYENTITY_O(v) ( PYENTITY(v)-> _object )< / span >
2017-07-15 10:35:02 -05:00
2017-10-30 09:33:37 -05:00
< span class = "p" > }< / span > < span class = "o" > //< / span > < span class = "n" > extern< / span > < span class = "s2" > " C" < / span > < span class = "o" > .< / span >
2017-07-15 10:35:02 -05:00
< 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 >
2017-10-30 09:33:37 -05:00
< span class = "c1" > #endif // ISOBAR_PY_ENTITY_H< / span >
2017-07-15 10:35:02 -05:00
< / 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 >
2017-10-30 09:33:37 -05:00
< 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 >
2017-07-15 10:35:02 -05:00
< ol class = "arabic simple" >
2017-10-30 09:33:37 -05:00
< 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 >
2017-07-15 10:35:02 -05:00
< / ol >
2017-10-30 09:33:37 -05:00
< div class = "highlight-c++" > < div class = "highlight" > < pre > < span > < / span > < span class = "cp" > #include< / span > < span class = "cpf" > " hurricane/isobar/PyCell.h" < / span > < span class = "cp" > < / span >
< span class = "cp" > #include< / span > < span class = "cpf" > " hurricane/isobar/PyHorizontal.h" < / span > < span class = "cp" > < / span >
< span class = "cp" > #include< / span > < span class = "cpf" > " hurricane/isobar/PyVertical.h" < / span > < span class = "cp" > < / span >
< span class = "cp" > #include< / span > < span class = "cpf" > " hurricane/isobar/PyContact.h" < / span > < span class = "cp" > < / span >
2017-07-15 10:35:02 -05:00
< 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" > " C" < / 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 >
2017-10-30 09:33:37 -05:00
< span class = "nf" > METHOD_HEAD< / span > < span class = "p" > (< / span > < span class = "s" > " Entity.getCell()" )< / span >
2017-07-15 10:35:02 -05:00
< span class = "n" > cell< / span > < span class = "o" > =< / span > < span class = "n" > entity< / span > < span class = "o" > -> < / span > < span class = "n" > getCell< / span > < span class = "p" > ();< / span >
< span class = "n" > HCATCH< / span >
2017-10-30 09:33:37 -05:00
< span class = "k" > return< / span > < span class = "nf" > PyCell_Link< / span > < span class = "p" > (< / span > < span class = "n" > cell< / span > < span class = "p" > );< / span >
2017-07-15 10:35:02 -05:00
< 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" > " getCell" < / 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" > " Returns the entity cell." < / span > < span class = "p" > }< / span >
< span class = "p" > ,< / span > < span class = "p" > {< / span > < span class = "s" > " destroy" < / 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" > " Destroy associated hurricane object, the python object remains." < / 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" > " Invalid Entity (bad occurrence)" < / 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" > < < / span > < span class = "n" > Horizontal< / span > < span class = "o" > *> < / 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" > < < / span > < span class = "n" > Vertical< / span > < span class = "o" > *> < / 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" > < < / span > < span class = "n" > Contact< / span > < span class = "o" > *> < / 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 " C" .< / 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 >
2017-10-30 09:33:37 -05:00
< 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 >
2017-07-15 10:35:02 -05:00
< ol class = "arabic simple" >
2017-10-30 09:33:37 -05:00
< 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
2017-07-15 10:35:02 -05:00
this is < em > not< / em > a pointer but a whole object).< / li >
< / ol >
2017-10-30 09:33:37 -05:00
< div class = "highlight-c++" > < div class = "highlight" > < pre > < span > < / span > < span class = "cp" > #ifndef ISOBAR_PY_COMPONENT_H< / span >
2017-07-15 10:35:02 -05:00
< span class = "cp" > #define ISOBAR_PY_COMPONENT_H< / span >
2017-10-30 09:33:37 -05:00
< span class = "cp" > #include< / span > < span class = "cpf" > " hurricane/isobar/PyEntity.h" < / span > < span class = "cp" > < / span >
< span class = "cp" > #include< / span > < span class = "cpf" > " hurricane/Component.h" < / span > < span class = "cp" > < / span >
2017-07-15 10:35:02 -05:00
< span class = "k" > namespace< / span > < span class = "n" > Isobar< / span > < span class = "p" > {< / span >
< span class = "k" > extern< / span > < span class = "s" > " C" < / 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 >
2017-10-30 09:33:37 -05:00
< span class = "k" > extern< / span > < span class = "kt" > void< / span > < span class = "nf" > PyComponent_LinkPyType< / span > < span class = "p" > ();< / span >
2017-07-15 10:35:02 -05:00
< span class = "cp" > #define IsPyComponent(v) ((v)-> ob_type == & PyTypeComponent)< / span >
< span class = "cp" > #define PYCOMPONENT(v) ((PyComponent*)(v))< / span >
< span class = "cp" > #define PYCOMPONENT_O(v) (static_cast< Component*> (PYCOMPONENT(v)-> _baseObject._object))< / span >
< span class = "p" > }< / span > < span class = "c1" > // extern " C" .< / 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 >
2017-10-30 09:33:37 -05:00
< 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 >
2017-07-15 10:35:02 -05:00
< ol class = "arabic simple" >
2017-10-30 09:33:37 -05:00
< 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 >
2017-07-15 10:35:02 -05:00
< / ul >
< / li >
< / ol >
< p > < / p >
< ol class = "arabic simple" start = "2" >
2017-10-30 09:33:37 -05:00
< 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.
2017-07-15 10:35:02 -05:00
For this this macro we need to give as argument the derived class and the
base class.< / li >
< / ol >
2017-10-30 09:33:37 -05:00
< div class = "highlight-c++" > < div class = "highlight" > < pre > < span > < / span > < span class = "cp" > #include< / span > < span class = "cpf" > " hurricane/isobar/PyComponent.h" < / span > < span class = "cp" > < / span >
< span class = "cp" > #include< / span > < span class = "cpf" > " hurricane/isobar/PyNet.h" < / span > < span class = "cp" > < / span >
2017-07-15 10:35:02 -05:00
< 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" > " C" < / 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) & (_pyObject-> _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 >
2017-10-30 09:33:37 -05:00
< span class = "nf" > METHOD_HEAD< / span > < span class = "p" > (< / span > < span class = "s" > " Component.getNet()" )< / span >
2017-07-15 10:35:02 -05:00
< span class = "n" > net< / span > < span class = "o" > =< / span > < span class = "n" > component< / span > < span class = "o" > -> < / span > < span class = "n" > getNet< / span > < span class = "p" > (< / span > < span class = "p" > );< / span >
< span class = "n" > HCATCH< / span >
2017-10-30 09:33:37 -05:00
< span class = "k" > return< / span > < span class = "nf" > PyNet_Link< / span > < span class = "p" > (< / span > < span class = "n" > net< / span > < span class = "p" > );< / span >
2017-07-15 10:35:02 -05:00
< 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" > " getX" < / 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" > " Return the Component X value." < / span > < span class = "p" > }< / span >
< span class = "p" > ,< / span > < span class = "p" > {< / span > < span class = "s" > " getY" < / 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" > " Return the Component Y value." < / span > < span class = "p" > }< / span >
< span class = "p" > ,< / span > < span class = "p" > {< / span > < span class = "s" > " getNet" < / 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" > " Returns the net owning the component." < / span > < span class = "p" > }< / span >
< span class = "p" > ,< / span > < span class = "p" > {< / span > < span class = "s" > " destroy" < / 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" > " destroy associated hurricane object, the python object remains." < / 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 " C" .< / 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 > ,
2017-10-30 09:33:37 -05:00
save for the presence of a < code class = "docutils literal" > < span class = "pre" > PyContact_Link()< / span > < / code > function. She is present
2017-07-15 10:35:02 -05:00
at this level because the class is a concrete one and can be instanciated.< / p >
2017-10-30 09:33:37 -05:00
< div class = "highlight-c++" > < div class = "highlight" > < pre > < span > < / span > < span class = "cp" > #ifndef ISOBAR_PY_CONTACT_H< / span >
2017-07-15 10:35:02 -05:00
< span class = "cp" > #define ISOBAR_PY_CONTACT_H< / span >
2017-10-30 09:33:37 -05:00
< span class = "cp" > #include< / span > < span class = "cpf" > " hurricane/isobar/PyComponent.h" < / span > < span class = "cp" > < / span >
< span class = "cp" > #include< / span > < span class = "cpf" > " hurricane/Contact.h" < / span > < span class = "cp" > < / span >
2017-07-15 10:35:02 -05:00
< span class = "k" > namespace< / span > < span class = "n" > Isobar< / span > < span class = "p" > {< / span >
< span class = "k" > extern< / span > < span class = "s" > " C" < / 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 >
2017-10-30 09:33:37 -05:00
< 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 >
2017-07-15 10:35:02 -05:00
< span class = "cp" > #define IsPyContact(v) ( (v)-> ob_type == & PyTypeContact )< / span >
< span class = "cp" > #define PYCONTACT(v) ( (PyContact*)(v) )< / span >
< span class = "cp" > #define PYCONTACT_O(v) ( PYCONTACT(v)-> _baseObject._baseObject._object )< / span >
< span class = "p" > }< / span > < span class = "c1" > // extern " C" .< / 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" >
2017-10-30 09:33:37 -05:00
< 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 > .
2017-07-15 10:35:02 -05:00
But, as we are one level deeper into the hierarchy, one more level of
2017-10-30 09:33:37 -05:00
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" > & (_pyObject-> _baseObject._baseObject)< / span > < / code > .< / li >
2017-07-15 10:35:02 -05:00
< / ul >
< / li >
2017-10-30 09:33:37 -05:00
< 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
2017-07-15 10:35:02 -05:00
terminal or not.< / li >
< li > And, this time, as the Python class is concrete, we call the macro
2017-10-30 09:33:37 -05:00
< 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 >
2017-07-15 10:35:02 -05:00
< / ol >
2017-10-30 09:33:37 -05:00
< div class = "highlight-c++" > < div class = "highlight" > < pre > < span > < / span > < span class = "cp" > #include< / span > < span class = "cpf" > " hurricane/isobar/PyContact.h" < / span > < span class = "cp" > < / span >
2017-07-15 10:35:02 -05:00
< 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" > " C" < / 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) & (_pyObject-> _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" > " create" < / 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" > " Create a new Contact." < / span > < span class = "p" > }< / span >
< span class = "p" > ,< / span > < span class = "p" > {< / span > < span class = "s" > " destroy" < / 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" > " Destroy associated hurricane object, the python object remains." < / span > < span class = "p" > }< / span >
< span class = "p" > ,< / span > < span class = "p" > {< / span > < span class = "s" > " getWidth" < / 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" > " Return the contact width." < / span > < span class = "p" > }< / span >
< span class = "p" > ,< / span > < span class = "p" > {< / span > < span class = "s" > " getHeight" < / 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" > " Return the contact height." < / 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 " C" .< / 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 >
2017-10-30 09:33:37 -05:00
< 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 >
2017-07-15 10:35:02 -05:00
< 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 >
2017-10-30 09:33:37 -05:00
< span class = "n" > __cs< / span > < span class = "p" > .< / span > < span class = "n" > addType< / span > < span class = "p" > (< / span > < span class = "s" > " ent" < / span > < span class = "p" > ,< / span > < span class = "o" > & < / span > < span class = "n" > PyTypeEntity< / span > < span class = "p" > ,< / span > < span class = "s" > " < Entity> " < / 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" > " comp" < / span > < span class = "p" > ,< / span > < span class = "o" > & < / span > < span class = "n" > PyTypeComponent< / span > < span class = "p" > ,< / span > < span class = "s" > " < Component> " < / span > < span class = "p" > ,< / span > < span class = "nb" > false< / span > < span class = "p" > ,< / span > < span class = "s" > " ent" < / 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" > " contact" < / span > < span class = "p" > ,< / span > < span class = "o" > & < / span > < span class = "n" > PyTypeContact< / span > < span class = "p" > ,< / span > < span class = "s" > " < Contact> " < / span > < span class = "p" > ,< / span > < span class = "nb" > false< / span > < span class = "p" > ,< / span > < span class = "s" > " comp" < / span > < span class = "p" > );< / span >
2017-07-15 10:35:02 -05:00
< 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" > " Hurricane" < / 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" > < < < / span > < span class = "s" > " [ERROR]< / span > < span class = "se" > \n< / span > < span class = "s" > " < / span >
< span class = "o" > < < < / span > < span class = "s" > " Failed to initialize Hurricane module." < / span > < span class = "o" > < < < / 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" > & < / 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" > " Contact" < / 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" > & < / 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 >
2017-11-17 05:04:33 -06:00
using a < a href = "https://readthedocs.org" > RTD< / a > theme on Nov 17, 2017.
2017-07-15 10:35:02 -05:00
< / small > < / td >
< td class = "RFooter" > < / td >
< / tr >
< / table >
< table class = "footer2" >
< tr >
< td class = "LFooter" > Coriolis 2 Documentation< / td >
< td class = "RFooter" > < small >
© Copyright 2000-2017, 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 >