/******************************************************* * Copyright (c) 2014, ArrayFire * All rights reserved. * * This file is distributed under 3-clause BSD license. * The complete license agreement can be obtained at: * http://arrayfire.com/licenses/BSD-3-Clause ********************************************************/ #include #include #include #include #include "error.hpp" namespace af { #define INSTANTIATE(cppfunc, cfunc) \ array cppfunc(const array &lhs, const array &rhs) \ { \ af_array out = 0; \ AF_THROW(cfunc(&out, lhs.get(), rhs.get(), gforGet())); \ return array(out); \ } INSTANTIATE(min , af_minof) INSTANTIATE(max , af_maxof) INSTANTIATE(pow , af_pow ) INSTANTIATE(root, af_root ) INSTANTIATE(rem , af_rem ) INSTANTIATE(mod , af_mod ) INSTANTIATE(complex, af_cplx2) INSTANTIATE(atan2, af_atan2) INSTANTIATE(hypot, af_hypot) #define WRAPPER(func) \ array func(const array &lhs, const double rhs) \ { \ af::dtype ty = lhs.type(); \ if (lhs.iscomplex()) { \ ty = lhs.issingle() ? f32 : f64; \ } \ return func(lhs, constant(rhs, lhs.dims(), ty)); \ } \ array func(const double lhs, const array &rhs) \ { \ af::dtype ty = rhs.type(); \ if (rhs.iscomplex()) { \ ty = rhs.issingle() ? f32 : f64; \ } \ return func(constant(lhs, rhs.dims(), ty), rhs); \ } WRAPPER(min) WRAPPER(max) WRAPPER(pow) WRAPPER(root) WRAPPER(rem) WRAPPER(mod) WRAPPER(complex) WRAPPER(atan2) WRAPPER(hypot) }