00001 #include "misc.h"
00002 #include "timerange.h"
00003
00004 #ifndef HOST_INFO_H
00005 #define HOST_INFO_H
00006 #include "nodes.h"
00007
00008 class CHostInfo {
00009 CHostInfo * Next;
00010 CCDGNode * Node;
00011 long PaddingNeeded;
00012 CCDGNode * NodeToPad;
00013 POS_TYPE GuestPos;
00014
00015
00016 bool IsLoopTx, LoopIsOpen;
00017 float Iteration;
00018 LOOP_TX_TYPE Tx;
00019 CHostInfo * Children, * Parent;
00020 public:
00021 CHostInfo() { Next = NULL; Node = NULL;
00022 GuestPos = POS_UNINIT; Tx = LTX_UNINIT; Children = Parent = NULL;
00023 IsLoopTx = LoopIsOpen = FALSE; Iteration = INVALID; };
00024 CHostInfo(CCDGNode * node, bool is_loop_tx, POS_TYPE pos,
00025 long padding, CCDGNode * pad_node,
00026 CHostInfo * parent=NULL);
00027 CHostInfo * Add_Node(CCDGNode * node, bool is_loop_tx,
00028 POS_TYPE pos, long padding,
00029 CCDGNode * pad_node);
00030 CHostInfo * Get_Next() { return Next; };
00031 void Set_Next(CHostInfo * n) { Next = n; };
00032 CCDGNode * Get_Node() { return Node; };
00033 CHostInfo * Get_Last();
00034
00035
00036 CHostInfo * Get_Children() { return Children; };
00037 CHostInfo * Add_Child(CCDGNode * host, bool is_loop_tx, POS_TYPE pos);
00038
00039
00040
00041
00042 bool Is_Nodeless() { return !Node; };
00043 void Set_Node(CCDGNode * node) {
00044
00045 Node = node; };
00046 void Set_GuestPos(POS_TYPE p) { GuestPos = p; };
00047 POS_TYPE Get_GuestPos() { return GuestPos; };
00048
00049 LOOP_TX_TYPE Get_Tx() { return Tx; };
00050 float Get_Iteration() { return Iteration; };
00051 void Set_Iteration(float i) { Iteration = i; };
00052
00053 void Do_Current_Padding();
00054 void Set_Pad_Info(long pad_cy, CCDGNode * pad_node);
00055
00056 bool Get_LoopIsOpen() { return LoopIsOpen; };
00057 void Set_LoopIsOpen(bool v) { LoopIsOpen = v; };
00058 bool Get_IsLoopTx() { return IsLoopTx; };
00059
00060 void Set_Loop_Info(float it, LOOP_TX_TYPE tx);
00061 void Do_Loop_Tx();
00062 CPred * Create_Guard_Nodes(CGuestInfo * g_int_info );
00063 void Set_to_LoopTransformed_Version_of_Node(LOOP_TX_TYPE ltx, POS_TYPE pos);
00064 void Create_Guarded_Loop(CGuestInfo * guest_loop);
00065 CCDGNode * Adjust_Host_Node(CGuestInfo * guest);
00066 void Output_Debug(bool do_all, int indent, ostream &stream = cout );
00067 };
00068
00069 class CLTXList {
00070 CHostInfo * LTx;
00071 CLTXList * Next;
00072 public:
00073 CLTXList() { LTx = NULL; Next = NULL; };
00074 CLTXList(CHostInfo * ltx) { LTx = ltx; Next = NULL; };
00075 CLTXList * Add_Node(CHostInfo * ltx);
00076 CLTXList * Get_Next() { return Next; };
00077 CHostInfo * Get_LTx() { return LTx; };
00078 void Output_Debug();
00079 };
00080 #endif
00081
00082
00083
00084
00085
00086
00087