diff --git a/hurricane/doc/hurricane/Entity.dox b/hurricane/doc/hurricane/Entity.dox index da6f73aa..5ec71803 100644 --- a/hurricane/doc/hurricane/Entity.dox +++ b/hurricane/doc/hurricane/Entity.dox @@ -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 Entities; - * Generic collection representing a set of data base objects. + //! \typedef typedef GenericCollection Entities; + //! Generic collection representing a set of data base objects. + //! + + //! \typedef typedef GenericLocator EntityLocator; + //! Generic locator for visiting a data base objects Collection. + //! + + //! \typedef typedef GenericFilter 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 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 EntityLocator; - * Generic locator for visiting a data base objects Collection. - */ - - /*! \typedef typedef GenericFilter 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. - */ - - // \} - } diff --git a/hurricane/doc/hurricane/Instance.dox b/hurricane/doc/hurricane/Instance.dox index 50203cd0..d417f820 100644 --- a/hurricane/doc/hurricane/Instance.dox +++ b/hurricane/doc/hurricane/Instance.dox @@ -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. + } diff --git a/hurricane/doc/hurricane/Net.dox b/hurricane/doc/hurricane/Net.dox index 98912459..84ccb715 100644 --- a/hurricane/doc/hurricane/Net.dox +++ b/hurricane/doc/hurricane/Net.dox @@ -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. * diff --git a/hurricane/doc/hurricane/RoutingPad.dox b/hurricane/doc/hurricane/RoutingPad.dox index ddb07491..5d818586 100644 --- a/hurricane/doc/hurricane/RoutingPad.dox +++ b/hurricane/doc/hurricane/RoutingPad.dox @@ -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 (dx,dy). - - //! \function void RoutingPad::setOffset ( const DbU::Unit& dx, const DbU::Unit& dy ); - //! Sets the relative position of the RoutingPad from it's anchor to (dx,dy). - - //! \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 (x,y). - - //! \function void RoutingPad::setPosition ( const Point& position ); - //! Sets the absolute position of the RoutingPad to position. + //! 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 diff --git a/hurricane/doc/hurricane/SoC.css b/hurricane/doc/hurricane/SoC.css new file mode 100644 index 00000000..276a7c09 --- /dev/null +++ b/hurricane/doc/hurricane/SoC.css @@ -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; + } + diff --git a/hurricane/doc/hurricane/Transformation.dox b/hurricane/doc/hurricane/Transformation.dox index 3152c429..0e944a9b 100644 --- a/hurricane/doc/hurricane/Transformation.dox +++ b/hurricane/doc/hurricane/Transformation.dox @@ -13,88 +13,91 @@ * translation and an orientation defined by the * new enumeration Transformation::Orientation whose * different values are described in table below. + * The orientation is done before the + * translation, 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 Rotations are done counter clock wise : + * \remark Rotations are done counter clock wise */ /*! \class Transformation::Orientation * This enumeration defines the orientation associated to a * transformation object. - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
Orientation codes and associated transformation matrix
NameAspectCodeSignificationabcd
ID - * \image html id.gif - * 0Identity1001
R1 - * \image html r1.gif - * 1Simple rotation (90°)0-110
R2 - * \image html r2.gif - * 2Double rotation (180°)-100-1
R3 - * \image html r3.gif - * 3Triple rotation (270°)01-10
MX - * \image html mx.gif - * 4Horizontal symetry (Mirror X)-1001
XR - * \image html xr.gif - * 5Horizontal symetry followed by a 90° rotation0-1-10
MY - * \image html my.gif - * 6Vertical symetry (Mirror Y)100-1
YR - * \image html yr.gif - * 7Vertical symetry followed by a 90° rotation0110
* - * The transformation formula is given by : x' = (a * x) + (b * - * y) + tx y' = (c * x) + (d * y) + ty where x and y are the + * + * + * + * + * + * + * + * + * + * + * + *
Orientation codes and associated transformation matrix
Name
+ *
Aspect
+ *
Code
+ *
Signification
+ *
a
+ *
b
+ *
c
+ *
d
+ *
ID
\image html transf-ID.png "" + *
0
Identity + *
1
0
0
1
+ *
R1
\image html transf-R1.png "" + *
1
Simple rotation (90°) + *
0
-1
1
0
+ *
R2
\image html transf-R2.png "" + *
2
Double rotation (180°) + *
-1
0
0
-1
+ *
R3
\image html transf-R3.png "" + *
3
Triple rotation (270°) + *
0
1
-1
0
+ *
MX
\image html transf-MX.png "" + *
4
Horizontal symetry (Mirror X) + *
-1
0
0
1
+ *
XR
\image html transf-XR.png "" + *
5
Horizontal symetry followed by a 90° rotation + *
0
-1
-1
0
+ *
MY
\image html transf-MY.png "" + *
6
Vertical symetry (Mirror Y) + *
1
0
0
-1
+ *
YR
\image html transf-YR.png "" + *
7
Vertical symetry followed by a 90° rotation + *
0
1
1
0
+ *
+ * + * 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 diff --git a/hurricane/doc/hurricane/customHierarchy.html b/hurricane/doc/hurricane/customHierarchy.html index 1e43f7f0..e419e2c5 100644 --- a/hurricane/doc/hurricane/customHierarchy.html +++ b/hurricane/doc/hurricane/customHierarchy.html @@ -4,7 +4,7 @@ Hurricane Documentation - +

