Mercurial > hg > octave-jordi
annotate libinterp/corefcn/__dispatch__.cc @ 20917:6f0bd96f93c0
maint: Use new C++ archetype in more files.
Place input validation first in files.
Move declaration of retval down in function to be closer to point of usage.
Eliminate else clause after if () error.
Use "return ovl()" where it makes sense.
* __dispatch__.cc, __dsearchn__.cc, __ichol__.cc, __lin_interpn__.cc,
balance.cc, betainc.cc, bitfcns.cc, bsxfun.cc, cellfun.cc, colloc.cc, conv2.cc,
daspk.cc, dasrt.cc, dassl.cc, data.cc, debug.cc, dirfns.cc, dlmread.cc, dot.cc,
eig.cc, error.cc, fft.cc, fft2.cc, fftn.cc, file-io.cc, ov-type-conv.h:
Use new C++ archetype in more files.
author | Rik <rik@octave.org> |
---|---|
date | Wed, 16 Dec 2015 15:00:31 -0800 |
parents | 8bb38ba1bad6 |
children |
rev | line source |
---|---|
5164 | 1 /* |
2 | |
19696
4197fc428c7d
maint: Update copyright notices for 2015.
John W. Eaton <jwe@octave.org>
parents:
17787
diff
changeset
|
3 Copyright (C) 2001-2015 John W. Eaton and Paul Kienzle |
5164 | 4 |
7016 | 5 This file is part of Octave. |
6 | |
7 Octave is free software; you can redistribute it and/or modify it | |
5164 | 8 under the terms of the GNU General Public License as published by the |
7016 | 9 Free Software Foundation; either version 3 of the License, or (at your |
10 option) any later version. | |
5164 | 11 |
7016 | 12 Octave is distributed in the hope that it will be useful, but WITHOUT |
5164 | 13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
15 for more details. | |
16 | |
17 You should have received a copy of the GNU General Public License | |
7016 | 18 along with Octave; see the file COPYING. If not, see |
19 <http://www.gnu.org/licenses/>. | |
5164 | 20 |
21 */ | |
22 | |
23 #ifdef HAVE_CONFIG_H | |
24 #include <config.h> | |
25 #endif | |
26 | |
27 #include <list> | |
28 #include <map> | |
29 #include <string> | |
30 | |
7336 | 31 #include "Cell.h" |
32 #include "oct-map.h" | |
15039
e753177cde93
maint: Move non-dynamically linked functions from DLD-FUNCTIONS/ to corefcn/ directory
Rik <rik@octave.org>
parents:
14501
diff
changeset
|
33 #include "defun.h" |
5164 | 34 #include "ov.h" |
35 #include "ov-fcn.h" | |
36 #include "ov-typeinfo.h" | |
37 #include "pager.h" | |
38 #include "parse.h" | |
39 #include "symtab.h" | |
40 #include "variables.h" | |
41 | |
15039
e753177cde93
maint: Move non-dynamically linked functions from DLD-FUNCTIONS/ to corefcn/ directory
Rik <rik@octave.org>
parents:
14501
diff
changeset
|
42 DEFUN (__dispatch__, args, nargout, |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
43 "Undocumented internal function") |
5164 | 44 { |
45 int nargin = args.length (); | |
46 | |
20801
8bb38ba1bad6
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20699
diff
changeset
|
47 if (nargin < 1 || nargin > 3) |
8bb38ba1bad6
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20699
diff
changeset
|
48 print_usage (); |
7336 | 49 |
20801
8bb38ba1bad6
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20699
diff
changeset
|
50 std::string f, r, t; |
7336 | 51 |
20801
8bb38ba1bad6
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20699
diff
changeset
|
52 f = args(0).xstring_value ("__dispatch__: first argument must be a function name"); |
7336 | 53 |
20801
8bb38ba1bad6
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20699
diff
changeset
|
54 if (nargin > 1) |
8bb38ba1bad6
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20699
diff
changeset
|
55 r = args(1).xstring_value ("__dispatch__: second argument must be a function name"); |
5164 | 56 |
20801
8bb38ba1bad6
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20699
diff
changeset
|
57 if (nargin > 2) |
8bb38ba1bad6
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20699
diff
changeset
|
58 t = args(2).xstring_value ("__dispatch__: third argument must be a type name"); |
8bb38ba1bad6
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20699
diff
changeset
|
59 |
20917
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20801
diff
changeset
|
60 octave_value retval; |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20801
diff
changeset
|
61 |
20801
8bb38ba1bad6
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20699
diff
changeset
|
62 if (nargin == 1) |
8bb38ba1bad6
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20699
diff
changeset
|
63 { |
8bb38ba1bad6
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20699
diff
changeset
|
64 if (nargout > 0) |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9444
diff
changeset
|
65 { |
20801
8bb38ba1bad6
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20699
diff
changeset
|
66 symbol_table::fcn_info::dispatch_map_type dm |
8bb38ba1bad6
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20699
diff
changeset
|
67 = symbol_table::get_dispatch (f); |
7336 | 68 |
20801
8bb38ba1bad6
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20699
diff
changeset
|
69 size_t len = dm.size (); |
7336 | 70 |
20801
8bb38ba1bad6
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20699
diff
changeset
|
71 Cell type_field (len, 1); |
8bb38ba1bad6
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20699
diff
changeset
|
72 Cell name_field (len, 1); |
7336 | 73 |
20801
8bb38ba1bad6
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20699
diff
changeset
|
74 symbol_table::fcn_info::dispatch_map_type::const_iterator p |
8bb38ba1bad6
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20699
diff
changeset
|
75 = dm.begin (); |
7336 | 76 |
20801
8bb38ba1bad6
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20699
diff
changeset
|
77 for (size_t i = 0; i < len; i++) |
8bb38ba1bad6
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20699
diff
changeset
|
78 { |
8bb38ba1bad6
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20699
diff
changeset
|
79 type_field(i) = p->first; |
8bb38ba1bad6
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20699
diff
changeset
|
80 name_field(i) = p->second; |
7336 | 81 |
20801
8bb38ba1bad6
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20699
diff
changeset
|
82 p++; |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9444
diff
changeset
|
83 } |
20801
8bb38ba1bad6
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20699
diff
changeset
|
84 |
8bb38ba1bad6
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20699
diff
changeset
|
85 octave_scalar_map m; |
8bb38ba1bad6
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20699
diff
changeset
|
86 |
8bb38ba1bad6
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20699
diff
changeset
|
87 m.assign ("type", type_field); |
8bb38ba1bad6
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20699
diff
changeset
|
88 m.assign ("name", name_field); |
8bb38ba1bad6
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20699
diff
changeset
|
89 |
8bb38ba1bad6
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20699
diff
changeset
|
90 retval = m; |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9444
diff
changeset
|
91 } |
7336 | 92 else |
20801
8bb38ba1bad6
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20699
diff
changeset
|
93 symbol_table::print_dispatch (octave_stdout, f); |
8bb38ba1bad6
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20699
diff
changeset
|
94 } |
8bb38ba1bad6
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20699
diff
changeset
|
95 else if (nargin == 2) |
8bb38ba1bad6
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20699
diff
changeset
|
96 { |
8bb38ba1bad6
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20699
diff
changeset
|
97 t = r; |
8bb38ba1bad6
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20699
diff
changeset
|
98 symbol_table::clear_dispatch (f, t); |
5164 | 99 } |
7336 | 100 else |
20801
8bb38ba1bad6
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20699
diff
changeset
|
101 symbol_table::add_dispatch (f, t, r); |
5164 | 102 |
103 return retval; | |
104 } | |
12823
ab6fc7b40541
codesprint: add assert(1) test for __dispatch__
John W. Eaton <jwe@octave.org>
parents:
11553
diff
changeset
|
105 |
ab6fc7b40541
codesprint: add assert(1) test for __dispatch__
John W. Eaton <jwe@octave.org>
parents:
11553
diff
changeset
|
106 /* |
ab6fc7b40541
codesprint: add assert(1) test for __dispatch__
John W. Eaton <jwe@octave.org>
parents:
11553
diff
changeset
|
107 ## No test needed for internal helper function. |
ab6fc7b40541
codesprint: add assert(1) test for __dispatch__
John W. Eaton <jwe@octave.org>
parents:
11553
diff
changeset
|
108 %!assert (1) |
ab6fc7b40541
codesprint: add assert(1) test for __dispatch__
John W. Eaton <jwe@octave.org>
parents:
11553
diff
changeset
|
109 */ |