Mercurial > octave
annotate libinterp/corefcn/hook-fcn.h @ 29358:0a5b15007766 stable
update Octave Project Developers copyright for the new year
In files that have the "Octave Project Developers" copyright notice,
update for 2021.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Wed, 10 Feb 2021 09:52:15 -0500 |
parents | bd51beb6205e |
children | ed90a4d75f6d 7f5bd197fea6 |
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 // |
29358
0a5b15007766
update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
3 // Copyright (C) 2013-2021 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 //////////////////////////////////////////////////////////////////////// |
16384
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
25 |
20791
f7084eae3318
maint: Use Octave coding conventions for #if statements.
Rik <rik@octave.org>
parents:
19697
diff
changeset
|
26 #if ! defined (octave_hook_fcn_h) |
16384
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
27 #define octave_hook_fcn_h 1 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
28 |
21244
1473547f50f5
include octave-config.h in public header files
John W. Eaton <jwe@octave.org>
parents:
21017
diff
changeset
|
29 #include "octave-config.h" |
1473547f50f5
include octave-config.h in public header files
John W. Eaton <jwe@octave.org>
parents:
21017
diff
changeset
|
30 |
16384
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
31 #include <string> |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
32 |
20940
48b2ad5ee801
maint: Rename oct-obj.[cc|h] to ovl.[cc|h] for clarity.
Rik <rik@octave.org>
parents:
20791
diff
changeset
|
33 #include "ovl.h" |
16384
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
34 #include "ov.h" |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
35 #include "ov-fcn-handle.h" |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
36 #include "variables.h" |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
37 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
38 class |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
39 base_hook_function |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
40 { |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
41 public: |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
42 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
43 friend class hook_function; |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
44 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
45 base_hook_function (void) : count (1) { } |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
46 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
47 base_hook_function (const base_hook_function&) : count (1) { } |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
48 |
22868
87e3163f6c87
use c++11 "= default" syntax for declaration of trivial destructors
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
49 virtual ~base_hook_function (void) = default; |
16384
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
50 |
25407
ab10403a0b50
new input_system class to manage user input for the interpreter
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
51 virtual std::string id (void) const { return ""; } |
16384
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
52 |
25407
ab10403a0b50
new input_system class to manage user input for the interpreter
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
53 virtual bool is_valid (void) const { return false; } |
16384
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
54 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
55 virtual void eval (const octave_value_list&) { } |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
56 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
57 protected: |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
58 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
59 size_t count; |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
60 }; |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
61 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
62 class |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
63 hook_function |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
64 { |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
65 public: |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
66 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
67 hook_function (void) |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
68 { |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
69 static base_hook_function nil_rep; |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
70 rep = &nil_rep; |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
71 rep->count++; |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
72 } |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
73 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
74 hook_function (const octave_value& f, |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
75 const octave_value& d = octave_value ()); |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
76 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
77 ~hook_function (void) |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
78 { |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
79 if (--rep->count == 0) |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
80 delete rep; |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
81 } |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
82 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
83 hook_function (const hook_function& hf) |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
84 : rep (hf.rep) |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
85 { |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
86 rep->count++; |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
87 } |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
88 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
89 hook_function& operator = (const hook_function& hf) |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
90 { |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
91 if (rep != hf.rep) |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
92 { |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
93 if (--rep->count == 0) |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
94 delete rep; |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
95 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
96 rep = hf.rep; |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
97 rep->count++; |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
98 } |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
99 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
100 return *this; |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
101 } |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
102 |
25407
ab10403a0b50
new input_system class to manage user input for the interpreter
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
103 std::string id (void) const { return rep->id (); } |
16384
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
104 |
25407
ab10403a0b50
new input_system class to manage user input for the interpreter
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
105 bool is_valid (void) const { return rep->is_valid (); } |
16384
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
106 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
107 void eval (const octave_value_list& initial_args) |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
108 { |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
109 rep->eval (initial_args); |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
110 } |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
111 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
112 private: |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
113 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
114 base_hook_function *rep; |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
115 }; |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
116 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
117 class |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
118 named_hook_function : public base_hook_function |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
119 { |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
120 public: |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
121 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
122 named_hook_function (const std::string& n, const octave_value& d) |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
123 : name (n), data (d) |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
124 { } |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
125 |
25407
ab10403a0b50
new input_system class to manage user input for the interpreter
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
126 void eval (const octave_value_list& initial_args); |
16384
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
127 |
25407
ab10403a0b50
new input_system class to manage user input for the interpreter
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
128 std::string id (void) const { return name; } |
16384
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
129 |
25407
ab10403a0b50
new input_system class to manage user input for the interpreter
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
130 bool is_valid (void) const { return is_valid_function (name); } |
16384
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
131 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
132 private: |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
133 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
134 std::string name; |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
135 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
136 octave_value data; |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
137 }; |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
138 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
139 class |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
140 fcn_handle_hook_function : public base_hook_function |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
141 { |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
142 public: |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
143 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
144 fcn_handle_hook_function (const octave_value& fh_arg, const octave_value& d) |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
145 : ident (), valid (false), fcn_handle (fh_arg), data (d) |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
146 { |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
147 octave_fcn_handle *fh = fcn_handle.fcn_handle_value (true); |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
148 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
149 if (fh) |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
150 { |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
151 valid = true; |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
152 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
153 std::ostringstream buf; |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
154 buf << fh; |
23807
336f89b6208b
Use character literals 'c' rather than string literals "c" when possible.
Rik <rik@octave.org>
parents:
23473
diff
changeset
|
155 ident = fh->fcn_name () + ':' + buf.str (); |
16384
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
156 } |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
157 } |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
158 |
25407
ab10403a0b50
new input_system class to manage user input for the interpreter
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
159 void eval (const octave_value_list& initial_args); |
16384
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
160 |
25407
ab10403a0b50
new input_system class to manage user input for the interpreter
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
161 std::string id (void) const { return ident; } |
16384
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
162 |
25407
ab10403a0b50
new input_system class to manage user input for the interpreter
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
163 bool is_valid (void) const { return valid; } |
16384
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
164 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
165 private: |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
166 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
167 std::string ident; |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
168 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
169 bool valid; |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
170 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
171 octave_value fcn_handle; |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
172 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
173 octave_value data; |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
174 }; |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
175 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
176 class |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
177 hook_function_list |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
178 { |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
179 public: |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
180 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
181 typedef std::map<std::string, hook_function> map_type; |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
182 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
183 typedef map_type::iterator iterator; |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
184 typedef map_type::const_iterator const_iterator; |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
185 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
186 hook_function_list (void) : fcn_map () { } |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
187 |
22868
87e3163f6c87
use c++11 "= default" syntax for declaration of trivial destructors
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
188 ~hook_function_list (void) = default; |
16384
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
189 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
190 hook_function_list (const hook_function_list& lst) |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
191 : fcn_map (lst.fcn_map) |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
192 { } |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
193 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
194 hook_function_list& operator = (const hook_function_list& lst) |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
195 { |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
196 if (&lst != this) |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
197 fcn_map = lst.fcn_map; |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
198 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
199 return *this; |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
200 } |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
201 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
202 bool empty (void) const { return fcn_map.empty (); } |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
203 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
204 void clear (void) { fcn_map.clear (); } |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
205 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
206 void insert (const std::string& id, const hook_function& f) |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
207 { |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
208 fcn_map[id] = f; |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
209 } |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
210 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
211 iterator find (const std::string& id) |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
212 { |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
213 return fcn_map.find (id); |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
214 } |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
215 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
216 const_iterator find (const std::string& id) const |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
217 { |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
218 return fcn_map.find (id); |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
219 } |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
220 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
221 iterator end (void) { return fcn_map.end (); } |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
222 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
223 const_iterator end (void) const { return fcn_map.end (); } |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
224 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
225 void erase (iterator p) { fcn_map.erase (p); } |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
226 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
227 void run (const octave_value_list& initial_args = octave_value_list ()) |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
228 { |
25337
3ff9192b676e
use auto keyword to declare iterator variables where possible
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
229 auto p = fcn_map.begin (); |
16384
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
230 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
231 while (p != fcn_map.end ()) |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
232 { |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
233 std::string hook_fcn_id = p->first; |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
234 hook_function hook_fcn = p->second; |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
235 |
25337
3ff9192b676e
use auto keyword to declare iterator variables where possible
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
236 auto q = p++; |
16384
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
237 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
238 if (hook_fcn.is_valid ()) |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
239 hook_fcn.eval (initial_args); |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
240 else |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
241 fcn_map.erase (q); |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
242 } |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
243 } |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
244 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
245 private: |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
246 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
247 map_type fcn_map; |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
248 }; |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
249 |
a8d9ee3766db
* hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
250 #endif |