| [658] | 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 |  | 
|---|
|  | 8 | BZ_NAMESPACE(blitz) | 
|---|
|  | 9 |  | 
|---|
|  | 10 | #define BZ_ARRAY_DECLARE_UOP(fn, fnobj)                                \ | 
|---|
|  | 11 | template<class T_numtype, int N_rank>                                  \ | 
|---|
|  | 12 | inline                                                                 \ | 
|---|
|  | 13 | _bz_ArrayExpr<_bz_ArrayExprUnaryOp<ArrayIterator<T_numtype,N_rank>,    \ | 
|---|
|  | 14 | fnobj<T_numtype> > >                                               \ | 
|---|
|  | 15 | fn(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 | \ | 
|---|
|  | 21 | template<class T_expr>                                                 \ | 
|---|
|  | 22 | inline                                                                 \ | 
|---|
|  | 23 | _bz_ArrayExpr<_bz_ArrayExprUnaryOp<_bz_ArrayExpr<T_expr>,              \ | 
|---|
|  | 24 | fnobj<_bz_typename T_expr::T_numtype> > >                          \ | 
|---|
|  | 25 | fn(_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 | \ | 
|---|
|  | 31 | template<int N_index>                                                  \ | 
|---|
|  | 32 | inline                                                                 \ | 
|---|
|  | 33 | _bz_ArrayExpr<_bz_ArrayExprUnaryOp<IndexPlaceholder<N_index>,          \ | 
|---|
|  | 34 | fnobj<int> > >                                                     \ | 
|---|
|  | 35 | fn(IndexPlaceholder<N_index> index)                                    \ | 
|---|
|  | 36 | {                                                                      \ | 
|---|
|  | 37 | return _bz_ArrayExprUnaryOp<IndexPlaceholder<N_index>,             \ | 
|---|
|  | 38 | fnobj<int> >(index);                                           \ | 
|---|
|  | 39 | } | 
|---|
|  | 40 |  | 
|---|
|  | 41 | BZ_ARRAY_DECLARE_UOP(operator!, LogicalNot) | 
|---|
|  | 42 | BZ_ARRAY_DECLARE_UOP(operator~, BitwiseNot) | 
|---|
|  | 43 | BZ_ARRAY_DECLARE_UOP(operator-, Negate) | 
|---|
|  | 44 |  | 
|---|
|  | 45 | /* | 
|---|
|  | 46 | * cast() functions, for explicit type casting | 
|---|
|  | 47 | */ | 
|---|
|  | 48 |  | 
|---|
|  | 49 | template<class T_numtype, int N_rank, class T_cast> | 
|---|
|  | 50 | inline | 
|---|
|  | 51 | _bz_ArrayExpr<_bz_ArrayExprUnaryOp<ArrayIterator<T_numtype,N_rank>, | 
|---|
|  | 52 | Cast<T_numtype, T_cast> > > | 
|---|
|  | 53 | cast(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 |  | 
|---|
|  | 59 | template<class T_expr, class T_cast> | 
|---|
|  | 60 | inline | 
|---|
|  | 61 | _bz_ArrayExpr<_bz_ArrayExprUnaryOp<_bz_ArrayExpr<T_expr>, | 
|---|
|  | 62 | Cast<_bz_typename T_expr::T_numtype,T_cast> > > | 
|---|
|  | 63 | cast(_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 |  | 
|---|
|  | 69 | template<int N_index, class T_cast> | 
|---|
|  | 70 | inline | 
|---|
|  | 71 | _bz_ArrayExpr<_bz_ArrayExprUnaryOp<IndexPlaceholder<N_index>, | 
|---|
|  | 72 | Cast<int,T_cast> > > | 
|---|
|  | 73 | cast(IndexPlaceholder<N_index> index, T_cast) | 
|---|
|  | 74 | { | 
|---|
|  | 75 | return _bz_ArrayExprUnaryOp<IndexPlaceholder<N_index>, | 
|---|
|  | 76 | Cast<int,T_cast> >(index); | 
|---|
|  | 77 | } | 
|---|
|  | 78 |  | 
|---|
|  | 79 | BZ_NAMESPACE_END | 
|---|
|  | 80 |  | 
|---|
|  | 81 | #endif // BZ_ARRAYMISC_CC | 
|---|
|  | 82 |  | 
|---|