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