Mercurial > octave
annotate libinterp/corefcn/procstream.h @ 33623:4517f929c59d bytecode-interpreter tip
maint: Merge default to bytecode-interpreter
author | Arun Giridhar <arungiridhar@gmail.com> |
---|---|
date | Fri, 24 May 2024 16:22:41 -0400 |
parents | 4b601ca024d5 |
children |
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 // |
32632
2e484f9f1f18
maint: update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents:
31855
diff
changeset
|
3 // Copyright (C) 1993-2024 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 |
32628
ae4e19c0a2b1
maint: Place class name and class keyword on one line.
Rik <rik@octave.org>
parents:
31855
diff
changeset
|
40 class OCTINTERP_API procstreambase : virtual public std::ios |
1 | 41 { |
1380 | 42 public: |
1965 | 43 |
31771
21f9b34eb893
maint: Eliminate "(void)" in C++ function prototypes/declarations.
Rik <rik@octave.org>
parents:
31707
diff
changeset
|
44 procstreambase () : m_pb () { pb_init (); } |
1965 | 45 |
4051 | 46 procstreambase (const std::string& name, int mode); |
47 | |
1965 | 48 procstreambase (const char *name, int mode); |
1380 | 49 |
31855
1daf8bfceac3
default or disable more ctors, dtors, and assignment ops
John W. Eaton <jwe@octave.org>
parents:
31771
diff
changeset
|
50 OCTAVE_DISABLE_COPY_MOVE (procstreambase) |
1daf8bfceac3
default or disable more ctors, dtors, and assignment ops
John W. Eaton <jwe@octave.org>
parents:
31771
diff
changeset
|
51 |
31771
21f9b34eb893
maint: Eliminate "(void)" in C++ function prototypes/declarations.
Rik <rik@octave.org>
parents:
31707
diff
changeset
|
52 ~procstreambase () { 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 |
31771
21f9b34eb893
maint: Eliminate "(void)" in C++ function prototypes/declarations.
Rik <rik@octave.org>
parents:
31707
diff
changeset
|
61 int is_open () const { return m_pb.is_open (); } |
1 | 62 |
31771
21f9b34eb893
maint: Eliminate "(void)" in C++ function prototypes/declarations.
Rik <rik@octave.org>
parents:
31707
diff
changeset
|
63 int close (); |
1380 | 64 |
31771
21f9b34eb893
maint: Eliminate "(void)" in C++ function prototypes/declarations.
Rik <rik@octave.org>
parents:
31707
diff
changeset
|
65 pid_t pid () const { return m_pb.pid (); } |
6316 | 66 |
31771
21f9b34eb893
maint: Eliminate "(void)" in C++ function prototypes/declarations.
Rik <rik@octave.org>
parents:
31707
diff
changeset
|
67 int file_number () 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 |
31771
21f9b34eb893
maint: Eliminate "(void)" in C++ function prototypes/declarations.
Rik <rik@octave.org>
parents:
31707
diff
changeset
|
73 void pb_init () |
27175
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 } |
1 | 79 }; |
80 | |
32628
ae4e19c0a2b1
maint: Place class name and class keyword on one line.
Rik <rik@octave.org>
parents:
31855
diff
changeset
|
81 class OCTINTERP_API iprocstream : public std::istream, public procstreambase |
1965 | 82 { |
83 public: | |
84 | |
31771
21f9b34eb893
maint: Eliminate "(void)" in C++ function prototypes/declarations.
Rik <rik@octave.org>
parents:
31707
diff
changeset
|
85 iprocstream () : std::istream (nullptr), procstreambase () { } |
1965 | 86 |
4051 | 87 iprocstream (const std::string& name, int mode = std::ios::in) |
27172 | 88 : std::istream (nullptr), procstreambase (name, mode) |
89 { } | |
4051 | 90 |
3544 | 91 iprocstream (const char *name, int mode = std::ios::in) |
27172 | 92 : std::istream (nullptr), procstreambase (name, mode) |
93 { } | |
1965 | 94 |
31855
1daf8bfceac3
default or disable more ctors, dtors, and assignment ops
John W. Eaton <jwe@octave.org>
parents:
31771
diff
changeset
|
95 OCTAVE_DISABLE_COPY_MOVE (iprocstream) |
1daf8bfceac3
default or disable more ctors, dtors, and assignment ops
John W. Eaton <jwe@octave.org>
parents:
31771
diff
changeset
|
96 |
31771
21f9b34eb893
maint: Eliminate "(void)" in C++ function prototypes/declarations.
Rik <rik@octave.org>
parents:
31707
diff
changeset
|
97 ~iprocstream () = default; |
1965 | 98 |
4051 | 99 void open (const std::string& name, int mode = std::ios::in) |
27172 | 100 { |
101 procstreambase::open (name, mode); | |
102 } | |
4051 | 103 |
3544 | 104 void open (const char *name, int mode = std::ios::in) |
27172 | 105 { |
106 procstreambase::open (name, mode); | |
107 } | |
1965 | 108 }; |
1448 | 109 |
32628
ae4e19c0a2b1
maint: Place class name and class keyword on one line.
Rik <rik@octave.org>
parents:
31855
diff
changeset
|
110 class OCTINTERP_API oprocstream : public std::ostream, public procstreambase |
1 | 111 { |
1380 | 112 public: |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11584
diff
changeset
|
113 |
31771
21f9b34eb893
maint: Eliminate "(void)" in C++ function prototypes/declarations.
Rik <rik@octave.org>
parents:
31707
diff
changeset
|
114 oprocstream () : std::ostream (nullptr), procstreambase () { } |
1 | 115 |
4051 | 116 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
|
117 : std::ostream (nullptr), procstreambase (name, mode) { } |
4051 | 118 |
3544 | 119 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
|
120 : std::ostream (nullptr), procstreambase (name, mode) { } |
1 | 121 |
31855
1daf8bfceac3
default or disable more ctors, dtors, and assignment ops
John W. Eaton <jwe@octave.org>
parents:
31771
diff
changeset
|
122 OCTAVE_DISABLE_COPY_MOVE (oprocstream) |
1daf8bfceac3
default or disable more ctors, dtors, and assignment ops
John W. Eaton <jwe@octave.org>
parents:
31771
diff
changeset
|
123 |
31771
21f9b34eb893
maint: Eliminate "(void)" in C++ function prototypes/declarations.
Rik <rik@octave.org>
parents:
31707
diff
changeset
|
124 ~oprocstream () = default; |
1380 | 125 |
4051 | 126 void open (const std::string& name, int mode = std::ios::out) |
27172 | 127 { |
128 procstreambase::open (name, mode); | |
129 } | |
4051 | 130 |
3544 | 131 void open (const char *name, int mode = std::ios::out) |
27172 | 132 { |
133 procstreambase::open (name, mode); | |
134 } | |
1 | 135 }; |
136 | |
32628
ae4e19c0a2b1
maint: Place class name and class keyword on one line.
Rik <rik@octave.org>
parents:
31855
diff
changeset
|
137 class OCTINTERP_API procstream : public std::iostream, public procstreambase |
1965 | 138 { |
139 public: | |
140 | |
31771
21f9b34eb893
maint: Eliminate "(void)" in C++ function prototypes/declarations.
Rik <rik@octave.org>
parents:
31707
diff
changeset
|
141 procstream () : std::iostream (nullptr), procstreambase () { } |
1965 | 142 |
4051 | 143 procstream (const std::string& name, int mode) |
27172 | 144 : std::iostream (nullptr), procstreambase (name, mode) |
145 { } | |
4051 | 146 |
1965 | 147 procstream (const char *name, int mode) |
27172 | 148 : std::iostream (nullptr), procstreambase (name, mode) |
149 { } | |
1965 | 150 |
31855
1daf8bfceac3
default or disable more ctors, dtors, and assignment ops
John W. Eaton <jwe@octave.org>
parents:
31771
diff
changeset
|
151 OCTAVE_DISABLE_COPY_MOVE (procstream) |
1daf8bfceac3
default or disable more ctors, dtors, and assignment ops
John W. Eaton <jwe@octave.org>
parents:
31771
diff
changeset
|
152 |
31771
21f9b34eb893
maint: Eliminate "(void)" in C++ function prototypes/declarations.
Rik <rik@octave.org>
parents:
31707
diff
changeset
|
153 ~procstream () = default; |
1965 | 154 |
4051 | 155 void open (const std::string& name, int mode) |
27172 | 156 { |
157 procstreambase::open (name, mode); | |
158 } | |
4051 | 159 |
1965 | 160 void open (const char *name, int mode) |
27172 | 161 { |
162 procstreambase::open (name, mode); | |
163 } | |
1965 | 164 }; |
1448 | 165 |
31605
e88a07dec498
maint: Use macros to begin/end C++ namespaces.
Rik <rik@octave.org>
parents:
30564
diff
changeset
|
166 OCTAVE_END_NAMESPACE(octave) |
29991
3988112c7116
move i/o stream classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
167 |
1 | 168 #endif |