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