* ./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:
Jean-Paul Chaput 2013-12-04 01:26:07 +00:00
parent ac85c0cca4
commit 12f595941a
35 changed files with 1596 additions and 384 deletions

View File

@ -7,49 +7,88 @@
/*! \class Entity
* \brief Occurrenceable objects root class (\b API).
*
* \section sEntityIntro Introduction
* \section secEntityIntro Introduction
*
* Entities are abstract objects representing the category of
* occurrenceable objects.
*/
/*! \function Cell* Entity::getCell () const;
* \return Returns the cell owning this entity (when the Entity is a Cell,
* the Cell itself is returned)
*/
/*! \function Box Entity::getBoundingBox () const;
* \return Returns the bounding box of the entity. It is defined as the
* smallest box enclosing the entity or its constituents.
*
* \remark For the Plugs, which are not objects of the physical layout,
* the returned envelope is a Box of null dimensions (ponctual)
* centered on the location of the master Net of the Plug, to
* which has been applied the transformation associated to the
* Instance of the Plug.
* \section secEntityId Unique Identifier
*
* Each Entity is associated with a unique identifier (see
* Entity::getId()). This identifier is used as a sorting key
* in the various IntrusiveMap throughout Hurricane to ensure
* determinism. It came as a replacement of the object's own
* address which is not suitable for this purpose.
*
* For STL container, the Entity::CompareById functor is provided.
*
* The identifier is generated from an ever incrementing counter
* on 32 bits or 64 bits, depending on the target system architecture.
* If the 32/64 bit capacity is reached an exception is thrown.
*/
//! \function unsigned int Entity::getId () const;
//! \Return Returns the unique identifier of this Entity.
//! \function Cell* Entity::getCell () const;
//! \Return Returns the cell owning this entity (when the Entity is a Cell,
//! the Cell itself is returned)
//! \function Box Entity::getBoundingBox () const;
//! \return Returns the bounding box of the entity. It is defined as the
//! smallest box enclosing the entity or its constituents.
//!
//! \remark For the Plugs, which are not objects of the physical layout,
//! the returned envelope is a Box of null dimensions (ponctual)
//! centered on the location of the master Net of the Plug, to
//! which has been applied the transformation associated to the
//! Instance of the Plug.
//! \name Entity Collection
// \{
//! \{
/*! \typedef typedef GenericCollection<Entity*> Entities;
* Generic collection representing a set of data base objects.
//! \typedef typedef GenericCollection<Entity*> Entities;
//! Generic collection representing a set of data base objects.
//!
//! \typedef typedef GenericLocator<Entity*> EntityLocator;
//! Generic locator for visiting a data base objects Collection.
//!
//! \typedef typedef GenericFilter<Entity*> EntityFilter;
//! Filter to selecting a subset of data base objects matching some criteria.
//!
//! \def for_each_entity(entity,entities)
//! Macro for visiting all objects of a data base objects collection.
//!
//! \}
/*! \class Entity::CompareById
* \brief Entity comparison criterion for STL container.
*
* This class is a functor to be used in STL containers of \c Entity*
* whenever determinism is required (as an alternative to the object's
* pointer). If a \c NULL pointer is passed as argument, it's \c id
* is computed as zero, it is a failsafe and should be avoided.
*
\code
typedef std::map<Net*,SomeValue,Entity::CompareById> NetMap;
NetMap netMap;
forEach( Net*, inet, cell->getNets() ) {
netMap.insert( std::make_pair(*inet,computeSomeValue(*inet)) );
}
for ( NetMap::iterator imap=netMap.begin() ; imap!=netMap.end() ; ++imap ) {
// Show the Net ordering
cout << (*imap).first->getId() << ":" << (*imap).first << endl;
// Do something
// ...
}
\endcode
*/
/*! \typedef typedef GenericLocator<Entity*> EntityLocator;
* Generic locator for visiting a data base objects Collection.
*/
/*! \typedef typedef GenericFilter<Entity*> EntityFilter;
* Filter to selecting a subset of data base objects matching some criteria.
*/
/*! \def for_each_entity(entity,entities)
* Macro for visiting all objects of a data base objects collection.
*/
// \}
}

View File

@ -19,6 +19,21 @@
* cell of a hierachical assembly, as well as for all cells from
* the library which are not instanciated in the current
* design).
*
*
* \section secInstancePlacement Placement Status
*
* See Instance::PlacementStatus and Instance::PlacementStatus::Code.
*
* An Instance can have three kind of placement status:
* - Instance::PlacementStatus::UNPLACED : the instance doesn't have a
* meaningful position. It shouldn't be materialized either.
* It's position therfore shouldn't be used.
* - Instance::PlacementStatus::PLACED : the instance has be placed
* manually or by an automated tool. It is movable.
* - Instance::PlacementStatus::FIXED : the instance is placed and
* mustn't be moved by automated tools. It can still be moved
* manually.
*
*
* \section secInstancePredefinedFilters Predefined filters
@ -172,4 +187,43 @@
// \}
//! \class Instance::PlacementStatus
//! \brief Instance Placement Status (\b API)
//!
//! \section secInstancePStatus Instance Placement Status
//!
//! An Instance can have three kind of placement status:
//! - Instance::PlacementStatus::UNPLACED : the instance doesn't have a
//! meaningful position. It shouldn't be materialized either.
//! It's position therfore shouldn't be used.
//! - Instance::PlacementStatus::PLACED : the instance has be placed
//! manually or by an automated tool. It is movable.
//! - Instance::PlacementStatus::FIXED : the instance is placed and
//! mustn't be moved by automated tools. It can still be moved
//! manually.
//! \function Instance::PlacementStatus::PlacementStatus( const Code& code=UNPLACED );
//! Constructor. By default the status is unplaced.
//! \function Instance::PlacementStatus::PlacementStatus( const Instance::PlacementStatus& );
//! Copy Constructor.
//! \function Instance::PlacementStatus::operator const Code& () const;
//! Type converter toward Instance::PlacementStatus::Code enum.
//! \function Instance::PlacementStatus::Code& Instance::PlacementStatus::getCode() const;
//! \return The status (Code) value.
//! \enum Instance::PlacementStatus::Code
//! Describe the various placement status an Instance can be in.
//! \var Instance::PlacementStatus::UNPLACED
//! \sa Instance::PlacementStatus.
//! \var Instance::PlacementStatus::PLACED
//! \sa Instance::PlacementStatus.
//! \var Instance::PlacementStatus::FIXED
//! \sa Instance::PlacementStatus.
}

View File

