Eurobot2012_Secondary

Fork of Eurobot_2012_Secondary by Shuto Naruse

Committer:
narshu
Date:
Wed Oct 17 22:25:31 2012 +0000
Revision:
1:cc2a9eb0bd55
Commit before publishing

Who changed what in which revision?

UserRevisionLine numberNew contents of line
narshu 1:cc2a9eb0bd55 1 /*
narshu 1:cc2a9eb0bd55 2 * Tiny Vector Matrix Library
narshu 1:cc2a9eb0bd55 3 * Dense Vector Matrix Libary of Tiny size using Expression Templates
narshu 1:cc2a9eb0bd55 4 *
narshu 1:cc2a9eb0bd55 5 * Copyright (C) 2001 - 2007 Olaf Petzold <opetzold@users.sourceforge.net>
narshu 1:cc2a9eb0bd55 6 *
narshu 1:cc2a9eb0bd55 7 * This library is free software; you can redistribute it and/or
narshu 1:cc2a9eb0bd55 8 * modify it under the terms of the GNU lesser General Public
narshu 1:cc2a9eb0bd55 9 * License as published by the Free Software Foundation; either
narshu 1:cc2a9eb0bd55 10 * version 2.1 of the License, or (at your option) any later version.
narshu 1:cc2a9eb0bd55 11 *
narshu 1:cc2a9eb0bd55 12 * This library is distributed in the hope that it will be useful,
narshu 1:cc2a9eb0bd55 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
narshu 1:cc2a9eb0bd55 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
narshu 1:cc2a9eb0bd55 15 * lesser General Public License for more details.
narshu 1:cc2a9eb0bd55 16 *
narshu 1:cc2a9eb0bd55 17 * You should have received a copy of the GNU lesser General Public
narshu 1:cc2a9eb0bd55 18 * License along with this library; if not, write to the Free Software
narshu 1:cc2a9eb0bd55 19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
narshu 1:cc2a9eb0bd55 20 *
narshu 1:cc2a9eb0bd55 21 * $Id: MatrixEval.h,v 1.18 2007-06-23 15:58:58 opetzold Exp $
narshu 1:cc2a9eb0bd55 22 */
narshu 1:cc2a9eb0bd55 23
narshu 1:cc2a9eb0bd55 24 #ifndef TVMET_MATRIX_EVAL_H
narshu 1:cc2a9eb0bd55 25 #define TVMET_MATRIX_EVAL_H
narshu 1:cc2a9eb0bd55 26
narshu 1:cc2a9eb0bd55 27 namespace tvmet {
narshu 1:cc2a9eb0bd55 28
narshu 1:cc2a9eb0bd55 29
narshu 1:cc2a9eb0bd55 30 /**
narshu 1:cc2a9eb0bd55 31 * \fn bool all_elements(const XprMatrix<E, Rows, Cols>& e)
narshu 1:cc2a9eb0bd55 32 * \brief check on statements for all elements
narshu 1:cc2a9eb0bd55 33 * \ingroup _unary_function
narshu 1:cc2a9eb0bd55 34 * This is for use with boolean operators like
narshu 1:cc2a9eb0bd55 35 * \par Example:
narshu 1:cc2a9eb0bd55 36 * \code
narshu 1:cc2a9eb0bd55 37 * all_elements(matrix > 0) {
narshu 1:cc2a9eb0bd55 38 * // true branch
narshu 1:cc2a9eb0bd55 39 * } else {
narshu 1:cc2a9eb0bd55 40 * // false branch
narshu 1:cc2a9eb0bd55 41 * }
narshu 1:cc2a9eb0bd55 42 * \endcode
narshu 1:cc2a9eb0bd55 43 * \sa \ref compare
narshu 1:cc2a9eb0bd55 44 */
narshu 1:cc2a9eb0bd55 45 template<class E, std::size_t Rows, std::size_t Cols>
narshu 1:cc2a9eb0bd55 46 inline
narshu 1:cc2a9eb0bd55 47 bool all_elements(const XprMatrix<E, Rows, Cols>& e) {
narshu 1:cc2a9eb0bd55 48 return meta::Matrix<Rows, Cols, 0, 0>::all_elements(e);
narshu 1:cc2a9eb0bd55 49 }
narshu 1:cc2a9eb0bd55 50
narshu 1:cc2a9eb0bd55 51
narshu 1:cc2a9eb0bd55 52 /**
narshu 1:cc2a9eb0bd55 53 * \fn bool any_elements(const XprMatrix<E, Rows, Cols>& e)
narshu 1:cc2a9eb0bd55 54 * \brief check on statements for any elements
narshu 1:cc2a9eb0bd55 55 * \ingroup _unary_function
narshu 1:cc2a9eb0bd55 56 * This is for use with boolean operators like
narshu 1:cc2a9eb0bd55 57 * \par Example:
narshu 1:cc2a9eb0bd55 58 * \code
narshu 1:cc2a9eb0bd55 59 * any_elements(matrix > 0) {
narshu 1:cc2a9eb0bd55 60 * // true branch
narshu 1:cc2a9eb0bd55 61 * } else {
narshu 1:cc2a9eb0bd55 62 * // false branch
narshu 1:cc2a9eb0bd55 63 * }
narshu 1:cc2a9eb0bd55 64 * \endcode
narshu 1:cc2a9eb0bd55 65 * \sa \ref compare
narshu 1:cc2a9eb0bd55 66 */
narshu 1:cc2a9eb0bd55 67 template<class E, std::size_t Rows, std::size_t Cols>
narshu 1:cc2a9eb0bd55 68 inline
narshu 1:cc2a9eb0bd55 69 bool any_elements(const XprMatrix<E, Rows, Cols>& e) {
narshu 1:cc2a9eb0bd55 70 return meta::Matrix<Rows, Cols, 0, 0>::any_elements(e);
narshu 1:cc2a9eb0bd55 71 }
narshu 1:cc2a9eb0bd55 72
narshu 1:cc2a9eb0bd55 73
narshu 1:cc2a9eb0bd55 74 /*
narshu 1:cc2a9eb0bd55 75 * trinary evaluation functions with matrizes and xpr of
narshu 1:cc2a9eb0bd55 76 *
narshu 1:cc2a9eb0bd55 77 * XprMatrix<E1, Rows, Cols> ? Matrix<T2, Rows, Cols> : Matrix<T3, Rows, Cols>
narshu 1:cc2a9eb0bd55 78 * XprMatrix<E1, Rows, Cols> ? Matrix<T2, Rows, Cols> : XprMatrix<E3, Rows, Cols>
narshu 1:cc2a9eb0bd55 79 * XprMatrix<E1, Rows, Cols> ? XprMatrix<E2, Rows, Cols> : Matrix<T3, Rows, Cols>
narshu 1:cc2a9eb0bd55 80 * XprMatrix<E1, Rows, Cols> ? XprMatrix<E2, Rows, Cols> : XprMatrix<E3, Rows, Cols>
narshu 1:cc2a9eb0bd55 81 */
narshu 1:cc2a9eb0bd55 82
narshu 1:cc2a9eb0bd55 83 /**
narshu 1:cc2a9eb0bd55 84 * \fn eval(const XprMatrix<E1, Rows, Cols>& e1, const Matrix<T2, Rows, Cols>& m2, const Matrix<T3, Rows, Cols>& m3)
narshu 1:cc2a9eb0bd55 85 * \brief Evals the matrix expressions.
narshu 1:cc2a9eb0bd55 86 * \ingroup _trinary_function
narshu 1:cc2a9eb0bd55 87 * This eval is for the a?b:c syntax, since it's not allowed to overload
narshu 1:cc2a9eb0bd55 88 * these operators.
narshu 1:cc2a9eb0bd55 89 */
narshu 1:cc2a9eb0bd55 90 template<class E1, class T2, class T3, std::size_t Rows, std::size_t Cols>
narshu 1:cc2a9eb0bd55 91 inline
narshu 1:cc2a9eb0bd55 92 XprMatrix<
narshu 1:cc2a9eb0bd55 93 XprEval<
narshu 1:cc2a9eb0bd55 94 XprMatrix<E1, Rows, Cols>,
narshu 1:cc2a9eb0bd55 95 MatrixConstReference<T2, Rows, Cols>,
narshu 1:cc2a9eb0bd55 96 MatrixConstReference<T3, Rows, Cols>
narshu 1:cc2a9eb0bd55 97 >,
narshu 1:cc2a9eb0bd55 98 Rows, Cols
narshu 1:cc2a9eb0bd55 99 >
narshu 1:cc2a9eb0bd55 100 eval(const XprMatrix<E1, Rows, Cols>& e1,
narshu 1:cc2a9eb0bd55 101 const Matrix<T2, Rows, Cols>& m2,
narshu 1:cc2a9eb0bd55 102 const Matrix<T3, Rows, Cols>& m3) {
narshu 1:cc2a9eb0bd55 103 typedef XprEval<
narshu 1:cc2a9eb0bd55 104 XprMatrix<E1, Rows, Cols>,
narshu 1:cc2a9eb0bd55 105 MatrixConstReference<T2, Rows, Cols>,
narshu 1:cc2a9eb0bd55 106 MatrixConstReference<T3, Rows, Cols>
narshu 1:cc2a9eb0bd55 107 > expr_type;
narshu 1:cc2a9eb0bd55 108 return XprMatrix<expr_type, Rows, Cols>(
narshu 1:cc2a9eb0bd55 109 expr_type(e1, m2.const_ref(), m3.const_ref()));
narshu 1:cc2a9eb0bd55 110 }
narshu 1:cc2a9eb0bd55 111
narshu 1:cc2a9eb0bd55 112
narshu 1:cc2a9eb0bd55 113 /**
narshu 1:cc2a9eb0bd55 114 * \fn eval(const XprMatrix<E1, Rows, Cols>& e1, const Matrix<T2, Rows, Cols>& m2, const XprMatrix<E3, Rows, Cols>& e3)
narshu 1:cc2a9eb0bd55 115 * \brief Evals the matrix expressions.
narshu 1:cc2a9eb0bd55 116 * \ingroup _trinary_function
narshu 1:cc2a9eb0bd55 117 * This eval is for the a?b:c syntax, since it's not allowed to overload
narshu 1:cc2a9eb0bd55 118 * these operators.
narshu 1:cc2a9eb0bd55 119 */
narshu 1:cc2a9eb0bd55 120 template<class E1, class T2, class E3, std::size_t Rows, std::size_t Cols>
narshu 1:cc2a9eb0bd55 121 inline
narshu 1:cc2a9eb0bd55 122 XprMatrix<
narshu 1:cc2a9eb0bd55 123 XprEval<
narshu 1:cc2a9eb0bd55 124 XprMatrix<E1, Rows, Cols>,
narshu 1:cc2a9eb0bd55 125 MatrixConstReference<T2, Rows, Cols>,
narshu 1:cc2a9eb0bd55 126 XprMatrix<E3, Rows, Cols>
narshu 1:cc2a9eb0bd55 127 >,
narshu 1:cc2a9eb0bd55 128 Rows, Cols
narshu 1:cc2a9eb0bd55 129 >
narshu 1:cc2a9eb0bd55 130 eval(const XprMatrix<E1, Rows, Cols>& e1,
narshu 1:cc2a9eb0bd55 131 const Matrix<T2, Rows, Cols>& m2,
narshu 1:cc2a9eb0bd55 132 const XprMatrix<E3, Rows, Cols>& e3) {
narshu 1:cc2a9eb0bd55 133 typedef XprEval<
narshu 1:cc2a9eb0bd55 134 XprMatrix<E1, Rows, Cols>,
narshu 1:cc2a9eb0bd55 135 MatrixConstReference<T2, Rows, Cols>,
narshu 1:cc2a9eb0bd55 136 XprMatrix<E3, Rows, Cols>
narshu 1:cc2a9eb0bd55 137 > expr_type;
narshu 1:cc2a9eb0bd55 138 return XprMatrix<expr_type, Rows, Cols>(
narshu 1:cc2a9eb0bd55 139 expr_type(e1, m2.const_ref(), e3));
narshu 1:cc2a9eb0bd55 140 }
narshu 1:cc2a9eb0bd55 141
narshu 1:cc2a9eb0bd55 142
narshu 1:cc2a9eb0bd55 143 /**
narshu 1:cc2a9eb0bd55 144 * \fn eval(const XprMatrix<E1, Rows, Cols>& e1, const XprMatrix<E2, Rows, Cols>& e2, const Matrix<T3, Rows, Cols>& m3)
narshu 1:cc2a9eb0bd55 145 * \brief Evals the matrix expressions.
narshu 1:cc2a9eb0bd55 146 * \ingroup _trinary_function
narshu 1:cc2a9eb0bd55 147 * This eval is for the a?b:c syntax, since it's not allowed to overload
narshu 1:cc2a9eb0bd55 148 * these operators.
narshu 1:cc2a9eb0bd55 149 */
narshu 1:cc2a9eb0bd55 150 template<class E1, class E2, class T3, std::size_t Rows, std::size_t Cols>
narshu 1:cc2a9eb0bd55 151 inline
narshu 1:cc2a9eb0bd55 152 XprMatrix<
narshu 1:cc2a9eb0bd55 153 XprEval<
narshu 1:cc2a9eb0bd55 154 XprMatrix<E1, Rows, Cols>,
narshu 1:cc2a9eb0bd55 155 XprMatrix<E2, Rows, Cols>,
narshu 1:cc2a9eb0bd55 156 MatrixConstReference<T3, Rows, Cols>
narshu 1:cc2a9eb0bd55 157 >,
narshu 1:cc2a9eb0bd55 158 Rows, Cols
narshu 1:cc2a9eb0bd55 159 >
narshu 1:cc2a9eb0bd55 160 eval(const XprMatrix<E1, Rows, Cols>& e1,
narshu 1:cc2a9eb0bd55 161 const XprMatrix<E2, Rows, Cols>& e2,
narshu 1:cc2a9eb0bd55 162 const Matrix<T3, Rows, Cols>& m3) {
narshu 1:cc2a9eb0bd55 163 typedef XprEval<
narshu 1:cc2a9eb0bd55 164 XprMatrix<E1, Rows, Cols>,
narshu 1:cc2a9eb0bd55 165 XprMatrix<E2, Rows, Cols>,
narshu 1:cc2a9eb0bd55 166 MatrixConstReference<T3, Rows, Cols>
narshu 1:cc2a9eb0bd55 167 > expr_type;
narshu 1:cc2a9eb0bd55 168 return XprMatrix<expr_type, Rows, Cols>(
narshu 1:cc2a9eb0bd55 169 expr_type(e1, e2, m3.const_ref()));
narshu 1:cc2a9eb0bd55 170 }
narshu 1:cc2a9eb0bd55 171
narshu 1:cc2a9eb0bd55 172
narshu 1:cc2a9eb0bd55 173 /**
narshu 1:cc2a9eb0bd55 174 * \fn eval(const XprMatrix<E1, Rows, Cols>& e1, const XprMatrix<E2, Rows, Cols>& e2, const XprMatrix<E3, Rows, Cols>& e3)
narshu 1:cc2a9eb0bd55 175 * \brief Evals the matrix expressions.
narshu 1:cc2a9eb0bd55 176 * \ingroup _trinary_function
narshu 1:cc2a9eb0bd55 177 * This eval is for the a?b:c syntax, since it's not allowed to overload
narshu 1:cc2a9eb0bd55 178 * these operators.
narshu 1:cc2a9eb0bd55 179 */
narshu 1:cc2a9eb0bd55 180 template<class E1, class E2, class E3, std::size_t Rows, std::size_t Cols>
narshu 1:cc2a9eb0bd55 181 inline
narshu 1:cc2a9eb0bd55 182 XprMatrix<
narshu 1:cc2a9eb0bd55 183 XprEval<
narshu 1:cc2a9eb0bd55 184 XprMatrix<E1, Rows, Cols>,
narshu 1:cc2a9eb0bd55 185 XprMatrix<E2, Rows, Cols>,
narshu 1:cc2a9eb0bd55 186 XprMatrix<E3, Rows, Cols>
narshu 1:cc2a9eb0bd55 187 >,
narshu 1:cc2a9eb0bd55 188 Rows, Cols
narshu 1:cc2a9eb0bd55 189 >
narshu 1:cc2a9eb0bd55 190 eval(const XprMatrix<E1, Rows, Cols>& e1,
narshu 1:cc2a9eb0bd55 191 const XprMatrix<E2, Rows, Cols>& e2,
narshu 1:cc2a9eb0bd55 192 const XprMatrix<E3, Rows, Cols>& e3) {
narshu 1:cc2a9eb0bd55 193 typedef XprEval<
narshu 1:cc2a9eb0bd55 194 XprMatrix<E1, Rows, Cols>,
narshu 1:cc2a9eb0bd55 195 XprMatrix<E2, Rows, Cols>,
narshu 1:cc2a9eb0bd55 196 XprMatrix<E3, Rows, Cols>
narshu 1:cc2a9eb0bd55 197 > expr_type;
narshu 1:cc2a9eb0bd55 198 return XprMatrix<expr_type, Rows, Cols>(expr_type(e1, e2, e3));
narshu 1:cc2a9eb0bd55 199 }
narshu 1:cc2a9eb0bd55 200
narshu 1:cc2a9eb0bd55 201
narshu 1:cc2a9eb0bd55 202 /*
narshu 1:cc2a9eb0bd55 203 * trinary evaluation functions with matrizes, xpr of and POD
narshu 1:cc2a9eb0bd55 204 *
narshu 1:cc2a9eb0bd55 205 * XprMatrix<E, Rows, Cols> ? POD1 : POD2
narshu 1:cc2a9eb0bd55 206 * XprMatrix<E1, Rows, Cols> ? POD : XprMatrix<E3, Rows, Cols>
narshu 1:cc2a9eb0bd55 207 * XprMatrix<E1, Rows, Cols> ? XprMatrix<E2, Rows, Cols> : POD
narshu 1:cc2a9eb0bd55 208 */
narshu 1:cc2a9eb0bd55 209 #define TVMET_IMPLEMENT_MACRO(POD) \
narshu 1:cc2a9eb0bd55 210 template<class E, std::size_t Rows, std::size_t Cols> \
narshu 1:cc2a9eb0bd55 211 inline \
narshu 1:cc2a9eb0bd55 212 XprMatrix< \
narshu 1:cc2a9eb0bd55 213 XprEval< \
narshu 1:cc2a9eb0bd55 214 XprMatrix<E, Rows, Cols>, \
narshu 1:cc2a9eb0bd55 215 XprLiteral< POD >, \
narshu 1:cc2a9eb0bd55 216 XprLiteral< POD > \
narshu 1:cc2a9eb0bd55 217 >, \
narshu 1:cc2a9eb0bd55 218 Rows, Cols \
narshu 1:cc2a9eb0bd55 219 > \
narshu 1:cc2a9eb0bd55 220 eval(const XprMatrix<E, Rows, Cols>& e, POD x2, POD x3) { \
narshu 1:cc2a9eb0bd55 221 typedef XprEval< \
narshu 1:cc2a9eb0bd55 222 XprMatrix<E, Rows, Cols>, \
narshu 1:cc2a9eb0bd55 223 XprLiteral< POD >, \
narshu 1:cc2a9eb0bd55 224 XprLiteral< POD > \
narshu 1:cc2a9eb0bd55 225 > expr_type; \
narshu 1:cc2a9eb0bd55 226 return XprMatrix<expr_type, Rows, Cols>( \
narshu 1:cc2a9eb0bd55 227 expr_type(e, XprLiteral< POD >(x2), XprLiteral< POD >(x3))); \
narshu 1:cc2a9eb0bd55 228 } \
narshu 1:cc2a9eb0bd55 229 \
narshu 1:cc2a9eb0bd55 230 template<class E1, class E3, std::size_t Rows, std::size_t Cols> \
narshu 1:cc2a9eb0bd55 231 inline \
narshu 1:cc2a9eb0bd55 232 XprMatrix< \
narshu 1:cc2a9eb0bd55 233 XprEval< \
narshu 1:cc2a9eb0bd55 234 XprMatrix<E1, Rows, Cols>, \
narshu 1:cc2a9eb0bd55 235 XprLiteral< POD >, \
narshu 1:cc2a9eb0bd55 236 XprMatrix<E3, Rows, Cols> \
narshu 1:cc2a9eb0bd55 237 >, \
narshu 1:cc2a9eb0bd55 238 Rows, Cols \
narshu 1:cc2a9eb0bd55 239 > \
narshu 1:cc2a9eb0bd55 240 eval(const XprMatrix<E1, Rows, Cols>& e1, POD x2, const XprMatrix<E3, Rows, Cols>& e3) { \
narshu 1:cc2a9eb0bd55 241 typedef XprEval< \
narshu 1:cc2a9eb0bd55 242 XprMatrix<E1, Rows, Cols>, \
narshu 1:cc2a9eb0bd55 243 XprLiteral< POD >, \
narshu 1:cc2a9eb0bd55 244 XprMatrix<E3, Rows, Cols> \
narshu 1:cc2a9eb0bd55 245 > expr_type; \
narshu 1:cc2a9eb0bd55 246 return XprMatrix<expr_type, Rows, Cols>( \
narshu 1:cc2a9eb0bd55 247 expr_type(e1, XprLiteral< POD >(x2), e3)); \
narshu 1:cc2a9eb0bd55 248 } \
narshu 1:cc2a9eb0bd55 249 \
narshu 1:cc2a9eb0bd55 250 template<class E1, class E2, std::size_t Rows, std::size_t Cols> \
narshu 1:cc2a9eb0bd55 251 inline \
narshu 1:cc2a9eb0bd55 252 XprMatrix< \
narshu 1:cc2a9eb0bd55 253 XprEval< \
narshu 1:cc2a9eb0bd55 254 XprMatrix<E1, Rows, Cols>, \
narshu 1:cc2a9eb0bd55 255 XprMatrix<E2, Rows, Cols>, \
narshu 1:cc2a9eb0bd55 256 XprLiteral< POD > \
narshu 1:cc2a9eb0bd55 257 >, \
narshu 1:cc2a9eb0bd55 258 Rows, Cols \
narshu 1:cc2a9eb0bd55 259 > \
narshu 1:cc2a9eb0bd55 260 eval(const XprMatrix<E1, Rows, Cols>& e1, const XprMatrix<E2, Rows, Cols>& e2, POD x3) { \
narshu 1:cc2a9eb0bd55 261 typedef XprEval< \
narshu 1:cc2a9eb0bd55 262 XprMatrix<E1, Rows, Cols>, \
narshu 1:cc2a9eb0bd55 263 XprMatrix<E2, Rows, Cols>, \
narshu 1:cc2a9eb0bd55 264 XprLiteral< POD > \
narshu 1:cc2a9eb0bd55 265 > expr_type; \
narshu 1:cc2a9eb0bd55 266 return XprMatrix<expr_type, Rows, Cols>( \
narshu 1:cc2a9eb0bd55 267 expr_type(e1, e2, XprLiteral< POD >(x3))); \
narshu 1:cc2a9eb0bd55 268 }
narshu 1:cc2a9eb0bd55 269
narshu 1:cc2a9eb0bd55 270 TVMET_IMPLEMENT_MACRO(int)
narshu 1:cc2a9eb0bd55 271
narshu 1:cc2a9eb0bd55 272 #if defined(TVMET_HAVE_LONG_LONG)
narshu 1:cc2a9eb0bd55 273 TVMET_IMPLEMENT_MACRO(long long int)
narshu 1:cc2a9eb0bd55 274 #endif
narshu 1:cc2a9eb0bd55 275
narshu 1:cc2a9eb0bd55 276 TVMET_IMPLEMENT_MACRO(float)
narshu 1:cc2a9eb0bd55 277 TVMET_IMPLEMENT_MACRO(double)
narshu 1:cc2a9eb0bd55 278
narshu 1:cc2a9eb0bd55 279 #if defined(TVMET_HAVE_LONG_DOUBLE)
narshu 1:cc2a9eb0bd55 280 TVMET_IMPLEMENT_MACRO(long double)
narshu 1:cc2a9eb0bd55 281 #endif
narshu 1:cc2a9eb0bd55 282
narshu 1:cc2a9eb0bd55 283 #undef TVMET_IMPLEMENT_MACRO
narshu 1:cc2a9eb0bd55 284
narshu 1:cc2a9eb0bd55 285
narshu 1:cc2a9eb0bd55 286 /*
narshu 1:cc2a9eb0bd55 287 * trinary evaluation functions with matrizes, xpr of and complex<> types
narshu 1:cc2a9eb0bd55 288 *
narshu 1:cc2a9eb0bd55 289 * XprMatrix<E, Rows, Cols> e, std::complex<T> z2, std::complex<T> z3
narshu 1:cc2a9eb0bd55 290 * XprMatrix<E1, Rows, Cols> e1, std::complex<T> z2, XprMatrix<E3, Rows, Cols> e3
narshu 1:cc2a9eb0bd55 291 * XprMatrix<E1, Rows, Cols> e1, XprMatrix<E2, Rows, Cols> e2, std::complex<T> z3
narshu 1:cc2a9eb0bd55 292 */
narshu 1:cc2a9eb0bd55 293 #if defined(TVMET_HAVE_COMPLEX)
narshu 1:cc2a9eb0bd55 294
narshu 1:cc2a9eb0bd55 295 /**
narshu 1:cc2a9eb0bd55 296 * \fn eval(const XprMatrix<E, Rows, Cols>& e, const std::complex<T>& x2, const std::complex<T>& x3)
narshu 1:cc2a9eb0bd55 297 * \brief Evals the matrix expressions.
narshu 1:cc2a9eb0bd55 298 * \ingroup _trinary_function
narshu 1:cc2a9eb0bd55 299 * This eval is for the a?b:c syntax, since it's not allowed to overload
narshu 1:cc2a9eb0bd55 300 * these operators.
narshu 1:cc2a9eb0bd55 301 */
narshu 1:cc2a9eb0bd55 302 template<class E, std::size_t Rows, std::size_t Cols, class T>
narshu 1:cc2a9eb0bd55 303 inline
narshu 1:cc2a9eb0bd55 304 XprMatrix<
narshu 1:cc2a9eb0bd55 305 XprEval<
narshu 1:cc2a9eb0bd55 306 XprMatrix<E, Rows, Cols>,
narshu 1:cc2a9eb0bd55 307 XprLiteral< std::complex<T> >,
narshu 1:cc2a9eb0bd55 308 XprLiteral< std::complex<T> >
narshu 1:cc2a9eb0bd55 309 >,
narshu 1:cc2a9eb0bd55 310 Rows, Cols
narshu 1:cc2a9eb0bd55 311 >
narshu 1:cc2a9eb0bd55 312 eval(const XprMatrix<E, Rows, Cols>& e, const std::complex<T>& x2, const std::complex<T>& x3) {
narshu 1:cc2a9eb0bd55 313 typedef XprEval<
narshu 1:cc2a9eb0bd55 314 XprMatrix<E, Rows, Cols>,
narshu 1:cc2a9eb0bd55 315 XprLiteral< std::complex<T> >,
narshu 1:cc2a9eb0bd55 316 XprLiteral< std::complex<T> >
narshu 1:cc2a9eb0bd55 317 > expr_type;
narshu 1:cc2a9eb0bd55 318 return XprMatrix<expr_type, Rows, Cols>(
narshu 1:cc2a9eb0bd55 319 expr_type(e, XprLiteral< std::complex<T> >(x2), XprLiteral< std::complex<T> >(x3)));
narshu 1:cc2a9eb0bd55 320 }
narshu 1:cc2a9eb0bd55 321
narshu 1:cc2a9eb0bd55 322
narshu 1:cc2a9eb0bd55 323 /**
narshu 1:cc2a9eb0bd55 324 * \fn eval(const XprMatrix<E1, Rows, Cols>& e1, const std::complex<T>& x2, const XprMatrix<E3, Rows, Cols>& e3)
narshu 1:cc2a9eb0bd55 325 * \brief Evals the matrix expressions.
narshu 1:cc2a9eb0bd55 326 * \ingroup _trinary_function
narshu 1:cc2a9eb0bd55 327 * This eval is for the a?b:c syntax, since it's not allowed to overload
narshu 1:cc2a9eb0bd55 328 * these operators.
narshu 1:cc2a9eb0bd55 329 */
narshu 1:cc2a9eb0bd55 330 template<class E1, class E3, std::size_t Rows, std::size_t Cols, class T>
narshu 1:cc2a9eb0bd55 331 inline
narshu 1:cc2a9eb0bd55 332 XprMatrix<
narshu 1:cc2a9eb0bd55 333 XprEval<
narshu 1:cc2a9eb0bd55 334 XprMatrix<E1, Rows, Cols>,
narshu 1:cc2a9eb0bd55 335 XprLiteral< std::complex<T> >,
narshu 1:cc2a9eb0bd55 336 XprMatrix<E3, Rows, Cols>
narshu 1:cc2a9eb0bd55 337 >,
narshu 1:cc2a9eb0bd55 338 Rows, Cols
narshu 1:cc2a9eb0bd55 339 >
narshu 1:cc2a9eb0bd55 340 eval(const XprMatrix<E1, Rows, Cols>& e1, const std::complex<T>& x2, const XprMatrix<E3, Rows, Cols>& e3) {
narshu 1:cc2a9eb0bd55 341 typedef XprEval<
narshu 1:cc2a9eb0bd55 342 XprMatrix<E1, Rows, Cols>,
narshu 1:cc2a9eb0bd55 343 XprLiteral< std::complex<T> >,
narshu 1:cc2a9eb0bd55 344 XprMatrix<E3, Rows, Cols>
narshu 1:cc2a9eb0bd55 345 > expr_type;
narshu 1:cc2a9eb0bd55 346 return XprMatrix<expr_type, Rows, Cols>(
narshu 1:cc2a9eb0bd55 347 expr_type(e1, XprLiteral< std::complex<T> >(x2), e3));
narshu 1:cc2a9eb0bd55 348 }
narshu 1:cc2a9eb0bd55 349
narshu 1:cc2a9eb0bd55 350
narshu 1:cc2a9eb0bd55 351 /**
narshu 1:cc2a9eb0bd55 352 * \fn eval(const XprMatrix<E1, Rows, Cols>& e1, const XprMatrix<E2, Rows, Cols>& e2, const std::complex<T>& x3)
narshu 1:cc2a9eb0bd55 353 * \brief Evals the matrix expressions.
narshu 1:cc2a9eb0bd55 354 * \ingroup _trinary_function
narshu 1:cc2a9eb0bd55 355 * This eval is for the a?b:c syntax, since it's not allowed to overload
narshu 1:cc2a9eb0bd55 356 * these operators.
narshu 1:cc2a9eb0bd55 357 */
narshu 1:cc2a9eb0bd55 358 template<class E1, class E2, std::size_t Rows, std::size_t Cols, class T>
narshu 1:cc2a9eb0bd55 359 inline
narshu 1:cc2a9eb0bd55 360 XprMatrix<
narshu 1:cc2a9eb0bd55 361 XprEval<
narshu 1:cc2a9eb0bd55 362 XprMatrix<E1, Rows, Cols>,
narshu 1:cc2a9eb0bd55 363 XprMatrix<E2, Rows, Cols>,
narshu 1:cc2a9eb0bd55 364 XprLiteral< std::complex<T> >
narshu 1:cc2a9eb0bd55 365 >,
narshu 1:cc2a9eb0bd55 366 Rows, Cols
narshu 1:cc2a9eb0bd55 367 >
narshu 1:cc2a9eb0bd55 368 eval(const XprMatrix<E1, Rows, Cols>& e1, const XprMatrix<E2, Rows, Cols>& e2, const std::complex<T>& x3) {
narshu 1:cc2a9eb0bd55 369 typedef XprEval<
narshu 1:cc2a9eb0bd55 370 XprMatrix<E1, Rows, Cols>,
narshu 1:cc2a9eb0bd55 371 XprMatrix<E2, Rows, Cols>,
narshu 1:cc2a9eb0bd55 372 XprLiteral< std::complex<T> >
narshu 1:cc2a9eb0bd55 373 > expr_type;
narshu 1:cc2a9eb0bd55 374 return XprMatrix<expr_type, Rows, Cols>(
narshu 1:cc2a9eb0bd55 375 expr_type(e1, e2, XprLiteral< std::complex<T> >(x3)));
narshu 1:cc2a9eb0bd55 376 }
narshu 1:cc2a9eb0bd55 377 #endif // defined(TVMET_HAVE_COMPLEX)
narshu 1:cc2a9eb0bd55 378
narshu 1:cc2a9eb0bd55 379
narshu 1:cc2a9eb0bd55 380 } // namespace tvmet
narshu 1:cc2a9eb0bd55 381
narshu 1:cc2a9eb0bd55 382 #endif // TVMET_MATRIX_EVAL_H
narshu 1:cc2a9eb0bd55 383
narshu 1:cc2a9eb0bd55 384 // Local Variables:
narshu 1:cc2a9eb0bd55 385 // mode:C++
narshu 1:cc2a9eb0bd55 386 // tab-width:8
narshu 1:cc2a9eb0bd55 387 // End: