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