/* IO.c */
#include "../DSTree.h"
static const char *suffixb = ".dstreeb" ;
static const char *suffixf = ".dstreef" ;
/*--------------------------------------------------------------------*/
/*
--------------------------------------------------
purpose -- to read in an DSTree object from a file
input --
fn -- filename, must be *.dstreeb or *.dstreef
return value -- 1 if success, 0 if failure
created -- 96mar10, cca
--------------------------------------------------
*/
int
DSTree_readFromFile (
DSTree *dstree,
char *fn
) {
FILE *fp ;
int fnlength, rc, sulength ;
/*
---------------
check the input
---------------
*/
if ( dstree == NULL || fn == NULL ) {
fprintf(stderr, "\n error in DSTree_readFromFile(%p,%s)"
"\n bad input\n", dstree, fn) ;
return(0) ;
}
/*
-------------
read the file
-------------
*/
fnlength = strlen(fn) ;
sulength = strlen(suffixb) ;
if ( fnlength > sulength ) {
if ( strcmp(&fn[fnlength-sulength], suffixb) == 0 ) {
if ( (fp = fopen(fn, "rb")) == NULL ) {
fprintf(stderr, "\n error in DSTree_readFromFile(%p,%s)"
"\n unable to open file %s", dstree, fn, fn) ;
rc = 0 ;
} else {
rc = DSTree_readFromBinaryFile(dstree, fp) ;
fclose(fp) ;
}
} else if ( strcmp(&fn[fnlength-sulength], suffixf) == 0 ) {
if ( (fp = fopen(fn, "r")) == NULL ) {
fprintf(stderr, "\n error in DSTree_readFromFile(%p,%s)"
"\n unable to open file %s", dstree, fn, fn) ;
rc = 0 ;
} else {
rc = DSTree_readFromFormattedFile(dstree, fp) ;
fclose(fp) ;
}
} else {
fprintf(stderr, "\n error in DSTree_readFromFile(%p,%s)"
"\n bad DSTree file name %s,"
"\n must end in %s (binary) or %s (formatted)\n",
dstree, fn, fn, suffixb, suffixf) ;
rc = 0 ;
}
} else {
fprintf(stderr, "\n error in DSTree_readFromFile(%p,%s)"
"\n bad DSTree file name %s,"
"\n must end in %s (binary) or %s (formatted)\n",
dstree, fn, fn, suffixb, suffixf) ;
rc = 0 ;
}
return(rc) ; }
/*--------------------------------------------------------------------*/
/*
---------------------------------------------------------
purpose -- to read an DSTree object from a formatted file
return value -- 1 if success, 0 if failure
created -- 96mar10, cca
---------------------------------------------------------
*/
int
DSTree_readFromFormattedFile (
DSTree *dstree,
FILE *fp
) {
IV *mapIV ;
Tree *tree ;
/*
---------------
check the input
---------------
*/
if ( dstree == NULL || fp == NULL ) {
fprintf(stderr, "\n error in DSTree_readFromFormattedFile(%p,%p)"
"\n bad input\n", dstree, fp) ;
return(0) ;
}
/*
---------------------
clear the data fields
---------------------
*/
DSTree_clearData(dstree) ;
/*
-----------------------
read in the Tree object
-----------------------
*/
tree = Tree_new() ;
Tree_readFromFormattedFile(tree, fp) ;
/*
---------------------
read in the IV object
---------------------
*/
mapIV = IV_new() ;
IV_readFromFormattedFile(mapIV, fp) ;
/*
----------------------------
initialize the DSTree object
----------------------------
*/
DSTree_init2(dstree, tree, mapIV) ;
return(1) ; }
/*--------------------------------------------------------------------*/
/*
------------------------------------------------------
purpose -- to read an DSTree object from a binary file
return value -- 1 if success, 0 if failure
created -- 96mar10, cca
------------------------------------------------------
*/
int
DSTree_readFromBinaryFile (
DSTree *dstree,
FILE *fp
) {
IV *mapIV ;
Tree *tree ;
/*
---------------
check the input
---------------
*/
if ( dstree == NULL || fp == NULL ) {
fprintf(stderr, "\n fatal error in DSTree_readFromBinaryFile(%p,%p)"
"\n bad input\n", dstree, fp) ;
return(0) ;
}
/*
---------------------
clear the data fields
---------------------
*/
DSTree_clearData(dstree) ;
/*
-----------------------
read in the Tree object
-----------------------
*/
tree = Tree_new() ;
Tree_readFromBinaryFile(tree, fp) ;
/*
---------------------
read in the IV object
---------------------
*/
mapIV = IV_new() ;
IV_readFromBinaryFile(mapIV, fp) ;
/*
----------------------------
initialize the DSTree object
----------------------------
*/
DSTree_init2(dstree, tree, mapIV) ;
return(1) ; }
/*--------------------------------------------------------------------*/
/*
----------------------------------------------
purpose -- to write an DSTree object to a file
input --
fn -- filename
*.dstreeb -- binary
*.dstreef -- formatted
anything else -- for human eye
return value -- 1 if success, 0 otherwise
created -- 96mar10, cca
----------------------------------------------
*/
int
DSTree_writeToFile (
DSTree *dstree,
char *fn
) {
FILE *fp ;
int fnlength, rc, sulength ;
/*
---------------
check the input
---------------
*/
if ( dstree == NULL || fn == NULL ) {
fprintf(stderr, "\n fatal error in DSTree_writeToFile(%p,%s)"
"\n bad input\n", dstree, fn) ;
}
/*
------------------
write out the file
------------------
*/
fnlength = strlen(fn) ;
sulength = strlen(suffixb) ;
if ( fnlength > sulength ) {
if ( strcmp(&fn[fnlength-sulength], suffixb) == 0 ) {
if ( (fp = fopen(fn, "wb")) == NULL ) {
fprintf(stderr, "\n error in DSTree_writeToFile(%p,%s)"
"\n unable to open file %s", dstree, fn, fn) ;
rc = 0 ;
} else {
rc = DSTree_writeToBinaryFile(dstree, fp) ;
fclose(fp) ;
}
} else if ( strcmp(&fn[fnlength-sulength], suffixf) == 0 ) {
if ( (fp = fopen(fn, "w")) == NULL ) {
fprintf(stderr, "\n error in DSTree_writeToFile(%p,%s)"
"\n unable to open file %s", dstree, fn, fn) ;
rc = 0 ;
} else {
rc = DSTree_writeToFormattedFile(dstree, fp) ;
fclose(fp) ;
}
} else {
if ( (fp = fopen(fn, "a")) == NULL ) {
fprintf(stderr, "\n error in DSTree_writeToFile(%p,%s)"
"\n unable to open file %s", dstree, fn, fn) ;
rc = 0 ;
} else {
rc = DSTree_writeForHumanEye(dstree, fp) ;
fclose(fp) ;
}
}
} else {
if ( (fp = fopen(fn, "a")) == NULL ) {
fprintf(stderr, "\n error in DSTree_writeToFile(%p,%s)"
"\n unable to open file %s", dstree, fn, fn) ;
rc = 0 ;
} else {
rc = DSTree_writeForHumanEye(dstree, fp) ;
fclose(fp) ;
}
}
return(rc) ; }
/*--------------------------------------------------------------------*/
/*
--------------------------------------------------------
purpose -- to write an DSTree object to a formatted file
return value -- 1 if success, 0 otherwise
created -- 96mar10, cca
--------------------------------------------------------
*/
int
DSTree_writeToFormattedFile (
DSTree *dstree,
FILE *fp
) {
int rc ;
/*
---------------
check the input
---------------
*/
if ( dstree == NULL || fp == NULL || dstree->tree == NULL ) {
fprintf(stderr,
"\n fatal error in DSTree_writeToFormattedFile(%p,%p)"
"\n bad input\n", dstree, fp) ;
exit(-1) ;
}
/*
---------------------------------
write the Tree object to the file
---------------------------------
*/
rc = Tree_writeToFormattedFile(dstree->tree, fp) ;
if ( rc < 0 ) {
fprintf(stderr,
"\n fatal error in DSTree_writeToFormattedFile(%p,%p)"
"\n rc = %d, return from writing Tree to file\n",
dstree, fp, rc) ;
return(0) ;
}
/*
-------------------------------
write the IV object to the file
-------------------------------
*/
rc = IV_writeToFormattedFile(dstree->mapIV, fp) ;
if ( rc < 0 ) {
fprintf(stderr,
"\n fatal error in DSTree_writeToFormattedFile(%p,%p)"
"\n rc = %d, return from writing IV to file\n",
dstree, fp, rc) ;
return(0) ;
}
return(1) ; }
/*--------------------------------------------------------------------*/
/*
-----------------------------------------------------
purpose -- to write an DSTree object to a binary file
return value -- 1 if success, 0 otherwise
created -- 96mar10, cca
-----------------------------------------------------
*/
int
DSTree_writeToBinaryFile (
DSTree *dstree,
FILE *fp
) {
int rc ;
/*
---------------
check the input
---------------
*/
if ( dstree == NULL || fp == NULL || dstree->tree == NULL ) {
fprintf(stderr, "\n fatal error in DSTree_writeToBinaryFile(%p,%p)"
"\n bad input\n", dstree, fp) ;
exit(-1) ;
}
/*
---------------------------------
write the Tree object to the file
---------------------------------
*/
rc = Tree_writeToBinaryFile(dstree->tree, fp) ;
if ( rc < 0 ) {
fprintf(stderr, "\n fatal error in DSTree_writeToBinaryFile(%p,%p)"
"\n rc = %d, return from writing Tree to file\n",
dstree, fp, rc) ;
return(0) ;
}
/*
-------------------------------
write the IV object to the file
-------------------------------
*/
rc = IV_writeToBinaryFile(dstree->mapIV, fp) ;
if ( rc < 0 ) {
fprintf(stderr, "\n fatal error in DSTree_writeToBinaryFile(%p,%p)"
"\n rc = %d, return from writing IV to file\n",
dstree, fp, rc) ;
return(0) ;
}
return(1) ; }
/*--------------------------------------------------------------------*/
/*
----------------------------------------------------
purpose -- to write an DSTree object for a human eye
return value -- 1 if success, 0 otherwise
created -- 96mar10, cca
----------------------------------------------------
*/
int
DSTree_writeForHumanEye (
DSTree *dstree,
FILE *fp
) {
int rc ;
if ( dstree == NULL || fp == NULL ) {
fprintf(stderr, "\n fatal error in DSTree_writeForHumanEye(%p,%p)"
"\n bad input\n", dstree, fp) ;
exit(-1) ;
}
if ( (rc = DSTree_writeStats(dstree, fp)) == 0 ) {
fprintf(stderr, "\n fatal error in DSTree_writeForHumanEye(%p,%p)"
"\n rc = %d, return from DSTree_writeStats(%p,%p)\n",
dstree, fp, rc, dstree, fp) ;
return(0) ;
}
fprintf(fp, "\n\n domain/separator tree") ;
Tree_writeForHumanEye(dstree->tree, fp) ;
fprintf(fp, "\n\n map from vertices to domains and separators") ;
IV_writeForHumanEye(dstree->mapIV, fp) ;
return(1) ; }
/*--------------------------------------------------------------------*/
/*
------------------------------------------------------------
purpose -- to write out the statistics for the DSTree object
return value -- 1 if success, 0 otherwise
created -- 96mar10, cca
------------------------------------------------------------
*/
int
DSTree_writeStats (
DSTree *dstree,
FILE *fp
) {
int rc ;
/*
---------------
check the input
---------------
*/
if ( dstree == NULL || fp == NULL ) {
fprintf(stderr, "\n error in DSTree_writeStats(%p,%p)"
"\n bad input\n", dstree, fp) ;
exit(-1) ;
}
rc = fprintf(fp, "\n DSTree : dstree object") ;
if ( rc < 0 ) {
fprintf(stderr, "\n fatal error in DSTree_writeStats(%p,%p)"
"\n rc = %d, return from fprintf\n", dstree, fp, rc) ;
return(0) ;
}
if ( dstree->tree != NULL && dstree->mapIV != NULL ) {
rc = fprintf(fp,
"\n %d domains and separators, %d vertices, occupies %d bytes",
dstree->tree->n, IV_size(dstree->mapIV), DSTree_sizeOf(dstree)) ;
if ( rc < 0 ) {
fprintf(stderr, "\n fatal error in DSTree_writeStats(%p,%p)"
"\n rc = %d, return from fprintf\n", dstree, fp, rc) ;
return(0) ;
}
}
return(1) ; }
/*--------------------------------------------------------------------*/
syntax highlighted by Code2HTML, v. 0.9.1