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