source: XMLIO_V2/external/include/blitz/array/funcs.h @ 80

Last change on this file since 80 was 80, checked in by ymipsl, 14 years ago

ajout lib externe

  • Property svn:eol-style set to native
File size: 7.0 KB
Line 
1// -*- C++ -*-
2/***************************************************************************
3 * blitz/array/funcs.h   Math functions on arrays
4 *
5 * $Id: funcs.h,v 1.10 2004/10/07 00:26:59 julianc Exp $
6 *
7 * Copyright (C) 1997-2001 Todd Veldhuizen <tveldhui@oonumerics.org>
8 *
9 * This program is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License
11 * as published by the Free Software Foundation; either version 2
12 * of the License, or (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 * GNU General Public License for more details.
18 *
19 * Suggestions:          blitz-dev@oonumerics.org
20 * Bugs:                 blitz-bugs@oonumerics.org
21 *
22 * For more information, please see the Blitz++ Home Page:
23 *    http://oonumerics.org/blitz/
24 *
25 ****************************************************************************/
26#ifndef BZ_ARRAY_FUNCS_H
27#define BZ_ARRAY_FUNCS_H
28
29#include <blitz/funcs.h>
30#include <blitz/array/newet-macros.h>
31
32BZ_NAMESPACE(blitz)
33   
34// unary functions
35   
36BZ_DECLARE_ARRAY_ET_UNARY(abs,   Fn_abs)
37BZ_DECLARE_ARRAY_ET_UNARY(acos,  Fn_acos)
38BZ_DECLARE_ARRAY_ET_UNARY(asin,  Fn_asin)
39BZ_DECLARE_ARRAY_ET_UNARY(atan,  Fn_atan)
40BZ_DECLARE_ARRAY_ET_UNARY(ceil,  Fn_ceil)
41BZ_DECLARE_ARRAY_ET_UNARY(cexp,  Fn_exp)
42BZ_DECLARE_ARRAY_ET_UNARY(cos,   Fn_cos)
43BZ_DECLARE_ARRAY_ET_UNARY(cosh,  Fn_cosh)
44BZ_DECLARE_ARRAY_ET_UNARY(csqrt, Fn_sqrt)
45BZ_DECLARE_ARRAY_ET_UNARY(cube,  Fn_cube)
46BZ_DECLARE_ARRAY_ET_UNARY(exp,   Fn_exp)
47BZ_DECLARE_ARRAY_ET_UNARY(fabs,  Fn_fabs)
48BZ_DECLARE_ARRAY_ET_UNARY(floor, Fn_floor)
49BZ_DECLARE_ARRAY_ET_UNARY(log,   Fn_log)
50BZ_DECLARE_ARRAY_ET_UNARY(log10, Fn_log10)
51BZ_DECLARE_ARRAY_ET_UNARY(pow2,  Fn_sqr)
52BZ_DECLARE_ARRAY_ET_UNARY(pow3,  Fn_cube)
53BZ_DECLARE_ARRAY_ET_UNARY(pow4,  Fn_pow4)
54BZ_DECLARE_ARRAY_ET_UNARY(pow5,  Fn_pow5)
55BZ_DECLARE_ARRAY_ET_UNARY(pow6,  Fn_pow6)
56BZ_DECLARE_ARRAY_ET_UNARY(pow7,  Fn_pow7)
57BZ_DECLARE_ARRAY_ET_UNARY(pow8,  Fn_pow8)
58BZ_DECLARE_ARRAY_ET_UNARY(sin,   Fn_sin)
59BZ_DECLARE_ARRAY_ET_UNARY(sinh,  Fn_sinh)
60BZ_DECLARE_ARRAY_ET_UNARY(sqr,   Fn_sqr)
61BZ_DECLARE_ARRAY_ET_UNARY(sqrt,  Fn_sqrt)
62BZ_DECLARE_ARRAY_ET_UNARY(tan,   Fn_tan)
63BZ_DECLARE_ARRAY_ET_UNARY(tanh,  Fn_tanh)
64
65#ifdef BZ_HAVE_COMPLEX_FCNS
66BZ_DECLARE_ARRAY_ET_UNARY(arg,   Fn_arg)
67BZ_DECLARE_ARRAY_ET_UNARY(conj,  Fn_conj)
68BZ_DECLARE_ARRAY_ET_UNARY(imag,  Fn_imag)
69BZ_DECLARE_ARRAY_ET_UNARY(norm,  Fn_norm)
70BZ_DECLARE_ARRAY_ET_UNARY(real,  Fn_real)
71#endif
72
73#ifdef BZ_HAVE_IEEE_MATH
74// finite and trunc omitted: blitz-bugs/archive/0189.html
75BZ_DECLARE_ARRAY_ET_UNARY(acosh,  Fn_acosh)
76BZ_DECLARE_ARRAY_ET_UNARY(asinh,  Fn_asinh)
77BZ_DECLARE_ARRAY_ET_UNARY(atanh,  Fn_atanh)
78BZ_DECLARE_ARRAY_ET_UNARY(cbrt,   Fn_cbrt)
79BZ_DECLARE_ARRAY_ET_UNARY(erf,    Fn_erf)
80BZ_DECLARE_ARRAY_ET_UNARY(erfc,   Fn_erfc)
81BZ_DECLARE_ARRAY_ET_UNARY(expm1,  Fn_expm1)
82// BZ_DECLARE_ARRAY_ET_UNARY(finite, Fn_finite)
83BZ_DECLARE_ARRAY_ET_UNARY(ilogb,   Fn_ilogb)
84BZ_DECLARE_ARRAY_ET_UNARY(blitz_isnan,  Fn_isnan)
85BZ_DECLARE_ARRAY_ET_UNARY(j0,     Fn_j0)
86BZ_DECLARE_ARRAY_ET_UNARY(j1,     Fn_j1)
87BZ_DECLARE_ARRAY_ET_UNARY(lgamma, Fn_lgamma)
88BZ_DECLARE_ARRAY_ET_UNARY(logb,   Fn_logb)
89BZ_DECLARE_ARRAY_ET_UNARY(log1p,  Fn_log1p)
90BZ_DECLARE_ARRAY_ET_UNARY(rint,   Fn_rint)
91// BZ_DECLARE_ARRAY_ET_UNARY(trunc,  Fn_trunc)
92BZ_DECLARE_ARRAY_ET_UNARY(y0,     Fn_y0)
93BZ_DECLARE_ARRAY_ET_UNARY(y1,     Fn_y1)
94#endif
95
96#ifdef BZ_HAVE_SYSTEM_V_MATH
97BZ_DECLARE_ARRAY_ET_UNARY(_class,  Fn__class)
98BZ_DECLARE_ARRAY_ET_UNARY(itrunc,  Fn_itrunc)
99BZ_DECLARE_ARRAY_ET_UNARY(nearest, Fn_nearest)
100BZ_DECLARE_ARRAY_ET_UNARY(rsqrt,   Fn_rsqrt)
101BZ_DECLARE_ARRAY_ET_UNARY(uitrunc, Fn_uitrunc)
102#endif
103   
104// cast() function
105   
106template<typename T_cast, typename T1>
107_bz_inline_et
108_bz_ArrayExpr<_bz_ArrayExprUnaryOp<_bz_typename asExpr<T1>::T_expr,
109    Cast<_bz_typename asExpr<T1>::T_expr::T_numtype, T_cast> > >
110cast(const ETBase<T1>& expr)
111{
112    return _bz_ArrayExpr<_bz_ArrayExprUnaryOp<
113        _bz_typename asExpr<T1>::T_expr,
114        Cast<_bz_typename asExpr<T1>::T_expr::T_numtype,T_cast> > >
115        (expr.unwrap());
116}
117
118// binary functions
119
120BZ_DECLARE_ARRAY_ET_BINARY(atan2,     Fn_atan2)
121BZ_DECLARE_ARRAY_ET_BINARY(fmod,      Fn_fmod)
122BZ_DECLARE_ARRAY_ET_BINARY(pow,       Fn_pow)
123
124#ifdef BZ_HAVE_COMPLEX_FCNS
125BZ_DECLARE_ARRAY_ET_BINARY(polar,     Fn_polar)
126#endif
127   
128#ifdef BZ_HAVE_SYSTEM_V_MATH
129BZ_DECLARE_ARRAY_ET_BINARY(copysign,  Fn_copysign)
130BZ_DECLARE_ARRAY_ET_BINARY(drem,      Fn_drem)
131BZ_DECLARE_ARRAY_ET_BINARY(hypot,     Fn_hypot)
132BZ_DECLARE_ARRAY_ET_BINARY(nextafter, Fn_nextafter)
133BZ_DECLARE_ARRAY_ET_BINARY(remainder, Fn_remainder)
134BZ_DECLARE_ARRAY_ET_BINARY(scalb,     Fn_scalb)
135BZ_DECLARE_ARRAY_ET_BINARY(unordered, Fn_unordered)
136#endif
137
138#ifdef BZ_HAVE_SYSTEM_V_MATH
139
140#define BZ_DECLARE_ARRAY_ET_SCALAR_FUNCS(sca)                   \
141                                                                \
142BZ_DECLARE_ARRAY_ET_BINARY_SCALAR(atan2,     Fn_atan2, sca)     \
143BZ_DECLARE_ARRAY_ET_BINARY_SCALAR(fmod,      Fn_fmod, sca)      \
144BZ_DECLARE_ARRAY_ET_BINARY_SCALAR(pow,       Fn_pow, sca)       \
145BZ_DECLARE_ARRAY_ET_BINARY_SCALAR(copysign,  Fn_copysign, sca)  \
146BZ_DECLARE_ARRAY_ET_BINARY_SCALAR(drem,      Fn_drem, sca)      \
147BZ_DECLARE_ARRAY_ET_BINARY_SCALAR(hypot,     Fn_hypot, sca)     \
148BZ_DECLARE_ARRAY_ET_BINARY_SCALAR(nextafter, Fn_nextafter, sca) \
149BZ_DECLARE_ARRAY_ET_BINARY_SCALAR(remainder, Fn_remainder, sca) \
150BZ_DECLARE_ARRAY_ET_BINARY_SCALAR(scalb,     Fn_scalb, sca)     \
151BZ_DECLARE_ARRAY_ET_BINARY_SCALAR(unordered, Fn_unordered, sca) \
152
153#else
154   
155#define BZ_DECLARE_ARRAY_ET_SCALAR_FUNCS(sca)                   \
156                                                                \
157BZ_DECLARE_ARRAY_ET_BINARY_SCALAR(atan2,     Fn_atan2, sca)     \
158BZ_DECLARE_ARRAY_ET_BINARY_SCALAR(fmod,      Fn_fmod, sca)      \
159BZ_DECLARE_ARRAY_ET_BINARY_SCALAR(pow,       Fn_pow, sca)       \
160
161#endif
162   
163BZ_DECLARE_ARRAY_ET_SCALAR_FUNCS(int)
164BZ_DECLARE_ARRAY_ET_SCALAR_FUNCS(float)
165BZ_DECLARE_ARRAY_ET_SCALAR_FUNCS(double)
166BZ_DECLARE_ARRAY_ET_SCALAR_FUNCS(long double)
167   
168#ifdef BZ_HAVE_COMPLEX_FCNS
169BZ_DECLARE_ARRAY_ET_BINARY_SCALAR(polar,     Fn_polar, int)
170BZ_DECLARE_ARRAY_ET_BINARY_SCALAR(polar,     Fn_polar, float)
171BZ_DECLARE_ARRAY_ET_BINARY_SCALAR(polar,     Fn_polar, double)
172BZ_DECLARE_ARRAY_ET_BINARY_SCALAR(polar,     Fn_polar, long double)
173   
174template<typename T1, typename T2>
175inline _bz_ArrayExprBinaryOp<
176    typename asExpr<complex<T1> >::T_expr,
177    typename asExpr<T2>::T_expr, 
178    Fn_pow<complex<T1>,typename asExpr<T2>::T_expr::T_numtype> >
179pow(const complex<T1> d1, const ETBase<T2>& d2)
180{
181    return _bz_ArrayExprBinaryOp<
182        typename asExpr<complex<T1> >::T_expr,
183        typename asExpr<T2>::T_expr,
184        Fn_pow<complex<T1>,typename asExpr<T2>::T_expr::T_numtype> >
185        (asExpr<complex<T1> >::getExpr(d1),
186         asExpr<T2>::getExpr(d2.unwrap()));
187}
188
189#endif
190   
191BZ_NAMESPACE_END
192
193#endif // BZ_ARRAY_FUNCS_H
Note: See TracBrowser for help on using the repository browser.