{-# LANGUAGE CPP #-}
module ArrayFire.Internal.Algorithm where

import ArrayFire.Internal.Defines

import Foreign.Ptr
import Foreign.C.Types

#include "af/algorithm.h"
foreign import ccall unsafe "af_sum"
    af_sum :: Ptr AFArray -> AFArray -> CInt -> IO AFErr
foreign import ccall unsafe "af_sum_nan"
    af_sum_nan :: Ptr AFArray -> AFArray -> CInt -> Double -> IO AFErr
foreign import ccall unsafe "af_product"
    af_product :: Ptr AFArray -> AFArray -> CInt -> IO AFErr
foreign import ccall unsafe "af_product_nan"
    af_product_nan :: Ptr AFArray -> AFArray -> CInt -> Double -> IO AFErr
foreign import ccall unsafe "af_min"
    af_min :: Ptr AFArray -> AFArray -> CInt -> IO AFErr
foreign import ccall unsafe "af_max"
    af_max :: Ptr AFArray -> AFArray -> CInt -> IO AFErr
foreign import ccall unsafe "af_all_true"
    af_all_true :: Ptr AFArray -> AFArray -> CInt -> IO AFErr
foreign import ccall unsafe "af_any_true"
    af_any_true :: Ptr AFArray -> AFArray -> CInt -> IO AFErr
foreign import ccall unsafe "af_count"
    af_count :: Ptr AFArray -> AFArray -> CInt -> IO AFErr
foreign import ccall unsafe "af_sum_all"
    af_sum_all :: Ptr Double -> Ptr Double -> AFArray -> IO AFErr
foreign import ccall unsafe "af_sum_nan_all"
    af_sum_nan_all :: Ptr Double -> Ptr Double -> AFArray -> Double -> IO AFErr
foreign import ccall unsafe "af_product_all"
    af_product_all :: Ptr Double -> Ptr Double -> AFArray -> IO AFErr
foreign import ccall unsafe "af_product_nan_all"
    af_product_nan_all :: Ptr Double -> Ptr Double -> AFArray -> Double -> IO AFErr
foreign import ccall unsafe "af_min_all"
    af_min_all :: Ptr Double -> Ptr Double -> AFArray -> IO AFErr
foreign import ccall unsafe "af_max_all"
    af_max_all :: Ptr Double -> Ptr Double -> AFArray -> IO AFErr
foreign import ccall unsafe "af_all_true_all"
    af_all_true_all :: Ptr Double -> Ptr Double -> AFArray -> IO AFErr
foreign import ccall unsafe "af_any_true_all"
    af_any_true_all :: Ptr Double -> Ptr Double -> AFArray -> IO AFErr
foreign import ccall unsafe "af_count_all"
    af_count_all :: Ptr Double -> Ptr Double -> AFArray -> IO AFErr
foreign import ccall unsafe "af_imin"
    af_imin :: Ptr AFArray -> Ptr AFArray -> AFArray -> CInt -> IO AFErr
foreign import ccall unsafe "af_imax"
    af_imax :: Ptr AFArray -> Ptr AFArray -> AFArray -> CInt -> IO AFErr
foreign import ccall unsafe "af_imin_all"
    af_imin_all :: Ptr Double -> Ptr Double -> Ptr CUInt -> AFArray -> IO AFErr
foreign import ccall unsafe "af_imax_all"
    af_imax_all :: Ptr Double -> Ptr Double -> Ptr CUInt -> AFArray -> IO AFErr
foreign import ccall unsafe "af_accum"
    af_accum :: Ptr AFArray -> AFArray -> CInt -> IO AFErr
foreign import ccall unsafe "af_scan"
    af_scan :: Ptr AFArray -> AFArray -> CInt -> AFBinaryOp -> CBool -> IO AFErr
foreign import ccall unsafe "af_scan_by_key"
    af_scan_by_key :: Ptr AFArray -> AFArray -> AFArray -> CInt -> AFBinaryOp -> CBool -> IO AFErr
foreign import ccall unsafe "af_where"
    af_where :: Ptr AFArray -> AFArray -> IO AFErr
foreign import ccall unsafe "af_diff1"
    af_diff1 :: Ptr AFArray -> AFArray -> CInt -> IO AFErr
foreign import ccall unsafe "af_diff2"
    af_diff2 :: Ptr AFArray -> AFArray -> CInt -> IO AFErr
foreign import ccall unsafe "af_sort"
    af_sort :: Ptr AFArray -> AFArray -> CUInt -> CBool -> IO AFErr
foreign import ccall unsafe "af_sort_index"
    af_sort_index :: Ptr AFArray -> Ptr AFArray -> AFArray -> CUInt -> CBool -> IO AFErr
foreign import ccall unsafe "af_sort_by_key"
    af_sort_by_key :: Ptr AFArray -> Ptr AFArray -> AFArray -> AFArray -> CUInt -> CBool -> IO AFErr
foreign import ccall unsafe "af_set_unique"
    af_set_unique :: Ptr AFArray -> AFArray -> CBool -> IO AFErr
foreign import ccall unsafe "af_set_union"
    af_set_union :: Ptr AFArray -> AFArray -> AFArray -> CBool -> IO AFErr
foreign import ccall unsafe "af_set_intersect"
    af_set_intersect :: Ptr AFArray -> AFArray -> AFArray -> CBool -> IO AFErr
