{-# LANGUAGE EmptyDataDecls, FlexibleContexts, FlexibleInstances,
  ForeignFunctionInterface, IncoherentInstances,
  MultiParamTypeClasses, OverlappingInstances, TemplateHaskell,
  TypeFamilies, TypeSynonymInstances #-}
module GDAL.OGRPoint.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.OGRPoint.RawType
import GDAL.OGRPoint.FFI
import GDAL.OGRPoint.Interface
import GDAL.OGRPoint.Cast
import GDAL.OGRPoint.RawType
import GDAL.OGRPoint.Cast
import GDAL.OGRPoint.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.OGRGeometry.RawType
import GDAL.OGRGeometry.Cast
import GDAL.OGRGeometry.Interface
import STD.Deletable.RawType
import STD.Deletable.Cast
import STD.Deletable.Interface

instance () => IOGRPoint (OGRPoint) where

instance () => IOGRGeometry (OGRPoint) where
        getGeometryType :: OGRPoint -> IO CUInt
getGeometryType = (Ptr RawOGRPoint -> IO CUInt) -> OGRPoint -> IO CUInt
forall a ca y cy.
(Castable a ca, Castable y cy) =>
(ca -> IO cy) -> a -> IO y
xform0 Ptr RawOGRPoint -> IO CUInt
c_ogrpoint_getgeometrytype
        getEnvelope :: forall c0. (IOGREnvelope c0, FPtr c0) => OGRPoint -> c0 -> IO ()
getEnvelope = (Ptr RawOGRPoint -> Ptr RawOGREnvelope -> IO ())
-> OGRPoint -> 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 RawOGRPoint -> Ptr RawOGREnvelope -> IO ()
c_ogrpoint_getenvelope
        intersects :: forall c0. (IOGRGeometry c0, FPtr c0) => OGRPoint -> c0 -> IO CBool
intersects = (Ptr RawOGRPoint -> Ptr RawOGRGeometry -> IO CBool)
-> OGRPoint -> 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 RawOGRPoint -> Ptr RawOGRGeometry -> IO CBool
c_ogrpoint_intersects
        equals :: forall c0. (IOGRGeometry c0, FPtr c0) => OGRPoint -> c0 -> IO CBool
equals = (Ptr RawOGRPoint -> Ptr RawOGRGeometry -> IO CBool)
-> OGRPoint -> 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 RawOGRPoint -> Ptr RawOGRGeometry -> IO CBool
c_ogrpoint_equals
        disjoint :: forall c0. (IOGRGeometry c0, FPtr c0) => OGRPoint -> c0 -> IO CBool
disjoint = (Ptr RawOGRPoint -> Ptr RawOGRGeometry -> IO CBool)
-> OGRPoint -> 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 RawOGRPoint -> Ptr RawOGRGeometry -> IO CBool
c_ogrpoint_disjoint
        touches :: forall c0. (IOGRGeometry c0, FPtr c0) => OGRPoint -> c0 -> IO CBool
touches = (Ptr RawOGRPoint -> Ptr RawOGRGeometry -> IO CBool)
-> OGRPoint -> 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 RawOGRPoint -> Ptr RawOGRGeometry -> IO CBool
c_ogrpoint_touches
        crosses :: forall c0. (IOGRGeometry c0, FPtr c0) => OGRPoint -> c0 -> IO CBool
crosses = (Ptr RawOGRPoint -> Ptr RawOGRGeometry -> IO CBool)
-> OGRPoint -> 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 RawOGRPoint -> Ptr RawOGRGeometry -> IO CBool
c_ogrpoint_crosses
        within :: forall c0. (IOGRGeometry c0, FPtr c0) => OGRPoint -> c0 -> IO CBool
within = (Ptr RawOGRPoint -> Ptr RawOGRGeometry -> IO CBool)
-> OGRPoint -> 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 RawOGRPoint -> Ptr RawOGRGeometry -> IO CBool
c_ogrpoint_within
        contains :: forall c0. (IOGRGeometry c0, FPtr c0) => OGRPoint -> c0 -> IO CBool
contains = (Ptr RawOGRPoint -> Ptr RawOGRGeometry -> IO CBool)
-> OGRPoint -> 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 RawOGRPoint -> Ptr RawOGRGeometry -> IO CBool
c_ogrpoint_contains
        overlaps :: forall c0. (IOGRGeometry c0, FPtr c0) => OGRPoint -> c0 -> IO CBool
overlaps = (Ptr RawOGRPoint -> Ptr RawOGRGeometry -> IO CBool)
-> OGRPoint -> 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 RawOGRPoint -> Ptr RawOGRGeometry -> IO CBool
c_ogrpoint_overlaps
        boundary :: OGRPoint -> IO OGRGeometry
boundary = (Ptr RawOGRPoint -> IO (Ptr RawOGRGeometry))
-> OGRPoint -> IO OGRGeometry
forall a ca y cy.
(Castable a ca, Castable y cy) =>
(ca -> IO cy) -> a -> IO y
xform0 Ptr RawOGRPoint -> IO (Ptr RawOGRGeometry)
c_ogrpoint_boundary
        distance :: forall c0.
(IOGRGeometry c0, FPtr c0) =>
OGRPoint -> c0 -> IO CDouble
distance = (Ptr RawOGRPoint -> Ptr RawOGRGeometry -> IO CDouble)
-> OGRPoint -> 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 RawOGRPoint -> Ptr RawOGRGeometry -> IO CDouble
c_ogrpoint_distance
        convexHull :: OGRPoint -> IO OGRGeometry
convexHull = (Ptr RawOGRPoint -> IO (Ptr RawOGRGeometry))
-> OGRPoint -> IO OGRGeometry
forall a ca y cy.
(Castable a ca, Castable y cy) =>
(ca -> IO cy) -> a -> IO y
xform0 Ptr RawOGRPoint -> IO (Ptr RawOGRGeometry)
c_ogrpoint_convexhull
        buffer :: OGRPoint -> CDouble -> CInt -> IO OGRGeometry
buffer = (Ptr RawOGRPoint -> CDouble -> CInt -> IO (Ptr RawOGRGeometry))
-> OGRPoint -> 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 RawOGRPoint -> CDouble -> CInt -> IO (Ptr RawOGRGeometry)
c_ogrpoint_buffer
        intersection :: forall c0.
(IOGRGeometry c0, FPtr c0) =>
OGRPoint -> c0 -> IO OGRGeometry
intersection = (Ptr RawOGRPoint -> Ptr RawOGRGeometry -> IO (Ptr RawOGRGeometry))
-> OGRPoint -> 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 RawOGRPoint -> Ptr RawOGRGeometry -> IO (Ptr RawOGRGeometry)
c_ogrpoint_intersection
        union :: forall c0.
(IOGRGeometry c0, FPtr c0) =>
OGRPoint -> c0 -> IO OGRGeometry
union = (Ptr RawOGRPoint -> Ptr RawOGRGeometry -> IO (Ptr RawOGRGeometry))
-> OGRPoint -> 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 RawOGRPoint -> Ptr RawOGRGeometry -> IO (Ptr RawOGRGeometry)
c_ogrpoint_union
        unionCascaded :: OGRPoint -> IO OGRGeometry
unionCascaded = (Ptr RawOGRPoint -> IO (Ptr RawOGRGeometry))
-> OGRPoint -> IO OGRGeometry
forall a ca y cy.
(Castable a ca, Castable y cy) =>
(ca -> IO cy) -> a -> IO y
xform0 Ptr RawOGRPoint -> IO (Ptr RawOGRGeometry)
c_ogrpoint_unioncascaded
        difference :: forall c0.
(IOGRGeometry c0, FPtr c0) =>
OGRPoint -> c0 -> IO OGRGeometry
difference = (Ptr RawOGRPoint -> Ptr RawOGRGeometry -> IO (Ptr RawOGRGeometry))
-> OGRPoint -> 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 RawOGRPoint -> Ptr RawOGRGeometry -> IO (Ptr RawOGRGeometry)
c_ogrpoint_difference
        symDifference :: forall c0.
(IOGRGeometry c0, FPtr c0) =>
OGRPoint -> c0 -> IO OGRGeometry
symDifference = (Ptr RawOGRPoint -> Ptr RawOGRGeometry -> IO (Ptr RawOGRGeometry))
-> OGRPoint -> 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 RawOGRPoint -> Ptr RawOGRGeometry -> IO (Ptr RawOGRGeometry)
c_ogrpoint_symdifference
        centroid :: forall c0. (IOGRPoint c0, FPtr c0) => OGRPoint -> c0 -> IO CInt
centroid = (Ptr RawOGRPoint -> Ptr RawOGRPoint -> IO CInt)
-> OGRPoint -> 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 RawOGRPoint -> Ptr RawOGRPoint -> IO CInt
c_ogrpoint_centroid
        simplify :: OGRPoint -> CDouble -> IO OGRGeometry
simplify = (Ptr RawOGRPoint -> CDouble -> IO (Ptr RawOGRGeometry))
-> OGRPoint -> 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 RawOGRPoint -> CDouble -> IO (Ptr RawOGRGeometry)
c_ogrpoint_simplify
        delaunayTriangulation :: OGRPoint -> CDouble -> CInt -> IO OGRGeometry
delaunayTriangulation = (Ptr RawOGRPoint -> CDouble -> CInt -> IO (Ptr RawOGRGeometry))
-> OGRPoint -> 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 RawOGRPoint -> CDouble -> CInt -> IO (Ptr RawOGRGeometry)
c_ogrpoint_delaunaytriangulation
        polygonize :: OGRPoint -> IO OGRGeometry
polygonize = (Ptr RawOGRPoint -> IO (Ptr RawOGRGeometry))
-> OGRPoint -> IO OGRGeometry
forall a ca y cy.
(Castable a ca, Castable y cy) =>
(ca -> IO cy) -> a -> IO y
xform0 Ptr RawOGRPoint -> IO (Ptr RawOGRGeometry)
c_ogrpoint_polygonize
        distance3D :: forall c0.
(IOGRGeometry c0, FPtr c0) =>
OGRPoint -> c0 -> IO CDouble
distance3D = (Ptr RawOGRPoint -> Ptr RawOGRGeometry -> IO CDouble)
-> OGRPoint -> 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 RawOGRPoint -> Ptr RawOGRGeometry -> IO CDouble
c_ogrpoint_distance3d

instance () => IDeletable (OGRPoint) where
        delete :: OGRPoint -> IO ()
delete = (Ptr RawOGRPoint -> IO ()) -> OGRPoint -> IO ()
forall a ca y cy.
(Castable a ca, Castable y cy) =>
(ca -> IO cy) -> a -> IO y
xform0 Ptr RawOGRPoint -> IO ()
c_ogrpoint_delete

newOGRPoint :: () => IO OGRPoint
newOGRPoint :: IO OGRPoint
newOGRPoint = IO (Ptr RawOGRPoint) -> IO OGRPoint
forall a ca. Castable a ca => IO ca -> IO a
xformnull IO (Ptr RawOGRPoint)
c_ogrpoint_newogrpoint

newOGRPoint2 :: () => CDouble -> CDouble -> IO OGRPoint
newOGRPoint2 :: CDouble -> CDouble -> IO OGRPoint
newOGRPoint2 = (CDouble -> CDouble -> IO (Ptr RawOGRPoint))
-> CDouble -> CDouble -> IO OGRPoint
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 CDouble -> CDouble -> IO (Ptr RawOGRPoint)
c_ogrpoint_newogrpoint2

newOGRPoint3 :: () => CDouble -> CDouble -> CDouble -> IO OGRPoint
newOGRPoint3 :: CDouble -> CDouble -> CDouble -> IO OGRPoint
newOGRPoint3 = (CDouble -> CDouble -> CDouble -> IO (Ptr RawOGRPoint))
-> CDouble -> CDouble -> CDouble -> IO OGRPoint
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 CDouble -> CDouble -> CDouble -> IO (Ptr RawOGRPoint)
c_ogrpoint_newogrpoint3

newOGRPoint4 ::
               () => CDouble -> CDouble -> CDouble -> CDouble -> IO OGRPoint
newOGRPoint4 :: CDouble -> CDouble -> CDouble -> CDouble -> IO OGRPoint
newOGRPoint4 = (CDouble -> CDouble -> CDouble -> CDouble -> IO (Ptr RawOGRPoint))
-> CDouble -> CDouble -> CDouble -> CDouble -> IO OGRPoint
forall a ca x1 cx1 x2 cx2 x3 cx3 y cy.
(Castable a ca, Castable x1 cx1, Castable x2 cx2, Castable x3 cx3,
 Castable y cy) =>
(ca -> cx1 -> cx2 -> cx3 -> IO cy) -> a -> x1 -> x2 -> x3 -> IO y
xform3 CDouble -> CDouble -> CDouble -> CDouble -> IO (Ptr RawOGRPoint)
c_ogrpoint_newogrpoint4

oGRPoint_getX :: () => OGRPoint -> IO CDouble
oGRPoint_getX :: OGRPoint -> IO CDouble
oGRPoint_getX = (Ptr RawOGRPoint -> IO CDouble) -> OGRPoint -> IO CDouble
forall a ca y cy.
(Castable a ca, Castable y cy) =>
(ca -> IO cy) -> a -> IO y
xform0 Ptr RawOGRPoint -> IO CDouble
c_ogrpoint_ogrpoint_getx

oGRPoint_getY :: () => OGRPoint -> IO CDouble
oGRPoint_getY :: OGRPoint -> IO CDouble
oGRPoint_getY = (Ptr RawOGRPoint -> IO CDouble) -> OGRPoint -> IO CDouble
forall a ca y cy.
(Castable a ca, Castable y cy) =>
(ca -> IO cy) -> a -> IO y
xform0 Ptr RawOGRPoint -> IO CDouble
c_ogrpoint_ogrpoint_gety

oGRPoint_getZ :: () => OGRPoint -> IO CDouble
oGRPoint_getZ :: OGRPoint -> IO CDouble
oGRPoint_getZ = (Ptr RawOGRPoint -> IO CDouble) -> OGRPoint -> IO CDouble
forall a ca y cy.
(Castable a ca, Castable y cy) =>
(ca -> IO cy) -> a -> IO y
xform0 Ptr RawOGRPoint -> IO CDouble
c_ogrpoint_ogrpoint_getz

oGRPoint_getM :: () => OGRPoint -> IO CDouble
oGRPoint_getM :: OGRPoint -> IO CDouble
oGRPoint_getM = (Ptr RawOGRPoint -> IO CDouble) -> OGRPoint -> IO CDouble
forall a ca y cy.
(Castable a ca, Castable y cy) =>
(ca -> IO cy) -> a -> IO y
xform0 Ptr RawOGRPoint -> IO CDouble
c_ogrpoint_ogrpoint_getm

oGRPoint_setX :: () => OGRPoint -> CDouble -> IO ()
oGRPoint_setX :: OGRPoint -> CDouble -> IO ()
oGRPoint_setX = (Ptr RawOGRPoint -> CDouble -> IO ())
-> OGRPoint -> CDouble -> 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 RawOGRPoint -> CDouble -> IO ()
c_ogrpoint_ogrpoint_setx

oGRPoint_setY :: () => OGRPoint -> CDouble -> IO ()
oGRPoint_setY :: OGRPoint -> CDouble -> IO ()
oGRPoint_setY = (Ptr RawOGRPoint -> CDouble -> IO ())
-> OGRPoint -> CDouble -> 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 RawOGRPoint -> CDouble -> IO ()
c_ogrpoint_ogrpoint_sety

oGRPoint_setZ :: () => OGRPoint -> CDouble -> IO ()
oGRPoint_setZ :: OGRPoint -> CDouble -> IO ()
oGRPoint_setZ = (Ptr RawOGRPoint -> CDouble -> IO ())
-> OGRPoint -> CDouble -> 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 RawOGRPoint -> CDouble -> IO ()
c_ogrpoint_ogrpoint_setz

oGRPoint_setM :: () => OGRPoint -> CDouble -> IO ()
oGRPoint_setM :: OGRPoint -> CDouble -> IO ()
oGRPoint_setM = (Ptr RawOGRPoint -> CDouble -> IO ())
-> OGRPoint -> CDouble -> 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 RawOGRPoint -> CDouble -> IO ()
c_ogrpoint_ogrpoint_setm