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