Mercurial > octave
annotate libinterp/corefcn/procstream.h @ 31606:dfa5d9c3ae72
maint: merge stable to default
author | Rik <rik@octave.org> |
---|---|
date | Thu, 01 Dec 2022 14:28:07 -0800 |
parents | 2aa5bcaba504 e88a07dec498 |
children | 5f11de0e7440 |
rev | line source |
---|---|
27923
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
1 //////////////////////////////////////////////////////////////////////// |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
2 // |
30564
796f54d4ddbf
update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents:
29991
diff
changeset
|
3 // Copyright (C) 1993-2022 The Octave Project Developers |
27923
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
4 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
5 // See the file COPYRIGHT.md in the top-level directory of this |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
6 // distribution or <https://octave.org/copyright/>. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
7 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
8 // This file is part of Octave. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
9 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
10 // Octave is free software: you can redistribute it and/or modify it |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
11 // under the terms of the GNU General Public License as published by |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
12 // the Free Software Foundation, either version 3 of the License, or |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
13 // (at your option) any later version. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
14 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
15 // Octave is distributed in the hope that it will be useful, but |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
16 // WITHOUT ANY WARRANTY; without even the implied warranty of |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
18 // GNU General Public License for more details. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
19 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
20 // You should have received a copy of the GNU General Public License |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
21 // along with Octave; see the file COPYING. If not, see |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
22 // <https://www.gnu.org/licenses/>. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
23 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
24 //////////////////////////////////////////////////////////////////////// |
1 | 25 |
20791
f7084eae3318
maint: Use Octave coding conventions for #if statements.
Rik <rik@octave.org>
parents:
20088
diff
changeset
|
26 #if ! defined (octave_procstream_h) |
383 | 27 #define octave_procstream_h 1 |
1 | 28 |
21244
1473547f50f5
include octave-config.h in public header files
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
29 #include "octave-config.h" |
1473547f50f5
include octave-config.h in public header files
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
30 |
25438
cb1606f78f6b
prefer <istream>, <ostream>, or <iosfwd> to <iostream> where possible
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
31 #include <iosfwd> |
4051 | 32 #include <string> |
2095 | 33 |
34 #include <sys/types.h> | |
35 | |
36 #include "oct-procbuf.h" | |
1 | 37 |
31605
e88a07dec498
maint: Use macros to begin/end C++ namespaces.
Rik <rik@octave.org>
parents:
30564
diff
changeset
|
38 OCTAVE_BEGIN_NAMESPACE(octave) |
29991
3988112c7116
move i/o stream classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
39 |
1 | 40 class |
6109 | 41 OCTINTERP_API |
3544 | 42 procstreambase : virtual public std::ios |
1 | 43 { |
1380 | 44 public: |
1965 | 45 |
27175
613a31410ad0
backout changeset 196dfb42f3e9
John W. Eaton <jwe@octave.org>
parents:
27172
diff
changeset
|
46 procstreambase (void) : m_pb () { pb_init (); } |
1965 | 47 |
4051 | 48 procstreambase (const std::string& name, int mode); |
49 | |
1965 | 50 procstreambase (const char *name, int mode); |
1380 | 51 |
1965 | 52 ~procstreambase (void) { close (); } |
1 | 53 |
4051 | 54 void open (const std::string& name, int mode) |
27172 | 55 { |
56 open (name.c_str (), mode); | |
57 } | |
4051 | 58 |
1965 | 59 void open (const char *name, int mode); |
1380 | 60 |
27172 | 61 int is_open (void) const { return m_pb.is_open (); } |
1 | 62 |
483 | 63 int close (void); |
1380 | 64 |
27172 | 65 pid_t pid (void) const { return m_pb.pid (); } |
6316 | 66 |
27172 | 67 int file_number (void) const { return m_pb.file_number (); } |
2095 | 68 |
1380 | 69 private: |
1965 | 70 |
29991
3988112c7116
move i/o stream classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
71 procbuf m_pb; |
1965 | 72 |
27175
613a31410ad0
backout changeset 196dfb42f3e9
John W. Eaton <jwe@octave.org>
parents:
27172
diff
changeset
|
73 void pb_init (void) |
613a31410ad0
backout changeset 196dfb42f3e9
John W. Eaton <jwe@octave.org>
parents:
27172
diff
changeset
|
74 { |
613a31410ad0
backout changeset 196dfb42f3e9
John W. Eaton <jwe@octave.org>
parents:
27172
diff
changeset
|
75 // Explicit initialization of the std::ios object is needed. |
613a31410ad0
backout changeset 196dfb42f3e9
John W. Eaton <jwe@octave.org>
parents:
27172
diff
changeset
|
76 // FIXME: is there a better way to organize these classes? |
27176
0112951951a9
missing edit for previous change
John W. Eaton <jwe@octave.org>
parents:
27175
diff
changeset
|
77 init (&m_pb); |
27175
613a31410ad0
backout changeset 196dfb42f3e9
John W. Eaton <jwe@octave.org>
parents:
27172
diff
changeset
|
78 } |
613a31410ad0
backout changeset 196dfb42f3e9
John W. Eaton <jwe@octave.org>
parents:
27172
diff
changeset
|
79 |
1965 | 80 procstreambase (const procstreambase&); |
81 | |
82 procstreambase& operator = (const procstreambase&); | |
1 | 83 }; |
84 | |
1965 | 85 class |
6109 | 86 OCTINTERP_API |
3775 | 87 iprocstream : public std::istream, public procstreambase |
1965 | 88 { |
89 public: | |
90 | |
23795
980f39c3ab90
Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
91 iprocstream (void) : std::istream (nullptr), procstreambase () { } |
1965 | 92 |
4051 | 93 iprocstream (const std::string& name, int mode = std::ios::in) |
27172 | 94 : std::istream (nullptr), procstreambase (name, mode) |
95 { } | |
4051 | 96 |
3544 | 97 iprocstream (const char *name, int mode = std::ios::in) |
27172 | 98 : std::istream (nullptr), procstreambase (name, mode) |
99 { } | |
1965 | 100 |
22868
87e3163f6c87
use c++11 "= default" syntax for declaration of trivial destructors
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
101 ~iprocstream (void) = default; |
1965 | 102 |
4051 | 103 void open (const std::string& name, int mode = std::ios::in) |
27172 | 104 { |
105 procstreambase::open (name, mode); | |
106 } | |
4051 | 107 |
3544 | 108 void open (const char *name, int mode = std::ios::in) |
27172 | 109 { |
110 procstreambase::open (name, mode); | |
111 } | |
1965 | 112 |
113 private: | |
114 | |
115 iprocstream (const iprocstream&); | |
116 | |
117 iprocstream& operator = (const iprocstream&); | |
118 }; | |
1448 | 119 |
1 | 120 class |
6109 | 121 OCTINTERP_API |
3775 | 122 oprocstream : public std::ostream, public procstreambase |
1 | 123 { |
1380 | 124 public: |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11584
diff
changeset
|
125 |
23795
980f39c3ab90
Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
126 oprocstream (void) : std::ostream (nullptr), procstreambase () { } |
1 | 127 |
4051 | 128 oprocstream (const std::string& name, int mode = std::ios::out) |
23795
980f39c3ab90
Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
129 : std::ostream (nullptr), procstreambase (name, mode) { } |
4051 | 130 |
3544 | 131 oprocstream (const char *name, int mode = std::ios::out) |
23795
980f39c3ab90
Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
132 : std::ostream (nullptr), procstreambase (name, mode) { } |
1 | 133 |
22868
87e3163f6c87
use c++11 "= default" syntax for declaration of trivial destructors
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
134 ~oprocstream (void) = default; |
1380 | 135 |
4051 | 136 void open (const std::string& name, int mode = std::ios::out) |
27172 | 137 { |
138 procstreambase::open (name, mode); | |
139 } | |
4051 | 140 |
3544 | 141 void open (const char *name, int mode = std::ios::out) |
27172 | 142 { |
143 procstreambase::open (name, mode); | |
144 } | |
1380 | 145 |
146 private: | |
1965 | 147 |
148 oprocstream (const oprocstream&); | |
149 | |
150 oprocstream& operator = (const oprocstream&); | |
1 | 151 }; |
152 | |
1965 | 153 class |
6109 | 154 OCTINTERP_API |
3775 | 155 procstream : public std::iostream, public procstreambase |
1965 | 156 { |
157 public: | |
158 | |
23795
980f39c3ab90
Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
159 procstream (void) : std::iostream (nullptr), procstreambase () { } |
1965 | 160 |
4051 | 161 procstream (const std::string& name, int mode) |
27172 | 162 : std::iostream (nullptr), procstreambase (name, mode) |
163 { } | |
4051 | 164 |
1965 | 165 procstream (const char *name, int mode) |
27172 | 166 : std::iostream (nullptr), procstreambase (name, mode) |
167 { } | |
1965 | 168 |
22868
87e3163f6c87
use c++11 "= default" syntax for declaration of trivial destructors
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
169 ~procstream (void) = default; |
1965 | 170 |
4051 | 171 void open (const std::string& name, int mode) |
27172 | 172 { |
173 procstreambase::open (name, mode); | |
174 } | |
4051 | 175 |
1965 | 176 void open (const char *name, int mode) |
27172 | 177 { |
178 procstreambase::open (name, mode); | |
179 } | |
1965 | 180 |
181 private: | |
182 | |
183 procstream (const procstream&); | |
184 | |
185 procstream& operator = (const procstream&); | |
186 }; | |
1448 | 187 |
31605
e88a07dec498
maint: Use macros to begin/end C++ namespaces.
Rik <rik@octave.org>
parents:
30564
diff
changeset
|
188 OCTAVE_END_NAMESPACE(octave) |
29991
3988112c7116
move i/o stream classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
189 |
1 | 190 #endif |