Mercurial > octave
annotate libinterp/corefcn/__pchip_deriv__.cc @ 20831:35241c4b696c
eliminate return statements after calls to error
* Cell.cc, __ichol__.cc, __lin_interpn__.cc, __pchip_deriv__.cc,
besselj.cc, cellfun.cc, colloc.cc, debug.cc, dlmread.cc,
dynamic-ld.cc, filter.cc, find.cc, gl2ps-renderer.cc, load-path.cc,
load-save.cc, ls-mat4.cc, ls-mat5.cc, ls-oct-text.cc, luinc.cc,
max.cc, nproc.cc, oct-hist.cc, oct-map.cc, oct-obj.cc, oct-stream.cc,
ordschur.cc, pinv.cc, pr-output.cc, profiler.cc, psi.cc, quadcc.cc,
qz.cc, rand.cc, strfind.cc, strfns.cc, sysdep.cc, toplev.cc, tril.cc,
typecast.cc, urlwrite.cc, utils.cc, variables.cc: Eliminate return
statements after calls to error.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Wed, 09 Dec 2015 14:00:43 -0500 |
parents | a9574e3c6e9e |
children | 1142cf6abc0d |
rev | line source |
---|---|
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11553
diff
changeset
|
1 /* |
5837 | 2 |
19697
4197fc428c7d
maint: Update copyright notices for 2015.
John W. Eaton <jwe@octave.org>
parents:
18605
diff
changeset
|
3 Copyright (C) 2002-2015 Kai Habel |
11523 | 4 Copyright (C) 2008-2009 Jaroslav Hajek |
5837 | 5 |
6 This file is part of Octave. | |
7 | |
8 Octave is free software; you can redistribute it and/or modify it | |
9 under the terms of the GNU General Public License as published by the | |
7016 | 10 Free Software Foundation; either version 3 of the License, or (at your |
11 option) any later version. | |
5837 | 12 |
13 Octave is distributed in the hope that it will be useful, but WITHOUT | |
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
16 for more details. | |
17 | |
18 You should have received a copy of the GNU General Public License | |
7016 | 19 along with Octave; see the file COPYING. If not, see |
20 <http://www.gnu.org/licenses/>. | |
5837 | 21 |
22 */ | |
23 | |
24 #ifdef HAVE_CONFIG_H | |
25 #include <config.h> | |
26 #endif | |
27 | |
15039
e753177cde93
maint: Move non-dynamically linked functions from DLD-FUNCTIONS/ to corefcn/ directory
Rik <rik@octave.org>
parents:
14846
diff
changeset
|
28 #include "defun.h" |
5837 | 29 #include "error.h" |
30 #include "gripes.h" | |
31 #include "oct-obj.h" | |
32 #include "utils.h" | |
33 #include "f77-fcn.h" | |
34 | |
5838 | 35 extern "C" |
36 { | |
6242 | 37 F77_RET_T |
11518 | 38 F77_FUNC (dpchim, DPCHIM) (const octave_idx_type& n, const double *x, |
39 const double *f, double *d, | |
40 const octave_idx_type &incfd, | |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
8713
diff
changeset
|
41 octave_idx_type *ierr); |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
42 |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
43 F77_RET_T |
11518 | 44 F77_FUNC (pchim, PCHIM) (const octave_idx_type& n, const float *x, |
45 const float *f, float *d, | |
46 const octave_idx_type& incfd, | |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
8713
diff
changeset
|
47 octave_idx_type *ierr); |
5837 | 48 } |
49 | |
6945 | 50 // Wrapper for SLATEC/PCHIP function DPCHIM to calculate the derivates |
51 // for piecewise polynomials. | |
52 | |
15039
e753177cde93
maint: Move non-dynamically linked functions from DLD-FUNCTIONS/ to corefcn/ directory
Rik <rik@octave.org>
parents:
14846
diff
changeset
|
53 DEFUN (__pchip_deriv__, args, , |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
54 "-*- texinfo -*-\n\ |
15039
e753177cde93
maint: Move non-dynamically linked functions from DLD-FUNCTIONS/ to corefcn/ directory
Rik <rik@octave.org>
parents:
14846
diff
changeset
|
55 @deftypefn {Built-in Function} {} __pchip_deriv__ (@var{x}, @var{y}, @var{dim})\n\ |
6945 | 56 Undocumented internal function.\n\ |
5837 | 57 @end deftypefn") |
58 { | |
59 octave_value retval; | |
5838 | 60 const int nargin = args.length (); |
5837 | 61 |
18112
b560bac0fca2
maint: Don't use space between 'args' and '(' when doing indexing.
Rik <rik@octave.org>
parents:
17787
diff
changeset
|
62 bool rows = (nargin == 3 && args(2).uint_value () == 2); |
8712
010e15c7be9a
support pchip method in interp2
Jaroslav Hajek <highegg@gmail.com>
parents:
7789
diff
changeset
|
63 |
010e15c7be9a
support pchip method in interp2
Jaroslav Hajek <highegg@gmail.com>
parents:
7789
diff
changeset
|
64 if (nargin >= 2) |
5837 | 65 { |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
66 if (args(0).is_single_type () || args(1).is_single_type ()) |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
8713
diff
changeset
|
67 { |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
8713
diff
changeset
|
68 FloatColumnVector xvec (args(0).float_vector_value ()); |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
8713
diff
changeset
|
69 FloatMatrix ymat (args(1).float_matrix_value ()); |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
70 |
20232
a9574e3c6e9e
Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents:
19873
diff
changeset
|
71 octave_idx_type nx = xvec.numel (); |
14462
af552038cc52
Fix segfault in pchip when input array is too small (bug #35835).
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
14138
diff
changeset
|
72 |
af552038cc52
Fix segfault in pchip when input array is too small (bug #35835).
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
14138
diff
changeset
|
73 if (nx < 2) |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20232
diff
changeset
|
74 error ("__pchip_deriv__: X must be at least of length 2"); |
14462
af552038cc52
Fix segfault in pchip when input array is too small (bug #35835).
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
14138
diff
changeset
|
75 |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
8713
diff
changeset
|
76 octave_idx_type nyr = ymat.rows (); |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
8713
diff
changeset
|
77 octave_idx_type nyc = ymat.columns (); |
5838 | 78 |
8712
010e15c7be9a
support pchip method in interp2
Jaroslav Hajek <highegg@gmail.com>
parents:
7789
diff
changeset
|
79 if (nx != (rows ? nyc : nyr)) |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20232
diff
changeset
|
80 error ("__pchip_deriv__: X and Y dimension mismatch"); |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
81 |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
8713
diff
changeset
|
82 FloatMatrix dmat (nyr, nyc); |
5837 | 83 |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
8713
diff
changeset
|
84 octave_idx_type ierr; |
8712
010e15c7be9a
support pchip method in interp2
Jaroslav Hajek <highegg@gmail.com>
parents:
7789
diff
changeset
|
85 const octave_idx_type incfd = rows ? nyr : 1; |
19787
4ae2987c5f66
avoid variable possibly clobbered by longjmp warning from GCC
John W. Eaton <jwe@octave.org>
parents:
19780
diff
changeset
|
86 volatile const octave_idx_type inc = rows ? 1 : nyr; |
4ae2987c5f66
avoid variable possibly clobbered by longjmp warning from GCC
John W. Eaton <jwe@octave.org>
parents:
19780
diff
changeset
|
87 volatile octave_idx_type k = 0; |
8712
010e15c7be9a
support pchip method in interp2
Jaroslav Hajek <highegg@gmail.com>
parents:
7789
diff
changeset
|
88 |
19873
5261186f1b00
__pchip_deriv__.cc: Stop variable might be clobbered by 'longjmp' warning.
Rik <rik@octave.org>
parents:
19787
diff
changeset
|
89 for (volatile octave_idx_type i = (rows ? nyr : nyc); i > 0; i--) |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
8713
diff
changeset
|
90 { |
18603
e7369c43ebe0
Fix segmentation fault for interp2 and pchip method (bug #41838).
Stefan Mahr <dac922@gmx.de>
parents:
17787
diff
changeset
|
91 F77_XFCN (pchim, PCHIM, (nx, xvec.data (), |
19787
4ae2987c5f66
avoid variable possibly clobbered by longjmp warning from GCC
John W. Eaton <jwe@octave.org>
parents:
19780
diff
changeset
|
92 ymat.data () + k * inc, |
4ae2987c5f66
avoid variable possibly clobbered by longjmp warning from GCC
John W. Eaton <jwe@octave.org>
parents:
19780
diff
changeset
|
93 dmat.fortran_vec () + k * inc, |
4ae2987c5f66
avoid variable possibly clobbered by longjmp warning from GCC
John W. Eaton <jwe@octave.org>
parents:
19780
diff
changeset
|
94 incfd, &ierr)); |
5837 | 95 |
19787
4ae2987c5f66
avoid variable possibly clobbered by longjmp warning from GCC
John W. Eaton <jwe@octave.org>
parents:
19780
diff
changeset
|
96 k++; |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
97 |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
8713
diff
changeset
|
98 if (ierr < 0) |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20232
diff
changeset
|
99 error ("__pchip_deriv__: PCHIM failed with ierr = %i", ierr); |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
8713
diff
changeset
|
100 } |
5837 | 101 |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
8713
diff
changeset
|
102 retval = dmat; |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
8713
diff
changeset
|
103 } |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
104 else |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
8713
diff
changeset
|
105 { |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
8713
diff
changeset
|
106 ColumnVector xvec (args(0).vector_value ()); |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
8713
diff
changeset
|
107 Matrix ymat (args(1).matrix_value ()); |
5837 | 108 |
20232
a9574e3c6e9e
Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents:
19873
diff
changeset
|
109 octave_idx_type nx = xvec.numel (); |
14462
af552038cc52
Fix segfault in pchip when input array is too small (bug #35835).
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
14138
diff
changeset
|
110 |
af552038cc52
Fix segfault in pchip when input array is too small (bug #35835).
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
14138
diff
changeset
|
111 if (nx < 2) |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20232
diff
changeset
|
112 error ("__pchip_deriv__: X must be at least of length 2"); |
14462
af552038cc52
Fix segfault in pchip when input array is too small (bug #35835).
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
14138
diff
changeset
|
113 |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
8713
diff
changeset
|
114 octave_idx_type nyr = ymat.rows (); |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
8713
diff
changeset
|
115 octave_idx_type nyc = ymat.columns (); |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
116 |
8712
010e15c7be9a
support pchip method in interp2
Jaroslav Hajek <highegg@gmail.com>
parents:
7789
diff
changeset
|
117 if (nx != (rows ? nyc : nyr)) |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20232
diff
changeset
|
118 error ("__pchip_deriv__: X and Y dimension mismatch"); |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
119 |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
8713
diff
changeset
|
120 Matrix dmat (nyr, nyc); |
5837 | 121 |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
8713
diff
changeset
|
122 octave_idx_type ierr; |
8712
010e15c7be9a
support pchip method in interp2
Jaroslav Hajek <highegg@gmail.com>
parents:
7789
diff
changeset
|
123 const octave_idx_type incfd = rows ? nyr : 1; |
19787
4ae2987c5f66
avoid variable possibly clobbered by longjmp warning from GCC
John W. Eaton <jwe@octave.org>
parents:
19780
diff
changeset
|
124 volatile const octave_idx_type inc = rows ? 1 : nyr; |
4ae2987c5f66
avoid variable possibly clobbered by longjmp warning from GCC
John W. Eaton <jwe@octave.org>
parents:
19780
diff
changeset
|
125 volatile octave_idx_type k = 0; |
8712
010e15c7be9a
support pchip method in interp2
Jaroslav Hajek <highegg@gmail.com>
parents:
7789
diff
changeset
|
126 |
19873
5261186f1b00
__pchip_deriv__.cc: Stop variable might be clobbered by 'longjmp' warning.
Rik <rik@octave.org>
parents:
19787
diff
changeset
|
127 for (volatile octave_idx_type i = (rows ? nyr : nyc); i > 0; i--) |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
8713
diff
changeset
|
128 { |
18603
e7369c43ebe0
Fix segmentation fault for interp2 and pchip method (bug #41838).
Stefan Mahr <dac922@gmx.de>
parents:
17787
diff
changeset
|
129 F77_XFCN (dpchim, DPCHIM, (nx, xvec.data (), |
19787
4ae2987c5f66
avoid variable possibly clobbered by longjmp warning from GCC
John W. Eaton <jwe@octave.org>
parents:
19780
diff
changeset
|
130 ymat.data () + k * inc, |
4ae2987c5f66
avoid variable possibly clobbered by longjmp warning from GCC
John W. Eaton <jwe@octave.org>
parents:
19780
diff
changeset
|
131 dmat.fortran_vec () + k * inc, |
4ae2987c5f66
avoid variable possibly clobbered by longjmp warning from GCC
John W. Eaton <jwe@octave.org>
parents:
19780
diff
changeset
|
132 incfd, &ierr)); |
4ae2987c5f66
avoid variable possibly clobbered by longjmp warning from GCC
John W. Eaton <jwe@octave.org>
parents:
19780
diff
changeset
|
133 k++; |
5838 | 134 |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
8713
diff
changeset
|
135 if (ierr < 0) |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20232
diff
changeset
|
136 error ("__pchip_deriv__: DPCHIM failed with ierr = %i", ierr); |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
8713
diff
changeset
|
137 } |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
138 |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
8713
diff
changeset
|
139 retval = dmat; |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
8713
diff
changeset
|
140 } |
5837 | 141 } |
142 | |
143 return retval; | |
144 } | |
12805
3641167e5b75
codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
145 |
3641167e5b75
codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
146 /* |
3641167e5b75
codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
147 ## No test needed for internal helper function. |
3641167e5b75
codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
148 %!assert (1) |
3641167e5b75
codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
149 */ |