{-# LINE 1 "src/Bindings/Gts/GraphAndOperationsOnGraphs/GraphClass.hsc" #-}

{-# LINE 2 "src/Bindings/Gts/GraphAndOperationsOnGraphs/GraphClass.hsc" #-}

-- | <http://gts.sourceforge.net/reference/gts-graph-class.html>

module Bindings.Gts.GraphAndOperationsOnGraphs.GraphClass 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/GraphAndOperationsOnGraphs/GraphClass.hsc" #-}

foreign import ccall "inline_GTS_GNODE_CLASS" c'GTS_GNODE_CLASS
  :: Ptr a -> Ptr C'GtsGNodeClass

{-# LINE 11 "src/Bindings/Gts/GraphAndOperationsOnGraphs/GraphClass.hsc" #-}
foreign import ccall "inline_GTS_GNODE" c'GTS_GNODE
  :: Ptr a -> Ptr C'GtsGNode

{-# LINE 12 "src/Bindings/Gts/GraphAndOperationsOnGraphs/GraphClass.hsc" #-}
foreign import ccall "inline_GTS_IS_GNODE" c'GTS_IS_GNODE
  :: Ptr a -> Ptr C'gboolean

{-# LINE 13 "src/Bindings/Gts/GraphAndOperationsOnGraphs/GraphClass.hsc" #-}

foreign import ccall "inline_GTS_GNODE_NEIGHBOR" c'GTS_GNODE_NEIGHBOR
  :: Ptr C'GtsGNode -> Ptr C'GtsGEdge -> IO (Ptr C'GtsGNode)

{-# LINE 15 "src/Bindings/Gts/GraphAndOperationsOnGraphs/GraphClass.hsc" #-}

foreign import ccall "gts_gnode_class" c'gts_gnode_class
  :: IO (Ptr C'GtsGNodeClass)
foreign import ccall "&gts_gnode_class" p'gts_gnode_class
  :: FunPtr (IO (Ptr C'GtsGNodeClass))

{-# LINE 17 "src/Bindings/Gts/GraphAndOperationsOnGraphs/GraphClass.hsc" #-}
foreign import ccall "gts_gnode_new" c'gts_gnode_new
  :: Ptr C'GtsGNodeClass -> IO (Ptr C'GtsGNode)
foreign import ccall "&gts_gnode_new" p'gts_gnode_new
  :: FunPtr (Ptr C'GtsGNodeClass -> IO (Ptr C'GtsGNode))

{-# LINE 18 "src/Bindings/Gts/GraphAndOperationsOnGraphs/GraphClass.hsc" #-}
foreign import ccall "gts_gnode_degree" c'gts_gnode_degree
  :: Ptr C'GtsGNode -> Ptr C'GtsGraph -> IO C'guint
foreign import ccall "&gts_gnode_degree" p'gts_gnode_degree
  :: FunPtr (Ptr C'GtsGNode -> Ptr C'GtsGraph -> IO C'guint)

{-# LINE 19 "src/Bindings/Gts/GraphAndOperationsOnGraphs/GraphClass.hsc" #-}
foreign import ccall "gts_gnode_foreach_edge" c'gts_gnode_foreach_edge
  :: Ptr C'GtsGNode -> Ptr C'GtsGraph -> C'GtsFunc -> C'gpointer -> IO ()
foreign import ccall "&gts_gnode_foreach_edge" p'gts_gnode_foreach_edge
  :: FunPtr (Ptr C'GtsGNode -> Ptr C'GtsGraph -> C'GtsFunc -> C'gpointer -> IO ())

{-# LINE 20 "src/Bindings/Gts/GraphAndOperationsOnGraphs/GraphClass.hsc" #-}
foreign import ccall "gts_gnode_foreach_neighbor" c'gts_gnode_foreach_neighbor
  :: Ptr C'GtsGNode -> Ptr C'GtsGraph -> C'GtsFunc -> C'gpointer -> IO ()
foreign import ccall "&gts_gnode_foreach_neighbor" p'gts_gnode_foreach_neighbor
  :: FunPtr (Ptr C'GtsGNode -> Ptr C'GtsGraph -> C'GtsFunc -> C'gpointer -> IO ())

{-# LINE 21 "src/Bindings/Gts/GraphAndOperationsOnGraphs/GraphClass.hsc" #-}
foreign import ccall "gts_gnode_weight" c'gts_gnode_weight
  :: Ptr C'GtsGNode -> IO C'gfloat
foreign import ccall "&gts_gnode_weight" p'gts_gnode_weight
  :: FunPtr (Ptr C'GtsGNode -> IO C'gfloat)

{-# LINE 22 "src/Bindings/Gts/GraphAndOperationsOnGraphs/GraphClass.hsc" #-}
foreign import ccall "gts_gnode_move_cost" c'gts_gnode_move_cost
  :: Ptr C'GtsGNode -> Ptr C'GtsGraph -> Ptr C'GtsGraph -> IO C'gfloat
foreign import ccall "&gts_gnode_move_cost" p'gts_gnode_move_cost
  :: FunPtr (Ptr C'GtsGNode -> Ptr C'GtsGraph -> Ptr C'GtsGraph -> IO C'gfloat)

{-# LINE 23 "src/Bindings/Gts/GraphAndOperationsOnGraphs/GraphClass.hsc" #-}

foreign import ccall "inline_GTS_GEDGE_CLASS" c'GTS_GEDGE_CLASS
  :: Ptr a -> Ptr C'GtsGEdgeClass

{-# LINE 25 "src/Bindings/Gts/GraphAndOperationsOnGraphs/GraphClass.hsc" #-}
foreign import ccall "inline_GTS_GEDGE" c'GTS_GEDGE
  :: Ptr a -> Ptr C'GtsGEdge

{-# LINE 26 "src/Bindings/Gts/GraphAndOperationsOnGraphs/GraphClass.hsc" #-}
foreign import ccall "inline_GTS_IS_GEDGE" c'GTS_IS_GEDGE
  :: Ptr a -> Ptr C'gboolean

{-# LINE 27 "src/Bindings/Gts/GraphAndOperationsOnGraphs/GraphClass.hsc" #-}

foreign import ccall "gts_gedge_class" c'gts_gedge_class
  :: IO (Ptr C'GtsGEdgeClass)
foreign import ccall "&gts_gedge_class" p'gts_gedge_class
  :: FunPtr (IO (Ptr C'GtsGEdgeClass))

{-# LINE 29 "src/Bindings/Gts/GraphAndOperationsOnGraphs/GraphClass.hsc" #-}
foreign import ccall "gts_gedge_new" c'gts_gedge_new
  :: Ptr C'GtsGEdgeClass -> Ptr C'GtsGNode -> Ptr C'GtsGNode -> IO (Ptr C'GtsGEdge)
foreign import ccall "&gts_gedge_new" p'gts_gedge_new
  :: FunPtr (Ptr C'GtsGEdgeClass -> Ptr C'GtsGNode -> Ptr C'GtsGNode -> IO (Ptr C'GtsGEdge))

{-# LINE 30 "src/Bindings/Gts/GraphAndOperationsOnGraphs/GraphClass.hsc" #-}
foreign import ccall "gts_gedge_weight" c'gts_gedge_weight
  :: Ptr C'GtsGEdge -> IO C'gfloat
foreign import ccall "&gts_gedge_weight" p'gts_gedge_weight
  :: FunPtr (Ptr C'GtsGEdge -> IO C'gfloat)

{-# LINE 31 "src/Bindings/Gts/GraphAndOperationsOnGraphs/GraphClass.hsc" #-}

foreign import ccall "inline_gts_gedge_connects" c'gts_gedge_connects
  :: Ptr C'GtsGEdge -> Ptr C'GtsGNode -> Ptr C'GtsGNode -> IO C'gboolean

{-# LINE 33 "src/Bindings/Gts/GraphAndOperationsOnGraphs/GraphClass.hsc" #-}

foreign import ccall "inline_GTS_GRAPH_CLASS" c'GTS_GRAPH_CLASS
  :: Ptr a -> Ptr C'GtsGraphClass

{-# LINE 35 "src/Bindings/Gts/GraphAndOperationsOnGraphs/GraphClass.hsc" #-}
foreign import ccall "inline_GTS_GRAPH" c'GTS_GRAPH
  :: Ptr a -> Ptr C'GtsGraph

{-# LINE 36 "src/Bindings/Gts/GraphAndOperationsOnGraphs/GraphClass.hsc" #-}
foreign import ccall "inline_GTS_IS_GRAPH" c'GTS_IS_GRAPH
  :: Ptr a -> Ptr C'gboolean

{-# LINE 37 "src/Bindings/Gts/GraphAndOperationsOnGraphs/GraphClass.hsc" #-}

foreign import ccall "gts_graph_class" c'gts_graph_class
  :: IO (Ptr C'GtsGraphClass)
foreign import ccall "&gts_graph_class" p'gts_graph_class
  :: FunPtr (IO (Ptr C'GtsGraphClass))

{-# LINE 39 "src/Bindings/Gts/GraphAndOperationsOnGraphs/GraphClass.hsc" #-}
foreign import ccall "gts_graph_new" c'gts_graph_new
  :: Ptr C'GtsGraphClass -> Ptr C'GtsGNodeClass -> Ptr C'GtsGEdgeClass -> IO (Ptr C'GtsGraph)
foreign import ccall "&gts_graph_new" p'gts_graph_new
  :: FunPtr (Ptr C'GtsGraphClass -> Ptr C'GtsGNodeClass -> Ptr C'GtsGEdgeClass -> IO (Ptr C'GtsGraph))

{-# LINE 40 "src/Bindings/Gts/GraphAndOperationsOnGraphs/GraphClass.hsc" #-}
foreign import ccall "gts_graph_read" c'gts_graph_read
  :: Ptr C'GtsFile -> IO (Ptr C'GtsGraph)
foreign import ccall "&gts_graph_read" p'gts_graph_read
  :: FunPtr (Ptr C'GtsFile -> IO (Ptr C'GtsGraph))

{-# LINE 41 "src/Bindings/Gts/GraphAndOperationsOnGraphs/GraphClass.hsc" #-}
foreign import ccall "gts_graph_read_jostle" c'gts_graph_read_jostle
  :: Ptr C'GtsGraph -> Ptr C'GtsFile -> IO C'guint
foreign import ccall "&gts_graph_read_jostle" p'gts_graph_read_jostle
  :: FunPtr (Ptr C'GtsGraph -> Ptr C'GtsFile -> IO C'guint)

{-# LINE 42 "src/Bindings/Gts/GraphAndOperationsOnGraphs/GraphClass.hsc" #-}
foreign import ccall "gts_graph_write" c'gts_graph_write
  :: Ptr C'GtsGraph -> Ptr CFile -> IO ()
foreign import ccall "&gts_graph_write" p'gts_graph_write
  :: FunPtr (Ptr C'GtsGraph -> Ptr CFile -> IO ())

{-# LINE 43 "src/Bindings/Gts/GraphAndOperationsOnGraphs/GraphClass.hsc" #-}
foreign import ccall "gts_graph_write_dot" c'gts_graph_write_dot
  :: Ptr C'GtsGraph -> Ptr CFile -> IO ()
foreign import ccall "&gts_graph_write_dot" p'gts_graph_write_dot
  :: FunPtr (Ptr C'GtsGraph -> Ptr CFile -> IO ())

{-# LINE 44 "src/Bindings/Gts/GraphAndOperationsOnGraphs/GraphClass.hsc" #-}
foreign import ccall "gts_graph_print_stats" c'gts_graph_print_stats
  :: Ptr C'GtsGraph -> Ptr CFile -> IO ()
foreign import ccall "&gts_graph_print_stats" p'gts_graph_print_stats
  :: FunPtr (Ptr C'GtsGraph -> Ptr CFile -> IO ())

{-# LINE 45 "src/Bindings/Gts/GraphAndOperationsOnGraphs/GraphClass.hsc" #-}
foreign import ccall "gts_graph_foreach_edge" c'gts_graph_foreach_edge
  :: Ptr C'GtsGraph -> C'GtsFunc -> C'gpointer -> IO ()
foreign import ccall "&gts_graph_foreach_edge" p'gts_graph_foreach_edge
  :: FunPtr (Ptr C'GtsGraph -> C'GtsFunc -> C'gpointer -> IO ())

{-# LINE 46 "src/Bindings/Gts/GraphAndOperationsOnGraphs/GraphClass.hsc" #-}

foreign import ccall "gts_graph_traverse_new" c'gts_graph_traverse_new
  :: Ptr C'GtsGraph -> Ptr C'GtsGNode -> C'GtsTraverseType -> C'gboolean -> IO (Ptr C'GtsGraphTraverse)
foreign import ccall "&gts_graph_traverse_new" p'gts_graph_traverse_new
  :: FunPtr (Ptr C'GtsGraph -> Ptr C'GtsGNode -> C'GtsTraverseType -> C'gboolean -> IO (Ptr C'GtsGraphTraverse))

{-# LINE 48 "src/Bindings/Gts/GraphAndOperationsOnGraphs/GraphClass.hsc" #-}
foreign import ccall "gts_graph_traverse_next" c'gts_graph_traverse_next
  :: Ptr C'GtsGraphTraverse -> IO (Ptr C'GtsGNode)
foreign import ccall "&gts_graph_traverse_next" p'gts_graph_traverse_next
  :: FunPtr (Ptr C'GtsGraphTraverse -> IO (Ptr C'GtsGNode))

{-# LINE 49 "src/Bindings/Gts/GraphAndOperationsOnGraphs/GraphClass.hsc" #-}
foreign import ccall "gts_graph_traverse_what_next" c'gts_graph_traverse_what_next
  :: Ptr C'GtsGraphTraverse -> IO (Ptr C'GtsGNode)
foreign import ccall "&gts_graph_traverse_what_next" p'gts_graph_traverse_what_next
  :: FunPtr (Ptr C'GtsGraphTraverse -> IO (Ptr C'GtsGNode))

{-# LINE 50 "src/Bindings/Gts/GraphAndOperationsOnGraphs/GraphClass.hsc" #-}
foreign import ccall "gts_graph_traverse_destroy" c'gts_graph_traverse_destroy
  :: Ptr C'GtsGraphTraverse -> IO ()
foreign import ccall "&gts_graph_traverse_destroy" p'gts_graph_traverse_destroy
  :: FunPtr (Ptr C'GtsGraphTraverse -> IO ())

{-# LINE 51 "src/Bindings/Gts/GraphAndOperationsOnGraphs/GraphClass.hsc" #-}
foreign import ccall "gts_graph_edges_cut" c'gts_graph_edges_cut
  :: Ptr C'GtsGraph -> IO C'guint
foreign import ccall "&gts_graph_edges_cut" p'gts_graph_edges_cut
  :: FunPtr (Ptr C'GtsGraph -> IO C'guint)

{-# LINE 52 "src/Bindings/Gts/GraphAndOperationsOnGraphs/GraphClass.hsc" #-}
foreign import ccall "gts_graph_edges_cut_weight" c'gts_graph_edges_cut_weight
  :: Ptr C'GtsGraph -> IO C'gfloat
foreign import ccall "&gts_graph_edges_cut_weight" p'gts_graph_edges_cut_weight
  :: FunPtr (Ptr C'GtsGraph -> IO C'gfloat)

{-# LINE 53 "src/Bindings/Gts/GraphAndOperationsOnGraphs/GraphClass.hsc" #-}
foreign import ccall "gts_graph_distance_sum" c'gts_graph_distance_sum
  :: Ptr C'GtsGraph -> Ptr C'GtsGNode -> IO C'guint
foreign import ccall "&gts_graph_distance_sum" p'gts_graph_distance_sum
  :: FunPtr (Ptr C'GtsGraph -> Ptr C'GtsGNode -> IO C'guint)

{-# LINE 54 "src/Bindings/Gts/GraphAndOperationsOnGraphs/GraphClass.hsc" #-}
foreign import ccall "gts_graph_farthest" c'gts_graph_farthest
  :: Ptr C'GtsGraph -> Ptr C'GSList -> IO (Ptr C'GtsGNode)
foreign import ccall "&gts_graph_farthest" p'gts_graph_farthest
  :: FunPtr (Ptr C'GtsGraph -> Ptr C'GSList -> IO (Ptr C'GtsGNode))

{-# LINE 55 "src/Bindings/Gts/GraphAndOperationsOnGraphs/GraphClass.hsc" #-}
foreign import ccall "gts_graph_weight" c'gts_graph_weight
  :: Ptr C'GtsGraph -> IO C'gfloat
foreign import ccall "&gts_graph_weight" p'gts_graph_weight
  :: FunPtr (Ptr C'GtsGraph -> IO C'gfloat)

{-# LINE 56 "src/Bindings/Gts/GraphAndOperationsOnGraphs/GraphClass.hsc" #-}

foreign import ccall "inline_GTS_FNODE_CLASS" c'GTS_FNODE_CLASS
  :: Ptr a -> Ptr C'GtsFNodeClass

{-# LINE 58 "src/Bindings/Gts/GraphAndOperationsOnGraphs/GraphClass.hsc" #-}
foreign import ccall "inline_GTS_FNODE" c'GTS_FNODE
  :: Ptr a -> Ptr C'GtsFNode

{-# LINE 59 "src/Bindings/Gts/GraphAndOperationsOnGraphs/GraphClass.hsc" #-}
foreign import ccall "inline_GTS_IS_FNODE" c'GTS_IS_FNODE
  :: Ptr a -> Ptr C'gboolean

{-# LINE 60 "src/Bindings/Gts/GraphAndOperationsOnGraphs/GraphClass.hsc" #-}

foreign import ccall "gts_fnode_class" c'gts_fnode_class
  :: IO (Ptr C'GtsFNodeClass)
foreign import ccall "&gts_fnode_class" p'gts_fnode_class
  :: FunPtr (IO (Ptr C'GtsFNodeClass))

{-# LINE 62 "src/Bindings/Gts/GraphAndOperationsOnGraphs/GraphClass.hsc" #-}
foreign import ccall "gts_fnode_new" c'gts_fnode_new
  :: Ptr C'GtsFNodeClass -> Ptr C'GtsFace -> IO (Ptr C'GtsFNode)
foreign import ccall "&gts_fnode_new" p'gts_fnode_new
  :: FunPtr (Ptr C'GtsFNodeClass -> Ptr C'GtsFace -> IO (Ptr C'GtsFNode))

{-# LINE 63 "src/Bindings/Gts/GraphAndOperationsOnGraphs/GraphClass.hsc" #-}

foreign import ccall "gts_surface_graph_new" c'gts_surface_graph_new
  :: Ptr C'GtsGraphClass -> Ptr C'GtsSurface -> IO (Ptr C'GtsGraph)
foreign import ccall "&gts_surface_graph_new" p'gts_surface_graph_new
  :: FunPtr (Ptr C'GtsGraphClass -> Ptr C'GtsSurface -> IO (Ptr C'GtsGraph))

{-# LINE 65 "src/Bindings/Gts/GraphAndOperationsOnGraphs/GraphClass.hsc" #-}
foreign import ccall "gts_surface_graph_surface" c'gts_surface_graph_surface
  :: Ptr C'GtsGraph -> Ptr C'GtsSurface -> IO (Ptr C'GtsSurface)
foreign import ccall "&gts_surface_graph_surface" p'gts_surface_graph_surface
  :: FunPtr (Ptr C'GtsGraph -> Ptr C'GtsSurface -> IO (Ptr C'GtsSurface))

{-# LINE 66 "src/Bindings/Gts/GraphAndOperationsOnGraphs/GraphClass.hsc" #-}
foreign import ccall "gts_segments_graph_new" c'gts_segments_graph_new
  :: Ptr C'GtsGraphClass -> Ptr C'GSList -> IO (Ptr C'GtsGraph)
foreign import ccall "&gts_segments_graph_new" p'gts_segments_graph_new
  :: FunPtr (Ptr C'GtsGraphClass -> Ptr C'GSList -> IO (Ptr C'GtsGraph))

{-# LINE 67 "src/Bindings/Gts/GraphAndOperationsOnGraphs/GraphClass.hsc" #-}