.RI"\fBRoutingEvent\fP * \fBreschedule\fP (\fBRoutingEventQueue\fP &, unsigned int eventLevel)"
.br
.ti-1c
.RI"void \fBsetMode\fP (unsigned int)"
.br
.ti-1c
.RI"void \fBsetState\fP (unsigned int)"
.br
.ti-1c
.RI"void \fBsetAxisHintFromParent\fP ()"
.br
.ti-1c
.RI"void \fBincInsertState\fP ()"
.br
.ti-1c
.RI"void \fBresetInsertState\fP ()"
.br
.ti-1c
.RI"void \fBsetEventLevel\fP (unsigned int)"
.br
.in-1c
.SS"Static Public Member Functions"
.in+1c
.ti-1c
.RI"static unsigned int \fBgetStage\fP ()"
.br
.ti-1c
.RI"static size_t \fBgetAllocateds\fP ()"
.br
.ti-1c
.RI"static size_t \fBgetProcesseds\fP ()"
.br
.ti-1c
.RI"static void \fBresetProcesseds\fP ()"
.br
.ti-1c
.RI"static void \fBsetStage\fP (unsigned int)"
.br
.ti-1c
.RI"static \fBRoutingEvent\fP * \fBcreate\fP (\fBTrackElement\fP *, unsigned int mode=\fBNegociate\fP)"
.br
.in-1c
.SH"Detailed Description"
.PP
Atomic Placement Request for a \fBTrackSegment\fP\&.
The trackFrees attribute has to be reviewed not sure it's still useful\&.
.PP
Cached key for stable sorting, see \fBRoutingEvent::Key\fP\&.
.SH"Member Enumeration Documentation"
.PP
.SS"enum \fBMode\fP"
The working mode of the router, affect how events are to be handled\&.
.PP
\fBEnumerator\fP
.in+1c
.TP
\fB\fINegociate \fP\fP
This is the normal mode of operation, topological modifications and ripup are enableds\&.
.TP
\fB\fIPack \fP\fP
First post-processing step\&. For each segment, tries to find a more compact position for a segment, but without riping any others\&.
.TP
\fB\fIRepair \fP\fP
Second post-processing step, try to find a suitable location for a segment more aggressively\&.
.SH"Member Function Documentation"
.PP
.SS"unsigned int getStage ()\fC [static]\fP"
\fBReturns:\fP The stage the router is in (see \fBRoutingEvent::Mode\fP)\&.
.PP
Referenced by SegmentAction::doAction(), Manipulator::repackPerpandiculars(), RoutingEvent::reschedule(), RoutingEvent::revalidate(), SegmentFsm::SegmentFsm(), and RoutingEvent::setAxisHintFromParent()\&.
.SS"size_t getAllocateds ()\fC [static]\fP"
\fBReturns:\fP The number of \fBRoutingEvent\fP currently allocateds\&.
.SS"size_t getProcesseds ()\fC [static]\fP"
\fBReturns:\fP The number of \fBRoutingEvent\fP that have been processeds since the last call to \fBRoutingEvent::resetProcesseds()\fP\&.
.PP
Referenced by NegociateWindow::printStatistics(), RoutingEvent::process(), and RoutingEventLoop::update()\&.
.SS"void resetProcesseds ()\fC [static]\fP"
\fBReturns:\fP Reset the number of processeds events\&.
.PP
Referenced by NegociateWindow::run()\&.
.SS"unsigned int setStage (unsigned int mode)\fC [static]\fP"
Sets the router's stage (see \fBRoutingEvent::Mode\fP)\&.
\fIelement\fP The element for which to create the event\&.
.br
\fImode\fP The mode into which this event will be valid\&.
.RE
.PP
\fBRoutingEvent\fP constructor\&.
.PP
Referenced by RoutingEventQueue::add(), and RoutingEventQueue::load()\&.
.SS"\fBRoutingEvent\fP * clone () const"
.PP
\fBReturns:\fP
.RS4
A clone of the event\&.
.RE
.PP
Cloning an event is slightly different from copying it (which is forbidden)\&. There can be multiple events for one \fCelement\fP but only one must be active at a time\&. This is a cheap way of implementing the rescheduling mechanism\&. The original event remains the active one, but it's cloned flag is raised\&. The cloned event is created inactive and with a null \fIeventLevel\fP\&.
.PP
Referenced by RoutingEvent::reschedule()\&.
.SS"void destroy ()"
The destructor\&.
.SS"bool isCloned () const\fC [inline]\fP"
\fBReturns:\fP\fBtrue\fP if this event has been cloned at least once\&.
.SS"bool isValid () const\fC [inline]\fP"
\fBReturns:\fP\fBtrue\fP if the cached informations from the \fIelement\fP are valid (i\&.e\&. the element has not been changed)\&.
.SS"bool isUnimplemented () const"
\fBReturns:\fP\fBtrue\fP if the event has tried to use an unimplemented feature\&.
.PP
Referenced by Manipulator::canRipup(), and RoutingEvent::reschedule()\&.
.SS"bool isProcessed () const\fC [inline]\fP"
\fBReturns:\fP\fBtrue\fP if the event has been processed\&.
.PP
Referenced by RoutingEvent::process(), and RoutingEvent::reschedule()\&.
.SS"bool isDisabled () const\fC [inline]\fP"
\fBReturns:\fP\fBtrue\fP if the event is \fBnot\fP the active one\&. It should be discarted by the algorithm\&.
.PP
Referenced by RoutingEvent::process()\&.
.SS"bool isForcedToHint () const\fC [inline]\fP"
\fBReturns:\fP\fBtrue\fP the \fIelement\fP must be placed exacltly on the given axis hint\&.
.SS"bool isRipedByLocal () const\fC [inline]\fP"
\fBReturns:\fP\fBtrue\fP the \fIelement\fP (global) has been riped up to place a local one\&.
.SS"unsigned int getMode () const\fC [inline]\fP"
\fBReturns:\fP the mode the event must be taken into account to\&.
.SS"bool canMinimize () const\fC [inline]\fP"
\fBReturns:\fP\fBtrue\fP the \fIelement\fP could still be minimized\&.
.PP
Referenced by Manipulator::minimize()\&.
.SS"unsigned int getState () const"
\fBReturns:\fP the mode the router is currently in\&.
\fBReturns:\fP The range of positions for the optimal axis (cached)\&.
.PP
Referenced by SegmentFsm::SegmentFsm()\&.
.SS"unsigned int getPriority () const\fC [inline]\fP"
\fBReturns:\fP The priority of the event, it quantify the degree of freedom of the segment\&. Currently it's computed from the length of the segment and it's slack: \[ priority = (slack(segment)+1.0) \times (length(segment)+1.0) \] A high priority means that the segment will be harder to place thus it will be scheduled first\&. With this function, longer segments will be placed first\&.
.PP
Referenced by RoutingEvent::process()\&.
.SS"unsigned int getTracksNb () const\fC [inline]\fP"
\fBReturns:\fP The number of tracks avalaibles for the segment to be placed\&.
.PP
Referenced by SegmentFsm::SegmentFsm()\&.
.SS"unsigned int getInsertState () const\fC [inline]\fP"
.PP
\fBReturns:\fP
.RS4
The kind of track insertion that will be intended\&. It's a counter whose values have the following meaning:
.IP"\(bu"2
\fB1\fP : normal insert\&.
.IP"\(bu"2
\fB2\fP : shrink the segment to it's minimum before inserting\&.
.IP"\(bu"2
\fB3\fP : attempt to ripup conflicting others before inserting\&.
.PP
.RE
.PP
.PP
Referenced by SegmentFsm::insertInTrack()\&.
.SS"unsigned int getEventLevel () const\fC [inline]\fP"
\fBReturns:\fP The event level of the event, used to tweak the order inside the event queue\&. It differs from the priority in the sense that it isn't a topologicaly based value, but manipulated by the algorithm\&.
.PP
Referenced by RoutingEvent::process()\&.
.SS"void revalidate ()"
Perform an event revalidation\&.
.PP
Referenced by SegmentFsm::SegmentFsm(), and RoutingEvent::updateKey()\&.
.SS"void updateKey ()\fC [inline]\fP"
Update the key with the new values from the event, the key \fImust\fP not be inserted in the queue when this method is called\&.
First, check if there is no looping, if any, do not process the event but dicard it (marked as unimplemented)\&.
.IP"\(bu"2
Second, attempt to place the associated segment\&. Pass it to the relevant function, according to the router's mode (\fC_processNegociate()\fP, \fCprocessPack()\fP or \fC_processRepair()\fP )\&. Once processed, the event is added to both \fChistory\fP (for the record) and \fCloop\fP to check if we are not looping\&.
Change the associated \fCsegment\fP\&. Used only by \fBTrackSegment::swapTrack()\fP\&.
.PP
Referenced by TrackSegment::swapTrack()\&.
.SS"\fBRoutingEvent\fP * reschedule (\fBRoutingEventQueue\fP & queue, unsigned int eventLevel)"
.PP
\fBReturns:\fP
.RS4
The newly reinserted event\&. Depending on the cases it could be itself\&.
.RE
.PP
Insert or reinsert an event in the scheduler\&. The \fCeventLevel\fP parameter only allows to increase the level (if it is less than the current level of the event, it will be ignored)\&.
.PP
\fBCloning Management\&.\fP As an event could be cloned, if we try to re-insert a disabled original, we must first lookup the currently cloned active event\&. This is done through the associated \fCsegment\fP which must always be associated with the active event (if any)\&.
.PP
\fBUnimplemented Protection\&.\fP If the unimplemented flag is set the reschedule is cancelled (\fCNULL\fP is returned)\&.
.PP
\fBUnprocessed Event\&.\fP The event is still in queue, waiting to be processed, then just repush it in the queue with it's new level\&.
.PP
\fBProcessed Event\&.\fP Clone the already processed one, activate it and push it on the queue\&.
.PP
\fBRouter's Mode\&.\fP The mode is also updated\&.
.PP
Referenced by SegmentAction::doAction(), and RoutingEvent::reschedule()\&.
.SS"void setMode (unsigned int mode)"
Set the mode in which the event must be processed (see \fBRoutingEvent::Mode\fP)\&.
.PP
Referenced by SegmentAction::doAction(), and RoutingEvent::reschedule()\&.
.SS"void setState (unsigned int state)"
Proxy mutator for \fBDataNegociate::setState()\fP\&.
.PP
Referenced by RoutingEvent::process()\&.
.SS"void setAxisHintFromParent ()"
Sets the axis hint from it's parent segment\&. The parentage is found through the \fBTrackSegment\fP parentage\&.