xref: /phasta/phSolver/common/phio_stream.cc (revision 80b7b0aaa820dba7431b48a8b0f4fd13b2a9fde8)
1*80b7b0aaSCameron 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);
31ecf8d2a9SCameron Smith   else if(sf->mode == 'r' && sf->grs != NULL)
32ecf8d2a9SCameron Smith     sf->file = (int*) openGRStreamRead(sf->grs, filename);
33ecf8d2a9SCameron Smith   else
34ecf8d2a9SCameron Smith     fprintf(stderr,
35ecf8d2a9SCameron Smith         "ERROR %s type of stream %s is unknown... exiting\n",
36ecf8d2a9SCameron Smith         __func__, filename);
37a486e66cSCameron Smith   traceExit(__func__);
38a486e66cSCameron Smith }
39ea868eb1SCameron Smith 
40a486e66cSCameron Smith void stream_readheader(
41a486e66cSCameron Smith     int* fileDescriptor,
42a486e66cSCameron Smith     const  char keyphrase[],
43a486e66cSCameron Smith     void* valueArray,
44a486e66cSCameron Smith     int*  nItems,
45a486e66cSCameron Smith     const char  datatype[],
46a486e66cSCameron Smith     const char  iotype[] ) {
47a486e66cSCameron Smith   traceEnter(__func__, keyphrase);
48f03ad52dSCameron Smith   readHeader((FILE*)fileDescriptor, keyphrase,
49a486e66cSCameron Smith       (int*)valueArray, *nItems, iotype);
50a486e66cSCameron Smith   traceExit(__func__);
51a486e66cSCameron Smith }
52a486e66cSCameron Smith 
53ea868eb1SCameron Smith void stream_writeheader(
54ea868eb1SCameron Smith     const int* fileDescriptor,
55ea868eb1SCameron Smith     const char keyphrase[],
56ea868eb1SCameron Smith     const void* valueArray,
57ea868eb1SCameron Smith     const int* nItems,
58ea868eb1SCameron Smith     const int* ndataItems,
59ea868eb1SCameron Smith     const char datatype[],
60ea868eb1SCameron Smith     const char iotype[] ) {
61ea868eb1SCameron Smith   traceEnter(__func__, keyphrase);
62f03ad52dSCameron Smith   writeHeader((FILE*)fileDescriptor, keyphrase,
63ea868eb1SCameron Smith       (int*)valueArray, *nItems, *ndataItems, datatype, iotype);
64ea868eb1SCameron Smith   traceExit(__func__);
65ea868eb1SCameron Smith }
66ea868eb1SCameron Smith 
67a486e66cSCameron Smith void stream_readdatablock(
68a486e66cSCameron Smith     int* fileDescriptor,
69a486e66cSCameron Smith     const  char*,
70a486e66cSCameron Smith     void* valueArray,
71a486e66cSCameron Smith     int*  nItems,
72a486e66cSCameron Smith     const char  datatype[],
73a486e66cSCameron Smith     const char  iotype[] ) {
74a486e66cSCameron Smith   traceEnter(__func__);
75a486e66cSCameron Smith   readDataBlock((FILE*)fileDescriptor, valueArray, *nItems,
76a486e66cSCameron Smith       datatype, iotype);
77a486e66cSCameron Smith   traceExit(__func__);
78ecf8d2a9SCameron Smith }
79ecf8d2a9SCameron Smith 
80ea868eb1SCameron Smith void stream_writedatablock(
81ea868eb1SCameron Smith     const int* fileDescriptor,
82ea868eb1SCameron Smith     const char*,
83ea868eb1SCameron Smith     const void* valueArray,
84ea868eb1SCameron Smith     const int* nItems,
85ea868eb1SCameron Smith     const char datatype[],
86ea868eb1SCameron Smith     const char iotype[]) {
87ea868eb1SCameron Smith   traceEnter(__func__);
88ea868eb1SCameron Smith   writeDataBlock((FILE*)fileDescriptor, valueArray,
89ea868eb1SCameron Smith       *nItems, datatype, iotype);
90ea868eb1SCameron Smith   traceExit(__func__);
91ea868eb1SCameron Smith }
92ea868eb1SCameron Smith 
93ecf8d2a9SCameron Smith void stream_closefile(phio_fp f) {
94a486e66cSCameron Smith   traceEnter(__func__);
95ecf8d2a9SCameron Smith   stream_fp sf = (stream_fp) f;
96ecf8d2a9SCameron Smith   fclose((FILE*)sf->file);
97*80b7b0aaSCameron Smith   free(f);
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