{-# LINE 1 "src/Bindings/Gts/BasicMacrosFunctionsAndDataStructures/VectorsAndMatrices.hsc" #-}

{-# LINE 2 "src/Bindings/Gts/BasicMacrosFunctionsAndDataStructures/VectorsAndMatrices.hsc" #-}

{-# LINE 3 "src/Bindings/Gts/BasicMacrosFunctionsAndDataStructures/VectorsAndMatrices.hsc" #-}

-- | <http://gts.sourceforge.net/reference/gts-vectors-and-matrices.html>

module Bindings.Gts.BasicMacrosFunctionsAndDataStructures.VectorsAndMatrices where
import Bindings.GLib
import Bindings.Gts.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 10 "src/Bindings/Gts/BasicMacrosFunctionsAndDataStructures/VectorsAndMatrices.hsc" #-}

foreign import ccall "inline_gts_vector_init" c'gts_vector_init
  :: C'GtsVector -> Ptr C'GtsPoint -> Ptr C'GtsPoint -> IO ()

{-# LINE 12 "src/Bindings/Gts/BasicMacrosFunctionsAndDataStructures/VectorsAndMatrices.hsc" #-}
foreign import ccall "inline_gts_vector_scalar" c'gts_vector_scalar
  :: C'GtsVector -> C'GtsVector -> IO C'gdouble

{-# LINE 13 "src/Bindings/Gts/BasicMacrosFunctionsAndDataStructures/VectorsAndMatrices.hsc" #-}
foreign import ccall "inline_gts_vector_cross" c'gts_vector_cross
  :: C'GtsVector -> C'GtsVector -> C'GtsVector -> IO ()

{-# LINE 14 "src/Bindings/Gts/BasicMacrosFunctionsAndDataStructures/VectorsAndMatrices.hsc" #-}
foreign import ccall "inline_gts_vector_norm" c'gts_vector_norm
  :: C'GtsVector -> IO C'gdouble

{-# LINE 15 "src/Bindings/Gts/BasicMacrosFunctionsAndDataStructures/VectorsAndMatrices.hsc" #-}
foreign import ccall "inline_gts_vector_normalize" c'gts_vector_normalize
  :: C'GtsVector -> IO ()

{-# LINE 16 "src/Bindings/Gts/BasicMacrosFunctionsAndDataStructures/VectorsAndMatrices.hsc" #-}

foreign import ccall "gts_vector_print" c'gts_vector_print
  :: C'GtsVector -> Ptr CFile -> IO ()
foreign import ccall "&gts_vector_print" p'gts_vector_print
  :: FunPtr (C'GtsVector -> Ptr CFile -> IO ())

{-# LINE 18 "src/Bindings/Gts/BasicMacrosFunctionsAndDataStructures/VectorsAndMatrices.hsc" #-}
foreign import ccall "gts_vector4_print" c'gts_vector4_print
  :: C'GtsVector4 -> Ptr CFile -> IO ()
foreign import ccall "&gts_vector4_print" p'gts_vector4_print
  :: FunPtr (C'GtsVector4 -> Ptr CFile -> IO ())

{-# LINE 19 "src/Bindings/Gts/BasicMacrosFunctionsAndDataStructures/VectorsAndMatrices.hsc" #-}

foreign import ccall "gts_matrix_new" c'gts_matrix_new
  :: C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> IO (Ptr C'GtsMatrix)
foreign import ccall "&gts_matrix_new" p'gts_matrix_new
  :: FunPtr (C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> IO (Ptr C'GtsMatrix))

{-# LINE 21 "src/Bindings/Gts/BasicMacrosFunctionsAndDataStructures/VectorsAndMatrices.hsc" #-}
foreign import ccall "gts_matrix_assign" c'gts_matrix_assign
  :: Ptr C'GtsMatrix -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> IO ()
foreign import ccall "&gts_matrix_assign" p'gts_matrix_assign
  :: FunPtr (Ptr C'GtsMatrix -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> IO ())

{-# LINE 22 "src/Bindings/Gts/BasicMacrosFunctionsAndDataStructures/VectorsAndMatrices.hsc" #-}
foreign import ccall "gts_matrix_zero" c'gts_matrix_zero
  :: Ptr C'GtsMatrix -> IO (Ptr C'GtsMatrix)
foreign import ccall "&gts_matrix_zero" p'gts_matrix_zero
  :: FunPtr (Ptr C'GtsMatrix -> IO (Ptr C'GtsMatrix))

{-# LINE 23 "src/Bindings/Gts/BasicMacrosFunctionsAndDataStructures/VectorsAndMatrices.hsc" #-}
foreign import ccall "gts_matrix_identity" c'gts_matrix_identity
  :: Ptr C'GtsMatrix -> IO (Ptr C'GtsMatrix)
foreign import ccall "&gts_matrix_identity" p'gts_matrix_identity
  :: FunPtr (Ptr C'GtsMatrix -> IO (Ptr C'GtsMatrix))

{-# LINE 24 "src/Bindings/Gts/BasicMacrosFunctionsAndDataStructures/VectorsAndMatrices.hsc" #-}
foreign import ccall "gts_matrix_projection" c'gts_matrix_projection
  :: Ptr C'GtsTriangle -> IO (Ptr C'GtsMatrix)
foreign import ccall "&gts_matrix_projection" p'gts_matrix_projection
  :: FunPtr (Ptr C'GtsTriangle -> IO (Ptr C'GtsMatrix))

{-# LINE 25 "src/Bindings/Gts/BasicMacrosFunctionsAndDataStructures/VectorsAndMatrices.hsc" #-}
foreign import ccall "gts_matrix_scale" c'gts_matrix_scale
  :: Ptr C'GtsMatrix -> C'GtsVector -> IO (Ptr C'GtsMatrix)
foreign import ccall "&gts_matrix_scale" p'gts_matrix_scale
  :: FunPtr (Ptr C'GtsMatrix -> C'GtsVector -> IO (Ptr C'GtsMatrix))

{-# LINE 26 "src/Bindings/Gts/BasicMacrosFunctionsAndDataStructures/VectorsAndMatrices.hsc" #-}
foreign import ccall "gts_matrix_translate" c'gts_matrix_translate
  :: Ptr C'GtsMatrix -> C'GtsVector -> IO (Ptr C'GtsMatrix)
foreign import ccall "&gts_matrix_translate" p'gts_matrix_translate
  :: FunPtr (Ptr C'GtsMatrix -> C'GtsVector -> IO (Ptr C'GtsMatrix))

{-# LINE 27 "src/Bindings/Gts/BasicMacrosFunctionsAndDataStructures/VectorsAndMatrices.hsc" #-}
foreign import ccall "gts_matrix_rotate" c'gts_matrix_rotate
  :: Ptr C'GtsMatrix -> C'GtsVector -> C'gdouble -> IO (Ptr C'GtsMatrix)
foreign import ccall "&gts_matrix_rotate" p'gts_matrix_rotate
  :: FunPtr (Ptr C'GtsMatrix -> C'GtsVector -> C'gdouble -> IO (Ptr C'GtsMatrix))

{-# LINE 28 "src/Bindings/Gts/BasicMacrosFunctionsAndDataStructures/VectorsAndMatrices.hsc" #-}
foreign import ccall "gts_matrix_transpose" c'gts_matrix_transpose
  :: Ptr C'GtsMatrix -> IO (Ptr C'GtsMatrix)
foreign import ccall "&gts_matrix_transpose" p'gts_matrix_transpose
  :: FunPtr (Ptr C'GtsMatrix -> IO (Ptr C'GtsMatrix))

{-# LINE 29 "src/Bindings/Gts/BasicMacrosFunctionsAndDataStructures/VectorsAndMatrices.hsc" #-}
foreign import ccall "gts_matrix_determinant" c'gts_matrix_determinant
  :: Ptr C'GtsMatrix -> IO C'gdouble
foreign import ccall "&gts_matrix_determinant" p'gts_matrix_determinant
  :: FunPtr (Ptr C'GtsMatrix -> IO C'gdouble)

{-# LINE 30 "src/Bindings/Gts/BasicMacrosFunctionsAndDataStructures/VectorsAndMatrices.hsc" #-}
foreign import ccall "gts_matrix_inverse" c'gts_matrix_inverse
  :: Ptr C'GtsMatrix -> IO (Ptr C'GtsMatrix)
foreign import ccall "&gts_matrix_inverse" p'gts_matrix_inverse
  :: FunPtr (Ptr C'GtsMatrix -> IO (Ptr C'GtsMatrix))

{-# LINE 31 "src/Bindings/Gts/BasicMacrosFunctionsAndDataStructures/VectorsAndMatrices.hsc" #-}
foreign import ccall "gts_matrix3_inverse" c'gts_matrix3_inverse
  :: Ptr C'GtsMatrix -> IO (Ptr C'GtsMatrix)
foreign import ccall "&gts_matrix3_inverse" p'gts_matrix3_inverse
  :: FunPtr (Ptr C'GtsMatrix -> IO (Ptr C'GtsMatrix))

{-# LINE 32 "src/Bindings/Gts/BasicMacrosFunctionsAndDataStructures/VectorsAndMatrices.hsc" #-}
foreign import ccall "gts_matrix_product" c'gts_matrix_product
  :: Ptr C'GtsMatrix -> Ptr C'GtsMatrix -> IO (Ptr C'GtsMatrix)
foreign import ccall "&gts_matrix_product" p'gts_matrix_product
  :: FunPtr (Ptr C'GtsMatrix -> Ptr C'GtsMatrix -> IO (Ptr C'GtsMatrix))

{-# LINE 33 "src/Bindings/Gts/BasicMacrosFunctionsAndDataStructures/VectorsAndMatrices.hsc" #-}
foreign import ccall "gts_matrix_compatible_row" c'gts_matrix_compatible_row
  :: Ptr C'GtsMatrix -> C'GtsVector -> C'guint -> C'GtsVector -> C'gdouble -> IO C'guint
foreign import ccall "&gts_matrix_compatible_row" p'gts_matrix_compatible_row
  :: FunPtr (Ptr C'GtsMatrix -> C'GtsVector -> C'guint -> C'GtsVector -> C'gdouble -> IO C'guint)

{-# LINE 34 "src/Bindings/Gts/BasicMacrosFunctionsAndDataStructures/VectorsAndMatrices.hsc" #-}
foreign import ccall "gts_matrix_quadratic_optimization" c'gts_matrix_quadratic_optimization
  :: Ptr C'GtsMatrix -> C'GtsVector -> C'guint -> Ptr C'GtsMatrix -> C'GtsVector -> IO C'guint
foreign import ccall "&gts_matrix_quadratic_optimization" p'gts_matrix_quadratic_optimization
  :: FunPtr (Ptr C'GtsMatrix -> C'GtsVector -> C'guint -> Ptr C'GtsMatrix -> C'GtsVector -> IO C'guint)

{-# LINE 35 "src/Bindings/Gts/BasicMacrosFunctionsAndDataStructures/VectorsAndMatrices.hsc" #-}
foreign import ccall "gts_matrix_print" c'gts_matrix_print
  :: Ptr C'GtsMatrix -> Ptr CFile -> IO ()
foreign import ccall "&gts_matrix_print" p'gts_matrix_print
  :: FunPtr (Ptr C'GtsMatrix -> Ptr CFile -> IO ())

{-# LINE 36 "src/Bindings/Gts/BasicMacrosFunctionsAndDataStructures/VectorsAndMatrices.hsc" #-}
foreign import ccall "gts_matrix_destroy" c'gts_matrix_destroy
  :: Ptr C'GtsMatrix -> IO ()
foreign import ccall "&gts_matrix_destroy" p'gts_matrix_destroy
  :: FunPtr (Ptr C'GtsMatrix -> IO ())

{-# LINE 37 "src/Bindings/Gts/BasicMacrosFunctionsAndDataStructures/VectorsAndMatrices.hsc" #-}