/* basics.c */
#include "../MSMD.h"
#define MYDEBUG 0
/*--------------------------------------------------------------------*/
/*
-----------------------
constructor
created -- 96feb25, cca
-----------------------
*/
MSMD *
MSMD_new (
void
) {
MSMD *msmd ;
ALLOCATE(msmd, struct _MSMD, 1) ;
MSMD_setDefaultFields(msmd) ;
return(msmd) ; }
/*--------------------------------------------------------------------*/
/*
---------------------------
set the default data fields
created -- 96feb25, cca
---------------------------
*/
void
MSMD_setDefaultFields(
MSMD *msmd
) {
msmd->nvtx = 0 ;
msmd->heap = NULL ;
msmd->incrIP = 0 ;
msmd->baseIP = NULL ;
msmd->freeIP = NULL ;
msmd->vertices = NULL ;
IV_setDefaultFields(&msmd->ivtmpIV) ;
IV_setDefaultFields(&msmd->reachIV) ;
return ; }
/*--------------------------------------------------------------------*/
/*
-----------------------
clear the data fields
created -- 96feb25, cca
-----------------------
*/
void
MSMD_clearData (
MSMD *msmd
) {
IP *ip ;
MSMDvtx *first, *last, *v ;
/*
--------------
check the data
--------------
*/
if ( msmd == NULL ) {
fprintf(stderr, "\n fatal error in MSMD_clearData(%p)"
"\n bad input\n", msmd) ;
exit(-1) ;
}
if ( msmd->heap != NULL ) {
#if MYDEBUG > 0
fprintf(stdout, "\n trying to free the heap") ;
fflush(stdout) ;
#endif
IIheap_free(msmd->heap) ;
}
if ( msmd->vertices != NULL ) {
#if MYDEBUG > 0
fprintf(stdout, "\n trying to free the vertices") ;
fflush(stdout) ;
#endif
first = msmd->vertices ;
last = first + msmd->nvtx - 1 ;
for ( v = first ; v <= last ; v++ ) {
if ( v->status == 'E' && v->adj != NULL ) {
IVfree(v->adj) ;
}
}
FREE(msmd->vertices) ;
}
IV_clearData(&msmd->ivtmpIV) ;
IV_clearData(&msmd->reachIV) ;
while ( (ip = msmd->baseIP) != NULL ) {
msmd->baseIP = ip->next ;
IP_free(ip) ;
}
MSMD_setDefaultFields(msmd) ;
return ; }
/*--------------------------------------------------------------------*/
/*
-----------------------
destructor
created -- 96feb25, cca
-----------------------
*/
void
MSMD_free (
MSMD *msmd
) {
MSMD_clearData(msmd) ;
FREE(msmd) ;
return ; }
/*--------------------------------------------------------------------*/
syntax highlighted by Code2HTML, v. 0.9.1