Module: Geos::FFIGeos

Extended by:
FFI::Library
Defined in:
lib/ffi-geos.rb

Constant Summary collapse

FFI_LAYOUT =
{
  #### Utility functions ####
  :initGEOS_r => [
    :pointer,

    # notice callback
    callback([ :string, :string ], :void),

    # error callback
    callback([ :string, :string ], :void)
  ],

  :finishGEOS_r => [
    # void, *handle
    :void, :pointer
  ],

  :GEOSversion => [
    :string
  ],

  :GEOSjtsport => [
    :string
  ],

  :GEOSPolygonize_r => [
    # *geom, *handle, **geoms, ngeoms
    :pointer, :pointer, :pointer, :uint
  ],

  :GEOSPolygonizer_getCutEdges_r => [
    # *geom, *handle, **geoms, ngeoms
    :pointer, :pointer, :pointer, :uint
  ],

  :GEOSPolygonize_full_r => [
    # *geom, *handle, *geom, **cuts, **dangles, **invalid
    :pointer, :pointer, :pointer, :pointer, :pointer, :pointer
  ],

  :GEOSGeom_createPoint_r => [
    # *geom, *handle, *coord_seq
    :pointer, :pointer, :pointer
  ],

  :GEOSGeom_createEmptyPoint_r => [
    # *geom, *handle
    :pointer, :pointer
  ],

  :GEOSGeom_createEmptyLineString_r => [
    # *geom, *handle
    :pointer, :pointer
  ],

  :GEOSGeom_createLinearRing_r => [
    # *geom, *handle, *coord_seq
    :pointer, :pointer, :pointer
  ],

  :GEOSGeom_createLineString_r => [
    # *geom, *handle, *coord_seq
    :pointer, :pointer, :pointer
  ],

  :GEOSGeom_createPolygon_r => [
    # *geom, *handle, *geom, **holes, nholes
    :pointer, :pointer, :pointer, :pointer, :uint
  ],

  :GEOSGeom_createEmptyPolygon_r => [
    # *geom, *handle
    :pointer, :pointer
  ],

  :GEOSGeom_createCollection_r => [
    # *geom, *handle, type, **geoms, ngeoms
    :pointer, :pointer, :geometry_type, :pointer, :uint
  ],

  :GEOSGeom_createEmptyCollection_r => [
    # *geom, *handle, type
    :pointer, :pointer, :geometry_type
  ],
  #### /Utility functions ####

  #### CoordinateSequence functions ####
  :GEOSCoordSeq_create_r => [
    # *coord_seq, *handle, size, dims
    :pointer, :pointer, :uint, :uint
  ],

  :GEOSCoordSeq_destroy_r => [
    # void, *handle, *coord_seq
    :void, :pointer, :pointer
  ],

  :GEOSCoordSeq_clone_r => [
    # *coord_seq, *handle, *coord_seq
    :pointer, :pointer, :pointer
  ],

  :GEOSCoordSeq_setX_r => [
    # 0 on exception, *handle, *coord_seq, idx, val
    :int, :pointer, :pointer, :uint, :double
  ],

  :GEOSCoordSeq_setY_r => [
    # 0 on exception, *handle, *coord_seq, idx, val
    :int, :pointer, :pointer, :uint, :double
  ],

  :GEOSCoordSeq_setZ_r => [
    # 0 on exception, *handle, *coord_seq, idx, val
    :int, :pointer, :pointer, :uint, :double
  ],

  :GEOSCoordSeq_setOrdinate_r => [
    # 0 on exception, *handle, *coord_seq, idx, dim, val
    :int, :pointer, :pointer, :uint, :uint, :double
  ],

  :GEOSCoordSeq_getX_r => [
    # 0 on exception, *handle, *coord_seq, idx, (double *) val
    :int, :pointer, :pointer, :uint, :pointer
  ],

  :GEOSCoordSeq_getY_r => [
    # 0 on exception, *handle, *coord_seq, idx, (double *) val
    :int, :pointer, :pointer, :uint, :pointer
  ],

  :GEOSCoordSeq_getZ_r => [
    # 0 on exception, *handle, *coord_seq, idx, (double *) val
    :int, :pointer, :pointer, :uint, :pointer
  ],

  :GEOSCoordSeq_getOrdinate_r => [
    # 0 on exception, *handle, *coord_seq, idx, dim, (double *) val
    :int, :pointer, :pointer, :uint, :uint, :pointer
  ],

  :GEOSCoordSeq_getSize_r => [
    # 0 on exception, *handle, *coord_seq, (uint *) size
    :int, :pointer, :pointer, :pointer
  ],

  :GEOSCoordSeq_getDimensions_r => [
    # 0 on exception, *handle, *coord_seq, (uint *) size
    :int, :pointer, :pointer, :pointer
  ],
  #### /CoordinateSequence functions ####

  #### Geometry functions ####
  :GEOSGeom_destroy_r => [
    # void, *handle, *geom
    :void, :pointer, :pointer
  ],

  :GEOSGeom_clone_r => [
    # *geom, *handle, *geom
    :pointer, :pointer, :pointer
  ],

  :GEOSGeomTypeId_r => [
    # type, *handle, *geom
    :int, :pointer, :pointer
  ],

  :GEOSGeomType_r => [
    # type, *handle, *geom
    :string, :pointer, :pointer
  ],

  :GEOSGetSRID_r => [
    # srid, *handle, *geom
    :int, :pointer, :pointer
  ],

  :GEOSSetSRID_r => [
    # void, *handle, *geom, srid
    :void, :pointer, :pointer, :int
  ],

  :GEOSGeom_getDimensions_r => [
    # dims, *handle, *geom
    :int, :pointer, :pointer
  ],

  :GEOSGetNumGeometries_r => [
    # ngeoms, *handle, *geom
    :int, :pointer, :pointer
  ],

  :GEOSGetNumCoordinates_r => [
    # numcoords, *handle, *geom
    :int, :pointer, :pointer
  ],

  :GEOSGeom_getCoordSeq_r => [
    # *coord_seq, *handle, *geom
    :pointer, :pointer, :pointer
  ],

  :GEOSIntersection_r => [
    # *geom, *handle, *geom_a, *geom_b
    :pointer, :pointer, :pointer, :pointer
  ],

  :GEOSBufferWithParams_r => [
    # *geom, *handle, *geom, *params, width
    :pointer, :pointer, :pointer, :pointer, :double
  ],

  :GEOSBuffer_r => [
    # *geom, *handle, *geom, width, quad_segs
    :pointer, :pointer, :pointer, :double, :int
  ],

  :GEOSBufferWithStyle_r => [
    # *geom, *handle, *geom, width, quad_segs, buffer_cap_style, buffer_join_style, mitre_limit
    :pointer, :pointer, :pointer, :double, :int, :buffer_cap_style, :buffer_join_style, :double
  ],

  # Deprecated in GEOS 3.3.0.
  :GEOSSingleSidedBuffer_r => [
    # *geom, *handle, *geom, width, quad_segs, buffer_join_style, mitre_limit, is_left
    :pointer, :pointer, :pointer, :double, :int, :buffer_join_style, :double, :int
  ],

  :GEOSOffsetCurve_r => [
    # *geom, *handle, *geom, width, quad_segs, buffer_join_style, mitre_limit
    :pointer, :pointer, :pointer, :double, :int, :buffer_join_style, :double
  ],

  :GEOSConvexHull_r => [
    # *geom, *handle, *geom
    :pointer, :pointer, :pointer
  ],

  :GEOSDifference_r => [
    # *geom, *handle, *geom_a, *geom_b
    :pointer, :pointer, :pointer, :pointer
  ],

  :GEOSSymDifference_r => [
    # *geom, *handle, *geom_a, *geom_b
    :pointer, :pointer, :pointer, :pointer
  ],

  :GEOSBoundary_r => [
    # *geom, *handle, *geom
    :pointer, :pointer, :pointer
  ],

  :GEOSUnion_r => [
    # *geom, *handle, *geom_a, *geom_b
    :pointer, :pointer, :pointer, :pointer
  ],

  :GEOSUnaryUnion_r => [
    # *geom, *handle, *geom
    :pointer, :pointer, :pointer
  ],

  # Deprecated in GEOS 3.3.0. Use GEOSUnaryUnion_r instead.
  :GEOSUnionCascaded_r => [
    # *geom, *handle, *geom
    :pointer, :pointer, :pointer
  ],

  :GEOSPointOnSurface_r => [
    # *geom, *handle, *geom
    :pointer, :pointer, :pointer
  ],

  :GEOSGetCentroid_r => [
    # *geom, *handle, *geom
    :pointer, :pointer, :pointer
  ],

  :GEOSEnvelope_r => [
    # *geom, *handle, *geom
    :pointer, :pointer, :pointer
  ],

  :GEOSLineMerge_r => [
    # *geom, *handle, *geom
    :pointer, :pointer, :pointer
  ],

  :GEOSSimplify_r => [
    # *geom, *handle, *geom, tolerance
    :pointer, :pointer, :pointer, :double
  ],

  :GEOSTopologyPreserveSimplify_r => [
    # *geom, *handle, *geom, tolerance
    :pointer, :pointer, :pointer, :double
  ],

  :GEOSGeom_extractUniquePoints_r => [
    # *geom, *handle, *geom
    :pointer, :pointer, :pointer
  ],

  :GEOSSharedPaths_r => [
    # *geom, *handle, *geom_a, *geom_b
    :pointer, :pointer, :pointer, :pointer
  ],

  :GEOSSnap_r => [
    # *geom, *handle, *geom_a, *geom_b, tolerance
    :pointer, :pointer, :pointer, :pointer, :double
  ],

  :GEOSRelate_r => [
    # string, *handle, *geom_a, *geom_b
    :string, :pointer, :pointer, :pointer
  ],

  :GEOSRelatePatternMatch_r => [
    # (2 on exception, 1 on true, 2 on false), *handle, pattern_a, pattern_b
    :char, :pointer, :string, :string
  ],

  :GEOSRelatePattern_r => [
    # (2 on exception, 1 on true, 2 on false), *handle, *geom_a, *geom_b, pattern
    :char, :pointer, :pointer, :pointer, :string
  ],

  :GEOSRelateBoundaryNodeRule_r => [
    # string, *handle, *geom_a, *geom_b, bnr
    :string, :pointer, :pointer, :pointer, :relate_boundary_node_rule
  ],

  :GEOSDisjoint_r => [
    # (2 on exception, 1 on true, 2 on false), *handle, *geom_a, *geom_b
    :char, :pointer, :pointer, :pointer
  ],

  :GEOSTouches_r => [
    # (2 on exception, 1 on true, 2 on false), *handle, *geom_a, *geom_b
    :char, :pointer, :pointer, :pointer
  ],

  :GEOSIntersects_r => [
    # (2 on exception, 1 on true, 2 on false), *handle, *geom_a, *geom_b
    :char, :pointer, :pointer, :pointer
  ],

  :GEOSCrosses_r => [
    # (2 on exception, 1 on true, 2 on false), *handle, *geom_a, *geom_b
    :char, :pointer, :pointer, :pointer
  ],

  :GEOSWithin_r => [
    # (2 on exception, 1 on true, 2 on false), *handle, *geom_a, *geom_b
    :char, :pointer, :pointer, :pointer
  ],

  :GEOSContains_r => [
    # (2 on exception, 1 on true, 2 on false), *handle, *geom_a, *geom_b
    :char, :pointer, :pointer, :pointer
  ],

  :GEOSOverlaps_r => [
    # (2 on exception, 1 on true, 2 on false), *handle, *geom_a, *geom_b
    :char, :pointer, :pointer, :pointer
  ],

  :GEOSCovers_r => [
    # (2 on exception, 1 on true, 2 on false), *handle, *geom_a, *geom_b
    :char, :pointer, :pointer, :pointer
  ],

  :GEOSCoveredBy_r => [
    # (2 on exception, 1 on true, 2 on false), *handle, *geom_a, *geom_b
    :char, :pointer, :pointer, :pointer
  ],

  :GEOSEquals_r => [
    # (2 on exception, 1 on true, 2 on false), *handle, *geom_a, *geom_b
    :char, :pointer, :pointer, :pointer
  ],

  :GEOSEqualsExact_r => [
    # (2 on exception, 1 on true, 2 on false), *handle, *geom_a, *geom_b
    :char, :pointer, :pointer, :pointer, :double
  ],

  :GEOSisEmpty_r => [
    # (2 on exception, 1 on true, 2 on false), *handle, *geom
    :char, :pointer, :pointer
  ],

  :GEOSisValid_r => [
    # (2 on exception, 1 on true, 2 on false), *handle, *geom
    :char, :pointer, :pointer
  ],

  :GEOSisValidReason_r => [
    # reason, *handle, *geom
    :string, :pointer, :pointer
  ],

  :GEOSisValidDetail_r => [
    # (2 on exception, 1 on true, 2 on false), *handle, *geom, flags, (string**) reasons, **geoms
    :char, :pointer, :pointer, :int, :pointer, :pointer
  ],

  :GEOSisSimple_r => [
    # (2 on exception, 1 on true, 2 on false), *handle, *geom
    :char, :pointer, :pointer
  ],

  :GEOSisRing_r => [
    # (2 on exception, 1 on true, 2 on false), *handle, *geom
    :char, :pointer, :pointer
  ],

  :GEOSHasZ_r => [
    # (2 on exception, 1 on true, 2 on false), *handle, *geom
    :char, :pointer, :pointer
  ],

  :GEOSisClosed_r => [
    # (2 on exception, 1 on true, 2 on false), *handle, *geom
    :char, :pointer, :pointer
  ],

  :GEOSArea_r => [
    # (0 on exception, 1 otherwise), *handle, *geom, (double *) area
    :int, :pointer, :pointer, :pointer
  ],

  :GEOSLength_r => [
    # (0 on exception, 1 otherwise), *handle, *geom, (double *) length
    :int, :pointer, :pointer, :pointer
  ],

  :GEOSDistance_r => [
    # (0 on exception, 1 otherwise), *handle, *geom_a, *geom_b, (double *) distance
    :int, :pointer, :pointer, :pointer, :pointer
  ],

  :GEOSHausdorffDistance_r => [
    # (0 on exception, 1 otherwise), *handle, *geom_a, *geom_b, (double *) distance
    :int, :pointer, :pointer, :pointer, :pointer
  ],

  :GEOSHausdorffDistanceDensify_r => [
    # (0 on exception, 1 otherwise), *handle, *geom_a, *geom_b, densifyFrac, (double *) distance
    :int, :pointer, :pointer, :pointer, :double, :pointer
  ],

  :GEOSGetGeometryN_r => [
    # *geom, *handle, *geom, n
    :pointer, :pointer, :pointer, :int
  ],

  :GEOSGetNumInteriorRings_r => [
    # rings, *handle, *geom
    :int, :pointer, :pointer
  ],

  :GEOSNormalize_r => [
    # -1 on exception, *handle, *geom
    :int, :pointer, :pointer
  ],

  :GEOSGetInteriorRingN_r => [
    # *geom, *handle, *geom, n
    :pointer, :pointer, :pointer, :int
  ],

  :GEOSGetExteriorRing_r => [
    # *geom, *handle, *geom
    :pointer, :pointer, :pointer
  ],

  :GEOSGeomGetNumPoints_r => [
    # numpoints, *handle, *geom
    :int, :pointer, :pointer
  ],

  :GEOSGeomGetX_r => [
    # -1 on exception, *handle, *geom, *point
    :int, :pointer, :pointer, :pointer
  ],

  :GEOSGeomGetY_r => [
    # -1 on exception, *handle, *geom, *point
    :int, :pointer, :pointer, :pointer
  ],

  :GEOSGeomGetZ_r => [
    # -1 on exception, *handle, *geom, *point
    :int, :pointer, :pointer, :pointer
  ],

  :GEOSGeomGetPointN_r => [
    # *point, *handle, *geom, n
    :pointer, :pointer, :pointer, :int
  ],

  :GEOSGeomGetStartPoint_r => [
    # *point, *handle, *geom
    :pointer, :pointer, :pointer
  ],

  :GEOSGeomGetEndPoint_r => [
    # *point, *handle, *geom
    :pointer, :pointer, :pointer
  ],
  #### /Geometry functions ####

  #### STRtree functions ####
  :GEOSSTRtree_create_r => [
    # *tree, *handle, node_capacity
    :pointer, :pointer, :size_t
  ],

  :GEOSSTRtree_insert_r => [
    # void, *handle, *tree, *geom, *void
    :void, :pointer, :pointer, :pointer, :pointer
  ],

  :GEOSSTRtree_query_r => [
    # void, *handle, *tree, *geom, void query_callback((void *) item, (void *) user_data), (void *) user_data
    :void, :pointer, :pointer, :pointer, callback([ :pointer, :pointer ], :void), :pointer
  ],

  :GEOSSTRtree_iterate_r => [
    # void, *handle, *tree, void query_callback((void *) item, (void *) user_data), (void *) user_data
    :void, :pointer, :pointer, callback([ :pointer, :pointer ], :void), :pointer
  ],

  :GEOSSTRtree_remove_r => [
    # bool, *handle, *tree, *geom, (void *) item
    :char, :pointer, :pointer, :pointer, :pointer
  ],

  :GEOSSTRtree_destroy_r => [
    # void, *handle, *tree
    :void, :pointer, :pointer
  ],
  #### /STRtree functions ####

  #### PreparedGeometry functions ####
  :GEOSPrepare_r => [
    # *prepared, *handle, *geom
    :pointer, :pointer, :pointer
  ],

  :GEOSPreparedGeom_destroy_r => [
    # void, *handle, *geom
    :void, :pointer, :pointer
  ],

  :GEOSPreparedContains_r => [
    # (2 on exception, 1 on true, 0 on false), *handle, *prepared, *geom
    :char, :pointer, :pointer, :pointer
  ],

  :GEOSPreparedContainsProperly_r => [
    # (2 on exception, 1 on true, 0 on false), *handle, *prepared, *geom
    :char, :pointer, :pointer, :pointer
  ],

  :GEOSPreparedCoveredBy_r => [
    # (2 on exception, 1 on true, 0 on false), *handle, *prepared, *geom
    :char, :pointer, :pointer, :pointer
  ],

  :GEOSPreparedCovers_r => [
    # (2 on exception, 1 on true, 0 on false), *handle, *prepared, *geom
    :char, :pointer, :pointer, :pointer
  ],

  :GEOSPreparedCrosses_r => [
    # (2 on exception, 1 on true, 0 on false), *handle, *prepared, *geom
    :char, :pointer, :pointer, :pointer
  ],

  :GEOSPreparedDisjoint_r => [
    # (2 on exception, 1 on true, 0 on false), *handle, *prepared, *geom
    :char, :pointer, :pointer, :pointer
  ],

  :GEOSPreparedIntersects_r => [
    # (2 on exception, 1 on true, 0 on false), *handle, *prepared, *geom
    :char, :pointer, :pointer, :pointer
  ],

  :GEOSPreparedOverlaps_r => [
    # (2 on exception, 1 on true, 0 on false), *handle, *prepared, *geom
    :char, :pointer, :pointer, :pointer
  ],

  :GEOSPreparedTouches_r => [
    # (2 on exception, 1 on true, 0 on false), *handle, *prepared, *geom
    :char, :pointer, :pointer, :pointer
  ],

  :GEOSPreparedWithin_r => [
    # (2 on exception, 1 on true, 0 on false), *handle, *prepared, *geom
    :char, :pointer, :pointer, :pointer
  ],
  #### /PreparedGeometry functions ####

  #### WktReader functions ####
  :GEOSWKTReader_create_r => [
    # *wktr, *handle
    :pointer, :pointer
  ],

  :GEOSWKTReader_read_r => [
    # *geom, *handle, *wktr, string
    :pointer, :pointer, :pointer, :string
  ],

  :GEOSWKTReader_destroy_r => [
    # void, *handle, *wktr
    :void, :pointer, :pointer
  ],
  #### /WktReader functions ###

  #### WktWriter functions ####
  :GEOSWKTWriter_create_r => [
    # *wktw, *handle
    :pointer, :pointer
  ],

  :GEOSWKTWriter_write_r => [
    # string, *handle, *wktw, *geom
    :string, :pointer, :pointer, :pointer
  ],

  :GEOSWKTWriter_destroy_r => [
    # void, *handle, *wktw
    :void, :pointer, :pointer
  ],

  :GEOSWKTWriter_setTrim_r => [
    # void, *handle, *wktw, bool
    :void, :pointer, :pointer, :char
  ],

  :GEOSWKTWriter_setRoundingPrecision_r => [
    # void, *handle, *wktw, precision
    :void, :pointer, :pointer, :int
  ],

  :GEOSWKTWriter_setOutputDimension_r => [
    # void, *handle, *wktw, dimensions
    :void, :pointer, :pointer, :int
  ],

  :GEOSWKTWriter_getOutputDimension_r => [
    # dimensions, *handle, *wktw
    :int, :pointer, :pointer
  ],

  :GEOSWKTWriter_setOld3D_r => [
    # void, *handle, *wktw, bool
    :void, :pointer, :pointer, :int
  ],
  #### /WktWriter functions ####

  #### WkbReader functions ####
  :GEOSWKBReader_create_r => [
    # *wkbr, *handle
    :pointer, :pointer
  ],

  :GEOSWKBReader_destroy_r => [
    # void, *handle, *wkbr
    :void, :pointer, :pointer
  ],

  :GEOSWKBReader_read_r => [
    # *geom, *handle, *wkbr, (unsigned char *) string, size_t
    :pointer, :pointer, :pointer, :pointer, :size_t
  ],

  :GEOSWKBReader_readHEX_r => [
    # *geom, *handle, *wkbr, string, size_t
    :pointer, :pointer, :pointer, :string, :size_t
  ],
  #### /WkbReader functions ####

  #### WkbWriter functions ####
  :GEOSWKBWriter_create_r => [
    # *wkbw, *handle
    :pointer, :pointer
  ],

  :GEOSWKBWriter_destroy_r => [
    # void, *handle, *wkbw
    :void, :pointer, :pointer
  ],

  :GEOSWKBWriter_write_r => [
    # (unsigned char *) string, *handle, *wkbw, *geom, *size_t
    :pointer, :pointer, :pointer, :pointer, :pointer
  ],

  :GEOSWKBWriter_writeHEX_r => [
    # (unsigned char *) string, *handle, *wkbw, *geom, *size_t
    :pointer, :pointer, :pointer, :pointer, :pointer
  ],

  :GEOSWKBWriter_setOutputDimension_r => [
    # void, *handle, *wkbw, dimensions
    :void, :pointer, :pointer, :int
  ],

  :GEOSWKBWriter_getOutputDimension_r => [
    # dimensions, *handle, *wkbw
    :int, :pointer, :pointer
  ],

  :GEOSWKBWriter_getByteOrder_r => [
    # byte_order, *handle, *wkbw
    :byte_order, :pointer, :pointer
  ],

  :GEOSWKBWriter_setByteOrder_r => [
    # void, *handle, *wkbw, byte_order
    :void, :pointer, :pointer, :byte_order
  ],

  :GEOSWKBWriter_getIncludeSRID_r => [
    # bool, *handle, *geom
    :char, :pointer, :pointer
  ],

  :GEOSWKBWriter_setIncludeSRID_r => [
    # void, *handle, *geom, bool
    :void, :pointer, :pointer, :char
  ],
  #### /WkbWriter functions ####


  #### Linearref functions ####
  :GEOSProject_r => [
    # distance, *handle, *geom_a, *geom_b
    :double, :pointer, :pointer, :pointer
  ],

  :GEOSProjectNormalized_r => [
    # distance, *handle, *geom_a, *geom_b
    :double, :pointer, :pointer, :pointer
  ],

  :GEOSInterpolate_r => [
    # *geom, *handle, *geom, distance
    :pointer, :pointer, :pointer, :double
  ],

  :GEOSInterpolateNormalized_r => [
    # *geom, *handle, *geom, distance
    :pointer, :pointer, :pointer, :double
  ],
  #### /Linearref functions ####

  #### BufferParams functions ####
  :GEOSBufferParams_create_r => [
    # GEOSBufferParams*, *handle
    :pointer, :pointer
  ],

  :GEOSBufferParams_destroy_r => [
    # void, *handle, *params
    :void, :pointer, :pointer
  ],

  :GEOSBufferParams_setEndCapStyle_r => [
    # 0 on exception, *handle, *params, style
    :int, :pointer, :pointer, :buffer_cap_style
  ],

  :GEOSBufferParams_setJoinStyle_r => [
    # 0 on exception, *handle, *params, style
    :int, :pointer, :pointer, :buffer_join_style
  ],

  :GEOSBufferParams_setMitreLimit_r => [
    # 0 on exception, *handle, *params, mitre_limit
    :int, :pointer, :pointer, :double
  ],

  :GEOSBufferParams_setQuadrantSegments_r => [
    # 0 on exception, *handle, *params, quad_segs
    :int, :pointer, :pointer, :int
  ],

  :GEOSBufferParams_setSingleSided_r => [
    # 0 on exception, *handle, *params, bool
    :int, :pointer, :pointer, :int
  ],
  #### /BufferParams functions ####

  #### Algorithms ####
  # -1 if reaching P takes a counter-clockwise (left) turn
  # 1 if reaching P takes a clockwise (right) turn
  # 0 if P is collinear with A-B
  :GEOSOrientationIndex_r => [
    # int, *handle, Ax, Ay, Bx, By, Px, Py
    :int, :pointer, :double, :double, :double, :double, :double, :double
  ]
  #### /Algorithms ####
}

