1*80b7b0aaSCameron Smith #include <stdlib.h> 2a486e66cSCameron Smith #include <string> 3a486e66cSCameron Smith #include <sstream> 4a486e66cSCameron Smith #include <phastaIO.h> 5ecf8d2a9SCameron Smith #include "phio_stream.h" 610a6d6f7SCameron Smith 710a6d6f7SCameron Smith #define PHIO_STREAM_TRACING 0 8a486e66cSCameron Smith namespace { 9a486e66cSCameron Smith std::string appendPosix(const char* phrase) { 10a486e66cSCameron Smith std::stringstream ss; 11a486e66cSCameron Smith ss << phrase << "?"; 12a486e66cSCameron Smith return ss.str(); 13a486e66cSCameron Smith } 14a486e66cSCameron Smith void traceEnter(const char* key, const char* aux="") { 1510a6d6f7SCameron Smith if(PHIO_STREAM_TRACING) 16a486e66cSCameron Smith fprintf(stderr, "CAKE entering %s %s\n", key, aux); 17a486e66cSCameron Smith } 18a486e66cSCameron Smith void traceExit(const char* key) { 1910a6d6f7SCameron Smith if(PHIO_STREAM_TRACING) 20a486e66cSCameron Smith fprintf(stderr, "CAKE exiting %s\n", key); 21a486e66cSCameron Smith } 22a486e66cSCameron Smith } 23a486e66cSCameron Smith 24ecf8d2a9SCameron Smith void stream_openfile( 25ecf8d2a9SCameron Smith const char filename[], 26ecf8d2a9SCameron Smith phio_fp f) { 27a486e66cSCameron Smith traceEnter(__func__, filename); 28ecf8d2a9SCameron Smith stream_fp sf = (stream_fp) f; 29ecf8d2a9SCameron Smith if(sf->mode == 'w' && sf->rs != NULL) 30ecf8d2a9SCameron Smith sf->file = (int*) openRStreamWrite(sf->rs); 31ecf8d2a9SCameron Smith else if(sf->mode == 'r' && sf->grs != NULL) 32ecf8d2a9SCameron Smith sf->file = (int*) openGRStreamRead(sf->grs, filename); 33ecf8d2a9SCameron Smith else 34ecf8d2a9SCameron Smith fprintf(stderr, 35ecf8d2a9SCameron Smith "ERROR %s type of stream %s is unknown... exiting\n", 36ecf8d2a9SCameron Smith __func__, filename); 37a486e66cSCameron Smith traceExit(__func__); 38a486e66cSCameron Smith } 39ea868eb1SCameron Smith 40a486e66cSCameron Smith void stream_readheader( 41a486e66cSCameron Smith int* fileDescriptor, 42a486e66cSCameron Smith const char keyphrase[], 43a486e66cSCameron Smith void* valueArray, 44a486e66cSCameron Smith int* nItems, 45a486e66cSCameron Smith const char datatype[], 46a486e66cSCameron Smith const char iotype[] ) { 47a486e66cSCameron Smith traceEnter(__func__, keyphrase); 48f03ad52dSCameron Smith readHeader((FILE*)fileDescriptor, keyphrase, 49a486e66cSCameron Smith (int*)valueArray, *nItems, iotype); 50a486e66cSCameron Smith traceExit(__func__); 51a486e66cSCameron Smith } 52a486e66cSCameron Smith 53ea868eb1SCameron Smith void stream_writeheader( 54ea868eb1SCameron Smith const int* fileDescriptor, 55ea868eb1SCameron Smith const char keyphrase[], 56ea868eb1SCameron Smith const void* valueArray, 57ea868eb1SCameron Smith const int* nItems, 58ea868eb1SCameron Smith const int* ndataItems, 59ea868eb1SCameron Smith const char datatype[], 60ea868eb1SCameron Smith const char iotype[] ) { 61ea868eb1SCameron Smith traceEnter(__func__, keyphrase); 62f03ad52dSCameron Smith writeHeader((FILE*)fileDescriptor, keyphrase, 63ea868eb1SCameron Smith (int*)valueArray, *nItems, *ndataItems, datatype, iotype); 64ea868eb1SCameron Smith traceExit(__func__); 65ea868eb1SCameron Smith } 66ea868eb1SCameron Smith 67a486e66cSCameron Smith void stream_readdatablock( 68a486e66cSCameron Smith int* fileDescriptor, 69a486e66cSCameron Smith const char*, 70a486e66cSCameron Smith void* valueArray, 71a486e66cSCameron Smith int* nItems, 72a486e66cSCameron Smith const char datatype[], 73a486e66cSCameron Smith const char iotype[] ) { 74a486e66cSCameron Smith traceEnter(__func__); 75a486e66cSCameron Smith readDataBlock((FILE*)fileDescriptor, valueArray, *nItems, 76a486e66cSCameron Smith datatype, iotype); 77a486e66cSCameron Smith traceExit(__func__); 78ecf8d2a9SCameron Smith } 79ecf8d2a9SCameron Smith 80ea868eb1SCameron Smith void stream_writedatablock( 81ea868eb1SCameron Smith const int* fileDescriptor, 82ea868eb1SCameron Smith const char*, 83ea868eb1SCameron Smith const void* valueArray, 84ea868eb1SCameron Smith const int* nItems, 85ea868eb1SCameron Smith const char datatype[], 86ea868eb1SCameron Smith const char iotype[]) { 87ea868eb1SCameron Smith traceEnter(__func__); 88ea868eb1SCameron Smith writeDataBlock((FILE*)fileDescriptor, valueArray, 89ea868eb1SCameron Smith *nItems, datatype, iotype); 90ea868eb1SCameron Smith traceExit(__func__); 91ea868eb1SCameron Smith } 92ea868eb1SCameron Smith 93ecf8d2a9SCameron Smith void stream_closefile(phio_fp f) { 94a486e66cSCameron Smith traceEnter(__func__); 95ecf8d2a9SCameron Smith stream_fp sf = (stream_fp) f; 96ecf8d2a9SCameron Smith fclose((FILE*)sf->file); 97*80b7b0aaSCameron Smith free(f); 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