* 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:
Jean-Paul Chaput 2012-11-16 12:48:38 +00:00
parent df2eaec70f
commit 47f3771f1d
185 changed files with 10583 additions and 3286 deletions

View File

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

View File

@ -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.
*/
}

View File

@ -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\>.
*/
// \}
}

View File

@ -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.
*/
// \}
}

View File

@ -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.
*
*/
}

View File

@ -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.
*/
// \}
}

View File

@ -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.

View File

@ -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.
*/
// \}
}

View File

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

View File

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

View File

@ -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.
*/
}

View File

@ -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&amp; 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&amp; name);
public: static MyCell* Create(Library* library, const Name&amp; 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&amp; 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&amp; 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;

View File

@ -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.
*/
// \}
}

View File

@ -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.
*/
// \}

View File

@ -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.
*/
}

View File

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

View File

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

View File

@ -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.
*/
}

View File

@ -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.
*/
}

View File

@ -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.
*/
}

View File

@ -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 ...
*/
// \}
}

View File

@ -21,6 +21,4 @@
* don't detail this class. Kwowing that they exist is enough.
*/
}

View File

@ -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.
*/
// \}
}

View File

@ -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 @@
// \}
}

View File

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

View File

@ -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 @@
// \}
}

View File

@ -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.
*/
// \}
}

View File

@ -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));
*
*/
// \}
}

View File

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

View File

@ -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 @@
// \}
}

View File

@ -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.
*/
// \}
}

View File

@ -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.
*/
}

View File

@ -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).
*/
// \}
}

View File

@ -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.
*/
// \}
}

View File

@ -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.
*/
}

View File

@ -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.
*/
// \}
}

View File

@ -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.
*/
// \}
}

View File

@ -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)

View File

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

View File

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

View File

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

View File

@ -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.
*/
// \}
}

View File

@ -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.
*/
// \}
}

View File

@ -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.

View File

@ -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).
*/
// \}
}

View File

@ -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(); } }
*/
}

View File

@ -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.
*/
// \}
}

View File

@ -26,9 +26,6 @@
// \}
/*! \name Accessors
*/
// \{
/*! \function string* RecordHandles::_GetString () const;
* \Return a string representing the object name and characteristics

View File

@ -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.
*/
// \}
}

View File

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

View File

@ -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 @@
// \}
}

View File

@ -49,16 +49,8 @@
*/
/* \name SelectCommand Functions
*/
// \{
/* \function SelectCommand* SelectCommand::GetSelectCommand();
* \Return the selection command.
*/
// \}
}

View File

@ -39,15 +39,8 @@
/* \name SelectNetCommand Functions
*/
// \{
/* \function SelectNetCommand* SelectNetCommand::GetSelectNetCommand();
* \Return the select net command object.
*/
// \}
}

View File

@ -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.
*/
// \}
}

View File

@ -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.

View File

@ -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()) {
// \}
}

View File

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

View File

@ -102,10 +102,6 @@ cell : ...
/*! \name Constructors
*/
// \{
/*! \function Tabulation::Tabulation(const string& s = "&nbsp;&nbsp;&nbsp;");
* 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.
*/
// \}
}

View File

@ -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).
*/
}

View File

@ -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.
*/
// \}
}

View File

@ -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.
*/
}

View File

@ -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.
*/
// \}
}

View File

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

View File

@ -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.
*/
}

View File

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

View File

@ -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.
*/
// \}
}

View File

@ -57,16 +57,8 @@ void ZoomCommand::_OnButtonRelease(View* view, const Point& position)
*/
/* \name ZoomCommand Functions
*/
// \{
/* \function ZoomCommand* ZoomCommand::GetZoomCommand();
* \Return the zoom command.
*/
// \}
}

View File

@ -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 &#169; 2000-2009 Bull S.A. All rights reserved</small></td>
<td class="RFooter"><small>Copyright &#169; 2000-2012 Bull S.A. All rights reserved</small></td>
</tr>
</table>
</body>

View File

@ -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 &#169; 2000-2009 Bull S.A. All rights reserved</small></td>
<td class="RFooter"><small>Copyright &#169; 2000-2012 Bull S.A. All rights reserved</small></td>
</tr>
</table>
</body>

View File

@ -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 \

View File

@ -9,7 +9,7 @@
<table class="footer2">
<tr>
<td class="LFooter">Hurricane Documentation</td>
<td class="RFooter"><small>Copyright &#169; 2000-2009 Bull S.A. All rights reserved</small></td>
<td class="RFooter"><small>Copyright &#169; 2000-2012 Bull S.A. All rights reserved</small></td>
</tr>
</table>
</body>

View File

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

View File

@ -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.
*/
}

View File

@ -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.
*/
}

View File

@ -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.
*/
}

View File

@ -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.
*/
}

View File

@ -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.
*/
// \}
}

View File

@ -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 \&amp;)
*/
//! \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.
*/
}

View File

@ -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.
*/
}

View File

@ -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 &#169; 2008-2008 LIP6/UPMC All rights reserved</small></td>
<td class="RFooter"><small>Copyright &#169; 2008-2012 LIP6/UPMC All rights reserved</small></td>
</tr>
</table>
</body>

View File

@ -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 \

View File

@ -9,7 +9,7 @@
<table class="footer2">
<tr>
<td class="LFooter">Hurricane Viewer Documentation</td>
<td class="RFooter"><small>Copyright &#169; 2008-2008 LIP6/UPMC All rights reserved</small></td>
<td class="RFooter"><small>Copyright &#169; 2008-2012 LIP6/UPMC All rights reserved</small></td>
</tr>
</table>
</body>

View File

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

View File

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

View File

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

View File

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

View File

@ -70,7 +70,7 @@ namespace Hurricane {
) : Layer(technology
,name
,0 // minimalSize.
,0) // minmalSpacing.
,0) // minimalSpacing.
,_basicLayers()
,_extentionCaps()
,_extentionWidths()

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -19,12 +19,7 @@
// License along with Hurricane. If not, see
// <http://www.gnu.org/licenses/>.
//
// ===================================================================
//
// $Id$
//
// x-----------------------------------------------------------------x
// | |
// +-----------------------------------------------------------------+
// | H U R R I C A N E |
// | V L S I B a c k e n d D a t a - B a s e |
// | |
@ -32,10 +27,7 @@
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ 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; }

View File

@ -94,4 +94,7 @@ namespace Hurricane {
} // End of Hurricane namespace.
INSPECTOR_P_SUPPORT(Hurricane::ContactLayer);
# endif

View File

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

View File

@ -96,4 +96,7 @@ namespace Hurricane {
} // End of Hurricane namespace.
INSPECTOR_P_SUPPORT(Hurricane::DiffusionLayer);
# endif

View File

@ -19,12 +19,7 @@
// License along with Hurricane. If not, see
// <http://www.gnu.org/licenses/>.
//
// ===================================================================
//
// $Id$
//
// x-----------------------------------------------------------------x
// | |
// +-----------------------------------------------------------------+
// | H U R R I C A N E |
// | V L S I B a c k e n d D a t a - B a s e |
// | |
@ -32,10 +27,7 @@
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ 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; }

View File

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