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