@ -151,6 +151,9 @@
* \Return the collection of net's pads.
*/
//! \function RoutingPads Net::getRoutingPads() const;
//! \Return the collection of net's RoutingPads.
/*! \function Plugs Net::getSlavePlugs() const;
* \Return the collection of plugs which have this net as master.
*

View File

@ -11,14 +11,20 @@
* The RoutingPad is a part of the trans-hierarchical mechanism.
* It allows to connect a Net from the top-level netlist to
* a plug in an Instance at any level inside the hierarchy,
* throuhg a Plug Occurrence. RoutingPad can also be created from
* through a Plug Occurrence. RoutingPad can also be created from
* Pin or Contact Occurrences.
*
* When the RoutingPad is created using a Plug Occurrence, it can
* be set afterward to any of master net external Component.
* An utility method RoutingPad::setOnBestComponent() is also
* A utility method RoutingPad::setOnBestComponent() is also
* provided to automatically set the RoutingPad on a Component
* matching criteria of surface or layer level.
*
* The position of the RoutingPad is fixed relatively from the
* instances in it's occurrence path and the entity it refers.
* The reference point used on the entity is it's center whether
* it is a segment, a pin or a plug. In the later case, it is
* the center of the cell.
*/
@ -38,6 +44,10 @@
//! \var RoutingPad::ComponentSelection
//! A mask to filter bit parts of a flag belonging to component selection.
//! \var RoutingPad::ShowWarning
//! Whether to display a warning or not while checking the instances
//! placement.
//! \typedef RoutingPad::Inherit
//! Useful for calling upon methods of the base class without
@ -53,6 +63,17 @@
//! \function RoutingPad* RoutingPad::create ( Pin* pin );
//! Special variant to create a RoutingPad from a top-level Pin.
//! \function bool RoutingPad::isPlacedOccurrence ( unsigned int flags ) const;
//! Check wether all the instances in the occurrence path are placed.
//! If at least, one is not and \c flags contains RoutingPad::ShowWarning,
//! display a warning.
//!
//! When using a RoutingPad as a reference/anchor for other physical
//! components (that is, the occurence entity is no longer a Plug),
//! it is critical that it is in a truly meaningful position.
//! And this is true \e only if all the instances in the occurrence's Path
//! have a physical position (i.e. are placed).
//! \function Occurrence RoutingPad::getOccurrence() const;
//! \return The Occurence on which we are anchored on. If a Component has been selected
//! to be the anchor, it's an Occurrence on that component which is returned,
@ -111,22 +132,10 @@
//! getY() otherwise.
//! \function void RoutingPad::translate ( const DbU::Unit& dx, const DbU::Unit& dy );
//! Translate the RoutingPad by <code>(dx,dy)</code>.
//! \function void RoutingPad::setOffset ( const DbU::Unit& dx, const DbU::Unit& dy );
//! Sets the relative position of the RoutingPad from it's anchor to <code>(dx,dy)</code>.
//! \function void RoutingPad::setX ( const DbU::Unit& x );
//! Sets the X coordinate of the RoutingPad.
//! \function void RoutingPad::setY ( const DbU::Unit& y );
//! Sets the X coordinate of the RoutingPad.
//! \function void RoutingPad::setPosition ( const DbU::Unit& x, const DbU::Unit& y );
//! Sets the absolute position of the RoutingPad to <code>(x,y)</code>.
//! \function void RoutingPad::setPosition ( const Point& position );
//! Sets the absolute position of the RoutingPad to <code>position</code>.
//! As the position of the RoutingPad is fixed relatively to the instance path
//! and the anchoring component, it cannot be translated. Thus this method do
//! nothing. The Routing pad will translate nevertheless with any translation
//! of any of the instance in it's path or the anchor.
//! \function void RoutingPad::setExternalComponent ( Component* component );
//! When the RoutingPad is anchored on a Plug, allow to set the \c component

View File

@ -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;
}

View File

