1a486e66cSCameron Smith #include <string> 2a486e66cSCameron Smith #include <sstream> 3a486e66cSCameron Smith #include <phastaIO.h> 4ecf8d2a9SCameron Smith #include "phio_stream.h" 510a6d6f7SCameron Smith 610a6d6f7SCameron 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="") { 1410a6d6f7SCameron 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) { 1810a6d6f7SCameron 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 } 38*ea868eb1SCameron Smith 39a486e66cSCameron Smith void stream_readheader( 40a486e66cSCameron Smith int* fileDescriptor, 41a486e66cSCameron Smith const char keyphrase[], 42a486e66cSCameron Smith void* valueArray, 43a486e66cSCameron Smith int* nItems, 44a486e66cSCameron Smith const char datatype[], 45a486e66cSCameron Smith const char iotype[] ) { 46a486e66cSCameron Smith traceEnter(__func__, keyphrase); 47a486e66cSCameron Smith std::string posixPhrase = appendPosix(keyphrase); 48a486e66cSCameron Smith readHeader((FILE*)fileDescriptor, posixPhrase.c_str(), 49a486e66cSCameron Smith (int*)valueArray, *nItems, iotype); 50a486e66cSCameron Smith traceExit(__func__); 51a486e66cSCameron Smith } 52a486e66cSCameron Smith 53*ea868eb1SCameron Smith void stream_writeheader( 54*ea868eb1SCameron Smith const int* fileDescriptor, 55*ea868eb1SCameron Smith const char keyphrase[], 56*ea868eb1SCameron Smith const void* valueArray, 57*ea868eb1SCameron Smith const int* nItems, 58*ea868eb1SCameron Smith const int* ndataItems, 59*ea868eb1SCameron Smith const char datatype[], 60*ea868eb1SCameron Smith const char iotype[] ) { 61*ea868eb1SCameron Smith traceEnter(__func__, keyphrase); 62*ea868eb1SCameron Smith std::string posixPhrase = appendPosix(keyphrase); 63*ea868eb1SCameron Smith writeHeader((FILE*)fileDescriptor, posixPhrase.c_str(), 64*ea868eb1SCameron Smith (int*)valueArray, *nItems, *ndataItems, datatype, iotype); 65*ea868eb1SCameron Smith traceExit(__func__); 66*ea868eb1SCameron Smith } 67*ea868eb1SCameron Smith 68a486e66cSCameron Smith void stream_readdatablock( 69a486e66cSCameron Smith int* fileDescriptor, 70a486e66cSCameron Smith const char*, 71a486e66cSCameron Smith void* valueArray, 72a486e66cSCameron Smith int* nItems, 73a486e66cSCameron Smith const char datatype[], 74a486e66cSCameron Smith const char iotype[] ) { 75a486e66cSCameron Smith traceEnter(__func__); 76a486e66cSCameron Smith readDataBlock((FILE*)fileDescriptor, valueArray, *nItems, 77a486e66cSCameron Smith datatype, iotype); 78a486e66cSCameron Smith traceExit(__func__); 79ecf8d2a9SCameron Smith } 80ecf8d2a9SCameron Smith 81*ea868eb1SCameron Smith void stream_writedatablock( 82*ea868eb1SCameron Smith const int* fileDescriptor, 83*ea868eb1SCameron Smith const char*, 84*ea868eb1SCameron Smith const void* valueArray, 85*ea868eb1SCameron Smith const int* nItems, 86*ea868eb1SCameron Smith const char datatype[], 87*ea868eb1SCameron Smith const char iotype[]) { 88*ea868eb1SCameron Smith traceEnter(__func__); 89*ea868eb1SCameron Smith writeDataBlock((FILE*)fileDescriptor, valueArray, 90*ea868eb1SCameron Smith *nItems, datatype, iotype); 91*ea868eb1SCameron Smith traceExit(__func__); 92*ea868eb1SCameron Smith } 93*ea868eb1SCameron Smith 94ecf8d2a9SCameron Smith void stream_closefile(phio_fp f) { 95a486e66cSCameron Smith traceEnter(__func__); 96ecf8d2a9SCameron Smith stream_fp sf = (stream_fp) f; 97ecf8d2a9SCameron Smith fclose((FILE*)sf->file); 98a486e66cSCameron Smith traceExit(__func__); 99ecf8d2a9SCameron Smith } 100ecf8d2a9SCameron Smith 101ecf8d2a9SCameron Smith void stream_constructname(const char* in, char* out) { 102a486e66cSCameron Smith traceEnter(__func__); 103ecf8d2a9SCameron Smith sprintf(out, "%s", in); 104a486e66cSCameron Smith traceExit(__func__); 105ecf8d2a9SCameron Smith } 106