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 } 38ea868eb1SCameron 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); 47*f03ad52dSCameron Smith readHeader((FILE*)fileDescriptor, keyphrase, 48a486e66cSCameron Smith (int*)valueArray, *nItems, iotype); 49a486e66cSCameron Smith traceExit(__func__); 50a486e66cSCameron Smith } 51a486e66cSCameron Smith 52ea868eb1SCameron Smith void stream_writeheader( 53ea868eb1SCameron Smith const int* fileDescriptor, 54ea868eb1SCameron Smith const char keyphrase[], 55ea868eb1SCameron Smith const void* valueArray, 56ea868eb1SCameron Smith const int* nItems, 57ea868eb1SCameron Smith const int* ndataItems, 58ea868eb1SCameron Smith const char datatype[], 59ea868eb1SCameron Smith const char iotype[] ) { 60ea868eb1SCameron Smith traceEnter(__func__, keyphrase); 61*f03ad52dSCameron Smith writeHeader((FILE*)fileDescriptor, keyphrase, 62ea868eb1SCameron Smith (int*)valueArray, *nItems, *ndataItems, datatype, iotype); 63ea868eb1SCameron Smith traceExit(__func__); 64ea868eb1SCameron Smith } 65ea868eb1SCameron Smith 66a486e66cSCameron Smith void stream_readdatablock( 67a486e66cSCameron Smith int* fileDescriptor, 68a486e66cSCameron Smith const char*, 69a486e66cSCameron Smith void* valueArray, 70a486e66cSCameron Smith int* nItems, 71a486e66cSCameron Smith const char datatype[], 72a486e66cSCameron Smith const char iotype[] ) { 73a486e66cSCameron Smith traceEnter(__func__); 74a486e66cSCameron Smith readDataBlock((FILE*)fileDescriptor, valueArray, *nItems, 75a486e66cSCameron Smith datatype, iotype); 76a486e66cSCameron Smith traceExit(__func__); 77ecf8d2a9SCameron Smith } 78ecf8d2a9SCameron Smith 79ea868eb1SCameron Smith void stream_writedatablock( 80ea868eb1SCameron Smith const int* fileDescriptor, 81ea868eb1SCameron Smith const char*, 82ea868eb1SCameron Smith const void* valueArray, 83ea868eb1SCameron Smith const int* nItems, 84ea868eb1SCameron Smith const char datatype[], 85ea868eb1SCameron Smith const char iotype[]) { 86ea868eb1SCameron Smith traceEnter(__func__); 87ea868eb1SCameron Smith writeDataBlock((FILE*)fileDescriptor, valueArray, 88ea868eb1SCameron Smith *nItems, datatype, iotype); 89ea868eb1SCameron Smith traceExit(__func__); 90ea868eb1SCameron Smith } 91ea868eb1SCameron Smith 92ecf8d2a9SCameron Smith void stream_closefile(phio_fp f) { 93a486e66cSCameron Smith traceEnter(__func__); 94ecf8d2a9SCameron Smith stream_fp sf = (stream_fp) f; 95ecf8d2a9SCameron Smith fclose((FILE*)sf->file); 96a486e66cSCameron Smith traceExit(__func__); 97ecf8d2a9SCameron Smith } 98ecf8d2a9SCameron Smith 99ecf8d2a9SCameron Smith void stream_constructname(const char* in, char* out) { 100a486e66cSCameron Smith traceEnter(__func__); 101ecf8d2a9SCameron Smith sprintf(out, "%s", in); 102a486e66cSCameron Smith traceExit(__func__); 103ecf8d2a9SCameron Smith } 104