blob: 2f9cba9fce615ce50425e5e622dcf2c98ce4bd0e [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
#ifndef GEOS_C_DYN
#define GEOS_C_DYN
/* We don't need to depend on geos_c.h in libgeos directly. We can add forward
* type declarations for them since the libgeos C API only deals with pointer
* types of them, so they are essentially opaque to us. */
struct GEOSGeom_t;
struct GEOSPrepGeom_t;
struct GEOSCoordSeq_t;
struct GEOSContextHandle;
typedef struct GEOSGeom_t GEOSGeometry;
typedef struct GEOSPrepGeom_t GEOSPreparedGeometry;
typedef struct GEOSContextHandle *GEOSContextHandle_t;
typedef struct GEOSCoordSeq_t GEOSCoordSequence;
typedef void (*GEOSMessageHandler)(const char *fmt, ...);
/**
* Check if GEOS C was loaded
* @return 1 if GEOS C was loaded, otherwise return 0.
*/
int is_geos_c_loaded();
/**
* Load GEOS C functions from libgeos_c library on specified path.
*
* We don't link to libgeos_c directly because shapely already brought its own
* copy of libgeos_c, it is better to use the same copy of libgeos_c in our
* extension since our extension is an augmentation of shapely. Mixing various
* versions of the same library together is likely to cause nasty bugs.
*
* @param path path to the libgeos_c library
* @param err_msg buffer for receiving error message in case of errors
* @param len length of the error message buffer
* @return 0 when GEOS functions were loaded correctly, otherwise returns a
* non-zero value
*/
int load_geos_c_library(const char *path, char *err_msg, int len);
/**
* Load GEOS C functions from specified (platform-specific) library handle
*
* This function is similar to `load_geos_c_library`. The only exception is
* that it does not load the libgeos_c library from file.
*
* @param handle platform-specific handle to load functions from
* @param err_msg buffer for receiving error message in case of errors
* @param len length of the error message buffer
* @return 0 when GEOS functions were loaded correctly, otherwise returns a
* non-zero value
*/
int load_geos_c_from_handle(void *handle, char *err_msg, int len);
#define GEOS_FP_QUALIFIER extern
#include "geos_c_dyn_funcs.h"
#undef GEOS_FP_QUALIFIER
/* Supported geometry types */
enum GEOSGeomTypes {
GEOS_POINT,
GEOS_LINESTRING,
GEOS_LINEARRING,
GEOS_POLYGON,
GEOS_MULTIPOINT,
GEOS_MULTILINESTRING,
GEOS_MULTIPOLYGON,
GEOS_GEOMETRYCOLLECTION
};
#endif /* GEOS_C_DYN */