Store request for an event to be generated on a \fBTrackElement\fP\&.
When an event on a \fBKite::TrackElement\fP is being processed (with the \fBSegmentFsm\fP helper), it may generate events on \fBTrackElement\fP already placed and belonging either to the same net or other ones\&. Those events are not generated and queued immediatly but instead \fBSegmentAction\fP, requesting the event generation are created and stored into a simple vector in \fBSegmentFsm\fP\&. The last operation of the \fBSegmentFsm\fP object is to call the \fBSegmentAction::doAction()\fP method on all the action to actually generate and queue the events\&.
.SH"Member Enumeration Documentation"
.PP
.SS"enum \fBType\fP"
Indicates the kind of action to be performed on the segment\&. In the following \fBflags\fP and \fBmasks\fP descriptions, we uses the term \fIreference segment\fP for the \fBTrackElement\fP which is associated with the currently processed \fBRoutingEvent\fP (also referenced in \fBSegmentFsm\fP)\&.
.PP
Here is the list of the availables actions that can be performed when (re)scheduling a \fBRoutingEvent\fP\&. It is here that we uses the \fBRoutingEvent\fP level feature to perform a local reordering of the top of the queue\&. Reordering is used to allows perpandiculars to be routed \fIbefore\fP the reference segment (instead of after) or \fIother\fP segments in conflict\&.
.PP
.IP"\(bu"2
\fBSegmentAction::SelfInsert\fP
.br
\fBAction:\fP The reference segment is to be inserted in a \fBTrack\fP (placed)\&.
.br
\fBEvent Level:\fP Unchanged\&.
.IP"\(bu"2
\fBSegmentAction::SelfRipup\fP
.br
\fBAction:\fP The reference segment is to be ripped up\&.
.br
\fBEvent Level:\fP Unchanged\&.
.IP"\(bu"2
\fBSegmentAction::SelfRipupPerpand\fP
.br
\fBAction:\fP Ripup a segment which is a perpandicular to the reference segment\&. Ordering considerations: this perpandicular will be put back into the \fBRoutingEvent\fP queue with a lower level (priority) than the reference segment, so it will be processed again \fIafter\fP the reference segment\&.
.br
\fBEvent Level:\fP Unchanged\&.
.IP"\(bu"2
\fBSegmentAction::SelfRipupPerpandWithAxisHint\fP
.br
\fBAction:\fP Ripup a segment which is a perpandicular to the reference segment, supplies an axis hint and put it back into the \fBRoutingEvent\fP queue so that it will be processed \fIbefore\fP the reference segment\&.
.br
\fBEvent Level:\fP Increased to \fBSegmentAction::EventLevel4\fP\&.
.IP"\(bu"2
\fBSegmentAction::OtherRipup\fP
.br
\fBAction:\fP Ripping up a segment from another net and in the same direction as the reference segment\&.
\fBAction:\fP Ripping up a segment from another net and in perpandicular direction\&. The level is elevated so it's priority is greater than the reference segment this it will be reprocessed first\&. An axis hint is also supplied in order to make room for the reference segment\&.
.br
\fBEvent Level:\fP Increased to \fBSegmentAction::EventLevel3\fP\&.
.IP"\(bu"2
\fBSegmentAction::OtherRipupPerpandAndPacking\fP
.br
\fBAction:\fP Ripping up a segment from another net and in perpandicular direction\&. The level is elevated so it's priority is greater than the reference segment this it will be reprocessed first\&. The generated event is in packing mode only\&.
.br
\fBEvent Level:\fP Increased to \fBSegmentAction::EventLevel4\fP\&.
.PP
.PP
\fBEnumerator\fP
.in+1c
.TP
\fB\fISelf \fP\fP
\fB[Flag]\fP The segment associated to the action is the reference segment \fIor segments from the same net\fP\&.
.TP
\fB\fIOther \fP\fP
\fB[Flag]\fP The segment associated to the action is \fBnot\fP from the same net as the reference segment\&.
.TP
\fB\fIPerpandicular \fP\fP
\fB[Flag]\fP The action concern a perpandicular to the reference segment\&.
.TP
\fB\fIInsert \fP\fP
\fB[Flag]\fP Request that the segment is to be inserted in the given track\&. It is the task of \fBSegmentFsm\fP to determine that there is sufficent space to do so\&.
.TP
\fB\fIRipup \fP\fP
\fB[Flag]\fP Request that the segment is to be ripped up\&.
.TP
\fB\fIRipedByLocal \fP\fP
\fB[Flag]\fP Indicate that the segment has been ripped up by a local one\&.
.TP
\fB\fIResetRipup \fP\fP
\fB[Flag]\fP The ripup count is to be reset\&.
.TP
\fB\fIToRipupLimit \fP\fP
\fB[Flag]\fP The ripup count is directly increased to the ripup limit, triggering a state change the next time the segment will be processed\&.
.TP
\fB\fIAxisHint \fP\fP
\fB[Flag]\fP An axis hint has been supplied, and is to be passed to the generated \fBRoutingEvent\fP\&.
.TP
\fB\fIPackingMode \fP\fP
\fB[Flag]\fP Whether the \fBRoutingEvent\fP should be processed in \fIpacking\fP mode or \fInegociated\fP mode (transmitted to the \fBRoutingEvent\fP)\&.
.TP
\fB\fIToState \fP\fP
\fB[Flag]\fP Force the change of state of the \fBRoutingEvent\fP (i\&.e\&. \fBDataNegociate\fP)\&. Normally the state change is done through the increase of the ripup count in \fBDataNegociate\fP\&.
.TP
\fB\fIEventLevel1 \fP\fP
\fB[Flag]\fP Increase the level to \fIat least\fP\fB1\fP\&.
.TP
\fB\fIEventLevel2 \fP\fP
\fB[Flag]\fP Increase the level to \fIat least\fP\fB2\fP\&.
.TP
\fB\fIEventLevel3 \fP\fP
\fB[Flag]\fP Increase the level to \fIat least\fP\fB3\fP\&.
.TP
\fB\fIEventLevel4 \fP\fP
\fB[Flag]\fP Increase the level to \fIat least\fP\fB4\fP\&.
.TP
\fB\fIEventLevel5 \fP\fP
\fB[Flag]\fP Increase the level to \fIat least\fP\fB5\fP\&.
.TP
\fB\fISelfInsert \fP\fP
\fB[Mask]\fP, see \fBSegmentAction::Type\fP\&.
.TP
\fB\fISelfRipup \fP\fP
\fB[Mask]\fP, see \fBSegmentAction::Type\fP\&.
.TP
\fB\fISelfRipupPerpand \fP\fP
\fB[Mask]\fP, see \fBSegmentAction::Type\fP\&.
.TP
\fB\fISelfRipupPerpandWithAxisHint \fP\fP
\fB[Mask]\fP, see \fBSegmentAction::Type\fP\&.
.TP
\fB\fIOtherRipup \fP\fP
\fB[Mask]\fP, see \fBSegmentAction::Type\fP\&.
.TP
\fB\fIOtherRipupPerpandAndPushAside \fP\fP
\fB[Mask]\fP, see \fBSegmentAction::Type\fP\&.
.TP
\fB\fIOtherRipupPerpandAndPacking \fP\fP
\fB[Mask]\fP, see \fBSegmentAction::Type\fP\&.
.SH"Constructor & Destructor Documentation"
.PP
.SS"\fBSegmentAction\fP (\fBTrackElement\fP * segment, unsigned int type, \fBDbU::Unit\fP axisHint = \fC0\fP, unsigned int toState = \fC0\fP)"
.PP
\fBParameters:\fP
.RS4
\fIsegment\fP On what the action is to be performed\&.
.br
\fItype\fP Defines the type of action, see \fBSegmentAction::Type\fP\&.
.br
\fIaxisHint\fP Specifies a preferred axis\&.
.br
\fItoState\fP The \fBDataNegociate::SlackState\fP into which the segment is to be set\&.
The axis preferred position to be transmitted to the generated event\&. The transmition will be effective \fIonly\fP if the SegmentAction::Type::AxisHint flag is set\&.
.SS"unsigned int setFlag (unsigned int flags)\fC [inline]\fP"
Allow to change the action type by indivually setting up the flags\&.