* ./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
|
/*! \class Entity
|
||||||
* \brief Occurrenceable objects root class (\b API).
|
* \brief Occurrenceable objects root class (\b API).
|
||||||
*
|
*
|
||||||
* \section sEntityIntro Introduction
|
* \section secEntityIntro Introduction
|
||||||
*
|
*
|
||||||
* Entities are abstract objects representing the category of
|
* Entities are abstract objects representing the category of
|
||||||
* occurrenceable objects.
|
* 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,
|
* \section secEntityId Unique Identifier
|
||||||
* the returned envelope is a Box of null dimensions (ponctual)
|
*
|
||||||
* centered on the location of the master Net of the Plug, to
|
* Each Entity is associated with a unique identifier (see
|
||||||
* which has been applied the transformation associated to the
|
* Entity::getId()). This identifier is used as a sorting key
|
||||||
* Instance of the Plug.
|
* 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
|
//! \name Entity Collection
|
||||||
// \{
|
//! \{
|
||||||
|
|
||||||
/*! \typedef typedef GenericCollection<Entity*> Entities;
|
//! \typedef typedef GenericCollection<Entity*> Entities;
|
||||||
* Generic collection representing a set of data base objects.
|
//! 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
|
* cell of a hierachical assembly, as well as for all cells from
|
||||||
* the library which are not instanciated in the current
|
* the library which are not instanciated in the current
|
||||||
* design).
|
* 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
|
* \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.
|
* \Return the collection of net's pads.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
//! \function RoutingPads Net::getRoutingPads() const;
|
||||||
|
//! \Return the collection of net's RoutingPads.
|
||||||
|
|
||||||
/*! \function Plugs Net::getSlavePlugs() const;
|
/*! \function Plugs Net::getSlavePlugs() const;
|
||||||
* \Return the collection of plugs which have this net as master.
|
* \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.
|
* The RoutingPad is a part of the trans-hierarchical mechanism.
|
||||||
* It allows to connect a Net from the top-level netlist to
|
* It allows to connect a Net from the top-level netlist to
|
||||||
* a plug in an Instance at any level inside the hierarchy,
|
* 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.
|
* Pin or Contact Occurrences.
|
||||||
*
|
*
|
||||||
* When the RoutingPad is created using a Plug Occurrence, it can
|
* When the RoutingPad is created using a Plug Occurrence, it can
|
||||||
* be set afterward to any of master net external Component.
|
* 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
|
* provided to automatically set the RoutingPad on a Component
|
||||||
* matching criteria of surface or layer level.
|
* 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
|
//! \var RoutingPad::ComponentSelection
|
||||||
//! A mask to filter bit parts of a flag belonging to component selection.
|
//! 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
|
//! \typedef RoutingPad::Inherit
|
||||||
//! Useful for calling upon methods of the base class without
|
//! Useful for calling upon methods of the base class without
|
||||||
|
@ -53,6 +63,17 @@
|
||||||
//! \function RoutingPad* RoutingPad::create ( Pin* pin );
|
//! \function RoutingPad* RoutingPad::create ( Pin* pin );
|
||||||
//! Special variant to create a RoutingPad from a top-level 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;
|
//! \function Occurrence RoutingPad::getOccurrence() const;
|
||||||
//! \return The Occurence on which we are anchored on. If a Component has been selected
|
//! \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,
|
//! to be the anchor, it's an Occurrence on that component which is returned,
|
||||||
|
@ -111,22 +132,10 @@
|
||||||
//! getY() otherwise.
|
//! getY() otherwise.
|
||||||
|
|
||||||
//! \function void RoutingPad::translate ( const DbU::Unit& dx, const DbU::Unit& dy );
|
//! \function void RoutingPad::translate ( const DbU::Unit& dx, const DbU::Unit& dy );
|
||||||
//! Translate the RoutingPad by <code>(dx,dy)</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
|
||||||
//! \function void RoutingPad::setOffset ( const DbU::Unit& dx, const DbU::Unit& dy );
|
//! nothing. The Routing pad will translate nevertheless with any translation
|
||||||
//! Sets the relative position of the RoutingPad from it's anchor to <code>(dx,dy)</code>.
|
//! of any of the instance in it's path or the anchor.
|
||||||
|
|
||||||
//! \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>.
|
|
||||||
|
|
||||||
//! \function void RoutingPad::setExternalComponent ( Component* component );
|
//! \function void RoutingPad::setExternalComponent ( Component* component );
|
||||||
//! When the RoutingPad is anchored on a Plug, allow to set the \c 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
|
* <b>translation</b> and an <b>orientation</b> defined by the
|
||||||
* new enumeration <b>Transformation::Orientation</b> whose
|
* new enumeration <b>Transformation::Orientation</b> whose
|
||||||
* different values are described in table below.
|
* 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
|
/*! \class Transformation::Orientation
|
||||||
* This enumeration defines the orientation associated to a
|
* This enumeration defines the orientation associated to a
|
||||||
* transformation object.
|
* 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 *
|
* <table>
|
||||||
* y) + tx y' = (c * x) + (d * y) + ty where x and y are the
|
* <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
|
* coordinates of any point, x' and y' the coordinates of the
|
||||||
* transformed point, tx and ty the horizontal and vertical
|
* transformed point, tx and ty the horizontal and vertical
|
||||||
* components of the translation and where a, b, c and d are the
|
* components of the translation and where a, b, c and d are the
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
|
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
|
||||||
<title>Hurricane Documentation</title>
|
<title>Hurricane Documentation</title>
|
||||||
<link href="ASIM.css" rel="stylesheet" type="text/css">
|
<link href="SoC.css" rel="stylesheet" type="text/css">
|
||||||
</head>
|
</head>
|
||||||
<h1 id="pagetop" class="header">Hurricane Documentation</h1>
|
<h1 id="pagetop" class="header">Hurricane Documentation</h1>
|
||||||
<center class="header">
|
<center class="header">
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
|
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
|
||||||
<title>Hurricane Documentation</title>
|
<title>Hurricane Documentation</title>
|
||||||
<link href="ASIM.css" rel="stylesheet" type="text/css">
|
<link href="SoC.css" rel="stylesheet" type="text/css">
|
||||||
</head>
|
</head>
|
||||||
<h1 class="header">Hurricane Documentation</h1>
|
<h1 class="header">Hurricane Documentation</h1>
|
||||||
<center class="header">
|
<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
|
# 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!
|
# 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,
|
# 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
|
# files or namespaces will be aligned in HTML using tables. If set to
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
|
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
|
||||||
<title>Hurricane Documentation</title>
|
<title>Hurricane Documentation</title>
|
||||||
<link href="ASIM.css" rel="stylesheet" type="text/css">
|
<link href="SoC.css" rel="stylesheet" type="text/css">
|
||||||
</head>
|
</head>
|
||||||
<h1 id="pagetop" class="header">Hurricane Documentation</h1>
|
<h1 id="pagetop" class="header">Hurricane Documentation</h1>
|
||||||
<center class="header">
|
<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>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
|
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
|
||||||
<title>Hurricane Documentation</title>
|
<title>Hurricane Documentation</title>
|
||||||
<link href="ASIM.css" rel="stylesheet" type="text/css">
|
<link href="SoC.css" rel="stylesheet" type="text/css">
|
||||||
</head>
|
</head>
|
||||||
<h1 class="header">Hurricane Documentation</h1>
|
<h1 class="header">Hurricane Documentation</h1>
|
||||||
<center class="header">
|
<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
|
# 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!
|
# 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,
|
# 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
|
# files or namespaces will be aligned in HTML using tables. If set to
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
|
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
|
||||||
<title>Hurricane Viewer Documentation</title>
|
<title>Hurricane Viewer Documentation</title>
|
||||||
<link href="ASIM.css" rel="stylesheet" type="text/css">
|
<link href="SoC.css" rel="stylesheet" type="text/css">
|
||||||
</head>
|
</head>
|
||||||
<h1 id="pagetop" class="header">Hurricane Viewer Documentation</h1>
|
<h1 id="pagetop" class="header">Hurricane Viewer Documentation</h1>
|
||||||
<center class="header">
|
<center class="header">
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
|
|
||||||
//#define TEST_INTRUSIVESET
|
//#define TEST_INTRUSIVESET
|
||||||
|
|
||||||
|
#include "hurricane/SharedName.h"
|
||||||
#include "hurricane/Cell.h"
|
#include "hurricane/Cell.h"
|
||||||
#include "hurricane/DataBase.h"
|
#include "hurricane/DataBase.h"
|
||||||
#include "hurricane/Library.h"
|
#include "hurricane/Library.h"
|
||||||
|
@ -215,7 +216,7 @@ void Cell::flattenNets(bool buildRings)
|
||||||
}
|
}
|
||||||
|
|
||||||
forEach ( Occurrence, iplugOccurrence, hyperNet.getLeafPlugOccurrences() ) {
|
forEach ( Occurrence, iplugOccurrence, hyperNet.getLeafPlugOccurrences() ) {
|
||||||
currentRP = RoutingPad::create ( net, *iplugOccurrence, RoutingPad::BiggestArea );
|
currentRP = RoutingPad::create ( net, *iplugOccurrence, RoutingPad::BiggestArea|RoutingPad::ShowWarning );
|
||||||
currentRP->materialize ();
|
currentRP->materialize ();
|
||||||
if ( buildRings ) {
|
if ( buildRings ) {
|
||||||
if ( previousRP ) {
|
if ( previousRP ) {
|
||||||
|
@ -409,10 +410,10 @@ Name Cell::InstanceMap::_getKey(Instance* instance) const
|
||||||
return instance->getName();
|
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
|
Instance* Cell::InstanceMap::_getNextElement(Instance* instance) const
|
||||||
|
@ -442,7 +443,7 @@ Cell::SlaveInstanceSet::SlaveInstanceSet()
|
||||||
unsigned Cell::SlaveInstanceSet::_getHashValue(Instance* slaveInstance) const
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
Slice* Cell::SliceMap::_getNextElement(Slice* slice) const
|
||||||
|
@ -578,7 +579,7 @@ Cell::MarkerSet::MarkerSet()
|
||||||
unsigned Cell::MarkerSet::_getHashValue(Marker* marker) const
|
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
|
Marker* Cell::MarkerSet::_getNextElement(Marker* marker) const
|
||||||
|
|
|
@ -17,6 +17,8 @@
|
||||||
// not, see <http://www.gnu.org/licenses/>.
|
// not, see <http://www.gnu.org/licenses/>.
|
||||||
// ****************************************************************************************************
|
// ****************************************************************************************************
|
||||||
|
|
||||||
|
#include <limits>
|
||||||
|
#include "hurricane/Error.h"
|
||||||
#include "hurricane/Entity.h"
|
#include "hurricane/Entity.h"
|
||||||
#include "hurricane/Quark.h"
|
#include "hurricane/Quark.h"
|
||||||
#include "hurricane/Cell.h"
|
#include "hurricane/Cell.h"
|
||||||
|
@ -31,11 +33,19 @@ namespace Hurricane {
|
||||||
// Entity implementation
|
// Entity implementation
|
||||||
// ****************************************************************************************************
|
// ****************************************************************************************************
|
||||||
|
|
||||||
Entity::Entity()
|
|
||||||
// *************
|
unsigned int Entity::_idCounter = 0;
|
||||||
: Inherit()
|
|
||||||
{
|
|
||||||
}
|
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()
|
void Entity::_preDestroy()
|
||||||
|
@ -85,7 +95,9 @@ Entity::Entity()
|
||||||
string Entity::_getString() const
|
string Entity::_getString() const
|
||||||
// ******************************
|
// ******************************
|
||||||
{
|
{
|
||||||
return Inherit::_getString();
|
string s = Inherit::_getString();
|
||||||
|
s.insert(1, "id:"+getString(_id)+" ");
|
||||||
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
Record* Entity::_getRecord() const
|
Record* Entity::_getRecord() const
|
||||||
|
@ -93,6 +105,7 @@ Record* Entity::_getRecord() const
|
||||||
{
|
{
|
||||||
Record* record = Inherit::_getRecord();
|
Record* record = Inherit::_getRecord();
|
||||||
if (record) {
|
if (record) {
|
||||||
|
record->add(getSlot("_id", _id));
|
||||||
Occurrence occurrence = Occurrence(this);
|
Occurrence occurrence = Occurrence(this);
|
||||||
if (occurrence.hasProperty())
|
if (occurrence.hasProperty())
|
||||||
record->add(getSlot("Occurrence", occurrence));
|
record->add(getSlot("Occurrence", occurrence));
|
||||||
|
|
|
@ -19,12 +19,7 @@
|
||||||
// License along with Hurricane. If not, see
|
// License along with Hurricane. If not, see
|
||||||
// <http://www.gnu.org/licenses/>.
|
// <http://www.gnu.org/licenses/>.
|
||||||
//
|
//
|
||||||
// ===================================================================
|
// +-----------------------------------------------------------------+
|
||||||
//
|
|
||||||
// $Id$
|
|
||||||
//
|
|
||||||
// x-----------------------------------------------------------------x
|
|
||||||
// | |
|
|
||||||
// | H U R R I C A N E |
|
// | 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 |
|
// | 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 |
|
// | E-mail : Jean-Paul.Chaput@lip6.fr |
|
||||||
// | =============================================================== |
|
// | =============================================================== |
|
||||||
// | C++ Module : "./Error.cpp" |
|
// | C++ Module : "./Error.cpp" |
|
||||||
// | *************************************************************** |
|
// +-----------------------------------------------------------------+
|
||||||
// | U p d a t e s |
|
|
||||||
// | |
|
|
||||||
// x-----------------------------------------------------------------x
|
|
||||||
|
|
||||||
|
|
||||||
#include <execinfo.h>
|
#include <execinfo.h>
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
// not, see <http://www.gnu.org/licenses/>.
|
// not, see <http://www.gnu.org/licenses/>.
|
||||||
// ****************************************************************************************************
|
// ****************************************************************************************************
|
||||||
|
|
||||||
|
#include "hurricane/SharedPath.h"
|
||||||
#include "hurricane/Instance.h"
|
#include "hurricane/Instance.h"
|
||||||
#include "hurricane/Cell.h"
|
#include "hurricane/Cell.h"
|
||||||
#include "hurricane/Net.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
|
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
|
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
|
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
|
SharedPath* Instance::SharedPathMap::_getNextElement(SharedPath* sharedPath) const
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
// not, see <http://www.gnu.org/licenses/>.
|
// not, see <http://www.gnu.org/licenses/>.
|
||||||
// ****************************************************************************************************
|
// ****************************************************************************************************
|
||||||
|
|
||||||
|
#include "hurricane/SharedName.h"
|
||||||
#include "hurricane/Library.h"
|
#include "hurricane/Library.h"
|
||||||
#include "hurricane/DataBase.h"
|
#include "hurricane/DataBase.h"
|
||||||
#include "hurricane/Cell.h"
|
#include "hurricane/Cell.h"
|
||||||
|
@ -163,7 +164,7 @@ Name Library::LibraryMap::_getKey(Library* library) const
|
||||||
unsigned Library::LibraryMap::_getHashValue(Name name) 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
|
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
|
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
|
Cell* Library::CellMap::_getNextElement(Cell* cell) const
|
||||||
|
|
|
@ -770,7 +770,7 @@ Net::ComponentSet::ComponentSet()
|
||||||
unsigned Net::ComponentSet::_getHashValue(Component* component) const
|
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
|
Component* Net::ComponentSet::_getNextElement(Component* component) const
|
||||||
|
@ -800,7 +800,7 @@ Net::RubberSet::RubberSet()
|
||||||
unsigned Net::RubberSet::_getHashValue(Rubber* rubber) const
|
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
|
Rubber* Net::RubberSet::_getNextElement(Rubber* rubber) const
|
||||||
|
|
|
@ -37,7 +37,7 @@ Pin::Pin(Net* net, const Name& name, const AccessDirection& accessDirection, con
|
||||||
_nextOfCellPinMap(NULL)
|
_nextOfCellPinMap(NULL)
|
||||||
{
|
{
|
||||||
if (getCell()->getPin(name))
|
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);
|
_urChild = new QuadTree(this);
|
||||||
_llChild = new QuadTree(this);
|
_llChild = new QuadTree(this);
|
||||||
_lrChild = new QuadTree(this);
|
_lrChild = new QuadTree(this);
|
||||||
set<Go*> goSet;
|
set<Go*,Entity::CompareById> goSet;
|
||||||
for_each_go(go, _goSet.getElements()) {
|
for_each_go(go, _goSet.getElements()) {
|
||||||
_goSet._remove(go);
|
_goSet._remove(go);
|
||||||
go->_quadTree = NULL;
|
go->_quadTree = NULL;
|
||||||
|
@ -539,7 +539,7 @@ QuadTree::GoSet::GoSet()
|
||||||
unsigned QuadTree::GoSet::_getHashValue(Go* go) const
|
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
|
Go* QuadTree::GoSet::_getNextElement(Go* go) const
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
|
|
||||||
// -*- C++ -*-
|
// -*- 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.
|
// This file is part of Hurricane.
|
||||||
//
|
//
|
||||||
|
@ -23,8 +23,7 @@
|
||||||
//
|
//
|
||||||
// $Id$
|
// $Id$
|
||||||
//
|
//
|
||||||
// x-----------------------------------------------------------------x
|
// +-----------------------------------------------------------------+
|
||||||
// | |
|
|
||||||
// | H U R R I C A N E |
|
// | 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 |
|
// | 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 |
|
// | E-mail : Jean-Paul.Chaput@lip6.fr |
|
||||||
// | =============================================================== |
|
// | =============================================================== |
|
||||||
// | C++ Header : "./RoutingPad.h" |
|
// | C++ Header : "./RoutingPad.h" |
|
||||||
// | *************************************************************** |
|
// +-----------------------------------------------------------------+
|
||||||
// | U p d a t e s |
|
|
||||||
// | |
|
|
||||||
// x-----------------------------------------------------------------x
|
|
||||||
|
|
||||||
|
|
||||||
|
#include <sstream>
|
||||||
#include "hurricane/Net.h"
|
#include "hurricane/Net.h"
|
||||||
#include "hurricane/NetExternalComponents.h"
|
#include "hurricane/NetExternalComponents.h"
|
||||||
#include "hurricane/Layer.h"
|
#include "hurricane/Layer.h"
|
||||||
|
@ -48,17 +45,18 @@
|
||||||
#include "hurricane/Vertical.h"
|
#include "hurricane/Vertical.h"
|
||||||
#include "hurricane/Cell.h"
|
#include "hurricane/Cell.h"
|
||||||
#include "hurricane/Instance.h"
|
#include "hurricane/Instance.h"
|
||||||
|
#include "hurricane/Warning.h"
|
||||||
#include "hurricane/Error.h"
|
#include "hurricane/Error.h"
|
||||||
#include "hurricane/RoutingPad.h"
|
#include "hurricane/RoutingPad.h"
|
||||||
|
|
||||||
|
|
||||||
namespace Hurricane {
|
namespace Hurricane {
|
||||||
|
|
||||||
|
using std::ostringstream;
|
||||||
|
|
||||||
RoutingPad::RoutingPad ( Net* net, const Point& p, Occurrence occurrence )
|
|
||||||
|
RoutingPad::RoutingPad ( Net* net, Occurrence occurrence )
|
||||||
: Inherit (net)
|
: Inherit (net)
|
||||||
, _x (p.getX())
|
|
||||||
, _y (p.getY())
|
|
||||||
, _occurrence(occurrence)
|
, _occurrence(occurrence)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
|
@ -71,23 +69,23 @@ namespace Hurricane {
|
||||||
Plug* plug = NULL;
|
Plug* plug = NULL;
|
||||||
Pin* pin = NULL;
|
Pin* pin = NULL;
|
||||||
Contact* contact = NULL;
|
Contact* contact = NULL;
|
||||||
Point position;
|
|
||||||
|
|
||||||
if ( (plug = dynamic_cast<Plug*>(occurrence.getEntity()) ) ) {
|
if ( (plug = dynamic_cast<Plug*>(occurrence.getEntity()) ) == NULL) {
|
||||||
position = occurrence.getPath().getTransformation().getPoint( plug->getPosition() );
|
if ( (pin = dynamic_cast<Pin*>(occurrence.getEntity()) ) == NULL) {
|
||||||
} else if ( (pin = dynamic_cast<Pin*>(occurrence.getEntity()) ) ) {
|
contact = dynamic_cast<Contact*>(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 ( (not plug) and (not pin) and (not contact) )
|
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();
|
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;
|
return routingPad;
|
||||||
}
|
}
|
||||||
|
@ -117,8 +115,33 @@ namespace Hurricane {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
DbU::Unit RoutingPad::getX () const { return _x; }
|
bool RoutingPad::isPlacedOccurrence ( unsigned int flags ) const
|
||||||
DbU::Unit RoutingPad::getY () const { return _y; }
|
{
|
||||||
|
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::getSourceX () const { return getSourcePosition().getX(); }
|
||||||
DbU::Unit RoutingPad::getSourceY () const { return getSourcePosition().getY(); }
|
DbU::Unit RoutingPad::getSourceY () const { return getSourcePosition().getY(); }
|
||||||
DbU::Unit RoutingPad::getTargetX () const { return getTargetPosition().getX(); }
|
DbU::Unit RoutingPad::getTargetX () const { return getTargetPosition().getX(); }
|
||||||
|
@ -148,17 +171,28 @@ namespace Hurricane {
|
||||||
const Layer* RoutingPad::getLayer () const
|
const Layer* RoutingPad::getLayer () const
|
||||||
{
|
{
|
||||||
Component* component = _getEntityAsComponent();
|
Component* component = _getEntityAsComponent();
|
||||||
if ( component ) return component->getLayer ();
|
if (component) return component->getLayer ();
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Point RoutingPad::getPosition () const
|
||||||
|
{
|
||||||
|
Component* component = _getEntityAsComponent();
|
||||||
|
if (component)
|
||||||
|
return _occurrence.getPath().getTransformation().getPoint( component->getCenter() );
|
||||||
|
|
||||||
|
return Point();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Point RoutingPad::getSourcePosition () const
|
Point RoutingPad::getSourcePosition () const
|
||||||
{
|
{
|
||||||
Segment* segment = _getEntityAsSegment();
|
Segment* segment = _getEntityAsSegment();
|
||||||
if ( segment )
|
if ( segment ) {
|
||||||
return _occurrence.getPath().getTransformation().getPoint ( segment->getSourcePosition() );
|
return _occurrence.getPath().getTransformation().getPoint ( segment->getSourcePosition() );
|
||||||
|
}
|
||||||
|
|
||||||
return getPosition();
|
return getPosition();
|
||||||
}
|
}
|
||||||
|
@ -186,25 +220,7 @@ namespace Hurricane {
|
||||||
|
|
||||||
void RoutingPad::translate(const DbU::Unit& dx, const DbU::Unit& dy)
|
void RoutingPad::translate(const DbU::Unit& dx, const DbU::Unit& dy)
|
||||||
{
|
{
|
||||||
if ( (dx != 0) or (dy != 0) ) {
|
// Does nothing. The position is fixed and relative to the instance path.
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -237,8 +253,6 @@ namespace Hurricane {
|
||||||
{
|
{
|
||||||
Record* record = Inherit::_getRecord();
|
Record* record = Inherit::_getRecord();
|
||||||
if ( record ) {
|
if ( record ) {
|
||||||
record->add(getSlot("_x" , &_x ));
|
|
||||||
record->add(getSlot("_y" , &_y ));
|
|
||||||
record->add(getSlot("_occurrence",_occurrence));
|
record->add(getSlot("_occurrence",_occurrence));
|
||||||
}
|
}
|
||||||
return record;
|
return record;
|
||||||
|
@ -275,21 +289,6 @@ namespace Hurricane {
|
||||||
_occurrence.getMasterCell()->_removeSlaveEntity(_occurrence.getEntity(),this);
|
_occurrence.getMasterCell()->_removeSlaveEntity(_occurrence.getEntity(),this);
|
||||||
_occurrence = Occurrence(component,Path(plugOccurrence.getPath(),plug->getInstance()));
|
_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);
|
_occurrence.getMasterCell()->_addSlaveEntity(_occurrence.getEntity(),this);
|
||||||
|
|
||||||
if (!isMaterialized()) materialize();
|
if (!isMaterialized()) materialize();
|
||||||
|
@ -320,8 +319,6 @@ namespace Hurricane {
|
||||||
if (isMaterialized()) unmaterialize();
|
if (isMaterialized()) unmaterialize();
|
||||||
|
|
||||||
_occurrence=getPlugOccurrence();
|
_occurrence=getPlugOccurrence();
|
||||||
setPosition ( _occurrence.getPath().getTransformation().getPoint
|
|
||||||
( dynamic_cast<Component*>(_occurrence.getEntity())->getPosition() ) );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -359,6 +356,7 @@ namespace Hurricane {
|
||||||
,getString(plug->getInstance ()).c_str() );
|
,getString(plug->getInstance ()).c_str() );
|
||||||
|
|
||||||
setExternalComponent ( bestComponent );
|
setExternalComponent ( bestComponent );
|
||||||
|
if (flags & ShowWarning) isPlacedOccurrence( flags );
|
||||||
|
|
||||||
return bestComponent;
|
return bestComponent;
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,6 +17,8 @@
|
||||||
// not, see <http://www.gnu.org/licenses/>.
|
// not, see <http://www.gnu.org/licenses/>.
|
||||||
// ****************************************************************************************************
|
// ****************************************************************************************************
|
||||||
|
|
||||||
|
#include <limits>
|
||||||
|
#include "hurricane/Error.h"
|
||||||
#include "hurricane/SharedName.h"
|
#include "hurricane/SharedName.h"
|
||||||
|
|
||||||
namespace Hurricane {
|
namespace Hurricane {
|
||||||
|
@ -27,17 +29,25 @@ namespace Hurricane {
|
||||||
// SharedName implementation
|
// 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)
|
|
||||||
// ************************************
|
SharedName::SharedName ( const string& name )
|
||||||
: _count(0),
|
: _id (_idCounter++)
|
||||||
_string(s)
|
, _count (0)
|
||||||
|
, _string(name)
|
||||||
{
|
{
|
||||||
if (!_SHARED_NAME_MAP) _SHARED_NAME_MAP = new SharedNameMap();
|
if (!_SHARED_NAME_MAP) _SHARED_NAME_MAP = new SharedNameMap();
|
||||||
(*_SHARED_NAME_MAP)[&_string] = this;
|
(*_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()
|
SharedName::~SharedName()
|
||||||
// **********************
|
// **********************
|
||||||
{
|
{
|
||||||
|
@ -66,8 +76,8 @@ Record* SharedName::_getRecord() const
|
||||||
// *****************************
|
// *****************************
|
||||||
{
|
{
|
||||||
Record* record = new Record(getString(this));
|
Record* record = new Record(getString(this));
|
||||||
record->add(getSlot("Count", &_count));
|
record->add(getSlot("_count", &_count));
|
||||||
record->add(getSlot("String", &_string));
|
record->add(getSlot("_string", &_string));
|
||||||
return record;
|
return record;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
// not, see <http://www.gnu.org/licenses/>.
|
// not, see <http://www.gnu.org/licenses/>.
|
||||||
// ****************************************************************************************************
|
// ****************************************************************************************************
|
||||||
|
|
||||||
|
#include <limits>
|
||||||
#include "hurricane/SharedPath.h"
|
#include "hurricane/SharedPath.h"
|
||||||
#include "hurricane/Instance.h"
|
#include "hurricane/Instance.h"
|
||||||
#include "hurricane/Cell.h"
|
#include "hurricane/Cell.h"
|
||||||
|
@ -30,6 +31,7 @@ namespace Hurricane {
|
||||||
// SharedPath_Instances declaration
|
// SharedPath_Instances declaration
|
||||||
// ****************************************************************************************************
|
// ****************************************************************************************************
|
||||||
|
|
||||||
|
|
||||||
class SharedPath_Instances : public Collection<Instance*> {
|
class SharedPath_Instances : public Collection<Instance*> {
|
||||||
// ******************************************************
|
// ******************************************************
|
||||||
|
|
||||||
|
@ -96,14 +98,22 @@ class SharedPath_Instances : public Collection<Instance*> {
|
||||||
// ****************************************************************************************************
|
// ****************************************************************************************************
|
||||||
|
|
||||||
static char NAME_SEPARATOR = '.';
|
static char NAME_SEPARATOR = '.';
|
||||||
|
unsigned int SharedPath::_idCounter = 0;
|
||||||
|
|
||||||
|
|
||||||
SharedPath::SharedPath(Instance* headInstance, SharedPath* tailSharedPath)
|
SharedPath::SharedPath(Instance* headInstance, SharedPath* tailSharedPath)
|
||||||
// ***********************************************************************
|
// ***********************************************************************
|
||||||
: _headInstance(headInstance),
|
: _id(_idCounter++),
|
||||||
|
_headInstance(headInstance),
|
||||||
_tailSharedPath(tailSharedPath),
|
_tailSharedPath(tailSharedPath),
|
||||||
_quarkMap(),
|
_quarkMap(),
|
||||||
_nextOfInstanceSharedPathMap(NULL)
|
_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)
|
if (!_headInstance)
|
||||||
throw Error("Can't create " + _TName("SharedPath") + " : null head instance");
|
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
|
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
|
Quark* SharedPath::QuarkMap::_getNextElement(Quark* quark) const
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
// not, see <http://www.gnu.org/licenses/>.
|
// not, see <http://www.gnu.org/licenses/>.
|
||||||
// ****************************************************************************************************
|
// ****************************************************************************************************
|
||||||
|
|
||||||
|
#include "hurricane/SharedName.h"
|
||||||
#include "hurricane/Technology.h"
|
#include "hurricane/Technology.h"
|
||||||
#include "hurricane/DataBase.h"
|
#include "hurricane/DataBase.h"
|
||||||
#include "hurricane/Layer.h"
|
#include "hurricane/Layer.h"
|
||||||
|
@ -411,7 +412,7 @@ Name Technology::LayerMap::_getKey(Layer* layer) const
|
||||||
unsigned Technology::LayerMap::_getHashValue(Name name) 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
|
Layer* Technology::LayerMap::_getNextElement(Layer* layer) const
|
||||||
|
|
|
@ -199,10 +199,10 @@ namespace Hurricane {
|
||||||
string Timer::getStringMemory ( size_t size ) {
|
string Timer::getStringMemory ( size_t size ) {
|
||||||
string s;
|
string s;
|
||||||
|
|
||||||
if ( size >> 30 ) s = getString(size>>30) + "Mo";
|
if ( size >> 30 ) s = getString(size>>30) + "Mb";
|
||||||
else if ( size >> 20 ) s = getString(size>>20) + "Mo";
|
else if ( size >> 20 ) s = getString(size>>20) + "Mb";
|
||||||
else if ( size >> 10 ) s = getString(size>>10) + "Ko";
|
else if ( size >> 10 ) s = getString(size>>10) + "Kb";
|
||||||
else s = getString(size) + " octets";
|
else s = getString(size) + " bytes";
|
||||||
|
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
|
@ -838,7 +838,7 @@ class ForEachIterator {
|
||||||
inline Element operator-> ();
|
inline Element operator-> ();
|
||||||
inline ForEachIterator& operator++ (int);
|
inline ForEachIterator& operator++ (int);
|
||||||
public:
|
public:
|
||||||
GenericCollection<Element>& collection;
|
GenericCollection<Element> collection;
|
||||||
GenericLocator<Element> locator;
|
GenericLocator<Element> locator;
|
||||||
Element element;
|
Element element;
|
||||||
};
|
};
|
||||||
|
|
|
@ -20,58 +20,53 @@
|
||||||
#ifndef HURRICANE_ENTITY
|
#ifndef HURRICANE_ENTITY
|
||||||
#define HURRICANE_ENTITY
|
#define HURRICANE_ENTITY
|
||||||
|
|
||||||
|
#include <functional>
|
||||||
#include "hurricane/DBo.h"
|
#include "hurricane/DBo.h"
|
||||||
#include "hurricane/Entities.h"
|
#include "hurricane/Entities.h"
|
||||||
#include "hurricane/Box.h"
|
#include "hurricane/Box.h"
|
||||||
|
|
||||||
namespace Hurricane {
|
namespace Hurricane {
|
||||||
|
|
||||||
class Cell;
|
class Cell;
|
||||||
class Quark;
|
class Quark;
|
||||||
class SharedPath;
|
class SharedPath;
|
||||||
|
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------
|
||||||
// ****************************************************************************************************
|
// Class : "Hurricane::Entity".
|
||||||
// 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;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
} // 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);
|
INSPECTOR_P_SUPPORT(Hurricane::Entity);
|
||||||
|
@ -79,7 +74,6 @@ INSPECTOR_P_SUPPORT(Hurricane::Entity);
|
||||||
|
|
||||||
#endif // HURRICANE_ENTITY
|
#endif // HURRICANE_ENTITY
|
||||||
|
|
||||||
|
|
||||||
// ****************************************************************************************************
|
// ****************************************************************************************************
|
||||||
// Copyright (c) BULL S.A. 2000-2009, All Rights Reserved
|
// Copyright (c) BULL S.A. 2000-2009, All Rights Reserved
|
||||||
// ****************************************************************************************************
|
// ****************************************************************************************************
|
||||||
|
|
|
@ -95,10 +95,6 @@ namespace Hurricane {
|
||||||
inline void _setExtractMask ( const Mask& extractMask );
|
inline void _setExtractMask ( const Mask& extractMask );
|
||||||
inline void _setNextOfTechnologyLayerMap ( Layer* layer );
|
inline void _setNextOfTechnologyLayerMap ( Layer* layer );
|
||||||
virtual void _onDbuChange ( float scale );
|
virtual void _onDbuChange ( float scale );
|
||||||
public:
|
|
||||||
struct MaskCompare {
|
|
||||||
inline bool operator () ( const Layer*, const Layer* ) const;
|
|
||||||
};
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Internal: Attributes
|
// Internal: Attributes
|
||||||
|
@ -121,6 +117,11 @@ namespace Hurricane {
|
||||||
);
|
);
|
||||||
virtual void _postCreate ();
|
virtual void _postCreate ();
|
||||||
virtual void _preDestroy ();
|
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::_setExtractMask ( const Mask& extractMask ) { _extractMask = extractMask; }
|
||||||
inline void Layer::_setNextOfTechnologyLayerMap ( Layer* layer ) { _nextOfTechnologyLayerMap = layer; }
|
inline void Layer::_setNextOfTechnologyLayerMap ( Layer* layer ) { _nextOfTechnologyLayerMap = layer; }
|
||||||
|
|
||||||
inline bool Layer::MaskCompare::operator () ( const Layer* layer1, const Layer* layer2 ) const
|
inline bool Layer::CompareByMask::operator() ( const Layer* lhs, const Layer* rhs ) const
|
||||||
{ return layer1->getMask() < layer2->getMask(); }
|
{ return (lhs?lhs->getMask():Layer::Mask()) < (rhs?rhs->getMask():Layer::Mask()); }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
#ifndef HURRICANE_NET
|
#ifndef HURRICANE_NET
|
||||||
#define HURRICANE_NET
|
#define HURRICANE_NET
|
||||||
|
|
||||||
|
#include <functional>
|
||||||
#include "hurricane/Entity.h"
|
#include "hurricane/Entity.h"
|
||||||
#include "hurricane/Nets.h"
|
#include "hurricane/Nets.h"
|
||||||
#include "hurricane/Component.h"
|
#include "hurricane/Component.h"
|
||||||
|
@ -233,10 +234,6 @@ class Net : public Entity {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
} // End of Hurricane namespace.
|
} // End of Hurricane namespace.
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
|
|
||||||
// -*- C++ -*-
|
// -*- 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.
|
// This file is part of Hurricane.
|
||||||
//
|
//
|
||||||
|
@ -23,23 +23,19 @@
|
||||||
//
|
//
|
||||||
// $Id$
|
// $Id$
|
||||||
//
|
//
|
||||||
// x-----------------------------------------------------------------x
|
// +-----------------------------------------------------------------+
|
||||||
// | |
|
|
||||||
// | H U R R I C A N E |
|
// | 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 |
|
// | V L S I B a c k e n d D a t a - B a s e |
|
||||||
// | |
|
// | |
|
||||||
// | Authors : Hugo Clement & Marek Sroka |
|
// | Authors : Hugo Clement & Marek Sroka |
|
||||||
// | E-mail : Jean-Paul.Chaput@lip6.fr |
|
// | E-mail : Jean-Paul.Chaput@lip6.fr |
|
||||||
// | =============================================================== |
|
// | =============================================================== |
|
||||||
// | C++ Header : "./hurricane/RegularLayer.h" |
|
// | C++ Header : "./hurricane/RoutingPad.h" |
|
||||||
// | *************************************************************** |
|
// +-----------------------------------------------------------------+
|
||||||
// | U p d a t e s |
|
|
||||||
// | |
|
|
||||||
// x-----------------------------------------------------------------x
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef __HURRICANE_ROUTINGPAD__
|
#ifndef HURRICANE_ROUTINGPAD_H
|
||||||
#define __HURRICANE_ROUTINGPAD__
|
#define HURRICANE_ROUTINGPAD_H
|
||||||
|
|
||||||
#include "hurricane/Component.h"
|
#include "hurricane/Component.h"
|
||||||
#include "hurricane/Occurrence.h"
|
#include "hurricane/Occurrence.h"
|
||||||
|
@ -54,16 +50,18 @@ namespace Hurricane {
|
||||||
class RoutingPad : public Component {
|
class RoutingPad : public Component {
|
||||||
public:
|
public:
|
||||||
typedef Component Inherit;
|
typedef Component Inherit;
|
||||||
enum Flags { BiggestArea =0x1
|
enum Flags { BiggestArea = 0x0001
|
||||||
, HighestLayer =0x2
|
, HighestLayer = 0x0002
|
||||||
, LowestLayer =0x4
|
, LowestLayer = 0x0004
|
||||||
, ComponentSelection=BiggestArea|HighestLayer|LowestLayer
|
, ComponentSelection=BiggestArea|HighestLayer|LowestLayer
|
||||||
|
, ShowWarning = 0x0008
|
||||||
};
|
};
|
||||||
public:
|
public:
|
||||||
static RoutingPad* create ( Net*, Occurrence, unsigned int flags=0 );
|
static RoutingPad* create ( Net*, Occurrence, unsigned int flags=0 );
|
||||||
static RoutingPad* create ( Pin* );
|
static RoutingPad* create ( Pin* );
|
||||||
public:
|
public:
|
||||||
// Accessors.
|
// Accessors.
|
||||||
|
bool isPlacedOccurrence ( unsigned int flags ) const;
|
||||||
inline Occurrence getOccurrence () const { return _occurrence; };
|
inline Occurrence getOccurrence () const { return _occurrence; };
|
||||||
Occurrence getPlugOccurrence ();
|
Occurrence getPlugOccurrence ();
|
||||||
virtual const Layer* getLayer () const;
|
virtual const Layer* getLayer () const;
|
||||||
|
@ -72,6 +70,7 @@ namespace Hurricane {
|
||||||
virtual Box getBoundingBox () const;
|
virtual Box getBoundingBox () const;
|
||||||
virtual Box getBoundingBox ( const BasicLayer* ) const;
|
virtual Box getBoundingBox ( const BasicLayer* ) const;
|
||||||
virtual Point getCenter () const;
|
virtual Point getCenter () const;
|
||||||
|
virtual Point getPosition () const;
|
||||||
Point getSourcePosition () const;
|
Point getSourcePosition () const;
|
||||||
Point getTargetPosition () const;
|
Point getTargetPosition () const;
|
||||||
DbU::Unit getSourceX () const;
|
DbU::Unit getSourceX () const;
|
||||||
|
@ -80,11 +79,6 @@ namespace Hurricane {
|
||||||
DbU::Unit getTargetY () const;
|
DbU::Unit getTargetY () const;
|
||||||
// Mutators.
|
// Mutators.
|
||||||
virtual void translate ( const DbU::Unit& dx, const DbU::Unit& dy );
|
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* );
|
void setExternalComponent ( Component* );
|
||||||
Component* setOnBestComponent ( unsigned int flags );
|
Component* setOnBestComponent ( unsigned int flags );
|
||||||
void restorePlugOccurrence ();
|
void restorePlugOccurrence ();
|
||||||
|
@ -98,11 +92,9 @@ namespace Hurricane {
|
||||||
virtual void _postCreate ();
|
virtual void _postCreate ();
|
||||||
virtual void _preDestroy ();
|
virtual void _preDestroy ();
|
||||||
private:
|
private:
|
||||||
RoutingPad ( Net*, const Point&, Occurrence occurrence=Occurrence() );
|
RoutingPad ( Net*, Occurrence occurrence=Occurrence() );
|
||||||
private:
|
private:
|
||||||
// Attributes.
|
// Attributes.
|
||||||
DbU::Unit _x;
|
|
||||||
DbU::Unit _y;
|
|
||||||
Occurrence _occurrence;
|
Occurrence _occurrence;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -112,4 +104,4 @@ namespace Hurricane {
|
||||||
|
|
||||||
INSPECTOR_P_SUPPORT(Hurricane::RoutingPad);
|
INSPECTOR_P_SUPPORT(Hurricane::RoutingPad);
|
||||||
|
|
||||||
#endif // __HURRICANE_ROUTINGPAD__
|
#endif // HURRICANE_ROUTINGPAD_H
|
||||||
|
|
|
@ -25,73 +25,43 @@
|
||||||
namespace Hurricane {
|
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;
|
inline unsigned int SharedName::getId () const { return _id; }
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
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;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
} // End of Hurricane namespace.
|
} // End of Hurricane namespace.
|
||||||
|
|
|
@ -60,6 +60,8 @@ class SharedPath {
|
||||||
// Attributes
|
// Attributes
|
||||||
// **********
|
// **********
|
||||||
|
|
||||||
|
private: static unsigned int _idCounter;
|
||||||
|
private: unsigned int _id;
|
||||||
private: Instance* _headInstance;
|
private: Instance* _headInstance;
|
||||||
private: SharedPath* _tailSharedPath;
|
private: SharedPath* _tailSharedPath;
|
||||||
private: QuarkMap _quarkMap;
|
private: QuarkMap _quarkMap;
|
||||||
|
@ -89,6 +91,7 @@ class SharedPath {
|
||||||
|
|
||||||
public: static char getNameSeparator();
|
public: static char getNameSeparator();
|
||||||
|
|
||||||
|
public: unsigned int getId() const { return _id; }
|
||||||
public: Instance* getHeadInstance() const {return _headInstance;};
|
public: Instance* getHeadInstance() const {return _headInstance;};
|
||||||
public: SharedPath* getTailSharedPath() const {return _tailSharedPath;};
|
public: SharedPath* getTailSharedPath() const {return _tailSharedPath;};
|
||||||
public: SharedPath* getHeadSharedPath() const;
|
public: SharedPath* getHeadSharedPath() const;
|
||||||
|
|
|
@ -54,8 +54,8 @@ extern "C" {
|
||||||
DirectGetLongAttribute(PyRoutingPad_getSourceY ,getSourceY ,PyRoutingPad,RoutingPad)
|
DirectGetLongAttribute(PyRoutingPad_getSourceY ,getSourceY ,PyRoutingPad,RoutingPad)
|
||||||
DirectGetLongAttribute(PyRoutingPad_getTargetX ,getTargetX ,PyRoutingPad,RoutingPad)
|
DirectGetLongAttribute(PyRoutingPad_getTargetX ,getTargetX ,PyRoutingPad,RoutingPad)
|
||||||
DirectGetLongAttribute(PyRoutingPad_getTargetY ,getTargetY ,PyRoutingPad,RoutingPad)
|
DirectGetLongAttribute(PyRoutingPad_getTargetY ,getTargetY ,PyRoutingPad,RoutingPad)
|
||||||
DirectSetLongAttribute(PyRoutingPad_setX ,setX ,"RoutingPad.setX",PyRoutingPad,RoutingPad)
|
// DirectSetLongAttribute(PyRoutingPad_setX ,setX ,"RoutingPad.setX",PyRoutingPad,RoutingPad)
|
||||||
DirectSetLongAttribute(PyRoutingPad_setY ,setY ,"RoutingPad.setY",PyRoutingPad,RoutingPad)
|
// DirectSetLongAttribute(PyRoutingPad_setY ,setY ,"RoutingPad.setY",PyRoutingPad,RoutingPad)
|
||||||
|
|
||||||
// Standart destroy (Attribute).
|
// Standart destroy (Attribute).
|
||||||
DBoDestroyAttribute(PyRoutingPad_destroy, PyRoutingPad)
|
DBoDestroyAttribute(PyRoutingPad_destroy, PyRoutingPad)
|
||||||
|
@ -179,6 +179,7 @@ extern "C" {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if THIS_IS_DEPRECATED
|
||||||
static PyObject* PyRoutingPad_setPosition ( PyRoutingPad *self, PyObject* args )
|
static PyObject* PyRoutingPad_setPosition ( PyRoutingPad *self, PyObject* args )
|
||||||
{
|
{
|
||||||
trace << "PyRoutingPad_setPosition ()" << endl;
|
trace << "PyRoutingPad_setPosition ()" << endl;
|
||||||
|
@ -229,6 +230,7 @@ extern "C" {
|
||||||
|
|
||||||
Py_RETURN_NONE;
|
Py_RETURN_NONE;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
static PyObject* PyRoutingPad_setExternalComponent ( PyRoutingPad *self, PyObject* args )
|
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." }
|
, { "getTargetX" , (PyCFunction)PyRoutingPad_getTargetX , METH_NOARGS , "Get the RoutingPad target X position." }
|
||||||
, { "getTargetY" , (PyCFunction)PyRoutingPad_getTargetY , METH_NOARGS , "Get the RoutingPad target Y 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." }
|
, { "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." }
|
// , { "setX" , (PyCFunction)PyRoutingPad_setX , METH_VARARGS, "Modify the RoutingPad X position." }
|
||||||
, { "setY" , (PyCFunction)PyRoutingPad_setY , METH_VARARGS, "Modify the RoutingPad Y position." }
|
// , { "setY" , (PyCFunction)PyRoutingPad_setY , METH_VARARGS, "Modify the RoutingPad Y position." }
|
||||||
, { "setPosition" , (PyCFunction)PyRoutingPad_setPosition , METH_VARARGS, "Sets the RoutingPad absolute position." }
|
// , { "setPosition" , (PyCFunction)PyRoutingPad_setPosition , METH_VARARGS, "Sets the RoutingPad absolute position." }
|
||||||
, { "setOffset" , (PyCFunction)PyRoutingPad_setOffset , METH_VARARGS, "Sets the RoutingPad relative 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." }
|
, { "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." }
|
, { "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." }
|
, { "restorePlugOccurrence", (PyCFunction)PyRoutingPad_restorePlugOccurrence, METH_VARARGS, "Revert back from an external component to the plug." }
|
||||||
, { "destroy" , (PyCFunction)PyRoutingPad_destroy , METH_NOARGS
|
, { "destroy" , (PyCFunction)PyRoutingPad_destroy , METH_NOARGS
|
||||||
, "destroy associated hurricane object, the python object remains." }
|
, "destroy associated hurricane object, the python object remains." }
|
||||||
, {NULL, NULL, 0, NULL} /* sentinel */
|
, {NULL, NULL, 0, NULL} /* sentinel */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue