coriolis/knik/doc/Vertex.dox

243 lines
7.6 KiB
C++

// -*- C++ -*-
namespace KNIK {
/*! \class Vertex
* \brief A routing graph vertex.\n
* - \ref VertexAttributes "Attributes"
* - \ref VertexConstructors "Constructors"
* - \ref VertexAccessors "Accessors"
* - \ref VertexModifiers "Modifiers"
* - \ref VertexPredicates "Predicates"
*
* The Edge was written to be a light object which simplifies the way the routing graph is covered.
* Edges are thus separated into two sub-classes : VEdge and HEdge respectively representing vertical edge and
* horizontal edge.
*
* \section secVertexImplementation Edge Implementation
* The Global Router CEngine uses a technique based on routing graph and thus relies on another
* CEngine : Nimbus.
*/
/*! \anchor VertexAttributes Attributes
* \name
*/
// \{
/*! \var Graph* Vertex::_routingGraph
* The routingGraph to which current vertex belongs
*
* \Initial by constructor
*/
/*! \var GCell* Vertex::_gcell
* The gcell associated with current vertex
*
* \Initial by constructor
*/
/*! \var Edge* Vertex::_firstEdges[4]
* This array regroups the first edge of each type, it is ordered as follow :
* - _firstEdges[0] = first horizontal edge out
* - _firstEdges[1] = first vertical edge out
* - _firstEdges[2] = first horizontal edge in
* - _firstEdges[3] = first vertical edge in
*
* \Initial empty
*
* \note Not all the firstEdges need to be defined. For example some vertex may only have 2 edges
*/
/*! \var Edge* Vertex::_predecessor
* When global routing one needs to know what was the predecessor vertex, instead of the vertex, the vertex hold the edge between
* the 2 vertexes
*
* \Initial \NULL
*/
/*! \var Point* Vertex::_position
* The position of the vertex
*
* \Initial _gcell->GetCenter()
*/
/*! \var Tuple* Vertex::_tuple
* In Dijkstra's algortihm implementation a priority stack is used to ordered vertexes, the stack contains Tuple and each vertex
* may have an associated Tuple
*
* \Initial \NULL
*/
/*! \var float Vertex::_distance
* In Dijkstra's algorithm implementation each vertex has a distance from source vertex
*
* \Initial (float)(HUGE_VAL)
*/
/*! \var int Vertex::_connexID
* The identification flag for connex component
*
* \Initial \p -1
* \see \ref grpConnexID
*/
/*! \var unsigned Vertex::_netStamp
* The net stamp associated with the current net
*
* \Initial \p 0
* \see \ref grpNetStamp
*/
/*! \var Unit Vertex::_halfWidth
* The half width of the correspoding gcell, it is useful for all graphic parts
*
* \Initial _gcell->GetHalfWidth()
*/
/*! \var Unit Vertex::_halfHeight
* The half height of the corresponding gcell, it is useful for all graphic parts
*
* \Initial _gcell->GetHalfHeight()
*/
// \}
/*! \anchor VertexConstructors Constructors
* \name
*/
// \{
/*! \function static Vertex* Vertex::Create ( GCell* gcell, DisplaySlot* displaySlot, Graph* routingGraph );
* \param gcell the corresponding gcell in the partitionning
* \param displaySlot the GTK displaySlot for vertexes' graphical display
* \param routingGraph the routingGraph to which current vertex belongs
* \return the newly created vertex
* \exception error if the vertex cannot be allocated
*/
// \}
/*! \anchor VertexAccessors Accessors
* \name
*/
// \{
/*! \function GCell* Vertex::GetGCell();
* \Return The corresponding GCell
*/
/*! \function Edge* Vertex::GetHEdgeOut() const;
* \Return The first horizontal edge out : Vertex::_firstEdges[0]
*/
/*! \function Edge* Vertex::GetVEdgeOut() const;
* \Return The first vertical edge out : Vertex::_firstEdges[1]
*/
/*! \function Edge* Vertex::GetHEdgeIn() const;
* \Return The first horizontal edge in : Vertex::_firstEdges[2]
*/
/*! \function Edge* Vertex::GetVEdgeIn() const;
* \Return The first vertical edge in : Vertex::_firstEdges[3]
*/
/*! \function Edges* Vertex::GetAdjacentEdges() const;
* \Return The collection of all edges attached to thecurrent vertex
*/
/*! \function Edge* Vertex::GetPredecessor() const;
* \Return The predecessor edge : Vertex::_predecessor
*/
/*! \function int* Vertex::GetConnexID() const;
* \Return The ConnexID of the vertex : Vertex::_connexID
*/
/*! \function float* Vertex::GetDistance() const;
* \Return The distance from the source vertex : Vertex::_distance
*/
/*! \function unsigned Vertex::GetNetStamp() const;
* \return The netStamp of the vertex : Vertex::_netStamp
* \see \ref grpNetStamp
*/
/*! \function Point* Vertex::GetPosition() const;
* \Return The position of the vertex : Vertex::_position
*/
/*! \function Tuple* Vertex::GetTuple() const;
* \Return The tuple associated with the vertex : Vertex::_tuple
*/
/*! \function Graph* Vertex::GetRoutingGraph() const;
* \Return The routing graph
*/
// \}
/*! \anchor VertexModifiers Modifiers
* \name
*/
// \{
/*! \function void Vertex::SetHEdgeOut ( Edge* edge );
* \param edge is the first horizontal edge out
*/
/*! \function void Vertex::SetVEdgeOut ( Edge* edge );
* \param edge is the first vertical edge out
*/
/*! \function void Vertex::SetHEdgeIn ( Edge* edge );
* \param edge is the first horizontal edge in
*/
/*! \function void Vertex::SetVEdgeIn ( Edge* edge );
* \param edge is the first vertical edge in
*/
/*! \function void Vertex::SetPredecessor ( Edge* edge );
* \param edge is the predecessor of the vertex
*/
/*! \function void Vertex::SetConnexID ( int connexID );
* \param connexID is the connexID of the vertex
* \see \ref grpConnexID
*/
/*! \function void Vertex::SetDistance ( float distance );
* \param distance is the distance from the source vertex (in Dijkstra's algorithm implementation)
*/
/*! \function void Vertex::SetNetStamp ( unsigned netStamp );
* \param netStamp is the netStamp of the edge for the current net
* \see \ref grpNetStamp
*/
/*! \function void Vertex::SetTuple ( Tuple* tuple );
* \param tuple the tuple associated with the vertex
*/
/*! \function void Vertex::AttachToLocalRing ( Component* component );
* \param component the component which has a master hook to add to the local ring
* \exception assert if component does not exist
*/
// \}
/*! \anchor VertexPredicates Predicates
* \name
*/
// \{
/*! \function bool Vertex::IsVerticallyAligned ( Vertex* vertex );
* \return Return \True if current vertex y coordinate is equal to vertex's one, else \False
*/
/*! \function bool Vertex::IsHorizontallyAligned ( Vertex* vertex);
* \return Return \True if current vertex x coordinate is equal to vertex's one, else \False
*/
// \}
}