Hurricane Documentation

diff --git a/hurricane/doc/hurricane/customSummary.html b/hurricane/doc/hurricane/customSummary.html index ed99ddc4..9320096a 100644 --- a/hurricane/doc/hurricane/customSummary.html +++ b/hurricane/doc/hurricane/customSummary.html @@ -4,7 +4,7 @@ Hurricane Documentation - +

Hurricane Documentation

diff --git a/hurricane/doc/hurricane/doxyfile b/hurricane/doc/hurricane/doxyfile index e93f3a17..8cd487ce 100644 --- a/hurricane/doc/hurricane/doxyfile +++ b/hurricane/doc/hurricane/doxyfile @@ -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 diff --git a/hurricane/doc/hurricane/header.html b/hurricane/doc/hurricane/header.html index 0b392efb..58f8407e 100644 --- a/hurricane/doc/hurricane/header.html +++ b/hurricane/doc/hurricane/header.html @@ -3,7 +3,7 @@ Hurricane Documentation - +

Hurricane Documentation

diff --git a/hurricane/doc/viewer/SoC.css b/hurricane/doc/viewer/SoC.css new file mode 100644 index 00000000..276a7c09 --- /dev/null +++ b/hurricane/doc/viewer/SoC.css @@ -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; + } + diff --git a/hurricane/doc/viewer/customSummary.html b/hurricane/doc/viewer/customSummary.html index 14747174..19e3d093 100644 --- a/hurricane/doc/viewer/customSummary.html +++ b/hurricane/doc/viewer/customSummary.html @@ -4,7 +4,7 @@ Hurricane Documentation - +

Hurricane Documentation

diff --git a/hurricane/doc/viewer/doxyfile b/hurricane/doc/viewer/doxyfile index 92bcbab5..71e1ef4e 100644 --- a/hurricane/doc/viewer/doxyfile +++ b/hurricane/doc/viewer/doxyfile @@ -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 diff --git a/hurricane/doc/viewer/header.html b/hurricane/doc/viewer/header.html index 70e9e997..5555dfc8 100644 --- a/hurricane/doc/viewer/header.html +++ b/hurricane/doc/viewer/header.html @@ -3,7 +3,7 @@ Hurricane Viewer Documentation - +

Hurricane Viewer Documentation

