{-# LINE 1 "CV/Bindings/Matrix.hsc" #-}
{-# LANGUAGE ForeignFunctionInterface #-}
{-# LINE 2 "CV/Bindings/Matrix.hsc" #-}


{-# LINE 4 "CV/Bindings/Matrix.hsc" #-}

{-# LINE 5 "CV/Bindings/Matrix.hsc" #-}

module CV.Bindings.Matrix where
import Data.Word
import Foreign.C.Types

import Foreign.Ptr (Ptr,FunPtr,plusPtr)
import Foreign.Ptr (wordPtrToPtr,castPtrToFunPtr)
import Foreign.Storable
import Foreign.C.Types
import Foreign.C.String (CString,CStringLen,CWString,CWStringLen)
import Foreign.Marshal.Alloc (alloca)
import Foreign.Marshal.Array (peekArray,pokeArray)
import Data.Int
import Data.Word

{-# LINE 11 "CV/Bindings/Matrix.hsc" #-}


{-# LINE 13 "CV/Bindings/Matrix.hsc" #-}

{-# LINE 14 "CV/Bindings/Matrix.hsc" #-}

{-# LINE 15 "CV/Bindings/Matrix.hsc" #-}

{-# LINE 16 "CV/Bindings/Matrix.hsc" #-}

{-# LINE 17 "CV/Bindings/Matrix.hsc" #-}

{-# LINE 18 "CV/Bindings/Matrix.hsc" #-}

{-# LINE 19 "CV/Bindings/Matrix.hsc" #-}

{-# LINE 20 "CV/Bindings/Matrix.hsc" #-}

{-# LINE 21 "CV/Bindings/Matrix.hsc" #-}

{-# LINE 22 "CV/Bindings/Matrix.hsc" #-}

{-# LINE 23 "CV/Bindings/Matrix.hsc" #-}
data C'CvMat = C'CvMat{
  c'CvMat'type :: CInt,
  c'CvMat'step :: CInt,
  c'CvMat'refcount :: Ptr CInt,
  c'CvMat'data'ptr :: Ptr CUChar,
  c'CvMat'data's :: Ptr CShort,
  c'CvMat'data'i :: Ptr CInt,
  c'CvMat'data'fl :: Ptr CFloat,
  c'CvMat'data'db :: Ptr CDouble,
  c'CvMat'rows :: CInt,
  c'CvMat'cols :: CInt
} deriving (Eq,Show)
p'CvMat'type p = plusPtr p 0
p'CvMat'type :: Ptr (C'CvMat) -> Ptr (CInt)
p'CvMat'step p = plusPtr p 4
p'CvMat'step :: Ptr (C'CvMat) -> Ptr (CInt)
p'CvMat'refcount p = plusPtr p 8
p'CvMat'refcount :: Ptr (C'CvMat) -> Ptr (Ptr CInt)
p'CvMat'data'ptr p = plusPtr p 16
p'CvMat'data'ptr :: Ptr (C'CvMat) -> Ptr (Ptr CUChar)
p'CvMat'data's p = plusPtr p 16
p'CvMat'data's :: Ptr (C'CvMat) -> Ptr (Ptr CShort)
p'CvMat'data'i p = plusPtr p 16
p'CvMat'data'i :: Ptr (C'CvMat) -> Ptr (Ptr CInt)
p'CvMat'data'fl p = plusPtr p 16
p'CvMat'data'fl :: Ptr (C'CvMat) -> Ptr (Ptr CFloat)
p'CvMat'data'db p = plusPtr p 16
p'CvMat'data'db :: Ptr (C'CvMat) -> Ptr (Ptr CDouble)
p'CvMat'rows p = plusPtr p 20
p'CvMat'rows :: Ptr (C'CvMat) -> Ptr (CInt)
p'CvMat'cols p = plusPtr p 24
p'CvMat'cols :: Ptr (C'CvMat) -> Ptr (CInt)
u'CvMat'data'ptr :: C'CvMat -> Ptr CUChar -> IO C'CvMat
u'CvMat'data'ptr v vf = alloca $ \p -> do
  poke p v
  pokeByteOff p 16 vf
  vu <- peek p
  return $ v
    {c'CvMat'data'ptr = c'CvMat'data'ptr vu}
    {c'CvMat'data's = c'CvMat'data's vu}
    {c'CvMat'data'i = c'CvMat'data'i vu}
    {c'CvMat'data'fl = c'CvMat'data'fl vu}
    {c'CvMat'data'db = c'CvMat'data'db vu}
u'CvMat'data's :: C'CvMat -> Ptr CShort -> IO C'CvMat
u'CvMat'data's v vf = alloca $ \p -> do
  poke p v
  pokeByteOff p 16 vf
  vu <- peek p
  return $ v
    {c'CvMat'data'ptr = c'CvMat'data'ptr vu}
    {c'CvMat'data's = c'CvMat'data's vu}
    {c'CvMat'data'i = c'CvMat'data'i vu}
    {c'CvMat'data'fl = c'CvMat'data'fl vu}
    {c'CvMat'data'db = c'CvMat'data'db vu}
u'CvMat'data'i :: C'CvMat -> Ptr CInt -> IO C'CvMat
u'CvMat'data'i v vf = alloca $ \p -> do
  poke p v
  pokeByteOff p 16 vf
  vu <- peek p
  return $ v
    {c'CvMat'data'ptr = c'CvMat'data'ptr vu}
    {c'CvMat'data's = c'CvMat'data's vu}
    {c'CvMat'data'i = c'CvMat'data'i vu}
    {c'CvMat'data'fl = c'CvMat'data'fl vu}
    {c'CvMat'data'db = c'CvMat'data'db vu}
u'CvMat'data'fl :: C'CvMat -> Ptr CFloat -> IO C'CvMat
u'CvMat'data'fl v vf = alloca $ \p -> do
  poke p v
  pokeByteOff p 16 vf
  vu <- peek p
  return $ v
    {c'CvMat'data'ptr = c'CvMat'data'ptr vu}
    {c'CvMat'data's = c'CvMat'data's vu}
    {c'CvMat'data'i = c'CvMat'data'i vu}
    {c'CvMat'data'fl = c'CvMat'data'fl vu}
    {c'CvMat'data'db = c'CvMat'data'db vu}
u'CvMat'data'db :: C'CvMat -> Ptr CDouble -> IO C'CvMat
u'CvMat'data'db v vf = alloca $ \p -> do
  poke p v
  pokeByteOff p 16 vf
  vu <- peek p
  return $ v
    {c'CvMat'data'ptr = c'CvMat'data'ptr vu}
    {c'CvMat'data's = c'CvMat'data's vu}
    {c'CvMat'data'i = c'CvMat'data'i vu}
    {c'CvMat'data'fl = c'CvMat'data'fl vu}
    {c'CvMat'data'db = c'CvMat'data'db vu}
instance Storable C'CvMat where
  sizeOf _ = 28
  alignment = sizeOf
  peek p = do
    v0 <- peekByteOff p 0
    v1 <- peekByteOff p 4
    v2 <- peekByteOff p 8
    v3 <- peekByteOff p 16
    v4 <- peekByteOff p 16
    v5 <- peekByteOff p 16
    v6 <- peekByteOff p 16
    v7 <- peekByteOff p 16
    v8 <- peekByteOff p 20
    v9 <- peekByteOff p 24
    return $ C'CvMat v0 v1 v2 v3 v4 v5 v6 v7 v8 v9
  poke p (C'CvMat v0 v1 v2 v3 v4 v5 v6 v7 v8 v9) = do
    pokeByteOff p 0 v0
    pokeByteOff p 4 v1
    pokeByteOff p 8 v2
    pokeByteOff p 16 v3
    pokeByteOff p 16 v4
    pokeByteOff p 16 v5
    pokeByteOff p 16 v6
    pokeByteOff p 16 v7
    pokeByteOff p 20 v8
    pokeByteOff p 24 v9
    return ()

{-# LINE 24 "CV/Bindings/Matrix.hsc" #-}

foreign import ccall "cvCreateMat" c'cvCreateMat
  :: Int -> Int -> Int -> IO (Ptr C'CvMat)
foreign import ccall "&cvCreateMat" p'cvCreateMat
  :: FunPtr (Int -> Int -> Int -> IO (Ptr C'CvMat))

{-# LINE 26 "CV/Bindings/Matrix.hsc" #-}
foreign import ccall "cvReleaseMat" c'cvReleaseMat
  :: Ptr (Ptr C'CvMat) -> IO ()
foreign import ccall "&cvReleaseMat" p'cvReleaseMat
  :: FunPtr (Ptr (Ptr C'CvMat) -> IO ())

{-# LINE 27 "CV/Bindings/Matrix.hsc" #-}

foreign import ccall "cvTranspose" c'cvTranspose
  :: Ptr C'CvMat -> Ptr C'CvMat -> IO ()
foreign import ccall "&cvTranspose" p'cvTranspose
  :: FunPtr (Ptr C'CvMat -> Ptr C'CvMat -> IO ())

{-# LINE 29 "CV/Bindings/Matrix.hsc" #-}
foreign import ccall "cvGEMM" c'cvGEMM
  :: Ptr C'CvMat -> Ptr C'CvMat -> Double -> Ptr C'CvMat -> Double -> Ptr C'CvMat -> Int -> IO ()
foreign import ccall "&cvGEMM" p'cvGEMM
  :: FunPtr (Ptr C'CvMat -> Ptr C'CvMat -> Double -> Ptr C'CvMat -> Double -> Ptr C'CvMat -> Int -> IO ())

{-# LINE 30 "CV/Bindings/Matrix.hsc" #-}

foreign import ccall "cvRodrigues2" c'cvRodrigues2
  :: Ptr C'CvMat -> Ptr C'CvMat -> Ptr C'CvMat -> IO Int
foreign import ccall "&cvRodrigues2" p'cvRodrigues2
  :: FunPtr (Ptr C'CvMat -> Ptr C'CvMat -> Ptr C'CvMat -> IO Int)

{-# LINE 32 "CV/Bindings/Matrix.hsc" #-}

c'CV_GEMM_A_T = 1
c'CV_GEMM_A_T :: (Num a) => a

{-# LINE 34 "CV/Bindings/Matrix.hsc" #-}
c'CV_GEMM_B_T = 2
c'CV_GEMM_B_T :: (Num a) => a

{-# LINE 35 "CV/Bindings/Matrix.hsc" #-}
c'CV_GEMM_C_T = 4
c'CV_GEMM_C_T :: (Num a) => a

{-# LINE 36 "CV/Bindings/Matrix.hsc" #-}



-- typedef struct CvMat
-- {
--     int type;
--     int step;
--     int* refcount;
--     union
--     {
--         uchar* ptr;
--         short* s;
--         int* i;
--         float* fl;
--         double* db;
--     } data;
--     int rows;
--     int cols;
-- } CvMat;