annotate src/defun.h @ 7017:a1dbe9d80eee

[project @ 2007-10-12 21:27:11 by jwe]
author jwe
date Fri, 12 Oct 2007 21:27:37 +0000
parents 93c65f2a5668
children 8c32f95c2639
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
525
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
1 /*
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
2
7017
a1dbe9d80eee [project @ 2007-10-12 21:27:11 by jwe]
jwe
parents: 7016
diff changeset
3 Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003,
a1dbe9d80eee [project @ 2007-10-12 21:27:11 by jwe]
jwe
parents: 7016
diff changeset
4 2004, 2005, 2006, 2007 John W. Eaton
525
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
5
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
6 This file is part of Octave.
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
7
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
8 Octave is free software; you can redistribute it and/or modify it
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
9 under the terms of the GNU General Public License as published by the
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6989
diff changeset
10 Free Software Foundation; either version 3 of the License, or (at your
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6989
diff changeset
11 option) any later version.
525
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
12
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
13 Octave is distributed in the hope that it will be useful, but WITHOUT
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
16 for more details.
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
17
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
18 You should have received a copy of the GNU General Public License
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6989
diff changeset
19 along with Octave; see the file COPYING. If not, see
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6989
diff changeset
20 <http://www.gnu.org/licenses/>.
525
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
21
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
22 */
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
23
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
24 #if !defined (octave_defun_h)
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
25 #define octave_defun_h 1
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
26
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
27 #if defined (octave_defun_dld_h)
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
28 #error defun.h and defun-dld.h both included in same file!
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
29 #endif
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
30
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
31 #include "defun-int.h"
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
32
550
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
33 // Define a builtin function.
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
34 //
1957
0e6a0a271998 [project @ 1996-02-15 01:08:15 by jwe]
jwe
parents: 1884
diff changeset
35 // name is the name of the function, unqouted.
550
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
36 //
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
37 // args_name is the name of the octave_value_list variable used to pass
1957
0e6a0a271998 [project @ 1996-02-15 01:08:15 by jwe]
jwe
parents: 1884
diff changeset
38 // the argument list to this function.
550
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
39 //
1957
0e6a0a271998 [project @ 1996-02-15 01:08:15 by jwe]
jwe
parents: 1884
diff changeset
40 // nargout_name is the name of the int variable used to pass the
0e6a0a271998 [project @ 1996-02-15 01:08:15 by jwe]
jwe
parents: 1884
diff changeset
41 // number of output arguments this function is expected to produce.
550
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
42 //
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
43 // doc is the simple help text for the function.
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
44
1957
0e6a0a271998 [project @ 1996-02-15 01:08:15 by jwe]
jwe
parents: 1884
diff changeset
45 #define DEFUN(name, args_name, nargout_name, doc) \
2890
42901f9a9266 [project @ 1997-04-28 01:44:22 by jwe]
jwe
parents: 2847
diff changeset
46 DEFUN_INTERNAL (name, args_name, nargout_name, false, doc)
525
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
47
3743
35daf9714b9a [project @ 2000-11-30 00:19:10 by jwe]
jwe
parents: 3741
diff changeset
48 // This one can be used when `name' cannot be used directly (if it is
35daf9714b9a [project @ 2000-11-30 00:19:10 by jwe]
jwe
parents: 3741
diff changeset
49 // already defined as a macro). In that case, name is already a
35daf9714b9a [project @ 2000-11-30 00:19:10 by jwe]
jwe
parents: 3741
diff changeset
50 // quoted string, and the internal name of the function must be passed
5794
1138ced03f14 [project @ 2006-05-08 20:23:04 by jwe]
jwe
parents: 5307
diff changeset
51 // too (the convention is to use a prefix of "F", so "foo" becomes "Ffoo").
3743
35daf9714b9a [project @ 2000-11-30 00:19:10 by jwe]
jwe
parents: 3741
diff changeset
52
35daf9714b9a [project @ 2000-11-30 00:19:10 by jwe]
jwe
parents: 3741
diff changeset
53 #define DEFUNX(name, fname, args_name, nargout_name, doc) \
35daf9714b9a [project @ 2000-11-30 00:19:10 by jwe]
jwe
parents: 3741
diff changeset
54 DEFUNX_INTERNAL (name, fname, args_name, nargout_name, false, doc)
35daf9714b9a [project @ 2000-11-30 00:19:10 by jwe]
jwe
parents: 3741
diff changeset
55
4208
e96f52432059 [project @ 2002-12-03 19:48:57 by jwe]
jwe
parents: 4100
diff changeset
56 // Define a builtin command-style function.
550
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
57 //
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
58 // This is like DEFUN, except that it defines a function that can be
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
59 // called from the Octave language without using parenthesis to
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
60 // surround the arguments).
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
61
4208
e96f52432059 [project @ 2002-12-03 19:48:57 by jwe]
jwe
parents: 4100
diff changeset
62 #define DEFCMD(name, args_name, nargout_name, doc) \
2890
42901f9a9266 [project @ 1997-04-28 01:44:22 by jwe]
jwe
parents: 2847
diff changeset
63 DEFUN_INTERNAL (name, args_name, nargout_name, true, doc)
525
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
64
4208
e96f52432059 [project @ 2002-12-03 19:48:57 by jwe]
jwe
parents: 4100
diff changeset
65 // For backward compatibility.
e96f52432059 [project @ 2002-12-03 19:48:57 by jwe]
jwe
parents: 4100
diff changeset
66
e96f52432059 [project @ 2002-12-03 19:48:57 by jwe]
jwe
parents: 4100
diff changeset
67 #define DEFUN_TEXT DEFCMD
e96f52432059 [project @ 2002-12-03 19:48:57 by jwe]
jwe
parents: 4100
diff changeset
68
4234
90e44267e8cf [project @ 2002-12-21 17:15:25 by jwe]
jwe
parents: 4208
diff changeset
69 // This is a function with a name that can't be hidden by a variable.
90e44267e8cf [project @ 2002-12-21 17:15:25 by jwe]
jwe
parents: 4208
diff changeset
70 #define DEFCONSTFUN(name, args_name, nargout_name, doc) \
90e44267e8cf [project @ 2002-12-21 17:15:25 by jwe]
jwe
parents: 4208
diff changeset
71 DEFCONSTFUN_INTERNAL (name, args_name, nargout_name, true, doc)
90e44267e8cf [project @ 2002-12-21 17:15:25 by jwe]
jwe
parents: 4208
diff changeset
72
550
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
73 // Define a mapper function.
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
74 //
1957
0e6a0a271998 [project @ 1996-02-15 01:08:15 by jwe]
jwe
parents: 1884
diff changeset
75 // name is the name of the function, unquoqted.
550
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
76 //
2089
4dcc8b77e84a [project @ 1996-04-26 07:55:54 by jwe]
jwe
parents: 2086
diff changeset
77 // ch_map is a pointer to a function that should be called for
3249
60866c521b92 [project @ 1999-07-13 03:44:16 by jwe]
jwe
parents: 3141
diff changeset
78 // integer arguments that are expected to create integer results.
2089
4dcc8b77e84a [project @ 1996-04-26 07:55:54 by jwe]
jwe
parents: 2086
diff changeset
79 // (It's a kluge to handle character mappers like isalpha.)
550
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
80 //
3249
60866c521b92 [project @ 1999-07-13 03:44:16 by jwe]
jwe
parents: 3141
diff changeset
81 // d_b_map is a pointer to a function that should be called for real
60866c521b92 [project @ 1999-07-13 03:44:16 by jwe]
jwe
parents: 3141
diff changeset
82 // arguments that are expected to create bool results.
60866c521b92 [project @ 1999-07-13 03:44:16 by jwe]
jwe
parents: 3141
diff changeset
83 //
60866c521b92 [project @ 1999-07-13 03:44:16 by jwe]
jwe
parents: 3141
diff changeset
84 // c_b_map is a pointer to a function that should be called for
60866c521b92 [project @ 1999-07-13 03:44:16 by jwe]
jwe
parents: 3141
diff changeset
85 // complex arguments that are expected to create bool results.
60866c521b92 [project @ 1999-07-13 03:44:16 by jwe]
jwe
parents: 3141
diff changeset
86 //
550
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
87 // d_d_map is a pointer to a function that should be called for real
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
88 // arguments that are expected to create real results.
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
89 //
6989
2d326000e09b [project @ 2007-10-09 20:32:42 by jwe]
jwe
parents: 6961
diff changeset
90 // c_d_map is a pointer to a function that should be called for
6961
b559b4bcf51f [project @ 2007-10-05 19:35:21 by jwe]
jwe
parents: 5794
diff changeset
91 // complex arguments that are expected to create real results.
550
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
92 //
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
93 // c_c_map is a pointer to a function that should be called for
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
94 // complex arguments that are expected to create complex results.
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
95 //
4668
7849788ca4bd [project @ 2003-11-26 04:28:39 by jwe]
jwe
parents: 4234
diff changeset
96 // lo is the lower bound of the range for which real arguments
7849788ca4bd [project @ 2003-11-26 04:28:39 by jwe]
jwe
parents: 4234
diff changeset
97 // return real results (e.g., lo == 0 for sqrt).
2089
4dcc8b77e84a [project @ 1996-04-26 07:55:54 by jwe]
jwe
parents: 2086
diff changeset
98 //
4668
7849788ca4bd [project @ 2003-11-26 04:28:39 by jwe]
jwe
parents: 4234
diff changeset
99 // hi is the upper bound of the range for which real arguments
7849788ca4bd [project @ 2003-11-26 04:28:39 by jwe]
jwe
parents: 4234
diff changeset
100 // return real results (e.g., hi == Inf for sqrt).
2089
4dcc8b77e84a [project @ 1996-04-26 07:55:54 by jwe]
jwe
parents: 2086
diff changeset
101 //
4100
ed0090ecf80f [project @ 2002-10-11 16:37:45 by jwe]
jwe
parents: 3743
diff changeset
102 // ch_map_flag has the following meanings for the ch_map function:
ed0090ecf80f [project @ 2002-10-11 16:37:45 by jwe]
jwe
parents: 3743
diff changeset
103 //
ed0090ecf80f [project @ 2002-10-11 16:37:45 by jwe]
jwe
parents: 3743
diff changeset
104 // 0 => this function returns a matrix of ones and zeros
ed0090ecf80f [project @ 2002-10-11 16:37:45 by jwe]
jwe
parents: 3743
diff changeset
105 // 1 => this function returns a numeric matrix (any values)
ed0090ecf80f [project @ 2002-10-11 16:37:45 by jwe]
jwe
parents: 3743
diff changeset
106 // 2 => this function returns a std::string array
ed0090ecf80f [project @ 2002-10-11 16:37:45 by jwe]
jwe
parents: 3743
diff changeset
107 //
2089
4dcc8b77e84a [project @ 1996-04-26 07:55:54 by jwe]
jwe
parents: 2086
diff changeset
108 // can_ret_cmplx_for_real is a flag that says whether this function
4dcc8b77e84a [project @ 1996-04-26 07:55:54 by jwe]
jwe
parents: 2086
diff changeset
109 // can create a complex number given a real-valued argument
4dcc8b77e84a [project @ 1996-04-26 07:55:54 by jwe]
jwe
parents: 2086
diff changeset
110 // (e.g., sqrt (-1)).
4dcc8b77e84a [project @ 1996-04-26 07:55:54 by jwe]
jwe
parents: 2086
diff changeset
111 //
550
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
112 // doc is the simple help text for the function.
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
113
4100
ed0090ecf80f [project @ 2002-10-11 16:37:45 by jwe]
jwe
parents: 3743
diff changeset
114 #define DEFUN_MAPPER(name, ch_map, d_b_map, c_b_map, d_d_map, \
6989
2d326000e09b [project @ 2007-10-09 20:32:42 by jwe]
jwe
parents: 6961
diff changeset
115 c_d_map, c_c_map, lo, hi, ch_map_flag, \
4100
ed0090ecf80f [project @ 2002-10-11 16:37:45 by jwe]
jwe
parents: 3743
diff changeset
116 can_ret_cmplx_for_real, doc) \
ed0090ecf80f [project @ 2002-10-11 16:37:45 by jwe]
jwe
parents: 3743
diff changeset
117 DEFUN_MAPPER_INTERNAL (name, ch_map, d_b_map, c_b_map, d_d_map, \
6989
2d326000e09b [project @ 2007-10-09 20:32:42 by jwe]
jwe
parents: 6961
diff changeset
118 c_d_map, c_c_map, lo, hi, ch_map_flag, \
4100
ed0090ecf80f [project @ 2002-10-11 16:37:45 by jwe]
jwe
parents: 3743
diff changeset
119 can_ret_cmplx_for_real, doc)
525
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
120
550
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
121 // Make alias another name for the existing function name. This macro
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
122 // must be used in the same file where name is defined, after the
95ee5e330179 [project @ 1994-07-22 20:17:58 by jwe]
jwe
parents: 546
diff changeset
123 // definition for name.
525
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
124
4699
5e2c68946f30 [project @ 2004-01-20 23:04:46 by jwe]
jwe
parents: 4668
diff changeset
125 #define DEFALIAS(alias, name) \
5e2c68946f30 [project @ 2004-01-20 23:04:46 by jwe]
jwe
parents: 4668
diff changeset
126 DEFALIAS_INTERNAL (alias, name)
525
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
127
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
128 #endif
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
129
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
130 /*
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
131 ;;; Local Variables: ***
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
132 ;;; mode: C++ ***
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
133 ;;; End: ***
509e9a2d93a6 [project @ 1994-07-20 18:45:27 by jwe]
jwe
parents:
diff changeset
134 */