Mercurial > octave
annotate liboctave/util/action-container.h @ 22869:f75d289645ec
make deleted functions public
* octave-gui.h, resource-manager.h, shortcut-manager.h,
base-text-renderer.h, c-file-ptr-stream.h, dynamic-ld.cc,
dynamic-ld.h, event-queue.h, ft-text-renderer.cc, gl-render.cc,
gl-render.h, graphics.cc, graphics.in.h, interpreter.h, mex.cc,
mxarray.in.h, oct-fstrm.h, oct-iostrm.h, oct-prcstrm.h,
oct-procbuf.h, oct-stdstrm.h, oct-stream.cc, oct-stream.h,
oct-strstrm.h, octave-link.h, pager.h, profiler.h, sighandlers.cc,
symtab.h, text-renderer.h, zfstream.h, __init_fltk__.cc,
ov-builtin.h, ov-dld-fcn.h, ov-fcn.h, ov-mex-fcn.h, ov-typeinfo.h,
ov-usr-fcn.h, octave.h, lex.h, parse.h, pt-arg-list.h,
pt-array-list.h, pt-assign.h, pt-binop.h, pt-bp.h, pt-cell.h,
pt-check.h, pt-classdef.h, pt-cmd.h, pt-colon.h, pt-const.h,
pt-decl.h, pt-eval.h, pt-except.h, pt-exp.h, pt-fcn-handle.h,
pt-funcall.h, pt-id.h, pt-idx.h, pt-jump.h, pt-loop.h, pt-mat.h,
pt-misc.h, pt-pr-code.h, pt-select.h, pt-stmt.h, pt-unop.h,
pt-walk.h, pt.h, token.h, Array.cc, idx-vector.h, oct-fftw.h,
sparse-chol.cc, sparse-qr.cc, file-ops.h, mach-info.h, oct-env.h,
action-container.h, cmd-edit.cc, cmd-edit.h, cmd-hist.h,
oct-locbuf.h, oct-mutex.h, oct-shlib.cc, oct-sort.h, pathsearch.h,
singleton-cleanup.h, unwind-prot.h, url-transfer.cc, url-transfer.h:
Declare deleted copy constructors and assignment operators public.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Tue, 06 Dec 2016 12:40:45 -0500 |
parents | 87e3163f6c87 |
children | ef4d915df748 |
rev | line source |
---|---|
15396 | 1 /* |
2 | |
22323
bac0d6f07a3e
maint: Update copyright notices for 2016.
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
3 Copyright (C) 1993-2016 John W. Eaton |
15396 | 4 Copyright (C) 2009-2010 VZLU Prague |
5 | |
6 This file is part of Octave. | |
7 | |
8 Octave is free software; you can redistribute it and/or modify it | |
22755
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22402
diff
changeset
|
9 under the terms of the GNU General Public License as published by |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22402
diff
changeset
|
10 the Free Software Foundation; either version 3 of the License, or |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22402
diff
changeset
|
11 (at your option) any later version. |
15396 | 12 |
22755
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22402
diff
changeset
|
13 Octave is distributed in the hope that it will be useful, but |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22402
diff
changeset
|
14 WITHOUT ANY WARRANTY; without even the implied warranty of |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22402
diff
changeset
|
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22402
diff
changeset
|
16 GNU General Public License for more details. |
15396 | 17 |
18 You should have received a copy of the GNU General Public License | |
19 along with Octave; see the file COPYING. If not, see | |
20 <http://www.gnu.org/licenses/>. | |
21 | |
22 */ | |
23 | |
20791
f7084eae3318
maint: Use Octave coding conventions for #if statements.
Rik <rik@octave.org>
parents:
19697
diff
changeset
|
24 #if ! defined (octave_action_container_h) |
15396 | 25 #define octave_action_container_h 1 |
26 | |
21244
1473547f50f5
include octave-config.h in public header files
John W. Eaton <jwe@octave.org>
parents:
21139
diff
changeset
|
27 #include "octave-config.h" |
1473547f50f5
include octave-config.h in public header files
John W. Eaton <jwe@octave.org>
parents:
21139
diff
changeset
|
28 |
15396 | 29 // This class allows registering actions in a list for later |
30 // execution, either explicitly or when the container goes out of | |
31 // scope. | |
32 | |
17769
49a5a4be04a1
maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
33 // FIXME: is there a better name for this class? |
15396 | 34 |
35 class | |
36 action_container | |
37 { | |
38 public: | |
39 | |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21244
diff
changeset
|
40 // A generic unwind_protect element. Knows how to run itself and |
15396 | 41 // discard itself. Also, contains a pointer to the next element. |
42 class elem | |
43 { | |
44 public: | |
45 | |
46 friend class action_container; | |
47 | |
22869
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
48 elem (void) { } |
15396 | 49 |
50 // No copying! | |
51 | |
22865
89756f2f085b
use c++11 style for deleting default copy constructor and assignment operator
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
52 elem (const elem&) = delete; |
15396 | 53 |
22865
89756f2f085b
use c++11 style for deleting default copy constructor and assignment operator
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
54 elem& operator = (const elem&) = delete; |
22869
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
55 |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
56 virtual ~elem (void) = default; |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
57 |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
58 virtual void run (void) { } |
15396 | 59 }; |
60 | |
61 // An element that merely runs a void (*)(void) function. | |
62 | |
63 class fcn_elem : public elem | |
64 { | |
65 public: | |
22869
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
66 |
15396 | 67 fcn_elem (void (*fptr) (void)) |
68 : e_fptr (fptr) { } | |
69 | |
70 void run (void) { e_fptr (); } | |
71 | |
72 private: | |
22869
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
73 |
15396 | 74 void (*e_fptr) (void); |
75 }; | |
76 | |
77 // An element that stores a variable of type T along with a void (*) (T) | |
78 // function pointer, and calls the function with the parameter. | |
79 | |
21139
538b57866b90
consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
80 template <typename T> |
15396 | 81 class fcn_arg_elem : public elem |
82 { | |
83 public: | |
22869
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
84 |
15396 | 85 fcn_arg_elem (void (*fcn) (T), T arg) |
86 : e_fcn (fcn), e_arg (arg) { } | |
87 | |
88 // No copying! | |
89 | |
22865
89756f2f085b
use c++11 style for deleting default copy constructor and assignment operator
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
90 fcn_arg_elem (const fcn_arg_elem&) = delete; |
15396 | 91 |
22865
89756f2f085b
use c++11 style for deleting default copy constructor and assignment operator
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
92 fcn_arg_elem& operator = (const fcn_arg_elem&) = delete; |
15396 | 93 |
22869
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
94 void run (void) { e_fcn (e_arg); } |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
95 |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
96 private: |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
97 |
15396 | 98 void (*e_fcn) (T); |
22869
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
99 |
15396 | 100 T e_arg; |
101 }; | |
102 | |
103 // An element that stores a variable of type T along with a | |
104 // void (*) (const T&) function pointer, and calls the function with | |
105 // the parameter. | |
106 | |
21139
538b57866b90
consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
107 template <typename T> |
15396 | 108 class fcn_crefarg_elem : public elem |
109 { | |
110 public: | |
22869
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
111 |
15396 | 112 fcn_crefarg_elem (void (*fcn) (const T&), const T& arg) |
113 : e_fcn (fcn), e_arg (arg) { } | |
114 | |
115 void run (void) { e_fcn (e_arg); } | |
116 | |
117 private: | |
22869
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
118 |
15396 | 119 void (*e_fcn) (const T&); |
22869
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
120 |
15396 | 121 T e_arg; |
122 }; | |
123 | |
124 // An element for calling a member function. | |
125 | |
21139
538b57866b90
consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
126 template <typename T> |
15396 | 127 class method_elem : public elem |
128 { | |
129 public: | |
22869
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
130 |
15396 | 131 method_elem (T *obj, void (T::*method) (void)) |
132 : e_obj (obj), e_method (method) { } | |
133 | |
22869
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
134 // No copying! |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
135 |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
136 method_elem (const method_elem&) = delete; |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
137 |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
138 method_elem operator = (const method_elem&) = delete; |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
139 |
15396 | 140 void run (void) { (e_obj->*e_method) (); } |
141 | |
142 private: | |
143 | |
144 T *e_obj; | |
22869
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
145 |
15396 | 146 void (T::*e_method) (void); |
147 }; | |
148 | |
149 // An element for calling a member function with a single argument | |
150 | |
21139
538b57866b90
consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
151 template <typename T, typename A> |
15396 | 152 class method_arg_elem : public elem |
153 { | |
154 public: | |
22869
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
155 |
15396 | 156 method_arg_elem (T *obj, void (T::*method) (A), A arg) |
157 : e_obj (obj), e_method (method), e_arg (arg) { } | |
158 | |
22869
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
159 // No copying! |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
160 |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
161 method_arg_elem (const method_arg_elem&) = delete; |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
162 |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
163 method_arg_elem operator = (const method_arg_elem&) = delete; |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
164 |
15396 | 165 void run (void) { (e_obj->*e_method) (e_arg); } |
166 | |
167 private: | |
168 | |
169 T *e_obj; | |
170 | |
22869
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
171 void (T::*e_method) (A); |
15396 | 172 |
22869
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
173 A e_arg; |
15396 | 174 }; |
175 | |
176 // An element for calling a member function with a single argument | |
177 | |
21139
538b57866b90
consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
178 template <typename T, typename A> |
15396 | 179 class method_crefarg_elem : public elem |
180 { | |
181 public: | |
22869
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
182 |
15396 | 183 method_crefarg_elem (T *obj, void (T::*method) (const A&), const A& arg) |
184 : e_obj (obj), e_method (method), e_arg (arg) { } | |
185 | |
22869
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
186 // No copying! |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
187 |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
188 method_crefarg_elem (const method_crefarg_elem&) = delete; |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
189 |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
190 method_crefarg_elem operator = (const method_crefarg_elem&) = delete; |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
191 |
15396 | 192 void run (void) { (e_obj->*e_method) (e_arg); } |
193 | |
194 private: | |
195 | |
196 T *e_obj; | |
197 | |
22869
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
198 void (T::*e_method) (const A&); |
15396 | 199 |
22869
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
200 A e_arg; |
15396 | 201 }; |
202 | |
203 // An element that stores arbitrary variable, and restores it. | |
204 | |
21139
538b57866b90
consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
205 template <typename T> |
15396 | 206 class restore_var_elem : public elem |
207 { | |
208 public: | |
22869
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
209 |
15396 | 210 restore_var_elem (T& ref, const T& val) |
211 : e_ptr (&ref), e_val (val) { } | |
212 | |
213 // No copying! | |
214 | |
22865
89756f2f085b
use c++11 style for deleting default copy constructor and assignment operator
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
215 restore_var_elem (const restore_var_elem&) = delete; |
15396 | 216 |
22865
89756f2f085b
use c++11 style for deleting default copy constructor and assignment operator
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
217 restore_var_elem& operator = (const restore_var_elem&) = delete; |
15396 | 218 |
22869
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
219 void run (void) { *e_ptr = e_val; } |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
220 |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
221 private: |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
222 |
15396 | 223 T *e_ptr, e_val; |
224 }; | |
225 | |
226 // Deletes a class allocated using new. | |
227 | |
21139
538b57866b90
consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
228 template <typename T> |
15396 | 229 class delete_ptr_elem : public elem |
230 { | |
231 public: | |
22869
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
232 |
15396 | 233 delete_ptr_elem (T *ptr) |
234 : e_ptr (ptr) { } | |
235 | |
22869
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
236 // No copying! |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
237 |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
238 delete_ptr_elem (const delete_ptr_elem&) = delete; |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
239 |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
240 delete_ptr_elem operator = (const delete_ptr_elem&) = delete; |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
241 |
15396 | 242 void run (void) { delete e_ptr; } |
243 | |
244 private: | |
245 | |
246 T *e_ptr; | |
247 }; | |
248 | |
249 action_container (void) { } | |
250 | |
22869
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
251 // No copying! |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
252 |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
253 action_container (const action_container&) = delete; |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
254 |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
255 action_container& operator = (const action_container&) = delete; |
f75d289645ec
make deleted functions public
John W. Eaton <jwe@octave.org>
parents:
22868
diff
changeset
|
256 |
22868
87e3163f6c87
use c++11 "= default" syntax for declaration of trivial destructors
John W. Eaton <jwe@octave.org>
parents:
22865
diff
changeset
|
257 virtual ~action_container (void) = default; |
15396 | 258 |
259 virtual void add (elem *new_elem) = 0; | |
260 | |
261 // Call to void func (void). | |
262 void add_fcn (void (*fcn) (void)) | |
263 { | |
264 add (new fcn_elem (fcn)); | |
265 } | |
266 | |
267 // Call to void func (T). | |
21139
538b57866b90
consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
268 template <typename T> |
15396 | 269 void add_fcn (void (*action) (T), T val) |
270 { | |
271 add (new fcn_arg_elem<T> (action, val)); | |
272 } | |
273 | |
274 // Call to void func (const T&). | |
21139
538b57866b90
consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
275 template <typename T> |
15396 | 276 void add_fcn (void (*action) (const T&), const T& val) |
277 { | |
278 add (new fcn_crefarg_elem<T> (action, val)); | |
279 } | |
280 | |
281 // Call to T::method (void). | |
21139
538b57866b90
consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
282 template <typename T> |
15396 | 283 void add_method (T *obj, void (T::*method) (void)) |
284 { | |
285 add (new method_elem<T> (obj, method)); | |
286 } | |
287 | |
288 // Call to T::method (A). | |
21139
538b57866b90
consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
289 template <typename T, typename A> |
15396 | 290 void add_method (T *obj, void (T::*method) (A), A arg) |
291 { | |
292 add (new method_arg_elem<T, A> (obj, method, arg)); | |
293 } | |
294 | |
295 // Call to T::method (const A&). | |
21139
538b57866b90
consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
296 template <typename T, typename A> |
15396 | 297 void add_method (T *obj, void (T::*method) (const A&), const A& arg) |
298 { | |
299 add (new method_crefarg_elem<T, A> (obj, method, arg)); | |
300 } | |
301 | |
302 // Call to delete (T*). | |
303 | |
21139
538b57866b90
consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
304 template <typename T> |
15396 | 305 void add_delete (T *obj) |
306 { | |
307 add (new delete_ptr_elem<T> (obj)); | |
308 } | |
309 | |
310 // Protect any variable. | |
21139
538b57866b90
consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
311 template <typename T> |
15396 | 312 void protect_var (T& var) |
313 { | |
314 add (new restore_var_elem<T> (var, var)); | |
315 } | |
316 | |
317 // Protect any variable, value given. | |
21139
538b57866b90
consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
318 template <typename T> |
15396 | 319 void protect_var (T& var, const T& val) |
320 { | |
321 add (new restore_var_elem<T> (var, val)); | |
322 } | |
323 | |
324 operator bool (void) const { return ! empty (); } | |
325 | |
326 virtual void run_first (void) = 0; | |
327 | |
328 void run (size_t num) | |
329 { | |
330 if (num > size ()) | |
331 num = size (); | |
332 | |
333 for (size_t i = 0; i < num; i++) | |
334 run_first (); | |
335 } | |
336 | |
337 void run (void) { run (size ()); } | |
338 | |
339 virtual void discard_first (void) = 0; | |
340 | |
341 void discard (size_t num) | |
342 { | |
343 if (num > size ()) | |
344 num = size (); | |
345 | |
346 for (size_t i = 0; i < num; i++) | |
347 discard_first (); | |
348 } | |
349 | |
350 void discard (void) { discard (size ()); } | |
351 | |
352 virtual size_t size (void) const = 0; | |
353 | |
354 bool empty (void) const { return size () == 0; } | |
355 }; | |
356 | |
357 #endif | |
22402
4caa7b28d183
maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
358 |