diff --git a/hurricane/src/hurricane/Cell.cpp b/hurricane/src/hurricane/Cell.cpp index 807f4272..8181fd80 100644 --- a/hurricane/src/hurricane/Cell.cpp +++ b/hurricane/src/hurricane/Cell.cpp @@ -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 diff --git a/hurricane/src/hurricane/Entity.cpp b/hurricane/src/hurricane/Entity.cpp index 3a8d813d..96739147 100644 --- a/hurricane/src/hurricane/Entity.cpp +++ b/hurricane/src/hurricane/Entity.cpp @@ -17,6 +17,8 @@ // not, see . // **************************************************************************************************** +#include +#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::max()) { + throw Error( "Entity::Entity(): Identifier counter has reached it's limit (%d bits)." + , std::numeric_limits::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)); diff --git a/hurricane/src/hurricane/Error.cpp b/hurricane/src/hurricane/Error.cpp index 810c9b22..cc7b2d97 100644 --- a/hurricane/src/hurricane/Error.cpp +++ b/hurricane/src/hurricane/Error.cpp @@ -19,12 +19,7 @@ // License along with Hurricane. If not, see // . // -// =================================================================== -// -// $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 diff --git a/hurricane/src/hurricane/Instance.cpp b/hurricane/src/hurricane/Instance.cpp index 349693c8..b572d8fe 100644 --- a/hurricane/src/hurricane/Instance.cpp +++ b/hurricane/src/hurricane/Instance.cpp @@ -17,6 +17,7 @@ // not, see . // **************************************************************************************************** +#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 diff --git a/hurricane/src/hurricane/Library.cpp b/hurricane/src/hurricane/Library.cpp index 2ecab9df..bf85f7ad 100644 --- a/hurricane/src/hurricane/Library.cpp +++ b/hurricane/src/hurricane/Library.cpp @@ -17,6 +17,7 @@ // not, see . // **************************************************************************************************** +#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 diff --git a/hurricane/src/hurricane/Net.cpp b/hurricane/src/hurricane/Net.cpp index c18188f1..892e4ed1 100644 --- a/hurricane/src/hurricane/Net.cpp +++ b/hurricane/src/hurricane/Net.cpp @@ -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 diff --git a/hurricane/src/hurricane/Pin.cpp b/hurricane/src/hurricane/Pin.cpp index 5ecf2821..5f16db04 100644 --- a/hurricane/src/hurricane/Pin.cpp +++ b/hurricane/src/hurricane/Pin.cpp @@ -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"); } diff --git a/hurricane/src/hurricane/QuadTree.cpp b/hurricane/src/hurricane/QuadTree.cpp index 6be1da46..f3c54364 100644 --- a/hurricane/src/hurricane/QuadTree.cpp +++ b/hurricane/src/hurricane/QuadTree.cpp @@ -464,7 +464,7 @@ void QuadTree::_explode() _urChild = new QuadTree(this); _llChild = new QuadTree(this); _lrChild = new QuadTree(this); - set goSet; + set 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 diff --git a/hurricane/src/hurricane/RoutingPad.cpp b/hurricane/src/hurricane/RoutingPad.cpp index b50905e4..55fef687 100644 --- a/hurricane/src/hurricane/RoutingPad.cpp +++ b/hurricane/src/hurricane/RoutingPad.cpp @@ -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 #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(occurrence.getEntity()) ) ) { - position = occurrence.getPath().getTransformation().getPoint( plug->getPosition() ); - } else if ( (pin = dynamic_cast(occurrence.getEntity()) ) ) { - position = occurrence.getPath().getTransformation().getPoint( pin->getPosition() ); - } else if ( (contact = dynamic_cast(occurrence.getEntity()) ) ) { - position = occurrence.getPath().getTransformation().getPoint( contact->getPosition() ); + if ( (plug = dynamic_cast(occurrence.getEntity()) ) == NULL) { + if ( (pin = dynamic_cast(occurrence.getEntity()) ) == NULL) { + contact = dynamic_cast(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 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 ; igetName() << ":" + << 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(component); - - if ( horizontal ) { - setX ( 0 ); - setY ( position.getY() ); - } else { - Vertical* vertical = dynamic_cast(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(_occurrence.getEntity())->getPosition() ) ); } @@ -359,6 +356,7 @@ namespace Hurricane { ,getString(plug->getInstance ()).c_str() ); setExternalComponent ( bestComponent ); + if (flags & ShowWarning) isPlacedOccurrence( flags ); return bestComponent; } diff --git a/hurricane/src/hurricane/SharedName.cpp b/hurricane/src/hurricane/SharedName.cpp index 84eafa53..bc7c2869 100644 --- a/hurricane/src/hurricane/SharedName.cpp +++ b/hurricane/src/hurricane/SharedName.cpp @@ -17,6 +17,8 @@ // not, see . // **************************************************************************************************** +#include +#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::max()) { + throw Error( "SharedName::SharedName(): Identifier counter has reached it's limit (%d bits)." + , std::numeric_limits::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; } diff --git a/hurricane/src/hurricane/SharedPath.cpp b/hurricane/src/hurricane/SharedPath.cpp index c755931b..d4de9bbd 100644 --- a/hurricane/src/hurricane/SharedPath.cpp +++ b/hurricane/src/hurricane/SharedPath.cpp @@ -17,6 +17,7 @@ // not, see . // **************************************************************************************************** +#include #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 { // ****************************************************** @@ -96,14 +98,22 @@ class SharedPath_Instances : public Collection { // **************************************************************************************************** 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::max()) { + throw Error( "SharedName::SharedName(): Identifier counter has reached it's limit (%d bits)." + , std::numeric_limits::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 diff --git a/hurricane/src/hurricane/Technology.cpp b/hurricane/src/hurricane/Technology.cpp index 9eee226c..c04f0bb2 100644 --- a/hurricane/src/hurricane/Technology.cpp +++ b/hurricane/src/hurricane/Technology.cpp @@ -17,6 +17,7 @@ // not, see . // **************************************************************************************************** +#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 diff --git a/hurricane/src/hurricane/Timer.cpp b/hurricane/src/hurricane/Timer.cpp index ee670059..e833543f 100644 --- a/hurricane/src/hurricane/Timer.cpp +++ b/hurricane/src/hurricane/Timer.cpp @@ -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; } diff --git a/hurricane/src/hurricane/hurricane/Collection.h b/hurricane/src/hurricane/hurricane/Collection.h index ca7d11de..94465beb 100644 --- a/hurricane/src/hurricane/hurricane/Collection.h +++ b/hurricane/src/hurricane/hurricane/Collection.h @@ -838,7 +838,7 @@ class ForEachIterator { inline Element operator-> (); inline ForEachIterator& operator++ (int); public: - GenericCollection& collection; + GenericCollection collection; GenericLocator locator; Element element; }; diff --git a/hurricane/src/hurricane/hurricane/Entity.h b/hurricane/src/hurricane/hurricane/Entity.h index ab2cb112..4023ec32 100644 --- a/hurricane/src/hurricane/hurricane/Entity.h +++ b/hurricane/src/hurricane/hurricane/Entity.h @@ -20,58 +20,53 @@ #ifndef HURRICANE_ENTITY #define HURRICANE_ENTITY +#include #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 { + 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 // **************************************************************************************************** diff --git a/hurricane/src/hurricane/hurricane/Layer.h b/hurricane/src/hurricane/hurricane/Layer.h index 705b6584..85bea611 100644 --- a/hurricane/src/hurricane/hurricane/Layer.h +++ b/hurricane/src/hurricane/hurricane/Layer.h @@ -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 { + 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()); } diff --git a/hurricane/src/hurricane/hurricane/Net.h b/hurricane/src/hurricane/hurricane/Net.h index 4721f11d..17bdd40d 100644 --- a/hurricane/src/hurricane/hurricane/Net.h +++ b/hurricane/src/hurricane/hurricane/Net.h @@ -20,6 +20,7 @@ #ifndef HURRICANE_NET #define HURRICANE_NET +#include #include "hurricane/Entity.h" #include "hurricane/Nets.h" #include "hurricane/Component.h" @@ -233,10 +234,6 @@ class Net : public Entity { }; - - - - } // End of Hurricane namespace. diff --git a/hurricane/src/hurricane/hurricane/RoutingPad.h b/hurricane/src/hurricane/hurricane/RoutingPad.h index f266cd7d..ad1967c1 100644 --- a/hurricane/src/hurricane/hurricane/RoutingPad.h +++ b/hurricane/src/hurricane/hurricane/RoutingPad.h @@ -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 diff --git a/hurricane/src/hurricane/hurricane/SharedName.h b/hurricane/src/hurricane/hurricane/SharedName.h index c8c4019e..3ea47f15 100644 --- a/hurricane/src/hurricane/hurricane/SharedName.h +++ b/hurricane/src/hurricane/hurricane/SharedName.h @@ -25,73 +25,43 @@ namespace Hurricane { +// ------------------------------------------------------------------- +// Class : "Hurricane::SharedName". -// **************************************************************************************************** -// SharedName declaration -// **************************************************************************************************** -class SharedName { -// ************* + class SharedName { + friend class Name; -// Friends -// ******* + public: + inline unsigned int getId () const; + const string& _getSString () const { return _string; }; + string _getTypeName () const { return _TName("SharedName"); }; + string _getString () const; + Record* _getRecord () const; + private: + SharedName ( const string& ); + SharedName ( const SharedName& ); + ~SharedName (); + SharedName& operator= ( const SharedName& ); + void capture (); + void release (); - friend class Name; + private: + struct SharedNameMapComparator { + bool operator() ( string* lhs, string* rhs ) const; + }; + typedef map 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 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. diff --git a/hurricane/src/hurricane/hurricane/SharedPath.h b/hurricane/src/hurricane/hurricane/SharedPath.h index 56d04996..9c8b1b2a 100644 --- a/hurricane/src/hurricane/hurricane/SharedPath.h +++ b/hurricane/src/hurricane/hurricane/SharedPath.h @@ -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; diff --git a/hurricane/src/isobar/PyRoutingPad.cpp b/hurricane/src/isobar/PyRoutingPad.cpp index 95c2e76b..c1ddc1d1 100644 --- a/hurricane/src/isobar/PyRoutingPad.cpp +++ b/hurricane/src/isobar/PyRoutingPad.cpp @@ -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 */ };