// -*- C++ -*-
namespace Katabatic {
/*! \class BaseGrid
* \brief Grid Common Skeleton (\b API).
*
* \attention Provide a non-template common skeleton for the Grid class
* template. Specifically manage the axis graduation, the geometric
* search functions and the indexes computation (assuming a linear
* storage of the grid elements).
*
*
* \section BaseGridImplementation Grid Implementation Details
*
* The matrix of GCell is stored in a linear vector of GCell's pointer,
* row by row. The Grid class provide convenient functions to
* convert a linear index into row / column and the other way around.
*/
/*! \function unsigned int BaseGrid::getColumns () const;
* \return The number of columns of the GCell matrix.
*/
/*! \function unsigned int BaseGrid::getRows () const;
* \return The number of rows of the GCell matrix.
*/
/*! \function unsigned int BaseGrid::getRawSize () const;
* \return The size of the vector holding the GCell matrix.
*/
/*! \function unsigned int BaseGrid::getIndex ( unsigned int column, unsigned int row ) const;
* \param column The GCell's column.
* \param row The GCell's row.
* \return The linear index of the GCell at (column,row)
.
*/
/*! \function unsigned int BaseGrid::getRow ( unsigned int index ) const;
* \param index A linear index.
* \return extract the row number from the linear index.
*/
/*! \function unsigned int BaseGrid::getColumn ( unsigned int index ) const;
* \param index A linear index.
* \return extract the column number from the linear index.
*/
/*! \class Grid
* \brief Routing Grid (\b API).
*
* \attention This class is can only be allocated through a Katabatic
* \c ToolEngine thus Constructors/Destructors are protecteds.
*
* \section GridImplementation Grid Implementation Details
*
* The matrix of GCell is stored in a linear vector of GCell's pointer,
* row by row. The Grid class provide convenient functions to
* convert a linear index into row / column and the other way around.
*/
/*! \function GCell* Grid::getGCell ( const Point p1, const Point p2 ) const;
* \param p1 First point.
* \param p2 Second point.
* \return Returns the GCell enclosing both points.
*
* When we build a Net's routing wires, and the Net span more than one
* GCell, we can always find the appropriate GCell through the
* \c Hook, \c GCell and GCell association.
*
* Problem arises for a Net fully contained inside one GCell, in this
* case there is no SplitterContact telling us where we are. We have
* to guess the GCell by only using RoutingPad's positions. And unfortunatly
* \c RoutingPad can be on the edge of one GCell so we cannot tell if
* it belongs to the left or the right. To solve this problem we guess
* the GCell from two (different) \c RoutingPad positions.
*
* Note that if there is only one \c RoutingPad, there is no problem at
* all : we are dealing with a one \c Plug \c Net...
*
* If points do not belongs to one GCell (too far appart), strange
* results may occurs.
*/
/*! \function GCell* Grid::getGCell ( unsigned int index ) const;
* \param index A linear index.
* \return The GCell at the given index.
*
* Be aware that no check is performed if the index is out of bound,
* this may leads to catastrophic results.
*/
/*! \function vector Grid::getGCellVector ();
* \return The \vector holding all GCells.
*/
/*! \function GCells Grid::getGCellsColumn ( unsigned int column, unsigned int rowStart, unsigned int rowStop );
* \param column The column index.
* \param rowStart The start row index inside the column.
* \param rowStop The stop row index inside the column.
* \return The \c Collection of a partial row.
*/
/*! \function GCells Grid::getGCellsRow ( unsigned int row, unsigned int columnStart, unsigned int columnStop );
* \param row The row index.
* \param columnStart The start column index inside the row.
* \param columnStop The stop column index inside the row.
* \return The \c Collection of a partial column.
*/
}