SVF
mtr.h
Go to the documentation of this file.
1 
59 #ifndef __MTR
60 #define __MTR
61 
62 /*---------------------------------------------------------------------------*/
63 /* Nested includes */
64 /*---------------------------------------------------------------------------*/
65 
66 #ifdef __cplusplus
67 extern "C" {
68 #endif
69 
70 /*---------------------------------------------------------------------------*/
71 /* Constant declarations */
72 /*---------------------------------------------------------------------------*/
73 
74 #ifndef SIZEOF_VOID_P
75 #define SIZEOF_VOID_P 4
76 #endif
77 #ifndef SIZEOF_INT
78 #define SIZEOF_INT 4
79 #endif
80 
81 #if defined(__GNUC__)
82 #define MTR_INLINE __inline__
83 # if (__GNUC__ >2 || __GNUC_MINOR__ >=7)
84 # define MTR_UNUSED __attribute__ ((unused))
85 # else
86 # define MTR_UNUSED
87 # endif
88 #else
89 #define MTR_INLINE
90 #define MTR_UNUSED
91 #endif
92 
93 /* Flag definitions */
94 #define MTR_DEFAULT 0x00000000
95 #define MTR_TERMINAL 0x00000001
96 #define MTR_SOFT 0x00000002
97 #define MTR_FIXED 0x00000004
98 #define MTR_NEWNODE 0x00000008
99 
100 /* MTR_MAXHIGH is defined in such a way that on 32-bit and 64-bit
101 ** machines one can cast a value to (int) without generating a negative
102 ** number.
103 */
104 #if SIZEOF_VOID_P == 8 && SIZEOF_INT == 4
105 #define MTR_MAXHIGH (((MtrHalfWord) ~0) >> 1)
106 #else
107 #define MTR_MAXHIGH ((MtrHalfWord) ~0)
108 #endif
109 
110 
111 /*---------------------------------------------------------------------------*/
112 /* Stucture declarations */
113 /*---------------------------------------------------------------------------*/
114 
115 
116 /*---------------------------------------------------------------------------*/
117 /* Type declarations */
118 /*---------------------------------------------------------------------------*/
119 
120 #if SIZEOF_VOID_P == 8 && SIZEOF_INT == 4
121 typedef unsigned int MtrHalfWord;
122 #else
123 typedef unsigned short MtrHalfWord;
124 #endif
125 
126 typedef struct MtrNode {
127  MtrHalfWord flags;
128  MtrHalfWord low;
129  MtrHalfWord size;
130  MtrHalfWord index;
131  struct MtrNode *parent;
132  struct MtrNode *child;
133  struct MtrNode *elder;
134  struct MtrNode *younger;
135 } MtrNode;
136 
137 
138 /*---------------------------------------------------------------------------*/
139 /* Variable declarations */
140 /*---------------------------------------------------------------------------*/
141 
142 
143 /*---------------------------------------------------------------------------*/
144 /* Macro declarations */
145 /*---------------------------------------------------------------------------*/
146 
147 /* Flag manipulation macros */
148 #define MTR_SET(node, flag) (node->flags |= (flag))
149 #define MTR_RESET(node, flag) (node->flags &= ~ (flag))
150 #define MTR_TEST(node, flag) (node->flags & (flag))
151 
152 
155 /*---------------------------------------------------------------------------*/
156 /* Function prototypes */
157 /*---------------------------------------------------------------------------*/
158 
159 extern MtrNode * Mtr_AllocNode (void);
160 extern void Mtr_DeallocNode (MtrNode *node);
161 extern MtrNode * Mtr_InitTree (void);
162 extern void Mtr_FreeTree (MtrNode *node);
163 extern MtrNode * Mtr_CopyTree (MtrNode *node, int expansion);
165 extern void Mtr_MakeLastChild (MtrNode *parent, MtrNode *child);
168 extern void Mtr_MakeNextSibling (MtrNode *first, MtrNode *second);
169 extern void Mtr_PrintTree (MtrNode *node);
170 extern MtrNode * Mtr_InitGroupTree (int lower, int size);
171 extern MtrNode * Mtr_MakeGroup (MtrNode *root, unsigned int low, unsigned int high, unsigned int flags);
172 extern MtrNode * Mtr_DissolveGroup (MtrNode *group);
173 extern MtrNode * Mtr_FindGroup (MtrNode *root, unsigned int low, unsigned int high);
174 extern int Mtr_SwapGroups (MtrNode *first, MtrNode *second);
175 extern void Mtr_ReorderGroups(MtrNode *treenode, int *permutation);
176 
177 extern void Mtr_PrintGroups (MtrNode *root, int silent);
178  extern int Mtr_PrintGroupedOrder(MtrNode * root, int *invperm, FILE *fp);
179 extern MtrNode * Mtr_ReadGroups (FILE *fp, int nleaves);
180 
183 #ifdef __cplusplus
184 }
185 #endif
186 
187 #endif /* __MTR */
MtrHalfWord flags
Definition: mtr.h:127
unsigned short MtrHalfWord
Definition: mtr.h:123
MtrHalfWord size
Definition: mtr.h:129
void Mtr_PrintTree(MtrNode *node)
Definition: mtrBasic.c:422
void Mtr_MakeLastChild(MtrNode *parent, MtrNode *child)
Definition: mtrBasic.c:299
struct MtrNode MtrNode
void Mtr_FreeTree(MtrNode *node)
Definition: mtrBasic.c:187
void Mtr_MakeNextSibling(MtrNode *first, MtrNode *second)
Definition: mtrBasic.c:394
void Mtr_ReorderGroups(MtrNode *treenode, int *permutation)
Definition: mtrGroup.c:524
struct MtrNode * parent
Definition: mtr.h:131
MtrNode * Mtr_DissolveGroup(MtrNode *group)
Definition: mtrGroup.c:349
struct MtrNode * elder
Definition: mtr.h:133
struct MtrNode * younger
Definition: mtr.h:134
MtrHalfWord index
Definition: mtr.h:130
MtrNode * Mtr_ReadGroups(FILE *fp, int nleaves)
Definition: mtrGroup.c:756
void Mtr_MakeFirstChild(MtrNode *parent, MtrNode *child)
Definition: mtrBasic.c:268
MtrNode * Mtr_AllocNode(void)
Definition: mtrBasic.c:117
MtrHalfWord low
Definition: mtr.h:128
MtrNode * Mtr_CreateFirstChild(MtrNode *parent)
Definition: mtrBasic.c:336
Definition: mtr.h:126
void Mtr_DeallocNode(MtrNode *node)
Definition: mtrBasic.c:139
void Mtr_PrintGroups(MtrNode *root, int silent)
Definition: mtrGroup.c:595
int Mtr_PrintGroupedOrder(MtrNode *root, int *invperm, FILE *fp)
Definition: mtrGroup.c:662
MtrNode * Mtr_InitGroupTree(int lower, int size)
Definition: mtrGroup.c:120
MtrNode * Mtr_InitTree(void)
Definition: mtrBasic.c:160
MtrNode * Mtr_CreateLastChild(MtrNode *parent)
Definition: mtrBasic.c:365
int Mtr_SwapGroups(MtrNode *first, MtrNode *second)
Definition: mtrGroup.c:462
MtrNode * Mtr_MakeGroup(MtrNode *root, unsigned int low, unsigned int high, unsigned int flags)
Definition: mtrGroup.c:156
MtrNode * Mtr_FindGroup(MtrNode *root, unsigned int low, unsigned int high)
Definition: mtrGroup.c:401
MtrNode * Mtr_CopyTree(MtrNode *node, int expansion)
Definition: mtrBasic.c:214
struct MtrNode * child
Definition: mtr.h:132