1 /*
2   This file is part of CDO. CDO is a collection of Operators to manipulate and analyse Climate model Data.
3 
4   Author: Uwe Schulzweida
5           Oliver Heidmann
6 
7 */
8 #ifndef PIPESTREAM_H
9 #define PIPESTREAM_H
10 
11 #include "cdoStream.h"
12 #include "pipe.h"
13 
14 #ifdef HAVE_LIBPTHREAD
15 
16 class FileStream;  // Predeclaration only for copyRecord(...)
17 
18 class PipeStream : public CdoStream
19 {
20 public:
21   // Constructors
22   PipeStream(int p_processID);
23   // ---
24 
25   // CdoStream Interface functions
26   int open_read();
27   int open_write(int p_filetype);
28   int open_append();
29 
30   int inq_vlist();
31   void def_vlist(int p_vlistID);
32 
33   void inq_record(int *varID, int *levelID);
34   void defRecord(int varID, int levelID);
35 
36   void read_record(float *p_data, size_t *nmiss);
37   void read_record(double *p_data, size_t *nmiss);
38   void read_record(Field *p_field, size_t *nmiss);
39 
40   void write_record(float *p_data, size_t nmiss);
41   void write_record(double *p_data, size_t nmiss);
42   void write_record(Field *p_field, size_t nmiss);
43 
44   void copyRecord(CdoStreamID p_fileStream);
45 
46   int inq_timestep(int tsID);
47   void def_timestep(int tsID);
48 
49   int inqFileType();
50   int inqByteorder();
51 
52   void close();
53 
54   size_t getNvals();
55   // ---
56 
57   // FileStreamOnly
58   // ---
59 
60 private:
61   PipeStream() = delete;
62   std::shared_ptr<pipe_t> m_pipe;
63   pthread_t rthreadID;  // read  thread ID
64   pthread_t wthreadID;  // write thread ID
65   void waitForPipe();
66 };
67 #endif
68 
69 #endif
70