Class Method Summary collapse

Class Method Details

.find_lib(lib) ⇒ Object



63
64
65
66
67
68
69
70
71
# File 'lib/ffi-geos.rb', line 63

def self.find_lib(lib)
  if ENV['GEOS_LIBRARY_PATH'] && File.file?(ENV['GEOS_LIBRARY_PATH'])
    ENV['GEOS_LIBRARY_PATH']
  else
    Dir.glob(search_paths.map { |path|
      File.expand_path(File.join(path, "#{lib}.#{FFI::Platform::LIBSUFFIX}"))
    }).first
  end
end

.geos_library_pathObject



73
74
75
76
77
78
# File 'lib/ffi-geos.rb', line 73

def self.geos_library_path
  @geos_library_path ||= begin
    # On MingW the libraries have version numbers
    find_lib('{lib,}geos_c{,-?}')
  end
end

.geos_library_pathsObject

For backwards compatibility with older ffi-geos versions where this used to return an Array.



82
83
84
# File 'lib/ffi-geos.rb', line 82

def self.geos_library_paths
  [ self.geos_library_path ]
end

.search_pathsObject



50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/ffi-geos.rb', line 50

def self.search_paths
  @search_paths ||= begin
    if ENV['GEOS_LIBRARY_PATH']
      [ ENV['GEOS_LIBRARY_PATH'] ]
    elsif FFI::Platform::IS_WINDOWS
      ENV['PATH'].split(File::PATH_SEPARATOR)
    else
      [ '/usr/local/{lib64,lib}', '/opt/local/{lib64,lib}', '/usr/{lib64,lib}' ]
      [ '/usr/local/{lib64,lib}', '/opt/local/{lib64,lib}', '/usr/{lib64,lib}', '/usr/lib/{x86_64,i386}-linux-gnu' ]
    end
  end
end