xref: /phasta/phSolver/common/phio_stream.cc (revision ea868eb1c17e8b2a160bb27c128290bdf49f8ce8)
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 }
38*ea868eb1SCameron 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);
47a486e66cSCameron Smith   std::string posixPhrase = appendPosix(keyphrase);
48a486e66cSCameron Smith   readHeader((FILE*)fileDescriptor, posixPhrase.c_str(),
49a486e66cSCameron Smith       (int*)valueArray, *nItems, iotype);
50a486e66cSCameron Smith   traceExit(__func__);
51a486e66cSCameron Smith }
52a486e66cSCameron Smith 
53*ea868eb1SCameron Smith void stream_writeheader(
54*ea868eb1SCameron Smith     const int* fileDescriptor,
55*ea868eb1SCameron Smith     const char keyphrase[],
56*ea868eb1SCameron Smith     const void* valueArray,
57*ea868eb1SCameron Smith     const int* nItems,
58*ea868eb1SCameron Smith     const int* ndataItems,
59*ea868eb1SCameron Smith     const char datatype[],
60*ea868eb1SCameron Smith     const char iotype[] ) {
61*ea868eb1SCameron Smith   traceEnter(__func__, keyphrase);
62*ea868eb1SCameron Smith   std::string posixPhrase = appendPosix(keyphrase);
63*ea868eb1SCameron Smith   writeHeader((FILE*)fileDescriptor, posixPhrase.c_str(),
64*ea868eb1SCameron Smith       (int*)valueArray, *nItems, *ndataItems, datatype, iotype);
65*ea868eb1SCameron Smith   traceExit(__func__);
66*ea868eb1SCameron Smith }
67*ea868eb1SCameron Smith 
68a486e66cSCameron Smith void stream_readdatablock(
69a486e66cSCameron Smith     int* fileDescriptor,
70a486e66cSCameron Smith     const  char*,
71a486e66cSCameron Smith     void* valueArray,
72a486e66cSCameron Smith     int*  nItems,
73a486e66cSCameron Smith     const char  datatype[],
74a486e66cSCameron Smith     const char  iotype[] ) {
75a486e66cSCameron Smith   traceEnter(__func__);
76a486e66cSCameron Smith   readDataBlock((FILE*)fileDescriptor, valueArray, *nItems,
77a486e66cSCameron Smith       datatype, iotype);
78a486e66cSCameron Smith   traceExit(__func__);
79ecf8d2a9SCameron Smith }
80ecf8d2a9SCameron Smith 
81*ea868eb1SCameron Smith void stream_writedatablock(
82*ea868eb1SCameron Smith     const int* fileDescriptor,
83*ea868eb1SCameron Smith     const char*,
84*ea868eb1SCameron Smith     const void* valueArray,
85*ea868eb1SCameron Smith     const int* nItems,
86*ea868eb1SCameron Smith     const char datatype[],
87*ea868eb1SCameron Smith     const char iotype[]) {
88*ea868eb1SCameron Smith   traceEnter(__func__);
89*ea868eb1SCameron Smith   writeDataBlock((FILE*)fileDescriptor, valueArray,
90*ea868eb1SCameron Smith       *nItems, datatype, iotype);
91*ea868eb1SCameron Smith   traceExit(__func__);
92*ea868eb1SCameron Smith }
93*ea868eb1SCameron Smith 
94ecf8d2a9SCameron Smith void stream_closefile(phio_fp f) {
95a486e66cSCameron Smith   traceEnter(__func__);
96ecf8d2a9SCameron Smith   stream_fp sf = (stream_fp) f;
97ecf8d2a9SCameron Smith   fclose((FILE*)sf->file);
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