Mercurial > hg > octave-nkf
annotate liboctave/numeric/oct-convn.cc @ 17769:49a5a4be04a1
maint: Use GNU style coding conventions for code in liboctave/
* liboctave/array/Array-C.cc, liboctave/array/Array-b.cc,
liboctave/array/Array-ch.cc, liboctave/array/Array-d.cc,
liboctave/array/Array-f.cc, liboctave/array/Array-fC.cc,
liboctave/array/Array-util.cc, liboctave/array/Array-util.h,
liboctave/array/Array.cc, liboctave/array/Array.h, liboctave/array/Array3.h,
liboctave/array/CColVector.cc, liboctave/array/CColVector.h,
liboctave/array/CDiagMatrix.cc, liboctave/array/CDiagMatrix.h,
liboctave/array/CMatrix.cc, liboctave/array/CMatrix.h,
liboctave/array/CNDArray.cc, liboctave/array/CNDArray.h,
liboctave/array/CRowVector.cc, liboctave/array/CRowVector.h,
liboctave/array/CSparse.cc, liboctave/array/CSparse.h,
liboctave/array/DiagArray2.h, liboctave/array/MArray.cc,
liboctave/array/MArray.h, liboctave/array/MDiagArray2.cc,
liboctave/array/MDiagArray2.h, liboctave/array/MSparse.cc,
liboctave/array/MSparse.h, liboctave/array/MatrixType.cc,
liboctave/array/MatrixType.h, liboctave/array/PermMatrix.h,
liboctave/array/Range.cc, liboctave/array/Range.h, liboctave/array/Sparse.cc,
liboctave/array/Sparse.h, liboctave/array/boolMatrix.cc,
liboctave/array/boolMatrix.h, liboctave/array/boolNDArray.cc,
liboctave/array/boolNDArray.h, liboctave/array/boolSparse.cc,
liboctave/array/boolSparse.h, liboctave/array/chMatrix.cc,
liboctave/array/chMatrix.h, liboctave/array/chNDArray.cc,
liboctave/array/chNDArray.h, liboctave/array/dColVector.h,
liboctave/array/dDiagMatrix.cc, liboctave/array/dDiagMatrix.h,
liboctave/array/dMatrix.cc, liboctave/array/dMatrix.h,
liboctave/array/dNDArray.cc, liboctave/array/dNDArray.h,
liboctave/array/dRowVector.h, liboctave/array/dSparse.cc,
liboctave/array/dSparse.h, liboctave/array/dim-vector.cc,
liboctave/array/dim-vector.h, liboctave/array/fCColVector.cc,
liboctave/array/fCColVector.h, liboctave/array/fCDiagMatrix.cc,
liboctave/array/fCDiagMatrix.h, liboctave/array/fCMatrix.cc,
liboctave/array/fCMatrix.h, liboctave/array/fCNDArray.cc,
liboctave/array/fCNDArray.h, liboctave/array/fCRowVector.cc,
liboctave/array/fCRowVector.h, liboctave/array/fColVector.h,
liboctave/array/fDiagMatrix.cc, liboctave/array/fDiagMatrix.h,
liboctave/array/fMatrix.cc, liboctave/array/fMatrix.h,
liboctave/array/fNDArray.cc, liboctave/array/fNDArray.h,
liboctave/array/fRowVector.h, liboctave/array/idx-vector.cc,
liboctave/array/idx-vector.h, liboctave/array/intNDArray.cc,
liboctave/array/intNDArray.h, liboctave/cruft/misc/blaswrap.c,
liboctave/cruft/misc/quit.cc, liboctave/numeric/CmplxCHOL.cc,
liboctave/numeric/CmplxCHOL.h, liboctave/numeric/CmplxGEPBAL.cc,
liboctave/numeric/CmplxGEPBAL.h, liboctave/numeric/CmplxHESS.h,
liboctave/numeric/CmplxLU.cc, liboctave/numeric/CmplxLU.h,
liboctave/numeric/CmplxQR.cc, liboctave/numeric/CmplxQRP.cc,
liboctave/numeric/CmplxQRP.h, liboctave/numeric/CmplxSCHUR.h,
liboctave/numeric/CmplxSVD.cc, liboctave/numeric/CmplxSVD.h,
liboctave/numeric/CollocWt.h, liboctave/numeric/DAE.h,
liboctave/numeric/DAEFunc.h, liboctave/numeric/DAERT.h,
liboctave/numeric/DAERTFunc.h, liboctave/numeric/DASPK.cc,
liboctave/numeric/DASRT.cc, liboctave/numeric/DASRT.h,
liboctave/numeric/DASSL.cc, liboctave/numeric/DET.h, liboctave/numeric/EIG.cc,
liboctave/numeric/EIG.h, liboctave/numeric/LSODE.cc, liboctave/numeric/ODE.h,
liboctave/numeric/ODEFunc.h, liboctave/numeric/ODES.h,
liboctave/numeric/ODESFunc.h, liboctave/numeric/Quad.cc,
liboctave/numeric/Quad.h, liboctave/numeric/SparseCmplxCHOL.h,
liboctave/numeric/SparseCmplxLU.cc, liboctave/numeric/SparseCmplxLU.h,
liboctave/numeric/SparseCmplxQR.cc, liboctave/numeric/SparseCmplxQR.h,
liboctave/numeric/SparseQR.cc, liboctave/numeric/SparseQR.h,
liboctave/numeric/SparsedbleCHOL.h, liboctave/numeric/SparsedbleLU.cc,
liboctave/numeric/SparsedbleLU.h, liboctave/numeric/base-aepbal.h,
liboctave/numeric/base-dae.h, liboctave/numeric/base-de.h,
liboctave/numeric/base-lu.cc, liboctave/numeric/base-lu.h,
liboctave/numeric/base-min.h, liboctave/numeric/base-qr.h,
liboctave/numeric/bsxfun.h, liboctave/numeric/dbleCHOL.cc,
liboctave/numeric/dbleCHOL.h, liboctave/numeric/dbleGEPBAL.h,
liboctave/numeric/dbleHESS.h, liboctave/numeric/dbleLU.cc,
liboctave/numeric/dbleLU.h, liboctave/numeric/dbleQR.cc,
liboctave/numeric/dbleQRP.cc, liboctave/numeric/dbleQRP.h,
liboctave/numeric/dbleSCHUR.cc, liboctave/numeric/dbleSCHUR.h,
liboctave/numeric/dbleSVD.cc, liboctave/numeric/dbleSVD.h,
liboctave/numeric/eigs-base.cc, liboctave/numeric/fCmplxAEPBAL.cc,
liboctave/numeric/fCmplxAEPBAL.h, liboctave/numeric/fCmplxCHOL.cc,
liboctave/numeric/fCmplxCHOL.h, liboctave/numeric/fCmplxGEPBAL.cc,
liboctave/numeric/fCmplxGEPBAL.h, liboctave/numeric/fCmplxHESS.h,
liboctave/numeric/fCmplxLU.cc, liboctave/numeric/fCmplxLU.h,
liboctave/numeric/fCmplxQR.cc, liboctave/numeric/fCmplxQR.h,
liboctave/numeric/fCmplxQRP.cc, liboctave/numeric/fCmplxQRP.h,
liboctave/numeric/fCmplxSCHUR.cc, liboctave/numeric/fCmplxSCHUR.h,
liboctave/numeric/fCmplxSVD.h, liboctave/numeric/fEIG.cc,
liboctave/numeric/fEIG.h, liboctave/numeric/floatCHOL.cc,
liboctave/numeric/floatCHOL.h, liboctave/numeric/floatGEPBAL.cc,
liboctave/numeric/floatGEPBAL.h, liboctave/numeric/floatHESS.h,
liboctave/numeric/floatLU.cc, liboctave/numeric/floatLU.h,
liboctave/numeric/floatQR.cc, liboctave/numeric/floatQRP.cc,
liboctave/numeric/floatQRP.h, liboctave/numeric/floatSCHUR.cc,
liboctave/numeric/floatSCHUR.h, liboctave/numeric/floatSVD.cc,
liboctave/numeric/floatSVD.h, liboctave/numeric/lo-mappers.cc,
liboctave/numeric/lo-mappers.h, liboctave/numeric/lo-specfun.cc,
liboctave/numeric/lo-specfun.h, liboctave/numeric/oct-convn.cc,
liboctave/numeric/oct-fftw.cc, liboctave/numeric/oct-fftw.h,
liboctave/numeric/oct-norm.cc, liboctave/numeric/oct-rand.cc,
liboctave/numeric/oct-rand.h, liboctave/numeric/randgamma.c,
liboctave/numeric/randgamma.h, liboctave/numeric/randmtzig.c,
liboctave/numeric/randpoisson.c, liboctave/numeric/randpoisson.h,
liboctave/numeric/sparse-base-chol.h, liboctave/numeric/sparse-base-lu.h,
liboctave/numeric/sparse-dmsolve.cc, liboctave/operators/Sparse-diag-op-defs.h,
liboctave/operators/Sparse-op-defs.h, liboctave/operators/mx-inlines.cc,
liboctave/system/dir-ops.h, liboctave/system/file-ops.cc,
liboctave/system/file-stat.cc, liboctave/system/file-stat.h,
liboctave/system/lo-sysdep.cc, liboctave/system/lo-sysdep.h,
liboctave/system/mach-info.cc, liboctave/system/mach-info.h,
liboctave/system/oct-env.cc, liboctave/system/oct-group.cc,
liboctave/system/oct-syscalls.cc, liboctave/system/oct-syscalls.h,
liboctave/system/oct-time.h, liboctave/system/tempname.c,
liboctave/util/action-container.h, liboctave/util/base-list.h,
liboctave/util/cmd-edit.cc, liboctave/util/cmd-edit.h,
liboctave/util/cmd-hist.cc, liboctave/util/cmd-hist.h,
liboctave/util/data-conv.cc, liboctave/util/data-conv.h,
liboctave/util/kpse.cc, liboctave/util/lo-array-gripes.cc,
liboctave/util/lo-cieee.c, liboctave/util/lo-regexp.cc,
liboctave/util/lo-utils.cc, liboctave/util/oct-alloc.cc,
liboctave/util/oct-base64.cc, liboctave/util/oct-binmap.h,
liboctave/util/oct-cmplx.h, liboctave/util/oct-glob.cc,
liboctave/util/oct-inttypes.cc, liboctave/util/oct-inttypes.h,
liboctave/util/oct-locbuf.cc, liboctave/util/oct-locbuf.h,
liboctave/util/oct-mem.h, liboctave/util/oct-mutex.cc,
liboctave/util/oct-refcount.h, liboctave/util/oct-shlib.cc,
liboctave/util/oct-shlib.h, liboctave/util/oct-sort.cc,
liboctave/util/oct-sort.h, liboctave/util/pathsearch.cc,
liboctave/util/pathsearch.h, liboctave/util/sparse-util.cc,
liboctave/util/str-vec.cc, liboctave/util/str-vec.h,
liboctave/util/unwind-prot.h, liboctave/util/url-transfer.cc,
liboctave/util/url-transfer.h: Use GNU style coding conventions.
author | Rik <rik@octave.org> |
---|---|
date | Sat, 26 Oct 2013 18:57:05 -0700 |
parents | d63878346099 |
children | 8e056300994b |
rev | line source |
---|---|
10385
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
1 /* |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
2 |
17744
d63878346099
maint: Update copyright notices for release.
John W. Eaton <jwe@octave.org>
parents:
17696
diff
changeset
|
3 Copyright (C) 2010-2013 VZLU Prague |
10385
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
4 |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
5 This file is part of Octave. |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
6 |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
7 Octave is free software; you can redistribute it and/or modify it |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
8 under the terms of the GNU General Public License as published by the |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
9 Free Software Foundation; either version 3 of the License, or (at your |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
10 option) any later version. |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
11 |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
12 Octave is distributed in the hope that it will be useful, but WITHOUT |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
15 for more details. |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
16 |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
17 You should have received a copy of the GNU General Public License |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
18 along with Octave; see the file COPYING. If not, see |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
19 <http://www.gnu.org/licenses/>. |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
20 |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
21 */ |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
22 |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
23 #ifdef HAVE_CONFIG_H |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
24 #include <config.h> |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
25 #endif |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
26 |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
27 #include <iostream> |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
28 #include <algorithm> |
10388
5af0b4bb384d
rewrite convn optimizations based on xAXPY
Jaroslav Hajek <highegg@gmail.com>
parents:
10385
diff
changeset
|
29 |
5af0b4bb384d
rewrite convn optimizations based on xAXPY
Jaroslav Hajek <highegg@gmail.com>
parents:
10385
diff
changeset
|
30 #include "f77-fcn.h" |
5af0b4bb384d
rewrite convn optimizations based on xAXPY
Jaroslav Hajek <highegg@gmail.com>
parents:
10385
diff
changeset
|
31 |
10385
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
32 #include "oct-convn.h" |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
33 #include "oct-locbuf.h" |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
34 |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
35 // 2d convolution with a matrix kernel. |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
36 template <class T, class R> |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
37 static void |
10385
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
38 convolve_2d (const T *a, octave_idx_type ma, octave_idx_type na, |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
39 const R *b, octave_idx_type mb, octave_idx_type nb, |
10388
5af0b4bb384d
rewrite convn optimizations based on xAXPY
Jaroslav Hajek <highegg@gmail.com>
parents:
10385
diff
changeset
|
40 T *c, bool inner); |
10385
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
41 |
10388
5af0b4bb384d
rewrite convn optimizations based on xAXPY
Jaroslav Hajek <highegg@gmail.com>
parents:
10385
diff
changeset
|
42 // Forward instances to our Fortran implementations. |
5af0b4bb384d
rewrite convn optimizations based on xAXPY
Jaroslav Hajek <highegg@gmail.com>
parents:
10385
diff
changeset
|
43 #define FORWARD_IMPL(T,R,f,F) \ |
5af0b4bb384d
rewrite convn optimizations based on xAXPY
Jaroslav Hajek <highegg@gmail.com>
parents:
10385
diff
changeset
|
44 extern "C" \ |
5af0b4bb384d
rewrite convn optimizations based on xAXPY
Jaroslav Hajek <highegg@gmail.com>
parents:
10385
diff
changeset
|
45 F77_RET_T \ |
11518 | 46 F77_FUNC (f##conv2o, F##CONV2O) (const octave_idx_type&, \ |
47 const octave_idx_type&, \ | |
48 const T*, const octave_idx_type&, \ | |
49 const octave_idx_type&, const R*, T *); \ | |
10388
5af0b4bb384d
rewrite convn optimizations based on xAXPY
Jaroslav Hajek <highegg@gmail.com>
parents:
10385
diff
changeset
|
50 \ |
5af0b4bb384d
rewrite convn optimizations based on xAXPY
Jaroslav Hajek <highegg@gmail.com>
parents:
10385
diff
changeset
|
51 extern "C" \ |
5af0b4bb384d
rewrite convn optimizations based on xAXPY
Jaroslav Hajek <highegg@gmail.com>
parents:
10385
diff
changeset
|
52 F77_RET_T \ |
11518 | 53 F77_FUNC (f##conv2i, F##CONV2I) (const octave_idx_type&, \ |
54 const octave_idx_type&, \ | |
55 const T*, const octave_idx_type&, \ | |
56 const octave_idx_type&, const R*, T *); \ | |
10388
5af0b4bb384d
rewrite convn optimizations based on xAXPY
Jaroslav Hajek <highegg@gmail.com>
parents:
10385
diff
changeset
|
57 \ |
5af0b4bb384d
rewrite convn optimizations based on xAXPY
Jaroslav Hajek <highegg@gmail.com>
parents:
10385
diff
changeset
|
58 template <> void \ |
5af0b4bb384d
rewrite convn optimizations based on xAXPY
Jaroslav Hajek <highegg@gmail.com>
parents:
10385
diff
changeset
|
59 convolve_2d<T, R> (const T *a, octave_idx_type ma, octave_idx_type na, \ |
5af0b4bb384d
rewrite convn optimizations based on xAXPY
Jaroslav Hajek <highegg@gmail.com>
parents:
10385
diff
changeset
|
60 const R *b, octave_idx_type mb, octave_idx_type nb, \ |
5af0b4bb384d
rewrite convn optimizations based on xAXPY
Jaroslav Hajek <highegg@gmail.com>
parents:
10385
diff
changeset
|
61 T *c, bool inner) \ |
5af0b4bb384d
rewrite convn optimizations based on xAXPY
Jaroslav Hajek <highegg@gmail.com>
parents:
10385
diff
changeset
|
62 { \ |
5af0b4bb384d
rewrite convn optimizations based on xAXPY
Jaroslav Hajek <highegg@gmail.com>
parents:
10385
diff
changeset
|
63 if (inner) \ |
5af0b4bb384d
rewrite convn optimizations based on xAXPY
Jaroslav Hajek <highegg@gmail.com>
parents:
10385
diff
changeset
|
64 F77_XFCN (f##conv2i, F##CONV2I, (ma, na, a, mb, nb, b, c)); \ |
5af0b4bb384d
rewrite convn optimizations based on xAXPY
Jaroslav Hajek <highegg@gmail.com>
parents:
10385
diff
changeset
|
65 else \ |
5af0b4bb384d
rewrite convn optimizations based on xAXPY
Jaroslav Hajek <highegg@gmail.com>
parents:
10385
diff
changeset
|
66 F77_XFCN (f##conv2o, F##CONV2O, (ma, na, a, mb, nb, b, c)); \ |
5af0b4bb384d
rewrite convn optimizations based on xAXPY
Jaroslav Hajek <highegg@gmail.com>
parents:
10385
diff
changeset
|
67 } |
10385
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
68 |
10388
5af0b4bb384d
rewrite convn optimizations based on xAXPY
Jaroslav Hajek <highegg@gmail.com>
parents:
10385
diff
changeset
|
69 FORWARD_IMPL (double, double, d, D) |
5af0b4bb384d
rewrite convn optimizations based on xAXPY
Jaroslav Hajek <highegg@gmail.com>
parents:
10385
diff
changeset
|
70 FORWARD_IMPL (float, float, s, S) |
5af0b4bb384d
rewrite convn optimizations based on xAXPY
Jaroslav Hajek <highegg@gmail.com>
parents:
10385
diff
changeset
|
71 FORWARD_IMPL (Complex, Complex, z, Z) |
5af0b4bb384d
rewrite convn optimizations based on xAXPY
Jaroslav Hajek <highegg@gmail.com>
parents:
10385
diff
changeset
|
72 FORWARD_IMPL (FloatComplex, FloatComplex, c, C) |
5af0b4bb384d
rewrite convn optimizations based on xAXPY
Jaroslav Hajek <highegg@gmail.com>
parents:
10385
diff
changeset
|
73 FORWARD_IMPL (Complex, double, zd, ZD) |
5af0b4bb384d
rewrite convn optimizations based on xAXPY
Jaroslav Hajek <highegg@gmail.com>
parents:
10385
diff
changeset
|
74 FORWARD_IMPL (FloatComplex, float, cs, CS) |
10385
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
75 |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
76 template <class T, class R> |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
77 void convolve_nd (const T *a, const dim_vector& ad, const dim_vector& acd, |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
78 const R *b, const dim_vector& bd, const dim_vector& bcd, |
10388
5af0b4bb384d
rewrite convn optimizations based on xAXPY
Jaroslav Hajek <highegg@gmail.com>
parents:
10385
diff
changeset
|
79 T *c, const dim_vector& ccd, int nd, bool inner) |
10385
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
80 { |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
81 if (nd == 2) |
10388
5af0b4bb384d
rewrite convn optimizations based on xAXPY
Jaroslav Hajek <highegg@gmail.com>
parents:
10385
diff
changeset
|
82 convolve_2d<T, R> (a, ad(0), ad(1), b, bd(0), bd(1), c, inner); |
10385
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
83 else |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
84 { |
17769
49a5a4be04a1
maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
85 octave_idx_type ma = acd(nd-2); |
49a5a4be04a1
maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
86 octave_idx_type na = ad(nd-1); |
49a5a4be04a1
maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
87 octave_idx_type mb = bcd(nd-2); |
49a5a4be04a1
maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
88 octave_idx_type nb = bd(nd-1); |
10385
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
89 octave_idx_type ldc = ccd(nd-2); |
10388
5af0b4bb384d
rewrite convn optimizations based on xAXPY
Jaroslav Hajek <highegg@gmail.com>
parents:
10385
diff
changeset
|
90 if (inner) |
5af0b4bb384d
rewrite convn optimizations based on xAXPY
Jaroslav Hajek <highegg@gmail.com>
parents:
10385
diff
changeset
|
91 { |
5af0b4bb384d
rewrite convn optimizations based on xAXPY
Jaroslav Hajek <highegg@gmail.com>
parents:
10385
diff
changeset
|
92 for (octave_idx_type ja = 0; ja < na - nb + 1; ja++) |
5af0b4bb384d
rewrite convn optimizations based on xAXPY
Jaroslav Hajek <highegg@gmail.com>
parents:
10385
diff
changeset
|
93 for (octave_idx_type jb = 0; jb < nb; jb++) |
17769
49a5a4be04a1
maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
94 convolve_nd<T, R> (a + ma*(ja+jb), ad, acd, |
49a5a4be04a1
maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
95 b + mb*(nb-jb-1), bd, bcd, |
10388
5af0b4bb384d
rewrite convn optimizations based on xAXPY
Jaroslav Hajek <highegg@gmail.com>
parents:
10385
diff
changeset
|
96 c + ldc*ja, ccd, nd-1, inner); |
5af0b4bb384d
rewrite convn optimizations based on xAXPY
Jaroslav Hajek <highegg@gmail.com>
parents:
10385
diff
changeset
|
97 } |
5af0b4bb384d
rewrite convn optimizations based on xAXPY
Jaroslav Hajek <highegg@gmail.com>
parents:
10385
diff
changeset
|
98 else |
10385
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
99 { |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
100 for (octave_idx_type ja = 0; ja < na; ja++) |
10388
5af0b4bb384d
rewrite convn optimizations based on xAXPY
Jaroslav Hajek <highegg@gmail.com>
parents:
10385
diff
changeset
|
101 for (octave_idx_type jb = 0; jb < nb; jb++) |
5af0b4bb384d
rewrite convn optimizations based on xAXPY
Jaroslav Hajek <highegg@gmail.com>
parents:
10385
diff
changeset
|
102 convolve_nd<T, R> (a + ma*ja, ad, acd, b + mb*jb, bd, bcd, |
5af0b4bb384d
rewrite convn optimizations based on xAXPY
Jaroslav Hajek <highegg@gmail.com>
parents:
10385
diff
changeset
|
103 c + ldc*(ja+jb), ccd, nd-1, inner); |
10385
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
104 } |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
105 } |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
106 } |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
107 |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
108 // Arbitrary convolutor. |
10385
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
109 // The 2nd array is assumed to be the smaller one. |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
110 template <class T, class R> |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
111 static MArray<T> |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
112 convolve (const MArray<T>& a, const MArray<R>& b, |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
113 convn_type ct) |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
114 { |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
115 if (a.is_empty () || b.is_empty ()) |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
116 return MArray<T> (); |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
117 |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
118 int nd = std::max (a.ndims (), b.ndims ()); |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
119 const dim_vector adims = a.dims ().redim (nd), bdims = b.dims ().redim (nd); |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
120 dim_vector cdims = dim_vector::alloc (nd); |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
121 |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
122 for (int i = 0; i < nd; i++) |
10388
5af0b4bb384d
rewrite convn optimizations based on xAXPY
Jaroslav Hajek <highegg@gmail.com>
parents:
10385
diff
changeset
|
123 { |
5af0b4bb384d
rewrite convn optimizations based on xAXPY
Jaroslav Hajek <highegg@gmail.com>
parents:
10385
diff
changeset
|
124 if (ct == convn_valid) |
10389
8a551f02f10d
oct-convn.cc (convolve): cast int constant to octave_idx_type in call to std::max
John W. Eaton <jwe@octave.org>
parents:
10388
diff
changeset
|
125 cdims(i) = std::max (adims(i) - bdims(i) + 1, |
8a551f02f10d
oct-convn.cc (convolve): cast int constant to octave_idx_type in call to std::max
John W. Eaton <jwe@octave.org>
parents:
10388
diff
changeset
|
126 static_cast<octave_idx_type> (0)); |
10388
5af0b4bb384d
rewrite convn optimizations based on xAXPY
Jaroslav Hajek <highegg@gmail.com>
parents:
10385
diff
changeset
|
127 else |
10389
8a551f02f10d
oct-convn.cc (convolve): cast int constant to octave_idx_type in call to std::max
John W. Eaton <jwe@octave.org>
parents:
10388
diff
changeset
|
128 cdims(i) = std::max (adims(i) + bdims(i) - 1, |
8a551f02f10d
oct-convn.cc (convolve): cast int constant to octave_idx_type in call to std::max
John W. Eaton <jwe@octave.org>
parents:
10388
diff
changeset
|
129 static_cast<octave_idx_type> (0)); |
10388
5af0b4bb384d
rewrite convn optimizations based on xAXPY
Jaroslav Hajek <highegg@gmail.com>
parents:
10385
diff
changeset
|
130 } |
10385
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
131 |
14846
460a3c6d8bf1
maint: Use Octave coding convention for cuddled parenthis in function calls with empty argument lists.
Rik <octave@nomad.inbox5.com>
parents:
14209
diff
changeset
|
132 MArray<T> c (cdims, T ()); |
10385
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
133 |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
134 convolve_nd<T, R> (a.fortran_vec (), adims, adims.cumulative (), |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
135 b.fortran_vec (), bdims, bdims.cumulative (), |
17769
49a5a4be04a1
maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
136 c.fortran_vec (), cdims.cumulative (), |
49a5a4be04a1
maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
137 nd, ct == convn_valid); |
10385
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
138 |
10388
5af0b4bb384d
rewrite convn optimizations based on xAXPY
Jaroslav Hajek <highegg@gmail.com>
parents:
10385
diff
changeset
|
139 if (ct == convn_same) |
10385
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
140 { |
10388
5af0b4bb384d
rewrite convn optimizations based on xAXPY
Jaroslav Hajek <highegg@gmail.com>
parents:
10385
diff
changeset
|
141 // Pick the relevant part. |
11570
57632dea2446
attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
142 Array<idx_vector> sidx (dim_vector (nd, 1)); |
10388
5af0b4bb384d
rewrite convn optimizations based on xAXPY
Jaroslav Hajek <highegg@gmail.com>
parents:
10385
diff
changeset
|
143 |
5af0b4bb384d
rewrite convn optimizations based on xAXPY
Jaroslav Hajek <highegg@gmail.com>
parents:
10385
diff
changeset
|
144 for (int i = 0; i < nd; i++) |
14209
846273dae16b
Return correct part of convolution for 'same' parameter in conv2, convn (Bug #34893).
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
145 sidx(i) = idx_vector::make_range (bdims(i)/2, 1, adims(i)); |
10388
5af0b4bb384d
rewrite convn optimizations based on xAXPY
Jaroslav Hajek <highegg@gmail.com>
parents:
10385
diff
changeset
|
146 c = c.index (sidx); |
10385
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
147 } |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
148 |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
149 return c; |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
150 } |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
151 |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
152 #define CONV_DEFS(TPREF, RPREF) \ |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
153 TPREF ## NDArray \ |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
154 convn (const TPREF ## NDArray& a, const RPREF ## NDArray& b, convn_type ct) \ |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
155 { \ |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
156 return convolve (a, b, ct); \ |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
157 } \ |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
158 TPREF ## Matrix \ |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
159 convn (const TPREF ## Matrix& a, const RPREF ## Matrix& b, convn_type ct) \ |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
160 { \ |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
161 return convolve (a, b, ct); \ |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
162 } \ |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
163 TPREF ## Matrix \ |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
164 convn (const TPREF ## Matrix& a, const RPREF ## ColumnVector& c, \ |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
165 const RPREF ## RowVector& r, convn_type ct) \ |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
166 { \ |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
167 return convolve (a, c * r, ct); \ |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
168 } |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
169 |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
170 CONV_DEFS ( , ) |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
171 CONV_DEFS (Complex, ) |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
172 CONV_DEFS (Complex, Complex) |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
173 CONV_DEFS (Float, Float) |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
174 CONV_DEFS (FloatComplex, Float) |
56116dceb1e0
add omitted source from the last change
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
175 CONV_DEFS (FloatComplex, FloatComplex) |