xref: /phasta/phSolver/common/phio_stream.cc (revision 10a6d6f79e76d89151c5e5e0b1e25c6bf39f834d)
1a486e66cSCameron Smith #include <string>
2a486e66cSCameron Smith #include <sstream>
3a486e66cSCameron Smith #include <phastaIO.h>
4ecf8d2a9SCameron Smith #include "phio_stream.h"
5*10a6d6f7SCameron Smith 
6*10a6d6f7SCameron 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="") {
14*10a6d6f7SCameron 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) {
18*10a6d6f7SCameron 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 }
38a486e66cSCameron Smith void stream_readheader(
39a486e66cSCameron Smith     int* fileDescriptor,
40a486e66cSCameron Smith     const  char keyphrase[],
41a486e66cSCameron Smith     void* valueArray,
42a486e66cSCameron Smith     int*  nItems,
43a486e66cSCameron Smith     const char  datatype[],
44a486e66cSCameron Smith     const char  iotype[] ) {
45a486e66cSCameron Smith   traceEnter(__func__, keyphrase);
46a486e66cSCameron Smith   std::string posixPhrase = appendPosix(keyphrase);
47a486e66cSCameron Smith   readHeader((FILE*)fileDescriptor, posixPhrase.c_str(),
48a486e66cSCameron Smith       (int*)valueArray, *nItems, iotype);
49a486e66cSCameron Smith   traceExit(__func__);
50a486e66cSCameron Smith }
51a486e66cSCameron Smith 
52a486e66cSCameron Smith void stream_readdatablock(
53a486e66cSCameron Smith     int* fileDescriptor,
54a486e66cSCameron Smith     const  char*,
55a486e66cSCameron Smith     void* valueArray,
56a486e66cSCameron Smith     int*  nItems,
57a486e66cSCameron Smith     const char  datatype[],
58a486e66cSCameron Smith     const char  iotype[] ) {
59a486e66cSCameron Smith   traceEnter(__func__);
60a486e66cSCameron Smith   readDataBlock((FILE*)fileDescriptor, valueArray, *nItems,
61a486e66cSCameron Smith       datatype, iotype);
62a486e66cSCameron Smith   traceExit(__func__);
63ecf8d2a9SCameron Smith }
64ecf8d2a9SCameron Smith 
65ecf8d2a9SCameron Smith void stream_closefile(phio_fp f) {
66a486e66cSCameron Smith   traceEnter(__func__);
67ecf8d2a9SCameron Smith   stream_fp sf = (stream_fp) f;
68ecf8d2a9SCameron Smith   fclose((FILE*)sf->file);
69a486e66cSCameron Smith   traceExit(__func__);
70ecf8d2a9SCameron Smith }
71ecf8d2a9SCameron Smith 
72ecf8d2a9SCameron Smith void stream_constructname(const char* in, char* out) {
73a486e66cSCameron Smith   traceEnter(__func__);
74ecf8d2a9SCameron Smith   sprintf(out, "%s", in);
75a486e66cSCameron Smith   traceExit(__func__);
76ecf8d2a9SCameron Smith }
77