annotate liboctave/oct-binmap.h @ 11586:12df7854fa7c

strip trailing whitespace from source files
author John W. Eaton <jwe@octave.org>
date Thu, 20 Jan 2011 17:24:59 -0500
parents fd0a3ac60b0e
children 61be447052c3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10435
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
1 /*
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
2
11523
fd0a3ac60b0e update copyright notices
John W. Eaton <jwe@octave.org>
parents: 10435
diff changeset
3 Copyright (C) 2010-2011 VZLU Prague
10435
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
4
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
5 This file is part of Octave.
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
6
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
7 Octave is free software; you can redistribute it and/or modify it
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
8 under the terms of the GNU General Public License as published by the
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
9 Free Software Foundation; either version 3 of the License, or (at your
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
10 option) any later version.
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
11
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
12 Octave is distributed in the hope that it will be useful, but WITHOUT
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
15 for more details.
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
16
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
18 along with Octave; see the file COPYING. If not, see
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
19 <http://www.gnu.org/licenses/>.
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
20
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
21 */
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
22
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
23 #if !defined (octave_binmap_h)
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
24 #define octave_binmap_h 1
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
25
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
26 #include "Array.h"
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
27 #include "Sparse.h"
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
28 #include "Array-util.h"
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
29
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
30 // This source implements a general binary maping function for arrays.
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
31 // The syntax is binmap<type> (a, b, f, [name]). type denotes the expected
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
32 // return type of the operation. a, b, should be one of the 6 combinations:
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
33 // Array-Array
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
34 // Array-scalar
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
35 // scalar-Array
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
36 // Sparse-Sparse
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
37 // Sparse-scalar
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
38 // scalar-Sparse
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
39 //
10435
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
40 // If both operands are nonscalar, name must be supplied. It is used as the base for error message
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
41 // when operands are nonconforming.
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
42 //
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
43 // The operation needs not be homogeneous, i.e. a, b and the result may be of distinct types.
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
44 // f can have any of the four signatures:
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
45 // U f (T, R)
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
46 // U f (const T&, R)
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
47 // U f (T, const R&)
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
48 // U f (const T&, const R&)
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
49 //
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
50 // Additionally, f can be an arbitrary functor object.
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
51 //
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
52 // octave_quit() is called at appropriate places, hence the operation is breakable.
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
53
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
54 // scalar-Array
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
55 template <class U, class T, class R, class F>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
56 Array<U>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
57 binmap (const T& x, const Array<R>& ya, F fcn)
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
58 {
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
59 octave_idx_type len = ya.numel ();
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
60
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
61 const R *y = ya.data ();
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
62
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
63 Array<U> result (ya.dims ());
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
64 U *p = result.fortran_vec ();
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
65
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
66 octave_idx_type i;
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
67 for (i = 0; i < len - 3; i += 4)
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
68 {
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
69 octave_quit ();
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
70
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
71 p[i] = fcn (x, y[i]);
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
72 p[i+1] = fcn (x, y[i+1]);
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
73 p[i+2] = fcn (x, y[i+2]);
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
74 p[i+3] = fcn (x, y[i+3]);
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
75 }
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
76
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
77 octave_quit ();
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
78
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
79 for (; i < len; i++)
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
80 p[i] = fcn (x, y[i]);
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
81
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
82 return result;
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
83 }
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
84
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
85 // Array-scalar
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
86 template <class U, class T, class R, class F>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
87 Array<U>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
88 binmap (const Array<T>& xa, const R& y, F fcn)
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
89 {
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
90 octave_idx_type len = xa.numel ();
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
91
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
92 const R *x = xa.data ();
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
93
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
94 Array<U> result (xa.dims ());
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
95 U *p = result.fortran_vec ();
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
96
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
97 octave_idx_type i;
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
98 for (i = 0; i < len - 3; i += 4)
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
99 {
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
100 octave_quit ();
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
101
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
102 p[i] = fcn (x[i], y);
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
103 p[i+1] = fcn (x[i+1], y);
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
104 p[i+2] = fcn (x[i+2], y);
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
105 p[i+3] = fcn (x[i+3], y);
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
106 }
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
107
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
108 octave_quit ();
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
109
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
110 for (; i < len; i++)
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
111 p[i] = fcn (x[i], y);
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
112
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
113 return result;
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
114 }
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
115
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
116 // Array-Array (treats singletons as scalars)
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
117 template <class U, class T, class R, class F>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
118 Array<U>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
119 binmap (const Array<T>& xa, const Array<R>& ya, F fcn, const char *name)
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
120 {
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
121 if (xa.numel () == 1)
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
122 return binmap<U, T, R, F> (xa(0), ya, fcn);
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
123 else if (ya.numel () == 1)
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
124 return binmap<U, T, R, F> (xa, ya(0), fcn);
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
125 else if (xa.dims () != ya.dims ())
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
126 gripe_nonconformant (name, xa.dims (), ya.dims ());
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
127
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
128 octave_idx_type len = xa.numel ();
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
129
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
130 const T *x = xa.data ();
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
131 const T *y = ya.data ();
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
132
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
133 Array<U> result (xa.dims ());
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
134 U *p = result.fortran_vec ();
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
135
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
136 octave_idx_type i;
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
137 for (i = 0; i < len - 3; i += 4)
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
138 {
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
139 octave_quit ();
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
140
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
141 p[i] = fcn (x[i], y[i]);
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
142 p[i+1] = fcn (x[i+1], y[i+1]);
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
143 p[i+2] = fcn (x[i+2], y[i+2]);
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
144 p[i+3] = fcn (x[i+3], y[i+3]);
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
145 }
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
146
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
147 octave_quit ();
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
148
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
149 for (; i < len; i++)
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
150 p[i] = fcn (x[i], y[i]);
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
151
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
152 return result;
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
153 }
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
154
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
155 // scalar-Sparse
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
156 template <class U, class T, class R, class F>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
157 Sparse<U>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
158 binmap (const T& x, const Sparse<R>& ys, F fcn)
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
159 {
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
160 octave_idx_type nz = ys.nnz ();
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
161 Sparse<U> retval (ys.rows (), ys.cols (), nz);
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
162 for (octave_idx_type i = 0; i < nz; i++)
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
163 {
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
164 octave_quit ();
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
165 retval.xdata(i) = fcn (x, ys.data(i));
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
166 }
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
167
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
168 octave_quit ();
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
169 retval.maybe_compress ();
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
170 return retval;
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
171 }
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
172
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
173 // Sparse-scalar
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
174 template <class U, class T, class R, class F>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
175 Sparse<U>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
176 binmap (const Sparse<T>& xs, const R& y, F fcn)
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
177 {
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
178 octave_idx_type nz = xs.nnz ();
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
179 Sparse<U> retval (xs.rows (), xs.cols (), nz);
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
180 for (octave_idx_type i = 0; i < nz; i++)
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
181 {
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
182 octave_quit ();
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
183 retval.xdata(i) = fcn (xs.data(i), y);
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
184 }
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
185
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
186 octave_quit ();
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
187 retval.maybe_compress ();
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
188 return retval;
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
189 }
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
190
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
191 // Sparse-Sparse (treats singletons as scalars)
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
192 template <class U, class T, class R, class F>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
193 Sparse<U>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
194 binmap (const Sparse<T>& xs, const Sparse<R>& ys, F fcn, const char *name)
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
195 {
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
196 if (xs.rows () == 1 && xs.cols () == 1)
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
197 return binmap<U, T, R, F> (xs(0,0), ys, fcn);
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
198 else if (ys.rows () == 1 && ys.cols () == 1)
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
199 return binmap<U, T, R, F> (xs, ys(0,0), fcn);
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
200 else if (xs.dims () != ys.dims ())
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
201 gripe_nonconformant (name, xs.dims (), ys.dims ());
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
202
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
203 T xzero = T ();
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
204 R yzero = R ();
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
205
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
206 U fz = fcn (xzero, yzero);
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
207 if (fz == U())
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
208 {
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
209 // Sparsity-preserving function. Do it efficiently.
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
210 octave_idx_type nr = xs.rows (), nc = xs.cols ();
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
211 Sparse<T> retval (nr, nc);
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
212
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
213 octave_idx_type nz = 0;
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
214 // Count nonzeros.
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
215 for (octave_idx_type j = 0; j < nc; j++)
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
216 {
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
217 octave_quit ();
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
218 octave_idx_type ix = xs.cidx(j), iy = ys.cidx(j);
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
219 octave_idx_type ux = xs.cidx(j+1), uy = ys.cidx(j+1);
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
220 while (ix != ux || iy != uy)
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
221 {
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
222 octave_idx_type rx = xs.ridx(ix), ry = ys.ridx(ix);
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
223 ix += rx <= ry;
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
224 iy += ry <= rx;
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
225 nz++;
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
226 }
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
227
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
228 retval.xcidx(j+1) = nz;
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
229 }
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
230
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
231 // Allocate space.
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
232 retval.change_capacity (retval.xcidx(nc));
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
233
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
234 // Fill.
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
235 nz = 0;
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
236 for (octave_idx_type j = 0; j < nc; j++)
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
237 {
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
238 octave_quit ();
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
239 octave_idx_type ix = xs.cidx(j), iy = ys.cidx(j);
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
240 octave_idx_type ux = xs.cidx(j+1), uy = ys.cidx(j+1);
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
241 while (ix != ux || iy != uy)
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
242 {
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
243 octave_idx_type rx = xs.ridx(ix), ry = ys.ridx(ix);
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
244 if (rx == ry)
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
245 {
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
246 retval.xridx(nz) = rx;
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
247 retval.xdata(nz) = fcn (xs.data(ix), ys.data(iy));
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
248 ix++;
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
249 iy++;
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
250 }
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
251 else if (rx < ry)
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
252 {
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
253 retval.xridx(nz) = rx;
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
254 retval.xdata(nz) = fcn (xs.data(ix), yzero);
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
255 ix++;
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
256 }
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
257 else if (ry < rx)
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
258 {
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
259 retval.xridx(nz) = ry;
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
260 retval.xdata(nz) = fcn (xzero, ys.data(iy));
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
261 iy++;
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
262 }
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
263
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
264 nz++;
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
265 }
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
266 }
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
267
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
268 retval.maybe_compress ();
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
269 return retval;
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
270 }
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
271 else
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
272 return Sparse<U> (binmap<U, T, R, F> (xs.array_value (), ys.array_value (),
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
273 fcn, name));
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
274 }
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
275
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
276 // Overloads for function references.
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
277
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
278 // Signature (T, R)
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
279
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
280 template <class U, class T, class R>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
281 inline Array<U>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
282 binmap (const Array<T>& xa, const Array<R>& ya, U (&fcn) (T, R), const char *name)
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
283 { return binmap<U, T, R, U (&) (T, R)> (xa, ya, fcn, name); }
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
284
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
285 template <class U, class T, class R>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
286 inline Array<U>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
287 binmap (const T& x, const Array<R>& ya, U (&fcn) (T, R))
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
288 { return binmap<U, T, R, U (&) (T, R)> (x, ya, fcn); }
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
289
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
290 template <class U, class T, class R>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
291 inline Array<U>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
292 binmap (const Array<T>& xa, const R& y, U (&fcn) (T, R))
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
293 { return binmap<U, T, R, U (&) (T, R)> (xa, y, fcn); }
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
294
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
295 template <class U, class T, class R>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
296 inline Sparse<U>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
297 binmap (const Sparse<T>& xa, const Sparse<R>& ya, U (&fcn) (T, R), const char *name)
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
298 { return binmap<U, T, R, U (&) (T, R)> (xa, ya, fcn, name); }
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
299
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
300 template <class U, class T, class R>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
301 inline Sparse<U>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
302 binmap (const T& x, const Sparse<R>& ya, U (&fcn) (T, R))
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
303 { return binmap<U, T, R, U (&) (T, R)> (x, ya, fcn); }
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
304
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
305 template <class U, class T, class R>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
306 inline Sparse<U>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
307 binmap (const Sparse<T>& xa, const R& y, U (&fcn) (T, R))
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
308 { return binmap<U, T, R, U (&) (T, R)> (xa, y, fcn); }
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
309
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
310 // Signature (const T&, const R&)
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
311
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
312 template <class U, class T, class R>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
313 inline Array<U>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
314 binmap (const Array<T>& xa, const Array<R>& ya, U (&fcn) (const T&, const R&), const char *name)
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
315 { return binmap<U, T, R, U (&) (const T&, const R&)> (xa, ya, fcn, name); }
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
316
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
317 template <class U, class T, class R>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
318 inline Array<U>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
319 binmap (const T& x, const Array<R>& ya, U (&fcn) (const T&, const R&))
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
320 { return binmap<U, T, R, U (&) (const T&, const R&)> (x, ya, fcn); }
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
321
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
322 template <class U, class T, class R>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
323 inline Array<U>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
324 binmap (const Array<T>& xa, const R& y, U (&fcn) (const T&, const R&))
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
325 { return binmap<U, T, R, U (&) (const T&, const R&)> (xa, y, fcn); }
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
326
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
327 template <class U, class T, class R>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
328 inline Sparse<U>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
329 binmap (const Sparse<T>& xa, const Sparse<R>& ya, U (&fcn) (const T&, const R&), const char *name)
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
330 { return binmap<U, T, R, U (&) (const T&, const R&)> (xa, ya, fcn, name); }
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
331
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
332 template <class U, class T, class R>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
333 inline Sparse<U>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
334 binmap (const T& x, const Sparse<R>& ya, U (&fcn) (const T&, const R&))
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
335 { return binmap<U, T, R, U (&) (const T&, const R&)> (x, ya, fcn); }
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
336
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
337 template <class U, class T, class R>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
338 inline Sparse<U>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
339 binmap (const Sparse<T>& xa, const R& y, U (&fcn) (const T&, const R&))
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
340 { return binmap<U, T, R, U (&) (const T&, const R&)> (xa, y, fcn); }
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
341
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
342 // Signature (const T&, R)
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
343
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
344 template <class U, class T, class R>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
345 inline Array<U>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
346 binmap (const Array<T>& xa, const Array<R>& ya, U (&fcn) (const T&, R), const char *name)
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
347 { return binmap<U, T, R, U (&) (const T&, R)> (xa, ya, fcn, name); }
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
348
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
349 template <class U, class T, class R>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
350 inline Array<U>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
351 binmap (const T& x, const Array<R>& ya, U (&fcn) (const T&, R))
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
352 { return binmap<U, T, R, U (&) (const T&, R)> (x, ya, fcn); }
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
353
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
354 template <class U, class T, class R>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
355 inline Array<U>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
356 binmap (const Array<T>& xa, const R& y, U (&fcn) (const T&, R))
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
357 { return binmap<U, T, R, U (&) (const T&, R)> (xa, y, fcn); }
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
358
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
359 template <class U, class T, class R>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
360 inline Sparse<U>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
361 binmap (const Sparse<T>& xa, const Sparse<R>& ya, U (&fcn) (const T&, R), const char *name)
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
362 { return binmap<U, T, R, U (&) (const T&, R)> (xa, ya, fcn, name); }
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
363
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
364 template <class U, class T, class R>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
365 inline Sparse<U>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
366 binmap (const T& x, const Sparse<R>& ya, U (&fcn) (const T&, R))
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
367 { return binmap<U, T, R, U (&) (const T&, R)> (x, ya, fcn); }
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
368
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
369 template <class U, class T, class R>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
370 inline Sparse<U>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
371 binmap (const Sparse<T>& xa, const R& y, U (&fcn) (const T&, R))
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
372 { return binmap<U, T, R, U (&) (const T&, R)> (xa, y, fcn); }
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
373
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
374 // Signature (T, const R&)
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
375
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
376 template <class U, class T, class R>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
377 inline Array<U>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
378 binmap (const Array<T>& xa, const Array<R>& ya, U (&fcn) (T, const R&), const char *name)
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
379 { return binmap<U, T, R, U (&) (T, const R&)> (xa, ya, fcn, name); }
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
380
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
381 template <class U, class T, class R>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
382 inline Array<U>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
383 binmap (const T& x, const Array<R>& ya, U (&fcn) (T, const R&))
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
384 { return binmap<U, T, R, U (&) (T, const R&)> (x, ya, fcn); }
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
385
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
386 template <class U, class T, class R>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
387 inline Array<U>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
388 binmap (const Array<T>& xa, const R& y, U (&fcn) (T, const R&))
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
389 { return binmap<U, T, R, U (&) (T, const R&)> (xa, y, fcn); }
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
390
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
391 template <class U, class T, class R>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
392 inline Sparse<U>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
393 binmap (const Sparse<T>& xa, const Sparse<R>& ya, U (&fcn) (T, const R&), const char *name)
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
394 { return binmap<U, T, R, U (&) (T, const R&)> (xa, ya, fcn, name); }
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
395
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
396 template <class U, class T, class R>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
397 inline Sparse<U>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
398 binmap (const T& x, const Sparse<R>& ya, U (&fcn) (T, const R&))
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
399 { return binmap<U, T, R, U (&) (T, const R&)> (x, ya, fcn); }
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
400
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
401 template <class U, class T, class R>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
402 inline Sparse<U>
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
403 binmap (const Sparse<T>& xa, const R& y, U (&fcn) (T, const R&))
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
404 { return binmap<U, T, R, U (&) (T, const R&)> (xa, y, fcn); }
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
405
6a271334750c implement general binary mapping facility
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
406 #endif