annotate libinterp/corefcn/hook-fcn.h @ 30564:796f54d4ddbf stable

update Octave Project Developers copyright for the new year In files that have the "Octave Project Developers" copyright notice, update for 2021. In all .txi and .texi files except gpl.txi and gpl.texi in the doc/liboctave and doc/interpreter directories, change the copyright to "Octave Project Developers", the same as used for other source files. Update copyright notices for 2022 (not done since 2019). For gpl.txi and gpl.texi, change the copyright notice to be "Free Software Foundation, Inc." and leave the date at 2007 only because this file only contains the text of the GPL, not anything created by the Octave Project Developers. Add Paul Thomas to contributors.in.
author John W. Eaton <jwe@octave.org>
date Tue, 28 Dec 2021 18:22:40 -0500
parents 4c88a452519c
children 2aa5bcaba504 e88a07dec498
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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: 29954
diff changeset
3 // Copyright (C) 2013-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 ////////////////////////////////////////////////////////////////////////
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
29561
ed90a4d75f6d use shared_ptr to manage data for hook_function class
John W. Eaton <jwe@octave.org>
parents: 29358
diff changeset
31 #include <memory>
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
32 #include <string>
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
33
20940
48b2ad5ee801 maint: Rename oct-obj.[cc|h] to ovl.[cc|h] for clarity.
Rik <rik@octave.org>
parents: 20791
diff changeset
34 #include "ovl.h"
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
35 #include "ov.h"
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
36 #include "ov-fcn-handle.h"
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
37 #include "variables.h"
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
38
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
39 namespace octave
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
40 {
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
41 class base_hook_function
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
42 {
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
43 public:
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
44
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
45 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
46
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
47 base_hook_function (const base_hook_function&) = default;
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
48
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
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
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
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
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
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
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
55 virtual void eval (const octave_value_list&) { }
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
56 };
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
57
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
58 class hook_function
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
59 {
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
60 public:
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
61
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
62 hook_function (void)
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
63 {
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
64 static std::shared_ptr<base_hook_function>
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
65 nil_rep (new base_hook_function ());
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
66
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
67 m_rep = nil_rep;
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
68 }
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
69
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
70 hook_function (const octave_value& f,
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
71 const octave_value& d = octave_value ());
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
72
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
73 ~hook_function (void) = default;
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
74
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
75 hook_function (const hook_function& hf) = default;
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
76
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
77 hook_function& operator = (const hook_function& hf) = default;
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
78
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
79 std::string id (void) const { return m_rep->id (); }
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
80
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
81 bool is_valid (void) const { return m_rep->is_valid (); }
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
82
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
83 void eval (const octave_value_list& initial_args)
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
84 {
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
85 m_rep->eval (initial_args);
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
86 }
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
87
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
88 private:
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
89
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
90 std::shared_ptr<base_hook_function> m_rep;
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
91 };
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
92
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
93 class named_hook_function : public base_hook_function
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
94 {
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
95 public:
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
96
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
97 named_hook_function (const std::string& n, const octave_value& d)
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
98 : m_name (n), m_data (d)
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
99 { }
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
100
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
101 void eval (const octave_value_list& initial_args);
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
102
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
103 std::string id (void) const { return m_name; }
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
104
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
105 bool is_valid (void) const { return is_valid_function (m_name); }
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
106
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
107 private:
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
108
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
109 std::string m_name;
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
110
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
111 octave_value m_data;
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
112 };
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
113
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
114 class fcn_handle_hook_function : public base_hook_function
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
115 {
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
116 public:
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
117
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
118 fcn_handle_hook_function (const octave_value& fh_arg, const octave_value& d)
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
119 : m_ident (), m_valid (false), m_fcn_handle (fh_arg), m_data (d)
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
120 {
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
121 octave_fcn_handle *fh = m_fcn_handle.fcn_handle_value (true);
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
122
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
123 if (fh)
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
124 {
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
125 m_valid = true;
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
126
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
127 std::ostringstream buf;
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
128 buf << fh;
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
129 m_ident = fh->fcn_name () + ':' + buf.str ();
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
130 }
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
131 }
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
132
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
133 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
134
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
135 std::string id (void) const { return m_ident; }
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
136
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
137 bool is_valid (void) const { return m_valid; }
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
138
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
139 private:
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
140
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
141 std::string m_ident;
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
142
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
143 bool m_valid;
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
144
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
145 octave_value m_fcn_handle;
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
146
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
147 octave_value m_data;
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
148 };
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
149
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
150 class hook_function_list
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
151 {
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
152 public:
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
153
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
154 typedef std::map<std::string, hook_function> map_type;
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
155
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
156 typedef map_type::iterator iterator;
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
157 typedef map_type::const_iterator const_iterator;
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
158
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
159 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
160
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
161 ~hook_function_list (void) = default;
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
162
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
163 hook_function_list (const hook_function_list& lst) = default;
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
164
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
165 hook_function_list& operator = (const hook_function_list& lst) = default;
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
166
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
167 bool empty (void) const { return m_fcn_map.empty (); }
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
168
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
169 void clear (void) { m_fcn_map.clear (); }
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
170
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
171 void insert (const std::string& id, const hook_function& f)
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
172 {
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
173 m_fcn_map[id] = f;
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
174 }
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
175
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
176 iterator find (const std::string& id)
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
177 {
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
178 return m_fcn_map.find (id);
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
179 }
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
180
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
181 const_iterator find (const std::string& id) const
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
182 {
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
183 return m_fcn_map.find (id);
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
184 }
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
185
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
186 iterator end (void) { return m_fcn_map.end (); }
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
187
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
188 const_iterator end (void) const { return m_fcn_map.end (); }
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
189
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
190 void erase (iterator p) { m_fcn_map.erase (p); }
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
191
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
192 void run (const octave_value_list& initial_args = octave_value_list ())
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
193 {
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
194 auto p = m_fcn_map.begin ();
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
195
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
196 while (p != m_fcn_map.end ())
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
197 {
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
198 std::string hook_fcn_id = p->first;
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
199 hook_function hook_fcn = p->second;
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
200
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
201 auto q = p++;
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
202
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
203 if (hook_fcn.is_valid ())
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
204 hook_fcn.eval (initial_args);
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
205 else
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
206 m_fcn_map.erase (q);
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
207 }
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
208 }
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
209
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
210 private:
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
211
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
212 map_type m_fcn_map;
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
213 };
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
214 }
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
215
29954
4c88a452519c rename OCTAVE_USE_DEPRECATED_FUNCTIONS macro and attempt to make it work
John W. Eaton <jwe@octave.org>
parents: 29657
diff changeset
216 #if defined (OCTAVE_PROVIDE_DEPRECATED_SYMBOLS)
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
217 OCTAVE_DEPRECATED (7, "use 'octave::base_hook_function' instead")
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
218 typedef octave::base_hook_function base_hook_function;
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
219
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
220 OCTAVE_DEPRECATED (7, "use 'octave::hook_function' instead")
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
221 typedef octave::hook_function hook_function;
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
222
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
223 OCTAVE_DEPRECATED (7, "use 'octave::named_hook_function' instead")
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
224 typedef octave::named_hook_function named_hook_function;
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
225
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
226 OCTAVE_DEPRECATED (7, "use 'octave::fcn_handle_hook_function' instead")
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
227 typedef octave::fcn_handle_hook_function fcn_handle_hook_function;
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
228
29563
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
229 OCTAVE_DEPRECATED (7, "use 'octave::hook_function_list' instead")
8a296f1351a4 move hook function classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29562
diff changeset
230 typedef octave::hook_function_list hook_function_list;
29954
4c88a452519c rename OCTAVE_USE_DEPRECATED_FUNCTIONS macro and attempt to make it work
John W. Eaton <jwe@octave.org>
parents: 29657
diff changeset
231 #endif
16384
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 #endif