@ -13,88 +13,91 @@
* <b>translation</b> and an <b>orientation</b> defined by the
* new enumeration <b>Transformation::Orientation</b> whose
* different values are described in table below.
* The <b>orientation</b> is done <em>before</em> the
* <b>translation</b>, which is to say that the orientation is
* applied in the coordinate system of the model.
*
* The transformation formula is given by:
\f[
\Large
\left \{
\begin{array}{r c l l l l l}
x' & = & (a \times x) & + & (b \times y) & + & tx \\
y' & = & (c \times x) & + & (d \times y) & + & ty
\end{array}
\right .
\f]
* where x and y are the
* coordinates of any point, x' and y' the coordinates of the
* transformed point, tx and ty the horizontal and vertical
* components of the translation and where a, b, c and d are the
* coefficients of the matrix associated to the orientation.
* See Orientation for the value of a, b, c & d.
*
* \remark <b>Rotations are done counter clock wise</b> :
* \remark <b>Rotations are done counter clock wise</b>
*/
/*! \class Transformation::Orientation
* This enumeration defines the orientation associated to a
* transformation object.
* <TABLE>
* <CAPTION>Orientation codes and associated transformation matrix</CAPTION>
* <TR>
* <TD>Name</TD><TD>Aspect</TD><TD>Code</TD><TD>Signification</TD><TD>a</TD><TD>b</TD><TD>c</TD><TD>d</TD>
* </TR>
* <TR>
* <TD>ID</TD>
* <TD>
* \image html id.gif
* </TD>
* <TD>0</TD><TD>Identity</TD>
* <TD>1</TD><TD>0</TD><TD>0</TD><TD>1</TD>
* </TR>
* <TR>
* <TD>R1</TD>
* <TD>
* \image html r1.gif
* </TD>
* <TD>1</TD><TD>Simple rotation (90°)</TD>
* <TD>0</TD><TD>-1</TD><TD>1</TD><TD>0</TD>
* </TR>
* <TR>
* <TD>R2</TD>
* <TD>
* \image html r2.gif
* </TD>
* <TD>2</TD><TD>Double rotation (180°)</TD>
* <TD>-1</TD><TD>0</TD><TD>0</TD><TD>-1</TD>
* </TR>
* <TR>
* <TD>R3</TD>
* <TD>
* \image html r3.gif
* </TD>
* <TD>3</TD><TD>Triple rotation (270°)</TD>
* <TD>0</TD><TD>1</TD><TD>-1</TD><TD>0</TD>
* </TR>
* <TR>
* <TD>MX</TD>
* <TD>
* \image html mx.gif
* </TD>
* <TD>4</TD><TD>Horizontal symetry (Mirror X)</TD>
* <TD>-1</TD><TD>0</TD><TD>0</TD><TD>1</TD>
* </TR>
* <TR>
* <TD>XR</TD>
* <TD>
* \image html xr.gif
* </TD>
* <TD>5</TD><TD>Horizontal symetry followed by a 90° rotation</TD>
* <TD>0</TD><TD>-1</TD><TD>-1</TD><TD>0</TD>
* </TR>
* <TR>
* <TD>MY</TD>
* <TD>
* \image html my.gif
* </TD>
* <TD>6</TD><TD>Vertical symetry (Mirror Y)</TD>
* <TD>1</TD><TD>0</TD><TD>0</TD><TD>-1</TD>
* </TR>
* <TR>
* <TD>YR</TD>
* <TD>
* \image html yr.gif
* </TD>
* <TD>7</TD><TD>Vertical symetry followed by a 90° rotation</TD>
* <TD>0</TD><TD>1</TD><TD>1</TD><TD>0</TD>
* </TR>
* </TABLE>
*
* The transformation formula is given by : x' = (a * x) + (b *
* y) + tx y' = (c * x) + (d * y) + ty where x and y are the
* <table>
* <caption>Orientation codes and associated transformation matrix</caption>
* <tr>
* <td><center>Name</center>
* <td><center>Aspect</center>
* <td><center>Code</center>
* <td><center>Signification</center>
* <td width="6%"><center>a</center>
* <td width="6%"><center>b</center>
* <td width="6%"><center>c</center>
* <td width="6%"><center>d</center>
* <tr>
* <td><center><b>ID</b></center> <td>\image html transf-ID.png ""
* <td> <center><b>0</b></center> <td> Identity
* <td> <center>1</center> <td> <center>0</center> <td> <center>0</center> <td> <center>1</center>
* <tr>
* <td><center><b>R1</b></center> <td>\image html transf-R1.png ""
* <td> <center><b>1</b></center> <td> Simple rotation (90°)
* <td> <center>0</center> <td> <center>-1</center> <td> <center>1</center> <td> <center>0</center>
* <tr>
* <td><center><b>R2</b></center> <td>\image html transf-R2.png ""
* <td> <center><b>2</b></center> <td> Double rotation (180°)
* <td> <center>-1</center> <td> <center>0</center> <td> <center>0</center> <td> <center>-1</center>
* <tr>
* <td><center><b>R3</b></center> <td>\image html transf-R3.png ""
* <td><center><b>3</b></center><td>Triple rotation (270°)
* <td><center>0</center><td><center>1</center><td><center>-1</center><td><center>0</center>
* <tr>
* <td><center><b>MX</b></center> <td>\image html transf-MX.png ""
* <td> <center><b>4</b></center> <td>Horizontal symetry (Mirror X)
* <td> <center>-1 </center><td> <center>0 </center><td> <center>0 </center><td> <center>1</center>
* <tr>
* <td><center><b>XR</b></center> <td>\image html transf-XR.png ""
* <td><center><b>5</b></center><td>Horizontal symetry followed by a 90° rotation
* <td> <center>0</center> <td> <center>-1</center> <td> <center>-1</center> <td> <center>0</center>
* <tr>
* <td><center><b>MY</b></center><td>\image html transf-MY.png ""
* <td><center><b>6</b></center><td>Vertical symetry (Mirror Y)
* <td> <center>1</center> <td> <center>0</center> <td> <center>0</center> <td> <center>-1</center>
* <tr>
* <td><center><b>YR</b></center> <td>\image html transf-YR.png ""
* <td><center><b>7</b></center><td>Vertical symetry followed by a 90° rotation
* <td> <center>0</center> <td> <center>1</center> <td> <center>1</center> <td> <center>0</center>
* </table>
*
* The transformation formula is given by:
\f[
\Large
\left \{
\begin{array}{r c l l l l l}
x' & = & (a \times x) & + & (b \times y) & + & tx \\
y' & = & (c \times x) & + & (d \times y) & + & ty
\end{array}
\right .
\f]
* where x and y are the
* coordinates of any point, x' and y' the coordinates of the
* transformed point, tx and ty the horizontal and vertical
* components of the translation and where a, b, c and d are the

View File

@ -4,7 +4,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>Hurricane Documentation</title>
<link href="ASIM.css" rel="stylesheet" type="text/css">
<link href="SoC.css" rel="stylesheet" type="text/css">
</head>
<h1 id="pagetop" class="header">Hurricane Documentation</h1>
<center class="header">

View File

@ -4,7 +4,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>Hurricane Documentation</title>
<link href="ASIM.css" rel="stylesheet" type="text/css">
<link href="SoC.css" rel="stylesheet" type="text/css">
</head>
<h1 class="header">Hurricane Documentation</h1>
<center class="header">

View File

@ -947,7 +947,7 @@ HTML_FOOTER = footer.html
# the style sheet file to the HTML output directory, so don't put your own
# stylesheet in the HTML output directory as well, or it will be erased!
HTML_STYLESHEET = ASIM.css
HTML_STYLESHEET = SoC.css
# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
# files or namespaces will be aligned in HTML using tables. If set to

View File

@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>Hurricane Documentation</title>
<link href="ASIM.css" rel="stylesheet" type="text/css">
<link href="SoC.css" rel="stylesheet" type="text/css">
</head>
<h1 id="pagetop" class="header">Hurricane Documentation</h1>
<center class="header">

View File

@ -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;
}

View File

@ -4,7 +4,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>Hurricane Documentation</title>
<link href="ASIM.css" rel="stylesheet" type="text/css">
<link href="SoC.css" rel="stylesheet" type="text/css">
</head>
<h1 class="header">Hurricane Documentation</h1>
<center class="header">

View File

@ -820,7 +820,7 @@ HTML_FOOTER = footer.html
# the style sheet file to the HTML output directory, so don't put your own
# stylesheet in the HTML output directory as well, or it will be erased!
HTML_STYLESHEET = ASIM.css
HTML_STYLESHEET = SoC.css
# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
# files or namespaces will be aligned in HTML using tables. If set to

View File

@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>Hurricane Viewer Documentation</title>
<link href="ASIM.css" rel="stylesheet" type="text/css">
<link href="SoC.css" rel="stylesheet" type="text/css">
</head>
<h1 id="pagetop" class="header">Hurricane Viewer Documentation</h1>
<center class="header">

View File

@ -19,6 +19,7 @@
//#define TEST_INTRUSIVESET
#include "hurricane/SharedName.h"
#include "hurricane/Cell.h"
#include "hurricane/DataBase.h"
#include "hurricane/Library.h"
@ -215,7 +216,7 @@ void Cell::flattenNets(bool buildRings)
}
forEach ( Occurrence, iplugOccurrence, hyperNet.getLeafPlugOccurrences() ) {
currentRP = RoutingPad::create ( net, *iplugOccurrence, RoutingPad::BiggestArea );
currentRP = RoutingPad::create ( net, *iplugOccurrence, RoutingPad::BiggestArea|RoutingPad::ShowWarning );
currentRP->materialize ();
if ( buildRings ) {
if ( previousRP ) {
@ -409,10 +410,10 @@ Name Cell::InstanceMap::_getKey(Instance* instance) const
return instance->getName();
}
unsigned Cell::InstanceMap::_getHashValue(Name name) const
unsigned int Cell::InstanceMap::_getHashValue(Name name) const
// *******************************************************
{
return ( (unsigned int)( (unsigned long)name._getSharedName() ) ) / 8;
return name._getSharedName()->getId() / 8;
}
Instance* Cell::InstanceMap::_getNextElement(Instance* instance) const
@ -442,7 +443,7 @@ Cell::SlaveInstanceSet::SlaveInstanceSet()
unsigned Cell::SlaveInstanceSet::_getHashValue(Instance* slaveInstance) const
// **************************************************************************
{
return ( (unsigned int)( (unsigned long)slaveInstance ) ) / 8;
return slaveInstance->getId() / 8;
}
Instance* Cell::SlaveInstanceSet::_getNextElement(Instance* slaveInstance) const
@ -478,7 +479,7 @@ Name Cell::NetMap::_getKey(Net* net) const
unsigned Cell::NetMap::_getHashValue(Name name) const
// **************************************************
{
return ( (unsigned int)( (unsigned long)name._getSharedName() ) ) / 8;
return (unsigned int)name._getSharedName()->getId() / 8;
}
Net* Cell::NetMap::_getNextElement(Net* net) const
@ -513,7 +514,7 @@ Name Cell::PinMap::_getKey(Pin* pin) const
unsigned Cell::PinMap::_getHashValue(Name name) const
// **************************************************
{
return ( (unsigned int)( (unsigned long)name._getSharedName() ) ) / 8;
return (unsigned int)name._getSharedName()->getId() / 8;
}
Pin* Cell::PinMap::_getNextElement(Pin* pin) const
@ -548,7 +549,7 @@ const Layer* Cell::SliceMap::_getKey(Slice* slice) const
unsigned Cell::SliceMap::_getHashValue(const Layer* layer) const
// *************************************************************
{
return ( (unsigned int)( (unsigned long)layer ) ) / 8;
return (unsigned int)layer->getMask() / 8;
}
Slice* Cell::SliceMap::_getNextElement(Slice* slice) const
@ -578,7 +579,7 @@ Cell::MarkerSet::MarkerSet()
unsigned Cell::MarkerSet::_getHashValue(Marker* marker) const
// **********************************************************
{
return ( (unsigned int)( (unsigned long)marker ) ) / 8;
return (unsigned int)marker->getId() / 8;
}
Marker* Cell::MarkerSet::_getNextElement(Marker* marker) const

View File

@ -17,6 +17,8 @@
// not, see <http://www.gnu.org/licenses/>.
// ****************************************************************************************************
#include <limits>
#include "hurricane/Error.h"
#include "hurricane/Entity.h"
#include "hurricane/Quark.h"
#include "hurricane/Cell.h"
@ -31,11 +33,19 @@ namespace Hurricane {
// Entity implementation
// ****************************************************************************************************
Entity::Entity()
// *************
: Inherit()
{
}
unsigned int Entity::_idCounter = 0;
Entity::Entity()
: Inherit()
, _id(_idCounter++)
{
if (_idCounter == std::numeric_limits<unsigned int>::max()) {
throw Error( "Entity::Entity(): Identifier counter has reached it's limit (%d bits)."
, std::numeric_limits<unsigned int>::digits );
}
}
void Entity::_preDestroy()
@ -85,7 +95,9 @@ Entity::Entity()
string Entity::_getString() const
// ******************************
{
return Inherit::_getString();
string s = Inherit::_getString();
s.insert(1, "id:"+getString(_id)+" ");
return s;
}
Record* Entity::_getRecord() const
@ -93,6 +105,7 @@ Record* Entity::_getRecord() const
{
Record* record = Inherit::_getRecord();
if (record) {
record->add(getSlot("_id", _id));
Occurrence occurrence = Occurrence(this);
if (occurrence.hasProperty())
record->add(getSlot("Occurrence", occurrence));

View File

@ -19,12 +19,7 @@
// License along with Hurricane. If not, see
// <http://www.gnu.org/licenses/>.
//
// ===================================================================
//
// $Id$
//
// x-----------------------------------------------------------------x
// | |
// +-----------------------------------------------------------------+
// | H U R R I C A N E |
// | V L S I B a c k e n d D a t a - B a s e |
// | |
@ -32,10 +27,7 @@
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Module : "./Error.cpp" |
// | *************************************************************** |
// | U p d a t e s |
// | |
// x-----------------------------------------------------------------x
// +-----------------------------------------------------------------+
#include <execinfo.h>

View File

@ -17,6 +17,7 @@
// not, see <http://www.gnu.org/licenses/>.
// ****************************************************************************************************
#include "hurricane/SharedPath.h"
#include "hurricane/Instance.h"
#include "hurricane/Cell.h"
#include "hurricane/Net.h"
@ -639,7 +640,7 @@ const Net* Instance::PlugMap::_getKey(Plug* plug) const
unsigned Instance::PlugMap::_getHashValue(const Net* masterNet) const
// ******************************************************************
{
return ( (unsigned int)( (unsigned long)masterNet ) ) / 8;
return masterNet->getId() / 8;
}
Plug* Instance::PlugMap::_getNextElement(Plug* plug) const
@ -675,7 +676,7 @@ const SharedPath* Instance::SharedPathMap::_getKey(SharedPath* sharedPath) const
unsigned Instance::SharedPathMap::_getHashValue(const SharedPath* tailSharedPath) const
// ************************************************************************************
{
return ( (unsigned int)( (unsigned long)tailSharedPath ) ) / 8;
return (tailSharedPath) ? (tailSharedPath->getId()/8) : 0;
}
SharedPath* Instance::SharedPathMap::_getNextElement(SharedPath* sharedPath) const

View File

@ -17,6 +17,7 @@
// not, see <http://www.gnu.org/licenses/>.
// ****************************************************************************************************
#include "hurricane/SharedName.h"
#include "hurricane/Library.h"
#include "hurricane/DataBase.h"
#include "hurricane/Cell.h"
@ -163,7 +164,7 @@ Name Library::LibraryMap::_getKey(Library* library) const
unsigned Library::LibraryMap::_getHashValue(Name name) const
// *********************************************************
{
return ( (unsigned int)( (unsigned long)name._getSharedName() ) ) / 8;
return name._getSharedName()->getId() / 8;
}
Library* Library::LibraryMap::_getNextElement(Library* library) const
@ -199,7 +200,7 @@ Name Library::CellMap::_getKey(Cell* cell) const
unsigned Library::CellMap::_getHashValue(Name name) const
// ******************************************************
{
return ( (unsigned int)( (unsigned long)name._getSharedName() ) ) / 8;
return name._getSharedName()->getId() / 8;
}
Cell* Library::CellMap::_getNextElement(Cell* cell) const

View File

@ -770,7 +770,7 @@ Net::ComponentSet::ComponentSet()
unsigned Net::ComponentSet::_getHashValue(Component* component) const
// ******************************************************************
{
return ( (unsigned int)( (unsigned long)component ) ) / 8;
return component->getId() / 8;
}
Component* Net::ComponentSet::_getNextElement(Component* component) const
@ -800,7 +800,7 @@ Net::RubberSet::RubberSet()
unsigned Net::RubberSet::_getHashValue(Rubber* rubber) const
// *********************************************************
{
return ( (unsigned int)( (unsigned long)rubber ) ) / 8;
return rubber->getId() / 8;
}
Rubber* Net::RubberSet::_getNextElement(Rubber* rubber) const

View File

@ -37,7 +37,7 @@ Pin::Pin(Net* net, const Name& name, const AccessDirection& accessDirection, con
_nextOfCellPinMap(NULL)
{
if (getCell()->getPin(name))
throw Error("Can't create " + _TName("Pin") + " : already exists");
throw Error("Can't create " + _TName("Pin") + " <" + getString(name) + "> : already exists");
}

View File

@ -464,7 +464,7 @@ void QuadTree::_explode()
_urChild = new QuadTree(this);
_llChild = new QuadTree(this);
_lrChild = new QuadTree(this);
set<Go*> goSet;
set<Go*,Entity::CompareById> goSet;
for_each_go(go, _goSet.getElements()) {
_goSet._remove(go);
go->_quadTree = NULL;
@ -539,7 +539,7 @@ QuadTree::GoSet::GoSet()
unsigned QuadTree::GoSet::_getHashValue(Go* go) const
// **************************************************
{
return ( (unsigned int)( (unsigned long)go ) ) / 8;
return go->getId() / 8;
}
Go* QuadTree::GoSet::_getNextElement(Go* go) const

View File

@ -1,7 +1,7 @@
// -*- C++ -*-
//
// Copyright (c) BULL S.A. 2000-2010, All Rights Reserved
// Copyright (c) BULL S.A. 2000-2013, All Rights Reserved
//
// This file is part of Hurricane.
//
@ -23,8 +23,7 @@
//
// $Id$
//
// x-----------------------------------------------------------------x
// | |
// +-----------------------------------------------------------------+
// | H U R R I C A N E |
// | V L S I B a c k e n d D a t a - B a s e |
// | |
@ -32,12 +31,10 @@
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Header : "./RoutingPad.h" |
// | *************************************************************** |
// | U p d a t e s |
// | |
// x-----------------------------------------------------------------x
// +-----------------------------------------------------------------+
#include <sstream>
#include "hurricane/Net.h"
#include "hurricane/NetExternalComponents.h"
#include "hurricane/Layer.h"
@ -48,17 +45,18 @@
#include "hurricane/Vertical.h"
#include "hurricane/Cell.h"
#include "hurricane/Instance.h"
#include "hurricane/Warning.h"
#include "hurricane/Error.h"
#include "hurricane/RoutingPad.h"
namespace Hurricane {
using std::ostringstream;
RoutingPad::RoutingPad ( Net* net, const Point& p, Occurrence occurrence )
RoutingPad::RoutingPad ( Net* net, Occurrence occurrence )
: Inherit (net)
, _x (p.getX())
, _y (p.getY())
, _occurrence(occurrence)
{ }
@ -71,23 +69,23 @@ namespace Hurricane {
Plug* plug = NULL;
Pin* pin = NULL;
Contact* contact = NULL;
Point position;
if ( (plug = dynamic_cast<Plug*>(occurrence.getEntity()) ) ) {
position = occurrence.getPath().getTransformation().getPoint( plug->getPosition() );
} else if ( (pin = dynamic_cast<Pin*>(occurrence.getEntity()) ) ) {
position = occurrence.getPath().getTransformation().getPoint( pin->getPosition() );
} else if ( (contact = dynamic_cast<Contact*>(occurrence.getEntity()) ) ) {
position = occurrence.getPath().getTransformation().getPoint( contact->getPosition() );
if ( (plug = dynamic_cast<Plug*>(occurrence.getEntity()) ) == NULL) {
if ( (pin = dynamic_cast<Pin*>(occurrence.getEntity()) ) == NULL) {
contact = dynamic_cast<Contact*>(occurrence.getEntity());
}
}
if ( (not plug) and (not pin) and (not contact) )
throw Error ("Can't create RoutingPad : Plug Pin, or Contact Occurrence *required*");
throw Error ("Can't create RoutingPad : Plug, Pin, or Contact Occurrence *required*");
RoutingPad* routingPad = new RoutingPad(net, position, occurrence);
RoutingPad* routingPad = new RoutingPad( net, occurrence );
routingPad->_postCreate();
if ( plug and (flags & ComponentSelection) ) routingPad->setOnBestComponent(flags);
if ( plug and (flags & ComponentSelection) )
routingPad->setOnBestComponent( flags );
if (not plug)
routingPad->isPlacedOccurrence( flags );
return routingPad;
}
@ -117,8 +115,33 @@ namespace Hurricane {
}
DbU::Unit RoutingPad::getX () const { return _x; }
DbU::Unit RoutingPad::getY () const { return _y; }
bool RoutingPad::isPlacedOccurrence ( unsigned int flags ) const
{
vector<Instance*> unplaceds;
forEach( Instance*, iinstance, _occurrence.getPath().getInstances() ) {
if (iinstance->getPlacementStatus() == Instance::PlacementStatus::UNPLACED) {
unplaceds.push_back( *iinstance );
}
}
if (not unplaceds.empty() and (flags & ShowWarning)) {
ostringstream message;
message << "There are unplaced(s) instances in " << this << ":";
for ( size_t i=0 ; i<unplaceds.size() ; ++i ) {
message << "\n * Instance <" << unplaceds[i]->getName() << ":"
<< unplaceds[i]->getMasterCell()->getName() << "> in Cell <"
<< unplaceds[i]->getCell()->getName() << ">";
;
}
cerr << Warning( message.str() ) << endl;;
}
return not unplaceds.empty();
}
DbU::Unit RoutingPad::getX () const { return getPosition().getX(); }
DbU::Unit RoutingPad::getY () const { return getPosition().getY(); }
DbU::Unit RoutingPad::getSourceX () const { return getSourcePosition().getX(); }
DbU::Unit RoutingPad::getSourceY () const { return getSourcePosition().getY(); }
DbU::Unit RoutingPad::getTargetX () const { return getTargetPosition().getX(); }
@ -148,17 +171,28 @@ namespace Hurricane {
const Layer* RoutingPad::getLayer () const
{
Component* component = _getEntityAsComponent();
if ( component ) return component->getLayer ();
if (component) return component->getLayer ();
return NULL;
}
Point RoutingPad::getPosition () const
{
Component* component = _getEntityAsComponent();
if (component)
return _occurrence.getPath().getTransformation().getPoint( component->getCenter() );
return Point();
}
Point RoutingPad::getSourcePosition () const
{
Segment* segment = _getEntityAsSegment();
if ( segment )
if ( segment ) {
return _occurrence.getPath().getTransformation().getPoint ( segment->getSourcePosition() );
}
return getPosition();
}
@ -186,25 +220,7 @@ namespace Hurricane {
void RoutingPad::translate(const DbU::Unit& dx, const DbU::Unit& dy)
{
if ( (dx != 0) or (dy != 0) ) {
invalidate(true);
_x += dx;
_y += dy;
}
}
void RoutingPad::setX ( const DbU::Unit& x ) { setPosition(x, getY()); }
void RoutingPad::setY ( const DbU::Unit& y ) { setPosition(getX(), y); }
void RoutingPad::setPosition ( const DbU::Unit& x, const DbU::Unit& y ) { setOffset(x, y); }
void RoutingPad::setPosition ( const Point& position) { setPosition(position.getX(), position.getY()); }
void RoutingPad::setOffset ( const DbU::Unit& x, const DbU::Unit& y )
{
invalidate(true);
_x = x;
_y = y;
// Does nothing. The position is fixed and relative to the instance path.
}
@ -237,8 +253,6 @@ namespace Hurricane {
{
Record* record = Inherit::_getRecord();
if ( record ) {
record->add(getSlot("_x" , &_x ));
record->add(getSlot("_y" , &_y ));
record->add(getSlot("_occurrence",_occurrence));
}
return record;
@ -275,21 +289,6 @@ namespace Hurricane {
_occurrence.getMasterCell()->_removeSlaveEntity(_occurrence.getEntity(),this);
_occurrence = Occurrence(component,Path(plugOccurrence.getPath(),plug->getInstance()));
Point position = _occurrence.getPath().getTransformation().getPoint ( component->getPosition() );
Horizontal* horizontal = dynamic_cast<Horizontal*>(component);
if ( horizontal ) {
setX ( 0 );
setY ( position.getY() );
} else {
Vertical* vertical = dynamic_cast<Vertical*>(component);
if ( vertical ) {
setX ( position.getX() );
setY ( 0 );
} else
setPosition ( position );
}
_occurrence.getMasterCell()->_addSlaveEntity(_occurrence.getEntity(),this);
if (!isMaterialized()) materialize();
@ -320,8 +319,6 @@ namespace Hurricane {
if (isMaterialized()) unmaterialize();
_occurrence=getPlugOccurrence();
setPosition ( _occurrence.getPath().getTransformation().getPoint
( dynamic_cast<Component*>(_occurrence.getEntity())->getPosition() ) );
}
@ -359,6 +356,7 @@ namespace Hurricane {
,getString(plug->getInstance ()).c_str() );
setExternalComponent ( bestComponent );
if (flags & ShowWarning) isPlacedOccurrence( flags );
return bestComponent;
}

View File

@ -17,6 +17,8 @@
// not, see <http://www.gnu.org/licenses/>.
// ****************************************************************************************************
#include <limits>
#include "hurricane/Error.h"
#include "hurricane/SharedName.h"
namespace Hurricane {
@ -27,17 +29,25 @@ namespace Hurricane {
// SharedName implementation
// ****************************************************************************************************
SharedName::SharedNameMap* SharedName::_SHARED_NAME_MAP = NULL;
SharedName::SharedNameMap* SharedName::_SHARED_NAME_MAP = NULL;
unsigned int SharedName::_idCounter = 0;
SharedName::SharedName(const string& s)
// ************************************
: _count(0),
_string(s)
SharedName::SharedName ( const string& name )
: _id (_idCounter++)
, _count (0)
, _string(name)
{
if (!_SHARED_NAME_MAP) _SHARED_NAME_MAP = new SharedNameMap();
(*_SHARED_NAME_MAP)[&_string] = this;
if (_idCounter == std::numeric_limits<unsigned int>::max()) {
throw Error( "SharedName::SharedName(): Identifier counter has reached it's limit (%d bits)."
, std::numeric_limits<unsigned int>::digits );
}
}
SharedName::~SharedName()
// **********************
{
@ -66,8 +76,8 @@ Record* SharedName::_getRecord() const
// *****************************
{
Record* record = new Record(getString(this));
record->add(getSlot("Count", &_count));
record->add(getSlot("String", &_string));
record->add(getSlot("_count", &_count));
record->add(getSlot("_string", &_string));
return record;
}

View File

@ -17,6 +17,7 @@
// not, see <http://www.gnu.org/licenses/>.
// ****************************************************************************************************
#include <limits>
#include "hurricane/SharedPath.h"
#include "hurricane/Instance.h"
#include "hurricane/Cell.h"
@ -30,6 +31,7 @@ namespace Hurricane {
// SharedPath_Instances declaration
// ****************************************************************************************************
class SharedPath_Instances : public Collection<Instance*> {
// ******************************************************
@ -96,14 +98,22 @@ class SharedPath_Instances : public Collection<Instance*> {
// ****************************************************************************************************
static char NAME_SEPARATOR = '.';
unsigned int SharedPath::_idCounter = 0;
SharedPath::SharedPath(Instance* headInstance, SharedPath* tailSharedPath)
// ***********************************************************************
: _headInstance(headInstance),
: _id(_idCounter++),
_headInstance(headInstance),
_tailSharedPath(tailSharedPath),
_quarkMap(),
_nextOfInstanceSharedPathMap(NULL)
{
if (_idCounter == std::numeric_limits<unsigned int>::max()) {
throw Error( "SharedName::SharedName(): Identifier counter has reached it's limit (%d bits)."
, std::numeric_limits<unsigned int>::digits );
}
if (!_headInstance)
throw Error("Can't create " + _TName("SharedPath") + " : null head instance");
@ -252,7 +262,7 @@ const Entity* SharedPath::QuarkMap::_getKey(Quark* quark) const
unsigned SharedPath::QuarkMap::_getHashValue(const Entity* entity) const
// *********************************************************************
{
return ( (unsigned int)( (unsigned long)entity ) ) / 8;
return entity->getId() / 8;
}
Quark* SharedPath::QuarkMap::_getNextElement(Quark* quark) const

View File

@ -17,6 +17,7 @@
// not, see <http://www.gnu.org/licenses/>.
// ****************************************************************************************************
#include "hurricane/SharedName.h"
#include "hurricane/Technology.h"
#include "hurricane/DataBase.h"
#include "hurricane/Layer.h"
@ -411,7 +412,7 @@ Name Technology::LayerMap::_getKey(Layer* layer) const
unsigned Technology::LayerMap::_getHashValue(Name name) const
// **********************************************************
{
return ( (unsigned int)( (unsigned long)name._getSharedName() ) ) / 8;
return name._getSharedName()->getId() / 8;
}
Layer* Technology::LayerMap::_getNextElement(Layer* layer) const

View File

@ -199,10 +199,10 @@ namespace Hurricane {
string Timer::getStringMemory ( size_t size ) {
string s;
if ( size >> 30 ) s = getString(size>>30) + "Mo";
else if ( size >> 20 ) s = getString(size>>20) + "Mo";
else if ( size >> 10 ) s = getString(size>>10) + "Ko";
else s = getString(size) + " octets";
if ( size >> 30 ) s = getString(size>>30) + "Mb";
else if ( size >> 20 ) s = getString(size>>20) + "Mb";
else if ( size >> 10 ) s = getString(size>>10) + "Kb";
else s = getString(size) + " bytes";
return s;
}

View File

@ -838,7 +838,7 @@ class ForEachIterator {
inline Element operator-> ();
inline ForEachIterator& operator++ (int);
public:
GenericCollection<Element>& collection;
GenericCollection<Element> collection;
GenericLocator<Element> locator;
Element element;
};

View File

@ -20,58 +20,53 @@
#ifndef HURRICANE_ENTITY
#define HURRICANE_ENTITY
#include <functional>
#include "hurricane/DBo.h"
#include "hurricane/Entities.h"
#include "hurricane/Box.h"
namespace Hurricane {
class Cell;
class Quark;
class SharedPath;
class Cell;
class Quark;
class SharedPath;
// ****************************************************************************************************
// Entity declaration
// ****************************************************************************************************
class Entity : public DBo {
// **********************
# if !defined(__DOXYGEN_PROCESSOR__)
// Types
// *****
public: typedef DBo Inherit;
// Constructors
// ************
protected: Entity();
// Others
// ******
protected: virtual void _preDestroy();
public: virtual string _getString() const;
public: virtual Record* _getRecord() const;
public: Quark* _getQuark(SharedPath* sharedPath = NULL) const;
# endif
// Accessors
// *********
public: virtual Cell* getCell() const = 0;
public: virtual Box getBoundingBox() const = 0;
};
// -------------------------------------------------------------------
// Class : "Hurricane::Entity".
} // End of Hurricane namespace.
class Entity : public DBo
{
public:
typedef DBo Inherit;
public:
inline unsigned int getId () const;
virtual Cell* getCell () const = 0;
virtual Box getBoundingBox() const = 0;
virtual string _getString () const;
virtual Record* _getRecord () const;
Quark* _getQuark ( SharedPath* sharedPath = NULL ) const;
protected:
Entity ();
virtual void _preDestroy ();
private:
static unsigned int _idCounter;
unsigned int _id;
public:
struct CompareById : public std::binary_function<const Entity*,const Entity*,bool> {
inline bool operator() ( const Entity* lhs, const Entity* rhs ) const;
};
};
inline unsigned int Entity::getId () const { return _id; }
inline bool Entity::CompareById::operator() ( const Entity* lhs, const Entity* rhs ) const
{ return ((lhs)?lhs->getId():0) < ((rhs)?rhs->getId():0); }
} // Hurricane namespace.
INSPECTOR_P_SUPPORT(Hurricane::Entity);
@ -79,7 +74,6 @@ INSPECTOR_P_SUPPORT(Hurricane::Entity);
#endif // HURRICANE_ENTITY
// ****************************************************************************************************
// Copyright (c) BULL S.A. 2000-2009, All Rights Reserved
// ****************************************************************************************************

View File

@ -95,10 +95,6 @@ namespace Hurricane {
inline void _setExtractMask ( const Mask& extractMask );
inline void _setNextOfTechnologyLayerMap ( Layer* layer );
virtual void _onDbuChange ( float scale );
public:
struct MaskCompare {
inline bool operator () ( const Layer*, const Layer* ) const;
};
private:
// Internal: Attributes
@ -121,6 +117,11 @@ namespace Hurricane {
);
virtual void _postCreate ();
virtual void _preDestroy ();
public:
struct CompareByMask : public binary_function<const Layer*,const Layer*,bool> {
inline bool operator() ( const Layer* lhs, const Layer* rhs ) const;
};
};
@ -140,8 +141,8 @@ namespace Hurricane {
inline void Layer::_setExtractMask ( const Mask& extractMask ) { _extractMask = extractMask; }
inline void Layer::_setNextOfTechnologyLayerMap ( Layer* layer ) { _nextOfTechnologyLayerMap = layer; }
inline bool Layer::MaskCompare::operator () ( const Layer* layer1, const Layer* layer2 ) const
{ return layer1->getMask() < layer2->getMask(); }
inline bool Layer::CompareByMask::operator() ( const Layer* lhs, const Layer* rhs ) const
{ return (lhs?lhs->getMask():Layer::Mask()) < (rhs?rhs->getMask():Layer::Mask()); }

View File

@ -20,6 +20,7 @@
#ifndef HURRICANE_NET
#define HURRICANE_NET
#include <functional>
#include "hurricane/Entity.h"
#include "hurricane/Nets.h"
#include "hurricane/Component.h"
@ -233,10 +234,6 @@ class Net : public Entity {
};
} // End of Hurricane namespace.

View File

@ -1,7 +1,7 @@
// -*- C++ -*-
//
// Copyright (c) BULL S.A. 2000-2010, All Rights Reserved
// Copyright (c) BULL S.A. 2000-2013, All Rights Reserved
//
// This file is part of Hurricane.
//
@ -23,23 +23,19 @@
//
// $Id$
//
// x-----------------------------------------------------------------x
// | |
// +-----------------------------------------------------------------+
// | H U R R I C A N E |
// | V L S I B a c k e n d D a t a - B a s e |
// | |
// | Authors : Hugo Clement & Marek Sroka |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Header : "./hurricane/RegularLayer.h" |
// | *************************************************************** |
// | U p d a t e s |
// | |
// x-----------------------------------------------------------------x
// | C++ Header : "./hurricane/RoutingPad.h" |
// +-----------------------------------------------------------------+
#ifndef __HURRICANE_ROUTINGPAD__
#define __HURRICANE_ROUTINGPAD__
#ifndef HURRICANE_ROUTINGPAD_H
#define HURRICANE_ROUTINGPAD_H
#include "hurricane/Component.h"
#include "hurricane/Occurrence.h"
@ -54,16 +50,18 @@ namespace Hurricane {
class RoutingPad : public Component {
public:
typedef Component Inherit;
enum Flags { BiggestArea =0x1
, HighestLayer =0x2
, LowestLayer =0x4
enum Flags { BiggestArea = 0x0001
, HighestLayer = 0x0002
, LowestLayer = 0x0004
, ComponentSelection=BiggestArea|HighestLayer|LowestLayer
, ShowWarning = 0x0008
};
public:
static RoutingPad* create ( Net*, Occurrence, unsigned int flags=0 );
static RoutingPad* create ( Pin* );
public:
// Accessors.
bool isPlacedOccurrence ( unsigned int flags ) const;
inline Occurrence getOccurrence () const { return _occurrence; };
Occurrence getPlugOccurrence ();
virtual const Layer* getLayer () const;
@ -72,6 +70,7 @@ namespace Hurricane {
virtual Box getBoundingBox () const;
virtual Box getBoundingBox ( const BasicLayer* ) const;
virtual Point getCenter () const;
virtual Point getPosition () const;
Point getSourcePosition () const;
Point getTargetPosition () const;
DbU::Unit getSourceX () const;
@ -80,11 +79,6 @@ namespace Hurricane {
DbU::Unit getTargetY () const;
// Mutators.
virtual void translate ( const DbU::Unit& dx, const DbU::Unit& dy );
void setX ( const DbU::Unit& );
void setY ( const DbU::Unit& );
void setPosition ( const DbU::Unit& x, const DbU::Unit& y );
void setPosition ( const Point& position );
void setOffset ( const DbU::Unit& dx, const DbU::Unit& dy );
void setExternalComponent ( Component* );
Component* setOnBestComponent ( unsigned int flags );
void restorePlugOccurrence ();
@ -98,11 +92,9 @@ namespace Hurricane {
virtual void _postCreate ();
virtual void _preDestroy ();
private:
RoutingPad ( Net*, const Point&, Occurrence occurrence=Occurrence() );
RoutingPad ( Net*, Occurrence occurrence=Occurrence() );
private:
// Attributes.
DbU::Unit _x;
DbU::Unit _y;
Occurrence _occurrence;
};
@ -112,4 +104,4 @@ namespace Hurricane {
INSPECTOR_P_SUPPORT(Hurricane::RoutingPad);
#endif // __HURRICANE_ROUTINGPAD__
#endif // HURRICANE_ROUTINGPAD_H

View File

@ -25,73 +25,43 @@
namespace Hurricane {
// -------------------------------------------------------------------
// Class : "Hurricane::SharedName".
// ****************************************************************************************************
// SharedName declaration
// ****************************************************************************************************
class SharedName {
// *************
class SharedName {
friend class Name;
// Friends
// *******
public:
inline unsigned int getId () const;
const string& _getSString () const { return _string; };
string _getTypeName () const { return _TName("SharedName"); };
string _getString () const;
Record* _getRecord () const;
private:
SharedName ( const string& );
SharedName ( const SharedName& );
~SharedName ();
SharedName& operator= ( const SharedName& );
void capture ();
void release ();
friend class Name;
private:
struct SharedNameMapComparator {
bool operator() ( string* lhs, string* rhs ) const;
};
typedef map<string*, SharedName*, SharedNameMapComparator> SharedNameMap;
// Types
// *****
private:
static SharedNameMap* _SHARED_NAME_MAP;
static unsigned int _idCounter;
unsigned int _id;
int _count;
string _string;
};
private: struct SharedNameMapComparator {
// ************************************
bool operator()(string* s1, string* s2) const;
};
private: typedef map<string*, SharedName*, SharedNameMapComparator> SharedNameMap;
// Attributes
// **********
private: static SharedNameMap* _SHARED_NAME_MAP;
private: int _count;
private: string _string;
// Constructors
// ************
private: SharedName(const string& s);
private: SharedName(const SharedName& sharedName);
// not implemented to forbid copy construction
// Destructor
// **********
private: ~SharedName();
// Operators
// *********
private: SharedName& operator=(const SharedName& sharedName);
// not implemented to forbid assignment
// Updators
// ********
private: void capture();
private: void release();
// Others
// ******
public: const string &_getSString () const { return _string; };
public: string _getTypeName() const { return _TName("SharedName"); };
public: string _getString() const;
public: Record* _getRecord() const;
};
inline unsigned int SharedName::getId () const { return _id; }
} // End of Hurricane namespace.

View File

@ -60,6 +60,8 @@ class SharedPath {
// Attributes
// **********
private: static unsigned int _idCounter;
private: unsigned int _id;
private: Instance* _headInstance;
private: SharedPath* _tailSharedPath;
private: QuarkMap _quarkMap;
@ -89,6 +91,7 @@ class SharedPath {
public: static char getNameSeparator();
public: unsigned int getId() const { return _id; }
public: Instance* getHeadInstance() const {return _headInstance;};
public: SharedPath* getTailSharedPath() const {return _tailSharedPath;};
public: SharedPath* getHeadSharedPath() const;

View File

@ -54,8 +54,8 @@ extern "C" {
DirectGetLongAttribute(PyRoutingPad_getSourceY ,getSourceY ,PyRoutingPad,RoutingPad)
DirectGetLongAttribute(PyRoutingPad_getTargetX ,getTargetX ,PyRoutingPad,RoutingPad)
DirectGetLongAttribute(PyRoutingPad_getTargetY ,getTargetY ,PyRoutingPad,RoutingPad)
DirectSetLongAttribute(PyRoutingPad_setX ,setX ,"RoutingPad.setX",PyRoutingPad,RoutingPad)
DirectSetLongAttribute(PyRoutingPad_setY ,setY ,"RoutingPad.setY",PyRoutingPad,RoutingPad)
// DirectSetLongAttribute(PyRoutingPad_setX ,setX ,"RoutingPad.setX",PyRoutingPad,RoutingPad)
// DirectSetLongAttribute(PyRoutingPad_setY ,setY ,"RoutingPad.setY",PyRoutingPad,RoutingPad)
// Standart destroy (Attribute).
DBoDestroyAttribute(PyRoutingPad_destroy, PyRoutingPad)
@ -179,6 +179,7 @@ extern "C" {
}
#if THIS_IS_DEPRECATED
static PyObject* PyRoutingPad_setPosition ( PyRoutingPad *self, PyObject* args )
{
trace << "PyRoutingPad_setPosition ()" << endl;
@ -229,6 +230,7 @@ extern "C" {
Py_RETURN_NONE;
}
#endif
static PyObject* PyRoutingPad_setExternalComponent ( PyRoutingPad *self, PyObject* args )
@ -305,16 +307,16 @@ extern "C" {
, { "getTargetX" , (PyCFunction)PyRoutingPad_getTargetX , METH_NOARGS , "Get the RoutingPad target X position." }
, { "getTargetY" , (PyCFunction)PyRoutingPad_getTargetY , METH_NOARGS , "Get the RoutingPad target Y position." }
, { "translate" , (PyCFunction)PyRoutingPad_translate , METH_VARARGS, "Translates the RoutingPad segment of dx and dy." }
, { "setX" , (PyCFunction)PyRoutingPad_setX , METH_VARARGS, "Modify the RoutingPad X position." }
, { "setY" , (PyCFunction)PyRoutingPad_setY , METH_VARARGS, "Modify the RoutingPad Y position." }
, { "setPosition" , (PyCFunction)PyRoutingPad_setPosition , METH_VARARGS, "Sets the RoutingPad absolute position." }
, { "setOffset" , (PyCFunction)PyRoutingPad_setOffset , METH_VARARGS, "Sets the RoutingPad relative position." }
// , { "setX" , (PyCFunction)PyRoutingPad_setX , METH_VARARGS, "Modify the RoutingPad X position." }
// , { "setY" , (PyCFunction)PyRoutingPad_setY , METH_VARARGS, "Modify the RoutingPad Y position." }
// , { "setPosition" , (PyCFunction)PyRoutingPad_setPosition , METH_VARARGS, "Sets the RoutingPad absolute position." }
// , { "setOffset" , (PyCFunction)PyRoutingPad_setOffset , METH_VARARGS, "Sets the RoutingPad relative position." }
, { "setExternalComponent" , (PyCFunction)PyRoutingPad_setExternalComponent , METH_VARARGS, "Sets the RoutingPad on an master net external component." }
, { "setOnBestComponent" , (PyCFunction)PyRoutingPad_setOnBestComponent , METH_VARARGS, "Sets the RoutingPad on master net best external component." }
, { "restorePlugOccurrence", (PyCFunction)PyRoutingPad_restorePlugOccurrence, METH_VARARGS, "Revert back from an external component to the plug." }
, { "destroy" , (PyCFunction)PyRoutingPad_destroy , METH_NOARGS
, "destroy associated hurricane object, the python object remains." }
, {NULL, NULL, 0, NULL} /* sentinel */
, {NULL, NULL, 0, NULL} /* sentinel */
};