xref: /phasta/phSolver/common/phio_stream.cc (revision 637359409a717544f9f70af81dbd6f9bbc343506)
180b7b0aaSCameron Smith #include <stdlib.h>
2a486e66cSCameron Smith #include <string>
3a486e66cSCameron Smith #include <sstream>
4a486e66cSCameron Smith #include <phastaIO.h>
5*63735940SCameron Smith #include <phiotmrc.h> //phioTime
6*63735940SCameron Smith #include <phiostats.h>  //phastaio_add[Open|Close]Time
7ecf8d2a9SCameron Smith #include "phio_stream.h"
810a6d6f7SCameron Smith 
910a6d6f7SCameron Smith #define PHIO_STREAM_TRACING 0
10a486e66cSCameron Smith namespace {
11a486e66cSCameron Smith   std::string appendPosix(const char* phrase) {
12a486e66cSCameron Smith     std::stringstream ss;
13a486e66cSCameron Smith     ss << phrase << "?";
14a486e66cSCameron Smith     return ss.str();
15a486e66cSCameron Smith   }
16a486e66cSCameron Smith   void traceEnter(const char* key, const char* aux="") {
1710a6d6f7SCameron Smith     if(PHIO_STREAM_TRACING)
18a486e66cSCameron Smith       fprintf(stderr, "CAKE entering %s %s\n", key, aux);
19a486e66cSCameron Smith   }
20a486e66cSCameron Smith   void traceExit(const char* key) {
2110a6d6f7SCameron Smith     if(PHIO_STREAM_TRACING)
22a486e66cSCameron Smith       fprintf(stderr, "CAKE exiting %s\n", key);
23a486e66cSCameron Smith   }
24a486e66cSCameron Smith }
25a486e66cSCameron Smith 
26ecf8d2a9SCameron Smith void stream_openfile(
27ecf8d2a9SCameron Smith     const char filename[],
28ecf8d2a9SCameron Smith     phio_fp f) {
29a486e66cSCameron Smith   traceEnter(__func__, filename);
30ecf8d2a9SCameron Smith   stream_fp sf = (stream_fp) f;
31*63735940SCameron Smith   phioTime t0,t1;
32*63735940SCameron Smith   phastaio_time(&t0);
33ecf8d2a9SCameron Smith   if(sf->mode == 'w' && sf->rs != NULL)
34ecf8d2a9SCameron Smith     sf->file = (int*) openRStreamWrite(sf->rs);
354f733f0bSCameron Smith   else if(sf->mode == 'r' && sf->rs != NULL)
364f733f0bSCameron Smith     sf->file = (int*) openRStreamRead(sf->rs);
37ecf8d2a9SCameron Smith   else if(sf->mode == 'r' && sf->grs != NULL)
38ecf8d2a9SCameron Smith     sf->file = (int*) openGRStreamRead(sf->grs, filename);
39ecf8d2a9SCameron Smith   else
40ecf8d2a9SCameron Smith     fprintf(stderr,
41ecf8d2a9SCameron Smith         "ERROR %s type of stream %s is unknown... exiting\n",
42ecf8d2a9SCameron Smith         __func__, filename);
43*63735940SCameron Smith   phastaio_time(&t1);
44*63735940SCameron Smith   const size_t elapsed = phastaio_time_diff(&t0,&t1);
45*63735940SCameron Smith   phastaio_addOpenTime(elapsed);
46a486e66cSCameron Smith   traceExit(__func__);
47a486e66cSCameron Smith }
48ea868eb1SCameron Smith 
49a486e66cSCameron Smith void stream_readheader(
50a486e66cSCameron Smith     int* fileDescriptor,
51a486e66cSCameron Smith     const  char keyphrase[],
52a486e66cSCameron Smith     void* valueArray,
53a486e66cSCameron Smith     int*  nItems,
54a486e66cSCameron Smith     const char  datatype[],
55a486e66cSCameron Smith     const char  iotype[] ) {
56a486e66cSCameron Smith   traceEnter(__func__, keyphrase);
57f03ad52dSCameron Smith   readHeader((FILE*)fileDescriptor, keyphrase,
58a486e66cSCameron Smith       (int*)valueArray, *nItems, iotype);
59a486e66cSCameron Smith   traceExit(__func__);
60a486e66cSCameron Smith }
61a486e66cSCameron Smith 
62ea868eb1SCameron Smith void stream_writeheader(
63ea868eb1SCameron Smith     const int* fileDescriptor,
64ea868eb1SCameron Smith     const char keyphrase[],
65ea868eb1SCameron Smith     const void* valueArray,
66ea868eb1SCameron Smith     const int* nItems,
67ea868eb1SCameron Smith     const int* ndataItems,
68ea868eb1SCameron Smith     const char datatype[],
69ea868eb1SCameron Smith     const char iotype[] ) {
70ea868eb1SCameron Smith   traceEnter(__func__, keyphrase);
71f03ad52dSCameron Smith   writeHeader((FILE*)fileDescriptor, keyphrase,
72ea868eb1SCameron Smith       (int*)valueArray, *nItems, *ndataItems, datatype, iotype);
73ea868eb1SCameron Smith   traceExit(__func__);
74ea868eb1SCameron Smith }
75ea868eb1SCameron Smith 
76a486e66cSCameron Smith void stream_readdatablock(
77a486e66cSCameron Smith     int* fileDescriptor,
78a486e66cSCameron Smith     const  char*,
79a486e66cSCameron Smith     void* valueArray,
80a486e66cSCameron Smith     int*  nItems,
81a486e66cSCameron Smith     const char  datatype[],
82a486e66cSCameron Smith     const char  iotype[] ) {
83a486e66cSCameron Smith   traceEnter(__func__);
84a486e66cSCameron Smith   readDataBlock((FILE*)fileDescriptor, valueArray, *nItems,
85a486e66cSCameron Smith       datatype, iotype);
86a486e66cSCameron Smith   traceExit(__func__);
87ecf8d2a9SCameron Smith }
88ecf8d2a9SCameron Smith 
89ea868eb1SCameron Smith void stream_writedatablock(
90ea868eb1SCameron Smith     const int* fileDescriptor,
91ea868eb1SCameron Smith     const char*,
92ea868eb1SCameron Smith     const void* valueArray,
93ea868eb1SCameron Smith     const int* nItems,
94ea868eb1SCameron Smith     const char datatype[],
95ea868eb1SCameron Smith     const char iotype[]) {
96ea868eb1SCameron Smith   traceEnter(__func__);
97ea868eb1SCameron Smith   writeDataBlock((FILE*)fileDescriptor, valueArray,
98ea868eb1SCameron Smith       *nItems, datatype, iotype);
99ea868eb1SCameron Smith   traceExit(__func__);
100ea868eb1SCameron Smith }
101ea868eb1SCameron Smith 
102ecf8d2a9SCameron Smith void stream_closefile(phio_fp f) {
103a486e66cSCameron Smith   traceEnter(__func__);
104ecf8d2a9SCameron Smith   stream_fp sf = (stream_fp) f;
105*63735940SCameron Smith   phioTime t0,t1;
106*63735940SCameron Smith   phastaio_time(&t0);
107ecf8d2a9SCameron Smith   fclose((FILE*)sf->file);
108*63735940SCameron Smith   phastaio_time(&t1);
109*63735940SCameron Smith   const size_t elapsed = phastaio_time_diff(&t0,&t1);
110*63735940SCameron Smith   phastaio_addCloseTime(elapsed);
11180b7b0aaSCameron Smith   free(f);
112a486e66cSCameron Smith   traceExit(__func__);
113ecf8d2a9SCameron Smith }
114ecf8d2a9SCameron Smith 
115ecf8d2a9SCameron Smith void stream_constructname(const char* in, char* out) {
116a486e66cSCameron Smith   traceEnter(__func__);
117ecf8d2a9SCameron Smith   sprintf(out, "%s", in);
118a486e66cSCameron Smith   traceExit(__func__);
119ecf8d2a9SCameron Smith }
120