1*a486e66cSCameron Smith #include <string> 2*a486e66cSCameron Smith #include <sstream> 3*a486e66cSCameron Smith #include <phastaIO.h> 4ecf8d2a9SCameron Smith #include "phio_stream.h" 5*a486e66cSCameron Smith namespace { 6*a486e66cSCameron Smith std::string appendPosix(const char* phrase) { 7*a486e66cSCameron Smith std::stringstream ss; 8*a486e66cSCameron Smith ss << phrase << "?"; 9*a486e66cSCameron Smith return ss.str(); 10*a486e66cSCameron Smith } 11*a486e66cSCameron Smith void traceEnter(const char* key, const char* aux="") { 12*a486e66cSCameron Smith fprintf(stderr, "CAKE entering %s %s\n", key, aux); 13*a486e66cSCameron Smith } 14*a486e66cSCameron Smith void traceExit(const char* key) { 15*a486e66cSCameron Smith fprintf(stderr, "CAKE exiting %s\n", key); 16*a486e66cSCameron Smith } 17*a486e66cSCameron Smith } 18*a486e66cSCameron Smith 19ecf8d2a9SCameron Smith void stream_openfile( 20ecf8d2a9SCameron Smith const char filename[], 21ecf8d2a9SCameron Smith phio_fp f) { 22*a486e66cSCameron Smith traceEnter(__func__, filename); 23ecf8d2a9SCameron Smith stream_fp sf = (stream_fp) f; 24ecf8d2a9SCameron Smith if(sf->mode == 'w' && sf->rs != NULL) 25ecf8d2a9SCameron Smith sf->file = (int*) openRStreamWrite(sf->rs); 26ecf8d2a9SCameron Smith else if(sf->mode == 'r' && sf->grs != NULL) 27ecf8d2a9SCameron Smith sf->file = (int*) openGRStreamRead(sf->grs, filename); 28ecf8d2a9SCameron Smith else 29ecf8d2a9SCameron Smith fprintf(stderr, 30ecf8d2a9SCameron Smith "ERROR %s type of stream %s is unknown... exiting\n", 31ecf8d2a9SCameron Smith __func__, filename); 32*a486e66cSCameron Smith traceExit(__func__); 33*a486e66cSCameron Smith } 34*a486e66cSCameron Smith void stream_readheader( 35*a486e66cSCameron Smith int* fileDescriptor, 36*a486e66cSCameron Smith const char keyphrase[], 37*a486e66cSCameron Smith void* valueArray, 38*a486e66cSCameron Smith int* nItems, 39*a486e66cSCameron Smith const char datatype[], 40*a486e66cSCameron Smith const char iotype[] ) { 41*a486e66cSCameron Smith traceEnter(__func__, keyphrase); 42*a486e66cSCameron Smith std::string posixPhrase = appendPosix(keyphrase); 43*a486e66cSCameron Smith readHeader((FILE*)fileDescriptor, posixPhrase.c_str(), 44*a486e66cSCameron Smith (int*)valueArray, *nItems, iotype); 45*a486e66cSCameron Smith traceExit(__func__); 46*a486e66cSCameron Smith } 47*a486e66cSCameron Smith 48*a486e66cSCameron Smith void stream_readdatablock( 49*a486e66cSCameron Smith int* fileDescriptor, 50*a486e66cSCameron Smith const char*, 51*a486e66cSCameron Smith void* valueArray, 52*a486e66cSCameron Smith int* nItems, 53*a486e66cSCameron Smith const char datatype[], 54*a486e66cSCameron Smith const char iotype[] ) { 55*a486e66cSCameron Smith traceEnter(__func__); 56*a486e66cSCameron Smith readDataBlock((FILE*)fileDescriptor, valueArray, *nItems, 57*a486e66cSCameron Smith datatype, iotype); 58*a486e66cSCameron Smith traceExit(__func__); 59ecf8d2a9SCameron Smith } 60ecf8d2a9SCameron Smith 61ecf8d2a9SCameron Smith void stream_closefile(phio_fp f) { 62*a486e66cSCameron Smith traceEnter(__func__); 63ecf8d2a9SCameron Smith stream_fp sf = (stream_fp) f; 64ecf8d2a9SCameron Smith fclose((FILE*)sf->file); 65*a486e66cSCameron Smith traceExit(__func__); 66ecf8d2a9SCameron Smith } 67ecf8d2a9SCameron Smith 68ecf8d2a9SCameron Smith void stream_constructname(const char* in, char* out) { 69*a486e66cSCameron Smith traceEnter(__func__); 70ecf8d2a9SCameron Smith sprintf(out, "%s", in); 71*a486e66cSCameron Smith traceExit(__func__); 72ecf8d2a9SCameron Smith } 73