xref: /phasta/phSolver/common/phio_stream.cc (revision 4f733f0b60bd739fcaba4ddf58f5b5575bd1cea2)
180b7b0aaSCameron Smith #include <stdlib.h>
2a486e66cSCameron Smith #include <string>
3a486e66cSCameron Smith #include <sstream>
4a486e66cSCameron Smith #include <phastaIO.h>
5ecf8d2a9SCameron Smith #include "phio_stream.h"
610a6d6f7SCameron Smith 
710a6d6f7SCameron Smith #define PHIO_STREAM_TRACING 0
8a486e66cSCameron Smith namespace {
9a486e66cSCameron Smith   std::string appendPosix(const char* phrase) {
10a486e66cSCameron Smith     std::stringstream ss;
11a486e66cSCameron Smith     ss << phrase << "?";
12a486e66cSCameron Smith     return ss.str();
13a486e66cSCameron Smith   }
14a486e66cSCameron Smith   void traceEnter(const char* key, const char* aux="") {
1510a6d6f7SCameron Smith     if(PHIO_STREAM_TRACING)
16a486e66cSCameron Smith       fprintf(stderr, "CAKE entering %s %s\n", key, aux);
17a486e66cSCameron Smith   }
18a486e66cSCameron Smith   void traceExit(const char* key) {
1910a6d6f7SCameron Smith     if(PHIO_STREAM_TRACING)
20a486e66cSCameron Smith       fprintf(stderr, "CAKE exiting %s\n", key);
21a486e66cSCameron Smith   }
22a486e66cSCameron Smith }
23a486e66cSCameron Smith 
24ecf8d2a9SCameron Smith void stream_openfile(
25ecf8d2a9SCameron Smith     const char filename[],
26ecf8d2a9SCameron Smith     phio_fp f) {
27a486e66cSCameron Smith   traceEnter(__func__, filename);
28ecf8d2a9SCameron Smith   stream_fp sf = (stream_fp) f;
29ecf8d2a9SCameron Smith   if(sf->mode == 'w' && sf->rs != NULL)
30ecf8d2a9SCameron Smith     sf->file = (int*) openRStreamWrite(sf->rs);
31*4f733f0bSCameron Smith   else if(sf->mode == 'r' && sf->rs != NULL)
32*4f733f0bSCameron Smith     sf->file = (int*) openRStreamRead(sf->rs);
33ecf8d2a9SCameron Smith   else if(sf->mode == 'r' && sf->grs != NULL)
34ecf8d2a9SCameron Smith     sf->file = (int*) openGRStreamRead(sf->grs, filename);
35ecf8d2a9SCameron Smith   else
36ecf8d2a9SCameron Smith     fprintf(stderr,
37ecf8d2a9SCameron Smith         "ERROR %s type of stream %s is unknown... exiting\n",
38ecf8d2a9SCameron Smith         __func__, filename);
39a486e66cSCameron Smith   traceExit(__func__);
40a486e66cSCameron Smith }
41ea868eb1SCameron Smith 
42a486e66cSCameron Smith void stream_readheader(
43a486e66cSCameron Smith     int* fileDescriptor,
44a486e66cSCameron Smith     const  char keyphrase[],
45a486e66cSCameron Smith     void* valueArray,
46a486e66cSCameron Smith     int*  nItems,
47a486e66cSCameron Smith     const char  datatype[],
48a486e66cSCameron Smith     const char  iotype[] ) {
49a486e66cSCameron Smith   traceEnter(__func__, keyphrase);
50f03ad52dSCameron Smith   readHeader((FILE*)fileDescriptor, keyphrase,
51a486e66cSCameron Smith       (int*)valueArray, *nItems, iotype);
52a486e66cSCameron Smith   traceExit(__func__);
53a486e66cSCameron Smith }
54a486e66cSCameron Smith 
55ea868eb1SCameron Smith void stream_writeheader(
56ea868eb1SCameron Smith     const int* fileDescriptor,
57ea868eb1SCameron Smith     const char keyphrase[],
58ea868eb1SCameron Smith     const void* valueArray,
59ea868eb1SCameron Smith     const int* nItems,
60ea868eb1SCameron Smith     const int* ndataItems,
61ea868eb1SCameron Smith     const char datatype[],
62ea868eb1SCameron Smith     const char iotype[] ) {
63ea868eb1SCameron Smith   traceEnter(__func__, keyphrase);
64f03ad52dSCameron Smith   writeHeader((FILE*)fileDescriptor, keyphrase,
65ea868eb1SCameron Smith       (int*)valueArray, *nItems, *ndataItems, datatype, iotype);
66ea868eb1SCameron Smith   traceExit(__func__);
67ea868eb1SCameron Smith }
68ea868eb1SCameron Smith 
69a486e66cSCameron Smith void stream_readdatablock(
70a486e66cSCameron Smith     int* fileDescriptor,
71a486e66cSCameron Smith     const  char*,
72a486e66cSCameron Smith     void* valueArray,
73a486e66cSCameron Smith     int*  nItems,
74a486e66cSCameron Smith     const char  datatype[],
75a486e66cSCameron Smith     const char  iotype[] ) {
76a486e66cSCameron Smith   traceEnter(__func__);
77a486e66cSCameron Smith   readDataBlock((FILE*)fileDescriptor, valueArray, *nItems,
78a486e66cSCameron Smith       datatype, iotype);
79a486e66cSCameron Smith   traceExit(__func__);
80ecf8d2a9SCameron Smith }
81ecf8d2a9SCameron Smith 
82ea868eb1SCameron Smith void stream_writedatablock(
83ea868eb1SCameron Smith     const int* fileDescriptor,
84ea868eb1SCameron Smith     const char*,
85ea868eb1SCameron Smith     const void* valueArray,
86ea868eb1SCameron Smith     const int* nItems,
87ea868eb1SCameron Smith     const char datatype[],
88ea868eb1SCameron Smith     const char iotype[]) {
89ea868eb1SCameron Smith   traceEnter(__func__);
90ea868eb1SCameron Smith   writeDataBlock((FILE*)fileDescriptor, valueArray,
91ea868eb1SCameron Smith       *nItems, datatype, iotype);
92ea868eb1SCameron Smith   traceExit(__func__);
93ea868eb1SCameron Smith }
94ea868eb1SCameron Smith 
95ecf8d2a9SCameron Smith void stream_closefile(phio_fp f) {
96a486e66cSCameron Smith   traceEnter(__func__);
97ecf8d2a9SCameron Smith   stream_fp sf = (stream_fp) f;
98ecf8d2a9SCameron Smith   fclose((FILE*)sf->file);
9980b7b0aaSCameron Smith   free(f);
100a486e66cSCameron Smith   traceExit(__func__);
101ecf8d2a9SCameron Smith }
102ecf8d2a9SCameron Smith 
103ecf8d2a9SCameron Smith void stream_constructname(const char* in, char* out) {
104a486e66cSCameron Smith   traceEnter(__func__);
105ecf8d2a9SCameron Smith   sprintf(out, "%s", in);
106a486e66cSCameron Smith   traceExit(__func__);
107ecf8d2a9SCameron Smith }
108