{-# LINE 1 "src/Bindings/Gts/GeometricalDataStructures/BoundingBoxesTrees.hsc" #-}

{-# LINE 2 "src/Bindings/Gts/GeometricalDataStructures/BoundingBoxesTrees.hsc" #-}

-- | <http://gts.sourceforge.net/reference/gts-bounding-boxes-trees.html>

module Bindings.Gts.GeometricalDataStructures.BoundingBoxesTrees 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 9 "src/Bindings/Gts/GeometricalDataStructures/BoundingBoxesTrees.hsc" #-}

foreign import ccall "inline_GTS_BBOX_CLASS" c'GTS_BBOX_CLASS
  :: Ptr a -> Ptr C'GtsBBoxClass

{-# LINE 11 "src/Bindings/Gts/GeometricalDataStructures/BoundingBoxesTrees.hsc" #-}
foreign import ccall "inline_GTS_BBOX" c'GTS_BBOX
  :: Ptr a -> Ptr C'GtsBBox

{-# LINE 12 "src/Bindings/Gts/GeometricalDataStructures/BoundingBoxesTrees.hsc" #-}
foreign import ccall "inline_GTS_IS_BBOX" c'GTS_IS_BBOX
  :: Ptr a -> Ptr C'gboolean

{-# LINE 13 "src/Bindings/Gts/GeometricalDataStructures/BoundingBoxesTrees.hsc" #-}

foreign import ccall "gts_bbox_class" c'gts_bbox_class
  :: IO (Ptr C'GtsBBoxClass)
foreign import ccall "&gts_bbox_class" p'gts_bbox_class
  :: FunPtr (IO (Ptr C'GtsBBoxClass))

{-# LINE 15 "src/Bindings/Gts/GeometricalDataStructures/BoundingBoxesTrees.hsc" #-}
foreign import ccall "gts_bbox_new" c'gts_bbox_new
  :: Ptr C'GtsBBoxClass -> C'gpointer -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> IO (Ptr C'GtsBBox)
foreign import ccall "&gts_bbox_new" p'gts_bbox_new
  :: FunPtr (Ptr C'GtsBBoxClass -> C'gpointer -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> IO (Ptr C'GtsBBox))

{-# LINE 16 "src/Bindings/Gts/GeometricalDataStructures/BoundingBoxesTrees.hsc" #-}
foreign import ccall "gts_bbox_set" c'gts_bbox_set
  :: Ptr C'GtsBBox -> C'gpointer -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> IO ()
foreign import ccall "&gts_bbox_set" p'gts_bbox_set
  :: FunPtr (Ptr C'GtsBBox -> C'gpointer -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> C'gdouble -> IO ())

{-# LINE 17 "src/Bindings/Gts/GeometricalDataStructures/BoundingBoxesTrees.hsc" #-}
foreign import ccall "gts_bbox_segment" c'gts_bbox_segment
  :: Ptr C'GtsBBoxClass -> Ptr C'GtsSegment -> IO (Ptr C'GtsBBox)
foreign import ccall "&gts_bbox_segment" p'gts_bbox_segment
  :: FunPtr (Ptr C'GtsBBoxClass -> Ptr C'GtsSegment -> IO (Ptr C'GtsBBox))

{-# LINE 18 "src/Bindings/Gts/GeometricalDataStructures/BoundingBoxesTrees.hsc" #-}
foreign import ccall "gts_bbox_triangle" c'gts_bbox_triangle
  :: Ptr C'GtsBBoxClass -> Ptr C'GtsTriangle -> IO (Ptr C'GtsBBox)
foreign import ccall "&gts_bbox_triangle" p'gts_bbox_triangle
  :: FunPtr (Ptr C'GtsBBoxClass -> Ptr C'GtsTriangle -> IO (Ptr C'GtsBBox))

{-# LINE 19 "src/Bindings/Gts/GeometricalDataStructures/BoundingBoxesTrees.hsc" #-}
foreign import ccall "gts_bbox_surface" c'gts_bbox_surface
  :: Ptr C'GtsBBoxClass -> Ptr C'GtsSurface -> IO (Ptr C'GtsBBox)
foreign import ccall "&gts_bbox_surface" p'gts_bbox_surface
  :: FunPtr (Ptr C'GtsBBoxClass -> Ptr C'GtsSurface -> IO (Ptr C'GtsBBox))

{-# LINE 20 "src/Bindings/Gts/GeometricalDataStructures/BoundingBoxesTrees.hsc" #-}
foreign import ccall "gts_bbox_points" c'gts_bbox_points
  :: Ptr C'GtsBBoxClass -> Ptr C'GSList -> IO (Ptr C'GtsBBox)
foreign import ccall "&gts_bbox_points" p'gts_bbox_points
  :: FunPtr (Ptr C'GtsBBoxClass -> Ptr C'GSList -> IO (Ptr C'GtsBBox))

{-# LINE 21 "src/Bindings/Gts/GeometricalDataStructures/BoundingBoxesTrees.hsc" #-}
foreign import ccall "gts_bbox_bboxes" c'gts_bbox_bboxes
  :: Ptr C'GtsBBoxClass -> Ptr C'GSList -> IO (Ptr C'GtsBBox)
foreign import ccall "&gts_bbox_bboxes" p'gts_bbox_bboxes
  :: FunPtr (Ptr C'GtsBBoxClass -> Ptr C'GSList -> IO (Ptr C'GtsBBox))

{-# LINE 22 "src/Bindings/Gts/GeometricalDataStructures/BoundingBoxesTrees.hsc" #-}
foreign import ccall "gts_bbox_draw" c'gts_bbox_draw
  :: Ptr C'GtsBBox -> Ptr CFile -> IO ()
foreign import ccall "&gts_bbox_draw" p'gts_bbox_draw
  :: FunPtr (Ptr C'GtsBBox -> Ptr CFile -> IO ())

{-# LINE 23 "src/Bindings/Gts/GeometricalDataStructures/BoundingBoxesTrees.hsc" #-}

foreign import ccall "inline_gts_bbox_point_is_inside" c'gts_bbox_point_is_inside
  :: Ptr C'GtsBBox -> Ptr C'GtsPoint -> IO C'gboolean

{-# LINE 25 "src/Bindings/Gts/GeometricalDataStructures/BoundingBoxesTrees.hsc" #-}

foreign import ccall "gts_bboxes_are_overlapping" c'gts_bboxes_are_overlapping
  :: Ptr C'GtsBBox -> Ptr C'GtsBBox -> IO C'gboolean
foreign import ccall "&gts_bboxes_are_overlapping" p'gts_bboxes_are_overlapping
  :: FunPtr (Ptr C'GtsBBox -> Ptr C'GtsBBox -> IO C'gboolean)

{-# LINE 27 "src/Bindings/Gts/GeometricalDataStructures/BoundingBoxesTrees.hsc" #-}
foreign import ccall "gts_bbox_diagonal2" c'gts_bbox_diagonal2
  :: Ptr C'GtsBBox -> IO C'gdouble
foreign import ccall "&gts_bbox_diagonal2" p'gts_bbox_diagonal2
  :: FunPtr (Ptr C'GtsBBox -> IO C'gdouble)

{-# LINE 28 "src/Bindings/Gts/GeometricalDataStructures/BoundingBoxesTrees.hsc" #-}
foreign import ccall "gts_bbox_point_distance2" c'gts_bbox_point_distance2
  :: Ptr C'GtsBBox -> Ptr C'GtsPoint -> Ptr C'gdouble -> Ptr C'gdouble -> IO ()
foreign import ccall "&gts_bbox_point_distance2" p'gts_bbox_point_distance2
  :: FunPtr (Ptr C'GtsBBox -> Ptr C'GtsPoint -> Ptr C'gdouble -> Ptr C'gdouble -> IO ())

{-# LINE 29 "src/Bindings/Gts/GeometricalDataStructures/BoundingBoxesTrees.hsc" #-}
foreign import ccall "gts_bbox_is_stabbed" c'gts_bbox_is_stabbed
  :: Ptr C'GtsBBox -> Ptr C'GtsPoint -> IO C'gboolean
foreign import ccall "&gts_bbox_is_stabbed" p'gts_bbox_is_stabbed
  :: FunPtr (Ptr C'GtsBBox -> Ptr C'GtsPoint -> IO C'gboolean)

{-# LINE 30 "src/Bindings/Gts/GeometricalDataStructures/BoundingBoxesTrees.hsc" #-}
foreign import ccall "gts_bbox_overlaps_triangle" c'gts_bbox_overlaps_triangle
  :: Ptr C'GtsBBox -> Ptr C'GtsTriangle -> IO C'gboolean
foreign import ccall "&gts_bbox_overlaps_triangle" p'gts_bbox_overlaps_triangle
  :: FunPtr (Ptr C'GtsBBox -> Ptr C'GtsTriangle -> IO C'gboolean)

{-# LINE 31 "src/Bindings/Gts/GeometricalDataStructures/BoundingBoxesTrees.hsc" #-}

foreign import ccall "gts_bb_tree_new" c'gts_bb_tree_new
  :: Ptr C'GSList -> IO (Ptr C'GNode)
foreign import ccall "&gts_bb_tree_new" p'gts_bb_tree_new
  :: FunPtr (Ptr C'GSList -> IO (Ptr C'GNode))

{-# LINE 33 "src/Bindings/Gts/GeometricalDataStructures/BoundingBoxesTrees.hsc" #-}
foreign import ccall "gts_bb_tree_surface" c'gts_bb_tree_surface
  :: Ptr C'GtsSurface -> IO (Ptr C'GNode)
foreign import ccall "&gts_bb_tree_surface" p'gts_bb_tree_surface
  :: FunPtr (Ptr C'GtsSurface -> IO (Ptr C'GNode))

{-# LINE 34 "src/Bindings/Gts/GeometricalDataStructures/BoundingBoxesTrees.hsc" #-}
foreign import ccall "gts_bb_tree_overlap" c'gts_bb_tree_overlap
  :: Ptr C'GNode -> Ptr C'GtsBBox -> IO (Ptr C'GSList)
foreign import ccall "&gts_bb_tree_overlap" p'gts_bb_tree_overlap
  :: FunPtr (Ptr C'GNode -> Ptr C'GtsBBox -> IO (Ptr C'GSList))

{-# LINE 35 "src/Bindings/Gts/GeometricalDataStructures/BoundingBoxesTrees.hsc" #-}
foreign import ccall "gts_bb_tree_is_overlapping" c'gts_bb_tree_is_overlapping
  :: Ptr C'GNode -> Ptr C'GtsBBox -> IO C'gboolean
foreign import ccall "&gts_bb_tree_is_overlapping" p'gts_bb_tree_is_overlapping
  :: FunPtr (Ptr C'GNode -> Ptr C'GtsBBox -> IO C'gboolean)

{-# LINE 36 "src/Bindings/Gts/GeometricalDataStructures/BoundingBoxesTrees.hsc" #-}
foreign import ccall "gts_bb_tree_traverse_overlapping" c'gts_bb_tree_traverse_overlapping
  :: Ptr C'GNode -> Ptr C'GNode -> C'GtsBBTreeTraverseFunc -> C'gpointer -> IO ()
foreign import ccall "&gts_bb_tree_traverse_overlapping" p'gts_bb_tree_traverse_overlapping
  :: FunPtr (Ptr C'GNode -> Ptr C'GNode -> C'GtsBBTreeTraverseFunc -> C'gpointer -> IO ())

{-# LINE 37 "src/Bindings/Gts/GeometricalDataStructures/BoundingBoxesTrees.hsc" #-}
foreign import ccall "gts_bb_tree_draw" c'gts_bb_tree_draw
  :: Ptr C'GNode -> C'guint -> Ptr CFile -> IO ()
foreign import ccall "&gts_bb_tree_draw" p'gts_bb_tree_draw
  :: FunPtr (Ptr C'GNode -> C'guint -> Ptr CFile -> IO ())

{-# LINE 38 "src/Bindings/Gts/GeometricalDataStructures/BoundingBoxesTrees.hsc" #-}
foreign import ccall "gts_bb_tree_destroy" c'gts_bb_tree_destroy
  :: Ptr C'GNode -> C'gboolean -> IO ()
foreign import ccall "&gts_bb_tree_destroy" p'gts_bb_tree_destroy
  :: FunPtr (Ptr C'GNode -> C'gboolean -> IO ())

{-# LINE 39 "src/Bindings/Gts/GeometricalDataStructures/BoundingBoxesTrees.hsc" #-}

foreign import ccall "gts_bb_tree_point_distance" c'gts_bb_tree_point_distance
  :: Ptr C'GNode -> Ptr C'GtsPoint -> C'GtsBBoxDistFunc -> Ptr (Ptr C'GtsBBox) -> IO C'gdouble
foreign import ccall "&gts_bb_tree_point_distance" p'gts_bb_tree_point_distance
  :: FunPtr (Ptr C'GNode -> Ptr C'GtsPoint -> C'GtsBBoxDistFunc -> Ptr (Ptr C'GtsBBox) -> IO C'gdouble)

{-# LINE 41 "src/Bindings/Gts/GeometricalDataStructures/BoundingBoxesTrees.hsc" #-}
foreign import ccall "gts_bb_tree_point_closest" c'gts_bb_tree_point_closest
  :: Ptr C'GNode -> Ptr C'GtsPoint -> C'GtsBBoxClosestFunc -> Ptr C'gdouble -> IO (Ptr C'GtsPoint)
foreign import ccall "&gts_bb_tree_point_closest" p'gts_bb_tree_point_closest
  :: FunPtr (Ptr C'GNode -> Ptr C'GtsPoint -> C'GtsBBoxClosestFunc -> Ptr C'gdouble -> IO (Ptr C'GtsPoint))

{-# LINE 42 "src/Bindings/Gts/GeometricalDataStructures/BoundingBoxesTrees.hsc" #-}
foreign import ccall "gts_bb_tree_segment_distance" c'gts_bb_tree_segment_distance
  :: Ptr C'GNode -> Ptr C'GtsSegment -> C'GtsBBoxDistFunc -> C'gdouble -> Ptr C'GtsRange -> IO ()
foreign import ccall "&gts_bb_tree_segment_distance" p'gts_bb_tree_segment_distance
  :: FunPtr (Ptr C'GNode -> Ptr C'GtsSegment -> C'GtsBBoxDistFunc -> C'gdouble -> Ptr C'GtsRange -> IO ())

{-# LINE 43 "src/Bindings/Gts/GeometricalDataStructures/BoundingBoxesTrees.hsc" #-}
foreign import ccall "gts_bb_tree_triangle_distance" c'gts_bb_tree_triangle_distance
  :: Ptr C'GNode -> Ptr C'GtsTriangle -> C'GtsBBoxDistFunc -> C'gdouble -> Ptr C'GtsRange -> IO ()
foreign import ccall "&gts_bb_tree_triangle_distance" p'gts_bb_tree_triangle_distance
  :: FunPtr (Ptr C'GNode -> Ptr C'GtsTriangle -> C'GtsBBoxDistFunc -> C'gdouble -> Ptr C'GtsRange -> IO ())

{-# LINE 44 "src/Bindings/Gts/GeometricalDataStructures/BoundingBoxesTrees.hsc" #-}
foreign import ccall "gts_bb_tree_point_closest_bboxes" c'gts_bb_tree_point_closest_bboxes
  :: Ptr C'GNode -> Ptr C'GtsPoint -> IO (Ptr C'GSList)
foreign import ccall "&gts_bb_tree_point_closest_bboxes" p'gts_bb_tree_point_closest_bboxes
  :: FunPtr (Ptr C'GNode -> Ptr C'GtsPoint -> IO (Ptr C'GSList))

{-# LINE 45 "src/Bindings/Gts/GeometricalDataStructures/BoundingBoxesTrees.hsc" #-}
foreign import ccall "gts_bb_tree_surface_boundary_distance" c'gts_bb_tree_surface_boundary_distance
  :: Ptr C'GNode -> Ptr C'GtsSurface -> C'GtsBBoxDistFunc -> C'gdouble -> Ptr C'GtsRange -> IO ()
foreign import ccall "&gts_bb_tree_surface_boundary_distance" p'gts_bb_tree_surface_boundary_distance
  :: FunPtr (Ptr C'GNode -> Ptr C'GtsSurface -> C'GtsBBoxDistFunc -> C'gdouble -> Ptr C'GtsRange -> IO ())

{-# LINE 46 "src/Bindings/Gts/GeometricalDataStructures/BoundingBoxesTrees.hsc" #-}
foreign import ccall "gts_bb_tree_surface_distance" c'gts_bb_tree_surface_distance
  :: Ptr C'GNode -> Ptr C'GtsSurface -> C'GtsBBoxDistFunc -> C'gdouble -> Ptr C'GtsRange -> IO ()
foreign import ccall "&gts_bb_tree_surface_distance" p'gts_bb_tree_surface_distance
  :: FunPtr (Ptr C'GNode -> Ptr C'GtsSurface -> C'GtsBBoxDistFunc -> C'gdouble -> Ptr C'GtsRange -> IO ())

{-# LINE 47 "src/Bindings/Gts/GeometricalDataStructures/BoundingBoxesTrees.hsc" #-}
foreign import ccall "gts_bb_tree_stabbed" c'gts_bb_tree_stabbed
  :: Ptr C'GNode -> Ptr C'GtsPoint -> IO (Ptr C'GSList)
foreign import ccall "&gts_bb_tree_stabbed" p'gts_bb_tree_stabbed
  :: FunPtr (Ptr C'GNode -> Ptr C'GtsPoint -> IO (Ptr C'GSList))

{-# LINE 48 "src/Bindings/Gts/GeometricalDataStructures/BoundingBoxesTrees.hsc" #-}