comparison src/interp-core/procstream.h @ 15096:909a2797935b

maint: Move interp source code without DEFUNs to interp-core/ dir. * src/Makefile.am, interpfcn/module.mk, operators/module.mk, parse-tree/module.mk: Update build system by moving source lists and rules to the correct directory. * Cell.cc, Cell.h, c-file-ptr-stream.cc, c-file-ptr-stream.h, comment-list.cc, comment-list.h, cutils.c, cutils.h, defun-dld.h, defun-int.h, display.cc, display.h, dynamic-ld.cc, dynamic-ld.h, gl-render.cc, gl-render.h, gl2ps-renderer.cc, gl2ps-renderer.h, gl2ps.c, gl2ps.h, gripes.cc, gripes.h, jit-ir.cc, jit-ir.h, jit-typeinfo.cc, jit-typeinfo.h, jit-util.cc, jit-util.h, ls-ascii-helper.cc, ls-ascii-helper.h, ls-hdf5.cc, ls-hdf5.h, ls-mat-ascii.cc, ls-mat-ascii.h, ls-mat4.cc, ls-mat4.h, ls-mat5.cc, ls-mat5.h, ls-oct-binary.cc, ls-oct-binary.h, ls-utils.cc, ls-utils.h, matherr.c, mex.cc, mex.h, mexproto.h, module.mk, mxarray.in.h, oct-errno.h, oct-errno.in.cc, oct-fstrm.cc, oct-fstrm.h, oct-hdf5.h, oct-iostrm.cc, oct-iostrm.h, oct-lvalue.cc, oct-lvalue.h, oct-map.cc, oct-map.h, oct-obj.cc, oct-obj.h, oct-prcstrm.cc, oct-prcstrm.h, oct-procbuf.cc, oct-procbuf.h, oct-stdstrm.h, oct-stream.cc, oct-stream.h, oct-strstrm.cc, oct-strstrm.h, oct.h, procstream.cc, procstream.h, pt-jit.cc, pt-jit.h, siglist.c, siglist.h, sparse-xdiv.cc, sparse-xdiv.h, sparse-xpow.cc, sparse-xpow.h, txt-eng-ft.cc, txt-eng-ft.h, txt-eng.h, unwind-prot.cc, unwind-prot.h, xdiv.cc, xdiv.h, xgl2ps.c, xnorm.cc, xnorm.h, xpow.cc, xpow.h, zfstream.cc, zfstream.h: Move from src/ dir to src/interp-core dir. * ops.h: Move to operators/ directory. * octave.gperf, token.cc, token.h: Move to parse-tree directory.
author Rik <rik@octave.org>
date Fri, 03 Aug 2012 13:18:21 -0700
parents src/procstream.h@f7afecdd87ef
children
comparison
equal deleted inserted replaced
15095:9df70a18aa27 15096:909a2797935b
1 /*
2
3 Copyright (C) 1993-2012 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
34 OCTINTERP_API
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
62 octave_procbuf pb;
63
64 void pb_init (void) { init (&pb); }
65
66 procstreambase (const procstreambase&);
67
68 procstreambase& operator = (const procstreambase&);
69 };
70
71 class
72 OCTINTERP_API
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
98 iprocstream& operator = (const iprocstream&);
99 };
100
101 class
102 OCTINTERP_API
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
128 oprocstream& operator = (const oprocstream&);
129 };
130
131 class
132 OCTINTERP_API
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
158 procstream& operator = (const procstream&);
159 };
160
161 #endif