annotate libinterp/corefcn/hook-fcn.h @ 20654:b65888ec820e draft default tip gccjit

dmalcom gcc jit import
author Stefan Mahr <dac922@gmx.de>
date Fri, 27 Feb 2015 16:59:36 +0100
parents 4197fc428c7d
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1 /*
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2
19731
4197fc428c7d maint: Update copyright notices for 2015.
John W. Eaton <jwe@octave.org>
parents: 16892
diff changeset
3 Copyright (C) 2013-2015 John W. Eaton
16384
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5 This file is part of Octave.
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
7 Octave is free software; you can redistribute it and/or modify it
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
8 under the terms of the GNU General Public License as published by the
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
9 Free Software Foundation; either version 3 of the License, or (at your
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
10 option) any later version.
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
11
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
12 Octave is distributed in the hope that it will be useful, but WITHOUT
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
15 for more details.
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
16
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
18 along with Octave; see the file COPYING. If not, see
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
19 <http://www.gnu.org/licenses/>.
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
20
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
21 */
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
22
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
23 #if !defined (octave_hook_fcn_h)
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
24 #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
25
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
26 #include <string>
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
27
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
28 #include "oct-obj.h"
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
29 #include "ov.h"
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
30 #include "ov-fcn-handle.h"
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
31 #include "parse.h"
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
32 #include "variables.h"
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
33
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
34 class
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
35 base_hook_function
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
36 {
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
37 public:
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
38
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
39 friend class 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 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
42
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
43 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
44
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
45 virtual ~base_hook_function (void) { }
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 virtual std::string id (void) { return std::string (); }
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
48
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
49 virtual bool is_valid (void) { return false; }
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
50
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
51 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
52
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
53 protected:
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 size_t count;
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
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
58 class
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
59 hook_function
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 public:
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
62
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
63 hook_function (void)
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 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
66 rep = &nil_rep;
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
67 rep->count++;
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
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
70 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
71 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
72
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
73 ~hook_function (void)
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
74 {
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
75 if (--rep->count == 0)
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
76 delete rep;
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
77 }
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 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
80 : rep (hf.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 rep->count++;
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
83 }
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
84
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
85 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
86 {
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
87 if (rep != hf.rep)
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 if (--rep->count == 0)
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
90 delete rep;
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
91
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
92 rep = hf.rep;
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
93 rep->count++;
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
94 }
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 return *this;
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
97 }
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 std::string id (void) { return rep->id (); }
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
100
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
101 bool is_valid (void) { return rep->is_valid (); }
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
102
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
103 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
104 {
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
105 rep->eval (initial_args);
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
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
108 private:
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
109
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
110 base_hook_function *rep;
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
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
113 class
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
114 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
115 {
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
116 public:
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
117
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
118 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
119 : name (n), data (d)
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
120 { }
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 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
123 {
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
124 octave_value_list args = initial_args;
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
125
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
126 if (data.is_defined ())
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
127 args.append (data);
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
128
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
129 feval (name, args, 0);
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
130 }
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 std::string id (void) { return name; }
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 bool is_valid (void) { return is_valid_function (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 private:
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 std::string name;
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
139
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
140 octave_value data;
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
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
143 class
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
144 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
145 {
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
146 public:
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
147
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
148 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
149 : 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
150 {
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
151 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
152
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
153 if (fh)
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
154 {
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
155 valid = true;
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 std::ostringstream buf;
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
158 buf << fh;
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
159 ident = fh->fcn_name () + ":" + buf.str ();
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
160 }
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
161 }
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
162
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
163 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
164 {
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
165 octave_value_list args = initial_args;
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 if (data.is_defined ())
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
168 args.append (data);
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
169
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
170 fcn_handle.do_multi_index_op (0, args);
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
171 }
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 std::string id (void) { return ident; }
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 bool is_valid (void) { return valid; }
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
176
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
177 private:
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 std::string ident;
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 bool valid;
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 octave_value fcn_handle;
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
184
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
185 octave_value data;
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
186 };
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
187
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
188 class
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
189 hook_function_list
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
190 {
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
191 public:
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 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
194
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
195 typedef map_type::iterator iterator;
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
196 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
197
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
198 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
199
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
200 ~hook_function_list (void) { }
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 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
203 : fcn_map (lst.fcn_map)
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
204 { }
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 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
207 {
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
208 if (&lst != this)
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
209 fcn_map = lst.fcn_map;
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 return *this;
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
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
214 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
215
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
216 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
217
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
218 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
219 {
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
220 fcn_map[id] = f;
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
221 }
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 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
224 {
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
225 return fcn_map.find (id);
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
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
228 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
229 {
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
230 return fcn_map.find (id);
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
231 }
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 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
234
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
235 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
236
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
237 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
238
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
239 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
240 {
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
241 iterator p = fcn_map.begin ();
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 while (p != fcn_map.end ())
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 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
246 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
247
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
248 iterator q = p++;
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 if (hook_fcn.is_valid ())
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
251 hook_fcn.eval (initial_args);
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
252 else
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
253 fcn_map.erase (q);
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
254 }
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
255 }
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
256
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
257 private:
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
258
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
259 map_type fcn_map;
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
260 };
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
261
a8d9ee3766db * hook-fcn.h: Commit file omitted from previous changeset.
John W. Eaton <jwe@octave.org>
parents:
diff changeset
262 #endif