1 /* basics.c */
2
3 #include "../MSMD.h"
4
5 #define MYDEBUG 0
6
7 /*--------------------------------------------------------------------*/
8 /*
9 -----------------------
10 constructor
11
12 created -- 96feb25, cca
13 -----------------------
14 */
15 MSMD *
MSMD_new(void)16 MSMD_new (
17 void
18 ) {
19 MSMD *msmd ;
20
21 ALLOCATE(msmd, struct _MSMD, 1) ;
22 MSMD_setDefaultFields(msmd) ;
23
24 return(msmd) ; }
25
26 /*--------------------------------------------------------------------*/
27 /*
28 ---------------------------
29 set the default data fields
30
31 created -- 96feb25, cca
32 ---------------------------
33 */
34 void
MSMD_setDefaultFields(MSMD * msmd)35 MSMD_setDefaultFields(
36 MSMD *msmd
37 ) {
38 msmd->nvtx = 0 ;
39 msmd->heap = NULL ;
40 msmd->incrIP = 0 ;
41 msmd->baseIP = NULL ;
42 msmd->freeIP = NULL ;
43 msmd->vertices = NULL ;
44 IV_setDefaultFields(&msmd->ivtmpIV) ;
45 IV_setDefaultFields(&msmd->reachIV) ;
46
47 return ; }
48
49 /*--------------------------------------------------------------------*/
50 /*
51 -----------------------
52 clear the data fields
53
54 created -- 96feb25, cca
55 -----------------------
56 */
57 void
MSMD_clearData(MSMD * msmd)58 MSMD_clearData (
59 MSMD *msmd
60 ) {
61 IP *ip ;
62 MSMDvtx *first, *last, *v ;
63 /*
64 --------------
65 check the data
66 --------------
67 */
68 if ( msmd == NULL ) {
69 fprintf(stderr, "\n fatal error in MSMD_clearData(%p)"
70 "\n bad input\n", msmd) ;
71 exit(-1) ;
72 }
73 if ( msmd->heap != NULL ) {
74 #if MYDEBUG > 0
75 fprintf(stdout, "\n trying to free the heap") ;
76 fflush(stdout) ;
77 #endif
78 IIheap_free(msmd->heap) ;
79 }
80 if ( msmd->vertices != NULL ) {
81 #if MYDEBUG > 0
82 fprintf(stdout, "\n trying to free the vertices") ;
83 fflush(stdout) ;
84 #endif
85 first = msmd->vertices ;
86 last = first + msmd->nvtx - 1 ;
87 for ( v = first ; v <= last ; v++ ) {
88 if ( v->status == 'E' && v->adj != NULL ) {
89 IVfree(v->adj) ;
90 }
91 }
92 FREE(msmd->vertices) ;
93 }
94 IV_clearData(&msmd->ivtmpIV) ;
95 IV_clearData(&msmd->reachIV) ;
96 while ( (ip = msmd->baseIP) != NULL ) {
97 msmd->baseIP = ip->next ;
98 IP_free(ip) ;
99 }
100 MSMD_setDefaultFields(msmd) ;
101
102 return ; }
103
104 /*--------------------------------------------------------------------*/
105 /*
106 -----------------------
107 destructor
108
109 created -- 96feb25, cca
110 -----------------------
111 */
112 void
MSMD_free(MSMD * msmd)113 MSMD_free (
114 MSMD *msmd
115 ) {
116 MSMD_clearData(msmd) ;
117 FREE(msmd) ;
118
119 return ; }
120
121 /*--------------------------------------------------------------------*/
122