1 #include <string> 2 #include <sstream> 3 #include <phastaIO.h> 4 #include "phio_stream.h" 5 6 #define PHIO_STREAM_TRACING 0 7 namespace { 8 std::string appendPosix(const char* phrase) { 9 std::stringstream ss; 10 ss << phrase << "?"; 11 return ss.str(); 12 } 13 void traceEnter(const char* key, const char* aux="") { 14 if(PHIO_STREAM_TRACING) 15 fprintf(stderr, "CAKE entering %s %s\n", key, aux); 16 } 17 void traceExit(const char* key) { 18 if(PHIO_STREAM_TRACING) 19 fprintf(stderr, "CAKE exiting %s\n", key); 20 } 21 } 22 23 void stream_openfile( 24 const char filename[], 25 phio_fp f) { 26 traceEnter(__func__, filename); 27 stream_fp sf = (stream_fp) f; 28 if(sf->mode == 'w' && sf->rs != NULL) 29 sf->file = (int*) openRStreamWrite(sf->rs); 30 else if(sf->mode == 'r' && sf->grs != NULL) 31 sf->file = (int*) openGRStreamRead(sf->grs, filename); 32 else 33 fprintf(stderr, 34 "ERROR %s type of stream %s is unknown... exiting\n", 35 __func__, filename); 36 traceExit(__func__); 37 } 38 void stream_readheader( 39 int* fileDescriptor, 40 const char keyphrase[], 41 void* valueArray, 42 int* nItems, 43 const char datatype[], 44 const char iotype[] ) { 45 traceEnter(__func__, keyphrase); 46 std::string posixPhrase = appendPosix(keyphrase); 47 readHeader((FILE*)fileDescriptor, posixPhrase.c_str(), 48 (int*)valueArray, *nItems, iotype); 49 traceExit(__func__); 50 } 51 52 void stream_readdatablock( 53 int* fileDescriptor, 54 const char*, 55 void* valueArray, 56 int* nItems, 57 const char datatype[], 58 const char iotype[] ) { 59 traceEnter(__func__); 60 readDataBlock((FILE*)fileDescriptor, valueArray, *nItems, 61 datatype, iotype); 62 traceExit(__func__); 63 } 64 65 void stream_closefile(phio_fp f) { 66 traceEnter(__func__); 67 stream_fp sf = (stream_fp) f; 68 fclose((FILE*)sf->file); 69 traceExit(__func__); 70 } 71 72 void stream_constructname(const char* in, char* out) { 73 traceEnter(__func__); 74 sprintf(out, "%s", in); 75 traceExit(__func__); 76 } 77