#ifndef BZ_ARRAYMISC_CC #define BZ_ARRAYMISC_CC #ifndef BZ_ARRAY_H #error must be included via #endif BZ_NAMESPACE(blitz) #define BZ_ARRAY_DECLARE_UOP(fn, fnobj) \ template \ inline \ _bz_ArrayExpr<_bz_ArrayExprUnaryOp, \ fnobj > > \ fn(const Array& array) \ { \ return _bz_ArrayExprUnaryOp, \ fnobj >(array.begin()); \ } \ \ template \ inline \ _bz_ArrayExpr<_bz_ArrayExprUnaryOp<_bz_ArrayExpr, \ fnobj<_bz_typename T_expr::T_numtype> > > \ fn(_bz_ArrayExpr expr) \ { \ return _bz_ArrayExprUnaryOp<_bz_ArrayExpr, \ fnobj<_bz_typename T_expr::T_numtype> >(expr); \ } \ \ template \ inline \ _bz_ArrayExpr<_bz_ArrayExprUnaryOp, \ fnobj > > \ fn(IndexPlaceholder index) \ { \ return _bz_ArrayExprUnaryOp, \ fnobj >(index); \ } BZ_ARRAY_DECLARE_UOP(operator!, LogicalNot) BZ_ARRAY_DECLARE_UOP(operator~, BitwiseNot) BZ_ARRAY_DECLARE_UOP(operator-, Negate) /* * cast() functions, for explicit type casting */ template inline _bz_ArrayExpr<_bz_ArrayExprUnaryOp, Cast > > cast(const Array& array, T_cast) { return _bz_ArrayExprUnaryOp, Cast >(array.begin()); } template inline _bz_ArrayExpr<_bz_ArrayExprUnaryOp<_bz_ArrayExpr, Cast<_bz_typename T_expr::T_numtype,T_cast> > > cast(_bz_ArrayExpr expr, T_cast) { return _bz_ArrayExprUnaryOp<_bz_ArrayExpr, Cast<_bz_typename T_expr::T_numtype,T_cast> >(expr); } template inline _bz_ArrayExpr<_bz_ArrayExprUnaryOp, Cast > > cast(IndexPlaceholder index, T_cast) { return _bz_ArrayExprUnaryOp, Cast >(index); } BZ_NAMESPACE_END #endif // BZ_ARRAYMISC_CC