{-# LANGUAGE EmptyDataDecls, FlexibleContexts, FlexibleInstances,
  ForeignFunctionInterface, IncoherentInstances,
  MultiParamTypeClasses, OverlappingInstances, TemplateHaskell,
  TypeFamilies, TypeSynonymInstances #-}
module GDAL.OGRSimpleCurve.Implementation where
import Data.Monoid
import Data.Word
import Data.Int
import Foreign.C
import Foreign.Ptr
import Language.Haskell.TH
import Language.Haskell.TH.Syntax
import System.IO.Unsafe
import FFICXX.Runtime.Cast
import FFICXX.Runtime.CodeGen.Cxx
import FFICXX.Runtime.TH
import GDAL.OGRSimpleCurve.RawType
import GDAL.OGRSimpleCurve.FFI
import GDAL.OGRSimpleCurve.Interface
import GDAL.OGRSimpleCurve.Cast
import GDAL.OGRSimpleCurve.RawType
import GDAL.OGRSimpleCurve.Cast
import GDAL.OGRSimpleCurve.Interface
import GDAL.OGRPointIterator.RawType
import GDAL.OGRPointIterator.Cast
import GDAL.OGRPointIterator.Interface
import GDAL.OGRPolygon.RawType
import GDAL.OGRPolygon.Cast
import GDAL.OGRPolygon.Interface
import GDAL.OGRMultiPolygon.RawType
import GDAL.OGRMultiPolygon.Cast
import GDAL.OGRMultiPolygon.Interface
import GDAL.OGREnvelope.RawType
import GDAL.OGREnvelope.Cast
import GDAL.OGREnvelope.Interface
import GDAL.OGRPoint.RawType
import GDAL.OGRPoint.Cast
import GDAL.OGRPoint.Interface
import GDAL.OGRCurve.RawType
import GDAL.OGRCurve.Cast
import GDAL.OGRCurve.Interface
import GDAL.OGRGeometry.RawType
import GDAL.OGRGeometry.Cast
import GDAL.OGRGeometry.Interface
import STD.Deletable.RawType
import STD.Deletable.Cast
import STD.Deletable.Interface

instance () => IOGRSimpleCurve (OGRSimpleCurve) where

instance () => IOGRCurve (OGRSimpleCurve) where
        getNumPoints :: OGRSimpleCurve -> IO CInt
getNumPoints = (Ptr RawOGRSimpleCurve -> IO CInt) -> OGRSimpleCurve -> IO CInt
forall a ca y cy.
(Castable a ca, Castable y cy) =>
(ca -> IO cy) -> a -> IO y
xform0 Ptr RawOGRSimpleCurve -> IO CInt
c_ogrsimplecurve_getnumpoints
        getPointIterator :: OGRSimpleCurve -> IO OGRPointIterator
getPointIterator = (Ptr RawOGRSimpleCurve -> IO (Ptr RawOGRPointIterator))
-> OGRSimpleCurve -> IO OGRPointIterator
forall a ca y cy.
(Castable a ca, Castable y cy) =>
(ca -> IO cy) -> a -> IO y
xform0 Ptr RawOGRSimpleCurve -> IO (Ptr RawOGRPointIterator)
c_ogrsimplecurve_getpointiterator

instance () => IOGRGeometry (OGRSimpleCurve) where
        getGeometryType :: OGRSimpleCurve -> IO CUInt
getGeometryType = (Ptr RawOGRSimpleCurve -> IO CUInt) -> OGRSimpleCurve -> IO CUInt
forall a ca y cy.
(Castable a ca, Castable y cy) =>
(ca -> IO cy) -> a -> IO y
xform0 Ptr RawOGRSimpleCurve -> IO CUInt
c_ogrsimplecurve_getgeometrytype
        getEnvelope :: forall c0.
(IOGREnvelope c0, FPtr c0) =>
OGRSimpleCurve -> c0 -> IO ()
getEnvelope = (Ptr RawOGRSimpleCurve -> Ptr RawOGREnvelope -> IO ())
-> OGRSimpleCurve -> c0 -> IO ()
forall a ca x1 cx1 y cy.
(Castable a ca, Castable x1 cx1, Castable y cy) =>
(ca -> cx1 -> IO cy) -> a -> x1 -> IO y
xform1 Ptr RawOGRSimpleCurve -> Ptr RawOGREnvelope -> IO ()
c_ogrsimplecurve_getenvelope
        intersects :: forall c0.
(IOGRGeometry c0, FPtr c0) =>
OGRSimpleCurve -> c0 -> IO CBool
intersects = (Ptr RawOGRSimpleCurve -> Ptr RawOGRGeometry -> IO CBool)
-> OGRSimpleCurve -> c0 -> IO CBool
forall a ca x1 cx1 y cy.
(Castable a ca, Castable x1 cx1, Castable y cy) =>
(ca -> cx1 -> IO cy) -> a -> x1 -> IO y
xform1 Ptr RawOGRSimpleCurve -> Ptr RawOGRGeometry -> IO CBool
c_ogrsimplecurve_intersects
        equals :: forall c0.
(IOGRGeometry c0, FPtr c0) =>
OGRSimpleCurve -> c0 -> IO CBool
equals = (Ptr RawOGRSimpleCurve -> Ptr RawOGRGeometry -> IO CBool)
-> OGRSimpleCurve -> c0 -> IO CBool
forall a ca x1 cx1 y cy.
(Castable a ca, Castable x1 cx1, Castable y cy) =>
(ca -> cx1 -> IO cy) -> a -> x1 -> IO y
xform1 Ptr RawOGRSimpleCurve -> Ptr RawOGRGeometry -> IO CBool
c_ogrsimplecurve_equals
        disjoint :: forall c0.
(IOGRGeometry c0, FPtr c0) =>
OGRSimpleCurve -> c0 -> IO CBool
disjoint = (Ptr RawOGRSimpleCurve -> Ptr RawOGRGeometry -> IO CBool)
-> OGRSimpleCurve -> c0 -> IO CBool
forall a ca x1 cx1 y cy.
(Castable a ca, Castable x1 cx1, Castable y cy) =>
(ca -> cx1 -> IO cy) -> a -> x1 -> IO y
xform1 Ptr RawOGRSimpleCurve -> Ptr RawOGRGeometry -> IO CBool
c_ogrsimplecurve_disjoint
        touches :: forall c0.
(IOGRGeometry c0, FPtr c0) =>
OGRSimpleCurve -> c0 -> IO CBool
touches = (Ptr RawOGRSimpleCurve -> Ptr RawOGRGeometry -> IO CBool)
-> OGRSimpleCurve -> c0 -> IO CBool
forall a ca x1 cx1 y cy.
(Castable a ca, Castable x1 cx1, Castable y cy) =>
(ca -> cx1 -> IO cy) -> a -> x1 -> IO y
xform1 Ptr RawOGRSimpleCurve -> Ptr RawOGRGeometry -> IO CBool
c_ogrsimplecurve_touches
        crosses :: forall c0.
(IOGRGeometry c0, FPtr c0) =>
OGRSimpleCurve -> c0 -> IO CBool
crosses = (Ptr RawOGRSimpleCurve -> Ptr RawOGRGeometry -> IO CBool)
-> OGRSimpleCurve -> c0 -> IO CBool
forall a ca x1 cx1 y cy.
(Castable a ca, Castable x1 cx1, Castable y cy) =>
(ca -> cx1 -> IO cy) -> a -> x1 -> IO y
xform1 Ptr RawOGRSimpleCurve -> Ptr RawOGRGeometry -> IO CBool
c_ogrsimplecurve_crosses
        within :: forall c0.
(IOGRGeometry c0, FPtr c0) =>
OGRSimpleCurve -> c0 -> IO CBool
within = (Ptr RawOGRSimpleCurve -> Ptr RawOGRGeometry -> IO CBool)
-> OGRSimpleCurve -> c0 -> IO CBool
forall a ca x1 cx1 y cy.
(Castable a ca, Castable x1 cx1, Castable y cy) =>
(ca -> cx1 -> IO cy) -> a -> x1 -> IO y
xform1 Ptr RawOGRSimpleCurve -> Ptr RawOGRGeometry -> IO CBool
c_ogrsimplecurve_within
        contains :: forall c0.
(IOGRGeometry c0, FPtr c0) =>
OGRSimpleCurve -> c0 -> IO CBool
contains = (Ptr RawOGRSimpleCurve -> Ptr RawOGRGeometry -> IO CBool)
-> OGRSimpleCurve -> c0 -> IO CBool
forall a ca x1 cx1 y cy.
(Castable a ca, Castable x1 cx1, Castable y cy) =>
(ca -> cx1 -> IO cy) -> a -> x1 -> IO y
xform1 Ptr RawOGRSimpleCurve -> Ptr RawOGRGeometry -> IO CBool
c_ogrsimplecurve_contains
        overlaps :: forall c0.
(IOGRGeometry c0, FPtr c0) =>
OGRSimpleCurve -> c0 -> IO CBool
overlaps = (Ptr RawOGRSimpleCurve -> Ptr RawOGRGeometry -> IO CBool)
-> OGRSimpleCurve -> c0 -> IO CBool
forall a ca x1 cx1 y cy.
(Castable a ca, Castable x1 cx1, Castable y cy) =>
(ca -> cx1 -> IO cy) -> a -> x1 -> IO y
xform1 Ptr RawOGRSimpleCurve -> Ptr RawOGRGeometry -> IO CBool
c_ogrsimplecurve_overlaps
        boundary :: OGRSimpleCurve -> IO OGRGeometry
boundary = (Ptr RawOGRSimpleCurve -> IO (Ptr RawOGRGeometry))
-> OGRSimpleCurve -> IO OGRGeometry
forall a ca y cy.
(Castable a ca, Castable y cy) =>
(ca -> IO cy) -> a -> IO y
xform0 Ptr RawOGRSimpleCurve -> IO (Ptr RawOGRGeometry)
c_ogrsimplecurve_boundary
        distance :: forall c0.
(IOGRGeometry c0, FPtr c0) =>
OGRSimpleCurve -> c0 -> IO CDouble
distance = (Ptr RawOGRSimpleCurve -> Ptr RawOGRGeometry -> IO CDouble)
-> OGRSimpleCurve -> c0 -> IO CDouble
forall a ca x1 cx1 y cy.
(Castable a ca, Castable x1 cx1, Castable y cy) =>
(ca -> cx1 -> IO cy) -> a -> x1 -> IO y
xform1 Ptr RawOGRSimpleCurve -> Ptr RawOGRGeometry -> IO CDouble
c_ogrsimplecurve_distance
        convexHull :: OGRSimpleCurve -> IO OGRGeometry
convexHull = (Ptr RawOGRSimpleCurve -> IO (Ptr RawOGRGeometry))
-> OGRSimpleCurve -> IO OGRGeometry
forall a ca y cy.
(Castable a ca, Castable y cy) =>
(ca -> IO cy) -> a -> IO y
xform0 Ptr RawOGRSimpleCurve -> IO (Ptr RawOGRGeometry)
c_ogrsimplecurve_convexhull
        buffer :: OGRSimpleCurve -> CDouble -> CInt -> IO OGRGeometry
buffer = (Ptr RawOGRSimpleCurve
 -> CDouble -> CInt -> IO (Ptr RawOGRGeometry))
-> OGRSimpleCurve -> CDouble -> CInt -> IO OGRGeometry
forall a ca x1 cx1 x2 cx2 y cy.
(Castable a ca, Castable x1 cx1, Castable x2 cx2, Castable y cy) =>
(ca -> cx1 -> cx2 -> IO cy) -> a -> x1 -> x2 -> IO y
xform2 Ptr RawOGRSimpleCurve -> CDouble -> CInt -> IO (Ptr RawOGRGeometry)
c_ogrsimplecurve_buffer
        intersection :: forall c0.
(IOGRGeometry c0, FPtr c0) =>
OGRSimpleCurve -> c0 -> IO OGRGeometry
intersection = (Ptr RawOGRSimpleCurve
 -> Ptr RawOGRGeometry -> IO (Ptr RawOGRGeometry))
-> OGRSimpleCurve -> c0 -> IO OGRGeometry
forall a ca x1 cx1 y cy.
(Castable a ca, Castable x1 cx1, Castable y cy) =>
(ca -> cx1 -> IO cy) -> a -> x1 -> IO y
xform1 Ptr RawOGRSimpleCurve
-> Ptr RawOGRGeometry -> IO (Ptr RawOGRGeometry)
c_ogrsimplecurve_intersection
        union :: forall c0.
(IOGRGeometry c0, FPtr c0) =>
OGRSimpleCurve -> c0 -> IO OGRGeometry
union = (Ptr RawOGRSimpleCurve
 -> Ptr RawOGRGeometry -> IO (Ptr RawOGRGeometry))
-> OGRSimpleCurve -> c0 -> IO OGRGeometry
forall a ca x1 cx1 y cy.
(Castable a ca, Castable x1 cx1, Castable y cy) =>
(ca -> cx1 -> IO cy) -> a -> x1 -> IO y
xform1 Ptr RawOGRSimpleCurve
-> Ptr RawOGRGeometry -> IO (Ptr RawOGRGeometry)
c_ogrsimplecurve_union
        unionCascaded :: OGRSimpleCurve -> IO OGRGeometry
unionCascaded = (Ptr RawOGRSimpleCurve -> IO (Ptr RawOGRGeometry))
-> OGRSimpleCurve -> IO OGRGeometry
forall a ca y cy.
(Castable a ca, Castable y cy) =>
(ca -> IO cy) -> a -> IO y
xform0 Ptr RawOGRSimpleCurve -> IO (Ptr RawOGRGeometry)
c_ogrsimplecurve_unioncascaded
        difference :: forall c0.
(IOGRGeometry c0, FPtr c0) =>
OGRSimpleCurve -> c0 -> IO OGRGeometry
difference = (Ptr RawOGRSimpleCurve
 -> Ptr RawOGRGeometry -> IO (Ptr RawOGRGeometry))
-> OGRSimpleCurve -> c0 -> IO OGRGeometry
forall a ca x1 cx1 y cy.
(Castable a ca, Castable x1 cx1, Castable y cy) =>
(ca -> cx1 -> IO cy) -> a -> x1 -> IO y
xform1 Ptr RawOGRSimpleCurve
-> Ptr RawOGRGeometry -> IO (Ptr RawOGRGeometry)
c_ogrsimplecurve_difference
        symDifference :: forall c0.
(IOGRGeometry c0, FPtr c0) =>
OGRSimpleCurve -> c0 -> IO OGRGeometry
symDifference = (Ptr RawOGRSimpleCurve
 -> Ptr RawOGRGeometry -> IO (Ptr RawOGRGeometry))
-> OGRSimpleCurve -> c0 -> IO OGRGeometry
forall a ca x1 cx1 y cy.
(Castable a ca, Castable x1 cx1, Castable y cy) =>
(ca -> cx1 -> IO cy) -> a -> x1 -> IO y
xform1 Ptr RawOGRSimpleCurve
-> Ptr RawOGRGeometry -> IO (Ptr RawOGRGeometry)
c_ogrsimplecurve_symdifference
        centroid :: forall c0.
(IOGRPoint c0, FPtr c0) =>
OGRSimpleCurve -> c0 -> IO CInt
centroid = (Ptr RawOGRSimpleCurve -> Ptr RawOGRPoint -> IO CInt)
-> OGRSimpleCurve -> c0 -> IO CInt
forall a ca x1 cx1 y cy.
(Castable a ca, Castable x1 cx1, Castable y cy) =>
(ca -> cx1 -> IO cy) -> a -> x1 -> IO y
xform1 Ptr RawOGRSimpleCurve -> Ptr RawOGRPoint -> IO CInt
c_ogrsimplecurve_centroid
        simplify :: OGRSimpleCurve -> CDouble -> IO OGRGeometry
simplify = (Ptr RawOGRSimpleCurve -> CDouble -> IO (Ptr RawOGRGeometry))
-> OGRSimpleCurve -> CDouble -> IO OGRGeometry
forall a ca x1 cx1 y cy.
(Castable a ca, Castable x1 cx1, Castable y cy) =>
(ca -> cx1 -> IO cy) -> a -> x1 -> IO y
xform1 Ptr RawOGRSimpleCurve -> CDouble -> IO (Ptr RawOGRGeometry)
c_ogrsimplecurve_simplify
        delaunayTriangulation :: OGRSimpleCurve -> CDouble -> CInt -> IO OGRGeometry
delaunayTriangulation
          = (Ptr RawOGRSimpleCurve
 -> CDouble -> CInt -> IO (Ptr RawOGRGeometry))
-> OGRSimpleCurve -> CDouble -> CInt -> IO OGRGeometry
forall a ca x1 cx1 x2 cx2 y cy.
(Castable a ca, Castable x1 cx1, Castable x2 cx2, Castable y cy) =>
(ca -> cx1 -> cx2 -> IO cy) -> a -> x1 -> x2 -> IO y
xform2 Ptr RawOGRSimpleCurve -> CDouble -> CInt -> IO (Ptr RawOGRGeometry)
c_ogrsimplecurve_delaunaytriangulation
        polygonize :: OGRSimpleCurve -> IO OGRGeometry
polygonize = (Ptr RawOGRSimpleCurve -> IO (Ptr RawOGRGeometry))
-> OGRSimpleCurve -> IO OGRGeometry
forall a ca y cy.
(Castable a ca, Castable y cy) =>
(ca -> IO cy) -> a -> IO y
xform0 Ptr RawOGRSimpleCurve -> IO (Ptr RawOGRGeometry)
c_ogrsimplecurve_polygonize
        distance3D :: forall c0.
(IOGRGeometry c0, FPtr c0) =>
OGRSimpleCurve -> c0 -> IO CDouble
distance3D = (Ptr RawOGRSimpleCurve -> Ptr RawOGRGeometry -> IO CDouble)
-> OGRSimpleCurve -> c0 -> IO CDouble
forall a ca x1 cx1 y cy.
(Castable a ca, Castable x1 cx1, Castable y cy) =>
(ca -> cx1 -> IO cy) -> a -> x1 -> IO y
xform1 Ptr RawOGRSimpleCurve -> Ptr RawOGRGeometry -> IO CDouble
c_ogrsimplecurve_distance3d

instance () => IDeletable (OGRSimpleCurve) where
        delete :: OGRSimpleCurve -> IO ()
delete = (Ptr RawOGRSimpleCurve -> IO ()) -> OGRSimpleCurve -> IO ()
forall a ca y cy.
(Castable a ca, Castable y cy) =>
(ca -> IO cy) -> a -> IO y
xform0 Ptr RawOGRSimpleCurve -> IO ()
c_ogrsimplecurve_delete

oGRSimpleCurve_getPoints ::
                           () =>
                           OGRSimpleCurve ->
                             Ptr () -> CInt -> Ptr () -> CInt -> Ptr () -> CInt -> IO ()
oGRSimpleCurve_getPoints :: OGRSimpleCurve
-> Ptr () -> CInt -> Ptr () -> CInt -> Ptr () -> CInt -> IO ()
oGRSimpleCurve_getPoints
  = (Ptr RawOGRSimpleCurve
 -> Ptr () -> CInt -> Ptr () -> CInt -> Ptr () -> CInt -> IO ())
-> OGRSimpleCurve
-> Ptr ()
-> CInt
-> Ptr ()
-> CInt
-> Ptr ()
-> CInt
-> IO ()
forall a ca x1 cx1 x2 cx2 x3 cx3 x4 cx4 x5 cx5 x6 cx6 y cy.
(Castable a ca, Castable x1 cx1, Castable x2 cx2, Castable x3 cx3,
 Castable x4 cx4, Castable x5 cx5, Castable x6 cx6,
 Castable y cy) =>
(ca -> cx1 -> cx2 -> cx3 -> cx4 -> cx5 -> cx6 -> IO cy)
-> a -> x1 -> x2 -> x3 -> x4 -> x5 -> x6 -> IO y
xform6 Ptr RawOGRSimpleCurve
-> Ptr () -> CInt -> Ptr () -> CInt -> Ptr () -> CInt -> IO ()
c_ogrsimplecurve_ogrsimplecurve_getpoints