* ./hurricane/src/hurricane:
- New: Added an id on DBo, SharedName and SharedPath to ensure database determinism. All the hash key now uses the id instead of the object's pointer (see _getHashValue()). - Change: In RoutingPad, position is now only relative to the anchor, no more (dx,dy). Add a isPlacedOccurrence() to check if all the occurrence in the path are fixed and thus the position meaningful. * ./hurricane/doc/hurricane: - Change: In Cell, added doc about PlacementStatus. - Change: In Transformation, more detailed explanations about the orientations. A little beautifying too... - Change: RoutingPad doc update. - Change: Entity doc update (for id). - Change: In HTML header/footer uses the new SoC.css.
This commit is contained in:
parent
ac85c0cca4
commit
12f595941a
|
@ -7,49 +7,88 @@
|
|||
/*! \class Entity
|
||||
* \brief Occurrenceable objects root class (\b API).
|
||||
*
|
||||
* \section sEntityIntro Introduction
|
||||
* \section secEntityIntro Introduction
|
||||
*
|
||||
* Entities are abstract objects representing the category of
|
||||
* occurrenceable objects.
|
||||
*/
|
||||
|
||||
|
||||
/*! \function Cell* Entity::getCell () const;
|
||||
* \return Returns the cell owning this entity (when the Entity is a Cell,
|
||||
* the Cell itself is returned)
|
||||
*/
|
||||
|
||||
/*! \function Box Entity::getBoundingBox () const;
|
||||
* \return Returns the bounding box of the entity. It is defined as the
|
||||
* smallest box enclosing the entity or its constituents.
|
||||
*
|
||||
* \remark For the Plugs, which are not objects of the physical layout,
|
||||
* the returned envelope is a Box of null dimensions (ponctual)
|
||||
* centered on the location of the master Net of the Plug, to
|
||||
* which has been applied the transformation associated to the
|
||||
* Instance of the Plug.
|
||||
* \section secEntityId Unique Identifier
|
||||
*
|
||||
* Each Entity is associated with a unique identifier (see
|
||||
* Entity::getId()). This identifier is used as a sorting key
|
||||
* in the various IntrusiveMap throughout Hurricane to ensure
|
||||
* determinism. It came as a replacement of the object's own
|
||||
* address which is not suitable for this purpose.
|
||||
*
|
||||
* For STL container, the Entity::CompareById functor is provided.
|
||||
*
|
||||
* The identifier is generated from an ever incrementing counter
|
||||
* on 32 bits or 64 bits, depending on the target system architecture.
|
||||
* If the 32/64 bit capacity is reached an exception is thrown.
|
||||
*/
|
||||
|
||||
//! \function unsigned int Entity::getId () const;
|
||||
//! \Return Returns the unique identifier of this Entity.
|
||||
|
||||
//! \function Cell* Entity::getCell () const;
|
||||
//! \Return Returns the cell owning this entity (when the Entity is a Cell,
|
||||
//! the Cell itself is returned)
|
||||
|
||||
//! \function Box Entity::getBoundingBox () const;
|
||||
//! \return Returns the bounding box of the entity. It is defined as the
|
||||
//! smallest box enclosing the entity or its constituents.
|
||||
//!
|
||||
//! \remark For the Plugs, which are not objects of the physical layout,
|
||||
//! the returned envelope is a Box of null dimensions (ponctual)
|
||||
//! centered on the location of the master Net of the Plug, to
|
||||
//! which has been applied the transformation associated to the
|
||||
//! Instance of the Plug.
|
||||
|
||||
|
||||
//! \name Entity Collection
|
||||
// \{
|
||||
//! \{
|
||||
|
||||
/*! \typedef typedef GenericCollection<Entity*> Entities;
|
||||
* Generic collection representing a set of data base objects.
|
||||
//! \typedef typedef GenericCollection<Entity*> Entities;
|
||||
//! Generic collection representing a set of data base objects.
|
||||
//!
|
||||
|
||||
//! \typedef typedef GenericLocator<Entity*> EntityLocator;
|
||||
//! Generic locator for visiting a data base objects Collection.
|
||||
//!
|
||||
|
||||
//! \typedef typedef GenericFilter<Entity*> EntityFilter;
|
||||
//! Filter to selecting a subset of data base objects matching some criteria.
|
||||
//!
|
||||
|
||||
//! \def for_each_entity(entity,entities)
|
||||
//! Macro for visiting all objects of a data base objects collection.
|
||||
//!
|
||||
|
||||
//! \}
|
||||
|
||||
/*! \class Entity::CompareById
|
||||
* \brief Entity comparison criterion for STL container.
|
||||
*
|
||||
* This class is a functor to be used in STL containers of \c Entity*
|
||||
* whenever determinism is required (as an alternative to the object's
|
||||
* pointer). If a \c NULL pointer is passed as argument, it's \c id
|
||||
* is computed as zero, it is a failsafe and should be avoided.
|
||||
*
|
||||
\code
|
||||
typedef std::map<Net*,SomeValue,Entity::CompareById> NetMap;
|
||||
|
||||
NetMap netMap;
|
||||
forEach( Net*, inet, cell->getNets() ) {
|
||||
netMap.insert( std::make_pair(*inet,computeSomeValue(*inet)) );
|
||||
}
|
||||
|
||||
for ( NetMap::iterator imap=netMap.begin() ; imap!=netMap.end() ; ++imap ) {
|
||||
// Show the Net ordering
|
||||
cout << (*imap).first->getId() << ":" << (*imap).first << endl;
|
||||
// Do something
|
||||
// ...
|
||||
}
|
||||
\endcode
|
||||
*/
|
||||
|
||||
/*! \typedef typedef GenericLocator<Entity*> EntityLocator;
|
||||
* Generic locator for visiting a data base objects Collection.
|
||||
*/
|
||||
|
||||
/*! \typedef typedef GenericFilter<Entity*> EntityFilter;
|
||||
* Filter to selecting a subset of data base objects matching some criteria.
|
||||
*/
|
||||
|
||||
/*! \def for_each_entity(entity,entities)
|
||||
* Macro for visiting all objects of a data base objects collection.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
}
|
||||
|
|
|
@ -19,6 +19,21 @@
|
|||
* cell of a hierachical assembly, as well as for all cells from
|
||||
* the library which are not instanciated in the current
|
||||
* design).
|
||||
*
|
||||
*
|
||||
* \section secInstancePlacement Placement Status
|
||||
*
|
||||
* See Instance::PlacementStatus and Instance::PlacementStatus::Code.
|
||||
*
|
||||
* An Instance can have three kind of placement status:
|
||||
* - Instance::PlacementStatus::UNPLACED : the instance doesn't have a
|
||||
* meaningful position. It shouldn't be materialized either.
|
||||
* It's position therfore shouldn't be used.
|
||||
* - Instance::PlacementStatus::PLACED : the instance has be placed
|
||||
* manually or by an automated tool. It is movable.
|
||||
* - Instance::PlacementStatus::FIXED : the instance is placed and
|
||||
* mustn't be moved by automated tools. It can still be moved
|
||||
* manually.
|
||||
*
|
||||
*
|
||||
* \section secInstancePredefinedFilters Predefined filters
|
||||
|
@ -172,4 +187,43 @@
|
|||
|
||||
// \}
|
||||
|
||||
//! \class Instance::PlacementStatus
|
||||
//! \brief Instance Placement Status (\b API)
|
||||
//!
|
||||
//! \section secInstancePStatus Instance Placement Status
|
||||
//!
|
||||
//! An Instance can have three kind of placement status:
|
||||
//! - Instance::PlacementStatus::UNPLACED : the instance doesn't have a
|
||||
//! meaningful position. It shouldn't be materialized either.
|
||||
//! It's position therfore shouldn't be used.
|
||||
//! - Instance::PlacementStatus::PLACED : the instance has be placed
|
||||
//! manually or by an automated tool. It is movable.
|
||||
//! - Instance::PlacementStatus::FIXED : the instance is placed and
|
||||
//! mustn't be moved by automated tools. It can still be moved
|
||||
//! manually.
|
||||
|
||||
//! \function Instance::PlacementStatus::PlacementStatus( const Code& code=UNPLACED );
|
||||
//! Constructor. By default the status is unplaced.
|
||||
|
||||
//! \function Instance::PlacementStatus::PlacementStatus( const Instance::PlacementStatus& );
|
||||
//! Copy Constructor.
|
||||
|
||||
//! \function Instance::PlacementStatus::operator const Code& () const;
|
||||
//! Type converter toward Instance::PlacementStatus::Code enum.
|
||||
|
||||
//! \function Instance::PlacementStatus::Code& Instance::PlacementStatus::getCode() const;
|
||||
//! \return The status (Code) value.
|
||||
|
||||
//! \enum Instance::PlacementStatus::Code
|
||||
//! Describe the various placement status an Instance can be in.
|
||||
|
||||
//! \var Instance::PlacementStatus::UNPLACED
|
||||
//! \sa Instance::PlacementStatus.
|
||||
|
||||
//! \var Instance::PlacementStatus::PLACED
|
||||
//! \sa Instance::PlacementStatus.
|
||||
|
||||
//! \var Instance::PlacementStatus::FIXED
|
||||
//! \sa Instance::PlacementStatus.
|
||||
|
||||
}
|
||||
|
|
|
@ -151,6 +151,9 @@
|
|||
* \Return the collection of net's pads.
|
||||
*/
|
||||
|
||||
//! \function RoutingPads Net::getRoutingPads() const;
|
||||
//! \Return the collection of net's RoutingPads.
|
||||
|
||||
/*! \function Plugs Net::getSlavePlugs() const;
|
||||
* \Return the collection of plugs which have this net as master.
|
||||
*
|
||||
|
|
|
@ -11,14 +11,20 @@
|
|||
* The RoutingPad is a part of the trans-hierarchical mechanism.
|
||||
* It allows to connect a Net from the top-level netlist to
|
||||
* a plug in an Instance at any level inside the hierarchy,
|
||||
* throuhg a Plug Occurrence. RoutingPad can also be created from
|
||||
* through a Plug Occurrence. RoutingPad can also be created from
|
||||
* Pin or Contact Occurrences.
|
||||
*
|
||||
* When the RoutingPad is created using a Plug Occurrence, it can
|
||||
* be set afterward to any of master net external Component.
|
||||
* An utility method RoutingPad::setOnBestComponent() is also
|
||||
* A utility method RoutingPad::setOnBestComponent() is also
|
||||
* provided to automatically set the RoutingPad on a Component
|
||||
* matching criteria of surface or layer level.
|
||||
*
|
||||
* The position of the RoutingPad is fixed relatively from the
|
||||
* instances in it's occurrence path and the entity it refers.
|
||||
* The reference point used on the entity is it's center whether
|
||||
* it is a segment, a pin or a plug. In the later case, it is
|
||||
* the center of the cell.
|
||||
*/
|
||||
|
||||
|
||||
|
@ -38,6 +44,10 @@
|
|||
//! \var RoutingPad::ComponentSelection
|
||||
//! A mask to filter bit parts of a flag belonging to component selection.
|
||||
|
||||
//! \var RoutingPad::ShowWarning
|
||||
//! Whether to display a warning or not while checking the instances
|
||||
//! placement.
|
||||
|
||||
|
||||
//! \typedef RoutingPad::Inherit
|
||||
//! Useful for calling upon methods of the base class without
|
||||
|
@ -53,6 +63,17 @@
|
|||
//! \function RoutingPad* RoutingPad::create ( Pin* pin );
|
||||
//! Special variant to create a RoutingPad from a top-level Pin.
|
||||
|
||||
//! \function bool RoutingPad::isPlacedOccurrence ( unsigned int flags ) const;
|
||||
//! Check wether all the instances in the occurrence path are placed.
|
||||
//! If at least, one is not and \c flags contains RoutingPad::ShowWarning,
|
||||
//! display a warning.
|
||||
//!
|
||||
//! When using a RoutingPad as a reference/anchor for other physical
|
||||
//! components (that is, the occurence entity is no longer a Plug),
|
||||
//! it is critical that it is in a truly meaningful position.
|
||||
//! And this is true \e only if all the instances in the occurrence's Path
|
||||
//! have a physical position (i.e. are placed).
|
||||
|
||||
//! \function Occurrence RoutingPad::getOccurrence() const;
|
||||
//! \return The Occurence on which we are anchored on. If a Component has been selected
|
||||
//! to be the anchor, it's an Occurrence on that component which is returned,
|
||||
|
@ -111,22 +132,10 @@
|
|||
//! getY() otherwise.
|
||||
|
||||
//! \function void RoutingPad::translate ( const DbU::Unit& dx, const DbU::Unit& dy );
|
||||
//! Translate the RoutingPad by <code>(dx,dy)</code>.
|
||||
|
||||
//! \function void RoutingPad::setOffset ( const DbU::Unit& dx, const DbU::Unit& dy );
|
||||
//! Sets the relative position of the RoutingPad from it's anchor to <code>(dx,dy)</code>.
|
||||
|
||||
//! \function void RoutingPad::setX ( const DbU::Unit& x );
|
||||
//! Sets the X coordinate of the RoutingPad.
|
||||
|
||||
//! \function void RoutingPad::setY ( const DbU::Unit& y );
|
||||
//! Sets the X coordinate of the RoutingPad.
|
||||
|
||||
//! \function void RoutingPad::setPosition ( const DbU::Unit& x, const DbU::Unit& y );
|
||||
//! Sets the absolute position of the RoutingPad to <code>(x,y)</code>.
|
||||
|
||||
//! \function void RoutingPad::setPosition ( const Point& position );
|
||||
//! Sets the absolute position of the RoutingPad to <code>position</code>.
|
||||
//! As the position of the RoutingPad is fixed relatively to the instance path
|
||||
//! and the anchoring component, it cannot be translated. Thus this method do
|
||||
//! nothing. The Routing pad will translate nevertheless with any translation
|
||||
//! of any of the instance in it's path or the anchor.
|
||||
|
||||
//! \function void RoutingPad::setExternalComponent ( Component* component );
|
||||
//! When the RoutingPad is anchored on a Plug, allow to set the \c component
|
||||
|
|
|
@ -0,0 +1,559 @@
|
|||
|
||||
|
||||
/*
|
||||
* +-----------------------------------------------------------------+
|
||||
* | 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: "Open Sans", Verdana, sans-serif;;
|
||||
}
|
||||
|
||||
body {
|
||||
color: black;
|
||||
background: white;
|
||||
background-color: white;
|
||||
background-position: top left;
|
||||
background-attachment: fixed;
|
||||
background-repeat: no-repeat;
|
||||
margin-top: 2em;
|
||||
width: 550pt;
|
||||
margin-right: auto;
|
||||
margin-left: auto;
|
||||
/*
|
||||
margin-right: 12%;
|
||||
margin-left: 12%;
|
||||
*/
|
||||
}
|
||||
|
||||
hr {
|
||||
height: 1px;
|
||||
border: 0;
|
||||
color: #004400;
|
||||
background-color: #004400;
|
||||
}
|
||||
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
/*font-family: "Liberation Serif", sans-serif;*/
|
||||
}
|
||||
|
||||
h1 { text-align: center; }
|
||||
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:normal; font-size: 170%; letter-spacing:0.2em; word-spacing:0.4em; }
|
||||
h2 { font-weight:normal; 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:link, a:active, a:visited {
|
||||
color: #09550B;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:hover, a:focus {
|
||||
color: #FF9900;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* +-----------------------------------------------------------------+
|
||||
* | Doxygen Specific Classes |
|
||||
* +-----------------------------------------------------------------+
|
||||
*/
|
||||
|
||||
|
||||
/* -------------------------------------------------------------------
|
||||
* Header & Footer Classes (customized top page navigation bar).
|
||||
*/
|
||||
|
||||
h1.header {
|
||||
font-size: 200%;
|
||||
/*font-family: times, verdana, sans-serif;*/
|
||||
}
|
||||
|
||||
center.header {
|
||||
background-color: #CCE6CA;
|
||||
}
|
||||
|
||||
table.header {
|
||||
/*width: 100%;*/
|
||||
/*background-color: #EEEEEE;*/
|
||||
background-color: #CCE6CA;
|
||||
}
|
||||
|
||||
table.header td {
|
||||
padding: 2px 14px;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
/*font-family: verdana, sans-serif;*/
|
||||
font-size: 110%;
|
||||
}
|
||||
|
||||
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 tr {
|
||||
border: 1px solid blue;
|
||||
}
|
||||
|
||||
table.classHierarchy td.normal {
|
||||
border: 1px solid #CCE6CA;
|
||||
width: 140pt;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
background-color: #CCE6CA;
|
||||
}
|
||||
|
||||
table.classHierarchy td.virtual {
|
||||
border: 1px solid black;
|
||||
width: 140pt;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
table.classHierarchy td.wnormal {
|
||||
border: 1px solid #CCE6CA;
|
||||
width: 240pt;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
background-color: #CCE6CA;
|
||||
}
|
||||
|
||||
table.classHierarchy td.wvirtual {
|
||||
border: 1px solid black;
|
||||
width: 240pt;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
div.ah {
|
||||
/*font-family: time;*/
|
||||
font-size: 250%;
|
||||
}
|
||||
|
||||
|
||||
/* -------------------------------------------------------------------
|
||||
* Quick Index Class (top page navigation bar).
|
||||
*/
|
||||
|
||||
div.qindex, div.nav {
|
||||
width: 100%-4px;
|
||||
/*background-color: #DADAEF;*/
|
||||
/*background-color: #eeeeff;*/
|
||||
/*background-color: #EEEEEE;*/
|
||||
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;
|
||||
}
|
||||
|
||||
a.qindex:hover {
|
||||
background-color: #ddddff;
|
||||
}
|
||||
|
||||
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%;
|
||||
}
|
||||
|
||||
|
||||
/* -------------------------------------------------------------------
|
||||
* Verbatim Source Code / Examples.
|
||||
*/
|
||||
|
||||
/* pre.fragment { background-color: #EEEEEE; } */
|
||||
|
||||
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.
|
||||
*/
|
||||
|
||||
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;
|
||||
border-left-width: 4px;
|
||||
border-left-style: solid;
|
||||
border-color: #008500;
|
||||
}
|
||||
|
||||
.memname {
|
||||
white-space: nowrap;
|
||||
padding-left: 5px;
|
||||
font-size: 105%;
|
||||
}
|
||||
|
||||
table.memname * {
|
||||
font-family: "Monospace";
|
||||
}
|
||||
|
||||
|
||||
.memdoc{
|
||||
padding-left: 5px;
|
||||
/*margin-top: -8px;*/
|
||||
border-left-width: 1px;
|
||||
border-left-style: solid;
|
||||
border-color: #008500;
|
||||
}
|
||||
|
||||
div.contents * table tr {
|
||||
padding: 3px 3px 3px 8px;
|
||||
}
|
||||
|
||||
.memItemLeft, .memItemRight, .memTemplItemLeft, .memTemplItemRight {
|
||||
/*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: "Monospace";
|
||||
}
|
||||
|
||||
.memTemplItemLeft, .memTemplItemRight {
|
||||
border-bottom-width: 2px;
|
||||
border-bottom-style: solid;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.memItemLeft { font-size: 11px; width: 35%; }
|
||||
.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;
|
||||
}
|
||||
|
|
@ -13,88 +13,91 @@
|
|||
* <b>translation</b> and an <b>orientation</b> defined by the
|
||||
* new enumeration <b>Transformation::Orientation</b> whose
|
||||
* different values are described in table below.
|
||||
* The <b>orientation</b> is done <em>before</em> the
|
||||
* <b>translation</b>, which is to say that the orientation is
|
||||
* applied in the coordinate system of the model.
|
||||
*
|
||||
* The transformation formula is given by:
|
||||
\f[
|
||||
\Large
|
||||
\left \{
|
||||
\begin{array}{r c l l l l l}
|
||||
x' & = & (a \times x) & + & (b \times y) & + & tx \\
|
||||
y' & = & (c \times x) & + & (d \times y) & + & ty
|
||||
\end{array}
|
||||
\right .
|
||||
\f]
|
||||
* where x and y are the
|
||||
* coordinates of any point, x' and y' the coordinates of the
|
||||
* transformed point, tx and ty the horizontal and vertical
|
||||
* components of the translation and where a, b, c and d are the
|
||||
* coefficients of the matrix associated to the orientation.
|
||||
* See Orientation for the value of a, b, c & d.
|
||||
*
|
||||
* \remark <b>Rotations are done counter clock wise</b> :
|
||||
* \remark <b>Rotations are done counter clock wise</b>
|
||||
*/
|
||||
|
||||
|
||||
/*! \class Transformation::Orientation
|
||||
* This enumeration defines the orientation associated to a
|
||||
* transformation object.
|
||||
* <TABLE>
|
||||
* <CAPTION>Orientation codes and associated transformation matrix</CAPTION>
|
||||
* <TR>
|
||||
* <TD>Name</TD><TD>Aspect</TD><TD>Code</TD><TD>Signification</TD><TD>a</TD><TD>b</TD><TD>c</TD><TD>d</TD>
|
||||
* </TR>
|
||||
* <TR>
|
||||
* <TD>ID</TD>
|
||||
* <TD>
|
||||
* \image html id.gif
|
||||
* </TD>
|
||||
* <TD>0</TD><TD>Identity</TD>
|
||||
* <TD>1</TD><TD>0</TD><TD>0</TD><TD>1</TD>
|
||||
* </TR>
|
||||
* <TR>
|
||||
* <TD>R1</TD>
|
||||
* <TD>
|
||||
* \image html r1.gif
|
||||
* </TD>
|
||||
* <TD>1</TD><TD>Simple rotation (90°)</TD>
|
||||
* <TD>0</TD><TD>-1</TD><TD>1</TD><TD>0</TD>
|
||||
* </TR>
|
||||
* <TR>
|
||||
* <TD>R2</TD>
|
||||
* <TD>
|
||||
* \image html r2.gif
|
||||
* </TD>
|
||||
* <TD>2</TD><TD>Double rotation (180°)</TD>
|
||||
* <TD>-1</TD><TD>0</TD><TD>0</TD><TD>-1</TD>
|
||||
* </TR>
|
||||
* <TR>
|
||||
* <TD>R3</TD>
|
||||
* <TD>
|
||||
* \image html r3.gif
|
||||
* </TD>
|
||||
* <TD>3</TD><TD>Triple rotation (270°)</TD>
|
||||
* <TD>0</TD><TD>1</TD><TD>-1</TD><TD>0</TD>
|
||||
* </TR>
|
||||
* <TR>
|
||||
* <TD>MX</TD>
|
||||
* <TD>
|
||||
* \image html mx.gif
|
||||
* </TD>
|
||||
* <TD>4</TD><TD>Horizontal symetry (Mirror X)</TD>
|
||||
* <TD>-1</TD><TD>0</TD><TD>0</TD><TD>1</TD>
|
||||
* </TR>
|
||||
* <TR>
|
||||
* <TD>XR</TD>
|
||||
* <TD>
|
||||
* \image html xr.gif
|
||||
* </TD>
|
||||
* <TD>5</TD><TD>Horizontal symetry followed by a 90° rotation</TD>
|
||||
* <TD>0</TD><TD>-1</TD><TD>-1</TD><TD>0</TD>
|
||||
* </TR>
|
||||
* <TR>
|
||||
* <TD>MY</TD>
|
||||
* <TD>
|
||||
* \image html my.gif
|
||||
* </TD>
|
||||
* <TD>6</TD><TD>Vertical symetry (Mirror Y)</TD>
|
||||
* <TD>1</TD><TD>0</TD><TD>0</TD><TD>-1</TD>
|
||||
* </TR>
|
||||
* <TR>
|
||||
* <TD>YR</TD>
|
||||
* <TD>
|
||||
* \image html yr.gif
|
||||
* </TD>
|
||||
* <TD>7</TD><TD>Vertical symetry followed by a 90° rotation</TD>
|
||||
* <TD>0</TD><TD>1</TD><TD>1</TD><TD>0</TD>
|
||||
* </TR>
|
||||
* </TABLE>
|
||||
*
|
||||
* The transformation formula is given by : x' = (a * x) + (b *
|
||||
* y) + tx y' = (c * x) + (d * y) + ty where x and y are the
|
||||
* <table>
|
||||
* <caption>Orientation codes and associated transformation matrix</caption>
|
||||
* <tr>
|
||||
* <td><center>Name</center>
|
||||
* <td><center>Aspect</center>
|
||||
* <td><center>Code</center>
|
||||
* <td><center>Signification</center>
|
||||
* <td width="6%"><center>a</center>
|
||||
* <td width="6%"><center>b</center>
|
||||
* <td width="6%"><center>c</center>
|
||||
* <td width="6%"><center>d</center>
|
||||
* <tr>
|
||||
* <td><center><b>ID</b></center> <td>\image html transf-ID.png ""
|
||||
* <td> <center><b>0</b></center> <td> Identity
|
||||
* <td> <center>1</center> <td> <center>0</center> <td> <center>0</center> <td> <center>1</center>
|
||||
* <tr>
|
||||
* <td><center><b>R1</b></center> <td>\image html transf-R1.png ""
|
||||
* <td> <center><b>1</b></center> <td> Simple rotation (90°)
|
||||
* <td> <center>0</center> <td> <center>-1</center> <td> <center>1</center> <td> <center>0</center>
|
||||
* <tr>
|
||||
* <td><center><b>R2</b></center> <td>\image html transf-R2.png ""
|
||||
* <td> <center><b>2</b></center> <td> Double rotation (180°)
|
||||
* <td> <center>-1</center> <td> <center>0</center> <td> <center>0</center> <td> <center>-1</center>
|
||||
* <tr>
|
||||
* <td><center><b>R3</b></center> <td>\image html transf-R3.png ""
|
||||
* <td><center><b>3</b></center><td>Triple rotation (270°)
|
||||
* <td><center>0</center><td><center>1</center><td><center>-1</center><td><center>0</center>
|
||||
* <tr>
|
||||
* <td><center><b>MX</b></center> <td>\image html transf-MX.png ""
|
||||
* <td> <center><b>4</b></center> <td>Horizontal symetry (Mirror X)
|
||||
* <td> <center>-1 </center><td> <center>0 </center><td> <center>0 </center><td> <center>1</center>
|
||||
* <tr>
|
||||
* <td><center><b>XR</b></center> <td>\image html transf-XR.png ""
|
||||
* <td><center><b>5</b></center><td>Horizontal symetry followed by a 90° rotation
|
||||
* <td> <center>0</center> <td> <center>-1</center> <td> <center>-1</center> <td> <center>0</center>
|
||||
* <tr>
|
||||
* <td><center><b>MY</b></center><td>\image html transf-MY.png ""
|
||||
* <td><center><b>6</b></center><td>Vertical symetry (Mirror Y)
|
||||
* <td> <center>1</center> <td> <center>0</center> <td> <center>0</center> <td> <center>-1</center>
|
||||
* <tr>
|
||||
* <td><center><b>YR</b></center> <td>\image html transf-YR.png ""
|
||||
* <td><center><b>7</b></center><td>Vertical symetry followed by a 90° rotation
|
||||
* <td> <center>0</center> <td> <center>1</center> <td> <center>1</center> <td> <center>0</center>
|
||||
* </table>
|
||||
*
|
||||
* The transformation formula is given by:
|
||||
\f[
|
||||
\Large
|
||||
\left \{
|
||||
\begin{array}{r c l l l l l}
|
||||
x' & = & (a \times x) & + & (b \times y) & + & tx \\
|
||||
y' & = & (c \times x) & + & (d \times y) & + & ty
|
||||
\end{array}
|
||||
\right .
|
||||
\f]
|
||||
* where x and y are the
|
||||
* coordinates of any point, x' and y' the coordinates of the
|
||||
* transformed point, tx and ty the horizontal and vertical
|
||||
* components of the translation and where a, b, c and d are the
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
|
||||
<title>Hurricane Documentation</title>
|
||||
<link href="ASIM.css" rel="stylesheet" type="text/css">
|
||||
<link href="SoC.css" rel="stylesheet" type="text/css">
|
||||
</head>
|
||||
<h1 id="pagetop" class="header">Hurricane Documentation</h1>
|
||||
<center class="header">
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
|
||||
<title>Hurricane Documentation</title>
|
||||
<link href="ASIM.css" rel="stylesheet" type="text/css">
|
||||
<link href="SoC.css" rel="stylesheet" type="text/css">
|
||||
</head>
|
||||
<h1 class="header">Hurricane Documentation</h1>
|
||||
<center class="header">
|
||||
|
|
|
@ -947,7 +947,7 @@ HTML_FOOTER = footer.html
|
|||
# the style sheet file to the HTML output directory, so don't put your own
|
||||
# stylesheet in the HTML output directory as well, or it will be erased!
|
||||
|
||||
HTML_STYLESHEET = ASIM.css
|
||||
HTML_STYLESHEET = SoC.css
|
||||
|
||||
# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
|
||||
# files or namespaces will be aligned in HTML using tables. If set to
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
|
||||
<title>Hurricane Documentation</title>
|
||||
<link href="ASIM.css" rel="stylesheet" type="text/css">
|
||||
<link href="SoC.css" rel="stylesheet" type="text/css">
|
||||
</head>
|
||||
<h1 id="pagetop" class="header">Hurricane Documentation</h1>
|
||||
<center class="header">
|
||||
|
|
|
@ -0,0 +1,559 @@
|
|||
|
||||
|
||||
/*
|
||||
* +-----------------------------------------------------------------+
|
||||
* | 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: "Open Sans", Verdana, sans-serif;;
|
||||
}
|
||||
|
||||
body {
|
||||
color: black;
|
||||
background: white;
|
||||
background-color: white;
|
||||
background-position: top left;
|
||||
background-attachment: fixed;
|
||||
background-repeat: no-repeat;
|
||||
margin-top: 2em;
|
||||
width: 550pt;
|
||||
margin-right: auto;
|
||||
margin-left: auto;
|
||||
/*
|
||||
margin-right: 12%;
|
||||
margin-left: 12%;
|
||||
*/
|
||||
}
|
||||
|
||||
hr {
|
||||
height: 1px;
|
||||
border: 0;
|
||||
color: #004400;
|
||||
background-color: #004400;
|
||||
}
|
||||
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
/*font-family: "Liberation Serif", sans-serif;*/
|
||||
}
|
||||
|
||||
h1 { text-align: center; }
|
||||
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:normal; font-size: 170%; letter-spacing:0.2em; word-spacing:0.4em; }
|
||||
h2 { font-weight:normal; 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:link, a:active, a:visited {
|
||||
color: #09550B;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:hover, a:focus {
|
||||
color: #FF9900;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* +-----------------------------------------------------------------+
|
||||
* | Doxygen Specific Classes |
|
||||
* +-----------------------------------------------------------------+
|
||||
*/
|
||||
|
||||
|
||||
/* -------------------------------------------------------------------
|
||||
* Header & Footer Classes (customized top page navigation bar).
|
||||
*/
|
||||
|
||||
h1.header {
|
||||
font-size: 200%;
|
||||
/*font-family: times, verdana, sans-serif;*/
|
||||
}
|
||||
|
||||
center.header {
|
||||
background-color: #CCE6CA;
|
||||
}
|
||||
|
||||
table.header {
|
||||
/*width: 100%;*/
|
||||
/*background-color: #EEEEEE;*/
|
||||
background-color: #CCE6CA;
|
||||
}
|
||||
|
||||
table.header td {
|
||||
padding: 2px 14px;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
/*font-family: verdana, sans-serif;*/
|
||||
font-size: 110%;
|
||||
}
|
||||
|
||||
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 tr {
|
||||
border: 1px solid blue;
|
||||
}
|
||||
|
||||
table.classHierarchy td.normal {
|
||||
border: 1px solid #CCE6CA;
|
||||
width: 140pt;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
background-color: #CCE6CA;
|
||||
}
|
||||
|
||||
table.classHierarchy td.virtual {
|
||||
border: 1px solid black;
|
||||
width: 140pt;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
table.classHierarchy td.wnormal {
|
||||
border: 1px solid #CCE6CA;
|
||||
width: 240pt;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
background-color: #CCE6CA;
|
||||
}
|
||||
|
||||
table.classHierarchy td.wvirtual {
|
||||
border: 1px solid black;
|
||||
width: 240pt;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
div.ah {
|
||||
/*font-family: time;*/
|
||||
font-size: 250%;
|
||||
}
|
||||
|
||||
|
||||
/* -------------------------------------------------------------------
|
||||
* Quick Index Class (top page navigation bar).
|
||||
*/
|
||||
|
||||
div.qindex, div.nav {
|
||||
width: 100%-4px;
|
||||
/*background-color: #DADAEF;*/
|
||||
/*background-color: #eeeeff;*/
|
||||
/*background-color: #EEEEEE;*/
|
||||
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;
|
||||
}
|
||||
|
||||
a.qindex:hover {
|
||||
background-color: #ddddff;
|
||||
}
|
||||
|
||||
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%;
|
||||
}
|
||||
|
||||
|
||||
/* -------------------------------------------------------------------
|
||||
* Verbatim Source Code / Examples.
|
||||
*/
|
||||
|
||||
/* pre.fragment { background-color: #EEEEEE; } */
|
||||
|
||||
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.
|
||||
*/
|
||||
|
||||
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;
|
||||
border-left-width: 4px;
|
||||
border-left-style: solid;
|
||||
border-color: #008500;
|
||||
}
|
||||
|
||||
.memname {
|
||||
white-space: nowrap;
|
||||
padding-left: 5px;
|
||||
font-size: 105%;
|
||||
}
|
||||
|
||||
table.memname * {
|
||||
font-family: "Monospace";
|
||||
}
|
||||
|
||||
|
||||
.memdoc{
|
||||
padding-left: 5px;
|
||||
/*margin-top: -8px;*/
|
||||
border-left-width: 1px;
|
||||
border-left-style: solid;
|
||||
border-color: #008500;
|
||||
}
|
||||
|
||||
div.contents * table tr {
|
||||
padding: 3px 3px 3px 8px;
|
||||
}
|
||||
|
||||
.memItemLeft, .memItemRight, .memTemplItemLeft, .memTemplItemRight {
|
||||
/*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: "Monospace";
|
||||
}
|
||||
|
||||
.memTemplItemLeft, .memTemplItemRight {
|
||||
border-bottom-width: 2px;
|
||||
border-bottom-style: solid;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.memItemLeft { font-size: 11px; width: 35%; }
|
||||
.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;
|
||||
}
|
||||
|
|
@ -4,7 +4,7 @@
|
|||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
|
||||
<title>Hurricane Documentation</title>
|
||||
<link href="ASIM.css" rel="stylesheet" type="text/css">
|
||||
<link href="SoC.css" rel="stylesheet" type="text/css">
|
||||
</head>
|
||||
<h1 class="header">Hurricane Documentation</h1>
|
||||
<center class="header">
|
||||
|
|
|
@ -820,7 +820,7 @@ HTML_FOOTER = footer.html
|
|||
# the style sheet file to the HTML output directory, so don't put your own
|
||||
# stylesheet in the HTML output directory as well, or it will be erased!
|
||||
|
||||
HTML_STYLESHEET = ASIM.css
|
||||
HTML_STYLESHEET = SoC.css
|
||||
|
||||
# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
|
||||
# files or namespaces will be aligned in HTML using tables. If set to
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
|
||||
<title>Hurricane Viewer Documentation</title>
|
||||
<link href="ASIM.css" rel="stylesheet" type="text/css">
|
||||
<link href="SoC.css" rel="stylesheet" type="text/css">
|
||||
</head>
|
||||
<h1 id="pagetop" class="header">Hurricane Viewer Documentation</h1>
|
||||
<center class="header">
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
|
||||
//#define TEST_INTRUSIVESET
|
||||
|
||||
#include "hurricane/SharedName.h"
|
||||
#include "hurricane/Cell.h"
|
||||
#include "hurricane/DataBase.h"
|
||||
#include "hurricane/Library.h"
|
||||
|
@ -215,7 +216,7 @@ void Cell::flattenNets(bool buildRings)
|
|||
}
|
||||
|
||||
forEach ( Occurrence, iplugOccurrence, hyperNet.getLeafPlugOccurrences() ) {
|
||||
currentRP = RoutingPad::create ( net, *iplugOccurrence, RoutingPad::BiggestArea );
|
||||
currentRP = RoutingPad::create ( net, *iplugOccurrence, RoutingPad::BiggestArea|RoutingPad::ShowWarning );
|
||||
currentRP->materialize ();
|
||||
if ( buildRings ) {
|
||||
if ( previousRP ) {
|
||||
|
@ -409,10 +410,10 @@ Name Cell::InstanceMap::_getKey(Instance* instance) const
|
|||
return instance->getName();
|
||||
}
|
||||
|
||||
unsigned Cell::InstanceMap::_getHashValue(Name name) const
|
||||
unsigned int Cell::InstanceMap::_getHashValue(Name name) const
|
||||
// *******************************************************
|
||||
{
|
||||
return ( (unsigned int)( (unsigned long)name._getSharedName() ) ) / 8;
|
||||
return name._getSharedName()->getId() / 8;
|
||||
}
|
||||
|
||||
Instance* Cell::InstanceMap::_getNextElement(Instance* instance) const
|
||||
|
@ -442,7 +443,7 @@ Cell::SlaveInstanceSet::SlaveInstanceSet()
|
|||
unsigned Cell::SlaveInstanceSet::_getHashValue(Instance* slaveInstance) const
|
||||
// **************************************************************************
|
||||
{
|
||||
return ( (unsigned int)( (unsigned long)slaveInstance ) ) / 8;
|
||||
return slaveInstance->getId() / 8;
|
||||
}
|
||||
|
||||
Instance* Cell::SlaveInstanceSet::_getNextElement(Instance* slaveInstance) const
|
||||
|
@ -478,7 +479,7 @@ Name Cell::NetMap::_getKey(Net* net) const
|
|||
unsigned Cell::NetMap::_getHashValue(Name name) const
|
||||
// **************************************************
|
||||
{
|
||||
return ( (unsigned int)( (unsigned long)name._getSharedName() ) ) / 8;
|
||||
return (unsigned int)name._getSharedName()->getId() / 8;
|
||||
}
|
||||
|
||||
Net* Cell::NetMap::_getNextElement(Net* net) const
|
||||
|
@ -513,7 +514,7 @@ Name Cell::PinMap::_getKey(Pin* pin) const
|
|||
unsigned Cell::PinMap::_getHashValue(Name name) const
|
||||
// **************************************************
|
||||
{
|
||||
return ( (unsigned int)( (unsigned long)name._getSharedName() ) ) / 8;
|
||||
return (unsigned int)name._getSharedName()->getId() / 8;
|
||||
}
|
||||
|
||||
Pin* Cell::PinMap::_getNextElement(Pin* pin) const
|
||||
|
@ -548,7 +549,7 @@ const Layer* Cell::SliceMap::_getKey(Slice* slice) const
|
|||
unsigned Cell::SliceMap::_getHashValue(const Layer* layer) const
|
||||
// *************************************************************
|
||||
{
|
||||
return ( (unsigned int)( (unsigned long)layer ) ) / 8;
|
||||
return (unsigned int)layer->getMask() / 8;
|
||||
}
|
||||
|
||||
Slice* Cell::SliceMap::_getNextElement(Slice* slice) const
|
||||
|
@ -578,7 +579,7 @@ Cell::MarkerSet::MarkerSet()
|
|||
unsigned Cell::MarkerSet::_getHashValue(Marker* marker) const
|
||||
// **********************************************************
|
||||
{
|
||||
return ( (unsigned int)( (unsigned long)marker ) ) / 8;
|
||||
return (unsigned int)marker->getId() / 8;
|
||||
}
|
||||
|
||||
Marker* Cell::MarkerSet::_getNextElement(Marker* marker) const
|
||||
|
|
|
@ -17,6 +17,8 @@
|
|||
// not, see <http://www.gnu.org/licenses/>.
|
||||
// ****************************************************************************************************
|
||||
|
||||
#include <limits>
|
||||
#include "hurricane/Error.h"
|
||||
#include "hurricane/Entity.h"
|
||||
#include "hurricane/Quark.h"
|
||||
#include "hurricane/Cell.h"
|
||||
|
@ -31,11 +33,19 @@ namespace Hurricane {
|
|||
// Entity implementation
|
||||
// ****************************************************************************************************
|
||||
|
||||
Entity::Entity()
|
||||
// *************
|
||||
: Inherit()
|
||||
{
|
||||
}
|
||||
|
||||
unsigned int Entity::_idCounter = 0;
|
||||
|
||||
|
||||
Entity::Entity()
|
||||
: Inherit()
|
||||
, _id(_idCounter++)
|
||||
{
|
||||
if (_idCounter == std::numeric_limits<unsigned int>::max()) {
|
||||
throw Error( "Entity::Entity(): Identifier counter has reached it's limit (%d bits)."
|
||||
, std::numeric_limits<unsigned int>::digits );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Entity::_preDestroy()
|
||||
|
@ -85,7 +95,9 @@ Entity::Entity()
|
|||
string Entity::_getString() const
|
||||
// ******************************
|
||||
{
|
||||
return Inherit::_getString();
|
||||
string s = Inherit::_getString();
|
||||
s.insert(1, "id:"+getString(_id)+" ");
|
||||
return s;
|
||||
}
|
||||
|
||||
Record* Entity::_getRecord() const
|
||||
|
@ -93,6 +105,7 @@ Record* Entity::_getRecord() const
|
|||
{
|
||||
Record* record = Inherit::_getRecord();
|
||||
if (record) {
|
||||
record->add(getSlot("_id", _id));
|
||||
Occurrence occurrence = Occurrence(this);
|
||||
if (occurrence.hasProperty())
|
||||
record->add(getSlot("Occurrence", occurrence));
|
||||
|
|
|
@ -19,12 +19,7 @@
|
|||
// License along with Hurricane. If not, see
|
||||
// <http://www.gnu.org/licenses/>.
|
||||
//
|
||||
// ===================================================================
|
||||
//
|
||||
// $Id$
|
||||
//
|
||||
// x-----------------------------------------------------------------x
|
||||
// | |
|
||||
// +-----------------------------------------------------------------+
|
||||
// | H U R R I C A N E |
|
||||
// | V L S I B a c k e n d D a t a - B a s e |
|
||||
// | |
|
||||
|
@ -32,10 +27,7 @@
|
|||
// | E-mail : Jean-Paul.Chaput@lip6.fr |
|
||||
// | =============================================================== |
|
||||
// | C++ Module : "./Error.cpp" |
|
||||
// | *************************************************************** |
|
||||
// | U p d a t e s |
|
||||
// | |
|
||||
// x-----------------------------------------------------------------x
|
||||
// +-----------------------------------------------------------------+
|
||||
|
||||
|
||||
#include <execinfo.h>
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
// not, see <http://www.gnu.org/licenses/>.
|
||||
// ****************************************************************************************************
|
||||
|
||||
#include "hurricane/SharedPath.h"
|
||||
#include "hurricane/Instance.h"
|
||||
#include "hurricane/Cell.h"
|
||||
#include "hurricane/Net.h"
|
||||
|
@ -639,7 +640,7 @@ const Net* Instance::PlugMap::_getKey(Plug* plug) const
|
|||
unsigned Instance::PlugMap::_getHashValue(const Net* masterNet) const
|
||||
// ******************************************************************
|
||||
{
|
||||
return ( (unsigned int)( (unsigned long)masterNet ) ) / 8;
|
||||
return masterNet->getId() / 8;
|
||||
}
|
||||
|
||||
Plug* Instance::PlugMap::_getNextElement(Plug* plug) const
|
||||
|
@ -675,7 +676,7 @@ const SharedPath* Instance::SharedPathMap::_getKey(SharedPath* sharedPath) const
|
|||
unsigned Instance::SharedPathMap::_getHashValue(const SharedPath* tailSharedPath) const
|
||||
// ************************************************************************************
|
||||
{
|
||||
return ( (unsigned int)( (unsigned long)tailSharedPath ) ) / 8;
|
||||
return (tailSharedPath) ? (tailSharedPath->getId()/8) : 0;
|
||||
}
|
||||
|
||||
SharedPath* Instance::SharedPathMap::_getNextElement(SharedPath* sharedPath) const
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
// not, see <http://www.gnu.org/licenses/>.
|
||||
// ****************************************************************************************************
|
||||
|
||||
#include "hurricane/SharedName.h"
|
||||
#include "hurricane/Library.h"
|
||||
#include "hurricane/DataBase.h"
|
||||
#include "hurricane/Cell.h"
|
||||
|
@ -163,7 +164,7 @@ Name Library::LibraryMap::_getKey(Library* library) const
|
|||
unsigned Library::LibraryMap::_getHashValue(Name name) const
|
||||
// *********************************************************
|
||||
{
|
||||
return ( (unsigned int)( (unsigned long)name._getSharedName() ) ) / 8;
|
||||
return name._getSharedName()->getId() / 8;
|
||||
}
|
||||
|
||||
Library* Library::LibraryMap::_getNextElement(Library* library) const
|
||||
|
@ -199,7 +200,7 @@ Name Library::CellMap::_getKey(Cell* cell) const
|
|||
unsigned Library::CellMap::_getHashValue(Name name) const
|
||||
// ******************************************************
|
||||
{
|
||||
return ( (unsigned int)( (unsigned long)name._getSharedName() ) ) / 8;
|
||||
return name._getSharedName()->getId() / 8;
|
||||
}
|
||||
|
||||
Cell* Library::CellMap::_getNextElement(Cell* cell) const
|
||||
|
|
|
@ -770,7 +770,7 @@ Net::ComponentSet::ComponentSet()
|
|||
unsigned Net::ComponentSet::_getHashValue(Component* component) const
|
||||
// ******************************************************************
|
||||
{
|
||||
return ( (unsigned int)( (unsigned long)component ) ) / 8;
|
||||
return component->getId() / 8;
|
||||
}
|
||||
|
||||
Component* Net::ComponentSet::_getNextElement(Component* component) const
|
||||
|
@ -800,7 +800,7 @@ Net::RubberSet::RubberSet()
|
|||
unsigned Net::RubberSet::_getHashValue(Rubber* rubber) const
|
||||
// *********************************************************
|
||||
{
|
||||
return ( (unsigned int)( (unsigned long)rubber ) ) / 8;
|
||||
return rubber->getId() / 8;
|
||||
}
|
||||
|
||||
Rubber* Net::RubberSet::_getNextElement(Rubber* rubber) const
|
||||
|
|
|
@ -37,7 +37,7 @@ Pin::Pin(Net* net, const Name& name, const AccessDirection& accessDirection, con
|
|||
_nextOfCellPinMap(NULL)
|
||||
{
|
||||
if (getCell()->getPin(name))
|
||||
throw Error("Can't create " + _TName("Pin") + " : already exists");
|
||||
throw Error("Can't create " + _TName("Pin") + " <" + getString(name) + "> : already exists");
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -464,7 +464,7 @@ void QuadTree::_explode()
|
|||
_urChild = new QuadTree(this);
|
||||
_llChild = new QuadTree(this);
|
||||
_lrChild = new QuadTree(this);
|
||||
set<Go*> goSet;
|
||||
set<Go*,Entity::CompareById> goSet;
|
||||
for_each_go(go, _goSet.getElements()) {
|
||||
_goSet._remove(go);
|
||||
go->_quadTree = NULL;
|
||||
|
@ -539,7 +539,7 @@ QuadTree::GoSet::GoSet()
|
|||
unsigned QuadTree::GoSet::_getHashValue(Go* go) const
|
||||
// **************************************************
|
||||
{
|
||||
return ( (unsigned int)( (unsigned long)go ) ) / 8;
|
||||
return go->getId() / 8;
|
||||
}
|
||||
|
||||
Go* QuadTree::GoSet::_getNextElement(Go* go) const
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
// -*- C++ -*-
|
||||
//
|
||||
// Copyright (c) BULL S.A. 2000-2010, All Rights Reserved
|
||||
// Copyright (c) BULL S.A. 2000-2013, All Rights Reserved
|
||||
//
|
||||
// This file is part of Hurricane.
|
||||
//
|
||||
|
@ -23,8 +23,7 @@
|
|||
//
|
||||
// $Id$
|
||||
//
|
||||
// x-----------------------------------------------------------------x
|
||||
// | |
|
||||
// +-----------------------------------------------------------------+
|
||||
// | H U R R I C A N E |
|
||||
// | V L S I B a c k e n d D a t a - B a s e |
|
||||
// | |
|
||||
|
@ -32,12 +31,10 @@
|
|||
// | E-mail : Jean-Paul.Chaput@lip6.fr |
|
||||
// | =============================================================== |
|
||||
// | C++ Header : "./RoutingPad.h" |
|
||||
// | *************************************************************** |
|
||||
// | U p d a t e s |
|
||||
// | |
|
||||
// x-----------------------------------------------------------------x
|
||||
// +-----------------------------------------------------------------+
|
||||
|
||||
|
||||
#include <sstream>
|
||||
#include "hurricane/Net.h"
|
||||
#include "hurricane/NetExternalComponents.h"
|
||||
#include "hurricane/Layer.h"
|
||||
|
@ -48,17 +45,18 @@
|
|||
#include "hurricane/Vertical.h"
|
||||
#include "hurricane/Cell.h"
|
||||
#include "hurricane/Instance.h"
|
||||
#include "hurricane/Warning.h"
|
||||
#include "hurricane/Error.h"
|
||||
#include "hurricane/RoutingPad.h"
|
||||
|
||||
|
||||
namespace Hurricane {
|
||||
|
||||
using std::ostringstream;
|
||||
|
||||
RoutingPad::RoutingPad ( Net* net, const Point& p, Occurrence occurrence )
|
||||
|
||||
RoutingPad::RoutingPad ( Net* net, Occurrence occurrence )
|
||||
: Inherit (net)
|
||||
, _x (p.getX())
|
||||
, _y (p.getY())
|
||||
, _occurrence(occurrence)
|
||||
{ }
|
||||
|
||||
|
@ -71,23 +69,23 @@ namespace Hurricane {
|
|||
Plug* plug = NULL;
|
||||
Pin* pin = NULL;
|
||||
Contact* contact = NULL;
|
||||
Point position;
|
||||
|
||||
if ( (plug = dynamic_cast<Plug*>(occurrence.getEntity()) ) ) {
|
||||
position = occurrence.getPath().getTransformation().getPoint( plug->getPosition() );
|
||||
} else if ( (pin = dynamic_cast<Pin*>(occurrence.getEntity()) ) ) {
|
||||
position = occurrence.getPath().getTransformation().getPoint( pin->getPosition() );
|
||||
} else if ( (contact = dynamic_cast<Contact*>(occurrence.getEntity()) ) ) {
|
||||
position = occurrence.getPath().getTransformation().getPoint( contact->getPosition() );
|
||||
if ( (plug = dynamic_cast<Plug*>(occurrence.getEntity()) ) == NULL) {
|
||||
if ( (pin = dynamic_cast<Pin*>(occurrence.getEntity()) ) == NULL) {
|
||||
contact = dynamic_cast<Contact*>(occurrence.getEntity());
|
||||
}
|
||||
}
|
||||
|
||||
if ( (not plug) and (not pin) and (not contact) )
|
||||
throw Error ("Can't create RoutingPad : Plug Pin, or Contact Occurrence *required*");
|
||||
throw Error ("Can't create RoutingPad : Plug, Pin, or Contact Occurrence *required*");
|
||||
|
||||
RoutingPad* routingPad = new RoutingPad(net, position, occurrence);
|
||||
RoutingPad* routingPad = new RoutingPad( net, occurrence );
|
||||
routingPad->_postCreate();
|
||||
|
||||
if ( plug and (flags & ComponentSelection) ) routingPad->setOnBestComponent(flags);
|
||||
if ( plug and (flags & ComponentSelection) )
|
||||
routingPad->setOnBestComponent( flags );
|
||||
if (not plug)
|
||||
routingPad->isPlacedOccurrence( flags );
|
||||
|
||||
return routingPad;
|
||||
}
|
||||
|
@ -117,8 +115,33 @@ namespace Hurricane {
|
|||
}
|
||||
|
||||
|
||||
DbU::Unit RoutingPad::getX () const { return _x; }
|
||||
DbU::Unit RoutingPad::getY () const { return _y; }
|
||||
bool RoutingPad::isPlacedOccurrence ( unsigned int flags ) const
|
||||
{
|
||||
vector<Instance*> unplaceds;
|
||||
forEach( Instance*, iinstance, _occurrence.getPath().getInstances() ) {
|
||||
if (iinstance->getPlacementStatus() == Instance::PlacementStatus::UNPLACED) {
|
||||
unplaceds.push_back( *iinstance );
|
||||
}
|
||||
}
|
||||
|
||||
if (not unplaceds.empty() and (flags & ShowWarning)) {
|
||||
ostringstream message;
|
||||
message << "There are unplaced(s) instances in " << this << ":";
|
||||
for ( size_t i=0 ; i<unplaceds.size() ; ++i ) {
|
||||
message << "\n * Instance <" << unplaceds[i]->getName() << ":"
|
||||
<< unplaceds[i]->getMasterCell()->getName() << "> in Cell <"
|
||||
<< unplaceds[i]->getCell()->getName() << ">";
|
||||
;
|
||||
}
|
||||
cerr << Warning( message.str() ) << endl;;
|
||||
}
|
||||
|
||||
return not unplaceds.empty();
|
||||
}
|
||||
|
||||
|
||||
DbU::Unit RoutingPad::getX () const { return getPosition().getX(); }
|
||||
DbU::Unit RoutingPad::getY () const { return getPosition().getY(); }
|
||||
DbU::Unit RoutingPad::getSourceX () const { return getSourcePosition().getX(); }
|
||||
DbU::Unit RoutingPad::getSourceY () const { return getSourcePosition().getY(); }
|
||||
DbU::Unit RoutingPad::getTargetX () const { return getTargetPosition().getX(); }
|
||||
|
@ -148,17 +171,28 @@ namespace Hurricane {
|
|||
const Layer* RoutingPad::getLayer () const
|
||||
{
|
||||
Component* component = _getEntityAsComponent();
|
||||
if ( component ) return component->getLayer ();
|
||||
if (component) return component->getLayer ();
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
Point RoutingPad::getPosition () const
|
||||
{
|
||||
Component* component = _getEntityAsComponent();
|
||||
if (component)
|
||||
return _occurrence.getPath().getTransformation().getPoint( component->getCenter() );
|
||||
|
||||
return Point();
|
||||
}
|
||||
|
||||
|
||||
Point RoutingPad::getSourcePosition () const
|
||||
{
|
||||
Segment* segment = _getEntityAsSegment();
|
||||
if ( segment )
|
||||
if ( segment ) {
|
||||
return _occurrence.getPath().getTransformation().getPoint ( segment->getSourcePosition() );
|
||||
}
|
||||
|
||||
return getPosition();
|
||||
}
|
||||
|
@ -186,25 +220,7 @@ namespace Hurricane {
|
|||
|
||||
void RoutingPad::translate(const DbU::Unit& dx, const DbU::Unit& dy)
|
||||
{
|
||||
if ( (dx != 0) or (dy != 0) ) {
|
||||
invalidate(true);
|
||||
_x += dx;
|
||||
_y += dy;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void RoutingPad::setX ( const DbU::Unit& x ) { setPosition(x, getY()); }
|
||||
void RoutingPad::setY ( const DbU::Unit& y ) { setPosition(getX(), y); }
|
||||
void RoutingPad::setPosition ( const DbU::Unit& x, const DbU::Unit& y ) { setOffset(x, y); }
|
||||
void RoutingPad::setPosition ( const Point& position) { setPosition(position.getX(), position.getY()); }
|
||||
|
||||
|
||||
void RoutingPad::setOffset ( const DbU::Unit& x, const DbU::Unit& y )
|
||||
{
|
||||
invalidate(true);
|
||||
_x = x;
|
||||
_y = y;
|
||||
// Does nothing. The position is fixed and relative to the instance path.
|
||||
}
|
||||
|
||||
|
||||
|
@ -237,8 +253,6 @@ namespace Hurricane {
|
|||
{
|
||||
Record* record = Inherit::_getRecord();
|
||||
if ( record ) {
|
||||
record->add(getSlot("_x" , &_x ));
|
||||
record->add(getSlot("_y" , &_y ));
|
||||
record->add(getSlot("_occurrence",_occurrence));
|
||||
}
|
||||
return record;
|
||||
|
@ -275,21 +289,6 @@ namespace Hurricane {
|
|||
_occurrence.getMasterCell()->_removeSlaveEntity(_occurrence.getEntity(),this);
|
||||
_occurrence = Occurrence(component,Path(plugOccurrence.getPath(),plug->getInstance()));
|
||||
|
||||
Point position = _occurrence.getPath().getTransformation().getPoint ( component->getPosition() );
|
||||
Horizontal* horizontal = dynamic_cast<Horizontal*>(component);
|
||||
|
||||
if ( horizontal ) {
|
||||
setX ( 0 );
|
||||
setY ( position.getY() );
|
||||
} else {
|
||||
Vertical* vertical = dynamic_cast<Vertical*>(component);
|
||||
if ( vertical ) {
|
||||
setX ( position.getX() );
|
||||
setY ( 0 );
|
||||
} else
|
||||
setPosition ( position );
|
||||
}
|
||||
|
||||
_occurrence.getMasterCell()->_addSlaveEntity(_occurrence.getEntity(),this);
|
||||
|
||||
if (!isMaterialized()) materialize();
|
||||
|
@ -320,8 +319,6 @@ namespace Hurricane {
|
|||
if (isMaterialized()) unmaterialize();
|
||||
|
||||
_occurrence=getPlugOccurrence();
|
||||
setPosition ( _occurrence.getPath().getTransformation().getPoint
|
||||
( dynamic_cast<Component*>(_occurrence.getEntity())->getPosition() ) );
|
||||
}
|
||||
|
||||
|
||||
|
@ -359,6 +356,7 @@ namespace Hurricane {
|
|||
,getString(plug->getInstance ()).c_str() );
|
||||
|
||||
setExternalComponent ( bestComponent );
|
||||
if (flags & ShowWarning) isPlacedOccurrence( flags );
|
||||
|
||||
return bestComponent;
|
||||
}
|
||||
|
|
|
@ -17,6 +17,8 @@
|
|||
// not, see <http://www.gnu.org/licenses/>.
|
||||
// ****************************************************************************************************
|
||||
|
||||
#include <limits>
|
||||
#include "hurricane/Error.h"
|
||||
#include "hurricane/SharedName.h"
|
||||
|
||||
namespace Hurricane {
|
||||
|
@ -27,17 +29,25 @@ namespace Hurricane {
|
|||
// SharedName implementation
|
||||
// ****************************************************************************************************
|
||||
|
||||
SharedName::SharedNameMap* SharedName::_SHARED_NAME_MAP = NULL;
|
||||
SharedName::SharedNameMap* SharedName::_SHARED_NAME_MAP = NULL;
|
||||
unsigned int SharedName::_idCounter = 0;
|
||||
|
||||
SharedName::SharedName(const string& s)
|
||||
// ************************************
|
||||
: _count(0),
|
||||
_string(s)
|
||||
|
||||
SharedName::SharedName ( const string& name )
|
||||
: _id (_idCounter++)
|
||||
, _count (0)
|
||||
, _string(name)
|
||||
{
|
||||
if (!_SHARED_NAME_MAP) _SHARED_NAME_MAP = new SharedNameMap();
|
||||
(*_SHARED_NAME_MAP)[&_string] = this;
|
||||
|
||||
if (_idCounter == std::numeric_limits<unsigned int>::max()) {
|
||||
throw Error( "SharedName::SharedName(): Identifier counter has reached it's limit (%d bits)."
|
||||
, std::numeric_limits<unsigned int>::digits );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
SharedName::~SharedName()
|
||||
// **********************
|
||||
{
|
||||
|
@ -66,8 +76,8 @@ Record* SharedName::_getRecord() const
|
|||
// *****************************
|
||||
{
|
||||
Record* record = new Record(getString(this));
|
||||
record->add(getSlot("Count", &_count));
|
||||
record->add(getSlot("String", &_string));
|
||||
record->add(getSlot("_count", &_count));
|
||||
record->add(getSlot("_string", &_string));
|
||||
return record;
|
||||
}
|
||||
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
// not, see <http://www.gnu.org/licenses/>.
|
||||
// ****************************************************************************************************
|
||||
|
||||
#include <limits>
|
||||
#include "hurricane/SharedPath.h"
|
||||
#include "hurricane/Instance.h"
|
||||
#include "hurricane/Cell.h"
|
||||
|
@ -30,6 +31,7 @@ namespace Hurricane {
|
|||
// SharedPath_Instances declaration
|
||||
// ****************************************************************************************************
|
||||
|
||||
|
||||
class SharedPath_Instances : public Collection<Instance*> {
|
||||
// ******************************************************
|
||||
|
||||
|
@ -96,14 +98,22 @@ class SharedPath_Instances : public Collection<Instance*> {
|
|||
// ****************************************************************************************************
|
||||
|
||||
static char NAME_SEPARATOR = '.';
|
||||
unsigned int SharedPath::_idCounter = 0;
|
||||
|
||||
|
||||
SharedPath::SharedPath(Instance* headInstance, SharedPath* tailSharedPath)
|
||||
// ***********************************************************************
|
||||
: _headInstance(headInstance),
|
||||
: _id(_idCounter++),
|
||||
_headInstance(headInstance),
|
||||
_tailSharedPath(tailSharedPath),
|
||||
_quarkMap(),
|
||||
_nextOfInstanceSharedPathMap(NULL)
|
||||
{
|
||||
if (_idCounter == std::numeric_limits<unsigned int>::max()) {
|
||||
throw Error( "SharedName::SharedName(): Identifier counter has reached it's limit (%d bits)."
|
||||
, std::numeric_limits<unsigned int>::digits );
|
||||
}
|
||||
|
||||
if (!_headInstance)
|
||||
throw Error("Can't create " + _TName("SharedPath") + " : null head instance");
|
||||
|
||||
|
@ -252,7 +262,7 @@ const Entity* SharedPath::QuarkMap::_getKey(Quark* quark) const
|
|||
unsigned SharedPath::QuarkMap::_getHashValue(const Entity* entity) const
|
||||
// *********************************************************************
|
||||
{
|
||||
return ( (unsigned int)( (unsigned long)entity ) ) / 8;
|
||||
return entity->getId() / 8;
|
||||
}
|
||||
|
||||
Quark* SharedPath::QuarkMap::_getNextElement(Quark* quark) const
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
// not, see <http://www.gnu.org/licenses/>.
|
||||
// ****************************************************************************************************
|
||||
|
||||
#include "hurricane/SharedName.h"
|
||||
#include "hurricane/Technology.h"
|
||||
#include "hurricane/DataBase.h"
|
||||
#include "hurricane/Layer.h"
|
||||
|
@ -411,7 +412,7 @@ Name Technology::LayerMap::_getKey(Layer* layer) const
|
|||
unsigned Technology::LayerMap::_getHashValue(Name name) const
|
||||
// **********************************************************
|
||||
{
|
||||
return ( (unsigned int)( (unsigned long)name._getSharedName() ) ) / 8;
|
||||
return name._getSharedName()->getId() / 8;
|
||||
}
|
||||
|
||||
Layer* Technology::LayerMap::_getNextElement(Layer* layer) const
|
||||
|
|
|
@ -199,10 +199,10 @@ namespace Hurricane {
|
|||
string Timer::getStringMemory ( size_t size ) {
|
||||
string s;
|
||||
|
||||
if ( size >> 30 ) s = getString(size>>30) + "Mo";
|
||||
else if ( size >> 20 ) s = getString(size>>20) + "Mo";
|
||||
else if ( size >> 10 ) s = getString(size>>10) + "Ko";
|
||||
else s = getString(size) + " octets";
|
||||
if ( size >> 30 ) s = getString(size>>30) + "Mb";
|
||||
else if ( size >> 20 ) s = getString(size>>20) + "Mb";
|
||||
else if ( size >> 10 ) s = getString(size>>10) + "Kb";
|
||||
else s = getString(size) + " bytes";
|
||||
|
||||
return s;
|
||||
}
|
||||
|
|
|
@ -838,7 +838,7 @@ class ForEachIterator {
|
|||
inline Element operator-> ();
|
||||
inline ForEachIterator& operator++ (int);
|
||||
public:
|
||||
GenericCollection<Element>& collection;
|
||||
GenericCollection<Element> collection;
|
||||
GenericLocator<Element> locator;
|
||||
Element element;
|
||||
};
|
||||
|
|
|
@ -20,58 +20,53 @@
|
|||
#ifndef HURRICANE_ENTITY
|
||||
#define HURRICANE_ENTITY
|
||||
|
||||
#include <functional>
|
||||
#include "hurricane/DBo.h"
|
||||
#include "hurricane/Entities.h"
|
||||
#include "hurricane/Box.h"
|
||||
|
||||
namespace Hurricane {
|
||||
|
||||
class Cell;
|
||||
class Quark;
|
||||
class SharedPath;
|
||||
class Cell;
|
||||
class Quark;
|
||||
class SharedPath;
|
||||
|
||||
|
||||
|
||||
// ****************************************************************************************************
|
||||
// Entity declaration
|
||||
// ****************************************************************************************************
|
||||
|
||||
class Entity : public DBo {
|
||||
// **********************
|
||||
|
||||
# if !defined(__DOXYGEN_PROCESSOR__)
|
||||
|
||||
// Types
|
||||
// *****
|
||||
|
||||
public: typedef DBo Inherit;
|
||||
|
||||
// Constructors
|
||||
// ************
|
||||
|
||||
protected: Entity();
|
||||
|
||||
// Others
|
||||
// ******
|
||||
|
||||
protected: virtual void _preDestroy();
|
||||
|
||||
public: virtual string _getString() const;
|
||||
public: virtual Record* _getRecord() const;
|
||||
public: Quark* _getQuark(SharedPath* sharedPath = NULL) const;
|
||||
|
||||
# endif
|
||||
|
||||
// Accessors
|
||||
// *********
|
||||
|
||||
public: virtual Cell* getCell() const = 0;
|
||||
public: virtual Box getBoundingBox() const = 0;
|
||||
|
||||
};
|
||||
// -------------------------------------------------------------------
|
||||
// Class : "Hurricane::Entity".
|
||||
|
||||
|
||||
} // End of Hurricane namespace.
|
||||
class Entity : public DBo
|
||||
{
|
||||
public:
|
||||
typedef DBo Inherit;
|
||||
public:
|
||||
inline unsigned int getId () const;
|
||||
virtual Cell* getCell () const = 0;
|
||||
virtual Box getBoundingBox() const = 0;
|
||||
virtual string _getString () const;
|
||||
virtual Record* _getRecord () const;
|
||||
Quark* _getQuark ( SharedPath* sharedPath = NULL ) const;
|
||||
protected:
|
||||
Entity ();
|
||||
virtual void _preDestroy ();
|
||||
private:
|
||||
static unsigned int _idCounter;
|
||||
unsigned int _id;
|
||||
|
||||
public:
|
||||
struct CompareById : public std::binary_function<const Entity*,const Entity*,bool> {
|
||||
inline bool operator() ( const Entity* lhs, const Entity* rhs ) const;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
inline unsigned int Entity::getId () const { return _id; }
|
||||
inline bool Entity::CompareById::operator() ( const Entity* lhs, const Entity* rhs ) const
|
||||
{ return ((lhs)?lhs->getId():0) < ((rhs)?rhs->getId():0); }
|
||||
|
||||
|
||||
} // Hurricane namespace.
|
||||
|
||||
|
||||
INSPECTOR_P_SUPPORT(Hurricane::Entity);
|
||||
|
@ -79,7 +74,6 @@ INSPECTOR_P_SUPPORT(Hurricane::Entity);
|
|||
|
||||
#endif // HURRICANE_ENTITY
|
||||
|
||||
|
||||
// ****************************************************************************************************
|
||||
// Copyright (c) BULL S.A. 2000-2009, All Rights Reserved
|
||||
// ****************************************************************************************************
|
||||
|
|
|
@ -95,10 +95,6 @@ namespace Hurricane {
|
|||
inline void _setExtractMask ( const Mask& extractMask );
|
||||
inline void _setNextOfTechnologyLayerMap ( Layer* layer );
|
||||
virtual void _onDbuChange ( float scale );
|
||||
public:
|
||||
struct MaskCompare {
|
||||
inline bool operator () ( const Layer*, const Layer* ) const;
|
||||
};
|
||||
|
||||
private:
|
||||
// Internal: Attributes
|
||||
|
@ -121,6 +117,11 @@ namespace Hurricane {
|
|||
);
|
||||
virtual void _postCreate ();
|
||||
virtual void _preDestroy ();
|
||||
|
||||
public:
|
||||
struct CompareByMask : public binary_function<const Layer*,const Layer*,bool> {
|
||||
inline bool operator() ( const Layer* lhs, const Layer* rhs ) const;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
|
@ -140,8 +141,8 @@ namespace Hurricane {
|
|||
inline void Layer::_setExtractMask ( const Mask& extractMask ) { _extractMask = extractMask; }
|
||||
inline void Layer::_setNextOfTechnologyLayerMap ( Layer* layer ) { _nextOfTechnologyLayerMap = layer; }
|
||||
|
||||
inline bool Layer::MaskCompare::operator () ( const Layer* layer1, const Layer* layer2 ) const
|
||||
{ return layer1->getMask() < layer2->getMask(); }
|
||||
inline bool Layer::CompareByMask::operator() ( const Layer* lhs, const Layer* rhs ) const
|
||||
{ return (lhs?lhs->getMask():Layer::Mask()) < (rhs?rhs->getMask():Layer::Mask()); }
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
#ifndef HURRICANE_NET
|
||||
#define HURRICANE_NET
|
||||
|
||||
#include <functional>
|
||||
#include "hurricane/Entity.h"
|
||||
#include "hurricane/Nets.h"
|
||||
#include "hurricane/Component.h"
|
||||
|
@ -233,10 +234,6 @@ class Net : public Entity {
|
|||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
} // End of Hurricane namespace.
|
||||
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
// -*- C++ -*-
|
||||
//
|
||||
// Copyright (c) BULL S.A. 2000-2010, All Rights Reserved
|
||||
// Copyright (c) BULL S.A. 2000-2013, All Rights Reserved
|
||||
//
|
||||
// This file is part of Hurricane.
|
||||
//
|
||||
|
@ -23,23 +23,19 @@
|
|||
//
|
||||
// $Id$
|
||||
//
|
||||
// x-----------------------------------------------------------------x
|
||||
// | |
|
||||
// +-----------------------------------------------------------------+
|
||||
// | H U R R I C A N E |
|
||||
// | V L S I B a c k e n d D a t a - B a s e |
|
||||
// | |
|
||||
// | Authors : Hugo Clement & Marek Sroka |
|
||||
// | E-mail : Jean-Paul.Chaput@lip6.fr |
|
||||
// | =============================================================== |
|
||||
// | C++ Header : "./hurricane/RegularLayer.h" |
|
||||
// | *************************************************************** |
|
||||
// | U p d a t e s |
|
||||
// | |
|
||||
// x-----------------------------------------------------------------x
|
||||
// | C++ Header : "./hurricane/RoutingPad.h" |
|
||||
// +-----------------------------------------------------------------+
|
||||
|
||||
|
||||
#ifndef __HURRICANE_ROUTINGPAD__
|
||||
#define __HURRICANE_ROUTINGPAD__
|
||||
#ifndef HURRICANE_ROUTINGPAD_H
|
||||
#define HURRICANE_ROUTINGPAD_H
|
||||
|
||||
#include "hurricane/Component.h"
|
||||
#include "hurricane/Occurrence.h"
|
||||
|
@ -54,16 +50,18 @@ namespace Hurricane {
|
|||
class RoutingPad : public Component {
|
||||
public:
|
||||
typedef Component Inherit;
|
||||
enum Flags { BiggestArea =0x1
|
||||
, HighestLayer =0x2
|
||||
, LowestLayer =0x4
|
||||
enum Flags { BiggestArea = 0x0001
|
||||
, HighestLayer = 0x0002
|
||||
, LowestLayer = 0x0004
|
||||
, ComponentSelection=BiggestArea|HighestLayer|LowestLayer
|
||||
, ShowWarning = 0x0008
|
||||
};
|
||||
public:
|
||||
static RoutingPad* create ( Net*, Occurrence, unsigned int flags=0 );
|
||||
static RoutingPad* create ( Pin* );
|
||||
public:
|
||||
// Accessors.
|
||||
bool isPlacedOccurrence ( unsigned int flags ) const;
|
||||
inline Occurrence getOccurrence () const { return _occurrence; };
|
||||
Occurrence getPlugOccurrence ();
|
||||
virtual const Layer* getLayer () const;
|
||||
|
@ -72,6 +70,7 @@ namespace Hurricane {
|
|||
virtual Box getBoundingBox () const;
|
||||
virtual Box getBoundingBox ( const BasicLayer* ) const;
|
||||
virtual Point getCenter () const;
|
||||
virtual Point getPosition () const;
|
||||
Point getSourcePosition () const;
|
||||
Point getTargetPosition () const;
|
||||
DbU::Unit getSourceX () const;
|
||||
|
@ -80,11 +79,6 @@ namespace Hurricane {
|
|||
DbU::Unit getTargetY () const;
|
||||
// Mutators.
|
||||
virtual void translate ( const DbU::Unit& dx, const DbU::Unit& dy );
|
||||
void setX ( const DbU::Unit& );
|
||||
void setY ( const DbU::Unit& );
|
||||
void setPosition ( const DbU::Unit& x, const DbU::Unit& y );
|
||||
void setPosition ( const Point& position );
|
||||
void setOffset ( const DbU::Unit& dx, const DbU::Unit& dy );
|
||||
void setExternalComponent ( Component* );
|
||||
Component* setOnBestComponent ( unsigned int flags );
|
||||
void restorePlugOccurrence ();
|
||||
|
@ -98,11 +92,9 @@ namespace Hurricane {
|
|||
virtual void _postCreate ();
|
||||
virtual void _preDestroy ();
|
||||
private:
|
||||
RoutingPad ( Net*, const Point&, Occurrence occurrence=Occurrence() );
|
||||
RoutingPad ( Net*, Occurrence occurrence=Occurrence() );
|
||||
private:
|
||||
// Attributes.
|
||||
DbU::Unit _x;
|
||||
DbU::Unit _y;
|
||||
Occurrence _occurrence;
|
||||
};
|
||||
|
||||
|
@ -112,4 +104,4 @@ namespace Hurricane {
|
|||
|
||||
INSPECTOR_P_SUPPORT(Hurricane::RoutingPad);
|
||||
|
||||
#endif // __HURRICANE_ROUTINGPAD__
|
||||
#endif // HURRICANE_ROUTINGPAD_H
|
||||
|
|
|
@ -25,73 +25,43 @@
|
|||
namespace Hurricane {
|
||||
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
// Class : "Hurricane::SharedName".
|
||||
|
||||
// ****************************************************************************************************
|
||||
// SharedName declaration
|
||||
// ****************************************************************************************************
|
||||
|
||||
class SharedName {
|
||||
// *************
|
||||
class SharedName {
|
||||
friend class Name;
|
||||
|
||||
// Friends
|
||||
// *******
|
||||
public:
|
||||
inline unsigned int getId () const;
|
||||
const string& _getSString () const { return _string; };
|
||||
string _getTypeName () const { return _TName("SharedName"); };
|
||||
string _getString () const;
|
||||
Record* _getRecord () const;
|
||||
private:
|
||||
SharedName ( const string& );
|
||||
SharedName ( const SharedName& );
|
||||
~SharedName ();
|
||||
SharedName& operator= ( const SharedName& );
|
||||
void capture ();
|
||||
void release ();
|
||||
|
||||
friend class Name;
|
||||
private:
|
||||
struct SharedNameMapComparator {
|
||||
bool operator() ( string* lhs, string* rhs ) const;
|
||||
};
|
||||
typedef map<string*, SharedName*, SharedNameMapComparator> SharedNameMap;
|
||||
|
||||
// Types
|
||||
// *****
|
||||
private:
|
||||
static SharedNameMap* _SHARED_NAME_MAP;
|
||||
static unsigned int _idCounter;
|
||||
unsigned int _id;
|
||||
int _count;
|
||||
string _string;
|
||||
};
|
||||
|
||||
private: struct SharedNameMapComparator {
|
||||
// ************************************
|
||||
|
||||
bool operator()(string* s1, string* s2) const;
|
||||
|
||||
};
|
||||
|
||||
private: typedef map<string*, SharedName*, SharedNameMapComparator> SharedNameMap;
|
||||
|
||||
// Attributes
|
||||
// **********
|
||||
|
||||
private: static SharedNameMap* _SHARED_NAME_MAP;
|
||||
|
||||
private: int _count;
|
||||
private: string _string;
|
||||
|
||||
// Constructors
|
||||
// ************
|
||||
|
||||
private: SharedName(const string& s);
|
||||
|
||||
private: SharedName(const SharedName& sharedName);
|
||||
// not implemented to forbid copy construction
|
||||
|
||||
// Destructor
|
||||
// **********
|
||||
|
||||
private: ~SharedName();
|
||||
|
||||
// Operators
|
||||
// *********
|
||||
|
||||
private: SharedName& operator=(const SharedName& sharedName);
|
||||
// not implemented to forbid assignment
|
||||
|
||||
// Updators
|
||||
// ********
|
||||
|
||||
private: void capture();
|
||||
private: void release();
|
||||
|
||||
// Others
|
||||
// ******
|
||||
|
||||
public: const string &_getSString () const { return _string; };
|
||||
public: string _getTypeName() const { return _TName("SharedName"); };
|
||||
public: string _getString() const;
|
||||
public: Record* _getRecord() const;
|
||||
|
||||
};
|
||||
inline unsigned int SharedName::getId () const { return _id; }
|
||||
|
||||
|
||||
} // End of Hurricane namespace.
|
||||
|
|
|
@ -60,6 +60,8 @@ class SharedPath {
|
|||
// Attributes
|
||||
// **********
|
||||
|
||||
private: static unsigned int _idCounter;
|
||||
private: unsigned int _id;
|
||||
private: Instance* _headInstance;
|
||||
private: SharedPath* _tailSharedPath;
|
||||
private: QuarkMap _quarkMap;
|
||||
|
@ -89,6 +91,7 @@ class SharedPath {
|
|||
|
||||
public: static char getNameSeparator();
|
||||
|
||||
public: unsigned int getId() const { return _id; }
|
||||
public: Instance* getHeadInstance() const {return _headInstance;};
|
||||
public: SharedPath* getTailSharedPath() const {return _tailSharedPath;};
|
||||
public: SharedPath* getHeadSharedPath() const;
|
||||
|
|
|
@ -54,8 +54,8 @@ extern "C" {
|
|||
DirectGetLongAttribute(PyRoutingPad_getSourceY ,getSourceY ,PyRoutingPad,RoutingPad)
|
||||
DirectGetLongAttribute(PyRoutingPad_getTargetX ,getTargetX ,PyRoutingPad,RoutingPad)
|
||||
DirectGetLongAttribute(PyRoutingPad_getTargetY ,getTargetY ,PyRoutingPad,RoutingPad)
|
||||
DirectSetLongAttribute(PyRoutingPad_setX ,setX ,"RoutingPad.setX",PyRoutingPad,RoutingPad)
|
||||
DirectSetLongAttribute(PyRoutingPad_setY ,setY ,"RoutingPad.setY",PyRoutingPad,RoutingPad)
|
||||
// DirectSetLongAttribute(PyRoutingPad_setX ,setX ,"RoutingPad.setX",PyRoutingPad,RoutingPad)
|
||||
// DirectSetLongAttribute(PyRoutingPad_setY ,setY ,"RoutingPad.setY",PyRoutingPad,RoutingPad)
|
||||
|
||||
// Standart destroy (Attribute).
|
||||
DBoDestroyAttribute(PyRoutingPad_destroy, PyRoutingPad)
|
||||
|
@ -179,6 +179,7 @@ extern "C" {
|
|||
}
|
||||
|
||||
|
||||
#if THIS_IS_DEPRECATED
|
||||
static PyObject* PyRoutingPad_setPosition ( PyRoutingPad *self, PyObject* args )
|
||||
{
|
||||
trace << "PyRoutingPad_setPosition ()" << endl;
|
||||
|
@ -229,6 +230,7 @@ extern "C" {
|
|||
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
static PyObject* PyRoutingPad_setExternalComponent ( PyRoutingPad *self, PyObject* args )
|
||||
|
@ -305,16 +307,16 @@ extern "C" {
|
|||
, { "getTargetX" , (PyCFunction)PyRoutingPad_getTargetX , METH_NOARGS , "Get the RoutingPad target X position." }
|
||||
, { "getTargetY" , (PyCFunction)PyRoutingPad_getTargetY , METH_NOARGS , "Get the RoutingPad target Y position." }
|
||||
, { "translate" , (PyCFunction)PyRoutingPad_translate , METH_VARARGS, "Translates the RoutingPad segment of dx and dy." }
|
||||
, { "setX" , (PyCFunction)PyRoutingPad_setX , METH_VARARGS, "Modify the RoutingPad X position." }
|
||||
, { "setY" , (PyCFunction)PyRoutingPad_setY , METH_VARARGS, "Modify the RoutingPad Y position." }
|
||||
, { "setPosition" , (PyCFunction)PyRoutingPad_setPosition , METH_VARARGS, "Sets the RoutingPad absolute position." }
|
||||
, { "setOffset" , (PyCFunction)PyRoutingPad_setOffset , METH_VARARGS, "Sets the RoutingPad relative position." }
|
||||
// , { "setX" , (PyCFunction)PyRoutingPad_setX , METH_VARARGS, "Modify the RoutingPad X position." }
|
||||
// , { "setY" , (PyCFunction)PyRoutingPad_setY , METH_VARARGS, "Modify the RoutingPad Y position." }
|
||||
// , { "setPosition" , (PyCFunction)PyRoutingPad_setPosition , METH_VARARGS, "Sets the RoutingPad absolute position." }
|
||||
// , { "setOffset" , (PyCFunction)PyRoutingPad_setOffset , METH_VARARGS, "Sets the RoutingPad relative position." }
|
||||
, { "setExternalComponent" , (PyCFunction)PyRoutingPad_setExternalComponent , METH_VARARGS, "Sets the RoutingPad on an master net external component." }
|
||||
, { "setOnBestComponent" , (PyCFunction)PyRoutingPad_setOnBestComponent , METH_VARARGS, "Sets the RoutingPad on master net best external component." }
|
||||
, { "restorePlugOccurrence", (PyCFunction)PyRoutingPad_restorePlugOccurrence, METH_VARARGS, "Revert back from an external component to the plug." }
|
||||
, { "destroy" , (PyCFunction)PyRoutingPad_destroy , METH_NOARGS
|
||||
, "destroy associated hurricane object, the python object remains." }
|
||||
, {NULL, NULL, 0, NULL} /* sentinel */
|
||||
, {NULL, NULL, 0, NULL} /* sentinel */
|
||||
};
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue