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: VectorEval.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_VECTOR_EVAL_H
narshu 1:cc2a9eb0bd55 25 #define TVMET_VECTOR_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 * functions all_elements/any_elements
narshu 1:cc2a9eb0bd55 32 ********************************************************************/
narshu 1:cc2a9eb0bd55 33
narshu 1:cc2a9eb0bd55 34
narshu 1:cc2a9eb0bd55 35 /**
narshu 1:cc2a9eb0bd55 36 * \fn bool all_elements(const XprVector<E, Sz>& e)
narshu 1:cc2a9eb0bd55 37 * \brief check on statements for all elements
narshu 1:cc2a9eb0bd55 38 * \ingroup _unary_function
narshu 1:cc2a9eb0bd55 39 * This is for use with boolean operators like
narshu 1:cc2a9eb0bd55 40 * \par Example:
narshu 1:cc2a9eb0bd55 41 * \code
narshu 1:cc2a9eb0bd55 42 * all_elements(vector > 0) {
narshu 1:cc2a9eb0bd55 43 * // true branch
narshu 1:cc2a9eb0bd55 44 * } else {
narshu 1:cc2a9eb0bd55 45 * // false branch
narshu 1:cc2a9eb0bd55 46 * }
narshu 1:cc2a9eb0bd55 47 * \endcode
narshu 1:cc2a9eb0bd55 48 * \sa \ref compare
narshu 1:cc2a9eb0bd55 49 */
narshu 1:cc2a9eb0bd55 50 template<class E, std::size_t Sz>
narshu 1:cc2a9eb0bd55 51 inline
narshu 1:cc2a9eb0bd55 52 bool all_elements(const XprVector<E, Sz>& e) {
narshu 1:cc2a9eb0bd55 53 return meta::Vector<Sz>::all_elements(e);
narshu 1:cc2a9eb0bd55 54 }
narshu 1:cc2a9eb0bd55 55
narshu 1:cc2a9eb0bd55 56
narshu 1:cc2a9eb0bd55 57 /**
narshu 1:cc2a9eb0bd55 58 * \fn bool any_elements(const XprVector<E, Sz>& e)
narshu 1:cc2a9eb0bd55 59 * \brief check on statements for any elements
narshu 1:cc2a9eb0bd55 60 * \ingroup _unary_function
narshu 1:cc2a9eb0bd55 61 * This is for use with boolean operators like
narshu 1:cc2a9eb0bd55 62 * \par Example:
narshu 1:cc2a9eb0bd55 63 * \code
narshu 1:cc2a9eb0bd55 64 * any_elements(vector > 0) {
narshu 1:cc2a9eb0bd55 65 * // true branch
narshu 1:cc2a9eb0bd55 66 * } else {
narshu 1:cc2a9eb0bd55 67 * // false branch
narshu 1:cc2a9eb0bd55 68 * }
narshu 1:cc2a9eb0bd55 69 * \endcode
narshu 1:cc2a9eb0bd55 70 * \sa \ref compare
narshu 1:cc2a9eb0bd55 71 */
narshu 1:cc2a9eb0bd55 72 template<class E, std::size_t Sz>
narshu 1:cc2a9eb0bd55 73 inline
narshu 1:cc2a9eb0bd55 74 bool any_elements(const XprVector<E, Sz>& e) {
narshu 1:cc2a9eb0bd55 75 return meta::Vector<Sz>::any_elements(e);
narshu 1:cc2a9eb0bd55 76 }
narshu 1:cc2a9eb0bd55 77
narshu 1:cc2a9eb0bd55 78
narshu 1:cc2a9eb0bd55 79 /*
narshu 1:cc2a9eb0bd55 80 * trinary evaluation functions with vectors and xpr of
narshu 1:cc2a9eb0bd55 81 * XprVector<E1, Sz> ? Vector<T2, Sz> : Vector<T3, Sz>
narshu 1:cc2a9eb0bd55 82 * XprVector<E1, Sz> ? Vector<T2, Sz> : XprVector<E3, Sz>
narshu 1:cc2a9eb0bd55 83 * XprVector<E1, Sz> ? XprVector<E2, Sz> : Vector<T3, Sz>
narshu 1:cc2a9eb0bd55 84 * XprVector<E1, Sz> ? XprVector<E2, Sz> : XprVector<E3, Sz>
narshu 1:cc2a9eb0bd55 85 */
narshu 1:cc2a9eb0bd55 86
narshu 1:cc2a9eb0bd55 87 /**
narshu 1:cc2a9eb0bd55 88 * eval(const XprVector<E1, Sz>& e1, const Vector<T2, Sz>& v2, const Vector<T3, Sz>& v3)
narshu 1:cc2a9eb0bd55 89 * \brief Evals the vector expressions.
narshu 1:cc2a9eb0bd55 90 * \ingroup _trinary_function
narshu 1:cc2a9eb0bd55 91 * This eval is for the a?b:c syntax, since it's not allowed to overload
narshu 1:cc2a9eb0bd55 92 * these operators.
narshu 1:cc2a9eb0bd55 93 */
narshu 1:cc2a9eb0bd55 94 template<class E1, class T2, class T3, std::size_t Sz>
narshu 1:cc2a9eb0bd55 95 inline
narshu 1:cc2a9eb0bd55 96 XprVector<
narshu 1:cc2a9eb0bd55 97 XprEval<
narshu 1:cc2a9eb0bd55 98 XprVector<E1, Sz>,
narshu 1:cc2a9eb0bd55 99 VectorConstReference<T2, Sz>,
narshu 1:cc2a9eb0bd55 100 VectorConstReference<T3, Sz>
narshu 1:cc2a9eb0bd55 101 >,
narshu 1:cc2a9eb0bd55 102 Sz
narshu 1:cc2a9eb0bd55 103 >
narshu 1:cc2a9eb0bd55 104 eval(const XprVector<E1, Sz>& e1, const Vector<T2, Sz>& v2, const Vector<T3, Sz>& v3) {
narshu 1:cc2a9eb0bd55 105 typedef XprEval<
narshu 1:cc2a9eb0bd55 106 XprVector<E1, Sz>,
narshu 1:cc2a9eb0bd55 107 VectorConstReference<T2, Sz>,
narshu 1:cc2a9eb0bd55 108 VectorConstReference<T3, Sz>
narshu 1:cc2a9eb0bd55 109 > expr_type;
narshu 1:cc2a9eb0bd55 110 return XprVector<expr_type, Sz>(
narshu 1:cc2a9eb0bd55 111 expr_type(e1, v2.const_ref(), v3.const_ref()));
narshu 1:cc2a9eb0bd55 112 }
narshu 1:cc2a9eb0bd55 113
narshu 1:cc2a9eb0bd55 114
narshu 1:cc2a9eb0bd55 115 /**
narshu 1:cc2a9eb0bd55 116 * eval(const XprVector<E1, Sz>& e1, const Vector<T2, Sz>& v2, const XprVector<E3, Sz>& e3)
narshu 1:cc2a9eb0bd55 117 * \brief Evals the vector expressions.
narshu 1:cc2a9eb0bd55 118 * \ingroup _trinary_function
narshu 1:cc2a9eb0bd55 119 * This eval is for the a?b:c syntax, since it's not allowed to overload
narshu 1:cc2a9eb0bd55 120 * these operators.
narshu 1:cc2a9eb0bd55 121 */
narshu 1:cc2a9eb0bd55 122 template<class E1, class T2, class E3, std::size_t Sz>
narshu 1:cc2a9eb0bd55 123 inline
narshu 1:cc2a9eb0bd55 124 XprVector<
narshu 1:cc2a9eb0bd55 125 XprEval<
narshu 1:cc2a9eb0bd55 126 XprVector<E1, Sz>,
narshu 1:cc2a9eb0bd55 127 VectorConstReference<T2, Sz>,
narshu 1:cc2a9eb0bd55 128 XprVector<E3, Sz>
narshu 1:cc2a9eb0bd55 129 >,
narshu 1:cc2a9eb0bd55 130 Sz
narshu 1:cc2a9eb0bd55 131 >
narshu 1:cc2a9eb0bd55 132 eval(const XprVector<E1, Sz>& e1, const Vector<T2, Sz>& v2, const XprVector<E3, Sz>& e3) {
narshu 1:cc2a9eb0bd55 133 typedef XprEval<
narshu 1:cc2a9eb0bd55 134 XprVector<E1, Sz>,
narshu 1:cc2a9eb0bd55 135 VectorConstReference<T2, Sz>,
narshu 1:cc2a9eb0bd55 136 XprVector<E3, Sz>
narshu 1:cc2a9eb0bd55 137 > expr_type;
narshu 1:cc2a9eb0bd55 138 return XprVector<expr_type, Sz>(
narshu 1:cc2a9eb0bd55 139 expr_type(e1, v2.const_ref(), e3));
narshu 1:cc2a9eb0bd55 140 }
narshu 1:cc2a9eb0bd55 141
narshu 1:cc2a9eb0bd55 142
narshu 1:cc2a9eb0bd55 143 /**
narshu 1:cc2a9eb0bd55 144 * eval(const XprVector<E1, Sz>& e1, const XprVector<E2, Sz>& e2, const Vector<T3, Sz>& v3)
narshu 1:cc2a9eb0bd55 145 * \brief Evals the vector 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 Sz>
narshu 1:cc2a9eb0bd55 151 inline
narshu 1:cc2a9eb0bd55 152 XprVector<
narshu 1:cc2a9eb0bd55 153 XprEval<
narshu 1:cc2a9eb0bd55 154 XprVector<E1, Sz>,
narshu 1:cc2a9eb0bd55 155 XprVector<E2, Sz>,
narshu 1:cc2a9eb0bd55 156 VectorConstReference<T3, Sz>
narshu 1:cc2a9eb0bd55 157 >,
narshu 1:cc2a9eb0bd55 158 Sz
narshu 1:cc2a9eb0bd55 159 >
narshu 1:cc2a9eb0bd55 160 eval(const XprVector<E1, Sz>& e1, const XprVector<E2, Sz>& e2, const Vector<T3, Sz>& v3) {
narshu 1:cc2a9eb0bd55 161 typedef XprEval<
narshu 1:cc2a9eb0bd55 162 XprVector<E1, Sz>,
narshu 1:cc2a9eb0bd55 163 XprVector<E2, Sz>,
narshu 1:cc2a9eb0bd55 164 VectorConstReference<T3, Sz>
narshu 1:cc2a9eb0bd55 165 > expr_type;
narshu 1:cc2a9eb0bd55 166 return XprVector<expr_type, Sz>(
narshu 1:cc2a9eb0bd55 167 expr_type(e1, e2, v3.const_ref()));
narshu 1:cc2a9eb0bd55 168 }
narshu 1:cc2a9eb0bd55 169
narshu 1:cc2a9eb0bd55 170
narshu 1:cc2a9eb0bd55 171 /**
narshu 1:cc2a9eb0bd55 172 * eval(const XprVector<E1, Sz>& e1, const XprVector<E2, Sz>& e2, const XprVector<E3, Sz>& e3)
narshu 1:cc2a9eb0bd55 173 * \brief Evals the vector expressions.
narshu 1:cc2a9eb0bd55 174 * \ingroup _trinary_function
narshu 1:cc2a9eb0bd55 175 * This eval is for the a?b:c syntax, since it's not allowed to overload
narshu 1:cc2a9eb0bd55 176 * these operators.
narshu 1:cc2a9eb0bd55 177 */
narshu 1:cc2a9eb0bd55 178 template<class E1, class E2, class E3, std::size_t Sz>
narshu 1:cc2a9eb0bd55 179 inline
narshu 1:cc2a9eb0bd55 180 XprVector<
narshu 1:cc2a9eb0bd55 181 XprEval<
narshu 1:cc2a9eb0bd55 182 XprVector<E1, Sz>,
narshu 1:cc2a9eb0bd55 183 XprVector<E2, Sz>,
narshu 1:cc2a9eb0bd55 184 XprVector<E3, Sz>
narshu 1:cc2a9eb0bd55 185 >,
narshu 1:cc2a9eb0bd55 186 Sz
narshu 1:cc2a9eb0bd55 187 >
narshu 1:cc2a9eb0bd55 188 eval(const XprVector<E1, Sz>& e1, const XprVector<E2, Sz>& e2, const XprVector<E3, Sz>& e3) {
narshu 1:cc2a9eb0bd55 189 typedef XprEval<
narshu 1:cc2a9eb0bd55 190 XprVector<E1, Sz>,
narshu 1:cc2a9eb0bd55 191 XprVector<E2, Sz>,
narshu 1:cc2a9eb0bd55 192 XprVector<E3, Sz>
narshu 1:cc2a9eb0bd55 193 > expr_type;
narshu 1:cc2a9eb0bd55 194 return XprVector<expr_type, Sz>(expr_type(e1, e2, e3));
narshu 1:cc2a9eb0bd55 195 }
narshu 1:cc2a9eb0bd55 196
narshu 1:cc2a9eb0bd55 197
narshu 1:cc2a9eb0bd55 198 /*
narshu 1:cc2a9eb0bd55 199 * trinary evaluation functions with vectors, xpr of and POD
narshu 1:cc2a9eb0bd55 200 *
narshu 1:cc2a9eb0bd55 201 * XprVector<E, Sz> ? POD1 : POD2
narshu 1:cc2a9eb0bd55 202 * XprVector<E1, Sz> ? POD : XprVector<E3, Sz>
narshu 1:cc2a9eb0bd55 203 * XprVector<E1, Sz> ? XprVector<E2, Sz> : POD
narshu 1:cc2a9eb0bd55 204 */
narshu 1:cc2a9eb0bd55 205 #define TVMET_IMPLEMENT_MACRO(POD) \
narshu 1:cc2a9eb0bd55 206 template<class E, std::size_t Sz> \
narshu 1:cc2a9eb0bd55 207 inline \
narshu 1:cc2a9eb0bd55 208 XprVector< \
narshu 1:cc2a9eb0bd55 209 XprEval< \
narshu 1:cc2a9eb0bd55 210 XprVector<E, Sz>, \
narshu 1:cc2a9eb0bd55 211 XprLiteral< POD >, \
narshu 1:cc2a9eb0bd55 212 XprLiteral< POD > \
narshu 1:cc2a9eb0bd55 213 >, \
narshu 1:cc2a9eb0bd55 214 Sz \
narshu 1:cc2a9eb0bd55 215 > \
narshu 1:cc2a9eb0bd55 216 eval(const XprVector<E, Sz>& e, POD x2, POD x3) { \
narshu 1:cc2a9eb0bd55 217 typedef XprEval< \
narshu 1:cc2a9eb0bd55 218 XprVector<E, Sz>, \
narshu 1:cc2a9eb0bd55 219 XprLiteral< POD >, \
narshu 1:cc2a9eb0bd55 220 XprLiteral< POD > \
narshu 1:cc2a9eb0bd55 221 > expr_type; \
narshu 1:cc2a9eb0bd55 222 return XprVector<expr_type, Sz>( \
narshu 1:cc2a9eb0bd55 223 expr_type(e, XprLiteral< POD >(x2), XprLiteral< POD >(x3))); \
narshu 1:cc2a9eb0bd55 224 } \
narshu 1:cc2a9eb0bd55 225 \
narshu 1:cc2a9eb0bd55 226 template<class E1, class E3, std::size_t Sz> \
narshu 1:cc2a9eb0bd55 227 inline \
narshu 1:cc2a9eb0bd55 228 XprVector< \
narshu 1:cc2a9eb0bd55 229 XprEval< \
narshu 1:cc2a9eb0bd55 230 XprVector<E1, Sz>, \
narshu 1:cc2a9eb0bd55 231 XprLiteral< POD >, \
narshu 1:cc2a9eb0bd55 232 XprVector<E3, Sz> \
narshu 1:cc2a9eb0bd55 233 >, \
narshu 1:cc2a9eb0bd55 234 Sz \
narshu 1:cc2a9eb0bd55 235 > \
narshu 1:cc2a9eb0bd55 236 eval(const XprVector<E1, Sz>& e1, POD x2, const XprVector<E3, Sz>& e3) { \
narshu 1:cc2a9eb0bd55 237 typedef XprEval< \
narshu 1:cc2a9eb0bd55 238 XprVector<E1, Sz>, \
narshu 1:cc2a9eb0bd55 239 XprLiteral< POD >, \
narshu 1:cc2a9eb0bd55 240 XprVector<E3, Sz> \
narshu 1:cc2a9eb0bd55 241 > expr_type; \
narshu 1:cc2a9eb0bd55 242 return XprVector<expr_type, Sz>( \
narshu 1:cc2a9eb0bd55 243 expr_type(e1, XprLiteral< POD >(x2), e3)); \
narshu 1:cc2a9eb0bd55 244 } \
narshu 1:cc2a9eb0bd55 245 \
narshu 1:cc2a9eb0bd55 246 template<class E1, class E2, std::size_t Sz> \
narshu 1:cc2a9eb0bd55 247 inline \
narshu 1:cc2a9eb0bd55 248 XprVector< \
narshu 1:cc2a9eb0bd55 249 XprEval< \
narshu 1:cc2a9eb0bd55 250 XprVector<E1, Sz>, \
narshu 1:cc2a9eb0bd55 251 XprVector<E2, Sz>, \
narshu 1:cc2a9eb0bd55 252 XprLiteral< POD > \
narshu 1:cc2a9eb0bd55 253 >, \
narshu 1:cc2a9eb0bd55 254 Sz \
narshu 1:cc2a9eb0bd55 255 > \
narshu 1:cc2a9eb0bd55 256 eval(const XprVector<E1, Sz>& e1, const XprVector<E2, Sz>& e2, POD x3) { \
narshu 1:cc2a9eb0bd55 257 typedef XprEval< \
narshu 1:cc2a9eb0bd55 258 XprVector<E1, Sz>, \
narshu 1:cc2a9eb0bd55 259 XprVector<E2, Sz>, \
narshu 1:cc2a9eb0bd55 260 XprLiteral< POD > \
narshu 1:cc2a9eb0bd55 261 > expr_type; \
narshu 1:cc2a9eb0bd55 262 return XprVector<expr_type, Sz>( \
narshu 1:cc2a9eb0bd55 263 expr_type(e1, e2, XprLiteral< POD >(x3))); \
narshu 1:cc2a9eb0bd55 264 }
narshu 1:cc2a9eb0bd55 265
narshu 1:cc2a9eb0bd55 266 TVMET_IMPLEMENT_MACRO(int)
narshu 1:cc2a9eb0bd55 267
narshu 1:cc2a9eb0bd55 268 #if defined(TVMET_HAVE_LONG_LONG)
narshu 1:cc2a9eb0bd55 269 TVMET_IMPLEMENT_MACRO(long long int)
narshu 1:cc2a9eb0bd55 270 #endif // defined(TVMET_HAVE_LONG_LONG)
narshu 1:cc2a9eb0bd55 271
narshu 1:cc2a9eb0bd55 272 TVMET_IMPLEMENT_MACRO(float)
narshu 1:cc2a9eb0bd55 273 TVMET_IMPLEMENT_MACRO(double)
narshu 1:cc2a9eb0bd55 274
narshu 1:cc2a9eb0bd55 275 #if defined(TVMET_HAVE_LONG_DOUBLE)
narshu 1:cc2a9eb0bd55 276 TVMET_IMPLEMENT_MACRO(long double)
narshu 1:cc2a9eb0bd55 277 #endif // defined(TVMET_HAVE_LONG_DOUBLE)
narshu 1:cc2a9eb0bd55 278
narshu 1:cc2a9eb0bd55 279 #undef TVMET_IMPLEMENT_MACRO
narshu 1:cc2a9eb0bd55 280
narshu 1:cc2a9eb0bd55 281
narshu 1:cc2a9eb0bd55 282 /*
narshu 1:cc2a9eb0bd55 283 * trinary evaluation functions with vectors, xpr of and complex<> types
narshu 1:cc2a9eb0bd55 284 *
narshu 1:cc2a9eb0bd55 285 * XprVector<E, Sz> e, std::complex<T> z2, std::complex<T> z3
narshu 1:cc2a9eb0bd55 286 * XprVector<E1, Sz> e1, std::complex<T> z2, XprVector<E3, Sz> e3
narshu 1:cc2a9eb0bd55 287 * XprVector<E1, Sz> e1, XprVector<E2, Sz> e2, std::complex<T> z3
narshu 1:cc2a9eb0bd55 288 */
narshu 1:cc2a9eb0bd55 289 #if defined(TVMET_HAVE_COMPLEX)
narshu 1:cc2a9eb0bd55 290
narshu 1:cc2a9eb0bd55 291
narshu 1:cc2a9eb0bd55 292 /**
narshu 1:cc2a9eb0bd55 293 * eval(const XprVector<E, Sz>& e, std::complex<T> z2, std::complex<T> z3)
narshu 1:cc2a9eb0bd55 294 * \brief Evals the vector expressions.
narshu 1:cc2a9eb0bd55 295 * \ingroup _trinary_function
narshu 1:cc2a9eb0bd55 296 * This eval is for the a?b:c syntax, since it's not allowed to overload
narshu 1:cc2a9eb0bd55 297 * these operators.
narshu 1:cc2a9eb0bd55 298 */
narshu 1:cc2a9eb0bd55 299 template<class E, std::size_t Sz, class T>
narshu 1:cc2a9eb0bd55 300 inline
narshu 1:cc2a9eb0bd55 301 XprVector<
narshu 1:cc2a9eb0bd55 302 XprEval<
narshu 1:cc2a9eb0bd55 303 XprVector<E, Sz>,
narshu 1:cc2a9eb0bd55 304 XprLiteral< std::complex<T> >,
narshu 1:cc2a9eb0bd55 305 XprLiteral< std::complex<T> >
narshu 1:cc2a9eb0bd55 306 >,
narshu 1:cc2a9eb0bd55 307 Sz
narshu 1:cc2a9eb0bd55 308 >
narshu 1:cc2a9eb0bd55 309 eval(const XprVector<E, Sz>& e, std::complex<T> z2, std::complex<T> z3) {
narshu 1:cc2a9eb0bd55 310 typedef XprEval<
narshu 1:cc2a9eb0bd55 311 XprVector<E, Sz>,
narshu 1:cc2a9eb0bd55 312 XprLiteral< std::complex<T> >,
narshu 1:cc2a9eb0bd55 313 XprLiteral< std::complex<T> >
narshu 1:cc2a9eb0bd55 314 > expr_type;
narshu 1:cc2a9eb0bd55 315 return XprVector<expr_type, Sz>(
narshu 1:cc2a9eb0bd55 316 expr_type(e, XprLiteral< std::complex<T> >(z2), XprLiteral< std::complex<T> >(z3)));
narshu 1:cc2a9eb0bd55 317 }
narshu 1:cc2a9eb0bd55 318
narshu 1:cc2a9eb0bd55 319 /**
narshu 1:cc2a9eb0bd55 320 * eval(const XprVector<E1, Sz>& e1, std::complex<T> z2, const XprVector<E3, Sz>& e3)
narshu 1:cc2a9eb0bd55 321 * \brief Evals the vector expressions.
narshu 1:cc2a9eb0bd55 322 * \ingroup _trinary_function
narshu 1:cc2a9eb0bd55 323 * This eval is for the a?b:c syntax, since it's not allowed to overload
narshu 1:cc2a9eb0bd55 324 * these operators.
narshu 1:cc2a9eb0bd55 325 */
narshu 1:cc2a9eb0bd55 326 template<class E1, class E3, std::size_t Sz, class T>
narshu 1:cc2a9eb0bd55 327 inline
narshu 1:cc2a9eb0bd55 328 XprVector<
narshu 1:cc2a9eb0bd55 329 XprEval<
narshu 1:cc2a9eb0bd55 330 XprVector<E1, Sz>,
narshu 1:cc2a9eb0bd55 331 XprLiteral< std::complex<T> >,
narshu 1:cc2a9eb0bd55 332 XprVector<E3, Sz>
narshu 1:cc2a9eb0bd55 333 >,
narshu 1:cc2a9eb0bd55 334 Sz
narshu 1:cc2a9eb0bd55 335 >
narshu 1:cc2a9eb0bd55 336 eval(const XprVector<E1, Sz>& e1, std::complex<T> z2, const XprVector<E3, Sz>& e3) {
narshu 1:cc2a9eb0bd55 337 typedef XprEval<
narshu 1:cc2a9eb0bd55 338 XprVector<E1, Sz>,
narshu 1:cc2a9eb0bd55 339 XprLiteral< std::complex<T> >,
narshu 1:cc2a9eb0bd55 340 XprVector<E3, Sz>
narshu 1:cc2a9eb0bd55 341 > expr_type;
narshu 1:cc2a9eb0bd55 342 return XprVector<expr_type, Sz>(
narshu 1:cc2a9eb0bd55 343 expr_type(e1, XprLiteral< std::complex<T> >(z2), e3));
narshu 1:cc2a9eb0bd55 344 }
narshu 1:cc2a9eb0bd55 345
narshu 1:cc2a9eb0bd55 346 /**
narshu 1:cc2a9eb0bd55 347 * eval(const XprVector<E1, Sz>& e1, const XprVector<E2, Sz>& e2, std::complex<T> z3)
narshu 1:cc2a9eb0bd55 348 * \brief Evals the vector expressions.
narshu 1:cc2a9eb0bd55 349 * \ingroup _trinary_function
narshu 1:cc2a9eb0bd55 350 * This eval is for the a?b:c syntax, since it's not allowed to overload
narshu 1:cc2a9eb0bd55 351 * these operators.
narshu 1:cc2a9eb0bd55 352 */
narshu 1:cc2a9eb0bd55 353 template<class E1, class E2, std::size_t Sz, class T>
narshu 1:cc2a9eb0bd55 354 inline
narshu 1:cc2a9eb0bd55 355 XprVector<
narshu 1:cc2a9eb0bd55 356 XprEval<
narshu 1:cc2a9eb0bd55 357 XprVector<E1, Sz>,
narshu 1:cc2a9eb0bd55 358 XprVector<E2, Sz>,
narshu 1:cc2a9eb0bd55 359 XprLiteral< std::complex<T> >
narshu 1:cc2a9eb0bd55 360 >,
narshu 1:cc2a9eb0bd55 361 Sz
narshu 1:cc2a9eb0bd55 362 >
narshu 1:cc2a9eb0bd55 363 eval(const XprVector<E1, Sz>& e1, const XprVector<E2, Sz>& e2, std::complex<T> z3) {
narshu 1:cc2a9eb0bd55 364 typedef XprEval<
narshu 1:cc2a9eb0bd55 365 XprVector<E1, Sz>,
narshu 1:cc2a9eb0bd55 366 XprVector<E2, Sz>,
narshu 1:cc2a9eb0bd55 367 XprLiteral< std::complex<T> >
narshu 1:cc2a9eb0bd55 368 > expr_type;
narshu 1:cc2a9eb0bd55 369 return XprVector<expr_type, Sz>(
narshu 1:cc2a9eb0bd55 370 expr_type(e1, e2, XprLiteral< std::complex<T> >(z3)));
narshu 1:cc2a9eb0bd55 371 }
narshu 1:cc2a9eb0bd55 372 #endif // defined(TVMET_HAVE_COMPLEX)
narshu 1:cc2a9eb0bd55 373
narshu 1:cc2a9eb0bd55 374
narshu 1:cc2a9eb0bd55 375 } // namespace tvmet
narshu 1:cc2a9eb0bd55 376
narshu 1:cc2a9eb0bd55 377 #endif // TVMET_VECTOR_EVAL_H
narshu 1:cc2a9eb0bd55 378
narshu 1:cc2a9eb0bd55 379 // Local Variables:
narshu 1:cc2a9eb0bd55 380 // mode:C++
narshu 1:cc2a9eb0bd55 381 // tab-width:8
narshu 1:cc2a9eb0bd55 382 // End: