# Kite - Detailed Router

Manipulator.h
1 // -*- C++ -*-
2 //
3 // This file is part of the Coriolis Software.
4 // Copyright (c) UPMC 2008-2018, All Rights Reserved
5 //
6 // +-----------------------------------------------------------------+
7 // | C O R I O L I S |
8 // | K i t e - D e t a i l e d R o u t e r |
9 // | |
10 // | Author : Jean-Paul CHAPUT |
11 // | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
12 // | =============================================================== |
13 // | C++ Header : "./kite/Manipulator.h" |
14 // +-----------------------------------------------------------------+
15
16
17 #ifndef KITE_MANIPULATOR_H
18 #define KITE_MANIPULATOR_H
19
20 #include "hurricane/DbU.h"
21 #include "katabatic/Constants.h"
22
23
24 namespace Kite {
25
26 using Hurricane::DbU;
27 using Katabatic::KbNoFlags;
28
29 class TrackElement;
30 class DataNegociate;
31 class RoutingEvent;
32 class SegmentFsm;
33
34
35 // -------------------------------------------------------------------
36 // Class Declaration : "::Manipulator".
37
38 class Manipulator {
39 public:
40 enum FunctionFlag { ToRipupLimit = 0x0001
41 , AllowExpand = 0x0002
42 , NoExpand = 0x0004
43 , PerpandicularsFirst = 0x0008
44 , ToMoveUp = 0x0010
45 , AllowLocalMoveUp = 0x0020
46 , AllowTerminalMoveUp = 0x0040
47 , AllowShortPivotUp = 0x0080
48 , NoDoglegReuse = 0x0100
49 , LeftAxisHint = 0x0200
50 , RightAxisHint = 0x0400
51 , NotOnLastRipup = 0x0800
52 };
53 public:
54 Manipulator ( TrackElement*, SegmentFsm& );
55 ~Manipulator ();
56 inline TrackElement* getSegment () const;
57 inline DataNegociate* getData () const;
58 inline RoutingEvent* getEvent () const;
59 inline const Layer* getLayer () const;
60 inline DbU::Unit getPitch () const;
61 inline DbU::Unit getPPitch () const;
62 bool canRipup ( unsigned int flags=0 ) const;
63 bool isCaged ( DbU::Unit ) const;
64 bool ripup ( unsigned int type, DbU::Unit axisHint=0 );
65 bool ripupPerpandiculars ( unsigned int flags=0 );
66 void repackPerpandiculars ();
67 void reprocessPerpandiculars ();
68 bool ripple ();
69 bool minimize ();
70 bool slacken ( unsigned int flags=KbNoFlags );
71 bool pivotUp ();
72 bool pivotDown ();
73 bool moveUp ( unsigned int flags=0 );
74 bool makeDogleg ();
75 bool makeDogleg ( DbU::Unit );
76 bool makeDogleg ( Interval );
77 bool relax ( Interval, unsigned int flags=AllowExpand );
78 bool insertInTrack ( size_t );
79 bool shrinkToTrack ( size_t
80 , unsigned int flags=0
81 , DbU::Unit leftAxisHint=0
82 , DbU::Unit rightAxisHint=0
83 );
84 bool forceToTrack ( size_t );
85 bool forceOverLocals ();
86 private:
87 TrackElement* _segment;
88 DataNegociate* _data;
89 RoutingEvent* _event;
90 SegmentFsm& _fsm;
91 };
92
93
94 inline TrackElement* Manipulator::getSegment () const { return _segment; }
95 inline DataNegociate* Manipulator::getData () const { return _data; }
96 inline RoutingEvent* Manipulator::getEvent () const { return _event; }
97 inline const Layer* Manipulator::getLayer () const { return _segment->getLayer(); }
98 inline DbU::Unit Manipulator::getPitch () const { return _segment->getPitch(); }
99 inline DbU::Unit Manipulator::getPPitch () const { return _segment->getPPitch(); }
100
101
102 } // Kite namespace.
103
104 #endif // KITE_MANIPULATOR_H
Kite::RoutingEvent
Atomic Placement Request for a TrackSegment.
Definition: RoutingEvent.h:55
Kite::Manipulator::makeDogleg
bool makeDogleg()
Definition: Manipulator.cpp:1104
Kite::Manipulator::canRipup
bool canRipup(unsigned int flags=0) const
Definition: Manipulator.cpp:109
Kite::Manipulator::Manipulator
Manipulator(TrackElement *, SegmentFsm &)
Definition: Manipulator.cpp:89
Kite::Manipulator::slacken
bool slacken(unsigned int flags=KbNoFlags)
Definition: Manipulator.cpp:987
Kite::Manipulator::AllowLocalMoveUp
Definition: Manipulator.h:45
Kite::Manipulator::NotOnLastRipup
Definition: Manipulator.h:51
Kite::Manipulator::forceToTrack
bool forceToTrack(size_t)
Definition: Manipulator.cpp:794
Kite::Manipulator::NoExpand
Definition: Manipulator.h:42
Kite::Manipulator::getData
DataNegociate * getData() const
Definition: Manipulator.h:95
Kite::SegmentFsm
Pseudo-decorator to process a RoutingEvent.
Definition: SegmentFsm.h:89
Kite::Manipulator::AllowExpand
Definition: Manipulator.h:41
Kite::Manipulator::insertInTrack
bool insertInTrack(size_t)
Definition: Manipulator.cpp:623
Kite::Manipulator::ToMoveUp
Definition: Manipulator.h:44
Kite::Manipulator::ToRipupLimit
Definition: Manipulator.h:40
Kite::Manipulator::relax
bool relax(Interval, unsigned int flags=AllowExpand)
Definition: Manipulator.cpp:272
Hurricane::DbU::Unit
std::int64_t Unit
Kite::Manipulator::LeftAxisHint
Definition: Manipulator.h:49
Kite::Manipulator::pivotDown
bool pivotDown()
Definition: Manipulator.cpp:1065
Kite::TrackElement::getLayer
virtual const Layer * getLayer() const =0
Hurricane::Interval
Kite::Manipulator::isCaged
bool isCaged(DbU::Unit) const
Definition: Manipulator.cpp:123
Kite::Manipulator::FunctionFlag
FunctionFlag
Definition: Manipulator.h:40
Kite::Manipulator::ripup
bool ripup(unsigned int type, DbU::Unit axisHint=0)
Definition: Manipulator.cpp:144
Kite::Manipulator::RightAxisHint
Definition: Manipulator.h:50
Kite::Manipulator::PerpandicularsFirst
Definition: Manipulator.h:43
Kite::Manipulator::getSegment
TrackElement * getSegment() const
Definition: Manipulator.h:94
Kite::Manipulator::repackPerpandiculars
void repackPerpandiculars()
Definition: Manipulator.cpp:1389
Kite::Manipulator::shrinkToTrack
bool shrinkToTrack(size_t, unsigned int flags=0, DbU::Unit leftAxisHint=0, DbU::Unit rightAxisHint=0)
Definition: Manipulator.cpp:855
Hurricane::DbU
Kite::Manipulator::minimize
bool minimize()
Definition: Manipulator.cpp:1201
Hurricane::Layer
Kite::TrackElement
Abstract Class for all Elements inserted inside a Track.
Definition: TrackElement.h:100
Kite::Manipulator::NoDoglegReuse
Definition: Manipulator.h:48
Kite::Manipulator::ripple
bool ripple()
Definition: Manipulator.cpp:998
Kite::Manipulator::AllowShortPivotUp
Definition: Manipulator.h:47
Kite::Manipulator::pivotUp
bool pivotUp()
Definition: Manipulator.cpp:1050
Kite
The namespace dedicated to Kite.
Definition: Constants.h:22
Kite::Manipulator::getEvent
RoutingEvent * getEvent() const
Definition: Manipulator.h:96
Kite::DataNegociate
Algorimthmic datas associated the TrackSegment.
Definition: DataNegociate.h:50
Kite::Manipulator::ripupPerpandiculars
bool ripupPerpandiculars(unsigned int flags=0)
Definition: Manipulator.cpp:158
Kite::Manipulator::moveUp
bool moveUp(unsigned int flags=0)
Definition: Manipulator.cpp:1078
Kite::Manipulator
Handle TrackElement ripup & topological modifications.
Definition: Manipulator.h:38
Kite::Manipulator::forceOverLocals
bool forceOverLocals()
Definition: Manipulator.cpp:925
Kite::Manipulator::AllowTerminalMoveUp
Definition: Manipulator.h:46