Seabreeze, first commit
This commit is contained in:
parent
908231c4c4
commit
aed63ccdf5
|
@ -0,0 +1,45 @@
|
|||
# -*- explicit-buffer-name: "CMakeLists.txt<Seabreeze>" -*-
|
||||
|
||||
set(CMAKE_LEGACY_CYGWIN_WIN32 0)
|
||||
project(SEABREEZE)
|
||||
|
||||
option(BUILD_DOC "Build the documentation (doxygen)" OFF)
|
||||
option(CHECK_DATABASE "Run database in full check mode (very slow)" OFF)
|
||||
option(USE_LIBBFD "Link with BFD libraries to print stack traces" OFF)
|
||||
|
||||
cmake_minimum_required(VERSION 2.8.9)
|
||||
|
||||
set(ignoreVariables "${BUILD_DOC} ${CMAKE_INSTALL_DIR}")
|
||||
|
||||
list(INSERT CMAKE_MODULE_PATH 0 "${DESTDIR}$ENV{CORIOLIS_TOP}/share/cmake/Modules/")
|
||||
find_package(Bootstrap REQUIRED)
|
||||
setup_project_paths(CORIOLIS)
|
||||
|
||||
set_cmake_policies()
|
||||
setup_boost(program_options)
|
||||
setup_qt()
|
||||
|
||||
find_package(Libexecinfo REQUIRED)
|
||||
find_package(LibXml2 REQUIRED)
|
||||
find_package(Python 3 REQUIRED COMPONENTS Interpreter Development)
|
||||
find_package(PythonSitePackages REQUIRED)
|
||||
find_package(LEFDEF REQUIRED)
|
||||
find_package(FLUTE REQUIRED)
|
||||
find_package(HURRICANE REQUIRED)
|
||||
find_package(CORIOLIS REQUIRED)
|
||||
#find_package(ANABATIC REQUIRED)
|
||||
#find_package(ETESIAN REQUIRED)
|
||||
#find_package(COLOQUINTE REQUIRED)
|
||||
find_package(Doxygen)
|
||||
|
||||
if(CHECK_DATABASE)
|
||||
add_definitions(-DCHECK_DATABASE)
|
||||
endif(CHECK_DATABASE)
|
||||
if(CHECK_DETERMINISM)
|
||||
add_definitions(-DCHECK_DETERMINISM)
|
||||
endif(CHECK_DETERMINISM)
|
||||
|
||||
add_subdirectory(src)
|
||||
#add_subdirectory(test)
|
||||
add_subdirectory(cmake_modules)
|
||||
#add_subdirectory(doc)
|
|
@ -0,0 +1,2 @@
|
|||
install( FILES FindSEABREEZE.cmake DESTINATION share/cmake/Modules )
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
# - Find the Seabreeze includes and libraries.
|
||||
# The following variables are set if Coriolis is found. If KATABATIC is not
|
||||
# found, KATABATIC_FOUND is set to false.
|
||||
# KATABATIC_FOUND - True when the Coriolis include directory is found.
|
||||
# KATABATIC_INCLUDE_DIR - the path to where the Coriolis include files are.
|
||||
# KATABATIC_LIBRARIES - The path to where the Coriolis library files are.
|
||||
|
||||
|
||||
SET(SEABREEZE_INCLUDE_PATH_DESCRIPTION "directory containing the Katabatic include files. E.g /usr/local/include/coriolis2 or /asim/coriolis/include/coriolis2")
|
||||
|
||||
SET(SEABREEZE_DIR_MESSAGE "Set the SEABREEZE_INCLUDE_DIR cmake cache entry to the ${SEABREEZE_INCLUDE_PATH_DESCRIPTION}")
|
||||
|
||||
# don't even bother under WIN32
|
||||
IF(UNIX)
|
||||
#
|
||||
# Look for an installation.
|
||||
#
|
||||
FIND_PATH(SEABREEZE_INCLUDE_PATH NAMES katabatic/KatabaticEngine.h PATHS
|
||||
# Look in other places.
|
||||
${CORIOLIS_DIR_SEARCH}
|
||||
PATH_SUFFIXES include/coriolis2
|
||||
# Help the user find it if we cannot.
|
||||
DOC "The ${SEABREEZE_INCLUDE_PATH_DESCRIPTION}"
|
||||
)
|
||||
|
||||
FIND_LIBRARY(SEABREEZE_LIBRARY_PATH
|
||||
NAMES seabreeze
|
||||
PATHS ${CORIOLIS_DIR_SEARCH}
|
||||
PATH_SUFFIXES lib64 lib
|
||||
# Help the user find it if we cannot.
|
||||
DOC "The ${SEABREEZE_INCLUDE_PATH_DESCRIPTION}"
|
||||
)
|
||||
|
||||
SET_LIBRARIES_PATH(SEABREEZE SEABREEZE)
|
||||
HURRICANE_CHECK_LIBRARIES(SEABREEZE)
|
||||
|
||||
ENDIF(UNIX)
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
# -*- mode: CMAKE; explicit-buffer-name: # "CMakeLists.txt<Seabreeze/doc>" -*-
|
||||
|
||||
set ( htmlInstallDir share/doc/coriolis2/en/html/doc/Seabreeze )
|
||||
set ( latexInstallDir share/doc/coriolis2/en/latex/Seabreeze )
|
||||
set ( doxExtras customHierarchy.html
|
||||
closed.png
|
||||
open.png
|
||||
tabs.css
|
||||
)
|
||||
|
||||
if(BUILD_DOC AND DOXYGEN_FOUND)
|
||||
add_custom_target ( doc ALL
|
||||
cd ${SEABREEZE_SOURCE_DIR}/doc
|
||||
&& ${DOXYGEN_EXECUTABLE} doxyfile
|
||||
&& cp -f ${doxExtras} html
|
||||
)
|
||||
endif()
|
||||
|
||||
install ( DIRECTORY html/ DESTINATION ${htmlInstallDir} )
|
||||
install ( DIRECTORY latex/ DESTINATION ${latexInstallDir} )
|
||||
install ( FILES asimbook.cls DESTINATION ${latexInstallDir} )
|
||||
|
|
@ -0,0 +1,186 @@
|
|||
<doxygenlayout version="1.0">
|
||||
<!-- Navigation index tabs for HTML output -->
|
||||
<navindex>
|
||||
<tab type="mainpage" visible="yes" title=""/>
|
||||
<tab type="pages" visible="yes" title=""/>
|
||||
<tab type="modules" visible="yes" title=""/>
|
||||
<tab type="namespaces" visible="yes" title="">
|
||||
<tab type="namespaces" visible="yes" title=""/>
|
||||
<tab type="namespacemembers" visible="yes" title=""/>
|
||||
</tab>
|
||||
<tab type="classes" visible="yes" title="">
|
||||
<tab type="classes" visible="yes" title=""/>
|
||||
<tab type="classindex" visible="$ALPHABETICAL_INDEX" title=""/>
|
||||
<tab type="hierarchy" visible="yes" title=""/>
|
||||
<tab type="classmembers" visible="yes" title=""/>
|
||||
</tab>
|
||||
<tab type="files" visible="yes" title="">
|
||||
<tab type="files" visible="yes" title=""/>
|
||||
<tab type="globals" visible="yes" title=""/>
|
||||
</tab>
|
||||
<!--
|
||||
<tab type="dirs" visible="yes" title=""/>
|
||||
-->
|
||||
<tab type="examples" visible="yes" title=""/>
|
||||
</navindex>
|
||||
|
||||
<!-- Layout definition for a class page -->
|
||||
<class>
|
||||
<briefdescription visible="yes"/>
|
||||
<includes visible="$SHOW_INCLUDE_FILES"/>
|
||||
<inheritancegraph visible="$CLASS_GRAPH"/>
|
||||
<collaborationgraph visible="$COLLABORATION_GRAPH"/>
|
||||
<allmemberslink visible="yes"/>
|
||||
<memberdecl>
|
||||
<nestedclasses visible="yes" title=""/>
|
||||
<publictypes title=""/>
|
||||
<publicslots title=""/>
|
||||
<signals title=""/>
|
||||
<publicmethods title=""/>
|
||||
<publicstaticmethods title=""/>
|
||||
<publicattributes title=""/>
|
||||
<publicstaticattributes title=""/>
|
||||
<protectedtypes title=""/>
|
||||
<protectedslots title=""/>
|
||||
<protectedmethods title=""/>
|
||||
<protectedstaticmethods title=""/>
|
||||
<protectedattributes title=""/>
|
||||
<protectedstaticattributes title=""/>
|
||||
<packagetypes title=""/>
|
||||
<packagemethods title=""/>
|
||||
<packagestaticmethods title=""/>
|
||||
<packageattributes title=""/>
|
||||
<packagestaticattributes title=""/>
|
||||
<properties title=""/>
|
||||
<events title=""/>
|
||||
<privatetypes title=""/>
|
||||
<privateslots title=""/>
|
||||
<privatemethods title=""/>
|
||||
<privatestaticmethods title=""/>
|
||||
<privateattributes title=""/>
|
||||
<privatestaticattributes title=""/>
|
||||
<friends title=""/>
|
||||
<related title="" subtitle=""/>
|
||||
<membergroups visible="yes"/>
|
||||
</memberdecl>
|
||||
<detaileddescription title=""/>
|
||||
<memberdef>
|
||||
<typedefs title=""/>
|
||||
<enums title=""/>
|
||||
<constructors title=""/>
|
||||
<functions title=""/>
|
||||
<related title=""/>
|
||||
<variables title=""/>
|
||||
<properties title=""/>
|
||||
<events title=""/>
|
||||
</memberdef>
|
||||
<usedfiles visible="$SHOW_USED_FILES"/>
|
||||
<authorsection visible="yes"/>
|
||||
</class>
|
||||
|
||||
<!-- Layout definition for a namespace page -->
|
||||
<namespace>
|
||||
<briefdescription visible="yes"/>
|
||||
<memberdecl>
|
||||
<nestednamespaces visible="yes" title=""/>
|
||||
<classes visible="yes" title=""/>
|
||||
<typedefs title=""/>
|
||||
<enums title=""/>
|
||||
<functions title=""/>
|
||||
<variables title=""/>
|
||||
<membergroups visible="yes"/>
|
||||
</memberdecl>
|
||||
<detaileddescription title=""/>
|
||||
<memberdef>
|
||||
<typedefs title=""/>
|
||||
<enums title=""/>
|
||||
<functions title=""/>
|
||||
<variables title=""/>
|
||||
</memberdef>
|
||||
<authorsection visible="yes"/>
|
||||
</namespace>
|
||||
|
||||
<!-- Layout definition for a file page -->
|
||||
<file>
|
||||
<briefdescription visible="yes"/>
|
||||
<includes visible="$SHOW_INCLUDE_FILES"/>
|
||||
<includegraph visible="$INCLUDE_GRAPH"/>
|
||||
<includedbygraph visible="$INCLUDED_BY_GRAPH"/>
|
||||
<sourcelink visible="yes"/>
|
||||
<memberdecl>
|
||||
<classes visible="yes" title=""/>
|
||||
<namespaces visible="yes" title=""/>
|
||||
<defines title=""/>
|
||||
<typedefs title=""/>
|
||||
<enums title=""/>
|
||||
<functions title=""/>
|
||||
<variables title=""/>
|
||||
<membergroups visible="yes"/>
|
||||
</memberdecl>
|
||||
<detaileddescription title=""/>
|
||||
<memberdef>
|
||||
<defines title=""/>
|
||||
<typedefs title=""/>
|
||||
<enums title=""/>
|
||||
<functions title=""/>
|
||||
<variables title=""/>
|
||||
</memberdef>
|
||||
<authorsection/>
|
||||
</file>
|
||||
|
||||
<!-- Layout definition for a group page -->
|
||||
<group>
|
||||
<briefdescription visible="yes"/>
|
||||
<groupgraph visible="$GROUP_GRAPHS"/>
|
||||
<memberdecl>
|
||||
<classes visible="yes" title=""/>
|
||||
<namespaces visible="yes" title=""/>
|
||||
<dirs visible="yes" title=""/>
|
||||
<nestedgroups visible="yes" title=""/>
|
||||
<files visible="yes" title=""/>
|
||||
<defines title=""/>
|
||||
<typedefs title=""/>
|
||||
<enums title=""/>
|
||||
<enumvalues title=""/>
|
||||
<functions title=""/>
|
||||
<variables title=""/>
|
||||
<signals title=""/>
|
||||
<publicslots title=""/>
|
||||
<protectedslots title=""/>
|
||||
<privateslots title=""/>
|
||||
<events title=""/>
|
||||
<properties title=""/>
|
||||
<friends title=""/>
|
||||
<membergroups visible="yes"/>
|
||||
</memberdecl>
|
||||
<detaileddescription title=""/>
|
||||
<memberdef>
|
||||
<pagedocs/>
|
||||
<defines title=""/>
|
||||
<typedefs title=""/>
|
||||
<enums title=""/>
|
||||
<enumvalues title=""/>
|
||||
<functions title=""/>
|
||||
<variables title=""/>
|
||||
<signals title=""/>
|
||||
<publicslots title=""/>
|
||||
<protectedslots title=""/>
|
||||
<privateslots title=""/>
|
||||
<events title=""/>
|
||||
<properties title=""/>
|
||||
<friends title=""/>
|
||||
</memberdef>
|
||||
<authorsection visible="yes"/>
|
||||
</group>
|
||||
|
||||
<!-- Layout definition for a directory page -->
|
||||
<directory>
|
||||
<briefdescription visible="yes"/>
|
||||
<directorygraph visible="yes"/>
|
||||
<memberdecl>
|
||||
<dirs visible="yes"/>
|
||||
<files visible="yes"/>
|
||||
</memberdecl>
|
||||
<detaileddescription title=""/>
|
||||
</directory>
|
||||
</doxygenlayout>
|
|
@ -0,0 +1,49 @@
|
|||
|
||||
// -*- C++ -*-
|
||||
|
||||
|
||||
/*! \class Node
|
||||
*! \brief Node description(\b API)
|
||||
*
|
||||
*/
|
||||
|
||||
/*! \var int Node::R
|
||||
* The Resistor of a point in the circuit / node in the tree.
|
||||
*/
|
||||
|
||||
/*! \var int Node::Rt
|
||||
* The Resister "total" - the value of resistor that is used
|
||||
* to compute the Elmore's delay.
|
||||
*/
|
||||
|
||||
/*! \var int Node::C
|
||||
* The Capacitor of a point in the circuit / node in the tree.
|
||||
*/
|
||||
|
||||
/*! \var Node* Node::Np
|
||||
* The parent node of current node
|
||||
*/
|
||||
|
||||
/* \var std::vector<Node*> Node::Ne
|
||||
* A list of children nodes of current node
|
||||
*/
|
||||
|
||||
/*! \var int Node::label
|
||||
* The label / Id of current node
|
||||
*/
|
||||
|
||||
/*! \var int Node::ap
|
||||
* A boolean variable to determine whether the current node
|
||||
* is after or before node i at where we need to compute the
|
||||
* Elmore's delay.
|
||||
*/
|
||||
|
||||
/*! \function Node::Node();
|
||||
* Default constructor.
|
||||
*/
|
||||
|
||||
/*! \function Node::~Node();
|
||||
* Default destructor.
|
||||
*/
|
||||
|
||||
|
|
@ -0,0 +1,102 @@
|
|||
// -*- C++ -*-
|
||||
|
||||
namespace Seabreeze {
|
||||
|
||||
/*! \class Elmore
|
||||
* \brief Main class for computing the Elmore's delay
|
||||
*/
|
||||
|
||||
/*! \var vector<Contact*> Elmore::_conts
|
||||
* The list of Contacts contained in the considered Net
|
||||
*/
|
||||
|
||||
/*! \var vector<Contact*> Elmore::checker
|
||||
* The list of Contacts that we have treated. It serves as a checker
|
||||
* of circles. If a circle exists in the Net, Elmore's delay cannot be
|
||||
* computed.
|
||||
*/
|
||||
|
||||
/*! \var Tree Elmore::_tree
|
||||
* The tree necessary to run the algorithm to compute Elmore's delay
|
||||
*/
|
||||
|
||||
/*! \function Elmore::Elmore( Net* net = NULL )
|
||||
* Constructor
|
||||
*/
|
||||
|
||||
/*! \function Elmore::~Elmore()
|
||||
* Default destructor
|
||||
*/
|
||||
|
||||
/*! \function void Elmore::contFromNet( Net* net )
|
||||
* Build the list _const from net
|
||||
*/
|
||||
|
||||
/*! \function void Elmore::buildTree( Contact* ct )
|
||||
* Build the _tree with ct as the root
|
||||
*/
|
||||
|
||||
/*! \function void Elmore::clearTree()
|
||||
* Clean the _tree and the list checker
|
||||
*/
|
||||
|
||||
/*! \function Tree* Elmore::getTree()
|
||||
* \Return the _tree
|
||||
*/
|
||||
|
||||
/*! \function int Elmore::delayElmore()
|
||||
* \Return the value of Elmore's delay
|
||||
*/
|
||||
|
||||
/*! \function void Elmore::toTree( ostream& )
|
||||
* Print the _tree to an output file
|
||||
*/
|
||||
|
||||
/*! \class ElmoreProperty
|
||||
*
|
||||
*/
|
||||
|
||||
/*! \var Name ElmorerProperty::_name
|
||||
*
|
||||
*/
|
||||
|
||||
/*! \var Elmore ElmoreProperty::_elmore
|
||||
*
|
||||
*/
|
||||
|
||||
/*! \function ElmoreProperty::ElmoreProperty( Net* )
|
||||
* Constructor
|
||||
*/
|
||||
|
||||
/*! \function ElmoreProperty* ElmoreProperty::create( Net* net )
|
||||
* \Return the ElmoreProperty created from the net
|
||||
*/
|
||||
|
||||
/*! \function Name ElmoreProperty::getName()
|
||||
* \Return the name of the property
|
||||
*/
|
||||
|
||||
/*! \class ElmoreExtension
|
||||
* \brief Useful to access to functions of Elmore class without having to calling it
|
||||
*/
|
||||
|
||||
/*! \var Net* ElmoreExtension::Nets
|
||||
*
|
||||
*/
|
||||
|
||||
/*! \function void ElmoreExtension::destroyAll()
|
||||
*
|
||||
*/
|
||||
|
||||
/*! \function void ElmoreExtension::destroy()
|
||||
*
|
||||
*/
|
||||
|
||||
/*! \function Tree ElmoreExtension::getTree( Elmore* elmore )
|
||||
* \Return the _tree of elmore
|
||||
*/
|
||||
|
||||
/*! \function void ElmoreExtension::toTree( Elmore* elmore, std::ostream& out )
|
||||
* Print the _tree of elmore to the output file out
|
||||
*/
|
||||
}
|
|
@ -0,0 +1,882 @@
|
|||
|
||||
|
||||
/*
|
||||
* +-----------------------------------------------------------------+
|
||||
* | HTML Standart Tags |
|
||||
* +-----------------------------------------------------------------+
|
||||
*/
|
||||
|
||||
html, body, th, td, tr, p, li, h1, h2, h3, h4, h5, h6 {
|
||||
font-size: 11pt;
|
||||
/* The Open Sans font family is supplied by TexLive. */
|
||||
font-family: "Roboto", "Open Sans", Verdana, sans-serif;;
|
||||
}
|
||||
|
||||
html {
|
||||
background: #dddddd;
|
||||
}
|
||||
|
||||
body {
|
||||
color: black;
|
||||
background: white;
|
||||
background-color: white;
|
||||
background-position: top left;
|
||||
background-attachment: fixed;
|
||||
background-repeat: no-repeat;
|
||||
margin-top: 2em;
|
||||
width: 600pt;
|
||||
margin-right: auto;
|
||||
margin-left: auto;
|
||||
padding: 30pt;
|
||||
/*
|
||||
margin-right: 12%;
|
||||
margin-left: 12%;
|
||||
*/
|
||||
}
|
||||
|
||||
hr {
|
||||
height: 1px;
|
||||
border: 0;
|
||||
color: #004400;
|
||||
background-color: #004400;
|
||||
}
|
||||
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
/*font-family: "URW Bookman L", "Liberation Serif", sans-serif;*/
|
||||
font-family: "URW Bookman L";
|
||||
}
|
||||
|
||||
h1.header { text-align: center; }
|
||||
h1 { text-align: left; }
|
||||
h2, h3, h4, h5, h6 { text-align: left;
|
||||
padding-top: 11pt;
|
||||
}
|
||||
h1, h2, h3 { /*font-family: "Liberation Serif", sans-serif; */
|
||||
/*color: #09550B;*/
|
||||
}
|
||||
h1 { font-weight: bold; font-size: 170%; /*letter-spacing:0.2em; word-spacing:0.4em;*/ }
|
||||
h2 { font-weight: bold; font-size: 140%; /*letter-spacing:0.2em; word-spacing:0.4em;*/ }
|
||||
h3 { font-weight: bold; font-size: 118%; /*letter-spacing:0.2em; word-spacing:0.4em;*/ }
|
||||
h4 { font-weight: bold; font-size: 100%; }
|
||||
h5 { font-style: italic; font-size: 100%; }
|
||||
h6 { font-variant: small-caps; font-size: 100%; }
|
||||
|
||||
h2.classHierarchy {
|
||||
/*border: 1px none #008500;*/
|
||||
border: 1px none #000000;
|
||||
border-top-width: 1px;
|
||||
border-top-style: dotted;
|
||||
padding-top: 1em;
|
||||
}
|
||||
|
||||
|
||||
.hide {
|
||||
display: none;
|
||||
color: white;
|
||||
}
|
||||
|
||||
|
||||
p {
|
||||
margin-top: 0.6em;
|
||||
margin-bottom: 0.6em;
|
||||
margin-left: 0.0em;
|
||||
margin-right: 0.0em;
|
||||
}
|
||||
|
||||
|
||||
address {
|
||||
text-align: right;
|
||||
font-weight: bold;
|
||||
font-style: italic;
|
||||
font-size: 80%;
|
||||
}
|
||||
|
||||
|
||||
caption { font-weight: bold }
|
||||
|
||||
|
||||
blockquote {
|
||||
margin-left: 4em;
|
||||
margin-right: 4em;
|
||||
margin-top: 0.8em;
|
||||
margin-bottom: 0.8em;
|
||||
font-style: italic;
|
||||
color: #003300;
|
||||
}
|
||||
|
||||
blockquote p {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
blockquote address {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
dt, dd { margin-top: 0; margin-bottom: 0; }
|
||||
dt { font-weight: bold; }
|
||||
|
||||
|
||||
pre, tt, code {
|
||||
/*font-family: "andale mono", monospace;*/
|
||||
font-size: 100%;
|
||||
white-space: pre;
|
||||
}
|
||||
|
||||
pre {
|
||||
font-size: 80%;
|
||||
/*border: dashed;*/
|
||||
border-width: thin;
|
||||
border-color: #003300;
|
||||
/*background-color: #EEEEEE;*/
|
||||
background-color: #FCFCE1;
|
||||
padding: 0.5em;
|
||||
margin-left: 2em;
|
||||
margin-right: 2em
|
||||
}
|
||||
|
||||
/*
|
||||
tt { color: green; }
|
||||
*/
|
||||
em { font-style: italic;
|
||||
font-weight: normal; }
|
||||
strong { font-weight: bold; }
|
||||
|
||||
span.textit { font-style: italic; }
|
||||
span.textbf { font-weight: bold; }
|
||||
|
||||
.small { font-size: 90%; }
|
||||
.white { color: #FFFFFF; }
|
||||
|
||||
|
||||
ul.toc {
|
||||
list-style: disc;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
|
||||
a:link img, a:visited img { border-style: none; }
|
||||
a img { color: white; }
|
||||
|
||||
a {
|
||||
color: black;
|
||||
border-bottom: 1px solid black;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:link, a:active, a:visited {
|
||||
/*color: #09550B;*/
|
||||
/*text-decoration: none;*/
|
||||
}
|
||||
|
||||
a:hover, a:focus {
|
||||
/*color: #FF9900; */
|
||||
border-bottom: 2px solid black;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* +-----------------------------------------------------------------+
|
||||
* | Doxygen Specific Classes |
|
||||
* +-----------------------------------------------------------------+
|
||||
*/
|
||||
|
||||
|
||||
/* -------------------------------------------------------------------
|
||||
* Header & Footer Classes (customized top page navigation bar).
|
||||
*/
|
||||
|
||||
h1.header {
|
||||
font-size: 200%;
|
||||
/*font-family: times, verdana, sans-serif;*/
|
||||
}
|
||||
|
||||
h2.memtitle {
|
||||
display: none;
|
||||
}
|
||||
|
||||
center.header {
|
||||
background-color: #CCE6CA;
|
||||
}
|
||||
|
||||
table.header {
|
||||
/*width: 100%;*/
|
||||
/*background-color: #EEEEEE;*/
|
||||
background-color: #CCE6CA;
|
||||
}
|
||||
|
||||
div.header {
|
||||
text-align: center;
|
||||
margin: 14pt 0pt 0pt 0pt;
|
||||
}
|
||||
|
||||
div.summary {
|
||||
color: white;
|
||||
background-color: black;
|
||||
border: 4px solid black;
|
||||
}
|
||||
|
||||
div.summary a {
|
||||
font-size: 90%;
|
||||
color: white;
|
||||
padding: 2px 0px;
|
||||
text-align: center;
|
||||
background-color: black;
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
table.header td {
|
||||
padding: 2px 14px;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
/*font-family: verdana, sans-serif;*/
|
||||
font-size: 110%;
|
||||
}
|
||||
|
||||
table.UserDefined {
|
||||
border: 1px solid;
|
||||
}
|
||||
|
||||
table.UserDefined th {
|
||||
border: 1px solid;
|
||||
}
|
||||
|
||||
table.UserDefined td {
|
||||
padding: 0px 5px;
|
||||
}
|
||||
|
||||
table.DoxUser td, table.DoxUser th {
|
||||
padding: 0px 5px;
|
||||
border: 0px;
|
||||
}
|
||||
|
||||
table.DoxUser th {
|
||||
background-color: #CCE6CA;
|
||||
}
|
||||
|
||||
table.footer1, table.footer2 { width: 100%; }
|
||||
td.LFooter { text-align: left; }
|
||||
td.RFooter { text-align: right; }
|
||||
td.CFooter { text-align: center;}
|
||||
table.footer2 td.RFooter { font-weight: bold; width: 35% }
|
||||
table.footer2 td.CFooter { width: 30% }
|
||||
table.footer2 td.LFooter { font-weight: bold; width: 35%; /*font-family: time;*/ }
|
||||
|
||||
table.classHierarchy {
|
||||
border-collapse: separate;
|
||||
border-spacing: 5px;
|
||||
font-size: 110%;
|
||||
}
|
||||
|
||||
table.classHierarchy a {
|
||||
border-style: none;
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
table.classHierarchy tr {
|
||||
border: 1px solid blue;
|
||||
}
|
||||
|
||||
table.classHierarchy td.normal {
|
||||
border: 1px solid #dddddd;
|
||||
width: 140pt;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
background-color: #dddddd;
|
||||
}
|
||||
|
||||
table.classHierarchy td.virtual {
|
||||
border: 1px solid black;
|
||||
width: 140pt;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
table.classHierarchy td.wnormal {
|
||||
border: 1px solid #dddddd;
|
||||
width: 240pt;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
background-color: #dddddd;
|
||||
}
|
||||
|
||||
table.classHierarchy td.wvirtual {
|
||||
border: 1px solid black;
|
||||
width: 240pt;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
div.ah, span.ah {
|
||||
font-family: Times;
|
||||
font-size: 300%;
|
||||
font-weight: bold;
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
div.title {
|
||||
text-align: center;
|
||||
font-size: 200%;
|
||||
font-weight: bold;
|
||||
padding: 20px;
|
||||
border: 2px solid black;
|
||||
}
|
||||
|
||||
div.center, div.image {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
|
||||
/* -------------------------------------------------------------------
|
||||
* Top navigation lists.
|
||||
*/
|
||||
|
||||
span.mlabels {
|
||||
font-size: 90%;
|
||||
font-style: italic;
|
||||
padding-left: 10pt;
|
||||
margin: 10pt;
|
||||
border-left: 1px solid black
|
||||
}
|
||||
|
||||
div.contents {
|
||||
padding-top: 20pt;
|
||||
}
|
||||
|
||||
div.tabs {
|
||||
border-top: 1px solid black;
|
||||
}
|
||||
|
||||
div.tabs, div.tabs1, div.tabs2, div.tabs3, div.tabs4 {
|
||||
border-left: 1px solid black;
|
||||
}
|
||||
|
||||
ul.tablist {
|
||||
/*
|
||||
padding: 5pt;
|
||||
background-color: red;
|
||||
*/
|
||||
margin: 0pt;
|
||||
padding: 0pt;
|
||||
border-top: none;
|
||||
border-bottom: none;
|
||||
border-left: none;
|
||||
border-right: none;
|
||||
}
|
||||
|
||||
ul.tablist li {
|
||||
/*
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
overflow: auto;
|
||||
display: inline;
|
||||
background-color: yellow;
|
||||
*/
|
||||
font-size: 90%;
|
||||
border-top: none;
|
||||
border-bottom: 1px solid black;
|
||||
border-left: none;
|
||||
border-right: 1px solid black;
|
||||
display: table-cell;
|
||||
text-align: center;
|
||||
padding: 2pt;
|
||||
width: 5%;
|
||||
}
|
||||
|
||||
ul.tablist li:hover {
|
||||
background-color: black;
|
||||
color: white;
|
||||
}
|
||||
|
||||
ul.tablist li:hover a {
|
||||
background-color: black;
|
||||
color: white;
|
||||
}
|
||||
|
||||
ul.tablist * a { border-bottom: none; }
|
||||
|
||||
ul.tablist * a:link img, ul.tablist * a:visited img { border-style: none; border-bottom: none; }
|
||||
|
||||
ul.tablist * a:link, ul.tablist * a:visited {
|
||||
color: black;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
ul.tablist * a:hover, ul.tablist * a:focus, ul.tablist * a:active {
|
||||
color: white;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
div.navpath {
|
||||
padding: 5pt 0pt 0pt 0pt;
|
||||
}
|
||||
|
||||
.navpath ul {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.navpath ul li {
|
||||
display: inline;
|
||||
list-style-type: none;
|
||||
padding-left: 20px;
|
||||
padding-right: 10px;
|
||||
background-image: url('closed.png');
|
||||
background-repeat: no-repeat;
|
||||
background-position: left;
|
||||
color: #364D7C;
|
||||
}
|
||||
|
||||
.navpath ul li a {
|
||||
border: 2px solid black;
|
||||
padding-left: 10px;
|
||||
padding-right: 10px;
|
||||
font-weight: bold;
|
||||
color: black;
|
||||
}
|
||||
|
||||
|
||||
/* -------------------------------------------------------------------
|
||||
* Quick Index Class (top page navigation bar).
|
||||
*/
|
||||
|
||||
div.qindex, div.nav {
|
||||
width: 100%-4px;
|
||||
/*background-color: #DADAEF;*/
|
||||
/*background-color: #eeeeff;*/
|
||||
background-color: #cccccc;
|
||||
/*background-color: #CCE6CA;*/
|
||||
border: 0px solid #003300;
|
||||
text-align: center;
|
||||
margin: 0px;
|
||||
padding: 2px;
|
||||
line-height: 140%;
|
||||
}
|
||||
|
||||
a.qindex, a.qindex:visited, a.qindex:hover, a.qindexHL, a.el, a.elRef {
|
||||
text-decoration: none;
|
||||
/*font-family: Courier;*/
|
||||
font-weight: normal;
|
||||
/*font-size: 110%;*/
|
||||
}
|
||||
|
||||
a.qindex, a.qindex:visited {
|
||||
/*color: #09550B;*/
|
||||
color: black;
|
||||
border: 2px solid #cccccc;
|
||||
padding: 2px 2px;
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
a.qindex:hover {
|
||||
/*background-color: #ddddff;*/
|
||||
font-weight: bold;
|
||||
padding: 2px 2px;
|
||||
border: 2px solid black;
|
||||
}
|
||||
|
||||
a.qindexHL, a.qindexHL:hover, a.qindexHL:visited {
|
||||
background-color: #0c780c;
|
||||
color: #ffffff;
|
||||
border: 1px double #9295C2;
|
||||
}
|
||||
|
||||
a.code:link, a.code:visited, a.codeRef:link, a.codeRef:visited {
|
||||
text-decoration: none;
|
||||
font-weight: normal;
|
||||
color: #0000ff;
|
||||
}
|
||||
|
||||
.indexkey {
|
||||
background-color: #eeeeff;
|
||||
border: 1px solid #b0b0b0;
|
||||
padding: 2px 15px;
|
||||
}
|
||||
|
||||
.indexkey, .indexvalue {
|
||||
background-color: #eeeeff;
|
||||
border: 1px solid #b0b0b0;
|
||||
padding: 2px 15px;
|
||||
}
|
||||
|
||||
.indexkey {
|
||||
width: 40%;
|
||||
}
|
||||
|
||||
.indexvalue {
|
||||
width: 80%;
|
||||
}
|
||||
|
||||
h3 a[name="index__"],
|
||||
h3 a[name="index_a"],
|
||||
h3 a[name="index_b"],
|
||||
h3 a[name="index_c"],
|
||||
h3 a[name="index_d"],
|
||||
h3 a[name="index_e"],
|
||||
h3 a[name="index_f"],
|
||||
h3 a[name="index_g"],
|
||||
h3 a[name="index_h"],
|
||||
h3 a[name="index_i"],
|
||||
h3 a[name="index_j"],
|
||||
h3 a[name="index_k"],
|
||||
h3 a[name="index_l"],
|
||||
h3 a[name="index_m"],
|
||||
h3 a[name="index_n"],
|
||||
h3 a[name="index_o"],
|
||||
h3 a[name="index_p"],
|
||||
h3 a[name="index_q"],
|
||||
h3 a[name="index_r"],
|
||||
h3 a[name="index_s"],
|
||||
h3 a[name="index_t"],
|
||||
h3 a[name="index_u"],
|
||||
h3 a[name="index_v"],
|
||||
h3 a[name="index_w"],
|
||||
h3 a[name="index_x"],
|
||||
h3 a[name="index_y"],
|
||||
h3 a[name="index_z"],
|
||||
h3 a[name="index_0"],
|
||||
h3 a[name="index_1"],
|
||||
h3 a[name="index_2"],
|
||||
h3 a[name="index_3"],
|
||||
h3 a[name="index_4"],
|
||||
h3 a[name="index_5"],
|
||||
h3 a[name="index_6"],
|
||||
h3 a[name="index_7"],
|
||||
h3 a[name="index_8"],
|
||||
h3 a[name="index_9"]
|
||||
h3 a[id="index__"],
|
||||
h3 a#index_a,
|
||||
h3 a#index_b,
|
||||
h3 a#index_c,
|
||||
h3 a#index_d,
|
||||
h3 a#index_e,
|
||||
h3 a#index_f,
|
||||
h3 a#index_g,
|
||||
h3 a#index_h,
|
||||
h3 a#index_i,
|
||||
h3 a#index_j,
|
||||
h3 a#index_k,
|
||||
h3 a#index_l,
|
||||
h3 a#index_m,
|
||||
h3 a#index_n,
|
||||
h3 a#index_o,
|
||||
h3 a#index_p,
|
||||
h3 a#index_q,
|
||||
h3 a#index_r,
|
||||
h3 a#index_s,
|
||||
h3 a#index_t,
|
||||
h3 a#index_u,
|
||||
h3 a#index_v,
|
||||
h3 a#index_w,
|
||||
h3 a#index_x,
|
||||
h3 a#index_y,
|
||||
h3 a#index_z,
|
||||
h3 a#index_0,
|
||||
h3 a#index_1,
|
||||
h3 a#index_2,
|
||||
h3 a#index_3,
|
||||
h3 a#index_4,
|
||||
h3 a#index_5,
|
||||
h3 a#index_6,
|
||||
h3 a#index_7,
|
||||
h3 a#index_8,
|
||||
h3 a#index_9,
|
||||
h3 a#index_0x7e
|
||||
{
|
||||
font-family: time;
|
||||
font-size: 250%;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
|
||||
/* -------------------------------------------------------------------
|
||||
* Verbatim Source Code / Examples.
|
||||
*/
|
||||
|
||||
div.fragment {
|
||||
font-family: "Roboto Mono", "Monospace";
|
||||
font-size: 80%;
|
||||
border: none;
|
||||
/*border-width: thin; */
|
||||
/*border-color: #003300;*/
|
||||
/*background-color: #FCFCE1;*/
|
||||
background-color: #fefefe;
|
||||
padding: 0.5em;
|
||||
margin-left: 5%;
|
||||
margin-right: 5%
|
||||
}
|
||||
|
||||
div.fragment a.code:link,
|
||||
div.fragment a.code:visited,
|
||||
div.fragment a.codeRef:link,
|
||||
div.fragment a.codeRef:visited {
|
||||
text-decoration: none;
|
||||
font-weight: bold;
|
||||
color: black;
|
||||
border: none;
|
||||
}
|
||||
|
||||
div.line {
|
||||
white-space: pre;
|
||||
padding: 0pt;
|
||||
margin: 0pt;
|
||||
}
|
||||
|
||||
span.keyword { color: #008000 }
|
||||
span.keywordtype { color: #604020 }
|
||||
span.keywordflow { color: #e08000 }
|
||||
span.comment { color: #800000 }
|
||||
span.preprocessor { color: #806020 }
|
||||
span.stringliteral { color: #002080 }
|
||||
span.charliteral { color: #008080 }
|
||||
span.red { color: red }
|
||||
|
||||
|
||||
/* -------------------------------------------------------------------
|
||||
* Attributes Listing.
|
||||
*/
|
||||
|
||||
a.el, a.elRef {
|
||||
font-family: "Roboto Mono", Courier;
|
||||
font-weight: bold;
|
||||
font-size: 110%;
|
||||
color: black;
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
p.formulaDsp {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.mdTable {
|
||||
/*border: 1px solid #868686;*/
|
||||
/*background-color: #DADAEF;*/
|
||||
/*background-color: #F4F4FB;*/
|
||||
border: 1px none #008500;
|
||||
border-left-width: 1px;
|
||||
border-left-style: solid;
|
||||
/*background-color: #B8E6B8;*/
|
||||
/*background-color: #CCE6CA;*/
|
||||
margin-top: 25px;
|
||||
font-size: 105%;
|
||||
}
|
||||
|
||||
.mdRow {
|
||||
padding: 5px 10px;
|
||||
}
|
||||
|
||||
/* This Mozilla/Firefox bug has been corrected from v1.5.
|
||||
* .mdname1 {
|
||||
* padding: 3px 0px 0px 0px;
|
||||
* }
|
||||
*/
|
||||
|
||||
.mdescLeft, .mdescRight {
|
||||
padding: 0px 8px 4px 8px;
|
||||
font-size: 11px;
|
||||
font-style: italic;
|
||||
/*background-color: #FAFAFA;*/
|
||||
border-top: 1px none #E0E0E0;
|
||||
border-right: 1px none #E0E0E0;
|
||||
border-bottom: 1px none #E0E0E0;
|
||||
border-left: 1px none #E0E0E0;
|
||||
margin: 0px;
|
||||
}
|
||||
|
||||
.memitem {
|
||||
margin-bottom: 30px;
|
||||
border: 1px none #008500;
|
||||
}
|
||||
|
||||
.memproto {
|
||||
/*background-color: #CCE6CA;*/
|
||||
background-color: #cccccc;
|
||||
border-left-width: 4px;
|
||||
border-left-style: solid;
|
||||
/*border-color: #008500;*/
|
||||
border-color: black;
|
||||
}
|
||||
|
||||
.memname {
|
||||
white-space: nowrap;
|
||||
padding-left: 5px;
|
||||
font-size: 105%;
|
||||
}
|
||||
|
||||
table.memname * {
|
||||
font-family: "Roboto Mono", "Monospace";
|
||||
}
|
||||
|
||||
|
||||
.memdoc{
|
||||
padding-left: 5px;
|
||||
/*margin-top: -8px;*/
|
||||
border-left-width: 1px;
|
||||
border-left-style: solid;
|
||||
/*border-color: #008500;*/
|
||||
border-color: black;
|
||||
}
|
||||
|
||||
div.contents * table tr {
|
||||
padding: 3px 3px 3px 8px;
|
||||
}
|
||||
|
||||
.memSeparator {
|
||||
font-size: 1pt;
|
||||
}
|
||||
|
||||
.memItemLeft, .memItemRight, .memTemplItemLeft, .memTemplItemRight {
|
||||
vertical-align: top;
|
||||
/*padding: 1px 0px 0px 8px;*/
|
||||
padding: 3px 3px 3px 8px;
|
||||
margin: 4px;
|
||||
border-top-width: 1px;
|
||||
border-right-width: 1px;
|
||||
border-bottom-width: 1px;
|
||||
border-left-width: 1px;
|
||||
/*
|
||||
border-top-color: #0c0c0c;
|
||||
border-right-color: #0c0c0c;
|
||||
border-bottom-color: #0c0c0c;
|
||||
border-left-color: #0c0c0c;
|
||||
*/
|
||||
border-top-style: none;
|
||||
border-right-style: none;
|
||||
/*
|
||||
border-bottom-style: dotted;
|
||||
*/
|
||||
border-left-style: none;
|
||||
/*background-color: #DADAEF;*/
|
||||
/*background-color: #eeeeff;*/
|
||||
/*background-color: #EEEEEE;*/
|
||||
/*background-color: #CCE6CA;*/
|
||||
font-family: "Roboto Mono", "Monospace";
|
||||
}
|
||||
|
||||
.memTemplItemLeft, .memTemplItemRight {
|
||||
border-bottom-width: 2px;
|
||||
border-bottom-style: solid;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.memItemLeft { font-size: 11px; width: 100pt; }
|
||||
.memItemRight { font-size: 12px; }
|
||||
.memTemplItemLeft { font-size: 11px; }
|
||||
.memTemplItemRight { font-size: 12px; }
|
||||
|
||||
.memTemplParams {
|
||||
color: #FFFFFF;
|
||||
background-color: #000000;
|
||||
font-size: 11px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.groupText, .groupHeader {
|
||||
color: #09550B;
|
||||
font-size: 130%;
|
||||
font-weight: bold;
|
||||
margin-top: 15px;
|
||||
}
|
||||
|
||||
.groupHeader {
|
||||
margin-bottom: -30pt;
|
||||
}
|
||||
|
||||
.inherit {
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
||||
/* -------------------------------------------------------------------
|
||||
* General Classes Index.
|
||||
*/
|
||||
|
||||
span.icona {
|
||||
margin-right: 10pt;
|
||||
}
|
||||
|
||||
div.toc li.level1 {
|
||||
margin-left: 0px;
|
||||
}
|
||||
|
||||
div.toc li.level2 {
|
||||
margin-left: 15px;
|
||||
display: none;
|
||||
}
|
||||
|
||||
div.toc li.level3 {
|
||||
margin-left: 30px;
|
||||
display: none;
|
||||
}
|
||||
|
||||
div.toc li.level4 {
|
||||
margin-left: 45px;
|
||||
display: none;
|
||||
}
|
||||
|
||||
.directory .levels {
|
||||
white-space: nowrap;
|
||||
width: 100%;
|
||||
text-align: right;
|
||||
font-size: 9pt;
|
||||
}
|
||||
|
||||
.directory .levels span {
|
||||
cursor: pointer;
|
||||
padding-left: 2px;
|
||||
padding-right: 2px;
|
||||
color: #3D578C;
|
||||
}
|
||||
|
||||
|
||||
div.directory {
|
||||
margin: 10px 0px;
|
||||
border-top: 2px solid black;
|
||||
border-bottom: 2px solid black;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.directory table {
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
.directory td {
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.directory td.entry {
|
||||
white-space: nowrap;
|
||||
padding-right: 6px;
|
||||
padding-top: 3px;
|
||||
}
|
||||
|
||||
.directory td.entry a {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.directory td.entry a img {
|
||||
border: none;
|
||||
}
|
||||
|
||||
.directory td.desc {
|
||||
width: 100%;
|
||||
padding-left: 6px;
|
||||
padding-right: 6px;
|
||||
padding-top: 3px;
|
||||
border-left: 1px solid rgba(0,0,0,0.05);
|
||||
}
|
||||
|
||||
.directory tr.even {
|
||||
padding-left: 6px;
|
||||
background-color: #F7F8FB;
|
||||
}
|
||||
|
||||
.directory img {
|
||||
vertical-align: -30%;
|
||||
}
|
|
@ -0,0 +1,50 @@
|
|||
// -*- C++ -*-
|
||||
|
||||
/*! \class Tree
|
||||
* \brief The tree contains all points of the circuit as its' nodes.
|
||||
*/
|
||||
|
||||
/*! \var vector<Node*> Tree::nodes
|
||||
* The list of nodes contained in the tree
|
||||
*/
|
||||
|
||||
/*! \function Tree::Tree()
|
||||
* Default constructor
|
||||
*/
|
||||
|
||||
/*! \function Tree:~Tree()
|
||||
* Default destructor
|
||||
*/
|
||||
|
||||
/*! \function int Tree::get_N()
|
||||
* Returns the number of nodes in the tree / points in the circuit
|
||||
*/
|
||||
|
||||
/*! \function Node* Tree::get_node( int i )
|
||||
* Returns node at index i in the tree
|
||||
*/
|
||||
|
||||
/*! \function vector<Node*> get_node_list()
|
||||
* Returns the list of nodes contained in the tree
|
||||
*/
|
||||
|
||||
/*! \function void Tree::new_node()
|
||||
* Create and add a new node to the tree
|
||||
*/
|
||||
|
||||
/*! \function void Tree::After_i( Node* node_i )
|
||||
* For each node in the tree, determine if they are after or before node_i.
|
||||
* In other words, change the value of ap of each node to 0 or 1 accordingly.
|
||||
*/
|
||||
|
||||
/*! \function set<int> Tree::Branch_i( int i )
|
||||
* Returns a set of indexes of nodes who are on the same branch as node i.
|
||||
*/
|
||||
|
||||
/*! \function int Tree::Delay_Elmore( int i)
|
||||
* Computes the Elmore's delay and returns the result.
|
||||
*/
|
||||
|
||||
/*! \function void Tree::print( ostream& out )
|
||||
* Prints the tree to the output file.
|
||||
*/
|
|
@ -0,0 +1,798 @@
|
|||
%%
|
||||
%% This is file `book.cls',
|
||||
%% generated with the docstrip utility.
|
||||
%%
|
||||
%% The original source files were:
|
||||
%%
|
||||
%% classes.dtx (with options: `book')
|
||||
%%
|
||||
%% This is a generated file.
|
||||
%%
|
||||
%% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001
|
||||
%% The LaTeX3 Project and any individual authors listed elsewhere
|
||||
%% in this file.
|
||||
%%
|
||||
%% This file was generated from file(s) of the LaTeX base system.
|
||||
%% --------------------------------------------------------------
|
||||
%%
|
||||
%% It may be distributed and/or modified under the
|
||||
%% conditions of the LaTeX Project Public License, either version 1.2
|
||||
%% of this license or (at your option) any later version.
|
||||
%% The latest version of this license is in
|
||||
%% http://www.latex-project.org/lppl.txt
|
||||
%% and version 1.2 or later is part of all distributions of LaTeX
|
||||
%% version 1999/12/01 or later.
|
||||
%%
|
||||
%% This file may only be distributed together with a copy of the LaTeX
|
||||
%% base system. You may however distribute the LaTeX base system without
|
||||
%% such generated files.
|
||||
%%
|
||||
%% The list of all files belonging to the LaTeX base distribution is
|
||||
%% given in the file `manifest.txt'. See also `legal.txt' for additional
|
||||
%% information.
|
||||
%%
|
||||
%% \CharacterTable
|
||||
%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
|
||||
%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
|
||||
%% Digits \0\1\2\3\4\5\6\7\8\9
|
||||
%% Exclamation \! Double quote \" Hash (number) \#
|
||||
%% Dollar \$ Percent \% Ampersand \&
|
||||
%% Acute accent \' Left paren \( Right paren \)
|
||||
%% Asterisk \* Plus \+ Comma \,
|
||||
%% Minus \- Point \. Solidus \/
|
||||
%% Colon \: Semicolon \; Less than \<
|
||||
%% Equals \= Greater than \> Question mark \?
|
||||
%% Commercial at \@ Left bracket \[ Backslash \\
|
||||
%% Right bracket \] Circumflex \^ Underscore \_
|
||||
%% Grave accent \` Left brace \{ Vertical bar \|
|
||||
%% Right brace \} Tilde \~}
|
||||
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
|
||||
\ProvidesClass{asimbook}
|
||||
[2005/11/21 v1.0
|
||||
ASIM LaTeX document class]
|
||||
\newcommand\@ptsize{}
|
||||
\newif\if@restonecol
|
||||
\newif\if@titlepage
|
||||
\@titlepagetrue
|
||||
\newif\if@openright
|
||||
\newif\if@mainmatter \@mainmattertrue
|
||||
\if@compatibility\else
|
||||
\DeclareOption{a4paper}
|
||||
{\setlength\paperheight {297mm}%
|
||||
\setlength\paperwidth {210mm}}
|
||||
\DeclareOption{a5paper}
|
||||
{\setlength\paperheight {210mm}%
|
||||
\setlength\paperwidth {148mm}}
|
||||
\DeclareOption{b5paper}
|
||||
{\setlength\paperheight {250mm}%
|
||||
\setlength\paperwidth {176mm}}
|
||||
\DeclareOption{letterpaper}
|
||||
{\setlength\paperheight {11in}%
|
||||
\setlength\paperwidth {8.5in}}
|
||||
\DeclareOption{legalpaper}
|
||||
{\setlength\paperheight {14in}%
|
||||
\setlength\paperwidth {8.5in}}
|
||||
\DeclareOption{executivepaper}
|
||||
{\setlength\paperheight {10.5in}%
|
||||
\setlength\paperwidth {7.25in}}
|
||||
\DeclareOption{landscape}
|
||||
{\setlength\@tempdima {\paperheight}%
|
||||
\setlength\paperheight {\paperwidth}%
|
||||
\setlength\paperwidth {\@tempdima}}
|
||||
\fi
|
||||
\if@compatibility
|
||||
\renewcommand\@ptsize{0}
|
||||
\else
|
||||
\DeclareOption{10pt}{\renewcommand\@ptsize{0}}
|
||||
\fi
|
||||
\DeclareOption{11pt}{\renewcommand\@ptsize{1}}
|
||||
\DeclareOption{12pt}{\renewcommand\@ptsize{2}}
|
||||
\if@compatibility\else
|
||||
\DeclareOption{oneside}{\@twosidefalse \@mparswitchfalse}
|
||||
\fi
|
||||
\DeclareOption{twoside}{\@twosidetrue \@mparswitchtrue}
|
||||
\DeclareOption{draft}{\setlength\overfullrule{5pt}}
|
||||
\if@compatibility\else
|
||||
\DeclareOption{final}{\setlength\overfullrule{0pt}}
|
||||
\fi
|
||||
\DeclareOption{titlepage}{\@titlepagetrue}
|
||||
\if@compatibility\else
|
||||
\DeclareOption{notitlepage}{\@titlepagefalse}
|
||||
\fi
|
||||
\if@compatibility
|
||||
\@openrighttrue
|
||||
\else
|
||||
\DeclareOption{openright}{\@openrighttrue}
|
||||
\DeclareOption{openany}{\@openrightfalse}
|
||||
\fi
|
||||
\if@compatibility\else
|
||||
\DeclareOption{onecolumn}{\@twocolumnfalse}
|
||||
\fi
|
||||
\DeclareOption{twocolumn}{\@twocolumntrue}
|
||||
\DeclareOption{leqno}{\input{leqno.clo}}
|
||||
\DeclareOption{fleqn}{\input{fleqn.clo}}
|
||||
\DeclareOption{openbib}{%
|
||||
\AtEndOfPackage{%
|
||||
\renewcommand\@openbib@code{%
|
||||
\advance\leftmargin\bibindent
|
||||
\itemindent -\bibindent
|
||||
\listparindent \itemindent
|
||||
\parsep \z@
|
||||
}%
|
||||
\renewcommand\newblock{\par}}%
|
||||
}
|
||||
\ExecuteOptions{letterpaper,10pt,twoside,onecolumn,final,openright}
|
||||
\ProcessOptions
|
||||
\input{bk1\@ptsize.clo}
|
||||
\setlength\lineskip{1\p@}
|
||||
\setlength\normallineskip{1\p@}
|
||||
\renewcommand\baselinestretch{}
|
||||
\setlength\parskip{0\p@ \@plus \p@}
|
||||
\@lowpenalty 51
|
||||
\@medpenalty 151
|
||||
\@highpenalty 301
|
||||
\setcounter{topnumber}{2}
|
||||
\renewcommand\topfraction{.7}
|
||||
\setcounter{bottomnumber}{1}
|
||||
\renewcommand\bottomfraction{.3}
|
||||
\setcounter{totalnumber}{3}
|
||||
\renewcommand\textfraction{.2}
|
||||
\renewcommand\floatpagefraction{.5}
|
||||
\setcounter{dbltopnumber}{2}
|
||||
\renewcommand\dbltopfraction{.7}
|
||||
\renewcommand\dblfloatpagefraction{.5}
|
||||
%%%% Select Chapter font.
|
||||
\newcommand \textchapter [1] {\textsf{\textbf{#1}}}
|
||||
\newcommand \fontchapter {\sffamily \bfseries}
|
||||
\if@twoside
|
||||
\def\ps@headings{%
|
||||
\let\@oddfoot\@empty\let\@evenfoot\@empty
|
||||
\def\@evenhead{\thepage\hfil\slshape\leftmark}%
|
||||
\def\@oddhead{{\slshape\rightmark}\hfil\thepage}%
|
||||
\let\@mkboth\markboth
|
||||
\def\chaptermark##1{%
|
||||
\markboth {\MakeUppercase{%
|
||||
\ifnum \c@secnumdepth >\m@ne
|
||||
\if@mainmatter
|
||||
\@chapapp\ \thechapter. \ %
|
||||
\fi
|
||||
\fi
|
||||
##1}}{}}%
|
||||
\def\sectionmark##1{%
|
||||
\markright {\MakeUppercase{%
|
||||
\ifnum \c@secnumdepth >\z@
|
||||
\thesection. \ %
|
||||
\fi
|
||||
##1}}}}
|
||||
\else
|
||||
\def\ps@headings{%
|
||||
\let\@oddfoot\@empty
|
||||
\def\@oddhead{{\slshape\rightmark}\hfil\thepage}%
|
||||
\let\@mkboth\markboth
|
||||
\def\chaptermark##1{%
|
||||
\markright {\MakeUppercase{%
|
||||
\ifnum \c@secnumdepth >\m@ne
|
||||
\if@mainmatter
|
||||
\@chapapp\ \thechapter. \ %
|
||||
\fi
|
||||
\fi
|
||||
##1}}}}
|
||||
\fi
|
||||
\def\ps@myheadings{%
|
||||
\let\@oddfoot\@empty\let\@evenfoot\@empty
|
||||
\def\@evenhead{\thepage\hfil\slshape\leftmark}%
|
||||
\def\@oddhead{{\slshape\rightmark}\hfil\thepage}%
|
||||
\let\@mkboth\@gobbletwo
|
||||
\let\chaptermark\@gobble
|
||||
\let\sectionmark\@gobble
|
||||
}
|
||||
\if@titlepage
|
||||
\newcommand\maketitle{\begin{titlepage}%
|
||||
\let\footnotesize\small
|
||||
\let\footnoterule\relax
|
||||
\let \footnote \thanks
|
||||
\null\vfil
|
||||
\vskip 60\p@
|
||||
\begin{center}%
|
||||
{\LARGE \@title \par}%
|
||||
\vskip 3em%
|
||||
{\large
|
||||
\lineskip .75em%
|
||||
\begin{tabular}[t]{c}%
|
||||
\@author
|
||||
\end{tabular}\par}%
|
||||
\vskip 1.5em%
|
||||
{\large \@date \par}% % Set date in \large size.
|
||||
\end{center}\par
|
||||
\@thanks
|
||||
\vfil\null
|
||||
\end{titlepage}%
|
||||
\setcounter{footnote}{0}%
|
||||
\global\let\thanks\relax
|
||||
\global\let\maketitle\relax
|
||||
\global\let\@thanks\@empty
|
||||
\global\let\@author\@empty
|
||||
\global\let\@date\@empty
|
||||
\global\let\@title\@empty
|
||||
\global\let\title\relax
|
||||
\global\let\author\relax
|
||||
\global\let\date\relax
|
||||
\global\let\and\relax
|
||||
}
|
||||
\else
|
||||
\newcommand\maketitle{\par
|
||||
\begingroup
|
||||
\renewcommand\thefootnote{\@fnsymbol\c@footnote}%
|
||||
\def\@makefnmark{\rlap{\@textsuperscript{\normalfont\@thefnmark}}}%
|
||||
\long\def\@makefntext##1{\parindent 1em\noindent
|
||||
\hb@xt@1.8em{%
|
||||
\hss\@textsuperscript{\normalfont\@thefnmark}}##1}%
|
||||
\if@twocolumn
|
||||
\ifnum \col@number=\@ne
|
||||
\@maketitle
|
||||
\else
|
||||
\twocolumn[\@maketitle]%
|
||||
\fi
|
||||
\else
|
||||
\newpage
|
||||
\global\@topnum\z@ % Prevents figures from going at top of page.
|
||||
\@maketitle
|
||||
\fi
|
||||
\thispagestyle{plain}\@thanks
|
||||
\endgroup
|
||||
\setcounter{footnote}{0}%
|
||||
\global\let\thanks\relax
|
||||
\global\let\maketitle\relax
|
||||
\global\let\@maketitle\relax
|
||||
\global\let\@thanks\@empty
|
||||
\global\let\@author\@empty
|
||||
\global\let\@date\@empty
|
||||
\global\let\@title\@empty
|
||||
\global\let\title\relax
|
||||
\global\let\author\relax
|
||||
\global\let\date\relax
|
||||
\global\let\and\relax
|
||||
}
|
||||
\def\@maketitle{%
|
||||
\newpage
|
||||
\null
|
||||
\vskip 2em%
|
||||
\begin{center}%
|
||||
\let \footnote \thanks
|
||||
{\LARGE \@title \par}%
|
||||
\vskip 1.5em%
|
||||
{\large
|
||||
\lineskip .5em%
|
||||
\begin{tabular}[t]{c}%
|
||||
\@author
|
||||
\end{tabular}\par}%
|
||||
\vskip 1em%
|
||||
{\large \@date}%
|
||||
\end{center}%
|
||||
\par
|
||||
\vskip 1.5em}
|
||||
\fi
|
||||
\newcommand*\chaptermark[1]{}
|
||||
\setcounter{secnumdepth}{2}
|
||||
\newcounter {part}
|
||||
\newcounter {chapter}
|
||||
\newcounter {section}[chapter]
|
||||
\newcounter {subsection}[section]
|
||||
\newcounter {subsubsection}[subsection]
|
||||
\newcounter {paragraph}[subsubsection]
|
||||
\newcounter {subparagraph}[paragraph]
|
||||
\renewcommand \thepart {\@Roman\c@part}
|
||||
\renewcommand \thechapter {\@arabic\c@chapter}
|
||||
\renewcommand \thesection {\thechapter.\@arabic\c@section}
|
||||
\renewcommand\thesubsection {\thesection.\@arabic\c@subsection}
|
||||
\renewcommand\thesubsubsection{\thesubsection .\@arabic\c@subsubsection}
|
||||
\renewcommand\theparagraph {\thesubsubsection.\@arabic\c@paragraph}
|
||||
\renewcommand\thesubparagraph {\theparagraph.\@arabic\c@subparagraph}
|
||||
\newcommand\@chapapp{\chaptername}
|
||||
\newcommand\frontmatter{%
|
||||
\cleardoublepage
|
||||
\@mainmatterfalse
|
||||
\pagenumbering{roman}}
|
||||
\newcommand\mainmatter{%
|
||||
\cleardoublepage
|
||||
\@mainmattertrue
|
||||
\pagenumbering{arabic}}
|
||||
\newcommand\backmatter{%
|
||||
\if@openright
|
||||
\cleardoublepage
|
||||
\else
|
||||
\clearpage
|
||||
\fi
|
||||
\@mainmatterfalse}
|
||||
\newcommand\part{%
|
||||
\if@openright
|
||||
\cleardoublepage
|
||||
\else
|
||||
\clearpage
|
||||
\fi
|
||||
\thispagestyle{plain}%
|
||||
\if@twocolumn
|
||||
\onecolumn
|
||||
\@tempswatrue
|
||||
\else
|
||||
\@tempswafalse
|
||||
\fi
|
||||
\null\vfil
|
||||
\secdef\@part\@spart}
|
||||
|
||||
\def\@part[#1]#2{%
|
||||
\ifnum \c@secnumdepth >-2\relax
|
||||
\refstepcounter{part}%
|
||||
\addcontentsline{toc}{part}{\thepart\hspace{1em}#1}%
|
||||
\else
|
||||
\addcontentsline{toc}{part}{#1}%
|
||||
\fi
|
||||
\markboth{}{}%
|
||||
{\centering
|
||||
\interlinepenalty \@M
|
||||
\normalfont
|
||||
\ifnum \c@secnumdepth >-2\relax
|
||||
\huge\bfseries \partname\nobreakspace\thepart
|
||||
\par
|
||||
\vskip 20\p@
|
||||
\fi
|
||||
\Huge \bfseries #2\par}%
|
||||
\@endpart}
|
||||
\def\@spart#1{%
|
||||
{\centering
|
||||
\interlinepenalty \@M
|
||||
\normalfont
|
||||
\Huge \bfseries #1\par}%
|
||||
\@endpart}
|
||||
\def\@endpart{\vfil\newpage
|
||||
\if@twoside
|
||||
\if@openright
|
||||
\null
|
||||
\thispagestyle{empty}%
|
||||
\newpage
|
||||
\fi
|
||||
\fi
|
||||
\if@tempswa
|
||||
\twocolumn
|
||||
\fi}
|
||||
\newcommand\chapter{\if@openright\cleardoublepage\else\clearpage\fi
|
||||
\thispagestyle{plain}%
|
||||
\global\@topnum\z@
|
||||
\@afterindentfalse
|
||||
\secdef\@chapter\@schapter}
|
||||
\def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne
|
||||
\if@mainmatter
|
||||
\refstepcounter{chapter}%
|
||||
\typeout{\@chapapp\space\thechapter.}%
|
||||
\addcontentsline{toc}{chapter}%
|
||||
{\protect\numberline{\thechapter}#1}%
|
||||
\else
|
||||
\addcontentsline{toc}{chapter}{#1}%
|
||||
\fi
|
||||
\else
|
||||
\addcontentsline{toc}{chapter}{#1}%
|
||||
\fi
|
||||
\chaptermark{#1}%
|
||||
\addtocontents{lof}{\protect\addvspace{10\p@}}%
|
||||
\addtocontents{lot}{\protect\addvspace{10\p@}}%
|
||||
\if@twocolumn
|
||||
\@topnewpage[\@makechapterhead{#2}]%
|
||||
\else
|
||||
\@makechapterhead{#2}%
|
||||
\@afterheading
|
||||
\fi}
|
||||
%%%%\def\@makechapterhead#1{%
|
||||
%%%% \vspace*{50\p@}%
|
||||
%%%% {\parindent \z@ \raggedright \normalfont
|
||||
%%%% \ifnum \c@secnumdepth >\m@ne
|
||||
%%%% \if@mainmatter
|
||||
%%%% \huge\bfseries \@chapapp\space \thechapter
|
||||
%%%% \par\nobreak
|
||||
%%%% \vskip 20\p@
|
||||
%%%% \fi
|
||||
%%%% \fi
|
||||
%%%% \interlinepenalty\@M
|
||||
%%%% \Huge \bfseries #1\par\nobreak
|
||||
%%%% \vskip 40\p@
|
||||
%%%% }}
|
||||
\newlength \titlewidth
|
||||
\setlength \titlewidth {\textwidth}
|
||||
\addtolength \titlewidth {\marginparwidth}
|
||||
\addtolength \titlewidth {\marginparsep}
|
||||
\def\@makechapterhead#1{%
|
||||
\vspace*{50\p@}%
|
||||
{\parindent \z@ \raggedleft \fontchapter
|
||||
\ifnum \c@secnumdepth >\m@ne
|
||||
\if@mainmatter
|
||||
\huge \@chapapp\space \thechapter
|
||||
\par\nobreak
|
||||
\vskip 20\p@
|
||||
\fi
|
||||
\fi
|
||||
\interlinepenalty\@M
|
||||
\hsize=\titlewidth
|
||||
\Huge #1 \par\nobreak
|
||||
\hsize=\textwidth
|
||||
\vskip 40\p@
|
||||
}}
|
||||
\def\@schapter#1{\if@twocolumn
|
||||
\@topnewpage[\@makeschapterhead{#1}]%
|
||||
\else
|
||||
\@makeschapterhead{#1}%
|
||||
\@afterheading
|
||||
\fi}
|
||||
%%%%\def\@makeschapterhead#1{%
|
||||
%%%% \vspace*{50\p@}%
|
||||
%%%% {\parindent \z@ \raggedright
|
||||
%%%% \normalfont
|
||||
%%%% \interlinepenalty\@M
|
||||
%%%% \Huge \bfseries #1\par\nobreak
|
||||
%%%% \vskip 40\p@
|
||||
%%%% }}
|
||||
\def\@makeschapterhead#1{%
|
||||
\vspace*{50\p@}%
|
||||
{\parindent \z@ \raggedright
|
||||
\normalfont
|
||||
\interlinepenalty\@M
|
||||
\hsize=\titlewidth
|
||||
\flushright
|
||||
\Huge \bfseries #1\par\nobreak
|
||||
\hsize=\textwidth
|
||||
\vskip 40\p@
|
||||
}}
|
||||
\newcommand\section{\@startsection {section}{1}{\z@}%
|
||||
{-3.5ex \@plus -1ex \@minus -.2ex}%
|
||||
{2.3ex \@plus.2ex}%
|
||||
{\normalfont\Large\bfseries}}
|
||||
\newcommand\subsection{\@startsection{subsection}{2}{\z@}%
|
||||
{-3.25ex\@plus -1ex \@minus -.2ex}%
|
||||
{1.5ex \@plus .2ex}%
|
||||
{\normalfont\large\bfseries}}
|
||||
\newcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}%
|
||||
{-3.25ex\@plus -1ex \@minus -.2ex}%
|
||||
{1.5ex \@plus .2ex}%
|
||||
{\normalfont\normalsize\bfseries}}
|
||||
\newcommand\paragraph{\@startsection{paragraph}{4}{\z@}%
|
||||
{3.25ex \@plus1ex \@minus.2ex}%
|
||||
{-1em}%
|
||||
{\normalfont\normalsize\bfseries}}
|
||||
\newcommand\subparagraph{\@startsection{subparagraph}{5}{\parindent}%
|
||||
{3.25ex \@plus1ex \@minus .2ex}%
|
||||
{-1em}%
|
||||
{\normalfont\normalsize\bfseries}}
|
||||
\if@twocolumn
|
||||
\setlength\leftmargini {2em}
|
||||
\else
|
||||
\setlength\leftmargini {2.5em}
|
||||
\fi
|
||||
\leftmargin \leftmargini
|
||||
\setlength\leftmarginii {2.2em}
|
||||
\setlength\leftmarginiii {1.87em}
|
||||
\setlength\leftmarginiv {1.7em}
|
||||
\if@twocolumn
|
||||
\setlength\leftmarginv {.5em}
|
||||
\setlength\leftmarginvi {.5em}
|
||||
\else
|
||||
\setlength\leftmarginv {1em}
|
||||
\setlength\leftmarginvi {1em}
|
||||
\fi
|
||||
\setlength \labelsep {.5em}
|
||||
\setlength \labelwidth{\leftmargini}
|
||||
\addtolength\labelwidth{-\labelsep}
|
||||
\@beginparpenalty -\@lowpenalty
|
||||
\@endparpenalty -\@lowpenalty
|
||||
\@itempenalty -\@lowpenalty
|
||||
\renewcommand\theenumi{\@arabic\c@enumi}
|
||||
\renewcommand\theenumii{\@alph\c@enumii}
|
||||
\renewcommand\theenumiii{\@roman\c@enumiii}
|
||||
\renewcommand\theenumiv{\@Alph\c@enumiv}
|
||||
\newcommand\labelenumi{\theenumi.}
|
||||
\newcommand\labelenumii{(\theenumii)}
|
||||
\newcommand\labelenumiii{\theenumiii.}
|
||||
\newcommand\labelenumiv{\theenumiv.}
|
||||
\renewcommand\p@enumii{\theenumi}
|
||||
\renewcommand\p@enumiii{\theenumi(\theenumii)}
|
||||
\renewcommand\p@enumiv{\p@enumiii\theenumiii}
|
||||
\newcommand\labelitemi{\textbullet}
|
||||
\newcommand\labelitemii{\normalfont\bfseries \textendash}
|
||||
\newcommand\labelitemiii{\textasteriskcentered}
|
||||
\newcommand\labelitemiv{\textperiodcentered}
|
||||
\newenvironment{description}
|
||||
{\list{}{\labelwidth\z@ \itemindent-\leftmargin
|
||||
\let\makelabel\descriptionlabel}}
|
||||
{\endlist}
|
||||
\newcommand*\descriptionlabel[1]{\hspace\labelsep
|
||||
\normalfont\bfseries #1}
|
||||
\newenvironment{verse}
|
||||
{\let\\\@centercr
|
||||
\list{}{\itemsep \z@
|
||||
\itemindent -1.5em%
|
||||
\listparindent\itemindent
|
||||
\rightmargin \leftmargin
|
||||
\advance\leftmargin 1.5em}%
|
||||
\item\relax}
|
||||
{\endlist}
|
||||
\newenvironment{quotation}
|
||||
{\list{}{\listparindent 1.5em%
|
||||
\itemindent \listparindent
|
||||
\rightmargin \leftmargin
|
||||
\parsep \z@ \@plus\p@}%
|
||||
\item\relax}
|
||||
{\endlist}
|
||||
\newenvironment{quote}
|
||||
{\list{}{\rightmargin\leftmargin}%
|
||||
\item\relax}
|
||||
{\endlist}
|
||||
\if@compatibility
|
||||
\newenvironment{titlepage}
|
||||
{%
|
||||
\cleardoublepage
|
||||
\if@twocolumn
|
||||
\@restonecoltrue\onecolumn
|
||||
\else
|
||||
\@restonecolfalse\newpage
|
||||
\fi
|
||||
\thispagestyle{empty}%
|
||||
\setcounter{page}\z@
|
||||
}%
|
||||
{\if@restonecol\twocolumn \else \newpage \fi
|
||||
}
|
||||
\else
|
||||
\newenvironment{titlepage}
|
||||
{%
|
||||
\cleardoublepage
|
||||
\if@twocolumn
|
||||
\@restonecoltrue\onecolumn
|
||||
\else
|
||||
\@restonecolfalse\newpage
|
||||
\fi
|
||||
\thispagestyle{empty}%
|
||||
\setcounter{page}\@ne
|
||||
}%
|
||||
{\if@restonecol\twocolumn \else \newpage \fi
|
||||
\if@twoside\else
|
||||
\setcounter{page}\@ne
|
||||
\fi
|
||||
}
|
||||
\fi
|
||||
\newcommand\appendix{\par
|
||||
\setcounter{chapter}{0}%
|
||||
\setcounter{section}{0}%
|
||||
\gdef\@chapapp{\appendixname}%
|
||||
\gdef\thechapter{\@Alph\c@chapter}}
|
||||
\setlength\arraycolsep{5\p@}
|
||||
\setlength\tabcolsep{6\p@}
|
||||
\setlength\arrayrulewidth{.4\p@}
|
||||
\setlength\doublerulesep{2\p@}
|
||||
\setlength\tabbingsep{\labelsep}
|
||||
\skip\@mpfootins = \skip\footins
|
||||
\setlength\fboxsep{3\p@}
|
||||
\setlength\fboxrule{.4\p@}
|
||||
\@addtoreset {equation}{chapter}
|
||||
\renewcommand\theequation
|
||||
{\ifnum \c@chapter>\z@ \thechapter.\fi \@arabic\c@equation}
|
||||
\newcounter{figure}[chapter]
|
||||
\renewcommand \thefigure
|
||||
{\ifnum \c@chapter>\z@ \thechapter.\fi \@arabic\c@figure}
|
||||
\def\fps@figure{tbp}
|
||||
\def\ftype@figure{1}
|
||||
\def\ext@figure{lof}
|
||||
\def\fnum@figure{\figurename\nobreakspace\thefigure}
|
||||
\newenvironment{figure}
|
||||
{\@float{figure}}
|
||||
{\end@float}
|
||||
\newenvironment{figure*}
|
||||
{\@dblfloat{figure}}
|
||||
{\end@dblfloat}
|
||||
\newcounter{table}[chapter]
|
||||
\renewcommand \thetable
|
||||
{\ifnum \c@chapter>\z@ \thechapter.\fi \@arabic\c@table}
|
||||
\def\fps@table{tbp}
|
||||
\def\ftype@table{2}
|
||||
\def\ext@table{lot}
|
||||
\def\fnum@table{\tablename\nobreakspace\thetable}
|
||||
\newenvironment{table}
|
||||
{\@float{table}}
|
||||
{\end@float}
|
||||
\newenvironment{table*}
|
||||
{\@dblfloat{table}}
|
||||
{\end@dblfloat}
|
||||
\newlength\abovecaptionskip
|
||||
\newlength\belowcaptionskip
|
||||
\setlength\abovecaptionskip{10\p@}
|
||||
\setlength\belowcaptionskip{0\p@}
|
||||
\long\def\@makecaption#1#2{%
|
||||
\vskip\abovecaptionskip
|
||||
\sbox\@tempboxa{#1: #2}%
|
||||
\ifdim \wd\@tempboxa >\hsize
|
||||
#1: #2\par
|
||||
\else
|
||||
\global \@minipagefalse
|
||||
\hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
|
||||
\fi
|
||||
\vskip\belowcaptionskip}
|
||||
\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm}
|
||||
\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf}
|
||||
\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt}
|
||||
\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf}
|
||||
\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit}
|
||||
\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl}
|
||||
\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc}
|
||||
\DeclareRobustCommand*\cal{\@fontswitch\relax\mathcal}
|
||||
\DeclareRobustCommand*\mit{\@fontswitch\relax\mathnormal}
|
||||
\newcommand\@pnumwidth{1.55em}
|
||||
\newcommand\@tocrmarg{2.55em}
|
||||
\newcommand\@dotsep{4.5}
|
||||
\setcounter{tocdepth}{2}
|
||||
\newcommand\tableofcontents{%
|
||||
\if@twocolumn
|
||||
\@restonecoltrue\onecolumn
|
||||
\else
|
||||
\@restonecolfalse
|
||||
\fi
|
||||
\chapter*{\contentsname
|
||||
\@mkboth{%
|
||||
\MakeUppercase\contentsname}{\MakeUppercase\contentsname}}%
|
||||
\@starttoc{toc}%
|
||||
\if@restonecol\twocolumn\fi
|
||||
}
|
||||
\newcommand*\l@part[2]{%
|
||||
\ifnum \c@tocdepth >-2\relax
|
||||
\addpenalty{-\@highpenalty}%
|
||||
\addvspace{2.25em \@plus\p@}%
|
||||
\setlength\@tempdima{3em}%
|
||||
\begingroup
|
||||
\parindent \z@ \rightskip \@pnumwidth
|
||||
\parfillskip -\@pnumwidth
|
||||
{\leavevmode
|
||||
\large \bfseries #1\hfil \hb@xt@\@pnumwidth{\hss #2}}\par
|
||||
\nobreak
|
||||
\global\@nobreaktrue
|
||||
\everypar{\global\@nobreakfalse\everypar{}}%
|
||||
\endgroup
|
||||
\fi}
|
||||
%%%%\newcommand*\l@chapter[2]{%
|
||||
%%%% \ifnum \c@tocdepth >\m@ne
|
||||
%%%% \addpenalty{-\@highpenalty}%
|
||||
%%%% \vskip 1.0em \@plus\p@
|
||||
%%%% \setlength\@tempdima{1.5em}%
|
||||
%%%% \begingroup
|
||||
%%%% \parindent \z@ \rightskip \@pnumwidth
|
||||
%%%% \parfillskip -\@pnumwidth
|
||||
%%%% \leavevmode \bfseries
|
||||
%%%% \advance\leftskip\@tempdima
|
||||
%%%% \hskip -\leftskip
|
||||
%%%% #1\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss #2}\par
|
||||
%%%% \penalty\@highpenalty
|
||||
%%%% \endgroup
|
||||
%%%% \fi}
|
||||
\newcommand\l@chapter[2]{%
|
||||
\ifnum \c@tocdepth >\m@ne
|
||||
\addpenalty{-\@highpenalty}%
|
||||
\vskip 1.0em \@plus\p@
|
||||
\setlength\@tempdima{1.5em}%
|
||||
\begingroup
|
||||
\parindent \z@ \rightskip \@pnumwidth
|
||||
\parfillskip -\@pnumwidth
|
||||
\leavevmode \fontchapter
|
||||
\advance\leftskip\@tempdima
|
||||
\hskip -\leftskip
|
||||
#1\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss #2}\par
|
||||
\penalty\@highpenalty
|
||||
\endgroup
|
||||
\fi}
|
||||
\newcommand*\l@section{\@dottedtocline{1}{1.5em}{2.3em}}
|
||||
\newcommand*\l@subsection{\@dottedtocline{2}{3.8em}{3.2em}}
|
||||
\newcommand*\l@subsubsection{\@dottedtocline{3}{7.0em}{4.1em}}
|
||||
\newcommand*\l@paragraph{\@dottedtocline{4}{10em}{5em}}
|
||||
\newcommand*\l@subparagraph{\@dottedtocline{5}{12em}{6em}}
|
||||
\newcommand\listoffigures{%
|
||||
\if@twocolumn
|
||||
\@restonecoltrue\onecolumn
|
||||
\else
|
||||
\@restonecolfalse
|
||||
\fi
|
||||
\chapter*{\listfigurename}%
|
||||
\@mkboth{\MakeUppercase\listfigurename}%
|
||||
{\MakeUppercase\listfigurename}%
|
||||
\@starttoc{lof}%
|
||||
\if@restonecol\twocolumn\fi
|
||||
}
|
||||
\newcommand*\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
|
||||
\newcommand\listoftables{%
|
||||
\if@twocolumn
|
||||
\@restonecoltrue\onecolumn
|
||||
\else
|
||||
\@restonecolfalse
|
||||
\fi
|
||||
\chapter*{\listtablename}%
|
||||
\@mkboth{%
|
||||
\MakeUppercase\listtablename}%
|
||||
{\MakeUppercase\listtablename}%
|
||||
\@starttoc{lot}%
|
||||
\if@restonecol\twocolumn\fi
|
||||
}
|
||||
\let\l@table\l@figure
|
||||
\newdimen\bibindent
|
||||
\setlength\bibindent{1.5em}
|
||||
\newenvironment{thebibliography}[1]
|
||||
{\chapter*{\bibname}%
|
||||
\@mkboth{\MakeUppercase\bibname}{\MakeUppercase\bibname}%
|
||||
\list{\@biblabel{\@arabic\c@enumiv}}%
|
||||
{\settowidth\labelwidth{\@biblabel{#1}}%
|
||||
\leftmargin\labelwidth
|
||||
\advance\leftmargin\labelsep
|
||||
\@openbib@code
|
||||
\usecounter{enumiv}%
|
||||
\let\p@enumiv\@empty
|
||||
\renewcommand\theenumiv{\@arabic\c@enumiv}}%
|
||||
\sloppy
|
||||
\clubpenalty4000
|
||||
\@clubpenalty \clubpenalty
|
||||
\widowpenalty4000%
|
||||
\sfcode`\.\@m}
|
||||
{\def\@noitemerr
|
||||
{\@latex@warning{Empty `thebibliography' environment}}%
|
||||
\endlist}
|
||||
\newcommand\newblock{\hskip .11em\@plus.33em\@minus.07em}
|
||||
\let\@openbib@code\@empty
|
||||
\newenvironment{theindex}
|
||||
{\if@twocolumn
|
||||
\@restonecolfalse
|
||||
\else
|
||||
\@restonecoltrue
|
||||
\fi
|
||||
\columnseprule \z@
|
||||
\columnsep 35\p@
|
||||
\twocolumn[\@makeschapterhead{\indexname}]%
|
||||
\@mkboth{\MakeUppercase\indexname}%
|
||||
{\MakeUppercase\indexname}%
|
||||
\thispagestyle{plain}\parindent\z@
|
||||
\parskip\z@ \@plus .3\p@\relax
|
||||
\let\item\@idxitem}
|
||||
{\if@restonecol\onecolumn\else\clearpage\fi}
|
||||
\newcommand\@idxitem{\par\hangindent 40\p@}
|
||||
\newcommand\subitem{\@idxitem \hspace*{20\p@}}
|
||||
\newcommand\subsubitem{\@idxitem \hspace*{30\p@}}
|
||||
\newcommand\indexspace{\par \vskip 10\p@ \@plus5\p@ \@minus3\p@\relax}
|
||||
\renewcommand\footnoterule{%
|
||||
\kern-3\p@
|
||||
\hrule\@width.4\columnwidth
|
||||
\kern2.6\p@}
|
||||
\@addtoreset{footnote}{chapter}
|
||||
\newcommand\@makefntext[1]{%
|
||||
\parindent 1em%
|
||||
\noindent
|
||||
\hb@xt@1.8em{\hss\@makefnmark}#1}
|
||||
\newcommand\contentsname{Contents}
|
||||
\newcommand\listfigurename{List of Figures}
|
||||
\newcommand\listtablename{List of Tables}
|
||||
\newcommand\bibname{Bibliography}
|
||||
\newcommand\indexname{Index}
|
||||
\newcommand\figurename{Figure}
|
||||
\newcommand\tablename{Table}
|
||||
\newcommand\partname{Part}
|
||||
\newcommand\chaptername{Chapter}
|
||||
\newcommand\appendixname{Appendix}
|
||||
\def\today{\ifcase\month\or
|
||||
January\or February\or March\or April\or May\or June\or
|
||||
July\or August\or September\or October\or November\or December\fi
|
||||
\space\number\day, \number\year}
|
||||
\setlength\columnsep{10\p@}
|
||||
\setlength\columnseprule{0\p@}
|
||||
\pagestyle{headings}
|
||||
\pagenumbering{arabic}
|
||||
\if@twoside
|
||||
\else
|
||||
\raggedbottom
|
||||
\fi
|
||||
\if@twocolumn
|
||||
\twocolumn
|
||||
\sloppy
|
||||
\flushbottom
|
||||
\else
|
||||
\onecolumn
|
||||
\fi
|
||||
\endinput
|
||||
%%
|
||||
%% End of file `book.cls'.
|
|
@ -0,0 +1,65 @@
|
|||
<br>
|
||||
<p><b>The complete class hierarchy could be accessed <a href="hierarchy.html">here</a>.</b></p>
|
||||
<p>All the classes below are in the <a href="namespaceSeabreeze.html">Seabreeze</a> namespace.</p>
|
||||
<p>The inheritance tree has been splitted/simplificated.</p>
|
||||
<b>Legend :</b><br>
|
||||
<pre class="fragment">
|
||||
<table class="classHierarchy">
|
||||
<tr><td width="70"><td class="virtual"><a href="#pagetop">ClassA</a><td><b> <tt>ClassA</tt> is abstract</b></tr>
|
||||
<tr><td width="70"><td class="normal"><a href="#pagetop">ClassB</a><td><b> <tt>ClassB</tt> is instanciable</b></tr>
|
||||
</table>
|
||||
</pre>
|
||||
<br>
|
||||
|
||||
<h2 class="classHierarchy">Utilities</h2>
|
||||
<table class="classHierarchy">
|
||||
<tr><td width="70"><td class="virtual"><a href="classSeabreeze_1_1BaseObserver.html">BaseObserver</a>
|
||||
</table>
|
||||
<table class="classHierarchy">
|
||||
<tr><td width="140"><td class="normal"><a href="classSeabreeze_1_1Observer.html">Observer</a>
|
||||
</table>
|
||||
<table class="classHierarchy">
|
||||
<tr><td width="70"><td class="normal"><a href="classSeabreeze_1_1Observable.html">Observable</a>
|
||||
</table>
|
||||
|
||||
<h2 class="classHierarchy">Seabreeze Engine</h2>
|
||||
<table class="classHierarchy">
|
||||
<tr><td width="70"><td class="normal"><a href="namespaceSeabreeze.html">Seabreeze</a>
|
||||
<tr><td width="70"><td class="normal"><a href="classSeabreeze_1_1ChipTools.html">ChipTools</a>
|
||||
<tr><td width="70"><td class="normal"><a href="classSeabreeze_1_1SeabreezeEngine.html">SeabreezeEngine</a>
|
||||
<tr><td width="70"><td class="normal"><a href="classSeabreeze_1_1Session.html">Session</a>
|
||||
<tr><td width="70"><td class="normal"><a href="classSeabreeze_1_1DataAlgorithm.html">DataAlgorithm</a>
|
||||
</table>
|
||||
|
||||
<h2 class="classHierarchy">Contacts</h2>
|
||||
<table class="classHierarchy">
|
||||
<tr><td width="70"><td class="virtual"><a href="classSeabreeze_1_1AutoContact.html">AutoContact</a>
|
||||
</table>
|
||||
<table class="classHierarchy">
|
||||
<tr><td width="140"><td class="normal"><a href="classSeabreeze_1_1AutoContactTerminal.html">AutoContactTerminal</a>
|
||||
<tr><td width="140"><td class="normal"><a href="classSeabreeze_1_1AutoContactTurn.html">AutoContactTurn</a>
|
||||
<tr><td width="140"><td class="normal"><a href="classSeabreeze_1_1AutoContactHTee.html">AutoContactHTee</a>
|
||||
<tr><td width="140"><td class="normal"><a href="classSeabreeze_1_1AutoContactVTee.html">AutoContactVTee</a>
|
||||
</table>
|
||||
|
||||
<h2 class="classHierarchy">Segments</h2>
|
||||
<table class="classHierarchy">
|
||||
<tr><td width="70"><td class="virtual"><a href="classSeabreeze_1_1AutoSegment.html">AutoSegment</a>
|
||||
</table>
|
||||
<table class="classHierarchy">
|
||||
<tr><td width="140"><td class="normal"><a href="classSeabreeze_1_1AutoHorizontal.html">AutoHorizontal</a>
|
||||
<tr><td width="140"><td class="normal"><a href="classSeabreeze_1_1AutoVertical.html">AutoVertical</a>
|
||||
</table>
|
||||
|
||||
<h2 class="classHierarchy">GCell</h2>
|
||||
<table class="classHierarchy">
|
||||
<tr><td width="70"><td class="normal"><a href="classSeabreeze_1_1GCell.html">GCell</a>
|
||||
<tr><td width="70"><td class="normal"><a href="classSeabreeze_1_1BaseGrid_1_1Axis.html">BaseGrid::Axis</a>
|
||||
<tr><td width="70"><td class="virtual"><a href="classSeabreeze_1_1BaseGrid.html">BaseGrid</a>
|
||||
</table>
|
||||
<table class="classHierarchy">
|
||||
<tr><td width="140"><td class="virtual"><a href="classSeabreeze_1_1Grid.html">Grid</a>
|
||||
</table>
|
||||
<table class="classHierarchy">
|
||||
<tr><td width="210"><td class="normal"><a href="classSeabreeze_1_1GCellGrid.html">GCellGrid</a>
|
||||
</table>
|
|
@ -0,0 +1,81 @@
|
|||
<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0//EN'>
|
||||
<!-- $Id: customSummary.html,v 1.1 2007/09/15 13:10:13 jpc Exp $ -->
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
|
||||
<title>Seabreeze Documentation</title>
|
||||
<link href="SoC.css" rel="stylesheet" type="text/css">
|
||||
</head>
|
||||
<h1 class="header">Seabreeze Documentation</h1>
|
||||
<center class="header">
|
||||
<table class="header">
|
||||
<tr>
|
||||
<td><a href="customSummary.html">Summary</a></td>
|
||||
<td><a href="namespaces.html">Namespaces</a></td>
|
||||
<td><a href="customHierarchy.html">Class Hierarchy</a></td>
|
||||
<td><a href="annotated.html">Classes</a></td>
|
||||
<td><a href="functions.html">Member Index</a></td>
|
||||
<!-- <td><a href="classes.html">Index2</a></td> -->
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
<br>
|
||||
<hr>
|
||||
<body>
|
||||
|
||||
|
||||
<h1>Seabreeze Documentation Summary</h1>
|
||||
<br>
|
||||
<p><b>The classical Doxygen module documentation could be accessed <a href="modules.html">here</a>.</b></p>
|
||||
|
||||
<!--
|
||||
<h2>Seabreeze Concepts (internal)</h2>
|
||||
<ol>
|
||||
<li><a class="el" href="group__buildRules.html">Rules for building wires.</a>
|
||||
<br>Rules for building AutoContacts. Global/Locals AutoSegments.
|
||||
<li><a class="el" href="group__loadGlobalRouting.html">Global Routing Loading.</a>
|
||||
<br>How the Knik global routing is loaded into Seabreeze data-base.
|
||||
Details the wiring topologies used to complete the routing to the
|
||||
terminals.
|
||||
<li><a class="el" href="group__collapseCanonical.html">AutoSegment Collapse & Canonical.</a>
|
||||
<br>How to force alignment of AutoSegments.
|
||||
<li><a class="el" href="group__layerAssign.html">Layer Assignment.</a>
|
||||
<br>Simple strategy to put long wires on higher routing metals.
|
||||
<li><a class="el" href="group__NetConstraints.html">Constraints Computations.</a>
|
||||
<br>Compute the legal range of variation of each wire (note that the
|
||||
constraints are stored on AutoContacts).
|
||||
<li><a class="el" href="group__NetOptimals.html">AutoSegment Optimal Placement.</a>
|
||||
<br>Compute the optimal range of variation of each wire.
|
||||
<li><a class="el" href="group__katabaticSession.html">Seabreeze Update Session Mechanism.</a>
|
||||
<br>The Session mechanism for modifying the Seabreeze data-base.
|
||||
</ol>
|
||||
-->
|
||||
|
||||
<h2>API documentations</h2>
|
||||
<ul>
|
||||
<li><b><a href="customHierarchy.html">Synthetic Class Hierarchy.</a></b>
|
||||
<li><b><a href="hierarchy.html">Complete Class Hierarchy (doxygen).</a></b>
|
||||
<li><b><a href="annotated.html">Class List (doxygen).</a></b>
|
||||
<li><b><a href="classes.html">Class Index (doxygen).</a></b>
|
||||
<li><b><a href="modules.html">Modules (raw concepts).</a></b>
|
||||
<li><b><a href="functions.html">Member Functions Index (doxygen).</a></b>
|
||||
<li><b><a href="namespaces.html">Namespaces (doxygen).</a></b>
|
||||
</ul>
|
||||
<br>
|
||||
|
||||
|
||||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Customized Concepts (a.k.a. modules)</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<table class="footer2">
|
||||
<tr>
|
||||
<td class="LFooter">Seabreeze Documentation</td>
|
||||
<td class="RFooter"><small>Copyright © 2005-2007 LIP6. All rights reserved</small></td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,276 @@
|
|||
# -*- explicit-buffer-name: "doxyfile<Seabreeze/doc>" -*-
|
||||
# Doxyfile 1.3.4
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
# Project related configuration options
|
||||
|
||||
PROJECT_NAME = "Seabreeze - Routing Toolbox"
|
||||
PROJECT_NUMBER = 1.0
|
||||
OUTPUT_DIRECTORY = .
|
||||
OUTPUT_LANGUAGE = English
|
||||
MARKDOWN_SUPPORT = NO
|
||||
#USE_WINDOWS_ENCODING = NO
|
||||
LAYOUT_FILE = DoxygenLayout.xml
|
||||
BRIEF_MEMBER_DESC = YES
|
||||
REPEAT_BRIEF = YES
|
||||
ALWAYS_DETAILED_SEC = NO
|
||||
INLINE_INHERITED_MEMB = NO
|
||||
FULL_PATH_NAMES = NO
|
||||
STRIP_FROM_PATH =
|
||||
SHORT_NAMES = NO
|
||||
JAVADOC_AUTOBRIEF = NO
|
||||
MULTILINE_CPP_IS_BRIEF = NO
|
||||
#DETAILS_AT_TOP = YES
|
||||
INHERIT_DOCS = YES
|
||||
DISTRIBUTE_GROUP_DOC = NO
|
||||
TAB_SIZE = 2
|
||||
ALIASES = "function=\fn"\
|
||||
"important=\par Important:\n"\
|
||||
"remark=\par Remark:\n"\
|
||||
"sreturn=\b Returns:"\
|
||||
"True=\b True"\
|
||||
"true=\b true"\
|
||||
"False=\b False"\
|
||||
"false=\b false"\
|
||||
"VERTICAL=\b VERTICAL"\
|
||||
"HORIZONTAL=\b HORIZONTAL"\
|
||||
"NULL=\c NULL"\
|
||||
"vector=\c vector"\
|
||||
"Collection=\c Collection"\
|
||||
"Collections=\c Collections"\
|
||||
"Box=\c Box"\
|
||||
"box=\c box"\
|
||||
"Layer=\c Layer"\
|
||||
"Layers=\c Layers"\
|
||||
"Net=\c Net"\
|
||||
"Nets=\c Nets"\
|
||||
"Pin=\c Pin"\
|
||||
"Pins=\c Pins"\
|
||||
"Plug=\c Plug"\
|
||||
"Plugs=\c Plugs"\
|
||||
"RoutingPad=\c RoutingPad"\
|
||||
"RoutingPads=\c RoutingPads"\
|
||||
"Cell=\c Cell"\
|
||||
"Cells=\c Cells"\
|
||||
"ToolEngine=\c ToolEngine"\
|
||||
"ToolEngines=\c ToolEngines"\
|
||||
"GCell=\c GCell"\
|
||||
"GCells=\c GCells"\
|
||||
"Splitter=\c Splitter"\
|
||||
"Splitters=\c Splitters"\
|
||||
"SplitterContact=\c SplitterContact"\
|
||||
"SplitterContacts=\c SplitterContacts"\
|
||||
"Hurricane=<a href='../hurricane/Index.html'>Hurricane</a>"\
|
||||
"STL=<a href='http://www.sgi.com/tech/stl/'>STL</a>"\
|
||||
"red{1}=<span class=\"red\">\1</span>"
|
||||
OPTIMIZE_OUTPUT_FOR_C = NO
|
||||
OPTIMIZE_OUTPUT_JAVA = NO
|
||||
SUBGROUPING = YES
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
# Build related configuration options
|
||||
|
||||
EXTRACT_ALL = NO
|
||||
EXTRACT_PRIVATE = YES
|
||||
EXTRACT_STATIC = YES
|
||||
EXTRACT_LOCAL_CLASSES = YES
|
||||
EXTRACT_ANON_NSPACES = YES
|
||||
HIDE_UNDOC_MEMBERS = YES
|
||||
HIDE_UNDOC_CLASSES = YES
|
||||
HIDE_FRIEND_COMPOUNDS = NO
|
||||
HIDE_IN_BODY_DOCS = NO
|
||||
INTERNAL_DOCS = NO
|
||||
CASE_SENSE_NAMES = YES
|
||||
HIDE_SCOPE_NAMES = YES
|
||||
SHOW_INCLUDE_FILES = YES
|
||||
INLINE_INFO = YES
|
||||
SORT_MEMBER_DOCS = NO
|
||||
GENERATE_TODOLIST = YES
|
||||
GENERATE_TESTLIST = YES
|
||||
GENERATE_BUGLIST = YES
|
||||
GENERATE_DEPRECATEDLIST= YES
|
||||
ENABLED_SECTIONS =
|
||||
MAX_INITIALIZER_LINES = 1
|
||||
SHOW_USED_FILES = YES
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
# Configuration options related to warning and progress messages
|
||||
|
||||
QUIET = YES
|
||||
WARNINGS = YES
|
||||
WARN_IF_UNDOCUMENTED = NO
|
||||
WARN_IF_DOC_ERROR = YES
|
||||
WARN_FORMAT = "$file:$line: $text"
|
||||
WARN_LOGFILE =
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
# Configuration options related to the input files
|
||||
|
||||
INPUT = \
|
||||
Seabreeze.dox \
|
||||
../src/Seabreeze/Node.h ../src/Node.cpp Node.dox \
|
||||
../src/Seabreeze/Tree.h ../src/Tree.cpp Tree.dox \
|
||||
../src/Seabreeze/Seabreeze.h ../src/Seabreeze.cpp Seabreeze.dox \
|
||||
../src/katabatic/SeabreezeEngine.h ../src/SeabreezeEngine.cpp SeabreezeEngine.dox
|
||||
|
||||
FILE_PATTERNS = *.h \
|
||||
*.cpp \
|
||||
*.dox
|
||||
|
||||
RECURSIVE = YES
|
||||
|
||||
EXCLUDE =
|
||||
EXCLUDE_SYMLINKS = NO
|
||||
EXCLUDE_PATTERNS =
|
||||
EXAMPLE_PATH = .
|
||||
EXAMPLE_PATTERNS =
|
||||
EXAMPLE_RECURSIVE = NO
|
||||
IMAGE_PATH = images
|
||||
INPUT_FILTER =
|
||||
FILTER_SOURCE_FILES = YES
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
# Configuration options related to source browsing
|
||||
|
||||
SOURCE_BROWSER = NO
|
||||
INLINE_SOURCES = NO
|
||||
STRIP_CODE_COMMENTS = YES
|
||||
REFERENCED_BY_RELATION = YES
|
||||
REFERENCES_RELATION = YES
|
||||
VERBATIM_HEADERS = YES
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
# Configuration options related to the alphabetical class index
|
||||
|
||||
ALPHABETICAL_INDEX = YES
|
||||
COLS_IN_ALPHA_INDEX = 2
|
||||
IGNORE_PREFIX =
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
# Configuration options related to the HTML output
|
||||
|
||||
GENERATE_HTML = YES
|
||||
#HTML_DYNAMIC_SECTIONS = YES
|
||||
HTML_OUTPUT = html
|
||||
HTML_FILE_EXTENSION = .html
|
||||
HTML_HEADER = header.html
|
||||
HTML_FOOTER = footer.html
|
||||
HTML_STYLESHEET = SoC.css
|
||||
GENERATE_HTMLHELP = NO
|
||||
CHM_FILE =
|
||||
HHC_LOCATION =
|
||||
GENERATE_CHI = NO
|
||||
BINARY_TOC = NO
|
||||
TOC_EXPAND = NO
|
||||
DISABLE_INDEX = NO
|
||||
ENUM_VALUES_PER_LINE = 1
|
||||
GENERATE_TREEVIEW = NO
|
||||
TREEVIEW_WIDTH = 250
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
# Configuration options related to the LaTeX output
|
||||
|
||||
GENERATE_LATEX = YES
|
||||
LATEX_OUTPUT = latex
|
||||
LATEX_CMD_NAME = latex
|
||||
MAKEINDEX_CMD_NAME = makeindex
|
||||
COMPACT_LATEX = NO
|
||||
PAPER_TYPE = a4wide
|
||||
EXTRA_PACKAGES =
|
||||
LATEX_HEADER = header.tex
|
||||
PDF_HYPERLINKS = YES
|
||||
USE_PDFLATEX = YES
|
||||
LATEX_BATCHMODE = NO
|
||||
LATEX_HIDE_INDICES = NO
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
# Configuration options related to the RTF output
|
||||
|
||||
GENERATE_RTF = YES
|
||||
RTF_OUTPUT = rtf
|
||||
COMPACT_RTF = NO
|
||||
RTF_HYPERLINKS = NO
|
||||
RTF_STYLESHEET_FILE =
|
||||
RTF_EXTENSIONS_FILE =
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
# Configuration options related to the man page output
|
||||
|
||||
GENERATE_MAN = YES
|
||||
MAN_OUTPUT = man
|
||||
MAN_EXTENSION = .3
|
||||
MAN_LINKS = NO
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
# Configuration options related to the XML output
|
||||
|
||||
GENERATE_XML = NO
|
||||
XML_OUTPUT = xml
|
||||
XML_SCHEMA =
|
||||
XML_DTD =
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
# Configuration options for the AutoGen Definitions output
|
||||
|
||||
GENERATE_AUTOGEN_DEF = NO
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
# Configuration options related to the Perl module output
|
||||
|
||||
GENERATE_PERLMOD = NO
|
||||
PERLMOD_LATEX = NO
|
||||
PERLMOD_PRETTY = YES
|
||||
PERLMOD_MAKEVAR_PREFIX =
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
# Configuration options related to the preprocessor
|
||||
|
||||
ENABLE_PREPROCESSING = YES
|
||||
MACRO_EXPANSION = NO
|
||||
EXPAND_ONLY_PREDEF = NO
|
||||
SEARCH_INCLUDES = YES
|
||||
INCLUDE_PATH =
|
||||
INCLUDE_FILE_PATTERNS =
|
||||
PREDEFINED = __DOXYGEN__
|
||||
EXPAND_AS_DEFINED =
|
||||
SKIP_FUNCTION_MACROS = YES
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
# Configuration::addtions related to external references
|
||||
|
||||
TAGFILES = ../../hurricane/doc/hurricane/html/hurricane.tag=../hurricane \
|
||||
../../hurricane/doc/viewer/html/viewer.tag=../viewer \
|
||||
../../crlcore/doc/crlcore/html/crlcore.tag=../crlcore
|
||||
GENERATE_TAGFILE = html/Seabreeze.tag
|
||||
ALLEXTERNALS = NO
|
||||
EXTERNAL_GROUPS = YES
|
||||
PERL_PATH = /usr/bin/perl
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
# Configuration options related to the dot tool
|
||||
|
||||
CLASS_DIAGRAMS = NO
|
||||
HIDE_UNDOC_RELATIONS = YES
|
||||
HAVE_DOT = YES
|
||||
CLASS_GRAPH = YES
|
||||
COLLABORATION_GRAPH = NO
|
||||
UML_LOOK = NO
|
||||
TEMPLATE_RELATIONS = NO
|
||||
INCLUDE_GRAPH = YES
|
||||
INCLUDED_BY_GRAPH = YES
|
||||
CALL_GRAPH = NO
|
||||
GRAPHICAL_HIERARCHY = NO
|
||||
DOT_IMAGE_FORMAT = png
|
||||
DOT_PATH =
|
||||
DOTFILE_DIRS =
|
||||
#MAX_DOT_GRAPH_WIDTH = 512
|
||||
#MAX_DOT_GRAPH_HEIGHT = 1024
|
||||
#MAX_DOT_GRAPH_DEPTH = 0
|
||||
GENERATE_LEGEND = YES
|
||||
DOT_CLEANUP = YES
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
# Configuration::addtions related to the search engine
|
||||
|
||||
SEARCHENGINE = NO
|
||||
|
|
@ -0,0 +1,97 @@
|
|||
function toggleVisibility(linkObj)
|
||||
{
|
||||
var base = $(linkObj).attr('id');
|
||||
var summary = $('#'+base+'-summary');
|
||||
var content = $('#'+base+'-content');
|
||||
var trigger = $('#'+base+'-trigger');
|
||||
var src=$(trigger).attr('src');
|
||||
if (content.is(':visible')===true) {
|
||||
content.hide();
|
||||
summary.show();
|
||||
$(linkObj).addClass('closed').removeClass('opened');
|
||||
$(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
|
||||
} else {
|
||||
content.show();
|
||||
summary.hide();
|
||||
$(linkObj).removeClass('closed').addClass('opened');
|
||||
$(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function updateStripes()
|
||||
{
|
||||
$('table.directory tr').
|
||||
removeClass('even').filter(':visible:even').addClass('even');
|
||||
}
|
||||
function toggleLevel(level)
|
||||
{
|
||||
$('table.directory tr').each(function(){
|
||||
var l = this.id.split('_').length-1;
|
||||
var i = $('#img'+this.id.substring(3));
|
||||
var a = $('#arr'+this.id.substring(3));
|
||||
if (l<level+1) {
|
||||
i.attr('src','ftv2folderopen.png');
|
||||
a.attr('src','ftv2mnode.png');
|
||||
$(this).show();
|
||||
} else if (l==level+1) {
|
||||
i.attr('src','ftv2folderclosed.png');
|
||||
a.attr('src','ftv2pnode.png');
|
||||
$(this).show();
|
||||
} else {
|
||||
$(this).hide();
|
||||
}
|
||||
});
|
||||
updateStripes();
|
||||
}
|
||||
|
||||
function toggleFolder(id)
|
||||
{
|
||||
//The clicked row
|
||||
var currentRow = $('#row_'+id);
|
||||
var currentRowImages = currentRow.find("img");
|
||||
|
||||
//All rows after the clicked row
|
||||
var rows = currentRow.nextAll("tr");
|
||||
|
||||
//Only match elements AFTER this one (can't hide elements before)
|
||||
var childRows = rows.filter(function() {
|
||||
var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
|
||||
return this.id.match(re);
|
||||
});
|
||||
|
||||
//First row is visible we are HIDING
|
||||
if (childRows.filter(':first').is(':visible')===true) {
|
||||
currentRowImages.filter("[id^=arr]").attr('src', 'ftv2pnode.png');
|
||||
currentRowImages.filter("[id^=img]").attr('src', 'ftv2folderclosed.png');
|
||||
rows.filter("[id^=row_"+id+"]").hide();
|
||||
} else { //We are SHOWING
|
||||
//All sub images
|
||||
var childImages = childRows.find("img");
|
||||
var childImg = childImages.filter("[id^=img]");
|
||||
var childArr = childImages.filter("[id^=arr]");
|
||||
|
||||
currentRow.find("[id^=arr]").attr('src', 'ftv2mnode.png'); //open row
|
||||
currentRow.find("[id^=img]").attr('src', 'ftv2folderopen.png'); //open row
|
||||
childImg.attr('src','ftv2folderclosed.png'); //children closed
|
||||
childArr.attr('src','ftv2pnode.png'); //children closed
|
||||
childRows.show(); //show all children
|
||||
}
|
||||
updateStripes();
|
||||
}
|
||||
|
||||
|
||||
function toggleInherit(id)
|
||||
{
|
||||
var rows = $('tr.inherit.'+id);
|
||||
var img = $('tr.inherit_header.'+id+' img');
|
||||
var src = $(img).attr('src');
|
||||
if (rows.filter(':first').is(':visible')===true) {
|
||||
rows.css('display','none');
|
||||
$(img).attr('src',src.substring(0,src.length-8)+'closed.png');
|
||||
} else {
|
||||
rows.css('display','table-row'); // using show() causes jump in firefox
|
||||
$(img).attr('src',src.substring(0,src.length-10)+'open.png');
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
<br>
|
||||
<hr>
|
||||
<table class="footer1">
|
||||
<tr>
|
||||
<td class="LFooter"><small>Generated by doxygen $doxygenversion on $date</small></td>
|
||||
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<table class="footer2">
|
||||
<tr>
|
||||
<td class="LFooter">Seabreeze - Routing Toolbox</td>
|
||||
<td class="RFooter"><small>Copyright © 2008-2020 Sorbonne Universite. All rights reserved</small></td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,26 @@
|
|||
<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0//EN'>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
|
||||
<title>Katabatic Documentation</title>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="SoC.css" rel="stylesheet" type="text/css">
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css">
|
||||
</head>
|
||||
<h1 id="pagetop" class="header">Seabreeze - Routing Toolbox</h1>
|
||||
<!--
|
||||
<center class="header">
|
||||
<table class="header">
|
||||
<tr>
|
||||
<td><a href="customSummary.html">Summary</a></td>
|
||||
<td><a href="namespaces.html">Namespaces</a></td>
|
||||
<td><a href="customHierarchy.html">Class Hierarchy</a></td>
|
||||
<td><a href="annotated.html">Classes</a></td>
|
||||
<td><a href="functions.html">Member Index</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
-->
|
||||
<br>
|
||||
<body onload="javascript:toggleLevel(1)">
|
|
@ -0,0 +1,47 @@
|
|||
|
||||
|
||||
\documentclass[a4paper]{asimbook}
|
||||
|
||||
\usepackage{a4wide}
|
||||
\usepackage{makeidx}
|
||||
\usepackage{fancyhdr}
|
||||
\usepackage{graphicx}
|
||||
\usepackage{multicol}
|
||||
\usepackage{float}
|
||||
\usepackage{textcomp}
|
||||
\usepackage{alltt}
|
||||
\usepackage{times}
|
||||
\ifx\pdfoutput\undefined
|
||||
\usepackage[ps2pdf,pagebackref=true,colorlinks=true,linkcolor=blue]{hyperref}
|
||||
\usepackage{pspicture}
|
||||
\else
|
||||
\usepackage[pdftex,pagebackref=true,colorlinks=true,linkcolor=blue]{hyperref}
|
||||
\fi
|
||||
\usepackage{doxygen}
|
||||
|
||||
\makeindex
|
||||
\setcounter{tocdepth}{1}
|
||||
\renewcommand{\footrulewidth}{0.4pt}
|
||||
\raggedbottom
|
||||
|
||||
|
||||
\begin{document}
|
||||
|
||||
\begin{titlepage}
|
||||
\vspace*{7cm}
|
||||
\begin{center}
|
||||
{\Large $projectname Reference Manual\\[1ex]\large $projectnumber }\\
|
||||
\vspace*{1cm}
|
||||
{\large Generated by Doxygen $doxygenversion}\\
|
||||
\vspace*{0.5cm}
|
||||
{\small $datetime}\\
|
||||
\end{center}
|
||||
\end{titlepage}
|
||||
|
||||
\clearemptydoublepage
|
||||
\pagenumbering{roman}
|
||||
|
||||
\tableofcontents
|
||||
\clearemptydoublepage
|
||||
|
||||
\pagenumbering{arabic}
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,558 @@
|
|||
|
||||
.sm
|
||||
{
|
||||
position:relative;
|
||||
z-index:9999
|
||||
}
|
||||
.sm,.sm ul,.sm li
|
||||
{
|
||||
display:block;
|
||||
list-style:none;
|
||||
margin:0;
|
||||
padding:2pt 7pt;
|
||||
line-height:normal;
|
||||
direction:ltr;
|
||||
text-align:left;
|
||||
-webkit-tap-highlight-color:rgba(0,0,0,0)
|
||||
}
|
||||
.sm-rtl,.sm-rtl ul,.sm-rtl li
|
||||
{
|
||||
direction:rtl;
|
||||
text-align:right
|
||||
}
|
||||
.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6
|
||||
{
|
||||
margin:0;
|
||||
padding:0
|
||||
}
|
||||
.sm ul
|
||||
{
|
||||
display:none
|
||||
}
|
||||
|
||||
.sm li,.sm a
|
||||
{
|
||||
position:relative
|
||||
}
|
||||
.sm a
|
||||
{
|
||||
display:block
|
||||
}
|
||||
.sm a.disabled
|
||||
{
|
||||
cursor:not-allowed
|
||||
}
|
||||
.sm:after
|
||||
{
|
||||
content:"\00a0";
|
||||
display:block;
|
||||
height:0;
|
||||
font:0/0 serif;
|
||||
clear:both;
|
||||
visibility:hidden;
|
||||
overflow:hidden
|
||||
}
|
||||
.sm,.sm *,.sm *:before,.sm *:after
|
||||
{
|
||||
-moz-box-sizing:border-box;
|
||||
-webkit-box-sizing:border-box;
|
||||
box-sizing:border-box
|
||||
}
|
||||
#doc-content
|
||||
{
|
||||
overflow:auto;
|
||||
display:block;
|
||||
padding:0;
|
||||
margin:0;
|
||||
-webkit-overflow-scrolling:touch
|
||||
}
|
||||
/*
|
||||
.sm-dox
|
||||
{
|
||||
background-image:url("tab_b.png")
|
||||
}
|
||||
*/
|
||||
/*
|
||||
.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active
|
||||
{
|
||||
padding:0 12px;
|
||||
padding-right:43px;
|
||||
font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;
|
||||
font-size:13px;
|
||||
font-weight:bold;
|
||||
line-height:36px;
|
||||
text-decoration:none;
|
||||
text-shadow:0 1px 1px rgba(255,255,255,0.9);
|
||||
color:#283a5d;
|
||||
outline:0
|
||||
}
|
||||
*/
|
||||
/*
|
||||
.sm-dox a:hover
|
||||
{
|
||||
background-image:url("tab_a.png");
|
||||
background-repeat:repeat-x;
|
||||
color:white;
|
||||
text-shadow:0 1px 1px black
|
||||
}
|
||||
*/
|
||||
.sm-dox a.current
|
||||
{
|
||||
color:#d23600
|
||||
}
|
||||
.sm-dox a.disabled
|
||||
{
|
||||
color:#bbb
|
||||
}
|
||||
.sm-dox a span.sub-arrow
|
||||
{
|
||||
position:absolute;
|
||||
top:50%;
|
||||
margin-top:-14px;
|
||||
left:auto;
|
||||
right:3px;
|
||||
width:28px;
|
||||
height:28px;
|
||||
overflow:hidden;
|
||||
font:bold 12px/28px monospace!important;
|
||||
text-align:center;
|
||||
text-shadow:none;
|
||||
background:rgba(255,255,255,0.5);
|
||||
-moz-border-radius:5px;
|
||||
-webkit-border-radius:5px;
|
||||
border-radius:5px
|
||||
}
|
||||
.sm-dox a.highlighted span.sub-arrow:before
|
||||
{
|
||||
display:block;
|
||||
content:'-'
|
||||
}
|
||||
/*
|
||||
.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a
|
||||
{
|
||||
-moz-border-radius:5px 5px 0 0;
|
||||
-webkit-border-radius:5px;
|
||||
border-radius:5px 5px 0 0
|
||||
}
|
||||
.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul
|
||||
{
|
||||
-moz-border-radius:0 0 5px 5px;
|
||||
-webkit-border-radius:0;
|
||||
border-radius:0 0 5px 5px
|
||||
}
|
||||
.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted
|
||||
{
|
||||
-moz-border-radius:0;
|
||||
-webkit-border-radius:0;
|
||||
border-radius:0
|
||||
}
|
||||
*/
|
||||
/*
|
||||
.sm-dox ul
|
||||
{
|
||||
background:rgba(162,162,162,0.1)
|
||||
}
|
||||
*/
|
||||
/*
|
||||
.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active
|
||||
{
|
||||
font-size:12px;
|
||||
border-left:8px solid transparent;
|
||||
line-height:36px;
|
||||
text-shadow:none;
|
||||
background-color:white;
|
||||
background-image:none
|
||||
}
|
||||
*/
|
||||
/*
|
||||
.sm-dox ul a:hover
|
||||
{
|
||||
background-image:url("tab_a.png");
|
||||
background-repeat:repeat-x;
|
||||
color:white;
|
||||
text-shadow:0 1px 1px black
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active
|
||||
{
|
||||
border-left:16px solid transparent
|
||||
}
|
||||
.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active
|
||||
{
|
||||
border-left:24px solid transparent
|
||||
}
|
||||
.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active
|
||||
{
|
||||
border-left:32px solid transparent
|
||||
}
|
||||
.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active
|
||||
{
|
||||
border-left:40px solid transparent
|
||||
}
|
||||
|
||||
.sm-dox ul
|
||||
{
|
||||
position:absolute;
|
||||
width:12em
|
||||
}
|
||||
/*
|
||||
.sm-dox li
|
||||
{
|
||||
float:left
|
||||
}
|
||||
.sm-dox.sm-rtl li
|
||||
{
|
||||
float:right
|
||||
}
|
||||
.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li
|
||||
{
|
||||
float:none
|
||||
}
|
||||
*/
|
||||
.sm-dox a
|
||||
{
|
||||
white-space:nowrap
|
||||
}
|
||||
.sm-dox ul a,.sm-dox.sm-vertical a
|
||||
{
|
||||
white-space:normal
|
||||
}
|
||||
.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a
|
||||
{
|
||||
white-space:nowrap
|
||||
}
|
||||
|
||||
/*
|
||||
.sm-dox
|
||||
{
|
||||
padding:0 10px;
|
||||
background-image:url("tab_b.png");
|
||||
line-height:36px
|
||||
}
|
||||
*/
|
||||
|
||||
.sm-dox a span.sub-arrow
|
||||
{
|
||||
top:50%;
|
||||
margin-top:-2px;
|
||||
right:12px;
|
||||
width:0;
|
||||
height:0;
|
||||
border-width:4px;
|
||||
border-style:solid dashed dashed dashed;
|
||||
border-color:#283a5d transparent transparent transparent;
|
||||
background:transparent;
|
||||
-moz-border-radius:0;
|
||||
-webkit-border-radius:0;
|
||||
border-radius:0
|
||||
}
|
||||
/*
|
||||
.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted
|
||||
{
|
||||
padding:0 12px;
|
||||
background-image:url("tab_s.png");
|
||||
background-repeat:no-repeat;
|
||||
background-position:right;
|
||||
-moz-border-radius:0!important;
|
||||
-webkit-border-radius:0;
|
||||
border-radius:0!important
|
||||
}
|
||||
.sm-dox a:hover
|
||||
{
|
||||
background-image:url("tab_a.png");
|
||||
background-repeat:repeat-x;
|
||||
color:white;
|
||||
text-shadow:0 1px 1px black
|
||||
}
|
||||
*/
|
||||
.sm-dox a:hover span.sub-arrow
|
||||
{
|
||||
border-color:white transparent transparent transparent
|
||||
}
|
||||
.sm-dox a.has-submenu
|
||||
{
|
||||
padding-right:24px
|
||||
}
|
||||
.sm-dox li
|
||||
{
|
||||
border-top:0
|
||||
}
|
||||
.sm-dox>li>ul:before,.sm-dox>li>ul:after
|
||||
{
|
||||
content:'';
|
||||
position:absolute;
|
||||
top:-18px;
|
||||
left:30px;
|
||||
width:0;
|
||||
height:0;
|
||||
overflow:hidden;
|
||||
border-width:9px;
|
||||
border-style:dashed dashed solid dashed;
|
||||
border-color:transparent transparent #bbb transparent
|
||||
}
|
||||
.sm-dox>li>ul:after
|
||||
{
|
||||
top:-16px;
|
||||
left:31px;
|
||||
border-width:8px;
|
||||
border-color:transparent transparent #fff transparent
|
||||
}
|
||||
.sm-dox ul
|
||||
{
|
||||
border:1px solid #bbb;
|
||||
padding:5px 0;
|
||||
background:#fff;
|
||||
/*
|
||||
-moz-border-radius:5px!important;
|
||||
-webkit-border-radius:5px;
|
||||
border-radius:5px!important;
|
||||
*/
|
||||
-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);
|
||||
-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);
|
||||
box-shadow:0 5px 9px rgba(0,0,0,0.2)
|
||||
}
|
||||
.sm-dox ul a span.sub-arrow
|
||||
{
|
||||
right:8px;
|
||||
top:50%;
|
||||
margin-top:-5px;
|
||||
border-width:5px;
|
||||
border-color:transparent transparent transparent #555;
|
||||
border-style:dashed dashed dashed solid
|
||||
}
|
||||
.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted
|
||||
{
|
||||
color:#555;
|
||||
background-image:none;
|
||||
border:0!important;
|
||||
color:#555;
|
||||
background-image:none
|
||||
}
|
||||
/*
|
||||
.sm-dox ul a:hover
|
||||
{
|
||||
background-image:url("tab_a.png");
|
||||
background-repeat:repeat-x;
|
||||
color:white;
|
||||
text-shadow:0 1px 1px black
|
||||
}
|
||||
*/
|
||||
.sm-dox ul a:hover span.sub-arrow
|
||||
{
|
||||
border-color:transparent transparent transparent white
|
||||
}
|
||||
.sm-dox span.scroll-up,.sm-dox span.scroll-down
|
||||
{
|
||||
position:absolute;
|
||||
display:none;
|
||||
visibility:hidden;
|
||||
overflow:hidden;
|
||||
background:#fff;
|
||||
height:36px
|
||||
}
|
||||
.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover
|
||||
{
|
||||
background:#eee
|
||||
}
|
||||
.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow
|
||||
{
|
||||
border-color:transparent transparent #d23600 transparent
|
||||
}
|
||||
.sm-dox span.scroll-down:hover span.scroll-down-arrow
|
||||
{
|
||||
border-color:#d23600 transparent transparent transparent
|
||||
}
|
||||
.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow
|
||||
{
|
||||
position:absolute;
|
||||
top:0;
|
||||
left:50%;
|
||||
margin-left:-6px;
|
||||
width:0;
|
||||
height:0;
|
||||
overflow:hidden;
|
||||
border-width:6px;
|
||||
border-style:dashed dashed solid dashed;
|
||||
border-color:transparent transparent #555 transparent
|
||||
}
|
||||
.sm-dox span.scroll-down-arrow
|
||||
{
|
||||
top:8px;
|
||||
border-style:solid dashed dashed dashed;
|
||||
border-color:#555 transparent transparent transparent
|
||||
}
|
||||
.sm-dox.sm-rtl a.has-submenu
|
||||
{
|
||||
padding-right:12px;
|
||||
padding-left:24px
|
||||
}
|
||||
.sm-dox.sm-rtl a span.sub-arrow
|
||||
{
|
||||
right:auto;
|
||||
left:12px
|
||||
}
|
||||
.sm-dox.sm-rtl.sm-vertical a.has-submenu
|
||||
{
|
||||
padding:10px 20px
|
||||
}
|
||||
.sm-dox.sm-rtl.sm-vertical a span.sub-arrow
|
||||
{
|
||||
right:auto;
|
||||
left:8px;
|
||||
border-style:dashed solid dashed dashed;
|
||||
border-color:transparent #555 transparent transparent
|
||||
}
|
||||
.sm-dox.sm-rtl>li>ul:before
|
||||
{
|
||||
left:auto;
|
||||
right:30px
|
||||
}
|
||||
.sm-dox.sm-rtl>li>ul:after
|
||||
{
|
||||
left:auto;
|
||||
right:31px
|
||||
}
|
||||
.sm-dox.sm-rtl ul a.has-submenu
|
||||
{
|
||||
padding:10px 20px!important
|
||||
}
|
||||
.sm-dox.sm-rtl ul a span.sub-arrow
|
||||
{
|
||||
right:auto;
|
||||
left:8px;
|
||||
border-style:dashed solid dashed dashed;
|
||||
border-color:transparent #555 transparent transparent
|
||||
}
|
||||
.sm-dox.sm-vertical
|
||||
{
|
||||
padding:10px 0;
|
||||
-moz-border-radius:5px;
|
||||
-webkit-border-radius:5px;
|
||||
border-radius:5px
|
||||
}
|
||||
.sm-dox.sm-vertical a
|
||||
{
|
||||
padding:10px 20px
|
||||
}
|
||||
.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted
|
||||
{
|
||||
background:#fff
|
||||
}
|
||||
.sm-dox.sm-vertical a.disabled
|
||||
{
|
||||
background-image:url("tab_b.png")
|
||||
}
|
||||
.sm-dox.sm-vertical a span.sub-arrow
|
||||
{
|
||||
right:8px;
|
||||
top:50%;
|
||||
margin-top:-5px;
|
||||
border-width:5px;
|
||||
border-style:dashed dashed dashed solid;
|
||||
border-color:transparent transparent transparent #555
|
||||
}
|
||||
.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after
|
||||
{
|
||||
display:none
|
||||
}
|
||||
.sm-dox.sm-vertical ul a
|
||||
{
|
||||
padding:10px 20px
|
||||
}
|
||||
.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted
|
||||
{
|
||||
background:#eee
|
||||
}
|
||||
.sm-dox.sm-vertical ul a.disabled
|
||||
{
|
||||
background:#fff
|
||||
}
|
||||
|
||||
/* SoC Customisation. */
|
||||
|
||||
div#main-nav {
|
||||
margin: 0pt;
|
||||
border: 0pt;
|
||||
padding: 0pt;
|
||||
}
|
||||
|
||||
div ul#main-menu {
|
||||
margin: 0pt;
|
||||
border: 0pt;
|
||||
padding: 0pt;
|
||||
}
|
||||
|
||||
/*
|
||||
.sm ul {
|
||||
visibility: hidden;
|
||||
overflow: hidden;
|
||||
height: 0;
|
||||
width: 0;
|
||||
}
|
||||
*/
|
||||
|
||||
.sm li {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
ul#main-menu {
|
||||
display: table;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
ul#main-menu > li {
|
||||
display: table-cell;
|
||||
text-align: center;
|
||||
/*width: 20%;*/
|
||||
border-top: 1px solid black;
|
||||
border-bottom: 1px solid black;
|
||||
border-left: none;
|
||||
border-right: 1px solid black;
|
||||
padding: 2pt;
|
||||
font-size: 90%;
|
||||
}
|
||||
|
||||
ul#main-menu > li:first-child {
|
||||
border-left: 1px solid black;
|
||||
}
|
||||
|
||||
ul#main-menu > li > a {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
ul#main-menu > li:hover, ul#main-menu > li:hover > a, ul#main-menu > li > a:hover {
|
||||
background-color: black;
|
||||
color: white;
|
||||
}
|
||||
|
||||
/*
|
||||
.sm li {
|
||||
margin: 0pt;
|
||||
list-style: none;
|
||||
font-size: 90%;
|
||||
border-top: 1px solid black;
|
||||
border-bottom: 1px solid black;
|
||||
border-left: none;
|
||||
border-right: 1px solid black;
|
||||
display: table-cell;
|
||||
text-align: center;
|
||||
padding: 2pt;
|
||||
width: 5%;
|
||||
}
|
||||
.sm li:first-child {
|
||||
border-left: 1px solid black;
|
||||
}
|
||||
.sm li a {
|
||||
border-style: none;
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.sm li:hover, .sm li:hover a, .sm li a:hover {
|
||||
background-color: black;
|
||||
color: white;
|
||||
}
|
||||
*/
|
||||
|
||||
|
|
@ -0,0 +1,67 @@
|
|||
# -*- explicit-buffer-name: "CMakeLists.txt<Seabreeze/src>" -*-
|
||||
|
||||
# include( ${QT_USE_FILE} )
|
||||
include_directories( ${SEABREEZE_SOURCE_DIR}/src
|
||||
${CORIOLIS_INCLUDE_DIR}
|
||||
${HURRICANE_INCLUDE_DIR}
|
||||
${CONFIGURATION_INCLUDE_DIR}
|
||||
${QtX_INCLUDE_DIRS}
|
||||
${Boost_INCLUDE_DIRS}
|
||||
${Python_INCLUDE_DIRS}
|
||||
)
|
||||
set( includes Seabreeze/SeabreezeEngine.h
|
||||
#Seabreeze/GraphicSeabreezeEngine.h
|
||||
)
|
||||
set( pyIncludes Seabreeze/PySeabreezeEngine.h
|
||||
# Seabreeze/PyGraphicSeabreezeEngine.h
|
||||
)
|
||||
#set( mocIncludes Seabreeze/GraphicSeabreezeEngine.h )
|
||||
set( cpps SeabreezeEngine.cpp
|
||||
Seabreeze.cpp
|
||||
Node.cpp
|
||||
Tree.cpp
|
||||
#GraphicSeabreezeEngine.cpp
|
||||
)
|
||||
set( pyCpps PySeabreeze.cpp
|
||||
PySeabreezeEngine.cpp
|
||||
# PyGraphicSeabreezeEngine.cpp
|
||||
)
|
||||
#qtX_wrap_cpp( mocCpps ${mocIncludes} )
|
||||
|
||||
set( depLibs ${CORIOLIS_PYTHON_LIBRARIES}
|
||||
${CORIOLIS_LIBRARIES}
|
||||
${HURRICANE_PYTHON_LIBRARIES}
|
||||
${HURRICANE_GRAPHICAL_LIBRARIES}
|
||||
${HURRICANE_LIBRARIES}
|
||||
${CONFIGURATION_LIBRARY}
|
||||
${BOOKSHELF_LIBRARY}
|
||||
${CIF_LIBRARY}
|
||||
${AGDS_LIBRARY}
|
||||
${UTILITIES_LIBRARY}
|
||||
${LEFDEF_LIBRARIES}
|
||||
${OA_LIBRARIES}
|
||||
${QtX_LIBRARIES}
|
||||
${Boost_LIBRARIES}
|
||||
${LIBXML2_LIBRARIES}
|
||||
${Python_LIBRARIES} -lutil
|
||||
${LIBEXECINFO_LIBRARIES}
|
||||
)
|
||||
|
||||
add_library( Seabreeze ${cpps} ${mocCpps} ${pyCpps} )
|
||||
set_target_properties( Seabreeze PROPERTIES VERSION 1.0 SOVERSION 1 )
|
||||
#target_link_libraries( Seabreeze ${depLibs} )
|
||||
|
||||
add_python_module( "${pyCpps}"
|
||||
"${pyIncludes}"
|
||||
"Do_not_generate_C_library"
|
||||
Seabreeze
|
||||
"Seabreeze;${depLibs}"
|
||||
include/coriolis2/Seabreeze
|
||||
)
|
||||
|
||||
install( TARGETS Seabreeze DESTINATION lib${LIB_SUFFIX} )
|
||||
#install( PROGRAMS Seabreeze.py DESTINATION bin RENAME Seabreeze )
|
||||
install( FILES ${includes}
|
||||
${mocIncludes} DESTINATION include/coriolis2/Seabreeze )
|
||||
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
#include "Seabreeze/Node.h"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
Node::Node ()
|
||||
: R(0)
|
||||
, C(0)
|
||||
, label(-1)
|
||||
, ap(0)
|
||||
{ _contact = nullptr; }
|
||||
|
||||
Node::Node ( Node* p, Contact* ct )
|
||||
: R(0)
|
||||
, C(0)
|
||||
, Np(p)
|
||||
, _contact(ct)
|
||||
, label(-1)
|
||||
, ap(0)
|
||||
{ (p->Ne).push_back(this); }
|
||||
|
||||
Node::~Node ()
|
||||
{}
|
|
@ -0,0 +1,104 @@
|
|||
|
||||
// -*- C++ -*-
|
||||
//
|
||||
// This file is part of the Coriolis Software.
|
||||
// Copyright (c) Sorbonne Université 2017-2021, All Rights Reserved
|
||||
//
|
||||
// +-----------------------------------------------------------------+
|
||||
// | C O R I O L I S |
|
||||
// | T o o l E n g i n e T u t o r i a l |
|
||||
// | |
|
||||
// | Author : Jean-Paul CHAPUT |
|
||||
// | E-mail : Jean-Paul.Chaput@lip6.fr |
|
||||
// | =============================================================== |
|
||||
// | C++ Module : "./PySeabreeze.cpp" |
|
||||
// +-----------------------------------------------------------------+
|
||||
|
||||
|
||||
#include "hurricane/isobar/PyHurricane.h"
|
||||
#include "hurricane/isobar/PyCell.h"
|
||||
#include "Seabreeze/PySeabreezeEngine.h"
|
||||
//#include "Seabreeze/PyGraphicSeabreezeEngine.h"
|
||||
|
||||
|
||||
namespace Seabreeze {
|
||||
|
||||
using std::cerr;
|
||||
using std::endl;
|
||||
using Hurricane::tab;
|
||||
using Isobar::__cs;
|
||||
using Isobar::getPyHash;
|
||||
using CRL::PyTypeToolEngine;
|
||||
// using CRL::PyTypeGraphicTool;
|
||||
|
||||
|
||||
#if !defined(__PYTHON_MODULE__)
|
||||
|
||||
// +=================================================================+
|
||||
// | "PySeabreeze" Shared Library Code Part |
|
||||
// +=================================================================+
|
||||
|
||||
|
||||
# else // End of PyHurricane Shared Library Code Part.
|
||||
|
||||
|
||||
// +=================================================================+
|
||||
// | "PySeabreeze" Python Module Code Part |
|
||||
// +=================================================================+
|
||||
|
||||
|
||||
extern "C" {
|
||||
|
||||
// +-------------------------------------------------------------+
|
||||
// | "PySeabreeze" Module Methods |
|
||||
// +-------------------------------------------------------------+
|
||||
|
||||
|
||||
static PyMethodDef PySeabreeze_Methods[] =
|
||||
{ {NULL, NULL, 0, NULL} /* sentinel */
|
||||
};
|
||||
|
||||
|
||||
static PyModuleDef PySeabreeze_ModuleDef =
|
||||
{ PyModuleDef_HEAD_INIT
|
||||
, .m_name = "Seabreeze"
|
||||
, .m_doc = "Show how to interface Coriolis/C++ to Python."
|
||||
, .m_size = -1
|
||||
, .m_methods = PySeabreeze_Methods
|
||||
};
|
||||
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
// Module Initialization : "PyInit_Seabreeze ()"
|
||||
|
||||
PyMODINIT_FUNC PyInit_Seabreeze ( void )
|
||||
{
|
||||
cdebug_log(40,0) << "PyInit_Seabreeze()" << endl;
|
||||
|
||||
PySeabreezeEngine_LinkPyType();
|
||||
//PyGraphicSeabreezeEngine_LinkPyType();
|
||||
|
||||
PYTYPE_READY_SUB( SeabreezeEngine , ToolEngine );
|
||||
//PYTYPE_READY_SUB( GraphicSeabreezeEngine, GraphicTool );
|
||||
|
||||
PyObject* module = PyModule_Create( &PySeabreeze_ModuleDef );
|
||||
if (module == NULL) {
|
||||
cerr << "[ERROR]\n"
|
||||
<< " Failed to initialize Seabreeze module." << endl;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
Py_INCREF( &PyTypeSeabreezeEngine );
|
||||
PyModule_AddObject( module, "SeabreezeEngine", (PyObject*)&PyTypeSeabreezeEngine );
|
||||
//Py_INCREF( &PyTypeGraphicSeabreezeEngine );
|
||||
//PyModule_AddObject( module, "GraphicSeabreezeEngine", (PyObject*)&PyTypeGraphicSeabreezeEngine );
|
||||
|
||||
return module;
|
||||
}
|
||||
|
||||
|
||||
} // End of extern "C".
|
||||
|
||||
#endif // Python Module Code Part.
|
||||
|
||||
} // Seabreeze namespace.
|
|
@ -0,0 +1,216 @@
|
|||
// -*- C++ -*-
|
||||
//
|
||||
// This file is part of the Coriolis Software.
|
||||
// Copyright (c) UPMC 2017-2018, All Rights Reserved
|
||||
//
|
||||
// +-----------------------------------------------------------------+
|
||||
// | C O R I O L I S |
|
||||
// | T o o l E n g i n e T u t o r i a l |
|
||||
// | |
|
||||
// | Author : Jean-Paul CHAPUT |
|
||||
// | E-mail : Jean-Paul.Chaput@lip6.fr |
|
||||
// | =============================================================== |
|
||||
// | C++ Module : "./PySeabreezeEngine.cpp" |
|
||||
// +-----------------------------------------------------------------+
|
||||
|
||||
|
||||
#include "hurricane/isobar/PyCell.h"
|
||||
#include "hurricane/viewer/PyCellViewer.h"
|
||||
#include "hurricane/isobar/PyNet.h"
|
||||
#include "hurricane/viewer/ExceptionWidget.h"
|
||||
#include "hurricane/Cell.h"
|
||||
#include "crlcore/Utilities.h"
|
||||
#include "Seabreeze/PySeabreezeEngine.h"
|
||||
#include <functional>
|
||||
|
||||
# undef ACCESS_OBJECT
|
||||
# undef ACCESS_CLASS
|
||||
# define ACCESS_OBJECT _baseObject._object
|
||||
# define ACCESS_CLASS(_pyObject) &(_pyObject->_baseObject)
|
||||
#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(SeabreezeEngine,seabreeze,function)
|
||||
|
||||
|
||||
namespace Seabreeze {
|
||||
|
||||
using std::cerr;
|
||||
using std::endl;
|
||||
using std::hex;
|
||||
using std::ostringstream;
|
||||
using Hurricane::tab;
|
||||
using Hurricane::Exception;
|
||||
using Hurricane::Bug;
|
||||
using Hurricane::Error;
|
||||
using Hurricane::Warning;
|
||||
using Hurricane::ExceptionWidget;
|
||||
using Isobar::ProxyProperty;
|
||||
using Isobar::ProxyError;
|
||||
using Isobar::ConstructorError;
|
||||
using Isobar::HurricaneError;
|
||||
using Isobar::HurricaneWarning;
|
||||
using Isobar::getPyHash;
|
||||
using Isobar::ParseOneArg;
|
||||
using Isobar::ParseTwoArg;
|
||||
using Isobar::PyCell;
|
||||
using Isobar::PyCell_Link;
|
||||
using Isobar::PyCellViewer;
|
||||
using Isobar::PyTypeCellViewer;
|
||||
using Isobar::PyNet;
|
||||
using CRL::PyToolEngine;
|
||||
|
||||
|
||||
extern "C" {
|
||||
|
||||
#if defined(__PYTHON_MODULE__)
|
||||
|
||||
|
||||
// +=================================================================+
|
||||
// | "PySeabreezeEngine" Python Module Code Part |
|
||||
// +=================================================================+
|
||||
|
||||
|
||||
static PyObject* PySeabreezeEngine_get ( PyObject*, PyObject* args )
|
||||
{
|
||||
cdebug_log(40,0) << "PySeabreezeEngine_get()" << endl;
|
||||
|
||||
SeabreezeEngine* seabreeze = NULL;
|
||||
|
||||
HTRY
|
||||
PyObject* arg0;
|
||||
|
||||
if (not ParseOneArg("Seabreeze.get", args, CELL_ARG, &arg0)) return NULL;
|
||||
seabreeze = SeabreezeEngine::get(PYCELL_O(arg0));
|
||||
HCATCH
|
||||
|
||||
return PySeabreezeEngine_Link(seabreeze);
|
||||
}
|
||||
|
||||
|
||||
static PyObject* PySeabreezeEngine_create ( PyObject*, PyObject* args )
|
||||
{
|
||||
cdebug_log(40,0) << "PySeabreezeEngine_create()" << endl;
|
||||
|
||||
SeabreezeEngine* seabreeze = NULL;
|
||||
|
||||
HTRY
|
||||
PyObject* arg0;
|
||||
|
||||
if (not ParseOneArg("Seabreeze.get", args, CELL_ARG, &arg0)) return NULL;
|
||||
|
||||
Cell* cell = PYCELL_O(arg0);
|
||||
seabreeze = SeabreezeEngine::get(cell);
|
||||
|
||||
if (seabreeze == NULL) {
|
||||
seabreeze = SeabreezeEngine::create(cell);
|
||||
} else
|
||||
cerr << Warning("%s already has a Seabreeze engine.",getString(cell).c_str()) << endl;
|
||||
HCATCH
|
||||
|
||||
return PySeabreezeEngine_Link(seabreeze);
|
||||
}
|
||||
|
||||
|
||||
static PyObject* PySeabreezeEngine_setViewer ( PySeabreezeEngine* self, PyObject* args )
|
||||
{
|
||||
cdebug_log(40,0) << "PySeabreezeEngine_setViewer ()" << endl;
|
||||
|
||||
HTRY
|
||||
METHOD_HEAD( "SeabreezeEngine.setViewer()" )
|
||||
|
||||
PyObject* pyViewer = NULL;
|
||||
if (not PyArg_ParseTuple(args,"O:EtesianEngine.setViewer()",&pyViewer)) {
|
||||
PyErr_SetString( ConstructorError, "Bad parameters given to EtesianEngine.setViewer()." );
|
||||
return NULL;
|
||||
}
|
||||
if (IsPyCellViewer(pyViewer)) {
|
||||
seabreeze->setViewer( PYCELLVIEWER_O(pyViewer) );
|
||||
}
|
||||
HCATCH
|
||||
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
/*
|
||||
PyObject* PySeabreezeEngine_runTool ( PySeabreezeEngine* self )
|
||||
{
|
||||
cdebug_log(40,0) << "PySeabreezeEngine_runTool()" << endl;
|
||||
|
||||
Cell* cell = NULL;
|
||||
|
||||
HTRY
|
||||
METHOD_HEAD("SeabreezeEngine.runTool()")
|
||||
if (seabreeze->getViewer()) {
|
||||
if (ExceptionWidget::catchAllWrapper( std::bind(&SeabreezeEngine::runTool,seabreeze) )) {
|
||||
PyErr_SetString( HurricaneError, "SeabreezeEngine::runTool() has thrown an exception (C++)." );
|
||||
return NULL;
|
||||
}
|
||||
cell = seabreeze->getCell();
|
||||
} else {
|
||||
cell = seabreeze->runTool();
|
||||
}
|
||||
HCATCH
|
||||
|
||||
return PyCell_Link( cell );
|
||||
}
|
||||
*/
|
||||
|
||||
static PyObject* PySeabreezeEngine_runTool ( PySeabreezeEngine* self, PyObject* args )
|
||||
{
|
||||
cdebug_log(40,0) << "PySeabreezeEngine_runTool()" << endl;
|
||||
|
||||
HTRY
|
||||
PyObject* arg0 = NULL;
|
||||
METHOD_HEAD("SeabreezeEngine.runTool()")
|
||||
if (not ParseOneArg("Seabreeze.runTool()", args, NET_ARG, &arg0)) return NULL;
|
||||
seabreeze->runTool(PYNET_O(arg0));
|
||||
HCATCH
|
||||
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
|
||||
// Standart Accessors (Attributes).
|
||||
|
||||
// Standart Destroy (Attribute).
|
||||
DBoDestroyAttribute(PySeabreezeEngine_destroy,PySeabreezeEngine)
|
||||
|
||||
|
||||
PyMethodDef PySeabreezeEngine_Methods[] =
|
||||
{ { "get" , (PyCFunction)PySeabreezeEngine_get , METH_VARARGS|METH_STATIC
|
||||
, "Returns the Seabreeze engine attached to the Cell, None if there isnt't." }
|
||||
, { "create" , (PyCFunction)PySeabreezeEngine_create , METH_VARARGS|METH_STATIC
|
||||
, "Create a Seabreeze engine on this cell." }
|
||||
, { "setViewer" , (PyCFunction)PySeabreezeEngine_setViewer , METH_VARARGS
|
||||
, "Associate a Viewer to this SeabreezeEngine." }
|
||||
//, { "runDemoPart1" , (PyCFunction)PySeabreezeEngine_runDemoPart1 , METH_NOARGS
|
||||
// , "Run the first part of the demo." }
|
||||
, { "runTool" , (PyCFunction)PySeabreezeEngine_runTool , METH_VARARGS
|
||||
, "Run the Seabreeze tool." }
|
||||
, { "destroy" , (PyCFunction)PySeabreezeEngine_destroy , METH_NOARGS
|
||||
, "Destroy the associated hurricane object. The python object remains." }
|
||||
, {NULL, NULL, 0, NULL} /* sentinel */
|
||||
};
|
||||
|
||||
|
||||
DBoDeleteMethod(SeabreezeEngine)
|
||||
PyTypeObjectLinkPyType(SeabreezeEngine)
|
||||
|
||||
|
||||
#else // End of Python Module Code Part.
|
||||
|
||||
|
||||
// +=================================================================+
|
||||
// | "PySeabreezeEngine" Shared Library Code Part |
|
||||
// +=================================================================+
|
||||
|
||||
|
||||
// Link/Creation Method.
|
||||
PyTypeInheritedObjectDefinitions(SeabreezeEngine,PyToolEngine)
|
||||
DBoLinkCreateMethod(SeabreezeEngine)
|
||||
|
||||
|
||||
#endif // Shared Library Code Part.
|
||||
|
||||
} // extern "C".
|
||||
|
||||
} // Seabreeze namespace.
|
||||
|
|
@ -0,0 +1,154 @@
|
|||
#include "Seabreeze/Seabreeze.h"
|
||||
#include "hurricane/Net.h"
|
||||
|
||||
namespace Seabreeze {
|
||||
|
||||
using namespace std;
|
||||
using Hurricane::DBo;
|
||||
using Hurricane::Net;
|
||||
using Hurricane::Cell;
|
||||
using Hurricane::Instance;
|
||||
using Hurricane::PrivateProperty;
|
||||
using Hurricane::Component;
|
||||
|
||||
//---------------------------------------------------------
|
||||
// Class : "Elmore"
|
||||
|
||||
Elmore::Elmore ( Net* net )
|
||||
: _conts()
|
||||
, checker()
|
||||
, _tree()
|
||||
{}
|
||||
|
||||
Elmore::~Elmore ()
|
||||
{
|
||||
delete _tree;
|
||||
}
|
||||
|
||||
void Elmore::contFromNet ( Net* net ) {
|
||||
for ( RoutingPad* rp : net->getRoutingPads() ) {
|
||||
|
||||
for ( Component* c : rp->getSlaveComponents() ) {
|
||||
Contact* ct = dynamic_cast<Contact*>(c);
|
||||
|
||||
if ( not ct ) continue;
|
||||
|
||||
_conts.insert(ct);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Elmore::buildTree ( RoutingPad* rp )
|
||||
{
|
||||
if ( rp == nullptr ) {
|
||||
cerr << "Input RoutingPad is NULL. Please select a RoutingPad !" << endl;
|
||||
return;
|
||||
}
|
||||
Contact* ct = dynamic_cast<Contact*>(rp);
|
||||
if ( not ct ) {
|
||||
cerr << "No contact found" << endl;
|
||||
return;
|
||||
}
|
||||
|
||||
Node* s = new Node(nullptr, ct);
|
||||
build_from_node(s);
|
||||
}
|
||||
|
||||
void Elmore::build_from_node ( Node* s )
|
||||
{
|
||||
if ( s->_contact == nullptr || find(_conts.begin(), _conts.end(), s->_contact) == _conts.end() ) {
|
||||
return;
|
||||
}
|
||||
|
||||
_tree->add_node(s);
|
||||
|
||||
// To check for circle
|
||||
checker.insert(s->_contact);
|
||||
|
||||
for ( Component* c : (s->_contact)->getSlaveComponents() ) {
|
||||
|
||||
Contact* ccont = dynamic_cast<Contact*>(c);
|
||||
|
||||
if ( not ccont )
|
||||
continue;
|
||||
else{
|
||||
if ( find( _conts.begin(), _conts.end(), ccont) != _conts.end() ) {
|
||||
|
||||
if ( find( checker.begin(), checker.end(), ccont) != checker.end() ) {
|
||||
cerr << "Net contains a circle. Cannot apply Elmore's delay here !" << endl;
|
||||
return;
|
||||
}
|
||||
else {
|
||||
if ( ccont != (s->Np)->_contact ) {
|
||||
Node* node = new Node( s, ccont );
|
||||
build_from_node(node);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Elmore::clearTree ()
|
||||
{
|
||||
_tree->clear();
|
||||
checker.clear();
|
||||
}
|
||||
|
||||
Tree* Elmore::getTree ()
|
||||
{
|
||||
return _tree;
|
||||
}
|
||||
|
||||
int Elmore::delayElmore ( RoutingPad* rp )
|
||||
{
|
||||
return _tree->Delay_Elmore(rp);
|
||||
}
|
||||
|
||||
void Elmore::toTREE ( ostream& out ) const
|
||||
{
|
||||
_tree->print( out );
|
||||
}
|
||||
|
||||
//---------------------------------------------------------
|
||||
// Class : "ElmoreProperty"
|
||||
|
||||
Name ElmoreProperty::_name = "Seabreeze::Elmore";
|
||||
|
||||
ElmoreProperty* ElmoreProperty::create ( Net* net )
|
||||
{
|
||||
ElmoreProperty* property = new ElmoreProperty(net);
|
||||
//ElmoreProperty* property(net);
|
||||
|
||||
property->_postCreate();
|
||||
return property;
|
||||
}
|
||||
|
||||
Name ElmoreProperty::getName () const
|
||||
{
|
||||
return _name;
|
||||
}
|
||||
|
||||
string ElmoreProperty::_getTypeName () const
|
||||
{
|
||||
return "ElmoreProperty";
|
||||
}
|
||||
|
||||
//---------------------------------------------------------
|
||||
// Class : "ElmoreExtension"
|
||||
|
||||
Elmore* ElmoreExtension::create ( Net* net )
|
||||
{
|
||||
return ElmoreProperty::create(net)->getElmore();
|
||||
}
|
||||
|
||||
void ElmoreExtension::destroyAll ()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void ElmoreExtension::destroy ( Net* net )
|
||||
{
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,113 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
|
||||
try:
|
||||
import sys
|
||||
import os.path
|
||||
import optparse
|
||||
import Cfg
|
||||
import Hurricane
|
||||
import Viewer
|
||||
import helpers.io
|
||||
import CRL
|
||||
import Unicorn
|
||||
import Seabreeze
|
||||
except ImportError, e:
|
||||
serror = str(e)
|
||||
if serror.startswith('No module named'):
|
||||
module = serror.split()[-1]
|
||||
print( '[ERROR] The "{}" python module or symbol cannot be loaded.'.format(module) )
|
||||
print( ' Please check the integrity of the <coriolis> package.' )
|
||||
if serror.find('cannot open shared object file'):
|
||||
library = serror.split(':')[0]
|
||||
print( '[ERROR] The "{}" shared library cannot be loaded.'.format(library) )
|
||||
print( ' Under RHEL 6, you must be under devtoolset-2.' )
|
||||
print( ' (scl enable devtoolset-2 bash)' )
|
||||
sys.exit(1)
|
||||
except Exception, e:
|
||||
print( '[ERROR] A strange exception occurred while loading the basic Coriolis/Python' )
|
||||
print( ' modules. Something may be wrong at Python/C API level.\n' )
|
||||
print( ' {}'.format(e) )
|
||||
sys.exit(2)
|
||||
|
||||
|
||||
def setCgtBanner ( banner ):
|
||||
banner.setName('tutu')
|
||||
banner.setPurpose('Seabreeze for Users')
|
||||
return banner
|
||||
|
||||
|
||||
def credits ():
|
||||
s = ''
|
||||
s += ' Tool Credits\n'
|
||||
s += ' Hurricane .................... Remy Escassut & Christian Masson\n'
|
||||
return s
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
try:
|
||||
usage = str(setCgtBanner(CRL.Banner()))
|
||||
usage += '\ncgt [options]'
|
||||
parser = optparse.OptionParser(usage)
|
||||
parser.add_option( '--no-init' , action='store_true', dest='noInit' , help='Do not load any initialization.')
|
||||
parser.add_option( '-c', '--cell' , type='string' , dest='cell' , help='The name of the cell to load, without extension.')
|
||||
parser.add_option( '--acm-sigda-89' , type='string' , dest='acmSigdaName' , help='An ACM/SIGDA 89 bench name to load, without extension.')
|
||||
parser.add_option( '--blif' , type='string' , dest='blifName' , help='A Blif (Yosys) design name to load, without extension.')
|
||||
parser.add_option( '--ispd-05' , type='string' , dest='ispd05name' , help='An ISPD 05 bench (placement) name to load, without extension.')
|
||||
parser.add_option( '-v', '--verbose' , action='store_true', dest='verbose' , help='First level of verbosity.')
|
||||
parser.add_option( '-V', '--very-verbose' , action='store_true', dest='veryVerbose' , help='Second level of verbosity.')
|
||||
parser.add_option( '-i', '--info' , action='store_true', dest='info' , help='Display lots of informational messages.')
|
||||
parser.add_option( '--paranoid' , action='store_true', dest='paranoid' , help='Display everything that *may be* suspicious...')
|
||||
parser.add_option( '-b', '--bug' , action='store_true', dest='bug' , help='Display bug related messages.')
|
||||
parser.add_option( '--show-conf' , action='store_true', dest='showConf' , help='Display Kite configuration.')
|
||||
parser.add_option( '-D', '--core-dump' , action='store_true', dest='coreDump' , help='Enable core-dump when a crash occurs.')
|
||||
parser.add_option( '-L', '--log-mode' , action='store_true', dest='logMode' , help='Disable ANSI escape sequences in console output.')
|
||||
(options, args) = parser.parse_args()
|
||||
args.insert(0, 'tutu')
|
||||
|
||||
flags = 0
|
||||
if options.noInit:
|
||||
flags |= CRL.AllianceFramework.NoPythonInit
|
||||
|
||||
af = CRL.AllianceFramework.create( flags )
|
||||
print( af.getEnvironment().getPrint() )
|
||||
|
||||
Cfg.Configuration.pushDefaultPriority(Cfg.Parameter.Priority.CommandLine)
|
||||
if options.coreDump: Cfg.getParamBool('misc.catchCore' ).setBool(False)
|
||||
if options.verbose: Cfg.getParamBool('misc.verboseLevel1').setBool(True)
|
||||
if options.veryVerbose: Cfg.getParamBool('misc.verboseLevel2').setBool(True)
|
||||
if options.info: Cfg.getParamBool('misc.info' ).setBool(True)
|
||||
if options.paranoid: Cfg.getParamBool('misc.paranoid' ).setBool(True)
|
||||
if options.bug: Cfg.getParamBool('misc.bug' ).setBool(True)
|
||||
if options.logMode: Cfg.getParamBool('misc.logMode' ).setBool(True)
|
||||
if options.showConf: Cfg.getParamBool('misc.showConf' ).setBool(True)
|
||||
Cfg.Configuration.popDefaultPriority()
|
||||
cell = None
|
||||
if options.acmSigdaName:
|
||||
cell = CRL.AcmSigda.load(options.acmSigdaName)
|
||||
elif options.ispd05name:
|
||||
cell = CRL.Ispd05.load(options.ispd05name)
|
||||
elif options.blifName:
|
||||
cell = CRL.Blif.load(options.blifName)
|
||||
elif options.cell:
|
||||
cell = af.getCell(options.cell, CRL.Catalog.State.Views)
|
||||
|
||||
# Run in graphic mode.
|
||||
ha = Viewer.HApplication.create(args)
|
||||
Viewer.Graphics.enable()
|
||||
unicorn = Unicorn.UnicornGui.create()
|
||||
unicorn.setApplicationName ('tutu')
|
||||
#unicorn.registerTool (Seabreeze.GraphicSeabreezeEngine.grab())
|
||||
unicorn.setLayerVisible ("grid" , False);
|
||||
unicorn.setLayerVisible ("text.instance" , False);
|
||||
unicorn.setLayerVisible ("text.component", False);
|
||||
|
||||
setCgtBanner(unicorn.getBanner())
|
||||
print( unicorn.getBanner() )
|
||||
print( credits() )
|
||||
if cell: unicorn.setCell(cell)
|
||||
unicorn.show()
|
||||
ha.qtExec()
|
||||
except Exception, e:
|
||||
helpers.io.catch( e )
|
||||
sys.exit(0)
|
|
@ -0,0 +1,23 @@
|
|||
#pragma once // ensures that this header file is only included once
|
||||
|
||||
#include <vector>
|
||||
|
||||
#include "hurricane/Contact.h"
|
||||
|
||||
using Hurricane::Contact;
|
||||
|
||||
class Node {
|
||||
public :
|
||||
int R;
|
||||
int Rt;
|
||||
int C;
|
||||
Node* Np;
|
||||
std::vector<Node*> Ne;
|
||||
Contact* _contact;
|
||||
int label;
|
||||
int ap;
|
||||
public:
|
||||
Node ();
|
||||
Node ( Node* parent, Contact* ct );
|
||||
~Node ();
|
||||
};
|
|
@ -0,0 +1,42 @@
|
|||
#ifndef PY_SEABREEZE_ENGINE_H
|
||||
#define PY_SEABREEZE_ENGINE_H
|
||||
|
||||
#include "hurricane/isobar/PyHurricane.h"
|
||||
#include "crlcore/PyToolEngine.h"
|
||||
#include "SeabreezeEngine.h"
|
||||
|
||||
|
||||
namespace Seabreeze {
|
||||
|
||||
extern "C" {
|
||||
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
// Python Object : "PySeabreezeEngine".
|
||||
|
||||
typedef struct {
|
||||
CRL::PyToolEngine _baseObject;
|
||||
} PySeabreezeEngine;
|
||||
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
// Functions & Types exported to "PySeabreeze.ccp".
|
||||
|
||||
extern PyTypeObject PyTypeSeabreezeEngine;
|
||||
extern PyMethodDef PySeabreezeEngine_Methods[];
|
||||
|
||||
extern PyObject* PySeabreezeEngine_Link ( Seabreeze::SeabreezeEngine* );
|
||||
extern void PySeabreezeEngine_LinkPyType ();
|
||||
extern void PySeabreezeEngine_postModuleInit ();
|
||||
|
||||
|
||||
#define IsPySeabreezeEngine(v) ( (v)->ob_type == &PyTypeSeabreezeEngine )
|
||||
#define PYSEABREEZEENGINE(v) ( (PySeabreezeEngine*)(v) )
|
||||
#define PYSEABREEZEENGINE_O(v) ( PYSEABREEZEENGINE(v)->_baseObject._object )
|
||||
|
||||
|
||||
} // extern "C".
|
||||
|
||||
} // Tutorial namespace.
|
||||
|
||||
#endif // PY_SEABREEZE_ENGINE_H
|
|
@ -0,0 +1,101 @@
|
|||
#include <string>
|
||||
#include <vector>
|
||||
#include <set>
|
||||
|
||||
#include "hurricane/Property.h"
|
||||
#include "hurricane/RoutingPad.h"
|
||||
#include "hurricane/Contact.h"
|
||||
|
||||
#include "Tree.h"
|
||||
|
||||
namespace Hurricane {
|
||||
class Net;
|
||||
class Instance;
|
||||
}
|
||||
|
||||
namespace Seabreeze {
|
||||
|
||||
using namespace std;
|
||||
using Hurricane::Name;
|
||||
using Hurricane::DBo;
|
||||
using Hurricane::Net;
|
||||
using Hurricane::Cell;
|
||||
using Hurricane::RoutingPad;
|
||||
using Hurricane::Contact;
|
||||
using Hurricane::Instance;
|
||||
using Hurricane::PrivateProperty;
|
||||
|
||||
//----------------------------------------------------------
|
||||
// Class : Seabreeze::Elmore
|
||||
|
||||
class Elmore {
|
||||
public:
|
||||
Elmore ( Net* net = NULL );
|
||||
~Elmore ();
|
||||
void contFromNet ( Net* net );
|
||||
void buildTree ( RoutingPad* rp );
|
||||
void build_from_node ( Node* source );
|
||||
void clearTree ();
|
||||
Tree* getTree ();
|
||||
int delayElmore ( RoutingPad* rp );
|
||||
void toTREE ( ostream& ) const;
|
||||
private:
|
||||
set<Contact*> _conts;
|
||||
set<Contact*> checker;
|
||||
Tree* _tree;
|
||||
};
|
||||
|
||||
//---------------------------------------------------------
|
||||
// Class : Seabreeze::ElmoreProperty
|
||||
|
||||
class ElmoreProperty : public Hurricane::PrivateProperty {
|
||||
friend class ElmoreExtension;
|
||||
public:
|
||||
static Name _name;
|
||||
public:
|
||||
static ElmoreProperty* create ( Net* net );
|
||||
Name getName () const;
|
||||
virtual string _getTypeName () const;
|
||||
inline Elmore* getElmore ();
|
||||
protected:
|
||||
// Attribute
|
||||
Elmore _elmore;
|
||||
protected:
|
||||
// Constructor
|
||||
inline ElmoreProperty ( Net* );
|
||||
};
|
||||
|
||||
inline ElmoreProperty::ElmoreProperty ( Net* n )
|
||||
: PrivateProperty()
|
||||
, _elmore(NULL)
|
||||
{}
|
||||
|
||||
inline Elmore* ElmoreProperty::getElmore()
|
||||
{
|
||||
return &_elmore;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------
|
||||
// Class : Seabreeze::ElmoreExtension
|
||||
|
||||
class ElmoreExtension {
|
||||
public:
|
||||
static void destroyAll ();
|
||||
static Elmore* create ( Net* );
|
||||
static inline Tree* getTree ( Elmore* );
|
||||
static inline void toTREE ( const Elmore*, std::ostream& );
|
||||
static void destroy ( Net* net );
|
||||
private:
|
||||
static Net* Nets;
|
||||
};
|
||||
|
||||
inline Tree* ElmoreExtension::getTree ( Elmore* elmore )
|
||||
{
|
||||
return elmore->getTree();
|
||||
}
|
||||
|
||||
inline void ElmoreExtension::toTREE ( const Elmore* elmore, std::ostream& out )
|
||||
{
|
||||
elmore->toTREE(out);
|
||||
}
|
||||
} // Seabreeze Namespace
|
|
@ -0,0 +1,71 @@
|
|||
#ifndef SEABREEZE_SEABREEZE_ENGINE_H
|
||||
#define SEABREEZE_SEABREEZE_ENGINE_H
|
||||
|
||||
#include <string>
|
||||
#include <iostream>
|
||||
|
||||
#include "hurricane/Name.h"
|
||||
#include "hurricane/viewer/CellViewer.h"
|
||||
#include "hurricane/RoutingPad.h"
|
||||
|
||||
namespace Hurricane {
|
||||
class Net;
|
||||
class Cell;
|
||||
}
|
||||
|
||||
#include "crlcore/ToolEngine.h"
|
||||
#include "Seabreeze.h"
|
||||
|
||||
namespace Seabreeze {
|
||||
|
||||
using Hurricane::Record;
|
||||
using Hurricane::Name;
|
||||
using Hurricane::Net;
|
||||
using Hurricane::Cell;
|
||||
using Hurricane::CellViewer;
|
||||
using Hurricane::RoutingPad;
|
||||
using CRL::ToolEngine;
|
||||
|
||||
//----------------------------------------------------------
|
||||
// Class : "Seabreeze::SeabreezeEngine"
|
||||
|
||||
class SeabreezeEngine : public ToolEngine {
|
||||
public :
|
||||
typedef ToolEngine Super;
|
||||
public :
|
||||
static const Name& staticGetName ();
|
||||
static SeabreezeEngine* create ( Cell* );
|
||||
static SeabreezeEngine* get ( const Cell* );
|
||||
public :
|
||||
inline CellViewer* getViewer () const;
|
||||
inline ToolEngine* base ();
|
||||
virtual const Name& getName () const;
|
||||
inline void setViewer ( CellViewer* );
|
||||
virtual Record* _getRecord () const;
|
||||
virtual std::string _getString () const;
|
||||
virtual std::string _getTypeName () const;
|
||||
virtual void runTool ( Net* net );
|
||||
protected :
|
||||
SeabreezeEngine ( Cell* );
|
||||
virtual ~SeabreezeEngine ();
|
||||
virtual void _postCreate ();
|
||||
virtual void _preDestroy ();
|
||||
private :
|
||||
SeabreezeEngine ( const SeabreezeEngine& );
|
||||
SeabreezeEngine& operator= ( const SeabreezeEngine& );
|
||||
private :
|
||||
// Attributes.
|
||||
static Name _toolName;
|
||||
protected :
|
||||
CellViewer* _viewer;
|
||||
};
|
||||
|
||||
// Inline Functions.
|
||||
inline CellViewer* SeabreezeEngine::getViewer () const { return _viewer; }
|
||||
inline ToolEngine* SeabreezeEngine::base () { return static_cast<ToolEngine*>(this); }
|
||||
inline void SeabreezeEngine::setViewer ( CellViewer* viewer ) { _viewer = viewer; }
|
||||
} // Seabreeze namespace.
|
||||
|
||||
INSPECTOR_P_SUPPORT(Seabreeze::SeabreezeEngine);
|
||||
|
||||
#endif // SEABREEZE_SEABREEZE_ENGINE_H
|
|
@ -0,0 +1,31 @@
|
|||
#pragma once
|
||||
|
||||
#include <set>
|
||||
#include <vector>
|
||||
#include <iostream>
|
||||
|
||||
#include "Node.h"
|
||||
|
||||
#include "hurricane/Contact.h"
|
||||
#include "hurricane/RoutingPad.h"
|
||||
|
||||
using namespace std;
|
||||
using Hurricane::RoutingPad;
|
||||
|
||||
class Tree{
|
||||
public:
|
||||
Tree ();
|
||||
~Tree ();
|
||||
int get_N ();
|
||||
Node* get_node ( Contact* cont );
|
||||
vector<Node*> get_node_list ();
|
||||
void new_node ();
|
||||
void add_node ( Node* node );
|
||||
void After_i ( Node* ni );
|
||||
set<Node*> Branch_i ( Contact* ct );
|
||||
int Delay_Elmore ( RoutingPad* rp );
|
||||
void print ( ostream& out );
|
||||
void clear ();
|
||||
private:
|
||||
vector<Node*> nodes;
|
||||
};
|
|
@ -0,0 +1,128 @@
|
|||
#include <Python.h>
|
||||
#include <sstream>
|
||||
#include <fstream>
|
||||
#include <iomanip>
|
||||
#include "hurricane/utilities/Path.h"
|
||||
#include "hurricane/DebugSession.h"
|
||||
#include "hurricane/UpdateSession.h"
|
||||
#include "hurricane/Bug.h"
|
||||
#include "hurricane/Error.h"
|
||||
#include "hurricane/Warning.h"
|
||||
#include "hurricane/DataBase.h"
|
||||
#include "hurricane/Technology.h"
|
||||
#include "hurricane/Breakpoint.h"
|
||||
#include "hurricane/Layer.h"
|
||||
#include "hurricane/Net.h"
|
||||
#include "hurricane/RoutingPad.h"
|
||||
#include "hurricane/Plug.h"
|
||||
#include "hurricane/Cell.h"
|
||||
#include "hurricane/Instance.h"
|
||||
#include "hurricane/Vertical.h"
|
||||
#include "hurricane/Horizontal.h"
|
||||
#include "crlcore/AllianceFramework.h"
|
||||
#include "Seabreeze/SeabreezeEngine.h"
|
||||
|
||||
namespace Seabreeze {
|
||||
|
||||
using namespace std;
|
||||
using Hurricane::dbo_ptr;
|
||||
using Hurricane::UpdateSession;
|
||||
using Hurricane::DebugSession;
|
||||
using Hurricane::tab;
|
||||
using Hurricane::Bug;
|
||||
using Hurricane::Error;
|
||||
using Hurricane::Warning;
|
||||
using Hurricane::Breakpoint;
|
||||
using Hurricane::Timer;
|
||||
using Hurricane::DbU;
|
||||
using Hurricane::Box;
|
||||
using Hurricane::Layer;
|
||||
using Hurricane::DataBase;
|
||||
using Hurricane::Technology;
|
||||
using Hurricane::Component;
|
||||
using Hurricane::Contact;
|
||||
using Hurricane::Horizontal;
|
||||
using Hurricane::Vertical;
|
||||
using Hurricane::RoutingPad;
|
||||
using Hurricane::Cell;
|
||||
using Hurricane::Plug;
|
||||
using Hurricane::Instance;
|
||||
using Hurricane::Transformation;
|
||||
using Hurricane::Occurrence;
|
||||
|
||||
//---------------------------------------------------------
|
||||
// Class : "Seabreeze::SeabreezeEngine".
|
||||
|
||||
Name SeabreezeEngine::_toolName = "Seabreeze";
|
||||
|
||||
const Name& SeabreezeEngine::staticGetName ()
|
||||
{ return _toolName; }
|
||||
|
||||
SeabreezeEngine* SeabreezeEngine::create ( Cell* cell )
|
||||
{
|
||||
SeabreezeEngine* seabreeze = new SeabreezeEngine ( cell );
|
||||
seabreeze->_postCreate();
|
||||
return seabreeze;
|
||||
}
|
||||
|
||||
SeabreezeEngine* SeabreezeEngine::get ( const Cell* cell )
|
||||
{ return static_cast<SeabreezeEngine*>(ToolEngine::get(cell, staticGetName())); }
|
||||
|
||||
const Name& SeabreezeEngine::getName () const
|
||||
{ return _toolName; };
|
||||
|
||||
Record* SeabreezeEngine::_getRecord () const
|
||||
{
|
||||
Record* record= Super::_getRecord ();
|
||||
|
||||
if ( record ) {
|
||||
// Add new records here
|
||||
}
|
||||
return record;
|
||||
}
|
||||
|
||||
string SeabreezeEngine::_getString () const
|
||||
{
|
||||
ostringstream os;
|
||||
os << "<" << "SeabreezeEngine " << _cell->getName() << ">";
|
||||
return os.str();
|
||||
}
|
||||
|
||||
string SeabreezeEngine::_getTypeName () const
|
||||
{ return "Seabreeze::SeabreezeEngine"; }
|
||||
|
||||
void SeabreezeEngine::runTool ( Net* net )
|
||||
{
|
||||
cerr << "SeabreezeEngine::runTool() has been called." << endl;
|
||||
|
||||
RoutingPad* driver= nullptr;
|
||||
|
||||
for ( RoutingPad* rp : net->getRoutingPads() ) {
|
||||
Plug* p = static_cast<Plug*>(rp->getPlugOccurrence().getEntity());
|
||||
if ( p->getMasterNet()->getDirection() & Net::Direction::DirOut ) {
|
||||
driver = rp;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Elmore* elm = ElmoreProperty::create(net)->getElmore();
|
||||
elm->buildTree(driver);
|
||||
}
|
||||
|
||||
SeabreezeEngine::SeabreezeEngine ( Cell* cell )
|
||||
: Super (cell)
|
||||
, _viewer (NULL)
|
||||
{}
|
||||
|
||||
SeabreezeEngine::~SeabreezeEngine ()
|
||||
{}
|
||||
|
||||
void SeabreezeEngine::_postCreate()
|
||||
{
|
||||
Super::_postCreate ();
|
||||
}
|
||||
|
||||
void SeabreezeEngine::_preDestroy ()
|
||||
{}
|
||||
|
||||
}
|
|
@ -0,0 +1,151 @@
|
|||
#include "Seabreeze/Tree.h"
|
||||
|
||||
#include <iostream>
|
||||
#include <iterator>
|
||||
|
||||
using namespace std;
|
||||
|
||||
Tree::Tree ()
|
||||
:nodes()
|
||||
{}
|
||||
|
||||
Tree::~Tree ()
|
||||
{
|
||||
for(Node* n : nodes){
|
||||
delete n;
|
||||
}
|
||||
}
|
||||
|
||||
int Tree::get_N ()
|
||||
{
|
||||
return nodes.size();
|
||||
}
|
||||
|
||||
Node* Tree::get_node ( Contact* cont )
|
||||
{
|
||||
Node* node = nullptr;
|
||||
for ( Node* n : nodes ) {
|
||||
if ( n->_contact == cont ) {
|
||||
node = n;
|
||||
}
|
||||
}
|
||||
|
||||
return node;
|
||||
}
|
||||
|
||||
vector<Node*> Tree::get_node_list ()
|
||||
{
|
||||
return nodes;
|
||||
}
|
||||
|
||||
void Tree::new_node ()
|
||||
{
|
||||
nodes.push_back(new Node());
|
||||
}
|
||||
|
||||
void Tree::add_node ( Node* node )
|
||||
{
|
||||
node->label = nodes.size();
|
||||
nodes.push_back(node);
|
||||
}
|
||||
|
||||
void Tree::After_i ( Node *ni )
|
||||
{
|
||||
if(ni == nullptr)
|
||||
return;
|
||||
|
||||
ni->ap = 1;
|
||||
int size = ni->Ne.size();
|
||||
for(int i = 0; i < size; i++){
|
||||
After_i(ni->Ne[i]);
|
||||
}
|
||||
}
|
||||
|
||||
set<Node*> Tree::Branch_i ( Contact* ct )
|
||||
{
|
||||
set<Node*> ln;
|
||||
Node *ni = get_node(ct);
|
||||
while(ni != nullptr){
|
||||
ln.insert(ni->Np);
|
||||
ni = ni->Np;
|
||||
}
|
||||
|
||||
return ln;
|
||||
}
|
||||
|
||||
int Tree::Delay_Elmore ( RoutingPad* rp )
|
||||
{
|
||||
if ( rp == nullptr ) {
|
||||
cerr << "Input RoutingPad is NULL. Please select a RoutingPad !" << endl;
|
||||
return -1;
|
||||
}
|
||||
Contact* ct = dynamic_cast<Contact*>(rp);
|
||||
if ( not ct ) {
|
||||
cerr << "No contact found" << endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
int t = 0;
|
||||
|
||||
set<Node*> br = Branch_i(ct);
|
||||
|
||||
Node *ni = get_node(ct);
|
||||
After_i(ni);
|
||||
ni->ap = 0;
|
||||
|
||||
// Compute Rt of all nodes
|
||||
for ( size_t k = 0; k < nodes.size(); k++ ) {
|
||||
if ( k == 0 )
|
||||
nodes[k]->Rt = 0;
|
||||
else{
|
||||
if ( nodes[k]->ap == 0 ) {
|
||||
if ( br.count(nodes[k]) > 0 ) {
|
||||
nodes[k]->Rt = (nodes[k]->Np)->Rt + nodes[k]->R;
|
||||
}
|
||||
else{
|
||||
nodes[k]->Rt = (nodes[k]->Np)->Rt;
|
||||
}
|
||||
}
|
||||
else{
|
||||
nodes[k]->Rt = ni->Rt;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//Compute Elmore delay time
|
||||
for ( size_t k = 0; k < nodes.size(); k++ ) {
|
||||
t += (nodes[k]->Rt)*(nodes[k]->C);
|
||||
}
|
||||
return t;
|
||||
}
|
||||
|
||||
void Tree::print ( ostream& out )
|
||||
{
|
||||
out << "Tree has " << nodes.size() << " nodes :" << endl;
|
||||
|
||||
out << nodes[0]->label << " -> ";
|
||||
for(Node* n : nodes[0]->Ne){
|
||||
out << n->label << ", ";
|
||||
}
|
||||
out << std::endl;
|
||||
|
||||
for ( int i = 1; i < nodes.size(); i++ ) {
|
||||
out << nodes[i]->Np->label
|
||||
<< " -> " << nodes[i]->label
|
||||
<< " : R = " << nodes[i]->R
|
||||
<< ", C = " << nodes[i]->C;
|
||||
if ( !(nodes[i]->Ne).empty() ) {
|
||||
out << " -> ";
|
||||
for ( Node* n : nodes[i]->Ne ) {
|
||||
out << n->label << ", ";
|
||||
}
|
||||
}
|
||||
else
|
||||
out << " |";
|
||||
out << endl;
|
||||
}
|
||||
}
|
||||
|
||||
void Tree::clear () {
|
||||
nodes.clear();
|
||||
}
|
|
@ -0,0 +1,143 @@
|
|||
#include <iostream>
|
||||
#include <cassert>
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
#include <stdlib.h>
|
||||
#include <map>
|
||||
#include <vector>
|
||||
|
||||
#include "Seabreeze/Node.h"
|
||||
#include "Seabreeze/Tree.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
void build_tree(std::ifstream &file, Tree &t){
|
||||
if(file.is_open()){
|
||||
string line;
|
||||
getline(file, line);
|
||||
char RoC;
|
||||
int lb1, lb2, vl; // possible labels of current node (can be parrent - current or current - child), value of R(or C)
|
||||
|
||||
vector<string> infos; // memoriser of infos taken from line
|
||||
// Read file, line by line, get infomations
|
||||
while(getline(file, line)){
|
||||
stringstream tmp(line);
|
||||
string word;
|
||||
while(tmp >> word){
|
||||
infos.push_back(word);
|
||||
}
|
||||
|
||||
// Format is :
|
||||
// infos[0] = RoC
|
||||
// infos[1] = lb1 = label of current node
|
||||
// infos[2] = lb2 = label of child node
|
||||
// infos[3] = vl = value of RoC
|
||||
|
||||
char RoC = infos[0].at(0);
|
||||
|
||||
// infos[i>0] has type of string, so we need to turn it into integer using strtol
|
||||
lb1 = strtol(infos[1].c_str(), NULL, 10);
|
||||
lb2 = strtol(infos[2].c_str(), NULL, 10);
|
||||
vl = strtol(infos[3].c_str(), NULL, 10);
|
||||
|
||||
infos.clear();
|
||||
|
||||
if(lb1 < 0 || lb2 == 0 || lb2 < -1){
|
||||
// No node can have the root as a child
|
||||
// A parent node cannot have label < 0 (<0 means -1, which is the ground)
|
||||
cout << "Please check your configuration !" << endl;
|
||||
cout << RoC << "\t" << lb1 << "\t" << lb2 << "\t" << vl << endl;
|
||||
return;
|
||||
}
|
||||
else if(lb1 >= 0 && lb2 == -1){
|
||||
// In this case, the branch is connected to "the ground"
|
||||
// lb1 is the label of current node
|
||||
|
||||
// Check if current node is already created
|
||||
if(RoC == 'R'){
|
||||
cout << "Please check your configuration !" << endl;
|
||||
cout << RoC << "\t" << lb1 << "\t" << lb2 << "\t" << vl << endl;
|
||||
return;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------------
|
||||
// cout << "Node label : " << lb1 << " " << lb2 << " " << RoC << " " << vl << endl;
|
||||
//----------------------------------------------------------------------------------
|
||||
|
||||
if(t.get_node(lb1)->label == -1)
|
||||
t.get_node(lb1)->label = lb1;
|
||||
|
||||
if(RoC == 'C')
|
||||
t.get_node(lb1)->C = vl;
|
||||
//----------------------------------------------------------------------------------
|
||||
// cout << "Node " << t.get_node(lb1).label << " -> " << lb2 << " C = " << t.get_node(lb1).C << endl << endl;
|
||||
//----------------------------------------------------------------------------------
|
||||
}
|
||||
else if(lb1 >= 0 && lb2 > 0){
|
||||
// lb1 is the label of parent node
|
||||
// lb2 is the label of current node
|
||||
//----------------------------------------------------------------------------------
|
||||
// cout << "Node label : " << lb1 << " " << lb2 << " " << RoC << " " << vl << endl;
|
||||
// cout << "Exist ? " << " n1 : " << t.get_node(lb1).label+1 << " n2 : " << t.get_node(lb2).label+1 << endl;
|
||||
//----------------------------------------------------------------------------------
|
||||
|
||||
if(t.get_node(lb1)->label == -1)
|
||||
t.get_node(lb1)->label = lb1;
|
||||
|
||||
if(t.get_node(lb2)->label == -1)
|
||||
t.get_node(lb2)->label = lb2;
|
||||
|
||||
// Get the nodes
|
||||
if(RoC == 'R')
|
||||
t.get_node(lb2)->R = vl;
|
||||
else if(RoC == 'C')
|
||||
t.get_node(lb2)->C = vl;
|
||||
//-----------------------------------------------------------------------------------
|
||||
// cout << "Node : " << t.get_node(lb1).label << " -> " << t.get_node(lb2).label << " R = " << t.get_node(lb2).R << " C = " << t.get_node(lb2).C << endl;
|
||||
//-----------------------------------------------------------------------------------
|
||||
((t.get_node(lb1))->Ne).push_back(t.get_node(lb2));
|
||||
((t.get_node(lb2))->Np) = t.get_node(lb1);
|
||||
//-----------------------------------------------------------------------------------
|
||||
// cout << "Check : " << t.get_node(lb2).Np->label << " -> " << t.get_node(lb2).label << " R = " << t.get_node(lb2).R << " C = " << t.get_node(lb2).C << endl;
|
||||
//-----------------------------------------------------------------------------------
|
||||
}
|
||||
}
|
||||
//-----------------------------------------------------------------------------------
|
||||
// cout << "Double check !" << endl;
|
||||
// for(int i = 1; i < t.get_N(); i++){
|
||||
// cout << t.get_node(i).Np->label << " -> " << t.get_node(i).label << " R = " << t.get_node(i).R << " C = " << t.get_node(i).C << endl;
|
||||
// }
|
||||
//-----------------------------------------------------------------------------------
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, char *argv[]){
|
||||
if(argc < 4){
|
||||
cout << "Usage : ./test <file name> <nodes number> <point index>" << endl
|
||||
<< "Example : " << argv[0] << " data.txt 10 3" << endl;
|
||||
return 0;
|
||||
}
|
||||
cout << "Testing with data from : " << argv[1] << endl;
|
||||
ifstream f(argv[1]);
|
||||
assert(f.is_open());
|
||||
|
||||
int num = strtol(argv[2], NULL, 10);
|
||||
Tree t;
|
||||
for(int i = 0; i < num; i++){
|
||||
t.new_node();
|
||||
}
|
||||
build_tree(f, t);
|
||||
|
||||
filebuf fb;
|
||||
fb.open ( "output.txt", ios::out );
|
||||
ostream fout(&fb);
|
||||
t.print(fout);
|
||||
|
||||
int idx = strtol(argv[3], NULL, 10);
|
||||
int time = t.Delay_Elmore(idx);
|
||||
cout << "Elmore delay time : " << time << endl;
|
||||
fb.close();
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
|
||||
R1 0 1 10
|
||||
C1 1 -1 20
|
||||
R2 1 2 30
|
||||
C2 2 -1 10
|
|
@ -0,0 +1,15 @@
|
|||
|
||||
R1 0 1 10
|
||||
C1 1 -1 15
|
||||
R2 1 2 20
|
||||
C2 2 -1 25
|
||||
R3 1 3 30
|
||||
C3 3 -1 35
|
||||
R4 3 4 40
|
||||
C4 4 -1 45
|
||||
R5 3 5 50
|
||||
C5 5 -1 55
|
||||
R6 3 6 60
|
||||
C6 6 -1 65
|
||||
R7 5 7 70
|
||||
C7 7 -1 75
|
|
@ -0,0 +1 @@
|
|||
node : not only left and right children, can have multiple children
|
Loading…
Reference in New Issue