source: Sophya/trunk/SophyaExt/Blitz/blitz/array/misc.cc@ 3586

Last change on this file since 3586 was 221, checked in by ansari, 26 years ago

Creation module DPC/Blitz (blitz 0.4) Reza 09/04/99

File size: 4.2 KB
Line 
1#ifndef BZ_ARRAYMISC_CC
2#define BZ_ARRAYMISC_CC
3
4#ifndef BZ_ARRAY_H
5 #error <blitz/array/misc.cc> must be included via <blitz/array.h>
6#endif
7
8BZ_NAMESPACE(blitz)
9
10#define BZ_ARRAY_DECLARE_UOP(fn, fnobj) \
11template<class T_numtype, int N_rank> \
12inline \
13_bz_ArrayExpr<_bz_ArrayExprUnaryOp<ArrayIterator<T_numtype,N_rank>, \
14 fnobj<T_numtype> > > \
15fn(const Array<T_numtype,N_rank>& array) \
16{ \
17 return _bz_ArrayExprUnaryOp<ArrayIterator<T_numtype,N_rank>, \
18 fnobj<T_numtype> >(array.begin()); \
19} \
20 \
21template<class T_expr> \
22inline \
23_bz_ArrayExpr<_bz_ArrayExprUnaryOp<_bz_ArrayExpr<T_expr>, \
24 fnobj<_bz_typename T_expr::T_numtype> > > \
25fn(_bz_ArrayExpr<T_expr> expr) \
26{ \
27 return _bz_ArrayExprUnaryOp<_bz_ArrayExpr<T_expr>, \
28 fnobj<_bz_typename T_expr::T_numtype> >(expr); \
29} \
30 \
31template<int N_index> \
32inline \
33_bz_ArrayExpr<_bz_ArrayExprUnaryOp<IndexPlaceholder<N_index>, \
34 fnobj<int> > > \
35fn(IndexPlaceholder<N_index> index) \
36{ \
37 return _bz_ArrayExprUnaryOp<IndexPlaceholder<N_index>, \
38 fnobj<int> >(index); \
39}
40
41BZ_ARRAY_DECLARE_UOP(operator!, LogicalNot)
42BZ_ARRAY_DECLARE_UOP(operator~, BitwiseNot)
43BZ_ARRAY_DECLARE_UOP(operator-, Negate)
44
45/*
46 * cast() functions, for explicit type casting
47 */
48
49template<class T_numtype, int N_rank, class T_cast>
50inline
51_bz_ArrayExpr<_bz_ArrayExprUnaryOp<ArrayIterator<T_numtype,N_rank>,
52 Cast<T_numtype, T_cast> > >
53cast(const Array<T_numtype,N_rank>& array, T_cast)
54{
55 return _bz_ArrayExprUnaryOp<ArrayIterator<T_numtype,N_rank>,
56 Cast<T_numtype,T_cast> >(array.begin());
57}
58
59template<class T_expr, class T_cast>
60inline
61_bz_ArrayExpr<_bz_ArrayExprUnaryOp<_bz_ArrayExpr<T_expr>,
62 Cast<_bz_typename T_expr::T_numtype,T_cast> > >
63cast(_bz_ArrayExpr<T_expr> expr, T_cast)
64{
65 return _bz_ArrayExprUnaryOp<_bz_ArrayExpr<T_expr>,
66 Cast<_bz_typename T_expr::T_numtype,T_cast> >(expr);
67}
68
69template<int N_index, class T_cast>
70inline
71_bz_ArrayExpr<_bz_ArrayExprUnaryOp<IndexPlaceholder<N_index>,
72 Cast<int,T_cast> > >
73cast(IndexPlaceholder<N_index> index, T_cast)
74{
75 return _bz_ArrayExprUnaryOp<IndexPlaceholder<N_index>,
76 Cast<int,T_cast> >(index);
77}
78
79BZ_NAMESPACE_END
80
81#endif // BZ_ARRAYMISC_CC
82
Note: See TracBrowser for help on using the repository browser.