* All Tools:
- A complete sweep of cleanup to suppress allmost all compiler warnings. * ./hurricane/doc/hurricane: - New: Documentation cleanup and update, particularly on the new Layer derived classes. * ./hurricane/src/hurricane, ./hurricane/src/isobar, ./hurricane/src/viewer: - New: Creation of new methods, more explicit on DbU. Based on a to/from naming scheme. - New: Python support extented to include all objects needed to configure through python scripts. - Change: Finally understood what's causing the _XOPEN_SOURCE redefinition. Basically the Python.h must be included first before any other include. The type-puned problem will remains still (that is a Python problem, not our own). - Change: In DisplayStyle, uses shared_ptr for DrawingStyle instead of custom made reference count.
This commit is contained in:
parent
df2eaec70f
commit
47f3771f1d
|
@ -1,9 +1,9 @@
|
|||
|
||||
|
||||
/*
|
||||
* x-----------------------------------------------------------------x
|
||||
* +-----------------------------------------------------------------+
|
||||
* | HTML Standart Tags |
|
||||
* x-----------------------------------------------------------------x
|
||||
* +-----------------------------------------------------------------+
|
||||
*/
|
||||
|
||||
html, body, th, td, tr, p, li, h1, h2, h3, h4, h5, h6 {
|
||||
|
@ -32,25 +32,25 @@
|
|||
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
font-family: verdana, sans-serif;
|
||||
font-family: "Liberation Serif", sans-serif;
|
||||
}
|
||||
|
||||
h1 { text-align: center; }
|
||||
h2, h3, h4, h5, h6 { text-align: left;
|
||||
padding-top: 2em;
|
||||
}
|
||||
h1, h2, h3 { font-family: "Trebuchet MS", sans-serif;
|
||||
color: #09550B;
|
||||
h1, h2, h3 { font-family: "Liberation Serif", sans-serif;
|
||||
/*color: #09550B;*/
|
||||
}
|
||||
h1 { font-weight: bold; font-size: 170%; }
|
||||
h2 { font-weight: bold; font-size: 140%; }
|
||||
h3 { font-weight: bold; font-size: 118%; }
|
||||
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 #008500;*/
|
||||
border: 1px none #000000;
|
||||
border-top-width: 2px;
|
||||
border-top-style: solid;
|
||||
|
@ -164,9 +164,9 @@
|
|||
|
||||
|
||||
/*
|
||||
* x-----------------------------------------------------------------x
|
||||
* +-----------------------------------------------------------------+
|
||||
* | Doxygen Specific Classes |
|
||||
* x-----------------------------------------------------------------x
|
||||
* +-----------------------------------------------------------------+
|
||||
*/
|
||||
|
||||
|
||||
|
@ -257,9 +257,9 @@
|
|||
|
||||
div.qindex, div.nav {
|
||||
width: 100%-4px;
|
||||
/*background-color: #DADAEF;*/
|
||||
/*background-color: #eeeeff;*/
|
||||
/*background-color: #EEEEEE;*/
|
||||
/*background-color: #DADAEF;*/
|
||||
/*background-color: #eeeeff;*/
|
||||
/*background-color: #EEEEEE;*/
|
||||
background-color: #CCE6CA;
|
||||
border: 0px solid #003300;
|
||||
text-align: center;
|
||||
|
@ -350,6 +350,44 @@
|
|||
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%;
|
||||
|
@ -376,14 +414,14 @@
|
|||
*/
|
||||
|
||||
.mdTable {
|
||||
/*border: 1px solid #868686;*/
|
||||
/*background-color: #DADAEF;*/
|
||||
/*background-color: #F4F4FB;*/
|
||||
/*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;*/
|
||||
/*background-color: #B8E6B8;*/
|
||||
/*background-color: #CCE6CA;*/
|
||||
margin-top: 25px;
|
||||
font-size: 105%;
|
||||
}
|
||||
|
@ -402,7 +440,7 @@
|
|||
padding: 0px 8px 4px 8px;
|
||||
font-size: 11px;
|
||||
font-style: italic;
|
||||
/*background-color: #FAFAFA;*/
|
||||
/*background-color: #FAFAFA;*/
|
||||
border-top: 1px none #E0E0E0;
|
||||
border-right: 1px none #E0E0E0;
|
||||
border-bottom: 1px none #E0E0E0;
|
||||
|
@ -431,31 +469,38 @@
|
|||
|
||||
.memdoc{
|
||||
padding-left: 5px;
|
||||
/*margin-top: -8px;*/
|
||||
/*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: 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: solid;
|
||||
*/
|
||||
border-top-style: none;
|
||||
border-right-style: none;
|
||||
border-bottom-style: none;
|
||||
border-bottom-style: dotted;
|
||||
border-left-style: none;
|
||||
/*background-color: #DADAEF;*/
|
||||
/*background-color: #eeeeff;*/
|
||||
/*background-color: #EEEEEE;*/
|
||||
background-color: #CCE6CA;
|
||||
/*background-color: #DADAEF;*/
|
||||
/*background-color: #eeeeff;*/
|
||||
/*background-color: #EEEEEE;*/
|
||||
/*background-color: #CCE6CA;*/
|
||||
}
|
||||
|
||||
.memTemplItemLeft, .memTemplItemRight {
|
||||
|
@ -478,8 +523,12 @@
|
|||
|
||||
.groupText, .groupHeader {
|
||||
color: #09550B;
|
||||
margin-top: 15px;
|
||||
font-size: 130%;
|
||||
font-weight: bold;
|
||||
margin-top: 15px;
|
||||
}
|
||||
|
||||
.groupHeader {
|
||||
margin-bottom: -30pt;
|
||||
}
|
||||
|
||||
|
|
|
@ -7,11 +7,12 @@
|
|||
/*! \class BasicLayer
|
||||
* \brief BasicLayer description (\b API)
|
||||
*
|
||||
* For a more complete description of the Layers object, please refer
|
||||
* to \ref secLayerIntro "Layer Introduction".
|
||||
*
|
||||
* For purpose of BasicLayers, also see BasicLayer::Material.
|
||||
*/
|
||||
|
||||
/*! \name Constructors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function BasicLayer* BasicLayer::create(Technology* technology,const Name& name,const BasicLayer::Material& material,unsigned extractNumber,const DbU::Unit& minimalSize = 0,const DbU::Unit& minimalSpacing = 0);
|
||||
* creates and returns a new basic layer named \c \<name\>, of
|
||||
|
@ -32,12 +33,6 @@
|
|||
* extraction should ignore this layer.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Accessors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function const BasicLayer::Type& BasicLayer::getMaterial() const;
|
||||
* \Return the basic layer material.
|
||||
|
@ -94,12 +89,10 @@
|
|||
* and closer to the basic components
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Modifiers
|
||||
/*! \function const Name& BasicLayer::getRealName() const;
|
||||
* \Return the real (process) layer name, for GDS.
|
||||
*/
|
||||
// \{
|
||||
|
||||
|
||||
/* \function void BasicLayer::SetColor(unsigned short redValue, unsigned short greenValue, unsigned short blueValue);
|
||||
* Sets the color of a basic layer.
|
||||
|
@ -116,7 +109,18 @@
|
|||
* Sets the display threshold of a basic layer.
|
||||
*/
|
||||
|
||||
// \}
|
||||
/*! \function void BasicLayer::setBlockageLayer(BasicLayer* layer);
|
||||
* Associate a blockage layer to this one. This is only meaningful
|
||||
* for routing layers (RegularLayer).
|
||||
*/
|
||||
|
||||
/*! \function void BasicLayer::setExtractNumber(unsigned int);
|
||||
* Set the extract number, for GDS.
|
||||
*/
|
||||
|
||||
/*! \function void BasicLayer::setRealName(const char*);
|
||||
* Set the real (process) layer name, for GDS.
|
||||
*/
|
||||
|
||||
|
||||
/*! \name BasicLayer Collection
|
||||
|
@ -143,5 +147,44 @@
|
|||
|
||||
// \}
|
||||
|
||||
/*! \class BasicLayer::Material
|
||||
* Encapsulate the BasicLayer::Material::Code enumeration that defines the
|
||||
* BasicLayer purpose.
|
||||
*/
|
||||
|
||||
/*! \enum BasicLayer::Material::Code
|
||||
* This enumeration defines the layer purpose inside the BasicLayer::Material.
|
||||
*/
|
||||
/*! \var BasicLayer::Material::Code BasicLayer::Material::nWell
|
||||
* This is a NWELL layer.
|
||||
*/
|
||||
/*! \var BasicLayer::Material::Code BasicLayer::Material::pWell
|
||||
* This is a PWELL layer.
|
||||
*/
|
||||
/*! \var BasicLayer::Material::Code BasicLayer::Material::nImplant
|
||||
* This is a N implant layer, for transistor source & drain.
|
||||
*/
|
||||
/*! \var BasicLayer::Material::Code BasicLayer::Material::pImplant
|
||||
* This is a P implant layer, for transistor source & drain.
|
||||
*/
|
||||
/*! \var BasicLayer::Material::Code BasicLayer::Material::active
|
||||
* For active area, for transistor gates.
|
||||
*/
|
||||
/*! \var BasicLayer::Material::Code BasicLayer::Material::poly
|
||||
* Polysilicium, for short connections & transistor gates.
|
||||
*/
|
||||
/*! \var BasicLayer::Material::Code BasicLayer::Material::cut
|
||||
* For the \e hole part of VIAs.
|
||||
*/
|
||||
/*! \var BasicLayer::Material::Code BasicLayer::Material::metal
|
||||
* For routing layers.
|
||||
*/
|
||||
/*! \var BasicLayer::Material::Code BasicLayer::Material::blockage
|
||||
* For blockages, associated to metals.
|
||||
*/
|
||||
/*! \var BasicLayer::Material::Code BasicLayer::Material::other
|
||||
* Fallback for any other purposes.
|
||||
*/
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -34,10 +34,6 @@ if (box1.inflate(3).merge(box2.translate(10, 10).inflate(-1, 1)).contains(20, 20
|
|||
*/
|
||||
|
||||
|
||||
/*! \name Constructors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Box::Box();
|
||||
* Default constructor : the returned box is empty.
|
||||
*/
|
||||
|
@ -65,12 +61,6 @@ if (box1.inflate(3).merge(box2.translate(10, 10).inflate(-1, 1)).contains(20, 20
|
|||
* Copy constructor.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Operators
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Box& Box::operator=(const Box& box);
|
||||
* Assignment operator.
|
||||
|
@ -86,12 +76,6 @@ if (box1.inflate(3).merge(box2.translate(10, 10).inflate(-1, 1)).contains(20, 20
|
|||
* Difference operator.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Accessors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function const DbU::Unit& Box::getXMin() const;
|
||||
* \Return the XMin value : meaningful only for a non empty box.
|
||||
|
@ -149,12 +133,6 @@ if (box1.inflate(3).merge(box2.translate(10, 10).inflate(-1, 1)).contains(20, 20
|
|||
* either one of the two boxes is empty or if they are disjoint.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Predicates
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function bool Box::isEmpty() const;
|
||||
* \Return \true if the box is empty, else \false.
|
||||
|
@ -196,12 +174,6 @@ if (box1.inflate(3).merge(box2.translate(10, 10).inflate(-1, 1)).contains(20, 20
|
|||
* least a common border side, else \false.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Modifiers
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Box& Box::makeEmpty();
|
||||
* Transforms the box into an empty one.
|
||||
|
@ -256,7 +228,4 @@ if (box1.inflate(3).merge(box2.translate(10, 10).inflate(-1, 1)).contains(20, 20
|
|||
* and \c \<dy\>.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -9,10 +9,6 @@
|
|||
*/
|
||||
|
||||
|
||||
/*! \name Constructors & Destructors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Cell* Cell::create ( Library* library, const Name& name );
|
||||
* creates and returns a new Cell named \e name for the Library
|
||||
* \e library.
|
||||
|
@ -22,12 +18,6 @@
|
|||
* Library.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Accessors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Library* Cell::getLibrary () const;
|
||||
* Returns the Library owning the Cell.
|
||||
|
@ -160,12 +150,6 @@
|
|||
* Returns the symbol associated to the cell.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Predicates
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function bool Cell::isCalledBy ( Cell* cell ) const;
|
||||
* Returns \true if the cell \this is directly or indirectly called by
|
||||
|
@ -180,12 +164,6 @@
|
|||
* \false.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Modifiers
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function void Cell::setName ( const Name& name );
|
||||
* Allows to change the Cell Name.
|
||||
|
@ -220,12 +198,6 @@
|
|||
* De-materializes all components of all the nets of the Cell.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Cell Collection
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \typedef typedef GenericCollection<Cell*> Cells;
|
||||
* Generic collection representing a set of cell objects.
|
||||
|
@ -243,6 +215,4 @@
|
|||
* Macro for visiting all objects of a cell objects collection.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
}
|
||||
|
|
|
@ -18,6 +18,55 @@
|
|||
* Collection\<Instance*\> whose first attribute will be a
|
||||
* pointer to the cell and a second attribute the rectangular
|
||||
* area.
|
||||
*
|
||||
* Main characteristics of Collections:
|
||||
* <ul>
|
||||
* <li>Collections <b>do not own</b> their elements (they
|
||||
* remains when the Collection is deleted).
|
||||
* <li>They can only be iterated \e forward. Once an
|
||||
* element is consumed you cannot go back to it.
|
||||
* You must restart the collection walktrough instead.
|
||||
* <li>Collections are very light objects which are built,
|
||||
* copied or destroyed very rapidly.
|
||||
* </ul>
|
||||
*
|
||||
*
|
||||
* \section secForEachMacro The forEach Macro
|
||||
*
|
||||
* Collections are to be used in conjunction with the \c forEach macro
|
||||
* which allows to easily iterate over the elements. Iteration is done
|
||||
* through a simplistic iterator which have overload for the
|
||||
* <code>operator*()</code> and <code>operator->()</code>
|
||||
*
|
||||
* The \c forEach macro takes three arguments:
|
||||
* <center>
|
||||
* <table>
|
||||
* <tr><th colspan="2"> <code>forEach(type,iterator,collection)</code>
|
||||
* <tr><td> \c type <td>Element's type of the collection.
|
||||
* <tr><td> \c iterator <td>Name of the iterator's variable.
|
||||
* <tr><td> \c collection <td>An appropriate collection to iterate over, that is,
|
||||
* built over \c type elements.
|
||||
* </table>
|
||||
* </center>
|
||||
*
|
||||
* To use the forEach macro outside the Hurricane namespace, the
|
||||
* following statement is necessary:
|
||||
\code
|
||||
using Hurricane::ForEachIterator
|
||||
\endcode
|
||||
* Here is a small example of a loop:
|
||||
\code
|
||||
using Hurricane::ForEachIterator;
|
||||
|
||||
Cell* cell = ...; // Get a Cell from somewhere.
|
||||
|
||||
forEach( Net*, inet, cell->getNets() ) {
|
||||
cout << "This is " << (*inet);
|
||||
if (inet->isExternal())
|
||||
cout << " [external net].";
|
||||
cout << endl;
|
||||
}
|
||||
\endcode
|
||||
*
|
||||
*
|
||||
* \section secGenericgetCollection The Generic getCollection
|
||||
|
@ -34,14 +83,11 @@ set<Instance*> instanceSet;
|
|||
|
||||
// here we fill the set with the desired instances...
|
||||
|
||||
for_each_instance(instance, getCollection(instanceSet)) {
|
||||
forEach(Instance*, iinstance, getCollection(instanceSet)) {
|
||||
// process here each instance of the set
|
||||
// (the elements are visited according to the set ordering)
|
||||
end_for;
|
||||
}
|
||||
\endcode
|
||||
*
|
||||
*
|
||||
*
|
||||
* \remark This approach is a little bit less efficient than the use of
|
||||
* STL iterators, not much indeed, but has the advantage to be
|
||||
|
@ -53,7 +99,6 @@ for_each_instance(instance, getCollection(instanceSet)) {
|
|||
* is valid. Then you should not do the following:
|
||||
\code
|
||||
GenericCollection<Instance*> getInstances(...)
|
||||
// *******************************************
|
||||
{
|
||||
set<Instance*> instanceSet;
|
||||
|
||||
|
@ -67,26 +112,19 @@ GenericCollection<Instance*> getInstances(...)
|
|||
*
|
||||
* The same will occur anyway if you do:
|
||||
\code
|
||||
Cell* cell = ... // we get the cell
|
||||
Cell* cell = ...; // we get the cell
|
||||
|
||||
Nets nets = cellgetNets();
|
||||
Nets nets = cell->getNets();
|
||||
|
||||
cellDelete();
|
||||
cell->destroy();
|
||||
|
||||
for_each_net(net, nets) {
|
||||
forEach(Net*, inet, nets) {
|
||||
...
|
||||
end_for;
|
||||
}
|
||||
\endcode
|
||||
*
|
||||
*
|
||||
*
|
||||
* \section secCollectionImportant Important
|
||||
*
|
||||
* Collections are very light objects which are built, copied or
|
||||
* destroyed very rapidly.
|
||||
*
|
||||
* \section secCollectionLocators Locators
|
||||
* \section secCollectionLocators Locators
|
||||
*
|
||||
* Each type of collection provides an associated Locator for
|
||||
* tracing through the corresponding set of elements.
|
||||
|
@ -110,22 +148,11 @@ for_each_net(net, nets) {
|
|||
*/
|
||||
|
||||
|
||||
|
||||
/*! \name Destructors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Collection::~Collection<Type>();
|
||||
* Destroys the collection but doesn't acts on elements refered
|
||||
* by this collection.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Accessors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Collection<Type>* Collection::getClone() const;
|
||||
* Allocates and returns a clone (copy) of the collection
|
||||
|
@ -171,7 +198,6 @@ for_each_net(net, nets) {
|
|||
*
|
||||
\code
|
||||
Contacts Net::getContacts() const
|
||||
// ******************************
|
||||
{
|
||||
return getComponents().getSubSet<Contact*>();
|
||||
}
|
||||
|
@ -183,7 +209,6 @@ Contacts Net::getContacts() const
|
|||
* by the filter.
|
||||
\code
|
||||
Nets Cell::getExternalNets() const
|
||||
// *******************************
|
||||
{
|
||||
return getNets().getSubSet(Net::getIsExternalFilter());
|
||||
}
|
||||
|
@ -201,23 +226,18 @@ Nets Cell::getExternalNets() const
|
|||
* \sample Filter Hurricane::Segment according to their Layer.
|
||||
\code
|
||||
class IsOnLayer : public Filter<Segment*> {
|
||||
// **************************************
|
||||
|
||||
public:
|
||||
|
||||
Layer* _layer;
|
||||
|
||||
public:
|
||||
IsOnLayer(Layer* layer)
|
||||
: _layer(layer)
|
||||
: _layer(layer)
|
||||
{
|
||||
if (!_layer)
|
||||
throw Error("Can't create IsOnLayer filter : null layer");
|
||||
if (!_layer) throw Error("Can't create IsOnLayer filter : null layer");
|
||||
};
|
||||
|
||||
IsOnLayer(const IsOnLayer& isOnLayer)
|
||||
: _layer(isOnLayer._layer)
|
||||
{
|
||||
};
|
||||
: _layer(isOnLayer._layer)
|
||||
{ };
|
||||
|
||||
IsOnLayer& operator=(const IsOnLayer& isOnLayer)
|
||||
{
|
||||
|
@ -234,15 +254,14 @@ class IsOnLayer : public Filter<Segment*> {
|
|||
{
|
||||
return (segmentgetLayer() == _layer);
|
||||
};
|
||||
|
||||
};
|
||||
\endcode
|
||||
*
|
||||
* And somewher later:
|
||||
\code
|
||||
Layer* metal = getDataBase()getTechnology()getLayer("metal");
|
||||
Layer* metal = getDataBase()->getTechnology()->getLayer("metal");
|
||||
|
||||
Segments segments = netgetComponents()->getSubSet<Segment*>(IsOnLayer(metal));
|
||||
Segments segments = net->getComponents()->getSubSet<Segment*>(IsOnLayer(metal));
|
||||
|
||||
// segments represents here the subset of net components
|
||||
// which are of type Segment and located on layer metal
|
||||
|
@ -251,23 +270,14 @@ Segments segments = netgetComponents()->getSubSet<Segment*>(IsOnLayer(metal));
|
|||
*
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Predicates
|
||||
*/
|
||||
// \{
|
||||
|
||||
/* \function bool Collection::isEmpty() const;
|
||||
* This function returns \true if the collection designates no
|
||||
* element and else \false.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \section secCollectionUtilitarians Utilitarians
|
||||
*
|
||||
*
|
||||
* <b>Collection::Fill</b>
|
||||
* <b>Collection::Fill</b>
|
||||
|
@ -280,8 +290,7 @@ Segments segments = netgetComponents()->getSubSet<Segment*>(IsOnLayer(metal));
|
|||
|
||||
|
||||
|
||||
/*! \name Collection Collection
|
||||
*/
|
||||
//! \name Collection Collection
|
||||
// \{
|
||||
|
||||
/*! \def for_each_object(Type, element, collection)
|
||||
|
@ -299,10 +308,9 @@ Segments segments = netgetComponents()->getSubSet<Segment*>(IsOnLayer(metal));
|
|||
Cell* cell = ...; // we get the cell
|
||||
|
||||
if (cell) {
|
||||
for_each(Net*, net, cellgetExternalNets()) {
|
||||
assert(netIsExternal());
|
||||
assert(netgetCell() == cell);
|
||||
end_for;
|
||||
forEach(Net*, inet, cellgetExternalNets()) {
|
||||
assert(inet->isExternal());
|
||||
assert(inet->getCell() == cell);
|
||||
}
|
||||
}
|
||||
\endcode
|
||||
|
@ -316,10 +324,9 @@ if (cell) {
|
|||
Cell* cell = ...; // we get the cell
|
||||
|
||||
if (cell) {
|
||||
for_each_net(net, cellgetExternalNets()) {
|
||||
assert(netIsExternal());
|
||||
assert(netgetCell() == cell);
|
||||
end_for;
|
||||
forEach(Net*, inet, cellgetExternalNets()) {
|
||||
assert(inet->isExternal());
|
||||
assert(inet->getCell() == cell);
|
||||
}
|
||||
}
|
||||
\endcode
|
||||
|
@ -328,17 +335,6 @@ if (cell) {
|
|||
// \}
|
||||
|
||||
|
||||
/*! \name Collection Functions
|
||||
*/
|
||||
// \{
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/* \name Others
|
||||
*/
|
||||
// \{
|
||||
|
||||
/* \function void Collection::Fill(list<Type>& list) const;
|
||||
* No description.
|
||||
*/
|
||||
|
@ -352,6 +348,121 @@ if (cell) {
|
|||
* identified elements of a collection.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
/*! \class GenericCollection
|
||||
* \brief Generic Collection auto-pointer.
|
||||
*
|
||||
* This class is an auto-pointer like wrapped around the raw collection.
|
||||
* The database systematically returns collections wrapped inside
|
||||
* GenericCollection.
|
||||
*
|
||||
* \remark The destruction of a GenericCollection triggers the destruction of
|
||||
* the raw collection.
|
||||
*/
|
||||
|
||||
/*! \function GenericCollection::GenericCollection(Collection<Type>* collection);
|
||||
* Constructor from a raw Collection.
|
||||
*
|
||||
* \remark This constructor do not build a copy of the raw collection. So the original
|
||||
* raw collection must not be deleted. It's deletion will occurs with the one
|
||||
* of the GenericCollection.
|
||||
*/
|
||||
|
||||
/*! \function GenericCollection::GenericCollection(const Collection<Type>& collection);
|
||||
* Constructor from a raw Collection.
|
||||
*
|
||||
* \remark This constructor build a \e copy of the raw collection. So the originating
|
||||
* collection can be safely deleted.
|
||||
*/
|
||||
|
||||
/*! \function GenericCollection::GenericCollection(const GenericCollection<Type>& collection);
|
||||
* Constructor from a raw Collection.
|
||||
*
|
||||
* \remark This constructor build a \e copy of the raw collection. So the originating
|
||||
* collection can be safely deleted.
|
||||
*/
|
||||
|
||||
/*! \class SubSetCollection
|
||||
* \brief Applies a Filter to a Collection
|
||||
*
|
||||
* Build a sub-Collection of all the elements of the primary that
|
||||
* match the Filter criterion.
|
||||
*/
|
||||
|
||||
/*! \function SubSetCollection::SubSetCollection(const Collection<Type>& collection, const Filter<Type>& filter);
|
||||
* Constructor from a primary Collection and a Filter.
|
||||
*/
|
||||
|
||||
/*! \function SubSetCollection::SubSetCollection(const SubSetCollection& subSetCollection);
|
||||
* Copy constructor.
|
||||
*/
|
||||
|
||||
/*! \class SubTypeCollection
|
||||
* \brief Applies a Type Filter to a Collection
|
||||
*
|
||||
* Build a sub-Collection of all the elements of the primary that
|
||||
* are of a certain sub-type. The filtering mechanism relies on a
|
||||
* \c dynamic_cast<> so there must be an inheritance path between
|
||||
* the Collection type and the sub-type.
|
||||
*/
|
||||
|
||||
/*! \function SubTypeCollection::SubTypeCollection(const Collection<Type>* collection);
|
||||
* Constructor from a primary Collection and a Filter.
|
||||
*/
|
||||
|
||||
/*! \function SubTypeCollection::SubTypeCollection(const GenericCollection<Type>& collection);
|
||||
* Constructor from a primary Collection and a Filter.
|
||||
*/
|
||||
|
||||
/*! \function SubTypeCollection::SubTypeCollection(const SubTypeCollection& subTypeCollection);
|
||||
* Copy Constructor.
|
||||
*/
|
||||
|
||||
/*! \typedef typedef list<Element> ElementList;
|
||||
* A simple typedef for Collection encapsulated lists.
|
||||
*/
|
||||
|
||||
/*! \class ListCollection
|
||||
* \brief Hurricane Collection wrapper around a std::list.
|
||||
*
|
||||
* Automatically wrap a Hurricane Collection around a stl::list.
|
||||
*/
|
||||
|
||||
/*! \function ListCollection::ListCollection(const ElementList* elementList = NULL);
|
||||
* Constructor from a STL list, the list must not be de-allocated.
|
||||
*/
|
||||
|
||||
/*! \class VectorCollection
|
||||
* \brief Hurricane Collection wrapper around a std::vector.
|
||||
*
|
||||
* Automatically wrap a Hurricane Collection around a stl::vector.
|
||||
*/
|
||||
|
||||
/*! \function VectorCollection::VectorCollection(const ElementVector* elementVector = NULL);
|
||||
* Constructor from a STL vector, the vector must not be de-allocated.
|
||||
*
|
||||
*/
|
||||
|
||||
/*! \class MapCollection
|
||||
* \brief Hurricane Collection wrapper around a std::map.
|
||||
*
|
||||
* Automatically wrap a Hurricane Collection around a stl::map.
|
||||
*/
|
||||
|
||||
/*! \function MapCollection::MapCollection(const ElementMap* elementMap = NULL);
|
||||
* Constructor from a STL map, the map must not be de-allocated.
|
||||
*
|
||||
*/
|
||||
|
||||
/*! \class SetCollection
|
||||
* \brief Hurricane Collection wrapper around a std::set.
|
||||
*
|
||||
* Automatically wrap a Hurricane Collection around a stl::set.
|
||||
*/
|
||||
|
||||
/*! \function SetCollection::SetCollection(const ElementSet* elementSet = NULL);
|
||||
* Constructor from a STL set, the set must not be de-allocated.
|
||||
*
|
||||
*/
|
||||
|
||||
}
|
||||
|
|
|
@ -260,10 +260,6 @@ assert(GetZoomCommand()IsInstalledOn(view));
|
|||
*/
|
||||
|
||||
|
||||
/*! \name Accessors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function const Name& Command::GetName() const;
|
||||
* \Return the command name.
|
||||
*/
|
||||
|
@ -276,25 +272,12 @@ assert(GetZoomCommand()IsInstalledOn(view));
|
|||
* \Return the collection of views where this command is installed.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Predicates
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function bool Command::IsInstalledOn(View* view) const;
|
||||
* \Return \true if the command is installed within the view, else
|
||||
* \false.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
|
||||
/*! \name Messages
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function void Command::_OnInstalledOn(View* view);
|
||||
* Message called upon to inform the command that it has been
|
||||
|
@ -358,12 +341,8 @@ assert(GetZoomCommand()IsInstalledOn(view));
|
|||
* been released.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
|
||||
/*! \name Command Collection
|
||||
*/
|
||||
//! \name Command Collection
|
||||
// \{
|
||||
|
||||
/*! \typedef Commands
|
||||
|
@ -386,10 +365,6 @@ assert(GetZoomCommand()IsInstalledOn(view));
|
|||
// \}
|
||||
|
||||
|
||||
/* \name Installation/Uninstallation
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function void Command::InstallOn(View* view);
|
||||
* Allows to install the command in the view.
|
||||
*
|
||||
|
@ -416,6 +391,4 @@ assert(GetZoomCommand()IsInstalledOn(view));
|
|||
* <b>_OnUnInstalledFrom()</b> is issued by the view.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
}
|
||||
|
|
|
@ -4,11 +4,17 @@
|
|||
|
||||
namespace Hurricane {
|
||||
|
||||
|
||||
/*! \addtogroup Generalities
|
||||
* \{
|
||||
/*! \namespace Hurricane
|
||||
*
|
||||
* \brief Contains Almost Everything.
|
||||
*
|
||||
* Almost everything is inside the Hurricane namespace.
|
||||
*/
|
||||
|
||||
|
||||
//! \addtogroup Generalities
|
||||
// \{
|
||||
|
||||
/*! \function string demangle ( const char* symbol );
|
||||
* Translate (demangle) a symbol from C++ (\c gnu-v3) internal format
|
||||
* into a human readable \string.
|
||||
|
|
|
@ -67,10 +67,6 @@
|
|||
* hook).
|
||||
*/
|
||||
|
||||
/*! \name Accessors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Net* Component::getNet() const;
|
||||
* \Return the net owning the component.
|
||||
*/
|
||||
|
@ -109,31 +105,27 @@
|
|||
* done in both methods, it is wise to redefine the method as
|
||||
* shown below for the Contact :
|
||||
\code
|
||||
Unit Contact::getX() const
|
||||
// ***********************
|
||||
DbU::Unit Contact::getX() const
|
||||
{
|
||||
Component* anchor = getAnchor();
|
||||
return (!anchor) ? _dx : anchorGetX() + _dx;
|
||||
Component* anchor = getAnchor();
|
||||
return (not anchor) ? _dx : anchor->getX() + _dx;
|
||||
}
|
||||
|
||||
Unit Contact::getY() const
|
||||
// ***********************
|
||||
|
||||
DbU::Unit Contact::getY() const
|
||||
{
|
||||
Component* anchor = getAnchor();
|
||||
return (!anchor) ? _dy : anchorGetY() + _dy;
|
||||
Component* anchor = getAnchor();
|
||||
return (not anchor) ? _dy : anchor->getY() + _dy;
|
||||
}
|
||||
|
||||
|
||||
Point Contact::getPosition() const
|
||||
// *******************************
|
||||
{
|
||||
Component* anchor = getAnchor();
|
||||
return (!anchor) ?
|
||||
Point(_dx, _dy) :
|
||||
anchorGetPosition().Translate(_dx, _dy);
|
||||
Component* anchor = getAnchor();
|
||||
return (not anchor) ? Point(_dx, _dy)
|
||||
: anchor->getPosition().Translate(_dx, _dy);
|
||||
}
|
||||
\endcode
|
||||
*
|
||||
*
|
||||
*
|
||||
* Indeed, contacts can possibly bear on other components
|
||||
* through an offset defined by two attributes _dx and _dy. In
|
||||
|
@ -199,12 +191,8 @@ Point Contact::getPosition() const
|
|||
* the rectangular \c \<area\>.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
|
||||
/*! \name Component Collection
|
||||
*/
|
||||
//! \name Component Collection
|
||||
// \{
|
||||
|
||||
/*! \typedef Components
|
||||
|
@ -220,11 +208,10 @@ Point Contact::getPosition() const
|
|||
* some criteria.
|
||||
*/
|
||||
|
||||
/*! \def for_each_component(component, components)
|
||||
/*! \def forEach(Component*, icomponent, components)
|
||||
* Macro for visiting all components of a components collection.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -36,9 +36,6 @@
|
|||
* slots: VIA 5 Contact layer
|
||||
*/
|
||||
|
||||
/*! \name Constructors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function CompositeLayer* CompositeLayer::create(Technology* technology,const Name& name,const CompositeLayer::Type& type,const Unit& minimalSize = 0,const Unit& minimalSpacing = 0);
|
||||
* creates and returns a new composite layer named \c \<name\>,
|
||||
|
@ -49,12 +46,6 @@
|
|||
* empty or if a layer of same name already exists.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Accessors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function const CompositeLayer::Type& CompositeLayer::getType() const;
|
||||
* \Return the composite layer type.
|
||||
|
@ -103,12 +94,6 @@
|
|||
* composite layer.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Modifiers
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function void CompositeLayer::add(BasicLayer* basicLayer,const Unit& contactSize,const Unit& segmentSize,const Unit& segmentExtention,const Unit& padSize);
|
||||
* adds the basic layer with associated characteristics
|
||||
|
@ -150,11 +135,8 @@ assert(metal2GetPadSize(CM2) == padSize);
|
|||
* pertain to the composite layer.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name CompositeLayer Collection
|
||||
*/
|
||||
//! \name CompositeLayer Collection
|
||||
// \{
|
||||
|
||||
/*! \typedef CompositeLayers
|
||||
|
|
|
@ -38,9 +38,6 @@
|
|||
* which means they are absolute.
|
||||
*/
|
||||
|
||||
/*! \name Constructors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Contact* Contact::create(Net* net, const Layer* layer, const DbU::Unit& x, const DbU::Unit& y,const DbU::Unit& width = 0, const DbU::Unit& height = 0);
|
||||
* creates and returns a new contact belonging to the net
|
||||
|
@ -63,12 +60,6 @@
|
|||
* \remark The new contact belongs to the anchor's net.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Accessors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Contact::AnchorHook* Contact::getAnchorHook();
|
||||
* \Return the hook through which the contact can be attached upon an
|
||||
|
@ -115,12 +106,6 @@
|
|||
* \Return the contact half height.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Modifiers
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function void Contact::setLayer(const Layer* layer);
|
||||
* sets the contact layer.
|
||||
|
@ -181,11 +166,8 @@
|
|||
* absolute location.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Contact Collection
|
||||
*/
|
||||
//! \name Contact Collection
|
||||
// \{
|
||||
|
||||
/*! \typedef Contacts
|
||||
|
|
|
@ -0,0 +1,41 @@
|
|||
|
||||
// -*- C++ -*-
|
||||
|
||||
|
||||
namespace Hurricane {
|
||||
|
||||
/*! \class ContactLayer
|
||||
* \brief ContactLayer description (\b API)
|
||||
*
|
||||
* For a more complete description of the Layers objects, please refer
|
||||
* to \ref secLayerIntro "Layer Introduction".
|
||||
*
|
||||
* ContactLayer is a symbolic layer that contains four layers
|
||||
* (metal, cut, active, diffusion) plus an optional well layer.
|
||||
* Use it to represent a contact from the first metal level toward
|
||||
* an active layer.
|
||||
*
|
||||
* The accessors functions:
|
||||
* <ul>
|
||||
* <li>ContactLayer::getTop()
|
||||
* <li>ContactLayer::getBottom()
|
||||
* <li>ContactLayer::getOpposite()
|
||||
* </ul>
|
||||
* Have no meaning here.
|
||||
*
|
||||
* Only enclosure is used. Extention cap & extention width are not used.
|
||||
*/
|
||||
|
||||
|
||||
/*! \function ContactLayer* ContactLayer::create(Technology* technology,const Name& name, BasicLayer* metalLayer, BasicLayer* cutLayer, BasicLayer* activeLayer, BasicLayer* diffusionLayer, BasicLayer* wellLayer);
|
||||
* creates and returns a new contact layer named \c \<name\>,
|
||||
* composed of metal, cut, active & diffusion BasicLayer and an optional WELL
|
||||
* BasicLayer. A NULL value indicates that no NWELL is used.
|
||||
*
|
||||
* \caution Throws an exception if the technology is null, if the name is
|
||||
* empty, if a layer of same name already exists or if we
|
||||
* overflow the capacity of the bit field associated to the
|
||||
* layer mask.
|
||||
*/
|
||||
|
||||
}
|
|
@ -61,7 +61,7 @@
|
|||
* but a posteriori, that is once the object has been fully
|
||||
* built. In order to realize such an operation it must, once
|
||||
* all derived classes constructors have been called, call upon
|
||||
* a function <b>_PostCreate</b> which realizes the additional
|
||||
* a function <b>_postCreate</b> which realizes the additional
|
||||
* work and then return the pointer on the new objects (let us
|
||||
* recall that all member functions which must not be called
|
||||
* directly are prefixed by an underscore).
|
||||
|
@ -71,15 +71,14 @@
|
|||
* object. The following example shows its implementation for a
|
||||
* net :
|
||||
* \code
|
||||
Net* Net::Create(Cell* cell, const Name& name)
|
||||
// *******************************************
|
||||
Net* Net::Create(Cell* cell, const Name& name)
|
||||
{
|
||||
Net* net = new Net(cell, name);
|
||||
|
||||
if (!net)
|
||||
throw Error("Can't create Net : allocation failed");
|
||||
|
||||
net->_PostCreate();
|
||||
net->_postCreate();
|
||||
|
||||
return net;
|
||||
}
|
||||
|
@ -87,51 +86,51 @@
|
|||
*
|
||||
* Within this function, the net is created in a first time
|
||||
* thanks to the constructor spawn by the new operator. If
|
||||
* everything goes right the function <b>_PostCreate</b> is
|
||||
* everything goes right the function <b>_postCreate</b> is
|
||||
* called upon the net. This one realizes the additional
|
||||
* operations that the constructor couldn't realize and then
|
||||
* calls the functions <b>_PostCreate</b> upon the base
|
||||
* calls the functions <b>_postCreate</b> upon the base
|
||||
* classe. If everything goes right the net is returned, else an
|
||||
* exception is thrown if something abnormal or illegal occurs
|
||||
* (i.e. a net with the same name already exists). For the
|
||||
* example of a <b>Line</b> : the different called constructors
|
||||
* will fully characterize the line, then the <b>_PostCreate</b>
|
||||
* will fully characterize the line, then the <b>_postCreate</b>
|
||||
* method on a line will do nothing else than call upon the
|
||||
* <b>_PostCreate</b> method of the <b>go</b> which will insert
|
||||
* <b>_postCreate</b> method of the <b>go</b> which will insert
|
||||
* the line within the <b>QuadTree</b> (this is now feasible,
|
||||
* the line geometry being fully characterized).
|
||||
*
|
||||
* \section sDBoDelete Deletion process
|
||||
* \section sDBodestroy Deletion process
|
||||
*
|
||||
* <b>The Delete() member function :</b>
|
||||
* <b>The destroy() member function :</b>
|
||||
*
|
||||
* Data base ojects can be destroyed only by calling upon this
|
||||
* function and not by calling the C++ standard destructor
|
||||
* (which indeed is not provided).
|
||||
*
|
||||
* A process similar but opposite to the creation process is
|
||||
* required. A function <b>_PreDelete</b> must be called upon
|
||||
* required. A function <b>_preDestroy</b> must be called upon
|
||||
* before the effective object destruction. As a matter of fact,
|
||||
* if we take again the case of the <b>Line</b> for example, the
|
||||
* line must be removed from the <b>QuadTree</b> before the
|
||||
* destruction of its geometric characteristics (inverse of the
|
||||
* previous phenomenon). Therefore the Delete function is
|
||||
* previous phenomenon). Therefore the destroy function is
|
||||
* implemented that way :
|
||||
* \code
|
||||
void DBo::Delete()
|
||||
void DBo::destroy()
|
||||
// ***************
|
||||
{
|
||||
_PreDelete();
|
||||
_preDestroy();
|
||||
|
||||
delete *this;
|
||||
delete this;
|
||||
}
|
||||
* \endcode
|
||||
*
|
||||
* \section sDBoExtentions Extentions
|
||||
*
|
||||
* For any new sub-type of DBo you must adhere to the same
|
||||
* protocol. That is provide the methods _PostCreate and
|
||||
* _PreDelete calling the methods _PostCreate and _PreDelete of
|
||||
* protocol. That is provide the methods _postCreate and
|
||||
* _preDestroy calling the methods _postCreate and _preDestroy of
|
||||
* their base class. Furthermore you must provide when this
|
||||
* class is instantiable a creation function (caution : only the
|
||||
* creation function, if any, must be \public (and \static) the
|
||||
|
@ -140,74 +139,56 @@
|
|||
* Extracted from the .h of a new type of cell.
|
||||
* \code
|
||||
class MyCell : public Cell {
|
||||
// ***********************
|
||||
|
||||
// Types
|
||||
// *****
|
||||
|
||||
public: typedef Cell Inherit;
|
||||
|
||||
// Construction
|
||||
// ************
|
||||
|
||||
protected: MyCell(Library* library, const Name& name);
|
||||
|
||||
public: static MyCell* Create(Library* library, const Name& name);
|
||||
|
||||
// Others
|
||||
// ******
|
||||
|
||||
protected: virtual void _PostCreate();
|
||||
|
||||
protected: virtual void _PreDelete();
|
||||
|
||||
public:
|
||||
typedef Cell Inherit;
|
||||
public:
|
||||
// User-accessible creation method.
|
||||
static MyCell* Create (Library* library, const Name& name);
|
||||
protected:
|
||||
// Internally used constructors & destructors.
|
||||
MyCell (Library* library, const Name& name);
|
||||
virtual void _postCreate ();
|
||||
virtual void _preDestroy ();
|
||||
};
|
||||
* \endcode
|
||||
* Extracted from the .cpp for this new type of cell.
|
||||
* \code
|
||||
MyCell::MyCell(Library* library, const Name& name)
|
||||
// ***********************************************
|
||||
: Inherit(library, name)
|
||||
: Inherit(library, name)
|
||||
{ }
|
||||
|
||||
|
||||
MyCell* MyCell::Create(Library* library, const Name& name)
|
||||
{
|
||||
MyCell* myCell = new MyCell(library, name);
|
||||
|
||||
if (!myCell) throw Error("Can't create MyCell : allocation failed");
|
||||
|
||||
myCell->_postCreate(); // must not be forgotten!
|
||||
|
||||
return myCell;
|
||||
}
|
||||
|
||||
MyCell* MyCell::Create(Library* library, const Name& name)
|
||||
// *******************************************************
|
||||
|
||||
void MyCell::_postCreate()
|
||||
{
|
||||
MyCell* myCell = new MyCell(library, name);
|
||||
Inherit::_postCreate(); // must not be forgotten!
|
||||
|
||||
if (!myCell)
|
||||
throw Error("Can't create MyCell : allocation failed");
|
||||
|
||||
myCell->_PostCreate(); // must not be forgotten!
|
||||
|
||||
return myCell;
|
||||
}
|
||||
|
||||
void MyCell::_PostCreate()
|
||||
// ***********************
|
||||
{
|
||||
// complete here the post creation
|
||||
|
||||
Inherit::_PostCreate(); // must not be forgotten!
|
||||
|
||||
// posibly do something here
|
||||
}
|
||||
|
||||
void MyCell::_PreDelete()
|
||||
// **********************
|
||||
|
||||
void MyCell::_preDestroy()
|
||||
{
|
||||
// posibly do something here
|
||||
Inherit::_preDestroy(); // must not be forgotten!
|
||||
|
||||
Inherit::_PreDelete(); // must not be forgotten!
|
||||
|
||||
// complete here the pre deletion
|
||||
// complete here the pre-deletion.
|
||||
}
|
||||
* \endcode
|
||||
*
|
||||
* \remark The destructor, strictly speaking, is not defined because
|
||||
* necessary operations are done within the method
|
||||
* <b>_PreDelete</b>.
|
||||
* <b>_preDestroy</b>.
|
||||
* In the implementation of the class <b>MyCell</b> we have only
|
||||
* used the type <b>Inherit</b> (and never <b>Cell</b>). This opens
|
||||
* the door to hierarchy changes without affecting the code already
|
||||
|
@ -224,12 +205,9 @@
|
|||
|
||||
/*! \function void DBo::destroy ();
|
||||
*
|
||||
* The legal method to delete any DBo object (see \ref sDBoDelete).
|
||||
* The legal method to delete any DBo object (see \ref sDBodestroy).
|
||||
*/
|
||||
|
||||
/*! \name Accessors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Property* DBo::getProperty ( const Name& name ) const;
|
||||
* \param name Name of the Property to return.
|
||||
|
@ -237,12 +215,11 @@
|
|||
*
|
||||
* \remark When writting what follows :
|
||||
* \code
|
||||
for_each_dbo(dbo, dbos) {
|
||||
Property* property = dbo->getProperty("width");
|
||||
if (property) {
|
||||
// do something
|
||||
}
|
||||
end_for;
|
||||
forEach(DBo*, idbo, dbos) {
|
||||
Property* property = idbo->getProperty("width");
|
||||
if (property) {
|
||||
// do something
|
||||
}
|
||||
}
|
||||
* \endcode
|
||||
*
|
||||
|
@ -251,23 +228,21 @@
|
|||
* efficient to write :
|
||||
* \code
|
||||
Name width = "width";
|
||||
for_each_dbo(dbo, dbos) {
|
||||
Property* property = dbo->getProperty(width);
|
||||
if (property) {
|
||||
// do something
|
||||
}
|
||||
end_for;
|
||||
forEach(DBo*, idbo, dbos) {
|
||||
Property* property = idbo->getProperty(width);
|
||||
if (property) {
|
||||
// do something
|
||||
}
|
||||
}
|
||||
* \endcode
|
||||
* Or still better :
|
||||
* \code
|
||||
static Name WIDTH = "width";
|
||||
for_each_dbo(dbo, dbos) {
|
||||
Property* property = dbo->getProperty(WIDTH);
|
||||
if (property) {
|
||||
// do something
|
||||
}
|
||||
end_for;
|
||||
forEach(DBo*, idbo, dbos) {
|
||||
Property* property = idbo->getProperty(WIDTH);
|
||||
if (property) {
|
||||
// do something
|
||||
}
|
||||
}
|
||||
* \endcode
|
||||
* This remark applies each time you handle names.
|
||||
|
@ -277,23 +252,11 @@
|
|||
* \return The property Collection associated to the object (possibly empty).
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Predicates
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function bool DBo::hasProperty () const;
|
||||
* \return \true if the object has at least a property, else \false.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Modifiers
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function void DBo::put ( Property* property );
|
||||
*
|
||||
|
@ -324,11 +287,8 @@
|
|||
* removes all properties attached to this object.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name DBo Collection
|
||||
*/
|
||||
//! \name DBo Collection
|
||||
// \{
|
||||
|
||||
/*! \typedef typedef GenericCollection<DBo*> DBos;
|
||||
|
|
|
@ -26,22 +26,12 @@
|
|||
*/
|
||||
|
||||
|
||||
/*! \name Constructors & Destructors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function DataBase* DataBase::create ();
|
||||
* creates and returns a pointer to a new DataBase.
|
||||
*
|
||||
* \caution An exception is thrown if a Database already exists.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Accessors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function DataBase* DataBase::getDB ();
|
||||
* This static function returns the current
|
||||
|
@ -57,6 +47,4 @@
|
|||
* \return the root Library if it exists, else \NULL.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
}
|
||||
|
|
|
@ -71,11 +71,19 @@
|
|||
*
|
||||
* \section secDbUGrid Grid
|
||||
*
|
||||
* Thoses function are closely related to editors. They allow to
|
||||
* restrict to positions on a grid. We support three kind of grid,
|
||||
* real, symbolic and user defined.
|
||||
*
|
||||
* <ul>
|
||||
* <li><b>DbU::getGridStep</b>
|
||||
* <li><b>DbU::setGridStep</b>
|
||||
* <li><b>DbU::isOnGrid</b>
|
||||
* <li><b>DbU::getOnGridUnit</b>
|
||||
* <li><b>DbU::getRealSnapGridStep</b>
|
||||
* <li><b>DbU::getOnRealSnapGrid</b>
|
||||
* <li><b>DbU::setRealSnapGridStep</b>
|
||||
* <li><b>DbU::getSymbolicSnapGridStep</b>
|
||||
* <li><b>DbU::getOnSymbolicSnapGrid</b>
|
||||
* <li><b>DbU::setSymbolicSnapGridStep</b>
|
||||
* <li><b>DbU::getOnCustomGrid</b>
|
||||
* <li><b>DbU::getOnPhysicalGrid</b>
|
||||
* </ul>
|
||||
*
|
||||
*
|
||||
|
@ -83,16 +91,18 @@
|
|||
*
|
||||
* Translate a DbU::Unit into grid or lambda length :
|
||||
* <ul>
|
||||
* <li><b>long DbU::getDb (DbU::Unit u)</b>
|
||||
* <li><b>double DbU::getGrid (DbU::Unit u)</b>
|
||||
* <li><b>double DbU::getLambda(DbU::Unit u)</b>
|
||||
* <li><b>long DbU::toDb (DbU::Unit u)</b>
|
||||
* <li><b>double DbU::toGrid (DbU::Unit u)</b>
|
||||
* <li><b>double DbU::toLambda (DbU::Unit u)</b>
|
||||
* <li><b>double DbU::toPhysical (DbU::Unit u, UnitPower p)</b>
|
||||
* </ul>
|
||||
*
|
||||
* Translate a lambda length into a DbU::Unit :
|
||||
* <ul>
|
||||
* <li><b>DbU::Unit DbU::db(long u)</b>
|
||||
* <li><b>DbU::Unit DbU::grid(double u)</b>
|
||||
* <li><b>DbU::Unit DbU::lambda(double u)</b>
|
||||
* <li><b>DbU::Unit DbU::fromDb (long v)</b>
|
||||
* <li><b>DbU::Unit DbU::fromGrid (double v)</b>
|
||||
* <li><b>DbU::Unit DbU::fromLambda (double v)</b>
|
||||
* <li><b>DbU::Unit DbU::fromPhysical (double v, UnitPower p)</b>
|
||||
* </ul>
|
||||
*/
|
||||
|
||||
|
@ -134,6 +144,49 @@
|
|||
* Units are printed as symbolic (lambdas).
|
||||
*/
|
||||
|
||||
/*! \function DbU::Unit DbU::fromDb(long u);
|
||||
* \Return the unit corresponding to the value \c \<value\> according to
|
||||
* the current precision. This function do nothing apart from a
|
||||
* cast.
|
||||
*/
|
||||
|
||||
/*! \function DbU::Unit DbU::fromGrid(double value);
|
||||
* \Return the unit corresponding to the <i>grid</i> value \c \<value\>
|
||||
* according to the current precision.
|
||||
*/
|
||||
|
||||
/*! \function DbU::Unit DbU::fromLambda(double value);
|
||||
* \Return the unit corresponding to the <i>symbolic</i> value \c \<value\>
|
||||
* according to the current precision.
|
||||
*/
|
||||
|
||||
/*! \function DbU::Unit DbU::fromPhysical(double value, UnitPower p);
|
||||
* \Return the unit corresponding to the <i>physical</i> value \c \<value\>
|
||||
* with power \c p, according to the current precision.
|
||||
*/
|
||||
|
||||
/*! \function long DbU::toDb(Unit unit);
|
||||
* \Return the external value associated to the unit \c \<unit\>
|
||||
* according to the current precision. This function do
|
||||
* nothing apart from a type cast.
|
||||
*/
|
||||
|
||||
/*! \function double DbU::toGrid(Unit unit);
|
||||
* \Return the value expressed as a number of founder grid steps
|
||||
* associated to the unit \c \<unit\> according to the current
|
||||
* precision.
|
||||
*/
|
||||
|
||||
/*! \function double DbU::toLambda(Unit unit);
|
||||
* \Return the symbolic value (expressed as a number lambdas)
|
||||
* associated to the unit \c \<unit\> according to the current
|
||||
* precision.
|
||||
*/
|
||||
|
||||
/*! \function double DbU::toPhysical(Unit unit, UnitPower p);
|
||||
* \Return the physical value of \c u, expressed in the power \c p.
|
||||
*/
|
||||
|
||||
/*! \function unsigned DbU::getPrecision();
|
||||
* \Return the current precision (whose default is fixed to 1).
|
||||
*/
|
||||
|
@ -168,6 +221,73 @@
|
|||
* \Return How many founder grid steps makes one <i>lambda</i>.
|
||||
*/
|
||||
|
||||
/*! \function void DbU::setStringMode(unsigned int mode);
|
||||
* Sets in which length the units are to be displayed by
|
||||
* getValueString(). Avalaibles modes are :
|
||||
*/
|
||||
|
||||
/*! \function string DbU::getValueString(Unit unit, int mode=SmartTruncate);
|
||||
* \return A character string representing the external value of
|
||||
* \c \<unit\>. The value is converted in the length according
|
||||
* to setStringMode(): database, grid or symbolic.
|
||||
*
|
||||
* \remark This string is shorter than the one we could print from the
|
||||
* external value because non needed decimals are not drawn (nor
|
||||
* the point if value is integer).
|
||||
*/
|
||||
|
||||
/*! \function void DbU::setPrecision(unsigned int precision);
|
||||
* Allows to set the precision at a requested value. This must
|
||||
* be done at the begining of the program (before the creation
|
||||
* of the first unit) and not changed for the following (unless
|
||||
* mandatory and for a temporary period because all existing
|
||||
* units would be misinterpreted).
|
||||
*
|
||||
* \remark This function throws an exception if the requested precision
|
||||
* is greater than the maximal one.
|
||||
*/
|
||||
|
||||
/*! \function void DbU::setRealSnapGridStep(const DbU::Unit gridStep);
|
||||
* Set the real (founder) grid step.
|
||||
*/
|
||||
|
||||
/*! \function DbU::Unit DbU::getRealSnapGridStep();
|
||||
* Get the real (founder) grid step.
|
||||
*/
|
||||
|
||||
/*! \function DbU::Unit DbU::getOnRealSnapGrid(DbU::Unit u, DbU::SnapMode mode=DbU::Nearest);
|
||||
* Get the snap point from the unit \c u, using the rounding mode \c mode.
|
||||
*/
|
||||
|
||||
/*! \function void DbU::setSymbolicSnapGridStep(const DbU::Unit gridStep);
|
||||
* Set the symbolic grid step.
|
||||
*/
|
||||
|
||||
/*! \function DbU::Unit DbU::getSymbolicSnapGridStep();
|
||||
* Get the symbolic grid step.
|
||||
*/
|
||||
|
||||
/*! \function DbU::Unit DbU::getOnSymbolicSnapGrid(DbU::Unit u, DbU::SnapMode mode=DbU::Nearest);
|
||||
* Get the snap point from the unit \c u, using the rounding mode \c mode.
|
||||
*/
|
||||
|
||||
/*! \function DbU::Unit DbU::getOnCustomGrid(DbU::Unit u, DbU::Unit step, DbU::SnapMode mode=DbU::Nearest);
|
||||
* Get the snap point from the unit \c u, with grid step \c step
|
||||
* using the rounding mode \c mode.
|
||||
*/
|
||||
|
||||
/*! \function DbU::Unit DbU::getOnPhysicalGrid(DbU::Unit u, DbU::SnapMode mode=DbU::Superior);
|
||||
* Get the physical grid unit nearest to \c u, with \c mode rounding.
|
||||
* using the rounding mode \c mode.
|
||||
*/
|
||||
|
||||
/*! \name Obsoleteds
|
||||
*
|
||||
* Due to their somewhat unclear naming convention, those functions
|
||||
* have been renamed by the \e to / \e from variants.
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function DbU::Unit DbU::db(long u);
|
||||
* \Return the unit corresponding to the value \c \<value\> according to
|
||||
* the current precision. This function do nothing apart from a
|
||||
|
@ -202,34 +322,43 @@
|
|||
* precision.
|
||||
*/
|
||||
|
||||
/*! \function void DbU::setStringMode(unsigned int mode);
|
||||
* Sets in which length the units are to be displayed by
|
||||
* getValueString(). Avalaibles modes are :
|
||||
// \}
|
||||
|
||||
/*! \enum DbU::UnitPower
|
||||
* This enumeration defines the power applicable to physical units.
|
||||
*/
|
||||
/*! \var DbU::UnitPower DbU::Pico
|
||||
* 10e-12
|
||||
*/
|
||||
/*! \var DbU::UnitPower DbU::Nano
|
||||
* 10e-9
|
||||
*/
|
||||
/*! \var DbU::UnitPower DbU::Micro
|
||||
* 10e-6
|
||||
*/
|
||||
/*! \var DbU::UnitPower DbU::Milli
|
||||
* 10e-3
|
||||
*/
|
||||
/*! \var DbU::UnitPower DbU::Unity
|
||||
* 1
|
||||
*/
|
||||
/*! \var DbU::UnitPower DbU::Kilo
|
||||
* 10e+3
|
||||
*/
|
||||
|
||||
/*! \function string DbU::getValueString(Unit unit, int mode=SmartTruncate);
|
||||
* \return A character string representing the external value of
|
||||
* \c \<unit\>. The value is converted in the length according
|
||||
* to setStringMode(): database, grid or symbolic.
|
||||
*
|
||||
* \remark This string is shorter than the one we could print from the
|
||||
* external value because non needed decimals are not drawn (nor
|
||||
* the point if value is integer).
|
||||
/*! \enum DbU::SnapMode
|
||||
* This enumeration defines the rounding applicable to the grid management
|
||||
* functions.
|
||||
*/
|
||||
|
||||
/*! \function void DbU::setPrecision(unsigned int precision);
|
||||
* Allows to set the precision at a requested value. This must
|
||||
* be done at the begining of the program (before the creation
|
||||
* of the first unit) and not changed for the following (unless
|
||||
* mandatory and for a temporary period because all existing
|
||||
* units would be misinterpreted).
|
||||
*
|
||||
* \remark This function throws an exception if the requested precision
|
||||
* is greater than the maximal one.
|
||||
/*! \var DbU::SnapMode DbU::Inferior
|
||||
* Round to the inferior grid point.
|
||||
*/
|
||||
|
||||
/* \function void DbU::setGridStep(const Unit& gridStep);
|
||||
* Allows to change the grid step.
|
||||
/*! \var DbU::SnapMode DbU::Superior
|
||||
* Round to the superior grid point.
|
||||
*/
|
||||
/*! \var DbU::SnapMode DbU::Nearest
|
||||
* Round nearest grid point, inferior or superior depending on the
|
||||
* distance.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
|
|
@ -0,0 +1,41 @@
|
|||
|
||||
|
||||
// -*- C++ -*-
|
||||
|
||||
|
||||
namespace Hurricane {
|
||||
|
||||
/*! \class DiffusionLayer
|
||||
* \brief DiffusionLayer description (\b API)
|
||||
*
|
||||
* For a more complete description of the Layers objects, please refer
|
||||
* to \ref secLayerIntro "Layer Introduction".
|
||||
*
|
||||
* DiffusionLayer is a symbolic layer that contains two or three layers,
|
||||
* an active layer, a diffusion layer and an optional WELL layer.
|
||||
*
|
||||
* The accessors functions:
|
||||
* <ul>
|
||||
* <li>DiffusionLayer::getTop()
|
||||
* <li>DiffusionLayer::getBottom()
|
||||
* <li>DiffusionLayer::getOpposite()
|
||||
* </ul>
|
||||
* Have no meaning here.
|
||||
*
|
||||
* Only extention cap & extention width are used here. Enclosure is not
|
||||
* used.
|
||||
*/
|
||||
|
||||
|
||||
/*! \function DiffusionLayer* DiffusionLayer::create(Technology* technology,const Name& name, BasicLayer* activeLayer, BasicLayer* diffusionLayer, BasicLayer* wellLayer);
|
||||
* creates and returns a new diffusion layer named \c \<name\>,
|
||||
* composed of active & diffusion BasicLayer and an optional WELL
|
||||
* BasicLayer. A NULL value indicates that no NWELL is used.
|
||||
*
|
||||
* \caution Throws an exception if the technology is null, if the name is
|
||||
* empty, if a layer of same name already exists or if we
|
||||
* overflow the capacity of the bit field associated to the
|
||||
* layer mask.
|
||||
*/
|
||||
|
||||
}
|
|
@ -0,0 +1,184 @@
|
|||
<doxygenlayout version="1.0">
|
||||
<!-- Navigation index tabs for HTML output -->
|
||||
<navindex>
|
||||
<tab type="mainpage" visible="yes" title=""/>
|
||||
<tab type="pages" visible="yes" title=""/>
|
||||
<tab type="modules" visible="yes" title=""/>
|
||||
<tab type="namespaces" visible="yes" title="">
|
||||
<tab type="namespaces" visible="yes" title=""/>
|
||||
<tab type="namespacemembers" visible="yes" title=""/>
|
||||
</tab>
|
||||
<tab type="classes" visible="yes" title="">
|
||||
<tab type="classes" visible="yes" title=""/>
|
||||
<tab type="classindex" visible="$ALPHABETICAL_INDEX" title=""/>
|
||||
<tab type="hierarchy" visible="yes" title=""/>
|
||||
<tab type="classmembers" visible="yes" title=""/>
|
||||
</tab>
|
||||
<tab type="files" visible="yes" title="">
|
||||
<tab type="files" visible="yes" title=""/>
|
||||
<tab type="globals" visible="yes" title=""/>
|
||||
</tab>
|
||||
<tab type="dirs" visible="yes" title=""/>
|
||||
<tab type="examples" visible="yes" title=""/>
|
||||
</navindex>
|
||||
|
||||
<!-- Layout definition for a class page -->
|
||||
<class>
|
||||
<briefdescription visible="yes"/>
|
||||
<includes visible="$SHOW_INCLUDE_FILES"/>
|
||||
<inheritancegraph visible="$CLASS_GRAPH"/>
|
||||
<collaborationgraph visible="$COLLABORATION_GRAPH"/>
|
||||
<allmemberslink visible="yes"/>
|
||||
<memberdecl>
|
||||
<nestedclasses visible="yes" title=""/>
|
||||
<publictypes title=""/>
|
||||
<publicslots title=""/>
|
||||
<signals title=""/>
|
||||
<publicmethods title=""/>
|
||||
<publicstaticmethods title=""/>
|
||||
<publicattributes title=""/>
|
||||
<publicstaticattributes title=""/>
|
||||
<protectedtypes title=""/>
|
||||
<protectedslots title=""/>
|
||||
<protectedmethods title=""/>
|
||||
<protectedstaticmethods title=""/>
|
||||
<protectedattributes title=""/>
|
||||
<protectedstaticattributes title=""/>
|
||||
<packagetypes title=""/>
|
||||
<packagemethods title=""/>
|
||||
<packagestaticmethods title=""/>
|
||||
<packageattributes title=""/>
|
||||
<packagestaticattributes title=""/>
|
||||
<properties title=""/>
|
||||
<events title=""/>
|
||||
<privatetypes title=""/>
|
||||
<privateslots title=""/>
|
||||
<privatemethods title=""/>
|
||||
<privatestaticmethods title=""/>
|
||||
<privateattributes title=""/>
|
||||
<privatestaticattributes title=""/>
|
||||
<friends title=""/>
|
||||
<related title="" subtitle=""/>
|
||||
<membergroups visible="yes"/>
|
||||
</memberdecl>
|
||||
<detaileddescription title=""/>
|
||||
<memberdef>
|
||||
<typedefs title=""/>
|
||||
<enums title=""/>
|
||||
<constructors title=""/>
|
||||
<functions title=""/>
|
||||
<related title=""/>
|
||||
<variables title=""/>
|
||||
<properties title=""/>
|
||||
<events title=""/>
|
||||
</memberdef>
|
||||
<usedfiles visible="$SHOW_USED_FILES"/>
|
||||
<authorsection visible="yes"/>
|
||||
</class>
|
||||
|
||||
<!-- Layout definition for a namespace page -->
|
||||
<namespace>
|
||||
<briefdescription visible="yes"/>
|
||||
<memberdecl>
|
||||
<nestednamespaces visible="yes" title=""/>
|
||||
<classes visible="yes" title=""/>
|
||||
<typedefs title=""/>
|
||||
<enums title=""/>
|
||||
<functions title=""/>
|
||||
<variables title=""/>
|
||||
<membergroups visible="yes"/>
|
||||
</memberdecl>
|
||||
<detaileddescription title=""/>
|
||||
<memberdef>
|
||||
<typedefs title=""/>
|
||||
<enums title=""/>
|
||||
<functions title=""/>
|
||||
<variables title=""/>
|
||||
</memberdef>
|
||||
<authorsection visible="yes"/>
|
||||
</namespace>
|
||||
|
||||
<!-- Layout definition for a file page -->
|
||||
<file>
|
||||
<briefdescription visible="yes"/>
|
||||
<includes visible="$SHOW_INCLUDE_FILES"/>
|
||||
<includegraph visible="$INCLUDE_GRAPH"/>
|
||||
<includedbygraph visible="$INCLUDED_BY_GRAPH"/>
|
||||
<sourcelink visible="yes"/>
|
||||
<memberdecl>
|
||||
<classes visible="yes" title=""/>
|
||||
<namespaces visible="yes" title=""/>
|
||||
<defines title=""/>
|
||||
<typedefs title=""/>
|
||||
<enums title=""/>
|
||||
<functions title=""/>
|
||||
<variables title=""/>
|
||||
<membergroups visible="yes"/>
|
||||
</memberdecl>
|
||||
<detaileddescription title=""/>
|
||||
<memberdef>
|
||||
<defines title=""/>
|
||||
<typedefs title=""/>
|
||||
<enums title=""/>
|
||||
<functions title=""/>
|
||||
<variables title=""/>
|
||||
</memberdef>
|
||||
<authorsection/>
|
||||
</file>
|
||||
|
||||
<!-- Layout definition for a group page -->
|
||||
<group>
|
||||
<briefdescription visible="yes"/>
|
||||
<groupgraph visible="$GROUP_GRAPHS"/>
|
||||
<memberdecl>
|
||||
<classes visible="yes" title=""/>
|
||||
<namespaces visible="yes" title=""/>
|
||||
<dirs visible="yes" title=""/>
|
||||
<nestedgroups visible="yes" title=""/>
|
||||
<files visible="yes" title=""/>
|
||||
<defines title=""/>
|
||||
<typedefs title=""/>
|
||||
<enums title=""/>
|
||||
<enumvalues title=""/>
|
||||
<functions title=""/>
|
||||
<variables title=""/>
|
||||
<signals title=""/>
|
||||
<publicslots title=""/>
|
||||
<protectedslots title=""/>
|
||||
<privateslots title=""/>
|
||||
<events title=""/>
|
||||
<properties title=""/>
|
||||
<friends title=""/>
|
||||
<membergroups visible="yes"/>
|
||||
</memberdecl>
|
||||
<detaileddescription title=""/>
|
||||
<memberdef>
|
||||
<pagedocs/>
|
||||
<defines title=""/>
|
||||
<typedefs title=""/>
|
||||
<enums title=""/>
|
||||
<enumvalues title=""/>
|
||||
<functions title=""/>
|
||||
<variables title=""/>
|
||||
<signals title=""/>
|
||||
<publicslots title=""/>
|
||||
<protectedslots title=""/>
|
||||
<privateslots title=""/>
|
||||
<events title=""/>
|
||||
<properties title=""/>
|
||||
<friends title=""/>
|
||||
</memberdef>
|
||||
<authorsection visible="yes"/>
|
||||
</group>
|
||||
|
||||
<!-- Layout definition for a directory page -->
|
||||
<directory>
|
||||
<briefdescription visible="yes"/>
|
||||
<directorygraph visible="yes"/>
|
||||
<memberdecl>
|
||||
<dirs visible="yes"/>
|
||||
<files visible="yes"/>
|
||||
</memberdecl>
|
||||
<detaileddescription title=""/>
|
||||
</directory>
|
||||
</doxygenlayout>
|
|
@ -14,10 +14,6 @@
|
|||
*/
|
||||
|
||||
|
||||
/*! \name Accessors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Cell* Entity::getCell () const;
|
||||
* \return Returns the cell owning this entity (when the Entity is a Cell,
|
||||
* the Cell itself is returned)
|
||||
|
@ -34,11 +30,8 @@
|
|||
* Instance of the Plug.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Entity Collection
|
||||
*/
|
||||
//! \name Entity Collection
|
||||
// \{
|
||||
|
||||
/*! \typedef typedef GenericCollection<Entity*> Entities;
|
||||
|
|
|
@ -17,7 +17,7 @@ try {
|
|||
throw Error("Something strange");
|
||||
}
|
||||
catch {Exception& exception) {
|
||||
cerr << exception << endl;
|
||||
cerr << exception.what() << endl;
|
||||
}
|
||||
\endcode
|
||||
* Will produce the message :
|
||||
|
@ -27,10 +27,10 @@ catch {Exception& exception) {
|
|||
* while the following code :
|
||||
\code
|
||||
try {
|
||||
throw Error("Can't create Net : null cell", 3);
|
||||
throw Error(3, "Can't create Net : null cell");
|
||||
}
|
||||
catch {Exception& exception) {
|
||||
cerr << exception << endl;
|
||||
cerr << exception.what() << endl;
|
||||
}
|
||||
\endcode
|
||||
* Will produce the message :
|
||||
|
@ -41,13 +41,13 @@ catch {Exception& exception) {
|
|||
* the following code :
|
||||
\code
|
||||
try {
|
||||
throw Error("Can't create Net : null cell", 3);
|
||||
throw Error(3, "Can't create Net : null cell");
|
||||
}
|
||||
catch {Error& error) {
|
||||
cerr << error.GetReason() << " (code " << error.GetCode() << ")" << endl;
|
||||
cerr << error.getReason() << " (code " << error.getCode() << ")" << endl;
|
||||
}
|
||||
catch {Exception& exception) {
|
||||
cerr << exception << endl;
|
||||
cerr << exception.what() << endl;
|
||||
}
|
||||
\endcode
|
||||
* Which will produce the message :
|
||||
|
@ -62,47 +62,51 @@ Can't create Net : null cell (code 3)
|
|||
* this class.
|
||||
*/
|
||||
|
||||
/*! \name Constructors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Error::Error(const string& reason, int code = 0);
|
||||
* Builds an error characterized by a reason and an error code
|
||||
* useful within a switch.
|
||||
*/
|
||||
|
||||
/*! \function Error::Error(const Error& error);
|
||||
* Copy constructor.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Operators
|
||||
/*! \function Error::Error(const string& reason);
|
||||
* Builds a error characterized by a reason (code defaults to zero).
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Error::Error(const char* format, ...);
|
||||
* Builds a error characterized by a reason, using the \c vararg protocol
|
||||
* and \c printf format (code defaults to zero).
|
||||
*/
|
||||
|
||||
/*! \function Error::Error(int code, const string& reason);
|
||||
* Builds a error characterized by a reason and a code useful
|
||||
* within a switch.
|
||||
*/
|
||||
|
||||
/*! \function Error::Error(int code, const char* format, ...);
|
||||
* Builds a error characterized by a reason and a code useful
|
||||
* within a switch. The reason is supplied in a \c printf
|
||||
* like fashion.
|
||||
*/
|
||||
|
||||
|
||||
/*! \function Error& Error::operator=(const Error& error);
|
||||
* Assignment operator.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Accessors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function const string& Error::GetReason() const;
|
||||
/*! \function string Error::getReason() const;
|
||||
* \Return the reason for which the error was thrown.
|
||||
*/
|
||||
|
||||
/*! \function int Error::GetCode() const;
|
||||
/*! \function int Error::getCode() const;
|
||||
* \Return the error code number.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
/*! \function string Error::textWhere() const;
|
||||
* \Return A stack trace, suitable for tty.
|
||||
*/
|
||||
|
||||
/*! \function string Error::htmlWhere() const;
|
||||
* \Return A stack trace, suitable for HTML.
|
||||
*/
|
||||
|
||||
}
|
||||
|
|
|
@ -12,6 +12,8 @@
|
|||
* The Exception class groups all exceptions thrown by functions
|
||||
* from the API. This virtual class is only useful to catch
|
||||
* exceptions originating from one of those functions.
|
||||
*
|
||||
* \remark Copy construction is disabled.
|
||||
*
|
||||
*
|
||||
* \section secExceptionExample Example
|
||||
|
@ -22,7 +24,7 @@ try {
|
|||
}
|
||||
catch (Exception& exception) {
|
||||
// Go through here if the exception comes from a function of the API
|
||||
cerr << exception << endl;
|
||||
cerr << exception.what() << endl;
|
||||
exit(1);
|
||||
}
|
||||
catch (...) {
|
||||
|
@ -34,6 +36,31 @@ catch (...) {
|
|||
\endcode
|
||||
*/
|
||||
|
||||
/*! \function string Exception::what() const;
|
||||
* \Return an alias over the textWhat() method for convenience.
|
||||
*/
|
||||
|
||||
/*! \function string Exception::textWhat() const;
|
||||
* \Return an informative (hopefully) about what has caused the exception to
|
||||
* occurs. Formatted for an output on a tty.
|
||||
*
|
||||
* \see setTextTranslator
|
||||
*/
|
||||
|
||||
/*! \function string Exception::htmlWhat() const;
|
||||
* \Return an informative (hopefully) about what has caused the exception to
|
||||
* occurs. Formatted for an output on a HTML capable device.
|
||||
*
|
||||
* \see setHtmlTranslator
|
||||
*/
|
||||
|
||||
/*! \function string Exception::setTextTranslator(const TextTranslator& translator);
|
||||
* Set the translator used for text (tty) output.
|
||||
*/
|
||||
|
||||
/*! \function string Exception::setHtmlTranslator(const TextTranslator& translator);
|
||||
* Set the translator used for HTML (hint: Qt manage simple HTML in text)
|
||||
* output.
|
||||
*/
|
||||
|
||||
}
|
||||
|
|
|
@ -19,46 +19,9 @@
|
|||
* You will have also to define the default constructor, the
|
||||
* copy constructor, the assignment operator and overload the
|
||||
* two following member functions :
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/*! \name Accessors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Filter<Type>* Filter::getClone() const;
|
||||
* \Return a filter copy.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Predicates
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function bool Filter::accept(Type element) const;
|
||||
* This member function returns \true if the filter accepts the
|
||||
* element else \false.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Operators
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function GenericFilter<Type> Filter::operator ! () const;
|
||||
* \Return the inverse filter of the filter \c \<this\> (accepted
|
||||
* elements are those rejected and conversely).
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \section secFilterSimpleExample Simple example
|
||||
*
|
||||
*
|
||||
* \section secFilterSimpleExample Simple Example
|
||||
*
|
||||
* Definition of the filter selecting external nets of a cell :
|
||||
\code
|
||||
|
@ -75,7 +38,7 @@ class IsExternal : public Filter<Net*> {
|
|||
|
||||
virtual Filter<Net*>* getClone() const {return new IsExternal(*this);};
|
||||
|
||||
virtual bool accept(Net* net) const {return netIsExternal();};
|
||||
virtual bool accept(Net* net) const {return net->isExternal();};
|
||||
|
||||
};
|
||||
\endcode
|
||||
|
@ -97,11 +60,9 @@ Nets Cell::getInternalNets() const
|
|||
return getNets().getSubSet(!IsExternal());
|
||||
}
|
||||
\endcode
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/*! \section secFilterComplexExample Complex example
|
||||
*
|
||||
*
|
||||
* \section secFilterComplexExample Complex Example
|
||||
*
|
||||
* In order to implement previous examples we could have used
|
||||
* filter with a simpler interface. Now the filters as they are
|
||||
|
@ -140,18 +101,17 @@ class MyFilter : public Filter<Net*> {
|
|||
|
||||
virtual bool accept(Net* net) const
|
||||
{
|
||||
return netIsExternal() && (netGetName()[0] == _c);
|
||||
return net->isExternal() && (net->getName()[0] == _c);
|
||||
};
|
||||
|
||||
};
|
||||
\endcode
|
||||
* Afterwards do
|
||||
\code
|
||||
for_each_net(net, cellGetNets().getSubSet(MyFilter('k'))) {
|
||||
assert(net->IsExternal());
|
||||
assert(net->getName()[0] == 'k');
|
||||
cerr << "net: " << net << endl;
|
||||
end_for;
|
||||
forEach(Net*, inet, cell->getNets().getSubSet(MyFilter('k'))) {
|
||||
assert(inet->isExternal());
|
||||
assert(inet->getName()[0] == 'k');
|
||||
cerr << "net: " << (*inet) << endl;
|
||||
}
|
||||
\endcode
|
||||
* Although this example is not of great interest, it
|
||||
|
@ -168,18 +128,16 @@ for_each_net(net, cellGetNets().getSubSet(MyFilter('k'))) {
|
|||
* Indeed, for the previous example, preferably write it like
|
||||
* this :
|
||||
\code
|
||||
for_each_net(net, cellGetNets()) {
|
||||
if (netIsExternal() && (net->getName()[0] == 'k'))
|
||||
cerr << "net: " << net << endl;
|
||||
end_for;
|
||||
forEach(Net*, inet, cell->getNets()) {
|
||||
if (inet->isExternal() && (inet->getName()[0] == 'k'))
|
||||
cerr << "net: " << *net << endl;
|
||||
}
|
||||
\endcode
|
||||
* or more simply :
|
||||
\code
|
||||
for_each_net(net, cellGetExternalNets()) {
|
||||
if (net->getName()[0] == 'k')
|
||||
cerr << "net: " << net << endl;
|
||||
end_for;
|
||||
forEach(Net*, net, cell->getExternalNets()) {
|
||||
if (inet->getName()[0] == 'k')
|
||||
cerr << "net: " << *inet << endl;
|
||||
}
|
||||
\endcode
|
||||
* Filters are objects like any other : they can be passed as
|
||||
|
@ -204,5 +162,78 @@ Nets Cell::getNets(const NetFilter& filter) const
|
|||
*/
|
||||
|
||||
|
||||
/*! \function Filter<Type>* Filter::getClone() const;
|
||||
* \Return a filter copy.
|
||||
*/
|
||||
|
||||
|
||||
/*! \function bool Filter::accept(Type element) const;
|
||||
* This member function returns \true if the filter accepts the
|
||||
* element else \false.
|
||||
*/
|
||||
|
||||
|
||||
/*! \function GenericFilter<Type> Filter::operator ! () const;
|
||||
* \Return the inverse filter of the filter \c \<this\> (accepted
|
||||
* elements are those rejected and conversely).
|
||||
*/
|
||||
|
||||
|
||||
/*! \class GenericFilter
|
||||
* \brief Generic Filter auto-pointer.
|
||||
*
|
||||
* This class is an auto-pointer like wrapped around the raw filter.
|
||||
* The database systematically returns filters wrapped inside
|
||||
* GenericFilter.
|
||||
*
|
||||
* \remark The destruction of a GenericFilter triggers the destruction of
|
||||
* the raw filter.
|
||||
*/
|
||||
|
||||
/*! \function GenericFilter::GenericFilter(Filter<Type>* filter);
|
||||
* Constructor from a raw Filter.
|
||||
*
|
||||
* \remark This constructor do not build a copy of the raw filter. So the original
|
||||
* raw filter must not be deleted. It's deletion will occurs with the one
|
||||
* of the GenericFilter.
|
||||
*/
|
||||
|
||||
/*! \function GenericFilter::GenericFilter(const Filter<Type>& filter);
|
||||
* Constructor from a raw Filter.
|
||||
*
|
||||
* \remark This constructor build a \e copy of the raw filter. So the originating
|
||||
* filter can be safely deleted.
|
||||
*/
|
||||
|
||||
/*! \function GenericFilter::GenericFilter(const GenericFilter<Type>& filter);
|
||||
* Constructor from a raw Filter.
|
||||
*
|
||||
* \remark This constructor build a \e copy of the raw filter. So the originating
|
||||
* filter can be safely deleted.
|
||||
*/
|
||||
|
||||
|
||||
/*! \class NotFilter
|
||||
* \brief Filter negation.
|
||||
*
|
||||
* This filter invert the matching criterion of any other filter.
|
||||
*
|
||||
* \remark This is a raw Filter.
|
||||
*
|
||||
*/
|
||||
|
||||
/*! \function NotFilter::NotFilter(const Filter<Type>& filter);
|
||||
* Constructor from a raw Filter.
|
||||
*
|
||||
* \remark This constructor build a \e copy of the raw filter. So the originating
|
||||
* filter can be safely deleted.
|
||||
*/
|
||||
|
||||
/*! \function NotFilter::NotFilter(const NotFilter<Type>& filter);
|
||||
* Copy constructor.
|
||||
*
|
||||
* \remark This constructor build a \e copy of the raw filter. So the originating
|
||||
* filter can be safely deleted.
|
||||
*/
|
||||
|
||||
}
|
||||
|
|
|
@ -141,9 +141,6 @@ if (cell) {
|
|||
* it.
|
||||
*/
|
||||
|
||||
/*! \name Constructors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function GenericCollection<Type>::GenericCollection();
|
||||
* Default constructor : The generic collection is unbound and
|
||||
|
@ -175,13 +172,6 @@ if (cell) {
|
|||
* empty).
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
|
||||
/*! \name Operators
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function GenericCollection<Type>& GenericCollection::operator=(const Collection<Type>& collection);
|
||||
* Assignment operator : if the generic collection was bound to
|
||||
|
@ -203,8 +193,4 @@ if (cell) {
|
|||
* \remark Here, again, you can do that only once ...
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -21,6 +21,4 @@
|
|||
* don't detail this class. Kwowing that they exist is enough.
|
||||
*/
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -64,15 +64,15 @@
|
|||
* type: Let us examine the following piece of code which
|
||||
* illustrates that
|
||||
\code
|
||||
OpenUpdateSession();
|
||||
UpdateSession::open();
|
||||
|
||||
contact->SetLayer(...);
|
||||
contact->SetSizes(...);
|
||||
contact->SetPosition(...);
|
||||
contact->setLayer(...);
|
||||
contact->setSize(...);
|
||||
contact->setPosition(...);
|
||||
|
||||
CloseUpdateSession();
|
||||
UpdateSession::close();
|
||||
\endcode
|
||||
* The call to the generic function <b>OpenUpdateSession()</b>
|
||||
* The call to the generic function <b>UpdateSession::open()</b>
|
||||
* allows to open a new update_session.
|
||||
*
|
||||
* The three following lines call upon functions which modify
|
||||
|
@ -80,7 +80,7 @@ CloseUpdateSession();
|
|||
* directly or indirectly bear on it.
|
||||
*
|
||||
* At last the call to the generic function
|
||||
* <b>CloseUpdateSession()</b> allows to close the last update
|
||||
* <b>UpdateSession::close()</b> allows to close the last update
|
||||
* session currently open.
|
||||
*
|
||||
* type: What does really happen ?
|
||||
|
@ -90,7 +90,7 @@ CloseUpdateSession();
|
|||
* placed on the top of this stack represents the current
|
||||
* session.
|
||||
*
|
||||
* When the object is modified : the method <b>Invalidate</b>
|
||||
* When the object is modified : the method <b>Go::invalidate()</b>
|
||||
* which we will detail later is called upon. The purpose of
|
||||
* this method is to de-materialize all materialized objects
|
||||
* affected directly or indirectly by this modification and
|
||||
|
@ -121,25 +121,15 @@ CloseUpdateSession();
|
|||
*/
|
||||
|
||||
|
||||
|
||||
/*! \name Predicates
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function bool Go::autoMaterializationIsDisabled();
|
||||
* No description.
|
||||
* \Return \true if the automatic materialization is disabled.
|
||||
*/
|
||||
|
||||
/*! \function bool Go::isMaterialized() const;
|
||||
* No description.
|
||||
* \Return \true if the Go is materialized, that is, inserted in the
|
||||
* QuadTree.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Modifiers
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function void Go::enableAutoMaterialization();
|
||||
* \see Go::DisableAutoMaterialization().
|
||||
|
@ -158,21 +148,19 @@ CloseUpdateSession();
|
|||
*
|
||||
* The following sample code shows how to proceed :
|
||||
\code
|
||||
Cell* LoadCellFromFile(...)
|
||||
// ************************
|
||||
Cell* LoadCellFromFile ( ... )
|
||||
{
|
||||
Cell* cell = Cell::Create(...);
|
||||
Cell* cell = Cell::create( ... );
|
||||
|
||||
bool enabledFlag = ! AutoMaterializationIsDisabled();
|
||||
|
||||
DisableAutoMaterialization(); // we force the mode
|
||||
bool enabledFlag = not Go::autoMaterializationIsDisabled();
|
||||
Go::disableAutoMaterialization(); // we force the mode
|
||||
|
||||
... // we open the file and load the cell
|
||||
|
||||
if (enabledFlag) // we restore the initial state if needed
|
||||
EnableAutoMaterialization();
|
||||
Go::enableAutoMaterialization();
|
||||
|
||||
cell->Materialize(); // delayed materialization of cell content
|
||||
cell->materialize(); // delayed materialization of cell content
|
||||
|
||||
return cell;
|
||||
}
|
||||
|
@ -180,11 +168,12 @@ Cell* LoadCellFromFile(...)
|
|||
*/
|
||||
|
||||
/*! \function void Go::materialize();
|
||||
* No description.
|
||||
* Triggers the materialization, that is, insert into the relevant
|
||||
* QuadTree.
|
||||
*/
|
||||
|
||||
/*! \function void Go::unmaterialize();
|
||||
* No description.
|
||||
* Withdrawn the Go from it's QuadTree.
|
||||
*/
|
||||
|
||||
/*! \function void Go::invalidate(bool propagateFlag = true);
|
||||
|
@ -211,62 +200,51 @@ Cell* LoadCellFromFile(...)
|
|||
*
|
||||
* \sample We give as an example the implementation for the instances :
|
||||
\code
|
||||
void Instance::Invalidate(bool propagateFlag)
|
||||
// ******************************************
|
||||
void Instance::invalidate ( bool propagateFlag )
|
||||
{
|
||||
Inherit::Invalidate(false);
|
||||
Inherit::invalidate(false);
|
||||
|
||||
if (propagateFlag) {
|
||||
for_each_plug(plug, GetConnectedPlugs()) {
|
||||
plugInvalidate(true);
|
||||
end_for;
|
||||
}
|
||||
}
|
||||
if (propagateFlag) {
|
||||
forEach(Plug*, iplug, GetConnectedPlugs()) {
|
||||
iplug->invalidate(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
\endcode
|
||||
\code
|
||||
void Component::Invalidate(bool propagateFlag)
|
||||
// *******************************************
|
||||
void Component::invalidate ( bool propagateFlag )
|
||||
{
|
||||
Inherit::Invalidate(false);
|
||||
Inherit::invalidate(false);
|
||||
|
||||
if (propagateFlag) {
|
||||
for_each_component(component, GetSlaveComponents()) {
|
||||
componentInvalidate(false);
|
||||
end_for;
|
||||
}
|
||||
}
|
||||
if (propagateFlag) {
|
||||
forEach(Component*, icomponent, GetSlaveComponents()) {
|
||||
icomponent->invalidate(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
\endcode
|
||||
\code
|
||||
void Contact::SetLayer(Layer* layer)
|
||||
// *********************************
|
||||
void Contact::setLayer ( Layer* layer )
|
||||
{
|
||||
if (!layer)
|
||||
throw Error("Can't set layer : null layer");
|
||||
if (!layer) throw Error("Can't set layer : null layer");
|
||||
|
||||
if (layer != _layer) {
|
||||
if (layer != _layer) {
|
||||
// we do the change only if necessary
|
||||
invalidate(false); // done before the modification
|
||||
|
||||
// we do the change only if necessary
|
||||
|
||||
Invalidate(false); // done before the modification
|
||||
|
||||
_layer = layer;
|
||||
}
|
||||
_layer = layer;
|
||||
}
|
||||
}
|
||||
\endcode
|
||||
\code
|
||||
void Instance::SetTransformation(const Transformation& transformation)
|
||||
// *******************************************************************
|
||||
void Instance::setTransformation(const Transformation& transformation)
|
||||
{
|
||||
if (transformation != _transformation) {
|
||||
|
||||
// we do the change only if necessary
|
||||
|
||||
Invalidate(true); // done before the modification
|
||||
|
||||
_transformation = transformation;
|
||||
}
|
||||
if (transformation != _transformation) {
|
||||
// we do the change only if necessary
|
||||
invalidate(true); // done before the modification
|
||||
|
||||
_transformation = transformation;
|
||||
}
|
||||
}
|
||||
\endcode
|
||||
*/
|
||||
|
@ -279,11 +257,8 @@ void Instance::SetTransformation(const Transformation& transformation)
|
|||
* graphic object.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Go Collection
|
||||
*/
|
||||
//! \name Go Collection
|
||||
// \{
|
||||
|
||||
/*! \typedef Gos
|
||||
|
@ -299,12 +274,11 @@ void Instance::SetTransformation(const Transformation& transformation)
|
|||
* criteria.
|
||||
*/
|
||||
|
||||
/*! \def for_each_go(go, gos)
|
||||
/*! \def forEach(Go*, igo, gos)
|
||||
* Macro for visiting all graphic objects of a graphic objects
|
||||
* collection.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -95,10 +95,6 @@
|
|||
*/
|
||||
|
||||
|
||||
/*! \name Accessors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Component* Hook::getComponent() const;
|
||||
* \Return the component whose hook represents a part.
|
||||
*
|
||||
|
@ -172,12 +168,6 @@
|
|||
* The master is not included in this collection.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Predicates
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function bool Hook::isMaster() const;
|
||||
* \Return \true if the hook must be considered as a master, else
|
||||
|
@ -203,12 +193,6 @@
|
|||
* \caution The meaning here is very different than for a slave hook!
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Modifiers
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Hook* Hook::detach();
|
||||
* If the hook is a slave :
|
||||
|
@ -265,11 +249,8 @@
|
|||
* corresponding hyper-hooks.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Hook Collection
|
||||
*/
|
||||
//! \name Hook Collection
|
||||
// \{
|
||||
|
||||
/*! \typedef Hooks
|
||||
|
@ -291,5 +272,4 @@
|
|||
|
||||
// \}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -34,9 +34,6 @@
|
|||
* knowing it.
|
||||
*/
|
||||
|
||||
/*! \name Constructors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Horizontal* Horizontal::create(Component* source, Component* target, const Layer* layer,const DbU::Unit& y, const DbU::Unit& width = 0,const DbU::Unit& dxSource = 0, const DbU::Unit& dxTarget = 0);
|
||||
* No description.
|
||||
|
@ -52,12 +49,6 @@
|
|||
* null.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Accessors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function const DbU::Unit& Horizontal::getDxSource() const;
|
||||
* \Return the relative source abscissa of the segment (may be absolute
|
||||
|
@ -75,12 +66,6 @@
|
|||
* getTargetY() defined at the Segment level.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Modifiers
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function void Horizontal::setY(const DbU::Unit& x);
|
||||
* sets the ordinate of the segment.
|
||||
|
@ -91,11 +76,8 @@
|
|||
* \c \<dy\>.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Horizontal Collection
|
||||
*/
|
||||
//! \name Horizontal Collection
|
||||
// \{
|
||||
|
||||
/*! \typedef Horizontals
|
||||
|
|
|
@ -33,9 +33,6 @@
|
|||
* knowing it.
|
||||
*/
|
||||
|
||||
/*! \name Constructors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Instance* Instance::create(Cell* cell, const Name& name, Cell* masterCell, bool secureFlag = true);
|
||||
* No description.
|
||||
|
@ -57,12 +54,6 @@
|
|||
* time, but at your own risks).
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Accessors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function const Name& Instance::getName() const;
|
||||
* \Return the instance name.
|
||||
|
@ -122,12 +113,6 @@
|
|||
* area.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Modifiers
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function void Instance::setName(const Name& name);
|
||||
* Allows to change the instance name.
|
||||
|
@ -163,12 +148,8 @@
|
|||
* occurences are therefore deleted.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
|
||||
/*! \name Instance Collection
|
||||
*/
|
||||
//! \name Instance Collection
|
||||
// \{
|
||||
|
||||
/*! \typedef Instances
|
||||
|
@ -191,5 +172,4 @@
|
|||
|
||||
// \}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -22,9 +22,6 @@
|
|||
* this class.
|
||||
*/
|
||||
|
||||
/*! \name Constructors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Interruption::Interruption(const string& reason, int code = 0);
|
||||
* Builds an interruption characterized by a reason and a code
|
||||
|
@ -35,23 +32,11 @@
|
|||
* Copy constructor.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Operators
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Interruption& Interruption::operator=(const Interruption& interruption);
|
||||
* Assignment operator.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Accessors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function const string& Interruption::GetReason() const;
|
||||
* \Return the reason for which the interruption was thrown.
|
||||
|
@ -61,7 +46,4 @@
|
|||
* \Return the interruption code number.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -26,10 +26,6 @@
|
|||
|
||||
|
||||
|
||||
/*! \name Constructors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Interval::Interval(bool makeEmpty=true);
|
||||
* Default constructor : the returned interval is empty if
|
||||
* <b>makeEmpy</b> is set to <b>true</b> (default) or full span
|
||||
|
@ -50,12 +46,6 @@
|
|||
* Copy constructor.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Operators
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Interval& Interval::operator=(const Interval& interval);
|
||||
* Assignment operator.
|
||||
|
@ -71,12 +61,6 @@
|
|||
* Difference operator.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Accessors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function const DbU::Unit& Interval::getVMin() const;
|
||||
* \Return the VMin value : meaningful only for a non empty interval.
|
||||
|
@ -112,12 +96,6 @@
|
|||
* they are disjoint.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Predicates
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function bool Interval::isEmpty() const;
|
||||
* \Return \true if the interval is empty, else \false.
|
||||
|
@ -143,12 +121,6 @@
|
|||
* else \false.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Modifiers
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Interval& Interval::makeEmpty();
|
||||
* Transforms the interval into an empty one.
|
||||
|
@ -204,8 +176,4 @@ assert(interval1.translate(10) == interval2.inflate(-10, 10));
|
|||
*
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -9,29 +9,92 @@
|
|||
*
|
||||
* \section secLayerIntro Introduction
|
||||
*
|
||||
* There are two layer types : Basic layers which are indeed the
|
||||
* real process layers (GDS ones) and composite layers on which
|
||||
* are located components of the layout. A composite layer
|
||||
* groups a set of basic layers. For example, the contact layer
|
||||
* VIA12 is built of the basic layers CM1 (metal1), CM2 (metal2)
|
||||
* and C12 (contact cuts between CM1 and CM2).
|
||||
* Layers are divideds in three categories:
|
||||
* <ul>
|
||||
* <li>Layer : the base class, it supplies a generic interface
|
||||
* sufficent for most manipulations. However, there are cases
|
||||
* when a specific derived class may be needed. Mostly when
|
||||
* assembling the symbolic layers.
|
||||
* <li>BasicLayer : they represents the real process layers (GDS ones).
|
||||
* They possesses the following characteristics:
|
||||
* <ul>
|
||||
* <li>Each BasicLayer is associated with an unique bit in the
|
||||
* Layer::Mask. This bit is used to find if a symbolic layer
|
||||
* contains that particular BasicLayer.
|
||||
* <li>No dimension extentions. Database objects drawn with those
|
||||
* layers have rectangles the exact size specified by the
|
||||
* user. This is mandatory if you want to create a real layout
|
||||
* (by opposition to a symbolic one).
|
||||
* <li>They have a \b material field hinting the purpose of the
|
||||
* layer (is a routing metal, a cut, a diffusion and so on).
|
||||
* <li>They may have an associated blockage layer (for routing
|
||||
* layers).
|
||||
* </ul>
|
||||
* <li><b>Symbolic Layers</b> : used to draw the various components of
|
||||
* a symbolic layout. They are made of a list of BasicLayers and
|
||||
* how to extend their dimensions from the user specified sizes.
|
||||
* <ul>
|
||||
* <li>RegularLayer : contains one BasicLayer, use for wires.
|
||||
* <li>ViaLayer : contains three BasicLayer, for contact between
|
||||
* metal layers. The BasicLayers must be of \c (metal,cut,metal)
|
||||
* materials.
|
||||
* <li>ContactLayer : contains four or five BasicLayers, for contact
|
||||
* towards active layers or transistor gates. The fifth optional
|
||||
* parameter is the well. Materials of the components must be of
|
||||
* type \c (metal,cut,active,diffusion[,well])
|
||||
* <li>DiffusionLayer : contains three BasicLayer, for diffusion area.
|
||||
* Materials of the components must be of type
|
||||
* \c (active,diffusion,well).
|
||||
* <li>TransistorLayer : contains three to four layers, for representing
|
||||
* digital transistors. Materials are of type :
|
||||
* \c (gate,active,diffusion,well).
|
||||
* </ul>
|
||||
* </ul>
|
||||
*
|
||||
* Like for the Technology object, a layer must not be deleted,
|
||||
* else all components located on it will have a dangling
|
||||
* pointer to an deleted object ...
|
||||
*
|
||||
*
|
||||
* \subsection secBasicLayerOrder BasicLayer Creation Ordering
|
||||
*
|
||||
* The creation order is significant regarding the metal connectivity.
|
||||
* The metal & cut layers must be created in alternately fashion,
|
||||
* for example:
|
||||
* <center>
|
||||
* <table>
|
||||
* <tr><th>BasicLayer<th>Material<th>Layer::Mask
|
||||
* <tr><td>\c cut0 <th>\c cut <th>\c 0x00000010
|
||||
* <tr><td>\c metal1 <th>\c metal<th>\c 0x00000020
|
||||
* <tr><td>\c cut1 <th>\c cut <th>\c 0x00000040
|
||||
* <tr><td>\c metal2 <th>\c metal<th>\c 0x00000080
|
||||
* <tr><td>\c cut2 <th>\c cut <th>\c 0x00000100
|
||||
* <tr><td>\c metal3 <th>\c metal<th>\c 0x00000200
|
||||
* </table>
|
||||
* </center>
|
||||
*
|
||||
*
|
||||
* \subsection secLayerLookup Looking Up a Layer from a Mask
|
||||
*
|
||||
* A BasicLayer is uniquely associated to a bit in the
|
||||
* Layer::Mask. But, multiple symbolic layers could be built
|
||||
* over that BasicLayer. In that case all those layers will
|
||||
* have the same mask. For the mask lookup functions not
|
||||
* to be confused, we introduce the concept of <b>working layer</b>
|
||||
* in all the symbolic layers with the same mask, this is the
|
||||
* one that will be returned.
|
||||
*/
|
||||
|
||||
/*! \typedef Layer::Mask
|
||||
* This type represents a mask bit field characterising
|
||||
* efficiently the constituents of any kind of layer. It
|
||||
* associates to each basic layer a bit and to each composite
|
||||
* associates to each basic layer a bit and to each symbolic
|
||||
* layer the union of the bits corresponding to its basic
|
||||
* layers.
|
||||
*/
|
||||
|
||||
/*! \name Accessors
|
||||
*/
|
||||
// \{
|
||||
|
||||
// Accessors
|
||||
|
||||
/*! \function Technology* Layer::getTechnology() const;
|
||||
* \Return the technolgy owning the layer.
|
||||
|
@ -62,18 +125,93 @@
|
|||
* \Return the minimal spacing between two pads on this layer.
|
||||
*/
|
||||
|
||||
/*! \function const DbU::Unit& Layer::getPitch() const;
|
||||
* \Return the pitch between two routing wires on this layer.
|
||||
* Only significant for metal.
|
||||
*/
|
||||
|
||||
/*! \function BasicLayers Layer::getBasicLayers() const;
|
||||
* \Return the collection of basic layers within this layer.
|
||||
*
|
||||
* \remark For a basic layer the collection contains this one only.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Predicates
|
||||
/*! \function const Layer* Layer::getTop() const;
|
||||
* \Return The uppermost layer of that layer. On BasicLayer, it is always
|
||||
* the layer itself. In symbolic layers the meaning depends on the
|
||||
* object structure.
|
||||
*
|
||||
* \remark In symbolic layers, top & bottom are not related to the Layer::Mask
|
||||
* but to the \e structuration of the layer. It is advisable that
|
||||
* the designer create layers and symbolic layers in way that ensure
|
||||
* the top layer is indeed the one with the greater mask.
|
||||
*/
|
||||
|
||||
/*! \function const Layer* Layer::getBottom() const;
|
||||
* \Return The lowermost layer of that layer. On BasicLayer, it is always
|
||||
* the layer itself. In symbolic layers the meaning depends on the
|
||||
* object structure.
|
||||
*/
|
||||
|
||||
/*! \function const Layer* Layer::getOpposite( const Layer* source ) const;
|
||||
* \Return This method is only meaningful for ViaLayer. It returns the metal
|
||||
* Layer opposite to the one given in arguments.
|
||||
*/
|
||||
|
||||
/*! \function Layer* Layer::getMetalAbove() const;
|
||||
* \Return The metal <em>working layer</em> whose mask is immediatly above
|
||||
* this one.
|
||||
*/
|
||||
|
||||
/*! \function Layer* Layer::getMetalBelow() const;
|
||||
* \Return The metal <em>working layer</em> whose mask is immediatly below
|
||||
* this one.
|
||||
*/
|
||||
|
||||
/*! \function Layer* Layer::getCutAbove() const;
|
||||
* \Return The cut <em>working layer</em> whose mask is immediatly above
|
||||
* this one.
|
||||
*/
|
||||
|
||||
/*! \function Layer* Layer::getCutBelow() const;
|
||||
* \Return The cut <em>working layer</em> whose mask is immediatly below
|
||||
* this one.
|
||||
*/
|
||||
|
||||
/*! \function DbU::Unit Layer::getEnclosure() const;
|
||||
* \Return The maximal enclosure, of all layers.
|
||||
*/
|
||||
|
||||
/*! \function DbU::Unit Layer::getExtensionCap() const;
|
||||
* \Return The maximal extension cap, of all layers.
|
||||
*/
|
||||
|
||||
/*! \function DbU::Unit Layer::getExtensionWidth() const;
|
||||
* \Return The maximal extension width, of all layers.
|
||||
*/
|
||||
|
||||
/*! \function DbU::Unit Layer::getEnclosure(const BasicLayer* layer) const;
|
||||
* \Return The enclosure, for the given layer.
|
||||
*/
|
||||
|
||||
/*! \function DbU::Unit Layer::getExtensionCap(const BasicLayer* layer) const;
|
||||
* \Return The extension cap, for the given layer.
|
||||
*/
|
||||
|
||||
/*! \function DbU::Unit Layer::getExtensionWidth(const BasicLayer* layer) const;
|
||||
* \Return The extension width, for the given layer.
|
||||
*/
|
||||
|
||||
|
||||
// Predicates
|
||||
|
||||
/*! \function bool Layer::above(const Layer* layer) const;
|
||||
* \Return \true, if \c layer is above this one.
|
||||
*/
|
||||
|
||||
/*! \function bool Layer::below(const Layer* layer) const;
|
||||
* \Return \true, if \c layer is below this one.
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function bool Layer::contains(const Layer* layer) const;
|
||||
* \Return \true if the \c \<layer\> is completely included in the layer
|
||||
|
@ -86,12 +224,13 @@
|
|||
* least a common basic layer, else \false.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Modifiers
|
||||
/*! \function bool Layer::isWorking() const;
|
||||
* \Return \true, if this layer is the <em>working one</em>, that is, the
|
||||
* one that will be returned for any layer with it's Layer::Mask.
|
||||
*/
|
||||
// \{
|
||||
|
||||
|
||||
// Mutators
|
||||
|
||||
/*! \function void Layer::setName(const Name& name);
|
||||
* sets or changes the layer name.
|
||||
|
@ -101,18 +240,27 @@
|
|||
*/
|
||||
|
||||
/*! \function void Layer::setMinimalSize(const DbU::Unit& minimalSize);
|
||||
* sets the minimal size of a pad on this layer.
|
||||
* Sets the minimal size of a pad on this layer.
|
||||
*/
|
||||
|
||||
/*! \function void Layer::setMinimalSpacing(const DbU::Unit& minimalSpacing);
|
||||
* sets the minimal spacing between two pads on this layer.
|
||||
* Sets the minimal spacing between two pads on this layer.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Layer Collection
|
||||
/*! \function void Layer::setEnclosure(const BasicLayer* layer, DbU::Unit& enclosure);
|
||||
* Sets the enclosure for the given BasicLayer.
|
||||
*/
|
||||
|
||||
/*! \function void Layer::setExtentionCap(const BasicLayer* layer, DbU::Unit ecap);
|
||||
* Sets the extention cap for the given BasicLayer.
|
||||
*/
|
||||
|
||||
/*! \function void Layer::setExtentionWidth(const BasicLayer* layer, DbU::Unit ewidth);
|
||||
* Sets the extention width for the given BasicLayer.
|
||||
*/
|
||||
|
||||
|
||||
//! \name Layer Collection
|
||||
// \{
|
||||
|
||||
/*! \typedef Layers
|
||||
|
|
|
@ -24,9 +24,6 @@
|
|||
* knowing it.
|
||||
*/
|
||||
|
||||
/*! \name Constructors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Library* Library::create(DataBase* dataBase, const Name& name);
|
||||
* creates and returns a new root library named \c \<name\> for
|
||||
|
@ -45,12 +42,6 @@
|
|||
* the library.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Accessors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function DataBase* Library::getDataBase() const;
|
||||
* \Return the data base owning directly or indirectly the library.
|
||||
|
@ -88,12 +79,6 @@
|
|||
* \Return the collection of all symbols of the library.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Modifiers
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function void Library::setName(const Name& name);
|
||||
* Allows to change the library name.
|
||||
|
@ -103,11 +88,8 @@
|
|||
* with the same name.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Library Collection
|
||||
*/
|
||||
//! \name Library Collection
|
||||
// \{
|
||||
|
||||
/*! \typedef Libraries
|
||||
|
@ -130,5 +112,4 @@
|
|||
|
||||
// \}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -60,10 +60,6 @@ if (cell) {
|
|||
|
||||
|
||||
|
||||
/* \name Accessors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function GenericCollection<Element> ListCollection::GetCollection(const list<Element>& elementList);
|
||||
* \see below.
|
||||
*/
|
||||
|
@ -74,6 +70,4 @@ if (cell) {
|
|||
* argument.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
}
|
||||
|
|
|
@ -10,7 +10,14 @@
|
|||
* \section secLocatorIntro Introduction
|
||||
*
|
||||
* Locators are objects which allow to walk efficiently through
|
||||
* the data structure.
|
||||
* the data structure.
|
||||
*
|
||||
* Locators are indeed algorithms. They do not hold a list of
|
||||
* elements but the way to go from one element to the next.
|
||||
* As such, they are very light in memory, contrary to containers.
|
||||
* Locators are the workhorse of Collection, and while they can
|
||||
* be used directly, this is not the recommended way.
|
||||
*
|
||||
*
|
||||
* \section secLocatorGeneralConcepts General concepts
|
||||
*
|
||||
|
@ -43,16 +50,16 @@ Cell* cell = ...; // we get the cell
|
|||
|
||||
if (cell) {
|
||||
|
||||
// CellGetNets()
|
||||
// cell->getNets()
|
||||
// returns the nets collection of the cell
|
||||
// and getLocator()
|
||||
// allocates and returns a locator for traversing those nets
|
||||
Locator<Net*>* locator = CellGetNets().getLocator();
|
||||
Locator<Net*>* locator = cell->getNets().getLocator();
|
||||
|
||||
while (locatorIsValid()) {
|
||||
Net* net = locatorGetElement();
|
||||
assert(netGetCell() == cell);
|
||||
locatorProgress();
|
||||
while (locator->isValid()) {
|
||||
Net* net = locator->getElement();
|
||||
assert(net->getCell() == cell);
|
||||
locator->progress();
|
||||
}
|
||||
|
||||
// don't forget to release the allocated locator
|
||||
|
@ -64,19 +71,19 @@ if (cell) {
|
|||
Cell* cell = ...; // we get a cell
|
||||
|
||||
if (cell) {
|
||||
Locator<Net*>* locator1 = CellGetNets().getLocator();
|
||||
while (locator1IsValid()) {
|
||||
Net* net1 = locator1GetElement();
|
||||
Locator<Net*>* locator1 = cell->GetNets().getLocator();
|
||||
while (locator1->isValid()) {
|
||||
Net* net1 = locator1->getElement();
|
||||
|
||||
Locator<Net*>* locator2 = locator1GetClone();
|
||||
while (locator2IsValid()) {
|
||||
Net* net2 = locator2GetElement();
|
||||
Locator<Net*>* locator2 = locator1->getClone();
|
||||
while (locator2->isValid()) {
|
||||
Net* net2 = locator2->getElement();
|
||||
cerr << net1 << " " << net2 << endl;
|
||||
locator2Progress();
|
||||
locator2->progress();
|
||||
}
|
||||
delete locator2;
|
||||
|
||||
locator1Progress();
|
||||
locator1->progress();
|
||||
}
|
||||
delete locator1;
|
||||
}
|
||||
|
@ -84,15 +91,10 @@ if (cell) {
|
|||
* \remark Those examples are given in order to explain how locators
|
||||
* work. We will see in the following how to do that more simply
|
||||
* by using generic locators, or even simpler by using the
|
||||
* for_each macros.
|
||||
* forEach macros.
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/*! \name Accessors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Type Locator::getElement() const;
|
||||
* \Return the current element (or the value <b>Type()</b> when the
|
||||
* locator is not or no longer valid).
|
||||
|
@ -109,30 +111,47 @@ if (cell) {
|
|||
* for you (to be explained later).
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Predicates
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function bool Locator::isValid() const;
|
||||
* \Return \true while the walk has not exhausted the set of elements,
|
||||
* else \false.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Modifiers
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function void Locator::progress();
|
||||
* Moves forward the locator to the following element.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
/*! \class GenericLocator
|
||||
* \brief Generic Locator auto-pointer.
|
||||
*
|
||||
* This class is an auto-pointer like wrapped around the raw locator.
|
||||
*
|
||||
* \remark The destruction of a GenericLocator triggers the destruction of
|
||||
* the raw locator.
|
||||
*/
|
||||
|
||||
/*! \function GenericLocator::GenericLocator(Locator<Type>* locator);
|
||||
* Constructor from a raw Locator.
|
||||
*
|
||||
* \remark This constructor do not build a copy of the raw locator. So the original
|
||||
* raw locator must not be deleted. It's deletion will occurs with the one
|
||||
* of the GenericLocator.
|
||||
*/
|
||||
|
||||
/*! \function GenericLocator::GenericLocator(const Locator<Type>& locator);
|
||||
* Constructor from a primary Locator.
|
||||
*
|
||||
* \remark This constructor build a \e copy of the raw locator. So the originating
|
||||
* locator can be safely deleted.
|
||||
*/
|
||||
|
||||
/*! \function GenericLocator::GenericLocator(const GenericLocator<Type>& locator);
|
||||
* Constructor from a primary Locator and a Filter.
|
||||
*
|
||||
* \remark This constructor build a \e copy of the raw locator. So the originating
|
||||
* locator can be safely deleted.
|
||||
*/
|
||||
|
||||
}
|
||||
|
|
|
@ -25,10 +25,6 @@
|
|||
|
||||
|
||||
|
||||
/*! \name Accessors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function MapView* MainView::GetMapView() const;
|
||||
* \Return the associated map (never null).
|
||||
*
|
||||
|
@ -36,12 +32,6 @@
|
|||
* associated to the main view.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name MainView Collection
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \typedef MainViews
|
||||
* Generic collection representing a set of main views.
|
||||
|
@ -61,12 +51,6 @@
|
|||
* views.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/* \name Constructors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function MainView* MainView::Create();
|
||||
* The default constructor (no cell is yet associated to the
|
||||
|
@ -79,6 +63,4 @@
|
|||
* activate only the display of the main view).
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
}
|
||||
|
|
|
@ -64,10 +64,6 @@ if (cell) {
|
|||
|
||||
|
||||
|
||||
/* \name Accessors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function GenericCollection<Element> MapCollection::GetCollection(const map<Key, Element, Compare>& elementMap);
|
||||
* \see below.
|
||||
*/
|
||||
|
@ -78,6 +74,4 @@ if (cell) {
|
|||
* argument.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
}
|
||||
|
|
|
@ -33,17 +33,10 @@
|
|||
*/
|
||||
|
||||
|
||||
|
||||
/*! \name Accessors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function MainView* MapView::GetMainView() const;
|
||||
* \Return the main view associated to the map (never null).
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \section secMapViewRemark Remark
|
||||
*
|
||||
|
@ -57,6 +50,4 @@
|
|||
* by localizing the new visible area.
|
||||
*/
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -20,10 +20,6 @@
|
|||
|
||||
|
||||
|
||||
/*! \name Constructors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Name::Name();
|
||||
* Default constructor (initialized with an empty string).
|
||||
*/
|
||||
|
@ -40,24 +36,12 @@
|
|||
* Copy constructor.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Destructors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Name::~Name();
|
||||
* The destructor releases the shared string if it no longer
|
||||
* referenced.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Operators
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Name& Name::operator=(const Name& name);
|
||||
* Assignment operator. Very fast because there is only an
|
||||
|
@ -145,18 +129,9 @@ for_each_net(net, cellGetNets()) {
|
|||
* modified]).
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Predicates
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function bool Name::isEmpty () const;
|
||||
* \Return \true if the shared string is empty, else \false.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -77,9 +77,6 @@
|
|||
* Type assigned to logical tri-states signals.
|
||||
*/
|
||||
|
||||
/*! \name Constructors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Net* Net::create(Cell* cell, const Name& name);
|
||||
* Creates and returns a new net named \c \<name\> for the cell
|
||||
|
@ -89,12 +86,6 @@
|
|||
* if a net with same name already exists.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Accessors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function const Name& Net::getName() const;
|
||||
* \Return the net name.
|
||||
|
@ -180,12 +171,6 @@
|
|||
* \remark Meaningfull only for external nets.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Predicates
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function bool Net::isGlobal() const;
|
||||
* \Return \true if the net is global else \false.
|
||||
|
@ -211,12 +196,6 @@
|
|||
* \Return \true if the net is a supply else \false.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Modifiers
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function void Net::setName(const Name& name);
|
||||
* Allows to change net name.
|
||||
|
@ -285,11 +264,8 @@
|
|||
* their occurences).
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Net Collection
|
||||
*/
|
||||
//! \name Net Collection
|
||||
// \{
|
||||
|
||||
/*! \typedef Nets
|
||||
|
@ -312,10 +288,6 @@
|
|||
// \}
|
||||
|
||||
|
||||
/* \name Accessors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function NetFilter Net::getIsGlobalFilter();
|
||||
* \Return the filter selecting global nets.
|
||||
*/
|
||||
|
@ -336,6 +308,4 @@
|
|||
* \Return the filter selecting supply nets.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
}
|
||||
|
|
|
@ -52,10 +52,6 @@
|
|||
|
||||
|
||||
|
||||
/*! \name Constructors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Occurrence(Entity* entity = NULL);
|
||||
* Builds an occurrence refering to an entity through a void
|
||||
* path, in some way it is equivalent to the entity itself.
|
||||
|
@ -78,23 +74,11 @@
|
|||
* Copy constructor.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Destructors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Occurrence::~Occurrence();
|
||||
* No description.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Operators
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Occurrence& Occurrence::operator=(const Occurrence& occurrence);
|
||||
* Assignment operator.
|
||||
|
@ -117,8 +101,6 @@
|
|||
* a comparator.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \section secOccurrenceRemarks Remarks
|
||||
*
|
||||
|
@ -127,11 +109,6 @@
|
|||
*/
|
||||
|
||||
|
||||
|
||||
/*! \name Accessors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Entity* Occurrence::GetEntity() const;
|
||||
* \Return the referenced entity or NULL if the occurrence is invalid.
|
||||
*/
|
||||
|
@ -168,12 +145,6 @@
|
|||
* box.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Predicates
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function bool Occurrence::IsValid() const;
|
||||
* \Return \true if the occurrence is valid, else \false (the occurrence
|
||||
|
@ -184,12 +155,6 @@
|
|||
* \Return \true if the occurrence owns some property else \false.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Modifiers
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function void Occurrence::Put(Property* property);
|
||||
* Adds the property \c \<property\> to the occurrence property
|
||||
|
@ -228,8 +193,6 @@
|
|||
* \caution If the occurrence is invalid an exception is thrown.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \section secOccurrenceNouveauxTypesGlobaux Nouveaux types globaux
|
||||
*
|
||||
|
@ -247,8 +210,7 @@
|
|||
|
||||
|
||||
|
||||
/*! \name Occurrence Collection
|
||||
*/
|
||||
//! \name Occurrence Collection
|
||||
// \{
|
||||
|
||||
/*! \def for_each_occurrence(occurrence, occurrences)
|
||||
|
|
|
@ -53,11 +53,6 @@
|
|||
*/
|
||||
|
||||
|
||||
|
||||
/*! \name Constructors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Occurrence::Occurrence(const Entity* entity = NULL);
|
||||
* Builds an occurrence refering to an entity through a void
|
||||
* path, in some way it is equivalent to the entity itself.
|
||||
|
@ -80,23 +75,11 @@
|
|||
* Copy constructor.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Destructors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/* \function Occurrence::~Occurrence();
|
||||
* No description.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Operators
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Occurrence& Occurrence::operator=(const Occurrence& occurrence);
|
||||
* Assignment operator.
|
||||
|
@ -119,13 +102,6 @@
|
|||
* a comparator.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
|
||||
/*! \name Accessors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Entity* Occurrence::getEntity() const;
|
||||
* \Return the referenced entity or NULL if the occurrence is invalid.
|
||||
|
@ -163,12 +139,6 @@
|
|||
* box.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Predicates
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function bool Occurrence::isValid() const;
|
||||
* \Return \true if the occurrence is valid, else \false (the occurrence
|
||||
|
@ -179,12 +149,6 @@
|
|||
* \Return \true if the occurrence owns some property else \false.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Modifiers
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function void Occurrence::put(Property* property);
|
||||
* Adds the property \c \<property\> to the occurrence property
|
||||
|
@ -223,13 +187,8 @@
|
|||
* \caution If the occurrence is invalid an exception is thrown.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
|
||||
|
||||
/*! \name Occurrence Collection
|
||||
*/
|
||||
//! \name Occurrence Collection
|
||||
// \{
|
||||
|
||||
/*! \typedef Occurrences
|
||||
|
|
|
@ -19,19 +19,13 @@
|
|||
* knowing it.
|
||||
*/
|
||||
|
||||
/*! \name Constructors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Pad* Pad::create(Net* net, const Layer* layer, const Box& boundingBox);
|
||||
* No description.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Pad Collection
|
||||
*/
|
||||
//! \name Pad Collection
|
||||
// \{
|
||||
|
||||
/*! \typedef Pads
|
||||
|
|
|
@ -34,11 +34,6 @@
|
|||
*/
|
||||
|
||||
|
||||
|
||||
/*! \name Constructors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Path::Path(SharedPath* sharedPath=NULL);
|
||||
* Default constructor : the path is then void.
|
||||
*
|
||||
|
@ -97,23 +92,11 @@
|
|||
* Copy constructor.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Destructors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Path::~Path();
|
||||
* No description.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Operators
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Path& Path::operator=(const Path& path);
|
||||
* Assignment operator.
|
||||
|
@ -135,13 +118,6 @@
|
|||
* comparator.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
|
||||
/*! \name Accessors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Instance* Path::getHeadInstance() const;
|
||||
* \Return the head instance or NULL if the path is void.
|
||||
|
@ -189,23 +165,11 @@
|
|||
* to the given \c \<transformation\>.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Predicates
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function bool Path::isEmpty() const;
|
||||
* \Return \true if the path is void and else \false.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Path Functions
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function char Path::getNameSeparator();
|
||||
* \Return the special character used as a separator between the
|
||||
|
@ -218,11 +182,8 @@
|
|||
* it must not appear in any instance name).
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Path Collection
|
||||
*/
|
||||
//! \name Path Collection
|
||||
// \{
|
||||
|
||||
/*! \typedef Pathes
|
||||
|
|
|
@ -12,8 +12,8 @@
|
|||
* A plug can be assimilated to a "logical port instance" : it
|
||||
* designates both the concerned instance and the net of the
|
||||
* model cell instanciated to which it is connected. This net,
|
||||
* which must be an external net, will be named "<b>master
|
||||
* net</b>" because it is a net of the instance master cell
|
||||
* which must be an external net, will be named <b>"master
|
||||
* net"</b> because it is a net of the instance master cell
|
||||
* (notice that this net can be asimilated to a "logical port").
|
||||
*
|
||||
* A plug is unique, that is, for a given instance there is one
|
||||
|
@ -49,10 +49,6 @@
|
|||
*/
|
||||
|
||||
|
||||
/*! \name Accessors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Instance* Plug::getInstance() const;
|
||||
* \Return the instance to which belongs the plug.
|
||||
*/
|
||||
|
@ -65,12 +61,6 @@
|
|||
* plug (or NULL if is unconnected).
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Predicates
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function bool Plug::isConnected() const;
|
||||
* \Return \true if the plug is connected, else \false.
|
||||
|
@ -79,12 +69,6 @@
|
|||
* return NULL.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Modifiers
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function void Plug::setNet(Net* net);
|
||||
* This method allows to connect or change the net of a plug.
|
||||
|
@ -97,12 +81,8 @@
|
|||
* left unchanged.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
|
||||
/*! \name Plug Collection
|
||||
*/
|
||||
//! \name Plug Collection
|
||||
// \{
|
||||
|
||||
/*! \typedef Plugs
|
||||
|
@ -125,10 +105,6 @@
|
|||
// \}
|
||||
|
||||
|
||||
/* \name Accessors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function PlugFilter Plug::getIsConnectedFilter();
|
||||
* \Return a filter for selecting only connected plugs.
|
||||
*/
|
||||
|
@ -137,6 +113,4 @@
|
|||
* \Return a filter for selecting only unconnected plugs.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
}
|
||||
|
|
|
@ -10,10 +10,6 @@
|
|||
*/
|
||||
|
||||
|
||||
/*! \name Constructors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Point::Point();
|
||||
* Default constructor.
|
||||
*/
|
||||
|
@ -26,12 +22,6 @@
|
|||
* Copy constructor.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Operators
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Point& Point::operator=(const Point& point);
|
||||
* Assignment operator.
|
||||
|
@ -45,12 +35,6 @@
|
|||
* Difference operator.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Modifiers
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function void Point::setX(const DbU::Unit& x);
|
||||
* Modifies point abscissa.
|
||||
|
@ -64,7 +48,4 @@
|
|||
* Translates the point of dx and dy.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -13,8 +13,8 @@
|
|||
*
|
||||
* When a new property is created, it is not yet assigned to any
|
||||
* particular object. It becomes effectively the property of an
|
||||
* object after the call <b>dbo-\>Put(property)</b>. The
|
||||
* property then receives a message <b>OnCapturedBy</b> whose
|
||||
* object after the call <b>dbo-\>put(property)</b>. The
|
||||
* property then receives a message <b>onCapturedBy</b> whose
|
||||
* argument is the additional owner. From that time onwards,
|
||||
* this object becomes partially responsible of the future of
|
||||
* the property.
|
||||
|
@ -29,7 +29,7 @@
|
|||
*
|
||||
* If a property of same name already exist : Two properties
|
||||
* with the same name can't cohabit, the older one is released
|
||||
* by the object which receives the message <b>OnReleasedBy</b>
|
||||
* by the object which receives the message <b>onReleasedBy</b>
|
||||
* from that old property and proceeds as required according to
|
||||
* the type of property.
|
||||
*
|
||||
|
@ -41,7 +41,7 @@
|
|||
* If the property owner is destroyed : All properties owned by
|
||||
* the object are then released. The future of each of those
|
||||
* properties is fully driven by their respective messages
|
||||
* <b>OnReleasedBy</b>.
|
||||
* <b>onReleasedBy</b>.
|
||||
*/
|
||||
|
||||
|
||||
|
@ -66,16 +66,9 @@
|
|||
*/
|
||||
|
||||
|
||||
|
||||
/*! \name Accessors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function DBo* PrivateProperty::getOwner() const;
|
||||
* \Return the current owner of the property (or NULL if at not been
|
||||
* assigned yet).
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
} // End of Hurricane namespace.
|
||||
|
|
|
@ -128,7 +128,7 @@ void DBo::put(Property* property);
|
|||
* Adds the property \c \<property\> to the set of properties of
|
||||
* the object.
|
||||
\code
|
||||
void Occurence::put(Property* property);
|
||||
void Occurrence::put(Property* property);
|
||||
\endcode
|
||||
* This function searches the quark representing the occurence.
|
||||
*
|
||||
|
@ -164,12 +164,12 @@ void Occurence::put(Property* property);
|
|||
*
|
||||
* <b>Removing a property</b>
|
||||
\code
|
||||
void DBo::Remove(Property* property);
|
||||
void DBo::remove(Property* property);
|
||||
\endcode
|
||||
* Removes the property \c \<property\> from the set of
|
||||
* properties of the object.
|
||||
\code
|
||||
void Occurence::Remove(Property* property);
|
||||
void Occurrence::remove(Property* property);
|
||||
\endcode
|
||||
* The function searches for the quark associated to the
|
||||
* occurence.
|
||||
|
@ -192,7 +192,7 @@ void DBo::clearProperties();
|
|||
\endcode
|
||||
* Removes all properties attached to the object.
|
||||
\code
|
||||
void Occurence::clearProperties();
|
||||
void Occurrence::clearProperties();
|
||||
\endcode
|
||||
* First searches for the quark associated to the occurence.
|
||||
*
|
||||
|
@ -251,8 +251,8 @@ void Occurence::clearProperties();
|
|||
Property* property = occurence.getProperty("Hurricane::Selector");
|
||||
|
||||
if (property && is_a<Selector*>(property)) {
|
||||
Selector* selector = (Selector*)property;
|
||||
...
|
||||
Selector* selector = (Selector*)property;
|
||||
// ...
|
||||
}
|
||||
\endcode
|
||||
* Which could become :
|
||||
|
@ -260,7 +260,7 @@ if (property && is_a<Selector*>(property)) {
|
|||
Selector* selector = (Selector*)occurence.getProperty("Hurricane::Selector");
|
||||
|
||||
if (selector) {
|
||||
...
|
||||
// ...
|
||||
}
|
||||
\endcode
|
||||
*
|
||||
|
@ -291,11 +291,10 @@ Property* property = occurence.getProperty("Hurricane::Selector");
|
|||
* on the other hand if the following static member function is
|
||||
* provided :
|
||||
\code
|
||||
const Name& Selector::getPropertyName()
|
||||
// ************************************
|
||||
const Name& Selector::getPropertyName ()
|
||||
{
|
||||
static Name NAME = "Hurricane::Selector";
|
||||
return NAME;
|
||||
static Name NAME = "Hurricane::Selector";
|
||||
return NAME;
|
||||
}
|
||||
\endcode
|
||||
* You could write later :
|
||||
|
@ -324,11 +323,10 @@ Property* property = occurence.getProperty(Selector::getPropertyName());
|
|||
* That way, by defining (i.e. for the property ObjectId) the
|
||||
* function :
|
||||
\code
|
||||
const Name& getObjectIdPropertyName()
|
||||
// **********************************
|
||||
const Name& getObjectIdPropertyName ()
|
||||
{
|
||||
static Name NAME = "Hurricane::ObjectId";
|
||||
return NAME;
|
||||
static Name NAME = "Hurricane::ObjectId";
|
||||
return NAME;
|
||||
}
|
||||
\endcode
|
||||
* You can write later :
|
||||
|
@ -338,10 +336,6 @@ Property* property = occurence.getProperty(getObjectIdPropertyName());
|
|||
*/
|
||||
|
||||
|
||||
/*! \name Accessors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Name Property::getName() const;
|
||||
* \Return the name of the property : this method must absolutely be
|
||||
* overloaded for all new property classes, because the property
|
||||
|
@ -351,12 +345,6 @@ Property* property = occurence.getProperty(getObjectIdPropertyName());
|
|||
* slot).
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Messages
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function void Property::onCapturedBy(DBo* dbo);
|
||||
* This message is called upon when the property is added to the
|
||||
|
@ -387,12 +375,8 @@ Property* property = occurence.getProperty(getObjectIdPropertyName());
|
|||
* specializing any of those two classes.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
|
||||
/*! \name Property Collection
|
||||
*/
|
||||
//! \name Property Collection
|
||||
// \{
|
||||
|
||||
/*! \typedef Properties
|
||||
|
@ -408,14 +392,13 @@ Property* property = occurence.getProperty(getObjectIdPropertyName());
|
|||
* criteria.
|
||||
*/
|
||||
|
||||
/*! \def for_each_property(property, properties)
|
||||
/*! \def forEach(Property*, iproperty, properties)
|
||||
* Macro for visiting all properties of a property collection.
|
||||
\code
|
||||
Occurence occurence = ...; // we get an occurence
|
||||
Occurrence occurence = ...; // we get an occurence
|
||||
|
||||
for_each_property(property, occurence.getProperties()) {
|
||||
cerr << property << endl;
|
||||
end_for;
|
||||
forEach(Property*, iproperty, occurence.getProperties()) {
|
||||
cerr << *iproperty << endl;
|
||||
}
|
||||
\endcode
|
||||
*/
|
||||
|
@ -423,16 +406,10 @@ for_each_property(property, occurence.getProperties()) {
|
|||
// \}
|
||||
|
||||
|
||||
/* \name Destructors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function void Property::destroy();
|
||||
* Like the data base objects, properties can be destroyed by
|
||||
* calling upon this function and not the standard C++
|
||||
* destructor (which is not available).
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
}
|
||||
|
|
|
@ -22,21 +22,11 @@
|
|||
|
||||
|
||||
|
||||
/*! \name Constructors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function QuadTree::QuadTree();
|
||||
* Default constructor : the quadtree is initially empty
|
||||
* (objects will be inserted or removed on demand).
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Destructors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function QuadTree::~QuadTree();
|
||||
* Destroys the quadtree and its sub-quadtrees but doesn't touch
|
||||
|
@ -44,12 +34,6 @@
|
|||
* their respective quadtree nodes.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Accessors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Box QuadTree::getBoundingBox() const;
|
||||
* \Return the quadtree bounding box, that is the minimal bounding box
|
||||
|
@ -68,24 +52,12 @@
|
|||
* defined by \c \<area\>.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Predicates
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function bool QuadTree::isEmpty() const;
|
||||
* \Return <b>true</b> if the quadtree doesn't contain any object, else
|
||||
* <b>false</b>.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Modifiers
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function void QuadTree::insert(Go* go);
|
||||
* inserts the graphic object within the quadtree (if not yet
|
||||
|
@ -112,8 +84,6 @@
|
|||
* the system).
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \section secQuadTreeRemark Remark
|
||||
*
|
||||
|
@ -179,6 +149,4 @@ void Component::Unmaterialize()
|
|||
* (slice-\>isEmpty()) slice-\>_Delete(); } }
|
||||
*/
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -52,7 +52,7 @@
|
|||
* equivalent to destroying the properties associated to the
|
||||
* occurences whom it is the unique representative.
|
||||
* Conceptually, it is wiser to use the call :
|
||||
* <b>occurence.ClearProperties()</b> which does the same.
|
||||
* <b>occurence.clearProperties()</b> which does the same.
|
||||
*
|
||||
*
|
||||
* \section secQuarkExample Example
|
||||
|
@ -63,29 +63,19 @@
|
|||
Property* property = ...; // we get a property
|
||||
|
||||
if (is_a<SharedPropery*>(property)) {
|
||||
for_each_dbo(dbo, ((SharedProperty*)property)getOwners()) {
|
||||
if (!is_a<Quark*>(dbo))
|
||||
cerr << dbo << endl;
|
||||
else
|
||||
cerr << ((Quark*)dbo)getOccurence() << endl;
|
||||
end_for;
|
||||
}
|
||||
forEach(DBo*, idbo, ((SharedProperty*)property)getOwners()) {
|
||||
if (not is_a<Quark*>(*idbo))
|
||||
cerr << *idbo << endl;
|
||||
else
|
||||
cerr << ((Quark*)*idbo)->getOccurence() << endl;
|
||||
}
|
||||
}
|
||||
\endcode
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/*! \name Accessors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function const Occurrence& Quark::getOccurrence() const;
|
||||
* \Return an occurence of which this quark is a representative.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -26,9 +26,6 @@
|
|||
|
||||
// \}
|
||||
|
||||
/*! \name Accessors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function string* RecordHandles::_GetString () const;
|
||||
* \Return a string representing the object name and characteristics
|
||||
|
|
|
@ -0,0 +1,93 @@
|
|||
|
||||
// -*- C++ -*-
|
||||
|
||||
|
||||
namespace Hurricane {
|
||||
|
||||
/*! \class RegularLayer
|
||||
* \brief RegularLayer description (\b API)
|
||||
*
|
||||
* For a more complete description of the Layers objects, please refer
|
||||
* to \ref secLayerIntro "Layer Introduction".
|
||||
*
|
||||
* RegularLayer is a symbolic layer that contains exactly one BasicLayer.
|
||||
* The accessors functions:
|
||||
* <ul>
|
||||
* <li>RegularLayer::getTop()
|
||||
* <li>RegularLayer::getBottom()
|
||||
* <li>RegularLayer::getOpposite()
|
||||
* </ul>
|
||||
* All returns that BasicLayer.
|
||||
*
|
||||
* It have one enclose, extention cap & extension width.
|
||||
*/
|
||||
|
||||
|
||||
/*! \function RegularLayer* RegularLayer::create(Technology* technology,const Name& name);
|
||||
* creates and returns a new regular layer named \c \<name\>.
|
||||
*
|
||||
* \caution Throws an exception if the technology is null, if the name is
|
||||
* empty, if a layer of same name already exists or if we
|
||||
* overflow the capacity of the bit field associated to the
|
||||
* layer mask.
|
||||
*/
|
||||
|
||||
|
||||
/*! \function BasicLayer* RegularLayer::getBasicLayer() const;
|
||||
* \Return the one associated BasicLayer.
|
||||
*/
|
||||
|
||||
|
||||
/* \function void RegularLayer::SetColor(unsigned short redValue, unsigned short greenValue, unsigned short blueValue);
|
||||
* Sets the color of a basic layer.
|
||||
*/
|
||||
|
||||
/* \function void RegularLayer::SetFillPattern(const string& fillPattern);
|
||||
* Sets the filling pattern of a basic layer.
|
||||
*
|
||||
* \caution Throws an exception if the string does't obey to the rules
|
||||
* described above.
|
||||
*/
|
||||
|
||||
/* \function void RegularLayer::SetDisplayThreshold(double threshold);
|
||||
* Sets the display threshold of a basic layer.
|
||||
*/
|
||||
|
||||
/*! \function void RegularLayer::setBlockageLayer(RegularLayer* layer);
|
||||
* Associate a blockage layer to this one. This is only meaningful
|
||||
* for routing layers (RegularLayer).
|
||||
*/
|
||||
|
||||
/*! \function void RegularLayer::setExtractNumber(unsigned int);
|
||||
* Set the extract number, for GDS.
|
||||
*/
|
||||
|
||||
/*! \function void RegularLayer::setRealName(const char*);
|
||||
* Set the real (process) layer name, for GDS.
|
||||
*/
|
||||
|
||||
|
||||
//! \name RegularLayer Collection
|
||||
// \{
|
||||
|
||||
/*! \typedef RegularLayers
|
||||
* Generic collection representing a set of basic layers.
|
||||
*/
|
||||
|
||||
/*! \typedef RegularLayerLocator
|
||||
* Generic locator for traversing a collection of basic layers.
|
||||
*/
|
||||
|
||||
/*! \typedef RegularLayerFilter
|
||||
* Generic filter allowing to select a subset of basic layers
|
||||
* matching some criteria.
|
||||
*/
|
||||
|
||||
/*! \def for_each_basic_layer(basicLayer, basicLayers)
|
||||
* Macro for visiting all the layers of a collection of basic
|
||||
* layers.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
}
|
|
@ -27,10 +27,6 @@
|
|||
*/
|
||||
|
||||
|
||||
/*! \name Accessors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Net* Rubber::getNet() const;
|
||||
* \Return the net owning the rubber.
|
||||
*/
|
||||
|
@ -57,11 +53,8 @@
|
|||
* connect.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Rubber Collection
|
||||
*/
|
||||
//! \name Rubber Collection
|
||||
// \{
|
||||
|
||||
/*! \typedef Rubbers
|
||||
|
|
|
@ -37,9 +37,6 @@
|
|||
* "anchored". The TargetHook is always a slave hook.
|
||||
*/
|
||||
|
||||
/*! \name Accessors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Segment::SourceHook* Segment::getSourceHook();
|
||||
* \Return the hook through which the segment origin can be anchored on
|
||||
|
@ -132,12 +129,6 @@
|
|||
* \Return the segment length.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Modifiers
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function void Segment::setLayer(const Layer* layer);
|
||||
* sets the segment layer.
|
||||
|
@ -152,11 +143,8 @@
|
|||
* permutted.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Segment Collection
|
||||
*/
|
||||
//! \name Segment Collection
|
||||
// \{
|
||||
|
||||
/*! \typedef Segments
|
||||
|
@ -179,5 +167,4 @@
|
|||
|
||||
// \}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -49,16 +49,8 @@
|
|||
*/
|
||||
|
||||
|
||||
|
||||
/* \name SelectCommand Functions
|
||||
*/
|
||||
// \{
|
||||
|
||||
/* \function SelectCommand* SelectCommand::GetSelectCommand();
|
||||
* \Return the selection command.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -39,15 +39,8 @@
|
|||
|
||||
|
||||
|
||||
/* \name SelectNetCommand Functions
|
||||
*/
|
||||
// \{
|
||||
|
||||
/* \function SelectNetCommand* SelectNetCommand::GetSelectNetCommand();
|
||||
* \Return the select net command object.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -59,11 +59,6 @@ if (cell) {
|
|||
*/
|
||||
|
||||
|
||||
|
||||
/* \name Accessors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function GenericCollection<Element> SetCollection::GetCollection(const set<Element,Compare>& elementSet);
|
||||
* See below.
|
||||
*/
|
||||
|
@ -74,6 +69,4 @@ if (cell) {
|
|||
* argument.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
}
|
||||
|
|
|
@ -68,17 +68,9 @@
|
|||
*/
|
||||
|
||||
|
||||
|
||||
/*! \name Accessors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function DBos SharedProperty::GetOwners() const;
|
||||
* \Return the collection of objects owning the property (might be empty
|
||||
* if the property has never been attached).
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
} // End of Hurricane namespace.
|
||||
|
|
|
@ -39,26 +39,19 @@ BasicLayer* basicLayer = ...; // we get the basic layer
|
|||
|
||||
Box area = ...; // we define the rectangular area
|
||||
|
||||
for_each_slice(slice, cell->getSlices()) {
|
||||
if (slice->getLayer()->Contains(basicLayer)) {
|
||||
for_each_componant(component, slice->getComponentsUnder(area)) {
|
||||
...
|
||||
// here we visit all requested components
|
||||
...
|
||||
end_for;
|
||||
}
|
||||
}
|
||||
end_for;
|
||||
forEach(Slice*, islice, cell->getSlices()) {
|
||||
if (islice->getLayer()->contains(basicLayer)) {
|
||||
forEach(Component*, icomponent, slice->getComponentsUnder(area)) {
|
||||
// ...
|
||||
// here we visit all requested components
|
||||
// ...
|
||||
}
|
||||
}
|
||||
}
|
||||
\endcode
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/*! \name Accessors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Cell* Slice::getCell() const;
|
||||
* \Return the cell owning the slice.
|
||||
*/
|
||||
|
@ -86,12 +79,8 @@ for_each_slice(slice, cell->getSlices()) {
|
|||
* intersects the rectangular region defined by \c \<area\>.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
|
||||
/*! \name Slice Collection
|
||||
*/
|
||||
//! \name Slice Collection
|
||||
// \{
|
||||
|
||||
/*! \typedef Slices
|
||||
|
@ -113,5 +102,4 @@ for_each_slice(slice, cell->getSlices()) {
|
|||
|
||||
// \}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -15,9 +15,6 @@
|
|||
* knowing it.
|
||||
*/
|
||||
|
||||
/*! \name Constructors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Symbol* Symbol::Create(Library* library, const Name& name);
|
||||
* Creates and returns a new symbol named \c \<name\> for the
|
||||
|
@ -42,12 +39,6 @@
|
|||
* the directions and names of the external nets of the cell.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Accessors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Library* Symbol::GetLibrary() const;
|
||||
* \Return the library owning the symbol.
|
||||
|
@ -74,12 +65,6 @@
|
|||
* \Return the pin of name \c \<name\> if it exists, else NULL.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Modifiers
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function void Symbol::SetName(const Name& name);;
|
||||
* Allows to change the symbol name.
|
||||
|
@ -89,11 +74,8 @@
|
|||
* name.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Symbol Collection
|
||||
*/
|
||||
//! \name Symbol Collection
|
||||
// \{
|
||||
|
||||
/*! \typedef Symbols
|
||||
|
|
|
@ -102,10 +102,6 @@ cell : ...
|
|||
|
||||
|
||||
|
||||
/*! \name Constructors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Tabulation::Tabulation(const string& s = " ");
|
||||
* Default constructor : The string \c \<s\> represents the
|
||||
* elementary tabulation (fixed by default to 3 space
|
||||
|
@ -116,23 +112,11 @@ cell : ...
|
|||
* Copy constructor.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Destructors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Tabulation::~Tabulation();
|
||||
* No description.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Operators
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Tabulation& Tabulation::operator=(const Tabulation& tabulation);
|
||||
* Assignment operator.
|
||||
|
@ -160,8 +144,4 @@ cell : ...
|
|||
* returns the previous tabulation.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -20,10 +20,6 @@
|
|||
*/
|
||||
|
||||
|
||||
/*! \name Constructors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Technology* Technology::create ( DataBase* dataBase, const Name& name );
|
||||
* \Return a newly created technology named \c \<name\> for the data base \c \<dataBase\>.
|
||||
*
|
||||
|
@ -31,12 +27,10 @@
|
|||
* the \c dataBase has already a technology.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Accessors
|
||||
/*! \function bool Technology::isMetal (const Layer* layer) const;
|
||||
* \Return \true if the \c layer is indeed of type BasicLayer::Material::metal.
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function DataBase* Technology::getDataBase () const;
|
||||
* \Return the DataBase owning the technology.
|
||||
|
@ -54,8 +48,16 @@
|
|||
* \Return the Layer named \c \<name\> if it exists and is a BasicLayer, else \NULL.
|
||||
*/
|
||||
|
||||
/*! \function BasicLayer* Technology::getRegularLayer ( const Name& name ) const;
|
||||
* \Return the Layer named \c \<name\> if it exists and is a RegularLayer, else \NULL.
|
||||
*/
|
||||
|
||||
/*! \function BasicLayer* Technology::getViaLayer ( const Name& name ) const;
|
||||
* \Return the Layer named \c \<name\> if it exists and is a ViaLayer, else \NULL.
|
||||
*/
|
||||
|
||||
/*! \function Layers Technology::getLayers () const;
|
||||
* \Return Returns the collection of layers of the technology.
|
||||
* \Return the collection of layers of the technology.
|
||||
*
|
||||
* \remark The layers are traversed according to their
|
||||
* creation order. This order is very important,
|
||||
|
@ -66,26 +68,73 @@
|
|||
*/
|
||||
|
||||
/*! \function BasicLayers Technology::getBasicLayers () const;
|
||||
* \Return Returns the collection of basic layers of the technology
|
||||
* \Return the collection of basic layers of the technology
|
||||
* (uses the same order).
|
||||
*/
|
||||
|
||||
/*! \function BasicLayers Technology::getBasicLayers ( const Layer::Mask& mask ) const;
|
||||
* \Return Returns the collection of basic layers of the technology
|
||||
* \Return the collection of basic layers of the technology
|
||||
* which matches the Layer mask \c \<mask\> (uses the same order).
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Modifiers
|
||||
/*! \function RegularLayers Technology::getRegularLayers () const;
|
||||
* \Return the collection of regular layers of the technology
|
||||
* (uses the same order).
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function ViaLayers Technology::getViaLayers () const;
|
||||
* \Return the collection of via layers of the technology
|
||||
* (uses the same order).
|
||||
*/
|
||||
|
||||
/*! \function Layer* Technology::getLayer ( const Layer::Mask& mask, bool useWorking=true) const;
|
||||
* \Return the layer whose mask equal \c mask and is flagged as working layer.
|
||||
* if there is no working layer, returns the first layer that matches.
|
||||
*/
|
||||
|
||||
/*! \function Layer* Technology::getMetalAbove ( const Layer* layer, bool useWorking=true) const;
|
||||
* \Return the first layer of metal type whose mask is above the current one.
|
||||
* if there is no working layer, returns the first layer that matches.
|
||||
*/
|
||||
|
||||
/*! \function Layer* Technology::getMetalBelow ( const Layer* layer, bool useWorking=true) const;
|
||||
* \Return the first layer of metal type whose mask is below the current one.
|
||||
* if there is no working layer, returns the first layer that matches.
|
||||
*/
|
||||
|
||||
/*! \function Layer* Technology::getCutAbove ( const Layer* layer, bool useWorking=true) const;
|
||||
* \Return the first layer of cut type whose mask is above the current one.
|
||||
* if there is no working layer, returns the first layer that matches.
|
||||
*/
|
||||
|
||||
/*! \function Layer* Technology::getCutBelow ( const Layer* layer, bool useWorking=true) const;
|
||||
* \Return the first layer of cut type whose mask is below the current one.
|
||||
* if there is no working layer, returns the first layer that matches.
|
||||
*/
|
||||
|
||||
/*! \function Layer* Technology::getViaBetween ( const Layer* layer1, const Layer* layer2) const;
|
||||
* \Return the cut layer between \c layer1 and \c layer2. They must be both of
|
||||
* metal kind and contiguous.
|
||||
*/
|
||||
|
||||
/*! \function Layer* Technology::getNthMetal ( int depth ) const;
|
||||
* \Return the \c Nth metal layer from the substrate. So a \c depth of zero should
|
||||
* mean \c metal1.
|
||||
*/
|
||||
|
||||
|
||||
/*! \function void Technology::setName ( const Name& name );
|
||||
* Allows to change the technology name (if empty name, throws an exception).
|
||||
*/
|
||||
|
||||
// \}
|
||||
/*! \function bool Technology::setWorkingLayer ( const Name& name );
|
||||
* Sets the layer \c name as the working layer for it's mask.
|
||||
* Returns \true on success (the layer exists).
|
||||
*/
|
||||
|
||||
/*! \function bool Technology::setWorkingLayer ( const Layer* layer );
|
||||
* Sets the \c layer as the working layer for it's mask.
|
||||
* Returns \true on success (the layer exists).
|
||||
*/
|
||||
|
||||
}
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
*/
|
||||
|
||||
|
||||
|
||||
/*! \class Transformation::Orientation
|
||||
* This enumeration defines the orientation associated to a
|
||||
* transformation object.
|
||||
|
@ -103,9 +102,6 @@
|
|||
*
|
||||
*/
|
||||
|
||||
/*! \name Constructors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Transformation::Transformation();
|
||||
* Default constructor : The translation is null and the
|
||||
|
@ -134,12 +130,6 @@
|
|||
* Copy constructor.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Operators
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Transformation& Transformation::operator=(const Transformation& transformation);
|
||||
* Assignment operator.
|
||||
|
@ -155,12 +145,6 @@
|
|||
* translations or orientation differ.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Accessors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function const DbU::Unit& Transformation::getTx() const;
|
||||
* \Return the horizontal component of the translation.
|
||||
|
@ -247,20 +231,12 @@
|
|||
* \Return the inverse transformation.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Modifiers
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Transformation& Transformation::invert();
|
||||
* inverts the transformation \c \<this\> and returns a
|
||||
* reference to it in order to apply in sequence a new function.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \section secTransformationTransformers Transformers
|
||||
*
|
||||
|
@ -275,11 +251,6 @@
|
|||
*/
|
||||
|
||||
|
||||
|
||||
/* \name Others
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function void Transformation::applyOn(DbU::Unit& x, DbU::Unit& y) const;
|
||||
* Applies the transformation on the coordinates given in
|
||||
* arguments.
|
||||
|
@ -299,6 +270,4 @@
|
|||
* resulting of the product of those two.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,41 @@
|
|||
|
||||
// -*- C++ -*-
|
||||
|
||||
|
||||
namespace Hurricane {
|
||||
|
||||
/*! \class TransistorLayer
|
||||
* \brief TransistorLayer description (\b API)
|
||||
*
|
||||
* For a more complete description of the Layers objects, please refer
|
||||
* to \ref secLayerIntro "Layer Introduction".
|
||||
*
|
||||
* TransistorLayer is a symbolic layer that contains three layers
|
||||
* (gate, active, diffusion) plus an optional well layer. As you may
|
||||
* guess, it is used to represent digital transistors.
|
||||
*
|
||||
* The accessors functions:
|
||||
* <ul>
|
||||
* <li>TransistorLayer::getTop()
|
||||
* <li>TransistorLayer::getBottom()
|
||||
* <li>TransistorLayer::getOpposite()
|
||||
* </ul>
|
||||
* Have no meaning here.
|
||||
*
|
||||
* Only extention cap & extention width are used here. Enclosure is not
|
||||
* used.
|
||||
*/
|
||||
|
||||
|
||||
/*! \function TransistorLayer* TransistorLayer::create(Technology* technology,const Name& name, BasicLayer* gateLayer, BasicLayer* activeLayer, BasicLayer* diffusionLayer, BasicLayer* wellLayer);
|
||||
* creates and returns a new transistor layer named \c \<name\>,
|
||||
* composed of gate, active & diffusion BasicLayer and an optional WELL
|
||||
* BasicLayer. A NULL value indicates that no NWELL is used.
|
||||
*
|
||||
* \caution Throws an exception if the technology is null, if the name is
|
||||
* empty, if a layer of same name already exists or if we
|
||||
* overflow the capacity of the bit field associated to the
|
||||
* layer mask.
|
||||
*/
|
||||
|
||||
}
|
|
@ -70,11 +70,6 @@ if (cell) {
|
|||
*/
|
||||
|
||||
|
||||
|
||||
/* \name Accessors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function GenericCollection<Element> VectorCollection::GetCollection(const vector<Element>& elementVector);
|
||||
* See below.
|
||||
*/
|
||||
|
@ -89,6 +84,4 @@ if (cell) {
|
|||
* in argument.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
}
|
||||
|
|
|
@ -35,9 +35,6 @@
|
|||
* knowing it.
|
||||
*/
|
||||
|
||||
/*! \name Constructors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Vertical* Vertical::create(Component* source, Component* target, const Layer* layer,const DbU::Unit& x,const DbU::Unit& width = 0,const DbU::Unit& dySource = 0, const DbU::Unit& dyTarget = 0);
|
||||
* creates and returns a vertical segment whose origin lies
|
||||
|
@ -62,12 +59,6 @@
|
|||
* null.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Accessors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function const DbU::Unit& Vertical::getDySource() const;
|
||||
* \Return the relative source ordinate of the segment (may be absolute
|
||||
|
@ -85,12 +76,6 @@
|
|||
* getTargetX() defined at the Segment level.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Modifiers
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function void Vertical::setX(const DbU::Unit& x);
|
||||
* sets the abscissa of the segment.
|
||||
|
@ -101,11 +86,8 @@
|
|||
* \c \<dx\>.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Vertical Collection
|
||||
*/
|
||||
//! \name Vertical Collection
|
||||
// \{
|
||||
|
||||
/*! \typedef Verticals
|
||||
|
|
|
@ -0,0 +1,41 @@
|
|||
|
||||
// -*- C++ -*-
|
||||
|
||||
|
||||
namespace Hurricane {
|
||||
|
||||
/*! \class ViaLayer
|
||||
* \brief ViaLayer description (\b API)
|
||||
*
|
||||
* For a more complete description of the Layers objects, please refer
|
||||
* to \ref secLayerIntro "Layer Introduction".
|
||||
*
|
||||
* ViaLayer is a symbolic layer that contains three layers, a bottom
|
||||
* metal, a cut and a top metal.
|
||||
*
|
||||
* The accessors functions:
|
||||
* <ul>
|
||||
* <li>ViaLayer::getTop()
|
||||
* <li>ViaLayer::getBottom()
|
||||
* <li>ViaLayer::getOpposite()
|
||||
* </ul>
|
||||
* Works on the top/bottom layers. They do not rely on the Layer::Mask,
|
||||
* but on what has been passed as argument to the ViaLayer::create()
|
||||
* constructor.
|
||||
*
|
||||
* Only enclosure have meaning on this class. Extension cap and extention
|
||||
* width are not used.
|
||||
*/
|
||||
|
||||
|
||||
/*! \function ViaLayer* ViaLayer::create(Technology* technology,const Name& name, BasicLayer* bottomLayer, BasicLayer* cutLayer, BasicLayer* topLayer);
|
||||
* creates and returns a new VIA layer named \c \<name\>, made of
|
||||
* the two metals and a cut.
|
||||
*
|
||||
* \caution Throws an exception if the technology is null, if the name is
|
||||
* empty, if a layer of same name already exists or if we
|
||||
* overflow the capacity of the bit field associated to the
|
||||
* layer mask.
|
||||
*/
|
||||
|
||||
}
|
|
@ -72,11 +72,6 @@
|
|||
*/
|
||||
|
||||
|
||||
|
||||
/*! \name Accessors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function GtkWidget* View::GetFrame() const;
|
||||
* \Return the widget containing the drawing area associated to the
|
||||
* view.
|
||||
|
@ -245,12 +240,6 @@ Unit clientAperture = view->GetSize(screenAperture);
|
|||
* \Return the collection of selectors associated to the view.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Predicates
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function bool View::GridIsVisible() const;
|
||||
* \Return \true if the grid is visible else \false.
|
||||
|
@ -304,12 +293,6 @@ Unit clientAperture = view->GetSize(screenAperture);
|
|||
* \Return \false if the selection is empty, else \true.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Modifiers
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function void View::SetCell(Cell* cell);
|
||||
* Allows to change the cell displayed within the view.
|
||||
|
@ -463,12 +446,6 @@ viewUpdate();
|
|||
* Unselects all the selected occurrences.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Managers
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function void View::Invalidate();
|
||||
* Invalidates the whole view, therefore at the next call upon
|
||||
|
@ -628,12 +605,6 @@ viewUpdate(); // to get an immediate effect
|
|||
* context.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Drawing Primitives
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function void View::DrawLine(const Unit& xo, const Unit& yo, const Unit& xe, const Unit& ye);
|
||||
* No description.
|
||||
|
@ -669,11 +640,8 @@ viewUpdate(); // to get an immediate effect
|
|||
* stipple when this flag is off (default behaviour).
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name View Collection
|
||||
*/
|
||||
//! \name View Collection
|
||||
// \{
|
||||
|
||||
/*! \typedef Views
|
||||
|
|
|
@ -24,10 +24,10 @@
|
|||
* You can also use this object to print messages without
|
||||
* throwing an exception as shown below :
|
||||
\code
|
||||
Cell* cell = libraryGetCell("adder"); // we get the cell
|
||||
Cell* cell = library->getCell("adder"); // we get the cell
|
||||
|
||||
if (!cell)
|
||||
cerr << Warning("Unknown cell adder") << endl;
|
||||
cerr << Warning("Unknown cell adder").what() << endl;
|
||||
else {
|
||||
// we know what to do here
|
||||
}
|
||||
|
@ -36,48 +36,42 @@ else {
|
|||
*/
|
||||
|
||||
|
||||
|
||||
/*! \name Constructors
|
||||
/*! \function Warning::Warning(const Warning& warning);
|
||||
* Copy constructor.
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Warning::Warning(const string& reason, int code = 0);
|
||||
/*! \function Warning::Warning(const string& reason);
|
||||
* Builds a warning characterized by a reason (code defaults to zero).
|
||||
*/
|
||||
|
||||
/*! \function Warning::Warning(const char* format, ...);
|
||||
* Builds a warning characterized by a reason, using the \c vararg protocol
|
||||
* and \c printf format (code defaults to zero).
|
||||
*/
|
||||
|
||||
/*! \function Warning::Warning(int code, const string& reason);
|
||||
* Builds a warning characterized by a reason and a code useful
|
||||
* within a switch.
|
||||
*/
|
||||
|
||||
/*! \function Warning::Warning(const Warning& warning);
|
||||
* Copy constructor.
|
||||
/*! \function Warning::Warning(int code, const char* format, ...);
|
||||
* Builds a warning characterized by a reason and a code useful
|
||||
* within a switch. The reason is supplied in a \c printf
|
||||
* like fashion.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Operators
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function Warning& Warning::operator=(const Warning& warning);
|
||||
* Assignment operator.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Accessors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function const string& Warning::GetReason() const;
|
||||
/*! \function string Warning::getReason() const;
|
||||
* \Return the reason for which the warning was thrown.
|
||||
*/
|
||||
|
||||
/*! \function int Warning::GetCode() const;
|
||||
/*! \function int Warning::getCode() const;
|
||||
* \Return the warning code number.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -57,16 +57,8 @@ void ZoomCommand::_OnButtonRelease(View* view, const Point& position)
|
|||
*/
|
||||
|
||||
|
||||
|
||||
/* \name ZoomCommand Functions
|
||||
*/
|
||||
// \{
|
||||
|
||||
/* \function ZoomCommand* ZoomCommand::GetZoomCommand();
|
||||
* \Return the zoom command.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -100,11 +100,17 @@
|
|||
</table>
|
||||
<table class="classHierarchy">
|
||||
<tr><td width="210"></td><td class="normal"><a href="classHurricane_1_1BasicLayer.html">BasicLayer</a></td></tr>
|
||||
<tr><td width="210"></td><td class="normal"><a href="classHurricane_1_1CompositeLayer.html">CompositeLayer</a></td></tr>
|
||||
<tr><td width="210"></td><td class="normal"><a href="classHurricane_1_1RegularLayer.html">RegularLayer</a></td></tr>
|
||||
<tr><td width="210"></td><td class="normal"><a href="classHurricane_1_1ViaLayer.html">ViaLayer</a></td></tr>
|
||||
<tr><td width="210"></td><td class="normal"><a href="classHurricane_1_1ContactLayer.html">ContactLayer</a></td></tr>
|
||||
<tr><td width="210"></td><td class="normal"><a href="classHurricane_1_1DiffusionLayer.html">DiffusionLayer</a></td></tr>
|
||||
<tr><td width="210"></td><td class="normal"><a href="classHurricane_1_1TransistorLayer.html">TransistorLayer</a></td></tr>
|
||||
</table>
|
||||
<table class="classHierarchy">
|
||||
<tr><td width="140"></td><td class="normal"><a href="classHurricane_1_1Library.html">Library</a></td></tr>
|
||||
<!--
|
||||
<tr><td width="140"></td><td class="normal"><a href="classHurricane_1_1Symbol.html">Symbol</a></td></tr>
|
||||
-->
|
||||
<tr><td width="140"></td><td class="virtual"><a href="classHurricane_1_1Entity.html">Entity</a></td></tr>
|
||||
</table>
|
||||
<table class="classHierarchy">
|
||||
|
@ -133,8 +139,11 @@
|
|||
</table>
|
||||
<table class="classHierarchy">
|
||||
<tr><td width="140"></td><td class="normal"><a href="classHurricane_1_1Quark.html">Quark</a></td></tr>
|
||||
<!--
|
||||
<tr><td width="140"></td><td class="virtual"><a href="classHurricane_1_1View.html">View</a></td></tr>
|
||||
-->
|
||||
</table>
|
||||
<!--
|
||||
<table class="classHierarchy">
|
||||
<tr><td width="210"></td><td class="virtual"><a href="classHurricane_1_1MainView.html">MainView</a></td></tr>
|
||||
</table>
|
||||
|
@ -152,6 +161,7 @@
|
|||
<tr><td width="210"></td><td class="normal"><a href="classHurricane_1_1SelectCommand.html">SelectCommand</a></td></tr>
|
||||
<tr><td width="210"></td><td class="normal"><a href="classHurricane_1_1SelectNetCommand.html">SelectNetCommand</a></td></tr>
|
||||
</table>
|
||||
-->
|
||||
|
||||
<h2 class="classHierarchy">Properties</h2>
|
||||
<table class="classHierarchy">
|
||||
|
@ -212,7 +222,7 @@
|
|||
<table class="footer2">
|
||||
<tr>
|
||||
<td class="LFooter">Hurricane Documentation</td>
|
||||
<td class="RFooter"><small>Copyright © 2000-2009 Bull S.A. All rights reserved</small></td>
|
||||
<td class="RFooter"><small>Copyright © 2000-2012 Bull S.A. All rights reserved</small></td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
|
|
|
@ -41,11 +41,13 @@
|
|||
<li><b><a href="functions.html">Member Functions Index (doxygen).</a></b>
|
||||
<li><b><a href="namespaces.html">Namespaces (doxygen).</a></b>
|
||||
</ul>
|
||||
<!--
|
||||
<h2>Extending Hurricane (internal)</h2>
|
||||
<ul>
|
||||
<li><b><a href="group__inspectorManagment.html">Inspector Managment</a></b><br>
|
||||
How to extend the run-time database inspector.
|
||||
</ul>
|
||||
-->
|
||||
|
||||
|
||||
<hr>
|
||||
|
@ -58,7 +60,7 @@
|
|||
<table class="footer2">
|
||||
<tr>
|
||||
<td class="LFooter">Hurricane Documentation</td>
|
||||
<td class="RFooter"><small>Copyright © 2000-2009 Bull S.A. All rights reserved</small></td>
|
||||
<td class="RFooter"><small>Copyright © 2000-2012 Bull S.A. All rights reserved</small></td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
|
|
|
@ -590,6 +590,9 @@ INPUT = ../../src/hurricane/hurricane/Commons.h \
|
|||
../../src/hurricane/hurricane/Warning.h \
|
||||
../../src/hurricane/hurricane/Interruption.h \
|
||||
Exception.dox \
|
||||
Error.dox \
|
||||
Warning.dox \
|
||||
Interruption.dox \
|
||||
../../src/hurricane/hurricane/Collection.h \
|
||||
../../src/hurricane/hurricane/ListCollection.h \
|
||||
../../src/hurricane/hurricane/MapCollection.h \
|
||||
|
@ -632,9 +635,18 @@ INPUT = ../../src/hurricane/hurricane/Commons.h \
|
|||
../../src/hurricane/hurricane/Layers.h \
|
||||
../../src/hurricane/hurricane/Layer.h \
|
||||
Layer.dox \
|
||||
../../src/hurricane/hurricane/BasicLayers.h \
|
||||
../../src/hurricane/hurricane/BasicLayer.h \
|
||||
BasicLayer.dox \
|
||||
../../src/hurricane/hurricane/RegularLayer.h \
|
||||
RegularLayer.dox \
|
||||
../../src/hurricane/hurricane/ViaLayer.h \
|
||||
ViaLayer.dox \
|
||||
../../src/hurricane/hurricane/ContactLayer.h \
|
||||
ContactLayer.dox \
|
||||
../../src/hurricane/hurricane/DiffusionLayer.h \
|
||||
DiffusionLayer.dox \
|
||||
../../src/hurricane/hurricane/TransistorLayer.h \
|
||||
TransistorLayer.dox \
|
||||
../../src/hurricane/hurricane/Libraries.h \
|
||||
../../src/hurricane/hurricane/Library.h \
|
||||
Library.dox \
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
<table class="footer2">
|
||||
<tr>
|
||||
<td class="LFooter">Hurricane Documentation</td>
|
||||
<td class="RFooter"><small>Copyright © 2000-2009 Bull S.A. All rights reserved</small></td>
|
||||
<td class="RFooter"><small>Copyright © 2000-2012 Bull S.A. All rights reserved</small></td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
|
||||
|
||||
/*
|
||||
* x-----------------------------------------------------------------x
|
||||
* +-----------------------------------------------------------------+
|
||||
* | HTML Standart Tags |
|
||||
* x-----------------------------------------------------------------x
|
||||
* +-----------------------------------------------------------------+
|
||||
*/
|
||||
|
||||
html, body, th, td, tr, p, li, h1, h2, h3, h4, h5, h6 {
|
||||
|
@ -32,25 +32,25 @@
|
|||
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
font-family: verdana, sans-serif;
|
||||
font-family: "Liberation Serif", sans-serif;
|
||||
}
|
||||
|
||||
h1 { text-align: center; }
|
||||
h2, h3, h4, h5, h6 { text-align: left;
|
||||
padding-top: 2em;
|
||||
}
|
||||
h1, h2, h3 { font-family: "Trebuchet MS", sans-serif;
|
||||
color: #09550B;
|
||||
h1, h2, h3 { font-family: "Liberation Serif", sans-serif;
|
||||
/*color: #09550B;*/
|
||||
}
|
||||
h1 { font-weight: bold; font-size: 170%; }
|
||||
h2 { font-weight: bold; font-size: 140%; }
|
||||
h3 { font-weight: bold; font-size: 118%; }
|
||||
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 #008500;*/
|
||||
border: 1px none #000000;
|
||||
border-top-width: 2px;
|
||||
border-top-style: solid;
|
||||
|
@ -164,9 +164,9 @@
|
|||
|
||||
|
||||
/*
|
||||
* x-----------------------------------------------------------------x
|
||||
* +-----------------------------------------------------------------+
|
||||
* | Doxygen Specific Classes |
|
||||
* x-----------------------------------------------------------------x
|
||||
* +-----------------------------------------------------------------+
|
||||
*/
|
||||
|
||||
|
||||
|
@ -257,9 +257,9 @@
|
|||
|
||||
div.qindex, div.nav {
|
||||
width: 100%-4px;
|
||||
/*background-color: #DADAEF;*/
|
||||
/*background-color: #eeeeff;*/
|
||||
/*background-color: #EEEEEE;*/
|
||||
/*background-color: #DADAEF;*/
|
||||
/*background-color: #eeeeff;*/
|
||||
/*background-color: #EEEEEE;*/
|
||||
background-color: #CCE6CA;
|
||||
border: 0px solid #003300;
|
||||
text-align: center;
|
||||
|
@ -350,6 +350,44 @@
|
|||
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%;
|
||||
|
@ -376,14 +414,14 @@
|
|||
*/
|
||||
|
||||
.mdTable {
|
||||
/*border: 1px solid #868686;*/
|
||||
/*background-color: #DADAEF;*/
|
||||
/*background-color: #F4F4FB;*/
|
||||
/*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;*/
|
||||
/*background-color: #B8E6B8;*/
|
||||
/*background-color: #CCE6CA;*/
|
||||
margin-top: 25px;
|
||||
font-size: 105%;
|
||||
}
|
||||
|
@ -402,7 +440,7 @@
|
|||
padding: 0px 8px 4px 8px;
|
||||
font-size: 11px;
|
||||
font-style: italic;
|
||||
/*background-color: #FAFAFA;*/
|
||||
/*background-color: #FAFAFA;*/
|
||||
border-top: 1px none #E0E0E0;
|
||||
border-right: 1px none #E0E0E0;
|
||||
border-bottom: 1px none #E0E0E0;
|
||||
|
@ -431,31 +469,38 @@
|
|||
|
||||
.memdoc{
|
||||
padding-left: 5px;
|
||||
/*margin-top: -8px;*/
|
||||
/*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: 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: solid;
|
||||
*/
|
||||
border-top-style: none;
|
||||
border-right-style: none;
|
||||
border-bottom-style: none;
|
||||
border-bottom-style: dotted;
|
||||
border-left-style: none;
|
||||
/*background-color: #DADAEF;*/
|
||||
/*background-color: #eeeeff;*/
|
||||
/*background-color: #EEEEEE;*/
|
||||
background-color: #CCE6CA;
|
||||
/*background-color: #DADAEF;*/
|
||||
/*background-color: #eeeeff;*/
|
||||
/*background-color: #EEEEEE;*/
|
||||
/*background-color: #CCE6CA;*/
|
||||
}
|
||||
|
||||
.memTemplItemLeft, .memTemplItemRight {
|
||||
|
@ -478,8 +523,12 @@
|
|||
|
||||
.groupText, .groupHeader {
|
||||
color: #09550B;
|
||||
margin-top: 15px;
|
||||
font-size: 130%;
|
||||
font-weight: bold;
|
||||
margin-top: 15px;
|
||||
}
|
||||
|
||||
.groupHeader {
|
||||
margin-bottom: -30pt;
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,132 @@
|
|||
|
||||
// -*- C++ -*-
|
||||
|
||||
|
||||
namespace Hurricane {
|
||||
|
||||
/*! \class CellImage
|
||||
* \brief Widget to generate Image files.
|
||||
*
|
||||
*
|
||||
* \section secImageBasicUsage Basic Usage
|
||||
*
|
||||
* CellImage is a simple Qt Widget to write the contents of a CellWidget
|
||||
* into a QImage. As it may uses lots of memory (due to the high-res bitmaps)
|
||||
* it is advisable to delete it immediatly after usage. The same rendering engine
|
||||
* is used to both display on screen and onto the image so it is a "What You
|
||||
* See Is What You Get" mode (except for the higher resolution).
|
||||
*
|
||||
* \see CellPrinter.
|
||||
*
|
||||
* It's use is straigtforward, as shown in the example below. It consist
|
||||
* of six steps:
|
||||
* <ol>
|
||||
* <li>Widget allocation.
|
||||
* <li>Bind to a screen CellWidget (CellImage::setScreenCellWidget()).
|
||||
* <li>Draw into a QImage (CellImage::toImage()).
|
||||
* <li>Delete the widget.
|
||||
* <li>Save the QImage or do whatever you want with it.
|
||||
* <li>Delete the QImage.
|
||||
* </ol>
|
||||
*
|
||||
* Code example (took from CellViewer):
|
||||
\code
|
||||
void CellViewer::imageDisplay ()
|
||||
{
|
||||
if (_cellWidget == NULL) return;
|
||||
if (_cellWidget->getCell() == NULL) {
|
||||
cerr << Warning("Unable to save to image, no cell loaded yet.") << endl;
|
||||
return;
|
||||
}
|
||||
|
||||
CellImage* cellImage = new CellImage();
|
||||
cellImage->setScreenCellWidget( _cellWidget );
|
||||
QImage* image = cellImage->toImage(0);
|
||||
delete cellImage;
|
||||
|
||||
char workingDirectory [1024];
|
||||
getcwd ( workingDirectory, 1024 );
|
||||
|
||||
QString filePath = QFileDialog::getSaveFileName ( this
|
||||
, tr("Save Image as ...")
|
||||
, workingDirectory
|
||||
, tr("Image (*.png)")
|
||||
);
|
||||
|
||||
image->save ( filePath, "png" );
|
||||
delete image;
|
||||
}
|
||||
\endcode
|
||||
*
|
||||
*
|
||||
* \section secImageConfiguration Configuration Variables
|
||||
*
|
||||
* The CellImage reads the following configuration variables for
|
||||
* it's defaults settings (they are located in \c misc.conf, for
|
||||
* the system-wide settings).
|
||||
* <ul>
|
||||
* <li>\c "viewer.printer.mode", select between the two resolution
|
||||
* modes (Cell or Design).
|
||||
* </ul>
|
||||
*
|
||||
*
|
||||
* \section secImageImplDetails Implementation details
|
||||
*
|
||||
* This widget is build as a QMainWindow (top-level) one
|
||||
* encapsulating only a CellWidget. It is configured to never been
|
||||
* shown thanks to the \c Qt::WA_DontShowOnScreen attribute, but
|
||||
* all the display computations still takes place as if it actually
|
||||
* was.
|
||||
*
|
||||
* The CellImage returns a newly allocated QImage, it is the responsability
|
||||
* of the caller to delete it after usage.
|
||||
*
|
||||
* To obtain a sufficent resolution the CellImage/CellWidget are
|
||||
* resized to the resolution of the printed page. For a better look
|
||||
* select a display style with patterns of 32x32 pixels, such as
|
||||
* \c "Image.Coriolis".
|
||||
*/
|
||||
|
||||
|
||||
/*! \function CellImage::CellImage(QWidget* parent=NULL);
|
||||
* Construct a CellImage window no screen CellWidget is actually bound.
|
||||
*/
|
||||
/*! \function CellImage::~CellImage();
|
||||
* Destructor.
|
||||
*/
|
||||
/*! \function void CellImage::setScreenCellWidget(CellWidget* screenCellWidget);
|
||||
* Bind the CellImage to the screen CellWidget \c screenCellWidget.
|
||||
* It is those contents that will be printed.
|
||||
*/
|
||||
/*! \function void CellImage::setMode(int mode);
|
||||
* Sets the display mode, that is the resolution that will be used.
|
||||
* Two modes are availables:
|
||||
* <ul>
|
||||
* <li>CellWidget::Res_CellMode: (approx. 150 dpi), best suited for
|
||||
* displaying lone Cell or very small scale designs.
|
||||
* <li>CellWidget::Res_DesignMode: (approx. 300 dpi), for full
|
||||
* fledged designs.
|
||||
* </ul>
|
||||
*/
|
||||
/*! \function QImage* CellImage::toImage(unsigned int flags=0);
|
||||
* \param flags Control some tweaks.
|
||||
*
|
||||
* \return A newly allocated QImage displaying the contents of the bound
|
||||
* \c screenCellWidget. The deletion of the QImage is left to caller.
|
||||
*
|
||||
* Availables flags:
|
||||
* <ul>
|
||||
* <li>ShowScale: display a false color scale at the bottom of the
|
||||
* image. Useful if you draw a density map for instance.
|
||||
* </ul>
|
||||
*/
|
||||
|
||||
/*! \enum CellImage::Flags
|
||||
* Some flags to tweak the image display.
|
||||
*/
|
||||
/*! \var CellImage::Flags CellImage::ShowScale;
|
||||
* Adds a false color scale at the bottom of the image.
|
||||
* Useful if you draw a density map for instance.
|
||||
*/
|
||||
|
||||
}
|
|
@ -0,0 +1,117 @@
|
|||
|
||||
// -*- C++ -*-
|
||||
|
||||
|
||||
namespace Hurricane {
|
||||
|
||||
/*! \class CellPrinter
|
||||
* \brief Widget to generate PDF file.
|
||||
*
|
||||
*
|
||||
* \section secPrinterBasicUsage Basic Usage
|
||||
*
|
||||
* CellPrinter is a simple Qt Widget to write the contents of a CellWidget
|
||||
* into a QPrinter. As it may uses lots of memory (due to the high-res bitmaps)
|
||||
* it is advisable to delete it immediatly after usage. The same rendering engine
|
||||
* is used to both display on screen and onto the printer so it is a "What You
|
||||
* See Is What You Get" mode (except for the higher resolution). It optionaly
|
||||
* adds a frame and a cartouche (on by default).
|
||||
*
|
||||
* \see CellImage.
|
||||
*
|
||||
* It's use is straigtforward, as shown in the example below. It consist
|
||||
* of four steps:
|
||||
* <ol>
|
||||
* <li>Widget allocation.
|
||||
* <li>Bind to a screen CellWidget (CellPrinter::setScreenCellWidget()).
|
||||
* <li>Draw into a QPrinter (CellPrinter::toPdf()).
|
||||
* <li>Delete the widget.
|
||||
* </ol>
|
||||
*
|
||||
* Code example (took from CellViewer):
|
||||
\code
|
||||
void CellViewer::printDisplay ()
|
||||
{
|
||||
if (_cellWidget == NULL) return;
|
||||
if (_cellWidget->getCell() == NULL) {
|
||||
cerr << Warning("Unable to print, no cell loaded yet.") << endl;
|
||||
return;
|
||||
}
|
||||
|
||||
QPrinter printer( QPrinter::ScreenResolution );
|
||||
printer.setPaperSize
|
||||
( (QPrinter::PaperSize)Cfg::getParamEnumerate("viewer.printer.paper",0)->asInt() );
|
||||
printer.setOutputFileName ( "unicorn-snapshot.pdf" );
|
||||
|
||||
QPrintDialog dialog ( &printer );
|
||||
if ( dialog.exec() == QDialog::Accepted ) {
|
||||
CellPrinter* cellPrinter = new CellPrinter();
|
||||
|
||||
cellPrinter->setScreenCellWidget( _cellWidget );
|
||||
cellPrinter->toPdf ( &printer, false );
|
||||
|
||||
delete cellPrinter;
|
||||
}
|
||||
}
|
||||
\endcode
|
||||
*
|
||||
* \remark The generated PDF file are bitmaps, so they can grew very large if
|
||||
* you uses paper above A2...
|
||||
*
|
||||
*
|
||||
* \section secPrinterConfiguration Configuration Variables
|
||||
*
|
||||
* The CellPrinter reads the following configuration variables for
|
||||
* it's defaults settings (they are located in \c misc.conf, for
|
||||
* the system-wide settings).
|
||||
* <ul>
|
||||
* <li>\c "viewer.printer.mode", select between the two resolution
|
||||
* modes (Cell or Design).
|
||||
* <li>\c "viewer.printer.paper", the output paper size, should be
|
||||
* one value from the QPrinter::PaperSize enumeration.
|
||||
* </ul>
|
||||
*
|
||||
*
|
||||
* \section secPrinterImplDetails Implementation details
|
||||
*
|
||||
* This widget is build as a QMainWindow (top-level) one
|
||||
* encapsulating only a CellWidget. It is configured to never been
|
||||
* shown thanks to the \c Qt::WA_DontShowOnScreen attribute, but
|
||||
* all the display computations still takes place as if it actually
|
||||
* was.
|
||||
*
|
||||
* To obtain a sufficent resolution the CellPrinter/CellWidget are
|
||||
* resized to the resolution of the printed page. For a better look
|
||||
* select a display style with patterns of 32x32 pixels, such as
|
||||
* \c "Printer.Coriolis".
|
||||
*/
|
||||
|
||||
|
||||
/*! \function CellPrinter::CellPrinter(QWidget* parent=NULL);
|
||||
* Construct a CellPrinter window no screen CellWidget is actually bound.
|
||||
*/
|
||||
/*! \function CellPrinter::~CellPrinter();
|
||||
* Destructor.
|
||||
*/
|
||||
/*! \function void CellPrinter::setScreenCellWidget(CellWidget* screenCellWidget);
|
||||
* Bind the CellPrinter to the screen CellWidget \c screenCellWidget.
|
||||
* It is those contents that will be printed.
|
||||
*/
|
||||
/*! \function void CellPrinter::setMode(int mode);
|
||||
* Sets the display mode, that is the resolution that will be used.
|
||||
* Two modes are availables:
|
||||
* <ul>
|
||||
* <li>CellWidget::Res_CellMode: (approx. 150 dpi), best suited for
|
||||
* displaying lone Cell or very small scale designs.
|
||||
* <li>CellWidget::Res_DesignMode: (approx. 300 dpi), for full
|
||||
* fledged designs.
|
||||
* </ul>
|
||||
*/
|
||||
/*! \function void CellPrinter::toPdf(QPrinter* printer, bool imageOnly=false);
|
||||
* \param printer The QPrinter to draw into.
|
||||
* \param imageOnly Whether to add the frame & cartouche or not.
|
||||
*
|
||||
* Perform the drawing operation on the QPrinter.
|
||||
*/
|
||||
|
||||
}
|
|
@ -1,5 +1,4 @@
|
|||
|
||||
|
||||
// -*- C++ -*-
|
||||
|
||||
|
||||
|
@ -7,18 +6,76 @@
|
|||
|
||||
/*! \class CellViewer
|
||||
* \brief A simple top level window embedding the CellWidget.
|
||||
*
|
||||
* This classe group together a CellWidget to view layout and
|
||||
* a ControllerWidget that enables to control it. It should
|
||||
* be used as the base for complete viewer.
|
||||
*/
|
||||
|
||||
|
||||
/*! \name Constructors & Destructors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function CellViewer::CellViewer(QWidget* parent=NULL);
|
||||
* Construct a CellView window no Cell is actually loaded.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
/*! \function CellViewer::~CellViewer();
|
||||
* Destructor.
|
||||
*/
|
||||
/*! \function bool CellViewer::isToolInterrupted() const;
|
||||
* \Return \true if the viewer has received an interruption request,
|
||||
* in that case it will abort it's current redrawing pass
|
||||
* (if any) and process the next drawing request.
|
||||
*/
|
||||
/*! \function void CellViewer::setEnableRedrawInterrupt(bool state);
|
||||
* Allows/disallow the redrawing interruptions. If disabled,
|
||||
* the viewer will not abort it's drawing passes.
|
||||
*/
|
||||
/*! \function void CellViewer::setApplicationName(const QString& name);
|
||||
* Sets the Qt application name. The name under which the application
|
||||
* will appears for window managers.
|
||||
*/
|
||||
/*! \function Cell* CellViewer::getCell() const;
|
||||
* \Return The Cell currently viewer (may be \c NULL if there is none).
|
||||
*/
|
||||
/*! \function void CellViewer::setCell(Cell* cell);
|
||||
* Load \c cell into the viewer.
|
||||
*/
|
||||
/*! \function void CellViewer::renameCell(const char* name);
|
||||
* Change the name of the currently loaded Cell.
|
||||
*/
|
||||
/*! \function Cell* CellViewer::getCellFromDb(const char* name);
|
||||
* \Return Load through a framework the Cell \c name.
|
||||
*
|
||||
* \important This function is virtual and actually empty. It is a placeholder
|
||||
* for derived classes. It has not be made pure virtual as not
|
||||
* every derived classes needs it. Instead it display a warning
|
||||
* message.
|
||||
*/
|
||||
/*! \function CellWidget* CellViewer::getCellWidget();
|
||||
* \Return The associated CellWidget (the actual widget that do the display).
|
||||
*/
|
||||
/*! \function const CellWidget* CellViewer::getCellWidget() const;
|
||||
* \Return The associated CellWidget (the actual widget that do the display).
|
||||
* This is the \e const flavor.
|
||||
*/
|
||||
/*! \function ControllerWidget* CellViewer::getControllerWidget();
|
||||
* \Return The associated ControllerWidget.
|
||||
*/
|
||||
/*! \function void CellViewer::setAnonNetSelectable(bool state);
|
||||
* Allows/disallow the selection of anonymous nets whith the
|
||||
* selection menu.
|
||||
*/
|
||||
/*! \function void CellViewer::select(Occurrence& occurrence);
|
||||
* Add \c occurrence the set of selected occurrences. Also
|
||||
* switch the viewer in selection mode (if not already on).
|
||||
*/
|
||||
/*! \function void CellViewer::unselect(Occurrence& occurrence);
|
||||
* Whidraw \c occurrence from the set of selected occurrences.
|
||||
*/
|
||||
/*! \function void CellViewer::unselectAll();
|
||||
* Clear the whole set of selected occurrences.
|
||||
*/
|
||||
/*! \function void CellViewer::setLayerVisible(const Name& layer, bool visible);
|
||||
* Sets the visibility state of \c layer. This is the programatic
|
||||
* equivalent of the ControllerWidget.
|
||||
*/
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
|
||||
// -*- C++ -*-
|
||||
|
||||
|
||||
namespace Hurricane {
|
||||
|
||||
/*! \class CellWidget
|
||||
* \brief The Widget to display a Cell.
|
||||
*
|
||||
* This is the workhorse of the viewer. This Widget provides the
|
||||
* comprehensive paraphernalia to display a Cell.
|
||||
*/
|
||||
|
||||
/*! \enum CellWidget::ResolutionMode
|
||||
* Defines the resolutions mode for both CellPrinter & CellImage.
|
||||
*/
|
||||
/*! \var CellWidget::ResolutionMode CellWidget::Res_CellMode;
|
||||
* Suited for displaying Cell or very small designs.
|
||||
*/
|
||||
/*! \var CellWidget::ResolutionMode CellWidget::Res_DesignMode;
|
||||
* Suited for displaying full fledged designs.
|
||||
*/
|
||||
|
||||
}
|
|
@ -16,10 +16,6 @@
|
|||
*/
|
||||
|
||||
|
||||
/*! \name Constructors & Destructors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function DisplayStyle::DisplayStyle(const Name& name);
|
||||
* Construct a DisplayStyle named \e name. The DisplayStyle
|
||||
* is populated with a minimal sets of DrawingStyles which
|
||||
|
@ -31,37 +27,39 @@
|
|||
* The standart destructor.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Accessors
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function const Name& DisplayStyle::getName() const;
|
||||
* \Return The name of this DisplayStyle.
|
||||
*/
|
||||
|
||||
/*! \function const std::string& DisplayStyle::getDescription() const;
|
||||
* \Return The long description of this DisplayStyle.
|
||||
*/
|
||||
|
||||
/*! \function const DisplayStyle::HSVr& DisplayStyle::getDarkening() const;
|
||||
* \Return The darkening factor.
|
||||
*/
|
||||
|
||||
/*! \function const Name& DisplayStyle::getGroup(const Name& key) const;
|
||||
* \Return The group owning the DrawingStyle of which key is \e key.
|
||||
*/
|
||||
|
||||
/*! \function const QColor& DisplayStyle::getColor(const Name& key, int darkening) const;
|
||||
/*! \function const string& DisplayStyle::getPattern(const Name& key) const;
|
||||
* \Return The pattern associated to the DrawingStyle \e key.
|
||||
*/
|
||||
|
||||
/*! \function const QColor& DisplayStyle::getColor(const Name& key, const DisplayStyle::HSVr& darkening) const;
|
||||
* \Return The QColor associated to the DrawingStyle \e key darkened by a factor \e darkening.
|
||||
*/
|
||||
|
||||
/*! \function const QPen& DisplayStyle::getColor(const Name& key, int darkening) const;
|
||||
/*! \function const QPen& DisplayStyle::getPen(const Name& key, const DisplayStyle::HSVr& darkening) const;
|
||||
* \Return The QPen associated to the DrawingStyle \e key darkened by a factor \e darkening.
|
||||
*/
|
||||
|
||||
/*! \function const QBrush& DisplayStyle::getBrush(const Name& key, int darkening) const;
|
||||
/*! \function const QBrush& DisplayStyle::getBrush(const Name& key, const DisplayStyle::HSVr& darkening) const;
|
||||
* \Return The QBrush associated to the DrawingStyle \e key darkened by a factor \e darkening.
|
||||
*/
|
||||
|
||||
/*! \function const string& DisplayStyle::getPattern(const Name& key) const;
|
||||
* \Return The pattern associated to the DrawingStyle \e key.
|
||||
*/
|
||||
|
||||
/*! \function const float DisplayStyle::getThreshold(const Name& key) const;
|
||||
* \Return The display threshold associated to the DrawingStyle \e key.
|
||||
*/
|
||||
|
@ -75,20 +73,33 @@
|
|||
* matches \e key, the \e default DrawingStyle is returned.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \name Modifiers
|
||||
*/
|
||||
// \{
|
||||
|
||||
/*! \function void DisplayStyle::inheritFrom(const DisplayStyle* base);
|
||||
* Clone the \e base DisplayStyle into the current one. Any
|
||||
* previous settings are eraseds.
|
||||
/*! \function QColor DisplayStyle::darken( const QColor& color, const DisplayStyle::HSVr& darkening );
|
||||
* \Return The \e color with the darkening factor \c darkening applied.
|
||||
*
|
||||
*/
|
||||
|
||||
/*! \function void DisplayStyle::addDrawingStyle(const Name& groupKey, const Name& key, const string& pattern, int red, int green, int blue, int borderWidth, float threshold);
|
||||
/*! \function void DisplayStyle::qtAllocate();
|
||||
* Triggers the allocation of Qt pens & brushes. Should not be used
|
||||
* directly but only through Graphics::enable().
|
||||
*/
|
||||
|
||||
/*! \function void DisplayStyle::setDescription(const std::string& description);
|
||||
* Sets the Display style informative text.
|
||||
*/
|
||||
|
||||
/*! \function void DisplayStyle::inheritFrom(const DisplayStyle* base);
|
||||
* Clone the \e base DisplayStyle into the current one. Any
|
||||
* previous settings are eraseds. The base style is \e duplicated
|
||||
* into this one. Further modification of \e base after this point
|
||||
* will have no effect on the current style.
|
||||
*/
|
||||
|
||||
/*! \function void DisplayStyle::setDarkening(const HSVr&);
|
||||
* Sets the darkening factor.
|
||||
*/
|
||||
|
||||
/*! \function void DisplayStyle::addDrawingStyle(const Name& groupKey, const Name& key, const std::string& pattern, int red, int green, int blue, int borderWidth, float threshold, bool goMatched=true);
|
||||
* \param groupKey in which group to insert this DrawinStyle.
|
||||
* \param key the DrawingStyle's name.
|
||||
* \param pattern the stipple pattern (for the brush).
|
||||
|
@ -97,12 +108,10 @@
|
|||
* \param blue the blue color component (for Brush & Pen).
|
||||
* \param borderWidth the width of the drawing (for Pen).
|
||||
* \param threshold the display threshold.
|
||||
* \param goMatched tells if this style is used to draw a Go.
|
||||
*
|
||||
* Adds a new DrawingStyle. If any previous DrawingStyle of the same
|
||||
* name was existing it is erased.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -66,20 +66,22 @@
|
|||
* styles used to draw all the objects from the CellWidget.
|
||||
*/
|
||||
|
||||
// !}
|
||||
//! \}
|
||||
|
||||
|
||||
//! \name Accessors
|
||||
// \{
|
||||
|
||||
/*! \function Graphics* Graphics::getGraphics();
|
||||
* \Return The Graphics singleton.
|
||||
*/
|
||||
|
||||
/*! \function bool Graphics::isEnabled();
|
||||
* \Return \true if Qt has been activated.
|
||||
*/
|
||||
|
||||
/*! \function const QFont Graphics::getFixedFont(int weight=-1, bool italic=false, bool underline=false);
|
||||
/*! \function const QFont Graphics::getFixedFont(int weight=QFont::Normal, bool italic=false, bool underline=false, int scale=0);
|
||||
* \param weight the font's weight (see Qt::Weight).
|
||||
* \param italic select the italic variant of the font.
|
||||
* \param underline the font will be underlined.
|
||||
* \param scale added to the font's default point size.
|
||||
* \return A QFont, the size of the font is guessed from the system's default.
|
||||
*/
|
||||
|
||||
|
@ -87,15 +89,15 @@
|
|||
* \Return The group owning the DrawingStyle of which key is \e key.
|
||||
*/
|
||||
|
||||
/*! \function const QColor& Graphics::getColor(const Name& key, int darkening=100);
|
||||
/*! \function const QColor& Graphics::getColor(const Name& key, const DisplayStyle::HSVr& darkening=DisplayStyle::HSVr());
|
||||
* \Return The QColor associated to the DrawingStyle \e key darkened by a factor \e darkening.
|
||||
*/
|
||||
|
||||
/*! \function const QPen& Graphics::getPen(const Name& key, int darkening=100);
|
||||
/*! \function const QPen& Graphics::getPen(const Name& key, const DisplayStyle::HSVr& darkening=DisplayStyle::HSVr());
|
||||
* \Return The QPen associated to the DrawingStyle \e key darkened by a factor \e darkening.
|
||||
*/
|
||||
|
||||
/*! \function const QBrush& Graphics::getBrush(const Name& key, int darkening=100);
|
||||
/*! \function const QBrush& Graphics::getBrush(const Name& key, const DisplayStyle::HSVr& darkening=DisplayStyle::HSVr());
|
||||
* \Return The QBrush associated to the DrawingStyle \e key by a factor \e darkening.
|
||||
*/
|
||||
|
||||
|
@ -107,11 +109,33 @@
|
|||
* \Return The display threshold associated to the DrawingStyle \e key.
|
||||
*/
|
||||
|
||||
// \}
|
||||
/*! \function const DisplayStyle::HSVr& Graphics::getDarkening();
|
||||
* \Return The darkening factor applied to non-selected objects.
|
||||
*/
|
||||
|
||||
/*! \function const ColorScale& Graphics::getColorScale( ColorScale::ScaleType );
|
||||
* \Return The darkening factor applied to non-selected objects.
|
||||
*/
|
||||
|
||||
/*! \function const QColor Graphics::darken( const QColor& color );
|
||||
* \Return The QColor with the darkening factor applied.
|
||||
*/
|
||||
|
||||
/*! \function const QColor Graphics::darken( const QColor& color );
|
||||
* \Return The QColor with the darkening factor applied.
|
||||
*/
|
||||
|
||||
/*! \function const TextTranslator& Graphics::getHtmlTranslator();
|
||||
* \Return The translator applied to generate html text.
|
||||
* \see toHtml()
|
||||
*/
|
||||
|
||||
/*! \function const string Graphics::toHtml( const string& );
|
||||
* \Return A string suitable for HTML enabled devices, such as most of the
|
||||
* Qt widgets. Special characters like \c '&' are replaced by their
|
||||
* HTML counterpart (\c \&)
|
||||
*/
|
||||
|
||||
//! \name Modifiers
|
||||
// \{
|
||||
|
||||
/*! \function const void Graphics::addStyle(DisplayStyle* displayStyle);
|
||||
* Adds a new DisplayStyle to the Graphics environment.
|
||||
|
@ -133,7 +157,8 @@
|
|||
* \Return The DisplayStyle which is currently in use.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
/*! \function void Graphics::enable();
|
||||
* Effectively calls Qt, allocated Pens & Brushes and so on.
|
||||
*/
|
||||
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
namespace Hurricane {
|
||||
|
||||
/*! \class HInspectorWidget
|
||||
/*! \class InspectorWidget
|
||||
* \brief A Widget to browse through the Hurricane objetcs.
|
||||
*
|
||||
* \section secInspectorMM Inspector Memory Management
|
||||
|
@ -39,27 +39,24 @@
|
|||
*/
|
||||
|
||||
|
||||
//! \name Constructors & Destructors
|
||||
// \{
|
||||
|
||||
/*! \function InspectorWidget::InspectorWidget(QWidget* parent=NULL);
|
||||
* Construct a HInspectorWidget. The root Record to browse must
|
||||
* Construct a InspectorWidget. The root Record to browse must
|
||||
* be sets immediatly afterwards with the setRootRecord()
|
||||
* method.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
//! \name Modifiers
|
||||
// \{
|
||||
|
||||
/*! \function void InspectorWidget::setRootRecord(Record* record);
|
||||
* Sets the root record of the Inspector. Note that the
|
||||
* previous root record is freed.
|
||||
* Sets the root record of the Inspector.
|
||||
*
|
||||
* \remark The previous root record is freed.
|
||||
*/
|
||||
|
||||
// \}
|
||||
|
||||
|
||||
/*! \function void InspectorWidget::setRootOccurrence(Occurrence& occurrence);
|
||||
* Build a Record from the Occurrence and set it as the root Record.
|
||||
*
|
||||
* \remark The previous root record is freed.
|
||||
*/
|
||||
|
||||
}
|
||||
|
|
|
@ -29,17 +29,23 @@
|
|||
<h2>API documentations</h2>
|
||||
<ul>
|
||||
<li><b><a href="group__graphicsGroup.html">Access to graphical resources.</a></b><br>
|
||||
<!-- Do not get generated when there is no inheritance between classes.
|
||||
<li><b><a href="hierarchy.html">Complete Class Hierarchy (doxygen).</a></b>
|
||||
-->
|
||||
<li><b><a href="annotated.html">Class List (doxygen).</a></b>
|
||||
<li><b><a href="classes.html">Class Index (doxygen).</a></b>
|
||||
<li><b><a href="modules.html">Modules (raw concepts).</a></b>
|
||||
<li><b><a href="functions.html">Member Functions Index (doxygen).</a></b>
|
||||
<!--
|
||||
<li><b><a href="namespaces.html">Namespaces (doxygen).</a></b>
|
||||
-->
|
||||
</ul>
|
||||
<!--
|
||||
<h2>Implementation Documentations</h2>
|
||||
<ul>
|
||||
<li><b><a href="group__CellWidgetInternal.html">Cell Widget Visualisation Mechanims</a></b><br>
|
||||
</ul>
|
||||
-->
|
||||
|
||||
|
||||
<hr>
|
||||
|
@ -52,7 +58,7 @@
|
|||
<table class="footer2">
|
||||
<tr>
|
||||
<td class="LFooter">Hurricane Viewer Documentation</td>
|
||||
<td class="RFooter"><small>Copyright © 2008-2008 LIP6/UPMC All rights reserved</small></td>
|
||||
<td class="RFooter"><small>Copyright © 2008-2012 LIP6/UPMC All rights reserved</small></td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
|
|
|
@ -245,7 +245,7 @@ OPTIMIZE_OUTPUT_VHDL = NO
|
|||
# func(std::string) {}). This also make the inheritance and collaboration
|
||||
# diagrams that involve STL classes more complete and accurate.
|
||||
|
||||
BUILTIN_STL_SUPPORT = NO
|
||||
BUILTIN_STL_SUPPORT = YES
|
||||
|
||||
# If you use Microsoft's C++/CLI language, you should set this option to YES to
|
||||
# enable parsing support.
|
||||
|
@ -588,6 +588,11 @@ INPUT = ../../src/viewer/hurricane/viewer/Graphics.h \
|
|||
../../src/viewer/hurricane/viewer/DisplayStyle.h \
|
||||
DisplayStyle.dox \
|
||||
../../src/viewer/hurricane/viewer/CellWidget.h \
|
||||
CellWidget.dox \
|
||||
../../src/viewer/hurricane/viewer/CellPrinter.h \
|
||||
CellPrinter.dox \
|
||||
../../src/viewer/hurricane/viewer/CellImage.h \
|
||||
CellImage.dox \
|
||||
../../src/viewer/hurricane/viewer/CellViewer.h \
|
||||
CellViewer.dox \
|
||||
../../src/viewer/hurricane/viewer/InspectorWidget.h \
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
<table class="footer2">
|
||||
<tr>
|
||||
<td class="LFooter">Hurricane Viewer Documentation</td>
|
||||
<td class="RFooter"><small>Copyright © 2008-2008 LIP6/UPMC All rights reserved</small></td>
|
||||
<td class="RFooter"><small>Copyright © 2008-2012 LIP6/UPMC All rights reserved</small></td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
|
|
|
@ -184,7 +184,6 @@ namespace Hurricane {
|
|||
,minimalSpacing)
|
||||
,_material (material)
|
||||
,_extractNumber (extractNumber)
|
||||
,_connectorLayer(NULL)
|
||||
,_blockageLayer (NULL)
|
||||
,_realName ("<not associated>")
|
||||
{ }
|
||||
|
@ -207,10 +206,6 @@ namespace Hurricane {
|
|||
}
|
||||
|
||||
|
||||
BasicLayer* BasicLayer::getConnectorLayer () const
|
||||
{ return _connectorLayer; }
|
||||
|
||||
|
||||
BasicLayer* BasicLayer::getBlockageLayer () const
|
||||
{ return _blockageLayer; }
|
||||
|
||||
|
|
|
@ -346,10 +346,10 @@ Record* Box::_getRecord() const
|
|||
if (isEmpty()) return NULL;
|
||||
|
||||
Record* record = new Record(getString(this));
|
||||
record->add(getSlot("XMin", &_xMin));
|
||||
record->add(getSlot("YMin", &_yMin));
|
||||
record->add(getSlot("XMax", &_xMax));
|
||||
record->add(getSlot("YMax", &_yMax));
|
||||
record->add(DbU::getValueSlot("XMin", &_xMin));
|
||||
record->add(DbU::getValueSlot("YMin", &_yMin));
|
||||
record->add(DbU::getValueSlot("XMax", &_xMax));
|
||||
record->add(DbU::getValueSlot("YMax", &_yMax));
|
||||
return record;
|
||||
}
|
||||
|
||||
|
|
|
@ -354,10 +354,10 @@ Record* Contact::_getRecord() const
|
|||
record->add(getSlot("AnchorHook", &_anchorHook));
|
||||
record->add(getSlot("Anchor", getAnchor()));
|
||||
record->add(getSlot("Layer", _layer));
|
||||
record->add(getSlot("Dx", &_dx));
|
||||
record->add(getSlot("Dy", &_dy));
|
||||
record->add(getSlot("Width", &_width));
|
||||
record->add(getSlot("Height", &_height));
|
||||
record->add(DbU::getValueSlot("Dx", &_dx));
|
||||
record->add(DbU::getValueSlot("Dy", &_dy));
|
||||
record->add(DbU::getValueSlot("Width", &_width));
|
||||
record->add(DbU::getValueSlot("Height", &_height));
|
||||
}
|
||||
return record;
|
||||
}
|
||||
|
|
|
@ -253,6 +253,13 @@ namespace Hurricane {
|
|||
}
|
||||
|
||||
|
||||
void DbU::getStringMode ( unsigned int& mode, UnitPower& p )
|
||||
{
|
||||
mode = _stringMode;
|
||||
p = _stringModeUnitPower;
|
||||
}
|
||||
|
||||
|
||||
string DbU::getValueString ( DbU::Unit u, int mode )
|
||||
{
|
||||
char buffer[1024];
|
||||
|
|
|
@ -70,7 +70,7 @@ namespace Hurricane {
|
|||
) : Layer(technology
|
||||
,name
|
||||
,0 // minimalSize.
|
||||
,0) // minmalSpacing.
|
||||
,0) // minimalSpacing.
|
||||
,_basicLayers()
|
||||
,_extentionCaps()
|
||||
,_extentionWidths()
|
||||
|
|
|
@ -184,9 +184,9 @@ Record* Horizontal::_getRecord() const
|
|||
{
|
||||
Record* record = Inherit::_getRecord();
|
||||
if (record) {
|
||||
record->add(getSlot("Y", &_y));
|
||||
record->add(getSlot("DxSource", &_dxSource));
|
||||
record->add(getSlot("DxTarget", &_dxTarget));
|
||||
record->add(DbU::getValueSlot("Y", &_y));
|
||||
record->add(DbU::getValueSlot("DxSource", &_dxSource));
|
||||
record->add(DbU::getValueSlot("DxTarget", &_dxTarget));
|
||||
}
|
||||
return record;
|
||||
}
|
||||
|
|
|
@ -254,8 +254,8 @@ Record* Interval::_getRecord() const
|
|||
// ***************************
|
||||
{
|
||||
Record* record = new Record(getString(this));
|
||||
record->add(getSlot("VMin", &_vMin));
|
||||
record->add(getSlot("VMin", &_vMax));
|
||||
record->add(DbU::getValueSlot("VMin", &_vMin));
|
||||
record->add(DbU::getValueSlot("VMin", &_vMax));
|
||||
return record;
|
||||
}
|
||||
|
||||
|
|
|
@ -63,7 +63,6 @@ namespace Hurricane {
|
|||
, _extractMask(0)
|
||||
, _minimalSize(minimalSize)
|
||||
, _minimalSpacing(minimalSpacing)
|
||||
, _pitch(pitch)
|
||||
, _nextOfTechnologyLayerMap(NULL)
|
||||
, _working(false)
|
||||
{
|
||||
|
@ -78,10 +77,6 @@ namespace Hurricane {
|
|||
}
|
||||
|
||||
|
||||
Layer* Layer::getConnectorLayer () const
|
||||
{ return NULL; }
|
||||
|
||||
|
||||
const Layer* Layer::getBlockageLayer () const
|
||||
{ return NULL; }
|
||||
|
||||
|
@ -178,12 +173,6 @@ namespace Hurricane {
|
|||
}
|
||||
|
||||
|
||||
void Layer::setPitch ( const DbU::Unit& pitch )
|
||||
{
|
||||
_pitch = pitch;
|
||||
}
|
||||
|
||||
|
||||
void Layer::setEnclosure ( const BasicLayer* layer, DbU::Unit )
|
||||
{
|
||||
cerr << "[WARNING] Layer::setEnclosure() musn't be called on "
|
||||
|
@ -227,7 +216,6 @@ namespace Hurricane {
|
|||
{
|
||||
_minimalSize = (DbU::Unit)( (float)_minimalSize * scale );
|
||||
_minimalSpacing = (DbU::Unit)( (float)_minimalSpacing * scale );
|
||||
_pitch = (DbU::Unit)( (float)_pitch * scale );
|
||||
}
|
||||
|
||||
|
||||
|
@ -247,9 +235,8 @@ namespace Hurricane {
|
|||
record->add(getSlot("Name" , &_name ));
|
||||
record->add(getSlot("Mask" , &_mask ));
|
||||
record->add(getSlot("ExtractMask" , &_extractMask ));
|
||||
record->add(getSlot("MinimalSize" , &_minimalSize ));
|
||||
record->add(getSlot("MinimalSpacing", &_minimalSpacing));
|
||||
record->add(getSlot("Pitch" , &_pitch ));
|
||||
record->add(DbU::getValueSlot("MinimalSize" , &_minimalSize ));
|
||||
record->add(DbU::getValueSlot("MinimalSpacing", &_minimalSpacing));
|
||||
}
|
||||
return record;
|
||||
}
|
||||
|
|
|
@ -118,8 +118,8 @@ Record* Point::_getRecord() const
|
|||
// ******************************
|
||||
{
|
||||
Record* record = new Record(getString(this));
|
||||
record->add(getSlot("X", &_x));
|
||||
record->add(getSlot("Y", &_y));
|
||||
record->add(DbU::getValueSlot("X", &_x));
|
||||
record->add(DbU::getValueSlot("Y", &_y));
|
||||
return record;
|
||||
}
|
||||
|
||||
|
|
|
@ -328,8 +328,8 @@ namespace Hurricane {
|
|||
if (record) {
|
||||
record->add(getSlot("_basicLayer" , _basicLayer ));
|
||||
record->add(getSlot("_enclosure" , &_enclosure ));
|
||||
record->add(getSlot("_extentionCap" , &_extentionCap ));
|
||||
record->add(getSlot("_extentionWidth", &_extentionWidth));
|
||||
record->add(DbU::getValueSlot("_extentionCap" , &_extentionCap ));
|
||||
record->add(DbU::getValueSlot("_extentionWidth", &_extentionWidth));
|
||||
}
|
||||
return record;
|
||||
}
|
||||
|
|
|
@ -322,7 +322,7 @@ Record* Segment::_getRecord() const
|
|||
record->add(getSlot("TargetHook", &_targetHook));
|
||||
record->add(getSlot("Target", getTarget()));
|
||||
record->add(getSlot("Layer", _layer));
|
||||
record->add(getSlot("Width", &_width));
|
||||
record->add(DbU::getValueSlot("Width", &_width));
|
||||
}
|
||||
return record;
|
||||
}
|
||||
|
|
|
@ -187,9 +187,9 @@ Record* Vertical::_getRecord() const
|
|||
{
|
||||
Record* record = Inherit::_getRecord();
|
||||
if (record) {
|
||||
record->add(getSlot("X", &_x));
|
||||
record->add(getSlot("DySource", &_dySource));
|
||||
record->add(getSlot("DyTarget", &_dyTarget));
|
||||
record->add(DbU::getValueSlot("X", &_x));
|
||||
record->add(DbU::getValueSlot("DySource", &_dySource));
|
||||
record->add(DbU::getValueSlot("DyTarget", &_dyTarget));
|
||||
}
|
||||
return record;
|
||||
}
|
||||
|
|
|
@ -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++ Header : "./hurricane/BasicLayer.h" |
|
||||
// | *************************************************************** |
|
||||
// | U p d a t e s |
|
||||
// | |
|
||||
// x-----------------------------------------------------------------x
|
||||
// +-----------------------------------------------------------------+
|
||||
|
||||
|
||||
# ifndef __HURRICANE_BASIC_LAYER__
|
||||
|
@ -96,11 +88,9 @@ namespace Hurricane {
|
|||
inline const Material& getMaterial () const;
|
||||
inline unsigned getExtractNumber () const;
|
||||
virtual BasicLayers getBasicLayers () const;
|
||||
virtual BasicLayer* getConnectorLayer () const;
|
||||
virtual BasicLayer* getBlockageLayer () const;
|
||||
inline const Name& getRealName () const;
|
||||
// Updators
|
||||
inline void setConnectorLayer ( BasicLayer* layer);
|
||||
inline void setBlockageLayer ( BasicLayer* layer);
|
||||
inline void setExtractNumber ( unsigned int );
|
||||
inline void setRealName ( const char* realName);
|
||||
|
@ -114,7 +104,6 @@ namespace Hurricane {
|
|||
// Internal: Attributes
|
||||
Material _material;
|
||||
unsigned _extractNumber;
|
||||
BasicLayer* _connectorLayer;
|
||||
BasicLayer* _blockageLayer;
|
||||
Name _realName;
|
||||
|
||||
|
@ -141,7 +130,6 @@ namespace Hurricane {
|
|||
BasicLayer::getMaterial () const { return _material; }
|
||||
inline unsigned BasicLayer::getExtractNumber () const { return _extractNumber; }
|
||||
inline const Name& BasicLayer::getRealName () const { return _realName; }
|
||||
inline void BasicLayer::setConnectorLayer ( BasicLayer* layer) { _connectorLayer = layer; }
|
||||
inline void BasicLayer::setBlockageLayer ( BasicLayer* layer) { _blockageLayer = layer; }
|
||||
inline void BasicLayer::setExtractNumber ( unsigned int number ) { _extractNumber=number; }
|
||||
inline void BasicLayer::setRealName ( const char* realName) { _realName = realName; }
|
||||
|
|
|
@ -94,4 +94,7 @@ namespace Hurricane {
|
|||
} // End of Hurricane namespace.
|
||||
|
||||
|
||||
INSPECTOR_P_SUPPORT(Hurricane::ContactLayer);
|
||||
|
||||
|
||||
# endif
|
||||
|
|
|
@ -74,6 +74,11 @@ namespace Hurricane {
|
|||
|
||||
public:
|
||||
// User to DB Converters.
|
||||
static inline Unit fromDb ( long value );
|
||||
static inline Unit fromGrid ( double value );
|
||||
static inline Unit fromLambda ( double value );
|
||||
static inline Unit fromPhysical ( double value, UnitPower p );
|
||||
// Old naming scheme (was not very clear).
|
||||
static inline Unit db ( long value );
|
||||
static inline Unit grid ( double value );
|
||||
static inline Unit lambda ( double value );
|
||||
|
@ -101,6 +106,14 @@ namespace Hurricane {
|
|||
static DbU::Unit getOnCustomGrid ( DbU::Unit u, DbU::Unit step, SnapMode mode=Nearest );
|
||||
static inline DbU::Unit getOnPhysicalGrid ( DbU::Unit u, SnapMode mode=Superior );
|
||||
// Conversions.
|
||||
static inline long toDb ( Unit u );
|
||||
static inline double toGrid ( Unit u );
|
||||
static inline double toGrid ( double u );
|
||||
static inline double toLambda ( Unit u );
|
||||
static inline double toLambda ( double u );
|
||||
static inline double toPhysical ( Unit u, UnitPower p );
|
||||
static inline double toPhysical ( double u, UnitPower p );
|
||||
// Old naming scheme (not very clear).
|
||||
static inline long getDb ( Unit u );
|
||||
static inline double getGrid ( Unit u );
|
||||
static inline double getGrid ( double u );
|
||||
|
@ -113,6 +126,7 @@ namespace Hurricane {
|
|||
static Record* getValueRecord ( const Unit* u );
|
||||
static Slot* getValueSlot ( const string& name, const Unit* u );
|
||||
static void setStringMode ( unsigned int mode, UnitPower p=Nano );
|
||||
static void getStringMode ( unsigned int& mode, UnitPower& p );
|
||||
|
||||
public:
|
||||
// Static Attributes: constants.
|
||||
|
@ -133,17 +147,32 @@ namespace Hurricane {
|
|||
|
||||
|
||||
// Inline Functions.
|
||||
inline DbU::Unit DbU::db ( long value ) { return value; }
|
||||
inline DbU::Unit DbU::grid ( double value ) { return (long)rint( value/_resolution ); }
|
||||
inline DbU::Unit DbU::lambda ( double value ) { return grid(value*_gridsPerLambda); }
|
||||
inline DbU::Unit DbU::physicalToDbu ( double value, UnitPower p ) { return grid((value*getUnitPower(p))/_physicalsPerGrid); }
|
||||
inline long DbU::getDb ( DbU::Unit u ) { return u; }
|
||||
inline double DbU::getGrid ( DbU::Unit u ) { return _resolution*(double)u; }
|
||||
inline double DbU::getGrid ( double u ) { return _resolution*u; }
|
||||
inline double DbU::getLambda ( DbU::Unit u ) { return getGrid(u)/_gridsPerLambda; }
|
||||
inline double DbU::getLambda ( double u ) { return getGrid(u)/_gridsPerLambda; }
|
||||
inline double DbU::getPhysical ( DbU::Unit u, UnitPower p ) { return (_physicalsPerGrid*_resolution*(double)u)/getUnitPower(p); }
|
||||
inline double DbU::getPhysical ( double u, UnitPower p ) { return (_physicalsPerGrid*_resolution*u)/getUnitPower(p); }
|
||||
// New converter naming scheme.
|
||||
inline DbU::Unit DbU::fromDb ( long value ) { return value; }
|
||||
inline DbU::Unit DbU::fromGrid ( double value ) { return (long)rint( value/_resolution ); }
|
||||
inline DbU::Unit DbU::fromLambda ( double value ) { return grid(value*_gridsPerLambda); }
|
||||
inline DbU::Unit DbU::fromPhysical ( double value, UnitPower p ) { return grid((value*getUnitPower(p))/_physicalsPerGrid); }
|
||||
inline long DbU::toDb ( DbU::Unit u ) { return u; }
|
||||
inline double DbU::toGrid ( DbU::Unit u ) { return _resolution*(double)u; }
|
||||
inline double DbU::toGrid ( double u ) { return _resolution*u; }
|
||||
inline double DbU::toLambda ( DbU::Unit u ) { return getGrid(u)/_gridsPerLambda; }
|
||||
inline double DbU::toLambda ( double u ) { return getGrid(u)/_gridsPerLambda; }
|
||||
inline double DbU::toPhysical ( DbU::Unit u, UnitPower p ) { return (_physicalsPerGrid*_resolution*(double)u)/getUnitPower(p); }
|
||||
inline double DbU::toPhysical ( double u, UnitPower p ) { return (_physicalsPerGrid*_resolution*u)/getUnitPower(p); }
|
||||
|
||||
// Old converter naming scheme.
|
||||
inline DbU::Unit DbU::db ( long value ) { return fromDb(value); }
|
||||
inline DbU::Unit DbU::grid ( double value ) { return fromGrid(value); }
|
||||
inline DbU::Unit DbU::lambda ( double value ) { return fromLambda(value); }
|
||||
inline DbU::Unit DbU::physicalToDbu ( double value, UnitPower p ) { return fromPhysical(value,p); }
|
||||
inline long DbU::getDb ( DbU::Unit u ) { return toDb(u); }
|
||||
inline double DbU::getGrid ( DbU::Unit u ) { return toGrid(u); }
|
||||
inline double DbU::getGrid ( double u ) { return toGrid(u); }
|
||||
inline double DbU::getLambda ( DbU::Unit u ) { return toLambda(u); }
|
||||
inline double DbU::getLambda ( double u ) { return toLambda(u); }
|
||||
inline double DbU::getPhysical ( DbU::Unit u, UnitPower p ) { return toPhysical(u,p); }
|
||||
inline double DbU::getPhysical ( double u, UnitPower p ) { return toPhysical(u,p); }
|
||||
|
||||
inline void DbU::setRealSnapGridStep ( DbU::Unit step ) { _realSnapGridStep = step; }
|
||||
inline void DbU::setSymbolicSnapGridStep ( DbU::Unit step ) { _symbolicSnapGridStep = step; }
|
||||
inline DbU::Unit DbU::getOnPhysicalGrid ( DbU::Unit u, SnapMode mode ) { return getOnCustomGrid(u, grid(1), mode); }
|
||||
|
|
|
@ -96,4 +96,7 @@ namespace Hurricane {
|
|||
} // End of Hurricane namespace.
|
||||
|
||||
|
||||
INSPECTOR_P_SUPPORT(Hurricane::DiffusionLayer);
|
||||
|
||||
|
||||
# endif
|
||||
|
|
|
@ -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++ Header : "./hurricane/Layer.h" |
|
||||
// | *************************************************************** |
|
||||
// | U p d a t e s |
|
||||
// | |
|
||||
// x-----------------------------------------------------------------x
|
||||
// +-----------------------------------------------------------------+
|
||||
|
||||
|
||||
#ifndef __HURRICANE_LAYER__
|
||||
|
@ -66,9 +58,7 @@ namespace Hurricane {
|
|||
inline const Mask& getExtractMask () const;
|
||||
inline const DbU::Unit& getMinimalSize () const;
|
||||
inline const DbU::Unit& getMinimalSpacing () const;
|
||||
inline DbU::Unit getPitch () const;
|
||||
virtual BasicLayers getBasicLayers () const = 0;
|
||||
virtual Layer* getConnectorLayer () const;
|
||||
virtual const Layer* getBlockageLayer () const;
|
||||
virtual const Layer* getTop () const;
|
||||
virtual const Layer* getBottom () const;
|
||||
|
@ -94,7 +84,6 @@ namespace Hurricane {
|
|||
inline void setWorking ( bool );
|
||||
void setMinimalSize ( const DbU::Unit& minimalSize );
|
||||
void setMinimalSpacing ( const DbU::Unit& minimalSpacing );
|
||||
void setPitch ( const DbU::Unit& pitch );
|
||||
virtual void setEnclosure ( const BasicLayer* layer, DbU::Unit );
|
||||
virtual void setExtentionCap ( const BasicLayer* layer, DbU::Unit );
|
||||
virtual void setExtentionWidth ( const BasicLayer* layer, DbU::Unit );
|
||||
|
@ -119,7 +108,6 @@ namespace Hurricane {
|
|||
Mask _extractMask;
|
||||
DbU::Unit _minimalSize;
|
||||
DbU::Unit _minimalSpacing;
|
||||
DbU::Unit _pitch;
|
||||
Layer* _nextOfTechnologyLayerMap;
|
||||
bool _working;
|
||||
|
||||
|
@ -146,7 +134,6 @@ namespace Hurricane {
|
|||
inline const Layer::Mask& Layer::getExtractMask () const { return _extractMask; }
|
||||
inline const DbU::Unit& Layer::getMinimalSize () const { return _minimalSize; }
|
||||
inline const DbU::Unit& Layer::getMinimalSpacing () const { return _minimalSpacing; }
|
||||
inline DbU::Unit Layer::getPitch () const { return (!_pitch?(_minimalSize + _minimalSpacing):_pitch); }
|
||||
inline void Layer::setWorking ( bool state ) { _working = state; }
|
||||
inline Layer* Layer::_getNextOfTechnologyLayerMap () const { return _nextOfTechnologyLayerMap; }
|
||||
inline void Layer::_setMask ( const Mask& mask ) { _mask = mask; }
|
||||
|
|
|
@ -59,7 +59,6 @@ namespace Hurricane {
|
|||
inline bool isSet ( const Mask mask ) const;
|
||||
inline bool contains ( const Mask mask ) const;
|
||||
inline bool intersect ( const Mask mask ) const;
|
||||
inline Mask& merge ( const Mask mask ) const;
|
||||
inline Mask nthbit ( unsigned int ) const;
|
||||
inline Mask operator compl () const;
|
||||
inline Mask operator bitand ( const Mask mask ) const;
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue