GNU Octave  3.8.0
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
procstream.h
Go to the documentation of this file.
1 /*
2 
3 Copyright (C) 1993-2013 John W. Eaton
4 
5 This file is part of Octave.
6 
7 Octave is free software; you can redistribute it and/or modify it
8 under the terms of the GNU General Public License as published by the
9 Free Software Foundation; either version 3 of the License, or (at your
10 option) any later version.
11 
12 Octave is distributed in the hope that it will be useful, but WITHOUT
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 for more details.
16 
17 You should have received a copy of the GNU General Public License
18 along with Octave; see the file COPYING. If not, see
19 <http://www.gnu.org/licenses/>.
20 
21 */
22 
23 #if !defined (octave_procstream_h)
24 #define octave_procstream_h 1
25 
26 #include <iosfwd>
27 #include <string>
28 
29 #include <sys/types.h>
30 
31 #include "oct-procbuf.h"
32 
33 class
35 procstreambase : virtual public std::ios
36 {
37 public:
38 
39  procstreambase (void) : pb () { pb_init (); }
40 
41  procstreambase (const std::string& name, int mode);
42 
43  procstreambase (const char *name, int mode);
44 
45  ~procstreambase (void) { close (); }
46 
47  void open (const std::string& name, int mode)
48  { open (name.c_str (), mode); }
49 
50  void open (const char *name, int mode);
51 
52  int is_open (void) const { return pb.is_open (); }
53 
54  int close (void);
55 
56  pid_t pid (void) const { return pb.pid (); }
57 
58  int file_number (void) const { return pb.file_number (); }
59 
60 private:
61 
63 
64  void pb_init (void) { init (&pb); }
65 
67 
69 };
70 
71 class
73 iprocstream : public std::istream, public procstreambase
74 // iprocstream : public procstreambase, public std::istream
75 {
76 public:
77 
78  iprocstream (void) : std::istream (0), procstreambase () { }
79 
80  iprocstream (const std::string& name, int mode = std::ios::in)
81  : std::istream (0), procstreambase (name, mode) { }
82 
83  iprocstream (const char *name, int mode = std::ios::in)
84  : std::istream (0), procstreambase (name, mode) { }
85 
86  ~iprocstream (void) { }
87 
88  void open (const std::string& name, int mode = std::ios::in)
89  { procstreambase::open (name, mode); }
90 
91  void open (const char *name, int mode = std::ios::in)
92  { procstreambase::open (name, mode); }
93 
94 private:
95 
96  iprocstream (const iprocstream&);
97 
99 };
100 
101 class
103 oprocstream : public std::ostream, public procstreambase
104 // oprocstream : public procstreambase, public std::ostream
105 {
106 public:
107 
108  oprocstream (void) : std::ostream (0), procstreambase () { }
109 
110  oprocstream (const std::string& name, int mode = std::ios::out)
111  : std::ostream (0), procstreambase (name, mode) { }
112 
113  oprocstream (const char *name, int mode = std::ios::out)
114  : std::ostream (0), procstreambase (name, mode) { }
115 
116  ~oprocstream (void) { }
117 
118  void open (const std::string& name, int mode = std::ios::out)
119  { procstreambase::open (name, mode); }
120 
121  void open (const char *name, int mode = std::ios::out)
122  { procstreambase::open (name, mode); }
123 
124 private:
125 
126  oprocstream (const oprocstream&);
127 
129 };
130 
131 class
133 procstream : public std::iostream, public procstreambase
134 // procstream : public procstreambase, public std::iostream
135 {
136 public:
137 
138  procstream (void) : std::iostream (0), procstreambase () { }
139 
140  procstream (const std::string& name, int mode)
141  : std::iostream (0), procstreambase (name, mode) { }
142 
143  procstream (const char *name, int mode)
144  : std::iostream (0), procstreambase (name, mode) { }
145 
146  ~procstream (void) { }
147 
148  void open (const std::string& name, int mode)
149  { procstreambase::open (name, mode); }
150 
151  void open (const char *name, int mode)
152  { procstreambase::open (name, mode); }
153 
154 private:
155 
156  procstream (const procstream&);
157 
159 };
160 
161 #endif