180b7b0aaSCameron Smith #include <stdlib.h> 2a486e66cSCameron Smith #include <string> 3a486e66cSCameron Smith #include <sstream> 4a486e66cSCameron Smith #include <phastaIO.h> 5*63735940SCameron Smith #include <phiotmrc.h> //phioTime 6*63735940SCameron Smith #include <phiostats.h> //phastaio_add[Open|Close]Time 7ecf8d2a9SCameron Smith #include "phio_stream.h" 810a6d6f7SCameron Smith 910a6d6f7SCameron Smith #define PHIO_STREAM_TRACING 0 10a486e66cSCameron Smith namespace { 11a486e66cSCameron Smith std::string appendPosix(const char* phrase) { 12a486e66cSCameron Smith std::stringstream ss; 13a486e66cSCameron Smith ss << phrase << "?"; 14a486e66cSCameron Smith return ss.str(); 15a486e66cSCameron Smith } 16a486e66cSCameron Smith void traceEnter(const char* key, const char* aux="") { 1710a6d6f7SCameron Smith if(PHIO_STREAM_TRACING) 18a486e66cSCameron Smith fprintf(stderr, "CAKE entering %s %s\n", key, aux); 19a486e66cSCameron Smith } 20a486e66cSCameron Smith void traceExit(const char* key) { 2110a6d6f7SCameron Smith if(PHIO_STREAM_TRACING) 22a486e66cSCameron Smith fprintf(stderr, "CAKE exiting %s\n", key); 23a486e66cSCameron Smith } 24a486e66cSCameron Smith } 25a486e66cSCameron Smith 26ecf8d2a9SCameron Smith void stream_openfile( 27ecf8d2a9SCameron Smith const char filename[], 28ecf8d2a9SCameron Smith phio_fp f) { 29a486e66cSCameron Smith traceEnter(__func__, filename); 30ecf8d2a9SCameron Smith stream_fp sf = (stream_fp) f; 31*63735940SCameron Smith phioTime t0,t1; 32*63735940SCameron Smith phastaio_time(&t0); 33ecf8d2a9SCameron Smith if(sf->mode == 'w' && sf->rs != NULL) 34ecf8d2a9SCameron Smith sf->file = (int*) openRStreamWrite(sf->rs); 354f733f0bSCameron Smith else if(sf->mode == 'r' && sf->rs != NULL) 364f733f0bSCameron Smith sf->file = (int*) openRStreamRead(sf->rs); 37ecf8d2a9SCameron Smith else if(sf->mode == 'r' && sf->grs != NULL) 38ecf8d2a9SCameron Smith sf->file = (int*) openGRStreamRead(sf->grs, filename); 39ecf8d2a9SCameron Smith else 40ecf8d2a9SCameron Smith fprintf(stderr, 41ecf8d2a9SCameron Smith "ERROR %s type of stream %s is unknown... exiting\n", 42ecf8d2a9SCameron Smith __func__, filename); 43*63735940SCameron Smith phastaio_time(&t1); 44*63735940SCameron Smith const size_t elapsed = phastaio_time_diff(&t0,&t1); 45*63735940SCameron Smith phastaio_addOpenTime(elapsed); 46a486e66cSCameron Smith traceExit(__func__); 47a486e66cSCameron Smith } 48ea868eb1SCameron Smith 49a486e66cSCameron Smith void stream_readheader( 50a486e66cSCameron Smith int* fileDescriptor, 51a486e66cSCameron Smith const char keyphrase[], 52a486e66cSCameron Smith void* valueArray, 53a486e66cSCameron Smith int* nItems, 54a486e66cSCameron Smith const char datatype[], 55a486e66cSCameron Smith const char iotype[] ) { 56a486e66cSCameron Smith traceEnter(__func__, keyphrase); 57f03ad52dSCameron Smith readHeader((FILE*)fileDescriptor, keyphrase, 58a486e66cSCameron Smith (int*)valueArray, *nItems, iotype); 59a486e66cSCameron Smith traceExit(__func__); 60a486e66cSCameron Smith } 61a486e66cSCameron Smith 62ea868eb1SCameron Smith void stream_writeheader( 63ea868eb1SCameron Smith const int* fileDescriptor, 64ea868eb1SCameron Smith const char keyphrase[], 65ea868eb1SCameron Smith const void* valueArray, 66ea868eb1SCameron Smith const int* nItems, 67ea868eb1SCameron Smith const int* ndataItems, 68ea868eb1SCameron Smith const char datatype[], 69ea868eb1SCameron Smith const char iotype[] ) { 70ea868eb1SCameron Smith traceEnter(__func__, keyphrase); 71f03ad52dSCameron Smith writeHeader((FILE*)fileDescriptor, keyphrase, 72ea868eb1SCameron Smith (int*)valueArray, *nItems, *ndataItems, datatype, iotype); 73ea868eb1SCameron Smith traceExit(__func__); 74ea868eb1SCameron Smith } 75ea868eb1SCameron Smith 76a486e66cSCameron Smith void stream_readdatablock( 77a486e66cSCameron Smith int* fileDescriptor, 78a486e66cSCameron Smith const char*, 79a486e66cSCameron Smith void* valueArray, 80a486e66cSCameron Smith int* nItems, 81a486e66cSCameron Smith const char datatype[], 82a486e66cSCameron Smith const char iotype[] ) { 83a486e66cSCameron Smith traceEnter(__func__); 84a486e66cSCameron Smith readDataBlock((FILE*)fileDescriptor, valueArray, *nItems, 85a486e66cSCameron Smith datatype, iotype); 86a486e66cSCameron Smith traceExit(__func__); 87ecf8d2a9SCameron Smith } 88ecf8d2a9SCameron Smith 89ea868eb1SCameron Smith void stream_writedatablock( 90ea868eb1SCameron Smith const int* fileDescriptor, 91ea868eb1SCameron Smith const char*, 92ea868eb1SCameron Smith const void* valueArray, 93ea868eb1SCameron Smith const int* nItems, 94ea868eb1SCameron Smith const char datatype[], 95ea868eb1SCameron Smith const char iotype[]) { 96ea868eb1SCameron Smith traceEnter(__func__); 97ea868eb1SCameron Smith writeDataBlock((FILE*)fileDescriptor, valueArray, 98ea868eb1SCameron Smith *nItems, datatype, iotype); 99ea868eb1SCameron Smith traceExit(__func__); 100ea868eb1SCameron Smith } 101ea868eb1SCameron Smith 102ecf8d2a9SCameron Smith void stream_closefile(phio_fp f) { 103a486e66cSCameron Smith traceEnter(__func__); 104ecf8d2a9SCameron Smith stream_fp sf = (stream_fp) f; 105*63735940SCameron Smith phioTime t0,t1; 106*63735940SCameron Smith phastaio_time(&t0); 107ecf8d2a9SCameron Smith fclose((FILE*)sf->file); 108*63735940SCameron Smith phastaio_time(&t1); 109*63735940SCameron Smith const size_t elapsed = phastaio_time_diff(&t0,&t1); 110*63735940SCameron Smith phastaio_addCloseTime(elapsed); 11180b7b0aaSCameron Smith free(f); 112a486e66cSCameron Smith traceExit(__func__); 113ecf8d2a9SCameron Smith } 114ecf8d2a9SCameron Smith 115ecf8d2a9SCameron Smith void stream_constructname(const char* in, char* out) { 116a486e66cSCameron Smith traceEnter(__func__); 117ecf8d2a9SCameron Smith sprintf(out, "%s", in); 118a486e66cSCameron Smith traceExit(__func__); 119ecf8d2a9SCameron Smith } 120