Module: Geos::FFIGeos

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

Constant Summary collapse

FFI_LAYOUT =
{
  #### Utility functions ####

  # Initialization and cleanup

  # deprecated in GEOS 3.5.0+
  initGEOS_r: [
    :pointer,

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

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

  finishGEOS_r: [
    # void, *handle
    :void, :pointer
  ],
  # / deprecated in GEOS 3.5.0+

  # GEOS 3.5.0+
  GEOS_init_r: [ :pointer ],

  GEOSContext_setNoticeMessageHandler_r: [
    # void, *handle, callback, *void
    :void, :pointer, callback([ :string, :string ], :void), :pointer
  ],

  GEOSContext_setErrorMessageHandler_r: [
    # void, *handle, callback, *void
    :void, :pointer, callback([ :string, :string ], :void), :pointer
  ],

  GEOS_finish_r: [
    # void, *handle
    :void, :pointer
  ],
  # / GEOS 3.5.0+

  GEOS_interruptRegisterCallback: [
    :pointer,
    callback([], :void)
  ],

  GEOS_interruptRequest: [
    :void
  ],

  GEOS_interruptCancel: [
    :void
  ],

  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
  ],

  GEOSNode_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
  ],

  GEOSClipByRect_r: [
    # *geom, *handle, *geom, xmin, ymin, xmax, ymax
    :pointer, :pointer, :pointer, :double, :double, :double, :double
  ],

  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
  ],

  GEOSDelaunayTriangulation_r: [
    # *geom, *handle, *geom, tolerance, only_edges
    :pointer, :pointer, :pointer, :double, :int
  ],

  GEOSVoronoiDiagram_r: [
    # *geom, *handle, *geom, *envelope, tolerance, only_edges
    :pointer, :pointer, :pointer, :pointer, :double, :int
  ],

  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
  ],

  GEOSNearestPoints_r: [
    # (NULL on exception, pointer to CoordinateSequence otherwise), *handle, *geom, *geom
    :pointer, :pointer, :pointer, :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
  ],

  GEOSGeom_setPrecision_r: [
    # *geom, *hande, *geom, grid_size, int flags
    :pointer, :pointer, :pointer, :double, :int
  ],

  GEOSGeom_getPrecision_r: [
    # precision, *hande, *geom
    :double, :pointer, :pointer
  ],

  GEOSMinimumRotatedRectangle_r: [
    # *geom, *handle, *geom
    :pointer, :pointer, :pointer
  ],

  GEOSMinimumClearance_r: [
    # 0 on success, *handle, *geom, *clearance
    :int, :pointer, :pointer, :pointer
  ],

  GEOSMinimumClearanceLine_r: [
    # *geom, *handle, *geom
    :pointer, :pointer, :pointer
  ],

  GEOSMinimumWidth_r: [
    # *geom, *handle, *geom
    :pointer, :pointer, :pointer
  ],

  GEOSReverse_r: [
    # *geom, *handle, *geom
    :pointer, :pointer, :pointer
  ],

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

  GEOSFrechetDistanceDensify_r: [
    # (0 on exception, 1 otherwise), *handle, *geom_a, *geom_b, densifyFrac, (double *) distance
    :int, :pointer, :pointer, :pointer, :double, :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
  ],

  GEOSSTRtree_nearest_generic_r: [
    # *void, *handle, *tree, *item, *item_envelope, int distance_callback(*item_1, *item_2, *double, void *user_data), *user_data
    :pointer, :pointer, :pointer, :pointer, :pointer, callback([ :pointer, :pointer, :pointer, :pointer ], :int), :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 ####
}.freeze

Class Method Summary collapse

Class Method Details

.find_lib(lib) ⇒ Object



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

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



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

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.



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

def self.geos_library_paths
  [ geos_library_path ]
end

.search_pathsObject



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

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/lib/{x86_64,i386}-linux-gnu' ]
    end
  end
end