From 71a8fd63cd1ba33e8f27539b03fec0122cd9589b Mon Sep 17 00:00:00 2001 From: Esteban Zimanyi Date: Sun, 10 May 2026 18:23:44 +0200 Subject: [PATCH 1/8] feat(generator): regenerate against MEOS 1.4 amalgamated headers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Amalgamate current MEOS 1.4 public headers (postgres_ext_defs.in.h + postgres_int_defs.h + meos.h + meos_geo.h + meos_cbuffer.h + meos_npoint.h + meos_pose.h + meos_rgeo.h) into the generator input, add RTreeSearchOp and error_handler_fn type mappings, then regenerate src/main/java/functions/functions.java. Net change in functions.java surface: +767 new bindings (MEOS 1.4 rename targets + cbuffer/npoint/pose/rgeo/ tspatial families + tile/split/spatialset accessors) -179 removed (MEOS 1.4 rename sources, e.g. tpoint_* → tspatial_*) Coverage of MobilitySpark's MeosNative.java supplement: 122 of 133 (91.7%); residual 11 symbols sit in private headers (meos_internal.h, meos_internal_geo.h, temporal/temporal.h, temporal/meos_catalog.h) and are intentionally not picked up here because they have Datum-typed parameters that the current generator does not lower. Out of scope (follow-up): - utils/ConversionUtils.java + types/{boxes,collections,temporal}/*.java still reference removed names (pgis_geometry_in, pg_timestamptz_in, pg_interval_in, geoset_*, geo_get_srid, …) — the JMEOS API uplift against MEOS 1.4 will need its own pass. --- src/main/java/builder/FunctionsGenerator.java | 2 + src/main/java/builder/resources/meos.h | 3449 ++-- src/main/java/functions/functions.java | 13171 ++++++++++------ 3 files changed, 11199 insertions(+), 5423 deletions(-) diff --git a/src/main/java/builder/FunctionsGenerator.java b/src/main/java/builder/FunctionsGenerator.java index a3f19f651..5249ffd7f 100644 --- a/src/main/java/builder/FunctionsGenerator.java +++ b/src/main/java/builder/FunctionsGenerator.java @@ -183,6 +183,8 @@ private static HashMap buildEquivalentTypes() { types.put("uintptr_t", "long"); types.put("size_t", "long"); types.put("interpType", "int"); // enum in C + types.put("RTreeSearchOp", "int"); // enum in C + types.put("error_handler_fn", "Pointer"); // function pointer in C //types.put("\\char **","Pointer"); return types; diff --git a/src/main/java/builder/resources/meos.h b/src/main/java/builder/resources/meos.h index 00e4eaaa7..2f47ed957 100644 --- a/src/main/java/builder/resources/meos.h +++ b/src/main/java/builder/resources/meos.h @@ -1,44 +1,3 @@ -/***************************************************************************** - * - * This MobilityDB code is provided under The PostgreSQL License. - * Copyright (c) 2016-2024, Université libre de Bruxelles and MobilityDB - * contributors - * - * MobilityDB includes portions of PostGIS version 3 source code released - * under the GNU General Public License (GPLv2 or later). - * Copyright (c) 2001-2024, PostGIS contributors - * - * Permission to use, copy, modify, and distribute this software and its - * documentation for any purpose, without fee, and without a written - * agreement is hereby granted, provided that the above copyright notice and - * this paragraph and the following two paragraphs appear in all copies. - * - * IN NO EVENT SHALL UNIVERSITE LIBRE DE BRUXELLES BE LIABLE TO ANY PARTY FOR - * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING - * LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, - * EVEN IF UNIVERSITE LIBRE DE BRUXELLES HAS BEEN ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * UNIVERSITE LIBRE DE BRUXELLES SPECIFICALLY DISCLAIMS ANY WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY - * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON - * AN "AS IS" BASIS, AND UNIVERSITE LIBRE DE BRUXELLES HAS NO OBLIGATIONS TO - * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. - * - *****************************************************************************/ - -/** - * @brief API of the Mobility Engine Open Source (MEOS) library. - */ - -#ifndef __MEOS_H__ -#define __MEOS_H__ - -/* C */ -#include -#include -#include -/* PostgreSQL */ #ifndef POSTGRES_H #define POSTGRES_H @@ -80,430 +39,73 @@ typedef struct varlena typedef varlena text; typedef struct varlena bytea; -#endif /* POSTGRES_H */ - -/* PostGIS */ -#ifndef _LIBLWGEOM_H -#define _LIBLWGEOM_H - -/******************************************************************/ +/* The following functions have the same name as external PostgreSQL functions */ + +extern DateADT date_in(const char *str); +extern char *date_out(DateADT d); +extern int interval_cmp(const Interval *interv1, const Interval *interv2); +extern Interval *interval_in(const char *str, int32 typmod); +extern char *interval_out(const Interval *interv); +extern TimeADT time_in(const char *str, int32 typmod); +extern char *time_out(TimeADT t); +extern Timestamp timestamp_in(const char *str, int32 typmod); +extern char *timestamp_out(Timestamp t); +extern TimestampTz timestamptz_in(const char *str, int32 typmod); +extern char *timestamptz_out(TimestampTz t); + +#endif /* POSTGRES_H */ +#include "../postgres/postgres.h" +#include "../postgres/utils/timestamp_def.h" +#include "../postgres/utils/date.h" +/***************************************************************************** + * + * This MobilityDB code is provided under The PostgreSQL License. + * Copyright (c) 2016-2025, Université libre de Bruxelles and MobilityDB + * contributors + * + * MobilityDB includes portions of PostGIS version 3 source code released + * under the GNU General Public License (GPLv2 or later). + * Copyright (c) 2001-2025, PostGIS contributors + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without a written + * agreement is hereby granted, provided that the above copyright notice and + * this paragraph and the following two paragraphs appear in all copies. + * + * IN NO EVENT SHALL UNIVERSITE LIBRE DE BRUXELLES BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING + * LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, + * EVEN IF UNIVERSITE LIBRE DE BRUXELLES HAS BEEN ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * UNIVERSITE LIBRE DE BRUXELLES SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON + * AN "AS IS" BASIS, AND UNIVERSITE LIBRE DE BRUXELLES HAS NO OBLIGATIONS TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + * + *****************************************************************************/ /** -* Macros for manipulating the 'flags' byte. A uint8_t used as follows: -* VVSRGBMZ -* Version bit, followed by -* Validty, Solid, ReadOnly, Geodetic, HasBBox, HasM and HasZ flags. -*/ -#define LWFLAG_Z 0x01 -#define LWFLAG_M 0x02 -#define LWFLAG_BBOX 0x04 -#define LWFLAG_GEODETIC 0x08 -#define LWFLAG_READONLY 0x10 -#define LWFLAG_SOLID 0x20 - -#define FLAGS_GET_Z(flags) ((flags) & LWFLAG_Z) -#define FLAGS_GET_M(flags) (((flags) & LWFLAG_M)>>1) -#define FLAGS_GET_BBOX(flags) (((flags) & LWFLAG_BBOX)>>2) -#define FLAGS_GET_GEODETIC(flags) (((flags) & LWFLAG_GEODETIC)>>3) -#define FLAGS_GET_READONLY(flags) (((flags) & LWFLAG_READONLY)>>4) -#define FLAGS_GET_SOLID(flags) (((flags) & LWFLAG_SOLID)>>5) - -#define FLAGS_SET_Z(flags, value) ((flags) = (value) ? ((flags) | LWFLAG_Z) : ((flags) & ~LWFLAG_Z)) -#define FLAGS_SET_M(flags, value) ((flags) = (value) ? ((flags) | LWFLAG_M) : ((flags) & ~LWFLAG_M)) -#define FLAGS_SET_BBOX(flags, value) ((flags) = (value) ? ((flags) | LWFLAG_BBOX) : ((flags) & ~LWFLAG_BBOX)) -#define FLAGS_SET_GEODETIC(flags, value) ((flags) = (value) ? ((flags) | LWFLAG_GEODETIC) : ((flags) & ~LWFLAG_GEODETIC)) -#define FLAGS_SET_READONLY(flags, value) ((flags) = (value) ? ((flags) | LWFLAG_READONLY) : ((flags) & ~LWFLAG_READONLY)) -#define FLAGS_SET_SOLID(flags, value) ((flags) = (value) ? ((flags) | LWFLAG_SOLID) : ((flags) & ~LWFLAG_SOLID)) - -#define FLAGS_NDIMS(flags) (2 + FLAGS_GET_Z(flags) + FLAGS_GET_M(flags)) -#define FLAGS_GET_ZM(flags) (FLAGS_GET_M(flags) + FLAGS_GET_Z(flags) * 2) -#define FLAGS_NDIMS_BOX(flags) (FLAGS_GET_GEODETIC(flags) ? 3 : FLAGS_NDIMS(flags)) - -/* -** Variants available for WKB and WKT output types -*/ - -#define WKB_ISO 0x01 -#define WKB_SFSQL 0x02 -#define WKB_EXTENDED 0x04 -#define WKB_NDR 0x08 -#define WKB_XDR 0x10 -#define WKB_HEX 0x20 -#define WKB_NO_NPOINTS 0x40 /* Internal use only */ -#define WKB_NO_SRID 0x80 /* Internal use only */ - -#define WKT_ISO 0x01 -#define WKT_SFSQL 0x02 -#define WKT_EXTENDED 0x04 - -typedef uint16_t lwflags_t; - -/******************************************************************/ - -typedef struct { - double afac, bfac, cfac, dfac, efac, ffac, gfac, hfac, ifac, xoff, yoff, zoff; -} AFFINE; - -/******************************************************************/ - -typedef struct -{ - double xmin, ymin, zmin; - double xmax, ymax, zmax; - int32_t srid; -} -BOX3D; - -/****************************************************************** -* GBOX structure. -* We include the flags (information about dimensionality), -* so we don't have to constantly pass them -* into functions that use the GBOX. -*/ -typedef struct -{ - lwflags_t flags; - double xmin; - double xmax; - double ymin; - double ymax; - double zmin; - double zmax; - double mmin; - double mmax; -} GBOX; - - -/****************************************************************** -* SPHEROID -* -* Standard definition of an ellipsoid (what wkt calls a spheroid) -* f = (a-b)/a -* e_sq = (a*a - b*b)/(a*a) -* b = a - fa -*/ -typedef struct -{ - double a; /* semimajor axis */ - double b; /* semiminor axis b = (a - fa) */ - double f; /* flattening f = (a-b)/a */ - double e; /* eccentricity (first) */ - double e_sq; /* eccentricity squared (first) e_sq = (a*a-b*b)/(a*a) */ - double radius; /* spherical average radius = (2*a+b)/3 */ - char name[20]; /* name of ellipse */ -} -SPHEROID; - -/****************************************************************** -* POINT2D, POINT3D, POINT3DM, POINT4D -*/ -typedef struct -{ - double x, y; -} -POINT2D; - -typedef struct -{ - double x, y, z; -} -POINT3DZ; - -typedef struct -{ - double x, y, z; -} -POINT3D; - -typedef struct -{ - double x, y, m; -} -POINT3DM; - -typedef struct -{ - double x, y, z, m; -} -POINT4D; - -/****************************************************************** -* POINTARRAY -* Point array abstracts a lot of the complexity of points and point lists. -* It handles 2d/3d translation -* (2d points converted to 3d will have z=0 or NaN) -* DO NOT MIX 2D and 3D POINTS! EVERYTHING* is either one or the other -*/ -typedef struct -{ - uint32_t npoints; /* how many points we are currently storing */ - uint32_t maxpoints; /* how many points we have space for in serialized_pointlist */ - - /* Use FLAGS_* macros to handle */ - lwflags_t flags; - - /* Array of POINT 2D, 3D or 4D, possibly misaligned. */ - uint8_t *serialized_pointlist; -} -POINTARRAY; - -/****************************************************************** -* GSERIALIZED -*/ - -typedef struct -{ - uint32_t size; /* For PgSQL use only, use VAR* macros to manipulate. */ - uint8_t srid[3]; /* 24 bits of SRID */ - uint8_t gflags; /* HasZ, HasM, HasBBox, IsGeodetic */ - uint8_t data[1]; /* See gserialized.txt */ -} GSERIALIZED; - -/****************************************************************** -* LWGEOM (any geometry type) -* -* Abstract type, note that 'type', 'bbox' and 'srid' are available in -* all geometry variants. -*/ -typedef struct -{ - GBOX *bbox; - void *data; - int32_t srid; - lwflags_t flags; - uint8_t type; - char pad[1]; /* Padding to 24 bytes (unused) */ -} -LWGEOM; - -/* POINTYPE */ -typedef struct -{ - GBOX *bbox; - POINTARRAY *point; /* hide 2d/3d (this will be an array of 1 point) */ - int32_t srid; - lwflags_t flags; - uint8_t type; /* POINTTYPE */ - char pad[1]; /* Padding to 24 bytes (unused) */ -} -LWPOINT; /* "light-weight point" */ - -/* LINETYPE */ -typedef struct -{ - GBOX *bbox; - POINTARRAY *points; /* array of POINT3D */ - int32_t srid; - lwflags_t flags; - uint8_t type; /* LINETYPE */ - char pad[1]; /* Padding to 24 bytes (unused) */ -} -LWLINE; /* "light-weight line" */ - -/* TRIANGLE */ -typedef struct -{ - GBOX *bbox; - POINTARRAY *points; - int32_t srid; - lwflags_t flags; - uint8_t type; - char pad[1]; /* Padding to 24 bytes (unused) */ -} -LWTRIANGLE; - -/* CIRCSTRINGTYPE */ -typedef struct -{ - GBOX *bbox; - POINTARRAY *points; /* array of POINT(3D/3DM) */ - int32_t srid; - lwflags_t flags; - uint8_t type; /* CIRCSTRINGTYPE */ - char pad[1]; /* Padding to 24 bytes (unused) */ -} -LWCIRCSTRING; /* "light-weight circularstring" */ - -/* POLYGONTYPE */ -typedef struct -{ - GBOX *bbox; - POINTARRAY **rings; /* list of rings (list of points) */ - int32_t srid; - lwflags_t flags; - uint8_t type; /* POLYGONTYPE */ - char pad[1]; /* Padding to 24 bytes (unused) */ - uint32_t nrings; /* how many rings we are currently storing */ - uint32_t maxrings; /* how many rings we have space for in **rings */ -} -LWPOLY; /* "light-weight polygon" */ - -/* MULTIPOINTTYPE */ -typedef struct -{ - GBOX *bbox; - LWPOINT **geoms; - int32_t srid; - lwflags_t flags; - uint8_t type; /* MULTYPOINTTYPE */ - char pad[1]; /* Padding to 24 bytes (unused) */ - uint32_t ngeoms; /* how many geometries we are currently storing */ - uint32_t maxgeoms; /* how many geometries we have space for in **geoms */ -} -LWMPOINT; - -/* MULTILINETYPE */ -typedef struct -{ - GBOX *bbox; - LWLINE **geoms; - int32_t srid; - lwflags_t flags; - uint8_t type; /* MULTILINETYPE */ - char pad[1]; /* Padding to 24 bytes (unused) */ - uint32_t ngeoms; /* how many geometries we are currently storing */ - uint32_t maxgeoms; /* how many geometries we have space for in **geoms */ -} -LWMLINE; - -/* MULTIPOLYGONTYPE */ -typedef struct -{ - GBOX *bbox; - LWPOLY **geoms; - int32_t srid; - lwflags_t flags; - uint8_t type; /* MULTIPOLYGONTYPE */ - char pad[1]; /* Padding to 24 bytes (unused) */ - uint32_t ngeoms; /* how many geometries we are currently storing */ - uint32_t maxgeoms; /* how many geometries we have space for in **geoms */ -} -LWMPOLY; - -/* COLLECTIONTYPE */ -typedef struct -{ - GBOX *bbox; - LWGEOM **geoms; - int32_t srid; - lwflags_t flags; - uint8_t type; /* COLLECTIONTYPE */ - char pad[1]; /* Padding to 24 bytes (unused) */ - uint32_t ngeoms; /* how many geometries we are currently storing */ - uint32_t maxgeoms; /* how many geometries we have space for in **geoms */ -} -LWCOLLECTION; - -/* COMPOUNDTYPE */ -typedef struct -{ - GBOX *bbox; - LWGEOM **geoms; - int32_t srid; - lwflags_t flags; - uint8_t type; /* COLLECTIONTYPE */ - char pad[1]; /* Padding to 24 bytes (unused) */ - uint32_t ngeoms; /* how many geometries we are currently storing */ - uint32_t maxgeoms; /* how many geometries we have space for in **geoms */ -} -LWCOMPOUND; /* "light-weight compound line" */ - -/* CURVEPOLYTYPE */ -typedef struct -{ - GBOX *bbox; - LWGEOM **rings; - int32_t srid; - lwflags_t flags; - uint8_t type; /* CURVEPOLYTYPE */ - char pad[1]; /* Padding to 24 bytes (unused) */ - uint32_t nrings; /* how many rings we are currently storing */ - uint32_t maxrings; /* how many rings we have space for in **rings */ -} -LWCURVEPOLY; /* "light-weight polygon" */ - -/* MULTICURVE */ -typedef struct -{ - GBOX *bbox; - LWGEOM **geoms; - int32_t srid; - lwflags_t flags; - uint8_t type; /* MULTICURVE */ - char pad[1]; /* Padding to 24 bytes (unused) */ - uint32_t ngeoms; /* how many geometries we are currently storing */ - uint32_t maxgeoms; /* how many geometries we have space for in **geoms */ -} -LWMCURVE; - -/* MULTISURFACETYPE */ -typedef struct -{ - GBOX *bbox; - LWGEOM **geoms; - int32_t srid; - lwflags_t flags; - uint8_t type; /* MULTISURFACETYPE */ - char pad[1]; /* Padding to 24 bytes (unused) */ - uint32_t ngeoms; /* how many geometries we are currently storing */ - uint32_t maxgeoms; /* how many geometries we have space for in **geoms */ -} -LWMSURFACE; - -/* POLYHEDRALSURFACETYPE */ -typedef struct -{ - GBOX *bbox; - LWPOLY **geoms; - int32_t srid; - lwflags_t flags; - uint8_t type; /* POLYHEDRALSURFACETYPE */ - char pad[1]; /* Padding to 24 bytes (unused) */ - uint32_t ngeoms; /* how many geometries we are currently storing */ - uint32_t maxgeoms; /* how many geometries we have space for in **geoms */ -} -LWPSURFACE; - -/* TINTYPE */ -typedef struct -{ - GBOX *bbox; - LWTRIANGLE **geoms; - int32_t srid; - lwflags_t flags; - uint8_t type; /* TINTYPE */ - char pad[1]; /* Padding to 24 bytes (unused) */ - uint32_t ngeoms; /* how many geometries we are currently storing */ - uint32_t maxgeoms; /* how many geometries we have space for in **geoms */ -} -LWTIN; - -/* Functions */ - -extern int32 geo_get_srid(const GSERIALIZED *g); - -/* PROJ */ - -struct PJconsts; -typedef struct PJconsts PJ; - -typedef struct LWPROJ -{ - PJ* pj; - - /* for pipeline transforms, whether to do a forward or inverse */ - bool pipeline_is_forward; - - /* Source crs is geographic: Used in geography calls (source srid == dst srid) */ - uint8_t source_is_latlong; - /* Source ellipsoid parameters */ - double source_semi_major_metre; - double source_semi_minor_metre; -} LWPROJ; - + * @file + * @brief External API of the Mobility Engine Open Source (MEOS) library + */ -#endif /* _LIBLWGEOM_H */ +#ifndef __MEOS_H__ +#define __MEOS_H__ +/* C */ +#include +#include +#include +/* PostgreSQL */ +#if MEOS +#include "postgres_int_defs.h" +#else +#include +#include +#include +#endif /***************************************************************************** * Toolchain dependent definitions @@ -522,6 +124,15 @@ typedef struct LWPROJ #define strdup _strdup #endif +/* + * Thread-local storage qualifier (MEOS_TLS) used internally by MEOS to + * make per-thread state (last-error number, PROJ context, SRS cache, + * ways cache, RNG, session timezone) safe under multithreading. Defined + * in a stand-alone header so that vendored PostgreSQL files can pick it + * up without pulling in the full meos.h. + */ +#include "meos_tls.h" + /***************************************************************************** * Type definitions *****************************************************************************/ @@ -597,8 +208,8 @@ typedef struct double xmax; /**< maximum x value */ double ymax; /**< maximum y value */ double zmax; /**< maximum z value */ - int32 srid; /**< SRID */ - int16 flags; /**< flags */ + int32_t srid; /**< SRID */ + int16 flags; /**< flags */ } STBox; /** @@ -623,18 +234,6 @@ typedef enum LINEAR = 3, } interpType; -/** - * @brief Enumeration that defines the spatial relationships for which a call - * to GEOS is made. - */ -typedef enum -{ - INTERSECTS = 0, - CONTAINS = 1, - TOUCHES = 2, - COVERS = 3, -} spatialRel; - /** * Structure to represent the common structure of temporal values of * any temporal subtype @@ -666,7 +265,7 @@ typedef struct } TInstant; /** - * Structure to represent temporal values of instant set or sequence subtype + * Structure to represent temporal values of sequence subtype */ typedef struct { @@ -723,34 +322,59 @@ typedef struct /*****************************************************************************/ /** - * Structure to represent skiplist elements + * Structure for skiplists */ +typedef struct SkipList SkipList; -#define SKIPLIST_MAXLEVEL 32 /**< maximum possible is 47 with current RNG */ +/*****************************************************************************/ -typedef struct -{ - void *value; - int height; - int next[SKIPLIST_MAXLEVEL]; -} SkipListElem; +/** + * Structure for expandable arrays + */ +typedef struct MeosArray MeosArray; + +/* MeosArray functions */ + +extern MeosArray *meos_array_create(int elem_size); +extern void meos_array_add(MeosArray *array, void *value); +extern void *meos_array_get(const MeosArray *array, int n); +extern int meos_array_count(const MeosArray *array); +extern void meos_array_reset(MeosArray *array); +extern void meos_array_reset_free(MeosArray *array); +extern void meos_array_destroy(MeosArray *array); +extern void meos_array_destroy_free(MeosArray *array); + +/*****************************************************************************/ /** - * Structure to represent skiplists that keep the current state of an aggregation + * @brief Enumeration that defines the search operations for an RTree. */ -typedef struct +typedef enum { - int capacity; - int next; - int length; - int *freed; - int freecount; - int freecap; - int tail; - void *extra; - size_t extrasize; - SkipListElem *elems; -} SkipList; + RTREE_OVERLAPS, /**< Find stored boxes that overlap the query */ + RTREE_CONTAINS, /**< Find stored boxes that contain the query */ + RTREE_CONTAINED_BY /**< Find stored boxes contained by the query */ +} RTreeSearchOp; + +/** + * Structure for the in-memory Rtree index + */ +typedef struct RTree RTree; + +/* RTree functions */ + +extern RTree *rtree_create_intspan(); +extern RTree *rtree_create_bigintspan(); +extern RTree *rtree_create_floatspan(); +extern RTree *rtree_create_datespan(); +extern RTree *rtree_create_tstzspan(); +extern RTree *rtree_create_tbox(); +extern RTree *rtree_create_stbox(); +extern void rtree_free(RTree *rtree); +extern void rtree_insert(RTree *rtree, void *box, int id); +extern void rtree_insert_temporal(RTree *rtree, const Temporal *temp, int id); +extern int rtree_search(const RTree *rtree, RTreeSearchOp op, const void *query, MeosArray *result); +extern int rtree_search_temporal(const RTree *rtree, RTreeSearchOp op, const Temporal *temp, MeosArray *result); /***************************************************************************** * Error codes @@ -758,33 +382,34 @@ typedef struct typedef enum { - MEOS_SUCCESS = 0, // Successful operation - - MEOS_ERR_INTERNAL_ERROR = 1, // Unspecified internal error - MEOS_ERR_INTERNAL_TYPE_ERROR = 2, // Internal type error - MEOS_ERR_VALUE_OUT_OF_RANGE = 3, // Internal out of range error - MEOS_ERR_DIVISION_BY_ZERO = 4, // Internal division by zero error - MEOS_ERR_MEMORY_ALLOC_ERROR = 5, // Internal malloc error - MEOS_ERR_AGGREGATION_ERROR = 6, // Internal aggregation error - MEOS_ERR_DIRECTORY_ERROR = 7, // Internal directory error - MEOS_ERR_FILE_ERROR = 8, // Internal file error - - MEOS_ERR_INVALID_ARG = 10, // Invalid argument - MEOS_ERR_INVALID_ARG_TYPE = 11, // Invalid argument type - MEOS_ERR_INVALID_ARG_VALUE = 12, // Invalid argument value - - MEOS_ERR_MFJSON_INPUT = 20, // MFJSON input error - MEOS_ERR_MFJSON_OUTPUT = 21, // MFJSON output error - MEOS_ERR_TEXT_INPUT = 22, // Text input error - MEOS_ERR_TEXT_OUTPUT = 23, // Text output error - MEOS_ERR_WKB_INPUT = 24, // WKB input error - MEOS_ERR_WKB_OUTPUT = 25, // WKB output error - MEOS_ERR_GEOJSON_INPUT = 26, // GEOJSON input error - MEOS_ERR_GEOJSON_OUTPUT = 27, // GEOJSON output error + MEOS_SUCCESS = 0, // Successful operation + + MEOS_ERR_INTERNAL_ERROR = 1, // Unspecified internal error + MEOS_ERR_INTERNAL_TYPE_ERROR = 2, // Internal type error + MEOS_ERR_VALUE_OUT_OF_RANGE = 3, // Internal out of range error + MEOS_ERR_DIVISION_BY_ZERO = 4, // Internal division by zero error + MEOS_ERR_MEMORY_ALLOC_ERROR = 5, // Internal malloc error + MEOS_ERR_AGGREGATION_ERROR = 6, // Internal aggregation error + MEOS_ERR_DIRECTORY_ERROR = 7, // Internal directory error + MEOS_ERR_FILE_ERROR = 8, // Internal file error + + MEOS_ERR_INVALID_ARG = 10, // Invalid argument + MEOS_ERR_INVALID_ARG_TYPE = 11, // Invalid argument type + MEOS_ERR_INVALID_ARG_VALUE = 12, // Invalid argument value + MEOS_ERR_FEATURE_NOT_SUPPORTED = 13, // Feature not currently supported + + MEOS_ERR_MFJSON_INPUT = 20, // MFJSON input error + MEOS_ERR_MFJSON_OUTPUT = 21, // MFJSON output error + MEOS_ERR_TEXT_INPUT = 22, // Text input error + MEOS_ERR_TEXT_OUTPUT = 23, // Text output error + MEOS_ERR_WKB_INPUT = 24, // WKB input error + MEOS_ERR_WKB_OUTPUT = 25, // WKB output error + MEOS_ERR_GEOJSON_INPUT = 26, // GEOJSON input error + MEOS_ERR_GEOJSON_OUTPUT = 27, // GEOJSON output error } errorCode; -extern void meos_error(int errlevel, int errcode, char *format, ...); +extern void meos_error(int errlevel, int errcode, const char *format, ...); /* Set or read error level */ @@ -795,26 +420,42 @@ extern int meos_errno_reset(void); /***************************************************************************** * Initialization of the MEOS library + * + * Multithreading + * -------------- + * The MEOS state managed by these functions is per-thread. Each thread + * that calls into MEOS must call `meos_initialize()` before its first + * MEOS call and `meos_finalize()` before exiting; the PROJ context, SRS + * cache, ways cache, RNGs, last-error number (`meos_errno`), and + * session timezone are all thread-local. + * + * The error handler set by `meos_initialize_error_handler()` is the + * one exception: it is process-global and should be installed once + * before workers are spawned. *****************************************************************************/ /* Definition of error handler function */ -typedef void (*error_handler_fn)(int, int, char *); +typedef void (*error_handler_fn)(int, int, const char *); extern void meos_initialize_timezone(const char *name); extern void meos_initialize_error_handler(error_handler_fn err_handler); extern void meos_finalize_timezone(void); +extern void meos_finalize_projsrs(void); +extern void meos_finalize_ways(void); -extern bool meos_set_datestyle(char *newval, void *extra); -extern bool meos_set_intervalstyle(char *newval, int extra); +extern bool meos_set_datestyle(const char *newval, void *extra); +extern bool meos_set_intervalstyle(const char *newval, int extra); extern char *meos_get_datestyle(void); extern char *meos_get_intervalstyle(void); -extern void meos_initialize(const char *tz_str, error_handler_fn err_handler); +extern void meos_set_spatial_ref_sys_csv(const char* path); + +extern void meos_initialize(void); extern void meos_finalize(void); -/*===========================================================================* - * Functions for PostgreSQL types - *===========================================================================*/ +/****************************************************************************** + * Functions for base and time types + ******************************************************************************/ extern DateADT add_date_int(DateADT d, int32 days); extern Interval *add_interval_interval(const Interval *interv1, const Interval *interv2); @@ -822,20 +463,26 @@ extern TimestampTz add_timestamptz_interval(TimestampTz t, const Interval *inter extern bool bool_in(const char *str); extern char *bool_out(bool b); extern text *cstring2text(const char *str); +extern Timestamp date_to_timestamp(DateADT dateVal); extern TimestampTz date_to_timestamptz(DateADT d); -extern Interval *minus_date_date(DateADT d1, DateADT d2); +extern double float_exp(double d); +extern double float_ln(double d); +extern double float_log10(double d); +extern char *float8_out(double d, int maxdd); +extern double float_round(double d, int maxdd); +extern int int32_cmp(int32 l, int32 r); +extern int int64_cmp(int64 l, int64 r); +extern Interval *interval_make(int32 years, int32 months, int32 weeks, int32 days, int32 hours, int32 mins, double secs); +extern int minus_date_date(DateADT d1, DateADT d2); extern DateADT minus_date_int(DateADT d, int32 days); extern TimestampTz minus_timestamptz_interval(TimestampTz t, const Interval *interv); extern Interval *minus_timestamptz_timestamptz(TimestampTz t1, TimestampTz t2); -extern Interval *mult_interval_double(const Interval *interv, double factor); +extern Interval *mul_interval_double(const Interval *interv, double factor); extern DateADT pg_date_in(const char *str); extern char *pg_date_out(DateADT d); extern int pg_interval_cmp(const Interval *interv1, const Interval *interv2); extern Interval *pg_interval_in(const char *str, int32 typmod); -extern Interval *pg_interval_make(int32 years, int32 months, int32 weeks, int32 days, int32 hours, int32 mins, double secs); extern char *pg_interval_out(const Interval *interv); -extern TimeADT pg_time_in(const char *str, int32 typmod); -extern char *pg_time_out(TimeADT t); extern Timestamp pg_timestamp_in(const char *str, int32 typmod); extern char *pg_timestamp_out(Timestamp t); extern TimestampTz pg_timestamptz_in(const char *str, int32 typmod); @@ -843,36 +490,19 @@ extern char *pg_timestamptz_out(TimestampTz t); extern char *text2cstring(const text *txt); extern int text_cmp(const text *txt1, const text *txt2); extern text *text_copy(const text *txt); +extern text *text_in(const char *str); extern text *text_initcap(const text *txt); extern text *text_lower(const text *txt); extern char *text_out(const text *txt); extern text *text_upper(const text *txt); extern text *textcat_text_text(const text *txt1, const text *txt2); +extern TimestampTz timestamptz_shift(TimestampTz t, const Interval *interv); +extern DateADT timestamp_to_date(Timestamp t); extern DateADT timestamptz_to_date(TimestampTz t); -/*===========================================================================* - * Functions for PostGIS types - *===========================================================================*/ - -extern bytea *geo_as_ewkb(const GSERIALIZED *gs, char *endian); -extern char *geo_as_ewkt(const GSERIALIZED *gs, int precision); -extern char *geo_as_geojson(const GSERIALIZED *gs, int option, int precision, char *srs); -extern char *geo_as_hexewkb(const GSERIALIZED *gs, const char *endian); -extern char *geo_as_text(const GSERIALIZED *gs, int precision); -extern GSERIALIZED *geo_from_ewkb(const bytea *bytea_wkb, int32 srid); -extern GSERIALIZED *geo_from_geojson(const char *geojson); -extern char *geo_out(const GSERIALIZED *gs); -extern bool geo_same(const GSERIALIZED *gs1, const GSERIALIZED *gs2); -extern GSERIALIZED *geography_from_hexewkb(const char *wkt); -extern GSERIALIZED *geography_from_text(char *wkt, int srid); -extern GSERIALIZED *geometry_from_hexewkb(const char *wkt); -extern GSERIALIZED *geometry_from_text(char *wkt, int srid); -extern GSERIALIZED *pgis_geography_in(char *str, int32 typmod); -extern GSERIALIZED *pgis_geometry_in(char *str, int32 typmod); - -/*===========================================================================* +/*============================================================================ * Functions for set and span types - *===========================================================================*/ + ===========================================================================*/ /***************************************************************************** * Input/output functions for set and span types @@ -880,6 +510,7 @@ extern GSERIALIZED *pgis_geometry_in(char *str, int32 typmod); extern Set *bigintset_in(const char *str); extern char *bigintset_out(const Set *set); +extern Span *bigintspan_expand(const Span *s, int64 value); extern Span *bigintspan_in(const char *str); extern char *bigintspan_out(const Span *s); extern SpanSet *bigintspanset_in(const char *str); @@ -892,17 +523,14 @@ extern SpanSet *datespanset_in(const char *str); extern char *datespanset_out(const SpanSet *ss); extern Set *floatset_in(const char *str); extern char *floatset_out(const Set *set, int maxdd); +extern Span *floatspan_expand(const Span *s, double value); extern Span *floatspan_in(const char *str); extern char *floatspan_out(const Span *s, int maxdd); extern SpanSet *floatspanset_in(const char *str); extern char *floatspanset_out(const SpanSet *ss, int maxdd); -extern Set *geogset_in(const char *str); -extern Set *geomset_in(const char *str); -extern char *geoset_as_ewkt(const Set *set, int maxdd); -extern char *geoset_as_text(const Set *set, int maxdd); -extern char *geoset_out(const Set *set, int maxdd); extern Set *intset_in(const char *str); extern char *intset_out(const Set *set); +extern Span *intspan_expand(const Span *s, int32 value); extern Span *intspan_in(const char *str); extern char *intspan_out(const Span *s); extern SpanSet *intspanset_in(const char *str); @@ -938,14 +566,13 @@ extern Set *dateset_make(const DateADT *values, int count); extern Span *datespan_make(DateADT lower, DateADT upper, bool lower_inc, bool upper_inc); extern Set *floatset_make(const double *values, int count); extern Span *floatspan_make(double lower, double upper, bool lower_inc, bool upper_inc); -extern Set *geoset_make(const GSERIALIZED **values, int count); extern Set *intset_make(const int *values, int count); extern Span *intspan_make(int lower, int upper, bool lower_inc, bool upper_inc); extern Set *set_copy(const Set *s); extern Span *span_copy(const Span *s); extern SpanSet *spanset_copy(const SpanSet *ss); -extern SpanSet *spanset_make(Span *spans, int count, bool normalize, bool order); -extern Set *textset_make(const text **values, int count); +extern SpanSet *spanset_make(Span *spans, int count); +extern Set *textset_make(text **values, int count); extern Set *tstzset_make(const TimestampTz *values, int count); extern Span *tstzspan_make(TimestampTz lower, TimestampTz upper, bool lower_inc, bool upper_inc); @@ -968,16 +595,16 @@ extern SpanSet *float_to_spanset(double d); extern Set *floatset_to_intset(const Set *s); extern Span *floatspan_to_intspan(const Span *s); extern SpanSet *floatspanset_to_intspanset(const SpanSet *ss); -extern Set *geo_to_set(GSERIALIZED *gs); extern Set *int_to_set(int i); extern Span *int_to_span(int i); extern SpanSet *int_to_spanset(int i); extern Set *intset_to_floatset(const Set *s); extern Span *intspan_to_floatspan(const Span *s); extern SpanSet *intspanset_to_floatspanset(const SpanSet *ss); +extern Span *set_to_span(const Set *s); extern SpanSet *set_to_spanset(const Set *s); extern SpanSet *span_to_spanset(const Span *s); -extern Set *text_to_set(text *txt); +extern Set *text_to_set(const text *txt); extern Set *timestamptz_to_set(TimestampTz t); extern Span *timestamptz_to_span(TimestampTz t); extern SpanSet *timestamptz_to_spanset(TimestampTz t); @@ -1022,11 +649,6 @@ extern double floatspan_width(const Span *s); extern double floatspanset_lower(const SpanSet *ss); extern double floatspanset_upper(const SpanSet *ss); extern double floatspanset_width(const SpanSet *ss, bool boundspan); -extern GSERIALIZED *geoset_end_value(const Set *s); -extern int geoset_srid(const Set *s); -extern GSERIALIZED *geoset_start_value(const Set *s); -extern bool geoset_value_n(const Set *s, int n, GSERIALIZED **result); -extern GSERIALIZED **geoset_values(const Set *s); extern int intset_end_value(const Set *s); extern int intset_start_value(const Set *s); extern bool intset_value_n(const Set *s, int n, int *result); @@ -1040,7 +662,6 @@ extern int intspanset_width(const SpanSet *ss, bool boundspan); extern uint32 set_hash(const Set *s); extern uint64 set_hash_extended(const Set *s, uint64 seed); extern int set_num_values(const Set *s); -extern Span *set_to_span(const Set *s); extern uint32 span_hash(const Span *s); extern uint64 span_hash_extended(const Span *s, uint64 seed); extern bool span_lower_inc(const Span *s); @@ -1052,7 +673,7 @@ extern bool spanset_lower_inc(const SpanSet *ss); extern int spanset_num_spans(const SpanSet *ss); extern Span *spanset_span(const SpanSet *ss); extern Span *spanset_span_n(const SpanSet *ss, int i); -extern Span **spanset_spans(const SpanSet *ss); +extern Span **spanset_spanarr(const SpanSet *ss); extern Span *spanset_start_span(const SpanSet *ss); extern bool spanset_upper_inc(const SpanSet *ss); extern text *textset_end_value(const Set *s); @@ -1071,8 +692,8 @@ extern TimestampTz tstzspanset_end_timestamptz(const SpanSet *ss); extern TimestampTz tstzspanset_lower(const SpanSet *ss); extern int tstzspanset_num_timestamps(const SpanSet *ss); extern TimestampTz tstzspanset_start_timestamptz(const SpanSet *ss); -extern bool tstzspanset_timestamptz_n(const SpanSet *ss, int n, TimestampTz *result); extern Set *tstzspanset_timestamps(const SpanSet *ss); +extern bool tstzspanset_timestamptz_n(const SpanSet *ss, int n, TimestampTz *result); extern TimestampTz tstzspanset_upper(const SpanSet *ss); /***************************************************************************** @@ -1086,33 +707,32 @@ extern Set *dateset_shift_scale(const Set *s, int shift, int width, bool hasshif extern Span *datespan_shift_scale(const Span *s, int shift, int width, bool hasshift, bool haswidth); extern SpanSet *datespanset_shift_scale(const SpanSet *ss, int shift, int width, bool hasshift, bool haswidth); extern Set *floatset_ceil(const Set *s); -extern Set *floatset_floor(const Set *s); extern Set *floatset_degrees(const Set *s, bool normalize); +extern Set *floatset_floor(const Set *s); extern Set *floatset_radians(const Set *s); -extern Set *floatset_round(const Set *s, int maxdd); extern Set *floatset_shift_scale(const Set *s, double shift, double width, bool hasshift, bool haswidth); extern Span *floatspan_ceil(const Span *s); +extern Span *floatspan_degrees(const Span *s, bool normalize); extern Span *floatspan_floor(const Span *s); +extern Span *floatspan_radians(const Span *s); extern Span *floatspan_round(const Span *s, int maxdd); extern Span *floatspan_shift_scale(const Span *s, double shift, double width, bool hasshift, bool haswidth); extern SpanSet *floatspanset_ceil(const SpanSet *ss); extern SpanSet *floatspanset_floor(const SpanSet *ss); +extern SpanSet *floatspanset_degrees(const SpanSet *ss, bool normalize); +extern SpanSet *floatspanset_radians(const SpanSet *ss); extern SpanSet *floatspanset_round(const SpanSet *ss, int maxdd); extern SpanSet *floatspanset_shift_scale(const SpanSet *ss, double shift, double width, bool hasshift, bool haswidth); -extern Set *geoset_round(const Set *s, int maxdd); -extern Set *geoset_set_srid(const Set *s, int32 srid); -extern Set *geoset_transform(const Set *s, int32 srid); -extern Set *geoset_transform_pipeline(const Set *s, char *pipelinestr, int32 srid, bool is_forward); -extern GSERIALIZED *point_transform(const GSERIALIZED *gs, int32 srid); -extern GSERIALIZED *point_transform_pipeline(const GSERIALIZED *gs, char *pipelinestr, int32 srid, bool is_forward); extern Set *intset_shift_scale(const Set *s, int shift, int width, bool hasshift, bool haswidth); extern Span *intspan_shift_scale(const Span *s, int shift, int width, bool hasshift, bool haswidth); extern SpanSet *intspanset_shift_scale(const SpanSet *ss, int shift, int width, bool hasshift, bool haswidth); +extern Span *tstzspan_expand(const Span *s, const Interval *interv); +extern Set *set_round(const Set *s, int maxdd); +extern Set *textcat_text_textset(const text *txt, const Set *s); +extern Set *textcat_textset_text(const Set *s, const text *txt); extern Set *textset_initcap(const Set *s); extern Set *textset_lower(const Set *s); extern Set *textset_upper(const Set *s); -extern Set *textcat_textset_text(const Set *s, const text *txt); -extern Set *textcat_text_textset(const text *txt, const Set *s); extern TimestampTz timestamptz_tprecision(TimestampTz t, const Interval *duration, TimestampTz torigin); extern Set *tstzset_shift_scale(const Set *s, const Interval *shift, const Interval *duration); extern Set *tstzset_tprecision(const Set *s, const Interval *duration, TimestampTz torigin); @@ -1151,7 +771,16 @@ extern bool spanset_ne(const SpanSet *ss1, const SpanSet *ss2); * Bounding box functions for set and span types *****************************************************************************/ -/* Topological functions for set and span types */ +/* Split functions */ + +extern Span *set_spans(const Set *s); +extern Span *set_split_each_n_spans(const Set *s, int elems_per_span, int *count); +extern Span *set_split_n_spans(const Set *s, int span_count, int *count); +extern Span *spanset_spans(const SpanSet *ss); +extern Span *spanset_split_each_n_spans(const SpanSet *ss, int elems_per_span, int *count); +extern Span *spanset_split_n_spans(const SpanSet *ss, int span_count, int *count); + +/* Topological functions */ extern bool adjacent_span_bigint(const Span *s, int64 i); extern bool adjacent_span_date(const Span *s, DateADT d); @@ -1176,7 +805,6 @@ extern bool contained_date_spanset(DateADT d, const SpanSet *ss); extern bool contained_float_set(double d, const Set *s); extern bool contained_float_span(double d, const Span *s); extern bool contained_float_spanset(double d, const SpanSet *ss); -extern bool contained_geo_set(GSERIALIZED *gs, const Set *s); extern bool contained_int_set(int i, const Set *s); extern bool contained_int_span(int i, const Span *s); extern bool contained_int_spanset(int i, const SpanSet *ss); @@ -1185,14 +813,13 @@ extern bool contained_span_span(const Span *s1, const Span *s2); extern bool contained_span_spanset(const Span *s, const SpanSet *ss); extern bool contained_spanset_span(const SpanSet *ss, const Span *s); extern bool contained_spanset_spanset(const SpanSet *ss1, const SpanSet *ss2); -extern bool contained_text_set(text *txt, const Set *s); +extern bool contained_text_set(const text *txt, const Set *s); extern bool contained_timestamptz_set(TimestampTz t, const Set *s); extern bool contained_timestamptz_span(TimestampTz t, const Span *s); extern bool contained_timestamptz_spanset(TimestampTz t, const SpanSet *ss); extern bool contains_set_bigint(const Set *s, int64 i); extern bool contains_set_date(const Set *s, DateADT d); extern bool contains_set_float(const Set *s, double d); -extern bool contains_set_geo(const Set *s, GSERIALIZED *gs); extern bool contains_set_int(const Set *s, int i); extern bool contains_set_set(const Set *s1, const Set *s2); extern bool contains_set_text(const Set *s, text *t); @@ -1269,7 +896,7 @@ extern bool left_spanset_float(const SpanSet *ss, double d); extern bool left_spanset_int(const SpanSet *ss, int i); extern bool left_spanset_span(const SpanSet *ss, const Span *s); extern bool left_spanset_spanset(const SpanSet *ss1, const SpanSet *ss2); -extern bool left_text_set(text *txt, const Set *s); +extern bool left_text_set(const text *txt, const Set *s); extern bool overafter_date_set(DateADT d, const Set *s); extern bool overafter_date_span(DateADT d, const Span *s); extern bool overafter_date_spanset(DateADT d, const SpanSet *ss); @@ -1318,7 +945,7 @@ extern bool overleft_spanset_float(const SpanSet *ss, double d); extern bool overleft_spanset_int(const SpanSet *ss, int i); extern bool overleft_spanset_span(const SpanSet *ss, const Span *s); extern bool overleft_spanset_spanset(const SpanSet *ss1, const SpanSet *ss2); -extern bool overleft_text_set(text *txt, const Set *s); +extern bool overleft_text_set(const text *txt, const Set *s); extern bool overright_bigint_set(int64 i, const Set *s); extern bool overright_bigint_span(int64 i, const Span *s); extern bool overright_bigint_spanset(int64 i, const SpanSet *ss); @@ -1343,7 +970,7 @@ extern bool overright_spanset_float(const SpanSet *ss, double d); extern bool overright_spanset_int(const SpanSet *ss, int i); extern bool overright_spanset_span(const SpanSet *ss, const Span *s); extern bool overright_spanset_spanset(const SpanSet *ss1, const SpanSet *ss2); -extern bool overright_text_set(text *txt, const Set *s); +extern bool overright_text_set(const text *txt, const Set *s); extern bool right_bigint_set(int64 i, const Set *s); extern bool right_bigint_span(int64 i, const Span *s); extern bool right_bigint_spanset(int64 i, const SpanSet *ss); @@ -1368,21 +995,19 @@ extern bool right_spanset_float(const SpanSet *ss, double d); extern bool right_spanset_int(const SpanSet *ss, int i); extern bool right_spanset_span(const SpanSet *ss, const Span *s); extern bool right_spanset_spanset(const SpanSet *ss1, const SpanSet *ss2); -extern bool right_text_set(text *txt, const Set *s); +extern bool right_text_set(const text *txt, const Set *s); /***************************************************************************** * Set functions for set and span types *****************************************************************************/ extern Set *intersection_bigint_set(int64 i, const Set *s); -extern Set *intersection_date_set(const DateADT d, const Set *s); +extern Set *intersection_date_set(DateADT d, const Set *s); extern Set *intersection_float_set(double d, const Set *s); -extern Set *intersection_geo_set(const GSERIALIZED *gs, const Set *s); extern Set *intersection_int_set(int i, const Set *s); extern Set *intersection_set_bigint(const Set *s, int64 i); extern Set *intersection_set_date(const Set *s, DateADT d); extern Set *intersection_set_float(const Set *s, double d); -extern Set *intersection_set_geo(const Set *s, const GSERIALIZED *gs); extern Set *intersection_set_int(const Set *s, int i); extern Set *intersection_set_set(const Set *s1, const Set *s2); extern Set *intersection_set_text(const Set *s, const text *txt); @@ -1402,7 +1027,7 @@ extern SpanSet *intersection_spanset_span(const SpanSet *ss, const Span *s); extern SpanSet *intersection_spanset_spanset(const SpanSet *ss1, const SpanSet *ss2); extern SpanSet *intersection_spanset_timestamptz(const SpanSet *ss, TimestampTz t); extern Set *intersection_text_set(const text *txt, const Set *s); -extern Set *intersection_timestamptz_set(const TimestampTz t, const Set *s); +extern Set *intersection_timestamptz_set(TimestampTz t, const Set *s); extern Set *minus_bigint_set(int64 i, const Set *s); extern SpanSet *minus_bigint_span(int64 i, const Span *s); extern SpanSet *minus_bigint_spanset(int64 i, const SpanSet *ss); @@ -1412,14 +1037,12 @@ extern SpanSet *minus_date_spanset(DateADT d, const SpanSet *ss); extern Set *minus_float_set(double d, const Set *s); extern SpanSet *minus_float_span(double d, const Span *s); extern SpanSet *minus_float_spanset(double d, const SpanSet *ss); -extern Set *minus_geo_set(const GSERIALIZED *gs, const Set *s); extern Set *minus_int_set(int i, const Set *s); extern SpanSet *minus_int_span(int i, const Span *s); extern SpanSet *minus_int_spanset(int i, const SpanSet *ss); extern Set *minus_set_bigint(const Set *s, int64 i); extern Set *minus_set_date(const Set *s, DateADT d); extern Set *minus_set_float(const Set *s, double d); -extern Set *minus_set_geo(const Set *s, const GSERIALIZED *gs); extern Set *minus_set_int(const Set *s, int i); extern Set *minus_set_set(const Set *s1, const Set *s2); extern Set *minus_set_text(const Set *s, const text *txt); @@ -1445,24 +1068,22 @@ extern SpanSet *minus_timestamptz_spanset(TimestampTz t, const SpanSet *ss); extern Set *union_bigint_set(int64 i, const Set *s); extern SpanSet *union_bigint_span(const Span *s, int64 i); extern SpanSet *union_bigint_spanset(int64 i, SpanSet *ss); -extern Set *union_date_set(const DateADT d, const Set *s); +extern Set *union_date_set(DateADT d, const Set *s); extern SpanSet *union_date_span(const Span *s, DateADT d); extern SpanSet *union_date_spanset(DateADT d, SpanSet *ss); extern Set *union_float_set(double d, const Set *s); extern SpanSet *union_float_span(const Span *s, double d); extern SpanSet *union_float_spanset(double d, SpanSet *ss); -extern Set *union_geo_set(const GSERIALIZED *gs, const Set *s); extern Set *union_int_set(int i, const Set *s); extern SpanSet *union_int_span(int i, const Span *s); extern SpanSet *union_int_spanset(int i, SpanSet *ss); extern Set *union_set_bigint(const Set *s, int64 i); extern Set *union_set_date(const Set *s, DateADT d); extern Set *union_set_float(const Set *s, double d); -extern Set *union_set_geo(const Set *s, const GSERIALIZED *gs); extern Set *union_set_int(const Set *s, int i); extern Set *union_set_set(const Set *s1, const Set *s2); extern Set *union_set_text(const Set *s, const text *txt); -extern Set *union_set_timestamptz(const Set *s, const TimestampTz t); +extern Set *union_set_timestamptz(const Set *s, TimestampTz t); extern SpanSet *union_span_bigint(const Span *s, int64 i); extern SpanSet *union_span_date(const Span *s, DateADT d); extern SpanSet *union_span_float(const Span *s, double d); @@ -1478,7 +1099,7 @@ extern SpanSet *union_spanset_span(const SpanSet *ss, const Span *s); extern SpanSet *union_spanset_spanset(const SpanSet *ss1, const SpanSet *ss2); extern SpanSet *union_spanset_timestamptz(const SpanSet *ss, TimestampTz t); extern Set *union_text_set(const text *txt, const Set *s); -extern Set *union_timestamptz_set(const TimestampTz t, const Set *s); +extern Set *union_timestamptz_set(TimestampTz t, const Set *s); extern SpanSet *union_timestamptz_span(TimestampTz t, const Span *s); extern SpanSet *union_timestamptz_spanset(TimestampTz t, SpanSet *ss); @@ -1546,41 +1167,51 @@ extern Set *text_union_transfn(Set *state, const text *txt); extern Span *timestamptz_extent_transfn(Span *state, TimestampTz t); extern Set *timestamptz_union_transfn(Set *state, TimestampTz t); +/***************************************************************************** + * Bin functions for span and spanset types + *****************************************************************************/ + +extern int64 bigint_get_bin(int64 value, int64 vsize, int64 vorigin); +extern Span *bigintspan_bins(const Span *s, int64 vsize, int64 vorigin, int *count); +extern Span *bigintspanset_bins(const SpanSet *ss, int64 vsize, int64 vorigin, int *count); +extern DateADT date_get_bin(DateADT d, const Interval *duration, DateADT torigin); +extern Span *datespan_bins(const Span *s, const Interval *duration, DateADT torigin, int *count); +extern Span *datespanset_bins(const SpanSet *ss, const Interval *duration, DateADT torigin, int *count); +extern double float_get_bin(double value, double vsize, double vorigin); +extern Span *floatspan_bins(const Span *s, double vsize, double vorigin, int *count); +extern Span *floatspanset_bins(const SpanSet *ss, double vsize, double vorigin, int *count); +extern int int_get_bin(int value, int vsize, int vorigin); +extern Span *intspan_bins(const Span *s, int vsize, int vorigin, int *count); +extern Span *intspanset_bins(const SpanSet *ss, int vsize, int vorigin, int *count); +extern TimestampTz timestamptz_get_bin(TimestampTz t, const Interval *duration, TimestampTz torigin); +extern Span *tstzspan_bins(const Span *s, const Interval *duration, TimestampTz origin, int *count); +extern Span *tstzspanset_bins(const SpanSet *ss, const Interval *duration, TimestampTz torigin, int *count); + /*===========================================================================* - * Functions for box types + * Functions for temporal boxes *===========================================================================*/ /***************************************************************************** * Input and output functions for box types *****************************************************************************/ +extern char *tbox_as_hexwkb(const TBox *box, uint8_t variant, size_t *size); +extern uint8_t *tbox_as_wkb(const TBox *box, uint8_t variant, size_t *size_out); +extern TBox *tbox_from_hexwkb(const char *hexwkb); +extern TBox *tbox_from_wkb(const uint8_t *wkb, size_t size); extern TBox *tbox_in(const char *str); extern char *tbox_out(const TBox *box, int maxdd); -extern TBox *tbox_from_wkb(const uint8_t *wkb, size_t size); -extern TBox *tbox_from_hexwkb(const char *hexwkb); -extern STBox *stbox_from_wkb(const uint8_t *wkb, size_t size); -extern STBox *stbox_from_hexwkb(const char *hexwkb); -extern uint8_t *tbox_as_wkb(const TBox *box, uint8_t variant, size_t *size_out); -extern char *tbox_as_hexwkb(const TBox *box, uint8_t variant, size_t *size); -extern uint8_t *stbox_as_wkb(const STBox *box, uint8_t variant, size_t *size_out); -extern char *stbox_as_hexwkb(const STBox *box, uint8_t variant, size_t *size); -extern STBox *stbox_in(const char *str); -extern char *stbox_out(const STBox *box, int maxdd); /***************************************************************************** * Constructor functions for box types *****************************************************************************/ -extern TBox *float_tstzspan_to_tbox(double d, const Span *s); extern TBox *float_timestamptz_to_tbox(double d, TimestampTz t); -extern STBox *geo_tstzspan_to_stbox(const GSERIALIZED *gs, const Span *s); -extern STBox *geo_timestamptz_to_stbox(const GSERIALIZED *gs, TimestampTz t); -extern TBox *int_tstzspan_to_tbox(int i, const Span *s); +extern TBox *float_tstzspan_to_tbox(double d, const Span *s); extern TBox *int_timestamptz_to_tbox(int i, TimestampTz t); +extern TBox *int_tstzspan_to_tbox(int i, const Span *s); extern TBox *numspan_tstzspan_to_tbox(const Span *span, const Span *s); extern TBox *numspan_timestamptz_to_tbox(const Span *span, TimestampTz t); -extern STBox *stbox_copy(const STBox *box); -extern STBox *stbox_make(bool hasx, bool hasz, bool geodetic, int32 srid, double xmin, double xmax, double ymin, double ymax, double zmin, double zmax, const Span *s); extern TBox *tbox_copy(const TBox *box); extern TBox *tbox_make(const Span *s, const Span *p); @@ -1589,46 +1220,21 @@ extern TBox *tbox_make(const Span *s, const Span *p); *****************************************************************************/ extern TBox *float_to_tbox(double d); -extern STBox *geo_to_stbox(const GSERIALIZED *gs); extern TBox *int_to_tbox(int i); extern TBox *set_to_tbox(const Set *s); extern TBox *span_to_tbox(const Span *s); extern TBox *spanset_to_tbox(const SpanSet *ss); -extern STBox *spatialset_to_stbox(const Set *s); -extern GBOX *stbox_to_gbox(const STBox *box); -extern BOX3D *stbox_to_box3d(const STBox *box); -extern GSERIALIZED *stbox_to_geo(const STBox *box); -extern Span *stbox_to_tstzspan(const STBox *box); extern Span *tbox_to_intspan(const TBox *box); extern Span *tbox_to_floatspan(const TBox *box); extern Span *tbox_to_tstzspan(const TBox *box); -extern STBox *timestamptz_to_stbox(TimestampTz t); extern TBox *timestamptz_to_tbox(TimestampTz t); -extern STBox *tstzset_to_stbox(const Set *s); -extern STBox *tstzspan_to_stbox(const Span *s); -extern STBox *tstzspanset_to_stbox(const SpanSet *ss); -extern TBox *tnumber_to_tbox(const Temporal *temp); -extern STBox *tpoint_to_stbox(const Temporal *temp); /***************************************************************************** * Accessor functions for box types *****************************************************************************/ -extern bool stbox_hast(const STBox *box); -extern bool stbox_hasx(const STBox *box); -extern bool stbox_hasz(const STBox *box); -extern bool stbox_isgeodetic(const STBox *box); -extern int32 stbox_srid(const STBox *box); -extern bool stbox_tmax(const STBox *box, TimestampTz *result); -extern bool stbox_tmax_inc(const STBox *box, bool *result); -extern bool stbox_tmin(const STBox *box, TimestampTz *result); -extern bool stbox_tmin_inc(const STBox *box, bool *result); -extern bool stbox_xmax(const STBox *box, double *result); -extern bool stbox_xmin(const STBox *box, double *result); -extern bool stbox_ymax(const STBox *box, double *result); -extern bool stbox_ymin(const STBox *box, double *result); -extern bool stbox_zmax(const STBox *box, double *result); -extern bool stbox_zmin(const STBox *box, double *result); +extern uint32 tbox_hash(const TBox *box); +extern uint64 tbox_hash_extended(const TBox *box, uint64 seed); extern bool tbox_hast(const TBox *box); extern bool tbox_hasx(const TBox *box); extern bool tbox_tmax(const TBox *box, TimestampTz *result); @@ -1648,22 +1254,13 @@ extern bool tboxint_xmin(const TBox *box, int *result); * Transformation functions for box types *****************************************************************************/ -extern STBox *stbox_expand_space(const STBox *box, double d); -extern STBox *stbox_expand_time(const STBox *box, const Interval *interv); -extern STBox *stbox_get_space(const STBox *box); -extern STBox *stbox_quad_split(const STBox *box, int *count); -extern STBox *stbox_round(const STBox *box, int maxdd); -extern STBox *stbox_set_srid(const STBox *box, int32 srid); -extern STBox *stbox_shift_scale_time(const STBox *box, const Interval *shift, const Interval *duration); -extern STBox *stbox_transform(const STBox *box, int32 srid); -extern STBox *stbox_transform_pipeline(const STBox *box, char *pipelinestr, int32 srid, bool is_forward); extern TBox *tbox_expand_time(const TBox *box, const Interval *interv); -extern TBox *tbox_expand_float(const TBox *box, const double d); -extern TBox *tbox_expand_int(const TBox *box, const int i); extern TBox *tbox_round(const TBox *box, int maxdd); -extern TBox *tbox_shift_scale_float(const TBox *box, double shift, double width, bool hasshift, bool haswidth); -extern TBox *tbox_shift_scale_int(const TBox *box, int shift, int width, bool hasshift, bool haswidth); extern TBox *tbox_shift_scale_time(const TBox *box, const Interval *shift, const Interval *duration); +extern TBox *tfloatbox_expand(const TBox *box, double d); +extern TBox *tfloatbox_shift_scale(const TBox *box, double shift, double width, bool hasshift, bool haswidth); +extern TBox *tintbox_expand(const TBox *box, int i); +extern TBox *tintbox_shift_scale(const TBox *box, int shift, int width, bool hasshift, bool haswidth); /***************************************************************************** * Set functions for box types @@ -1671,8 +1268,6 @@ extern TBox *tbox_shift_scale_time(const TBox *box, const Interval *shift, const extern TBox *union_tbox_tbox(const TBox *box1, const TBox *box2, bool strict); extern TBox *intersection_tbox_tbox(const TBox *box1, const TBox *box2); -extern STBox *union_stbox_stbox(const STBox *box1, const STBox *box2, bool strict); -extern STBox *intersection_stbox_stbox(const STBox *box1, const STBox *box2); /***************************************************************************** * Bounding box functions for box types @@ -1680,64 +1275,36 @@ extern STBox *intersection_stbox_stbox(const STBox *box1, const STBox *box2); /* Topological functions for box types */ -extern bool adjacent_stbox_stbox(const STBox *box1, const STBox *box2); extern bool adjacent_tbox_tbox(const TBox *box1, const TBox *box2); extern bool contained_tbox_tbox(const TBox *box1, const TBox *box2); -extern bool contained_stbox_stbox(const STBox *box1, const STBox *box2); -extern bool contains_stbox_stbox(const STBox *box1, const STBox *box2); extern bool contains_tbox_tbox(const TBox *box1, const TBox *box2); extern bool overlaps_tbox_tbox(const TBox *box1, const TBox *box2); -extern bool overlaps_stbox_stbox(const STBox *box1, const STBox *box2); extern bool same_tbox_tbox(const TBox *box1, const TBox *box2); -extern bool same_stbox_stbox(const STBox *box1, const STBox *box2); /*****************************************************************************/ /* Position functions for box types */ +extern bool after_tbox_tbox(const TBox *box1, const TBox *box2); +extern bool before_tbox_tbox(const TBox *box1, const TBox *box2); extern bool left_tbox_tbox(const TBox *box1, const TBox *box2); +extern bool overafter_tbox_tbox(const TBox *box1, const TBox *box2); +extern bool overbefore_tbox_tbox(const TBox *box1, const TBox *box2); extern bool overleft_tbox_tbox(const TBox *box1, const TBox *box2); -extern bool right_tbox_tbox(const TBox *box1, const TBox *box2); extern bool overright_tbox_tbox(const TBox *box1, const TBox *box2); -extern bool before_tbox_tbox(const TBox *box1, const TBox *box2); -extern bool overbefore_tbox_tbox(const TBox *box1, const TBox *box2); -extern bool after_tbox_tbox(const TBox *box1, const TBox *box2); -extern bool overafter_tbox_tbox(const TBox *box1, const TBox *box2); -extern bool left_stbox_stbox(const STBox *box1, const STBox *box2); -extern bool overleft_stbox_stbox(const STBox *box1, const STBox *box2); -extern bool right_stbox_stbox(const STBox *box1, const STBox *box2); -extern bool overright_stbox_stbox(const STBox *box1, const STBox *box2); -extern bool below_stbox_stbox(const STBox *box1, const STBox *box2); -extern bool overbelow_stbox_stbox(const STBox *box1, const STBox *box2); -extern bool above_stbox_stbox(const STBox *box1, const STBox *box2); -extern bool overabove_stbox_stbox(const STBox *box1, const STBox *box2); -extern bool front_stbox_stbox(const STBox *box1, const STBox *box2); -extern bool overfront_stbox_stbox(const STBox *box1, const STBox *box2); -extern bool back_stbox_stbox(const STBox *box1, const STBox *box2); -extern bool overback_stbox_stbox(const STBox *box1, const STBox *box2); -extern bool before_stbox_stbox(const STBox *box1, const STBox *box2); -extern bool overbefore_stbox_stbox(const STBox *box1, const STBox *box2); -extern bool after_stbox_stbox(const STBox *box1, const STBox *box2); -extern bool overafter_stbox_stbox(const STBox *box1, const STBox *box2); +extern bool right_tbox_tbox(const TBox *box1, const TBox *box2); /***************************************************************************** * Comparison functions for box types *****************************************************************************/ -extern bool tbox_eq(const TBox *box1, const TBox *box2); -extern bool tbox_ne(const TBox *box1, const TBox *box2); extern int tbox_cmp(const TBox *box1, const TBox *box2); -extern bool tbox_lt(const TBox *box1, const TBox *box2); -extern bool tbox_le(const TBox *box1, const TBox *box2); +extern bool tbox_eq(const TBox *box1, const TBox *box2); extern bool tbox_ge(const TBox *box1, const TBox *box2); extern bool tbox_gt(const TBox *box1, const TBox *box2); -extern bool stbox_eq(const STBox *box1, const STBox *box2); -extern bool stbox_ne(const STBox *box1, const STBox *box2); -extern int stbox_cmp(const STBox *box1, const STBox *box2); -extern bool stbox_lt(const STBox *box1, const STBox *box2); -extern bool stbox_le(const STBox *box1, const STBox *box2); -extern bool stbox_ge(const STBox *box1, const STBox *box2); -extern bool stbox_gt(const STBox *box1, const STBox *box2); +extern bool tbox_le(const TBox *box1, const TBox *box2); +extern bool tbox_lt(const TBox *box1, const TBox *box2); +extern bool tbox_ne(const TBox *box1, const TBox *box2); /*===========================================================================* * Functions for temporal types @@ -1747,31 +1314,23 @@ extern bool stbox_gt(const STBox *box1, const STBox *box2); * Input and output functions for temporal types *****************************************************************************/ +extern Temporal *tbool_from_mfjson(const char *str); extern Temporal *tbool_in(const char *str); -extern Temporal *tint_in(const char *str); +extern char *tbool_out(const Temporal *temp); +extern char *temporal_as_hexwkb(const Temporal *temp, uint8_t variant, size_t *size_out); +extern char *temporal_as_mfjson(const Temporal *temp, bool with_bbox, int flags, int precision, const char *srs); +extern uint8_t *temporal_as_wkb(const Temporal *temp, uint8_t variant, size_t *size_out); +extern Temporal *temporal_from_hexwkb(const char *hexwkb); +extern Temporal *temporal_from_wkb(const uint8_t *wkb, size_t size); +extern Temporal *tfloat_from_mfjson(const char *str); extern Temporal *tfloat_in(const char *str); -extern Temporal *ttext_in(const char *str); -extern Temporal *tgeompoint_in(const char *str); -extern Temporal *tgeogpoint_in(const char *str); -extern Temporal *tbool_from_mfjson(const char *str); +extern char *tfloat_out(const Temporal *temp, int maxdd); extern Temporal *tint_from_mfjson(const char *str); -extern Temporal *tfloat_from_mfjson(const char *str); -extern Temporal *ttext_from_mfjson(const char *str); -extern Temporal *tgeompoint_from_mfjson(const char *str); -extern Temporal *tgeogpoint_from_mfjson(const char *str); -extern Temporal *temporal_from_wkb(const uint8_t *wkb, size_t size); -extern Temporal *temporal_from_hexwkb(const char *hexwkb); - -extern char *tbool_out(const Temporal *temp); +extern Temporal *tint_in(const char *str); extern char *tint_out(const Temporal *temp); -extern char *tfloat_out(const Temporal *temp, int maxdd); +extern Temporal *ttext_from_mfjson(const char *str); +extern Temporal *ttext_in(const char *str); extern char *ttext_out(const Temporal *temp); -extern char *tpoint_out(const Temporal *temp, int maxdd); -extern char *tpoint_as_text(const Temporal *temp, int maxdd); -extern char *tpoint_as_ewkt(const Temporal *temp, int maxdd); -extern char *temporal_as_mfjson(const Temporal *temp, bool with_bbox, int flags, int precision, char *srs); -extern uint8_t *temporal_as_wkb(const Temporal *temp, uint8_t variant, size_t *size_out); -extern char *temporal_as_hexwkb(const Temporal *temp, uint8_t variant, size_t *size_out); /***************************************************************************** * Constructor functions for temporal types @@ -1785,36 +1344,33 @@ extern TSequenceSet *tboolseqset_from_base_tstzspanset(bool b, const SpanSet *ss extern Temporal *temporal_copy(const Temporal *temp); extern Temporal *tfloat_from_base_temp(double d, const Temporal *temp); extern TInstant *tfloatinst_make(double d, TimestampTz t); -extern TSequence *tfloatseq_from_base_tstzspan(double d, const Span *s, interpType interp); extern TSequence *tfloatseq_from_base_tstzset(double d, const Set *s); +extern TSequence *tfloatseq_from_base_tstzspan(double d, const Span *s, interpType interp); extern TSequenceSet *tfloatseqset_from_base_tstzspanset(double d, const SpanSet *ss, interpType interp); extern Temporal *tint_from_base_temp(int i, const Temporal *temp); extern TInstant *tintinst_make(int i, TimestampTz t); -extern TSequence *tintseq_from_base_tstzspan(int i, const Span *s); extern TSequence *tintseq_from_base_tstzset(int i, const Set *s); +extern TSequence *tintseq_from_base_tstzspan(int i, const Span *s); extern TSequenceSet *tintseqset_from_base_tstzspanset(int i, const SpanSet *ss); -extern Temporal *tpoint_from_base_temp(const GSERIALIZED *gs, const Temporal *temp); -extern TInstant *tpointinst_make(const GSERIALIZED *gs, TimestampTz t); -extern TSequence *tpointseq_from_base_tstzspan(const GSERIALIZED *gs, const Span *s, interpType interp); -extern TSequence *tpointseq_from_base_tstzset(const GSERIALIZED *gs, const Set *s); -extern TSequenceSet *tpointseqset_from_base_tstzspanset(const GSERIALIZED *gs, const SpanSet *ss, interpType interp); -extern TSequence *tsequence_make(const TInstant **instants, int count, bool lower_inc, bool upper_inc, interpType interp, bool normalize); -extern TSequenceSet *tsequenceset_make(const TSequence **sequences, int count, bool normalize); -extern TSequenceSet *tsequenceset_make_gaps(const TInstant **instants, int count, interpType interp, Interval *maxt, double maxdist); +extern TSequence *tsequence_make(TInstant **instants, int count, bool lower_inc, bool upper_inc, interpType interp, bool normalize); +extern TSequenceSet *tsequenceset_make(TSequence **sequences, int count, bool normalize); +extern TSequenceSet *tsequenceset_make_gaps(TInstant **instants, int count, interpType interp, const Interval *maxt, double maxdist); extern Temporal *ttext_from_base_temp(const text *txt, const Temporal *temp); extern TInstant *ttextinst_make(const text *txt, TimestampTz t); -extern TSequence *ttextseq_from_base_tstzspan(const text *txt, const Span *s); extern TSequence *ttextseq_from_base_tstzset(const text *txt, const Set *s); +extern TSequence *ttextseq_from_base_tstzspan(const text *txt, const Span *s); extern TSequenceSet *ttextseqset_from_base_tstzspanset(const text *txt, const SpanSet *ss); /***************************************************************************** * Conversion functions for temporal types *****************************************************************************/ +extern Temporal *tbool_to_tint(const Temporal *temp); extern Span *temporal_to_tstzspan(const Temporal *temp); extern Temporal *tfloat_to_tint(const Temporal *temp); extern Temporal *tint_to_tfloat(const Temporal *temp); extern Span *tnumber_to_span(const Temporal *temp); +extern TBox *tnumber_to_tbox (const Temporal *temp); /***************************************************************************** * Accessor functions for temporal types @@ -1833,27 +1389,29 @@ extern uint32 temporal_hash(const Temporal *temp); extern TInstant *temporal_instant_n(const Temporal *temp, int n); extern TInstant **temporal_instants(const Temporal *temp, int *count); extern const char *temporal_interp(const Temporal *temp); +extern bool temporal_lower_inc(const Temporal *temp); extern TInstant *temporal_max_instant(const Temporal *temp); extern TInstant *temporal_min_instant(const Temporal *temp); extern int temporal_num_instants(const Temporal *temp); extern int temporal_num_sequences(const Temporal *temp); extern int temporal_num_timestamps(const Temporal *temp); +extern TSequenceSet *temporal_segm_duration(const Temporal *temp, const Interval *duration, bool atleast, bool strict); extern TSequence **temporal_segments(const Temporal *temp, int *count); extern TSequence *temporal_sequence_n(const Temporal *temp, int i); extern TSequence **temporal_sequences(const Temporal *temp, int *count); -extern int temporal_lower_inc(const Temporal *temp); -extern int temporal_upper_inc(const Temporal *temp); extern TInstant *temporal_start_instant(const Temporal *temp); extern TSequence *temporal_start_sequence(const Temporal *temp); extern TimestampTz temporal_start_timestamptz(const Temporal *temp); extern TSequenceSet *temporal_stops(const Temporal *temp, double maxdist, const Interval *minduration); extern const char *temporal_subtype(const Temporal *temp); extern SpanSet *temporal_time(const Temporal *temp); -extern bool temporal_timestamptz_n(const Temporal *temp, int n, TimestampTz *result); extern TimestampTz *temporal_timestamps(const Temporal *temp, int *count); +extern bool temporal_timestamptz_n(const Temporal *temp, int n, TimestampTz *result); +extern bool temporal_upper_inc(const Temporal *temp); +extern double tfloat_avg_value(const Temporal *temp); extern double tfloat_end_value(const Temporal *temp); -extern double tfloat_max_value(const Temporal *temp); extern double tfloat_min_value(const Temporal *temp); +extern double tfloat_max_value(const Temporal *temp); extern double tfloat_start_value(const Temporal *temp); extern bool tfloat_value_at_timestamptz(const Temporal *temp, TimestampTz t, bool strict, double *value); extern bool tfloat_value_n(const Temporal *temp, int n, double *result); @@ -1865,14 +1423,10 @@ extern int tint_start_value(const Temporal *temp); extern bool tint_value_at_timestamptz(const Temporal *temp, TimestampTz t, bool strict, int *value); extern bool tint_value_n(const Temporal *temp, int n, int *result); extern int *tint_values(const Temporal *temp, int *count); +extern double tnumber_avg_value(const Temporal *temp); extern double tnumber_integral(const Temporal *temp); extern double tnumber_twavg(const Temporal *temp); extern SpanSet *tnumber_valuespans(const Temporal *temp); -extern GSERIALIZED *tpoint_end_value(const Temporal *temp); -extern GSERIALIZED *tpoint_start_value(const Temporal *temp); -extern bool tpoint_value_at_timestamptz(const Temporal *temp, TimestampTz t, bool strict, GSERIALIZED **value); -extern bool tpoint_value_n(const Temporal *temp, int n, GSERIALIZED **result); -extern GSERIALIZED **tpoint_values(const Temporal *temp, int *count); extern text *ttext_end_value(const Temporal *temp); extern text *ttext_max_value(const Temporal *temp); extern text *ttext_min_value(const Temporal *temp); @@ -1886,42 +1440,36 @@ extern text **ttext_values(const Temporal *temp, int *count); *****************************************************************************/ extern double float_degrees(double value, bool normalize); +extern Temporal **temparr_round(Temporal **temp, int count, int maxdd); +extern Temporal *temporal_round(const Temporal *temp, int maxdd); extern Temporal *temporal_scale_time(const Temporal *temp, const Interval *duration); extern Temporal *temporal_set_interp(const Temporal *temp, interpType interp); extern Temporal *temporal_shift_scale_time(const Temporal *temp, const Interval *shift, const Interval *duration); extern Temporal *temporal_shift_time(const Temporal *temp, const Interval *shift); extern TInstant *temporal_to_tinstant(const Temporal *temp); -extern TSequence *temporal_to_tsequence(const Temporal *temp, char *interp_str); -extern TSequenceSet *temporal_to_tsequenceset(const Temporal *temp, char *interp_str); -extern Temporal *tfloat_floor(const Temporal *temp); +extern TSequence *temporal_to_tsequence(const Temporal *temp, interpType interp); +extern TSequenceSet *temporal_to_tsequenceset(const Temporal *temp, interpType interp); extern Temporal *tfloat_ceil(const Temporal *temp); extern Temporal *tfloat_degrees(const Temporal *temp, bool normalize); +extern Temporal *tfloat_floor(const Temporal *temp); extern Temporal *tfloat_radians(const Temporal *temp); -extern Temporal *tfloat_round(const Temporal *temp, int maxdd); extern Temporal *tfloat_scale_value(const Temporal *temp, double width); extern Temporal *tfloat_shift_scale_value(const Temporal *temp, double shift, double width); extern Temporal *tfloat_shift_value(const Temporal *temp, double shift); -extern Temporal **tfloatarr_round(const Temporal **temp, int count, int maxdd); extern Temporal *tint_scale_value(const Temporal *temp, int width); extern Temporal *tint_shift_scale_value(const Temporal *temp, int shift, int width); extern Temporal *tint_shift_value(const Temporal *temp, int shift); -extern Temporal *tpoint_round(const Temporal *temp, int maxdd); -extern Temporal *tpoint_transform(const Temporal *temp, int32 srid); -extern Temporal *tpoint_transform_pipeline(const Temporal *temp, char *pipelinestr, int32 srid, bool is_forward); -extern Temporal *tpoint_transform_pj(const Temporal *temp, int32 srid, const LWPROJ *pj); -extern LWPROJ *lwproj_transform(int32 srid_from, int32 srid_to); -extern Temporal **tpointarr_round(const Temporal **temp, int count, int maxdd); /***************************************************************************** * Modification functions for temporal types *****************************************************************************/ -extern Temporal *temporal_append_tinstant(Temporal *temp, const TInstant *inst, double maxdist, Interval *maxt, bool expand); +extern Temporal *temporal_append_tinstant(Temporal *temp, const TInstant *inst, interpType interp, double maxdist, const Interval *maxt, bool expand); extern Temporal *temporal_append_tsequence(Temporal *temp, const TSequence *seq, bool expand); -extern Temporal *temporal_delete_tstzspan(const Temporal *temp, const Span *s, bool connect); -extern Temporal *temporal_delete_tstzspanset(const Temporal *temp, const SpanSet *ss, bool connect); extern Temporal *temporal_delete_timestamptz(const Temporal *temp, TimestampTz t, bool connect); extern Temporal *temporal_delete_tstzset(const Temporal *temp, const Set *s, bool connect); +extern Temporal *temporal_delete_tstzspan(const Temporal *temp, const Span *s, bool connect); +extern Temporal *temporal_delete_tstzspanset(const Temporal *temp, const SpanSet *ss, bool connect); extern Temporal *temporal_insert(const Temporal *temp1, const Temporal *temp2, bool connect); extern Temporal *temporal_merge(const Temporal *temp1, const Temporal *temp2); extern Temporal *temporal_merge_array(Temporal **temparr, int count); @@ -1933,19 +1481,21 @@ extern Temporal *temporal_update(const Temporal *temp1, const Temporal *temp2, b extern Temporal *tbool_at_value(const Temporal *temp, bool b); extern Temporal *tbool_minus_value(const Temporal *temp, bool b); +extern Temporal *temporal_after_timestamptz(const Temporal *temp, TimestampTz t, bool strict); extern Temporal *temporal_at_max(const Temporal *temp); extern Temporal *temporal_at_min(const Temporal *temp); -extern Temporal *temporal_at_tstzspan(const Temporal *temp, const Span *s); -extern Temporal *temporal_at_tstzspanset(const Temporal *temp, const SpanSet *ss); extern Temporal *temporal_at_timestamptz(const Temporal *temp, TimestampTz t); extern Temporal *temporal_at_tstzset(const Temporal *temp, const Set *s); +extern Temporal *temporal_at_tstzspan(const Temporal *temp, const Span *s); +extern Temporal *temporal_at_tstzspanset(const Temporal *temp, const SpanSet *ss); extern Temporal *temporal_at_values(const Temporal *temp, const Set *set); +extern Temporal *temporal_before_timestamptz(const Temporal *temp, TimestampTz t, bool strict); extern Temporal *temporal_minus_max(const Temporal *temp); extern Temporal *temporal_minus_min(const Temporal *temp); -extern Temporal *temporal_minus_tstzspan(const Temporal *temp, const Span *s); -extern Temporal *temporal_minus_tstzspanset(const Temporal *temp, const SpanSet *ss); extern Temporal *temporal_minus_timestamptz(const Temporal *temp, TimestampTz t); extern Temporal *temporal_minus_tstzset(const Temporal *temp, const Set *s); +extern Temporal *temporal_minus_tstzspan(const Temporal *temp, const Span *s); +extern Temporal *temporal_minus_tstzspanset(const Temporal *temp, const SpanSet *ss); extern Temporal *temporal_minus_values(const Temporal *temp, const Set *set); extern Temporal *tfloat_at_value(const Temporal *temp, double d); extern Temporal *tfloat_minus_value(const Temporal *temp, double d); @@ -1957,12 +1507,6 @@ extern Temporal *tnumber_at_tbox(const Temporal *temp, const TBox *box); extern Temporal *tnumber_minus_span(const Temporal *temp, const Span *span); extern Temporal *tnumber_minus_spanset(const Temporal *temp, const SpanSet *ss); extern Temporal *tnumber_minus_tbox(const Temporal *temp, const TBox *box); -extern Temporal *tpoint_at_geom_time(const Temporal *temp, const GSERIALIZED *gs, const Span *zspan, const Span *period); -extern Temporal *tpoint_at_stbox(const Temporal *temp, const STBox *box, bool border_inc); -extern Temporal *tpoint_at_value(const Temporal *temp, GSERIALIZED *gs); -extern Temporal *tpoint_minus_geom_time(const Temporal *temp, const GSERIALIZED *gs, const Span *zspan, const Span *period); -extern Temporal *tpoint_minus_stbox(const Temporal *temp, const STBox *box, bool border_inc); -extern Temporal *tpoint_minus_value(const Temporal *temp, GSERIALIZED *gs); extern Temporal *ttext_at_value(const Temporal *temp, text *txt); extern Temporal *ttext_minus_value(const Temporal *temp, text *txt); @@ -1987,27 +1531,12 @@ extern bool temporal_ne(const Temporal *temp1, const Temporal *temp2); extern int always_eq_bool_tbool(bool b, const Temporal *temp); extern int always_eq_float_tfloat(double d, const Temporal *temp); extern int always_eq_int_tint(int i, const Temporal *temp); -extern int always_eq_point_tpoint(const GSERIALIZED *gs, const Temporal *temp); extern int always_eq_tbool_bool(const Temporal *temp, bool b); extern int always_eq_temporal_temporal(const Temporal *temp1, const Temporal *temp2); extern int always_eq_text_ttext(const text *txt, const Temporal *temp); extern int always_eq_tfloat_float(const Temporal *temp, double d); extern int always_eq_tint_int(const Temporal *temp, int i); -extern int always_eq_tpoint_point(const Temporal *temp, const GSERIALIZED *gs); -extern int always_eq_tpoint_tpoint(const Temporal *temp1, const Temporal *temp2); extern int always_eq_ttext_text(const Temporal *temp, const text *txt); -extern int always_ne_bool_tbool(bool b, const Temporal *temp); -extern int always_ne_float_tfloat(double d, const Temporal *temp); -extern int always_ne_int_tint(int i, const Temporal *temp); -extern int always_ne_point_tpoint(const GSERIALIZED *gs, const Temporal *temp); -extern int always_ne_tbool_bool(const Temporal *temp, bool b); -extern int always_ne_temporal_temporal(const Temporal *temp1, const Temporal *temp2); -extern int always_ne_text_ttext(const text *txt, const Temporal *temp); -extern int always_ne_tfloat_float(const Temporal *temp, double d); -extern int always_ne_tint_int(const Temporal *temp, int i); -extern int always_ne_tpoint_point(const Temporal *temp, const GSERIALIZED *gs); -extern int always_ne_tpoint_tpoint(const Temporal *temp1, const Temporal *temp2); -extern int always_ne_ttext_text(const Temporal *temp, const text *txt); extern int always_ge_float_tfloat(double d, const Temporal *temp); extern int always_ge_int_tint(int i, const Temporal *temp); extern int always_ge_temporal_temporal(const Temporal *temp1, const Temporal *temp2); @@ -2036,17 +1565,23 @@ extern int always_lt_text_ttext(const text *txt, const Temporal *temp); extern int always_lt_tfloat_float(const Temporal *temp, double d); extern int always_lt_tint_int(const Temporal *temp, int i); extern int always_lt_ttext_text(const Temporal *temp, const text *txt); +extern int always_ne_bool_tbool(bool b, const Temporal *temp); +extern int always_ne_float_tfloat(double d, const Temporal *temp); +extern int always_ne_int_tint(int i, const Temporal *temp); +extern int always_ne_tbool_bool(const Temporal *temp, bool b); +extern int always_ne_temporal_temporal(const Temporal *temp1, const Temporal *temp2); +extern int always_ne_text_ttext(const text *txt, const Temporal *temp); +extern int always_ne_tfloat_float(const Temporal *temp, double d); +extern int always_ne_tint_int(const Temporal *temp, int i); +extern int always_ne_ttext_text(const Temporal *temp, const text *txt); extern int ever_eq_bool_tbool(bool b, const Temporal *temp); extern int ever_eq_float_tfloat(double d, const Temporal *temp); extern int ever_eq_int_tint(int i, const Temporal *temp); -extern int ever_eq_point_tpoint(const GSERIALIZED *gs, const Temporal *temp); extern int ever_eq_tbool_bool(const Temporal *temp, bool b); extern int ever_eq_temporal_temporal(const Temporal *temp1, const Temporal *temp2); extern int ever_eq_text_ttext(const text *txt, const Temporal *temp); extern int ever_eq_tfloat_float(const Temporal *temp, double d); extern int ever_eq_tint_int(const Temporal *temp, int i); -extern int ever_eq_tpoint_point(const Temporal *temp, const GSERIALIZED *gs); -extern int ever_eq_tpoint_tpoint(const Temporal *temp1, const Temporal *temp2); extern int ever_eq_ttext_text(const Temporal *temp, const text *txt); extern int ever_ge_float_tfloat(double d, const Temporal *temp); extern int ever_ge_int_tint(int i, const Temporal *temp); @@ -2079,14 +1614,11 @@ extern int ever_lt_ttext_text(const Temporal *temp, const text *txt); extern int ever_ne_bool_tbool(bool b, const Temporal *temp); extern int ever_ne_float_tfloat(double d, const Temporal *temp); extern int ever_ne_int_tint(int i, const Temporal *temp); -extern int ever_ne_point_tpoint(const GSERIALIZED *gs, const Temporal *temp); extern int ever_ne_tbool_bool(const Temporal *temp, bool b); extern int ever_ne_temporal_temporal(const Temporal *temp1, const Temporal *temp2); extern int ever_ne_text_ttext(const text *txt, const Temporal *temp); extern int ever_ne_tfloat_float(const Temporal *temp, double d); extern int ever_ne_tint_int(const Temporal *temp, int i); -extern int ever_ne_tpoint_point(const Temporal *temp, const GSERIALIZED *gs); -extern int ever_ne_tpoint_tpoint(const Temporal *temp1, const Temporal *temp2); extern int ever_ne_ttext_text(const Temporal *temp, const text *txt); /*****************************************************************************/ @@ -2096,12 +1628,10 @@ extern int ever_ne_ttext_text(const Temporal *temp, const text *txt); extern Temporal *teq_bool_tbool(bool b, const Temporal *temp); extern Temporal *teq_float_tfloat(double d, const Temporal *temp); extern Temporal *teq_int_tint(int i, const Temporal *temp); -extern Temporal *teq_point_tpoint(const GSERIALIZED *gs, const Temporal *temp); extern Temporal *teq_tbool_bool(const Temporal *temp, bool b); extern Temporal *teq_temporal_temporal(const Temporal *temp1, const Temporal *temp2); extern Temporal *teq_text_ttext(const text *txt, const Temporal *temp); extern Temporal *teq_tfloat_float(const Temporal *temp, double d); -extern Temporal *teq_tpoint_point(const Temporal *temp, const GSERIALIZED *gs); extern Temporal *teq_tint_int(const Temporal *temp, int i); extern Temporal *teq_ttext_text(const Temporal *temp, const text *txt); extern Temporal *tge_float_tfloat(double d, const Temporal *temp); @@ -2135,12 +1665,10 @@ extern Temporal *tlt_ttext_text(const Temporal *temp, const text *txt); extern Temporal *tne_bool_tbool(bool b, const Temporal *temp); extern Temporal *tne_float_tfloat(double d, const Temporal *temp); extern Temporal *tne_int_tint(int i, const Temporal *temp); -extern Temporal *tne_point_tpoint(const GSERIALIZED *gs, const Temporal *temp); extern Temporal *tne_tbool_bool(const Temporal *temp, bool b); extern Temporal *tne_temporal_temporal(const Temporal *temp1, const Temporal *temp2); extern Temporal *tne_text_ttext(const text *txt, const Temporal *temp); extern Temporal *tne_tfloat_float(const Temporal *temp, double d); -extern Temporal *tne_tpoint_point(const Temporal *temp, const GSERIALIZED *gs); extern Temporal *tne_tint_int(const Temporal *temp, int i); extern Temporal *tne_ttext_text(const Temporal *temp, const text *txt); @@ -2148,160 +1676,106 @@ extern Temporal *tne_ttext_text(const Temporal *temp, const text *txt); * Bounding box functions for temporal types *****************************************************************************/ +/* Split functions */ + +extern Span *temporal_spans(const Temporal *temp, int *count); +extern Span *temporal_split_each_n_spans(const Temporal *temp, int elem_count, int *count); +extern Span *temporal_split_n_spans(const Temporal *temp, int span_count, int *count); +extern TBox *tnumber_split_each_n_tboxes(const Temporal *temp, int elem_count, int *count); +extern TBox *tnumber_split_n_tboxes(const Temporal *temp, int box_count, int *count); +extern TBox *tnumber_tboxes(const Temporal *temp, int *count); + /* Topological functions for temporal types */ extern bool adjacent_numspan_tnumber(const Span *s, const Temporal *temp); -extern bool adjacent_stbox_tpoint(const STBox *box, const Temporal *temp); extern bool adjacent_tbox_tnumber(const TBox *box, const Temporal *temp); extern bool adjacent_temporal_temporal(const Temporal *temp1, const Temporal *temp2); extern bool adjacent_temporal_tstzspan(const Temporal *temp, const Span *s); extern bool adjacent_tnumber_numspan(const Temporal *temp, const Span *s); extern bool adjacent_tnumber_tbox(const Temporal *temp, const TBox *box); extern bool adjacent_tnumber_tnumber(const Temporal *temp1, const Temporal *temp2); -extern bool adjacent_tpoint_stbox(const Temporal *temp, const STBox *box); -extern bool adjacent_tpoint_tpoint(const Temporal *temp1, const Temporal *temp2); extern bool adjacent_tstzspan_temporal(const Span *s, const Temporal *temp); extern bool contained_numspan_tnumber(const Span *s, const Temporal *temp); -extern bool contained_stbox_tpoint(const STBox *box, const Temporal *temp); extern bool contained_tbox_tnumber(const TBox *box, const Temporal *temp); extern bool contained_temporal_temporal(const Temporal *temp1, const Temporal *temp2); extern bool contained_temporal_tstzspan(const Temporal *temp, const Span *s); extern bool contained_tnumber_numspan(const Temporal *temp, const Span *s); extern bool contained_tnumber_tbox(const Temporal *temp, const TBox *box); extern bool contained_tnumber_tnumber(const Temporal *temp1, const Temporal *temp2); -extern bool contained_tpoint_stbox(const Temporal *temp, const STBox *box); -extern bool contained_tpoint_tpoint(const Temporal *temp1, const Temporal *temp2); extern bool contained_tstzspan_temporal(const Span *s, const Temporal *temp); extern bool contains_numspan_tnumber(const Span *s, const Temporal *temp); -extern bool contains_stbox_tpoint(const STBox *box, const Temporal *temp); extern bool contains_tbox_tnumber(const TBox *box, const Temporal *temp); extern bool contains_temporal_tstzspan(const Temporal *temp, const Span *s); extern bool contains_temporal_temporal(const Temporal *temp1, const Temporal *temp2); extern bool contains_tnumber_numspan(const Temporal *temp, const Span *s); extern bool contains_tnumber_tbox(const Temporal *temp, const TBox *box); extern bool contains_tnumber_tnumber(const Temporal *temp1, const Temporal *temp2); -extern bool contains_tpoint_stbox(const Temporal *temp, const STBox *box); -extern bool contains_tpoint_tpoint(const Temporal *temp1, const Temporal *temp2); extern bool contains_tstzspan_temporal(const Span *s, const Temporal *temp); extern bool overlaps_numspan_tnumber(const Span *s, const Temporal *temp); -extern bool overlaps_stbox_tpoint(const STBox *box, const Temporal *temp); extern bool overlaps_tbox_tnumber(const TBox *box, const Temporal *temp); extern bool overlaps_temporal_temporal(const Temporal *temp1, const Temporal *temp2); extern bool overlaps_temporal_tstzspan(const Temporal *temp, const Span *s); extern bool overlaps_tnumber_numspan(const Temporal *temp, const Span *s); extern bool overlaps_tnumber_tbox(const Temporal *temp, const TBox *box); extern bool overlaps_tnumber_tnumber(const Temporal *temp1, const Temporal *temp2); -extern bool overlaps_tpoint_stbox(const Temporal *temp, const STBox *box); -extern bool overlaps_tpoint_tpoint(const Temporal *temp1, const Temporal *temp2); extern bool overlaps_tstzspan_temporal(const Span *s, const Temporal *temp); extern bool same_numspan_tnumber(const Span *s, const Temporal *temp); -extern bool same_stbox_tpoint(const STBox *box, const Temporal *temp); extern bool same_tbox_tnumber(const TBox *box, const Temporal *temp); extern bool same_temporal_temporal(const Temporal *temp1, const Temporal *temp2); extern bool same_temporal_tstzspan(const Temporal *temp, const Span *s); extern bool same_tnumber_numspan(const Temporal *temp, const Span *s); extern bool same_tnumber_tbox(const Temporal *temp, const TBox *box); extern bool same_tnumber_tnumber(const Temporal *temp1, const Temporal *temp2); -extern bool same_tpoint_stbox(const Temporal *temp, const STBox *box); -extern bool same_tpoint_tpoint(const Temporal *temp1, const Temporal *temp2); extern bool same_tstzspan_temporal(const Span *s, const Temporal *temp); /*****************************************************************************/ -/* Position box functions for temporal types */ +/* Position functions for temporal types */ -extern bool above_stbox_tpoint(const STBox *box, const Temporal *temp); -extern bool above_tpoint_stbox(const Temporal *temp, const STBox *box); -extern bool above_tpoint_tpoint(const Temporal *temp1, const Temporal *temp2); -extern bool after_stbox_tpoint(const STBox *box, const Temporal *temp); extern bool after_tbox_tnumber(const TBox *box, const Temporal *temp); extern bool after_temporal_tstzspan(const Temporal *temp, const Span *s); extern bool after_temporal_temporal(const Temporal *temp1, const Temporal *temp2); extern bool after_tnumber_tbox(const Temporal *temp, const TBox *box); extern bool after_tnumber_tnumber(const Temporal *temp1, const Temporal *temp2); -extern bool after_tpoint_stbox(const Temporal *temp, const STBox *box); -extern bool after_tpoint_tpoint(const Temporal *temp1, const Temporal *temp2); extern bool after_tstzspan_temporal(const Span *s, const Temporal *temp); -extern bool back_stbox_tpoint(const STBox *box, const Temporal *temp); -extern bool back_tpoint_stbox(const Temporal *temp, const STBox *box); -extern bool back_tpoint_tpoint(const Temporal *temp1, const Temporal *temp2); -extern bool before_stbox_tpoint(const STBox *box, const Temporal *temp); extern bool before_tbox_tnumber(const TBox *box, const Temporal *temp); extern bool before_temporal_tstzspan(const Temporal *temp, const Span *s); extern bool before_temporal_temporal(const Temporal *temp1, const Temporal *temp2); extern bool before_tnumber_tbox(const Temporal *temp, const TBox *box); extern bool before_tnumber_tnumber(const Temporal *temp1, const Temporal *temp2); -extern bool before_tpoint_stbox(const Temporal *temp, const STBox *box); -extern bool before_tpoint_tpoint(const Temporal *temp1, const Temporal *temp2); extern bool before_tstzspan_temporal(const Span *s, const Temporal *temp); -extern bool below_stbox_tpoint(const STBox *box, const Temporal *temp); -extern bool below_tpoint_stbox(const Temporal *temp, const STBox *box); -extern bool below_tpoint_tpoint(const Temporal *temp1, const Temporal *temp2); -extern bool front_stbox_tpoint(const STBox *box, const Temporal *temp); -extern bool front_tpoint_stbox(const Temporal *temp, const STBox *box); -extern bool front_tpoint_tpoint(const Temporal *temp1, const Temporal *temp2); -extern bool left_stbox_tpoint(const STBox *box, const Temporal *temp); extern bool left_tbox_tnumber(const TBox *box, const Temporal *temp); extern bool left_numspan_tnumber(const Span *s, const Temporal *temp); extern bool left_tnumber_numspan(const Temporal *temp, const Span *s); extern bool left_tnumber_tbox(const Temporal *temp, const TBox *box); extern bool left_tnumber_tnumber(const Temporal *temp1, const Temporal *temp2); -extern bool left_tpoint_stbox(const Temporal *temp, const STBox *box); -extern bool left_tpoint_tpoint(const Temporal *temp1, const Temporal *temp2); -extern bool overabove_stbox_tpoint(const STBox *box, const Temporal *temp); -extern bool overabove_tpoint_stbox(const Temporal *temp, const STBox *box); -extern bool overabove_tpoint_tpoint(const Temporal *temp1, const Temporal *temp2); -extern bool overafter_stbox_tpoint(const STBox *box, const Temporal *temp); extern bool overafter_tbox_tnumber(const TBox *box, const Temporal *temp); extern bool overafter_temporal_tstzspan(const Temporal *temp, const Span *s); extern bool overafter_temporal_temporal(const Temporal *temp1, const Temporal *temp2); extern bool overafter_tnumber_tbox(const Temporal *temp, const TBox *box); extern bool overafter_tnumber_tnumber(const Temporal *temp1, const Temporal *temp2); -extern bool overafter_tpoint_stbox(const Temporal *temp, const STBox *box); -extern bool overafter_tpoint_tpoint(const Temporal *temp1, const Temporal *temp2); extern bool overafter_tstzspan_temporal(const Span *s, const Temporal *temp); -extern bool overback_stbox_tpoint(const STBox *box, const Temporal *temp); -extern bool overback_tpoint_stbox(const Temporal *temp, const STBox *box); -extern bool overback_tpoint_tpoint(const Temporal *temp1, const Temporal *temp2); -extern bool overbefore_stbox_tpoint(const STBox *box, const Temporal *temp); extern bool overbefore_tbox_tnumber(const TBox *box, const Temporal *temp); extern bool overbefore_temporal_tstzspan(const Temporal *temp, const Span *s); extern bool overbefore_temporal_temporal(const Temporal *temp1, const Temporal *temp2); extern bool overbefore_tnumber_tbox(const Temporal *temp, const TBox *box); extern bool overbefore_tnumber_tnumber(const Temporal *temp1, const Temporal *temp2); -extern bool overbefore_tpoint_stbox(const Temporal *temp, const STBox *box); -extern bool overbefore_tpoint_tpoint(const Temporal *temp1, const Temporal *temp2); extern bool overbefore_tstzspan_temporal(const Span *s, const Temporal *temp); -extern bool overbelow_stbox_tpoint(const STBox *box, const Temporal *temp); -extern bool overbelow_tpoint_stbox(const Temporal *temp, const STBox *box); -extern bool overbelow_tpoint_tpoint(const Temporal *temp1, const Temporal *temp2); -extern bool overfront_stbox_tpoint(const STBox *box, const Temporal *temp); -extern bool overfront_tpoint_stbox(const Temporal *temp, const STBox *box); -extern bool overfront_tpoint_tpoint(const Temporal *temp1, const Temporal *temp2); extern bool overleft_numspan_tnumber(const Span *s, const Temporal *temp); -extern bool overleft_stbox_tpoint(const STBox *box, const Temporal *temp); extern bool overleft_tbox_tnumber(const TBox *box, const Temporal *temp); extern bool overleft_tnumber_numspan(const Temporal *temp, const Span *s); extern bool overleft_tnumber_tbox(const Temporal *temp, const TBox *box); extern bool overleft_tnumber_tnumber(const Temporal *temp1, const Temporal *temp2); -extern bool overleft_tpoint_stbox(const Temporal *temp, const STBox *box); -extern bool overleft_tpoint_tpoint(const Temporal *temp1, const Temporal *temp2); extern bool overright_numspan_tnumber(const Span *s, const Temporal *temp); -extern bool overright_stbox_tpoint(const STBox *box, const Temporal *temp); extern bool overright_tbox_tnumber(const TBox *box, const Temporal *temp); extern bool overright_tnumber_numspan(const Temporal *temp, const Span *s); extern bool overright_tnumber_tbox(const Temporal *temp, const TBox *box); extern bool overright_tnumber_tnumber(const Temporal *temp1, const Temporal *temp2); -extern bool overright_tpoint_stbox(const Temporal *temp, const STBox *box); -extern bool overright_tpoint_tpoint(const Temporal *temp1, const Temporal *temp2); extern bool right_numspan_tnumber(const Span *s, const Temporal *temp); -extern bool right_stbox_tpoint(const STBox *box, const Temporal *temp); extern bool right_tbox_tnumber(const TBox *box, const Temporal *temp); extern bool right_tnumber_numspan(const Temporal *temp, const Span *s); extern bool right_tnumber_tbox(const Temporal *temp, const TBox *box); extern bool right_tnumber_tnumber(const Temporal *temp1, const Temporal *temp2); -extern bool right_tpoint_stbox(const Temporal *temp, const STBox *box); -extern bool right_tpoint_tpoint(const Temporal *temp1, const Temporal *temp2); /***************************************************************************** * Boolean functions for temporal types @@ -2340,8 +1814,13 @@ extern Temporal *sub_int_tint(int i, const Temporal *tnumber); extern Temporal *sub_tfloat_float(const Temporal *tnumber, double d); extern Temporal *sub_tint_int(const Temporal *tnumber, int i); extern Temporal *sub_tnumber_tnumber(const Temporal *tnumber1, const Temporal *tnumber2); -extern Temporal *tfloat_derivative(const Temporal *temp); +extern Temporal *temporal_derivative(const Temporal *temp); +extern Temporal *tfloat_exp(const Temporal *temp); +extern Temporal *tfloat_ln(const Temporal *temp); +extern Temporal *tfloat_log10(const Temporal *temp); extern Temporal *tnumber_abs(const Temporal *temp); +extern Temporal *tnumber_trend(const Temporal *temp); +extern double float_angular_difference(double degrees1, double degrees2); extern Temporal *tnumber_angular_difference(const Temporal *temp); extern Temporal *tnumber_delta_value(const Temporal *temp); @@ -2352,109 +1831,25 @@ extern Temporal *tnumber_delta_value(const Temporal *temp); extern Temporal *textcat_text_ttext(const text *txt, const Temporal *temp); extern Temporal *textcat_ttext_text(const Temporal *temp, const text *txt); extern Temporal *textcat_ttext_ttext(const Temporal *temp1, const Temporal *temp2); +extern Temporal *ttext_initcap(const Temporal *temp); extern Temporal *ttext_upper(const Temporal *temp); extern Temporal *ttext_lower(const Temporal *temp); -extern Temporal *ttext_initcap(const Temporal *temp); /***************************************************************************** * Distance functions for temporal types *****************************************************************************/ -extern Temporal *distance_tfloat_float(const Temporal *temp, double d); -extern Temporal *distance_tint_int(const Temporal *temp, int i); -extern Temporal *distance_tnumber_tnumber(const Temporal *temp1, const Temporal *temp2); -extern Temporal *distance_tpoint_point(const Temporal *temp, const GSERIALIZED *gs); -extern Temporal *distance_tpoint_tpoint(const Temporal *temp1, const Temporal *temp2); -extern double nad_stbox_geo(const STBox *box, const GSERIALIZED *gs); -extern double nad_stbox_stbox(const STBox *box1, const STBox *box2); -extern int nad_tint_int(const Temporal *temp, int i); -extern int nad_tint_tbox(const Temporal *temp, const TBox *box); -extern int nad_tint_tint(const Temporal *temp1, const Temporal *temp2); +extern Temporal *tdistance_tfloat_float(const Temporal *temp, double d); +extern Temporal *tdistance_tint_int(const Temporal *temp, int i); +extern Temporal *tdistance_tnumber_tnumber(const Temporal *temp1, const Temporal *temp2); +extern double nad_tboxfloat_tboxfloat(const TBox *box1, const TBox *box2); extern int nad_tboxint_tboxint(const TBox *box1, const TBox *box2); extern double nad_tfloat_float(const Temporal *temp, double d); extern double nad_tfloat_tfloat(const Temporal *temp1, const Temporal *temp2); extern double nad_tfloat_tbox(const Temporal *temp, const TBox *box); -extern double nad_tboxfloat_tboxfloat(const TBox *box1, const TBox *box2); -extern double nad_tpoint_geo(const Temporal *temp, const GSERIALIZED *gs); -extern double nad_tpoint_stbox(const Temporal *temp, const STBox *box); -extern double nad_tpoint_tpoint(const Temporal *temp1, const Temporal *temp2); -extern TInstant *nai_tpoint_geo(const Temporal *temp, const GSERIALIZED *gs); -extern TInstant *nai_tpoint_tpoint(const Temporal *temp1, const Temporal *temp2); -extern GSERIALIZED *shortestline_tpoint_geo(const Temporal *temp, const GSERIALIZED *gs); -extern GSERIALIZED *shortestline_tpoint_tpoint(const Temporal *temp1, const Temporal *temp2); - -/***************************************************************************** - * Spatial functions for temporal points - *****************************************************************************/ - -/* Spatial accessor functions for temporal points */ - -extern bool bearing_point_point(const GSERIALIZED *gs1, const GSERIALIZED *gs2, double *result); -extern Temporal *bearing_tpoint_point(const Temporal *temp, const GSERIALIZED *gs, bool invert); -extern Temporal *bearing_tpoint_tpoint(const Temporal *temp1, const Temporal *temp2); -extern Temporal *tpoint_angular_difference(const Temporal *temp); -extern Temporal *tpoint_azimuth(const Temporal *temp); -extern GSERIALIZED *tpoint_convex_hull(const Temporal *temp); -extern Temporal *tpoint_cumulative_length(const Temporal *temp); -extern bool tpoint_direction(const Temporal *temp, double *result); -extern Temporal *tpoint_get_x(const Temporal *temp); -extern Temporal *tpoint_get_y(const Temporal *temp); -extern Temporal *tpoint_get_z(const Temporal *temp); -extern bool tpoint_is_simple(const Temporal *temp); -extern double tpoint_length(const Temporal *temp); -extern Temporal *tpoint_speed(const Temporal *temp); -extern int tpoint_srid(const Temporal *temp); -extern STBox *tpoint_stboxes(const Temporal *temp, int *count); -extern GSERIALIZED *tpoint_trajectory(const Temporal *temp); -extern GSERIALIZED *tpoint_twcentroid(const Temporal *temp); - -/*****************************************************************************/ - -/* Spatial transformation functions for temporal points */ - -extern STBox *geo_expand_space(const GSERIALIZED *gs, double d); -extern Temporal *geomeas_to_tpoint(const GSERIALIZED *gs); -extern Temporal *tgeogpoint_to_tgeompoint(const Temporal *temp); -extern Temporal *tgeompoint_to_tgeogpoint(const Temporal *temp); -extern bool tpoint_AsMVTGeom(const Temporal *temp, const STBox *bounds, int32_t extent, int32_t buffer, bool clip_geom, GSERIALIZED **gsarr, int64 **timesarr, int *count); -extern STBox *tpoint_expand_space(const Temporal *temp, double d); -extern Temporal **tpoint_make_simple(const Temporal *temp, int *count); -extern Temporal *tpoint_set_srid(const Temporal *temp, int32 srid); -extern bool tpoint_tfloat_to_geomeas(const Temporal *tpoint, const Temporal *measure, bool segmentize, GSERIALIZED **result); - -/*****************************************************************************/ - -/* Ever and always spatial relationship functions for temporal points */ - -extern int acontains_geo_tpoint(const GSERIALIZED *gs, const Temporal *temp); -extern int adisjoint_tpoint_geo(const Temporal *temp, const GSERIALIZED *gs); -extern int adisjoint_tpoint_tpoint(const Temporal *temp1, const Temporal *temp2); -extern int adwithin_tpoint_geo(const Temporal *temp, const GSERIALIZED *gs, double dist); -extern int adwithin_tpoint_tpoint(const Temporal *temp1, const Temporal *temp2, double dist); -extern int aintersects_tpoint_geo(const Temporal *temp, const GSERIALIZED *gs); -extern int aintersects_tpoint_tpoint(const Temporal *temp1, const Temporal *temp2); -extern int atouches_tpoint_geo(const Temporal *temp, const GSERIALIZED *gs); -extern int econtains_geo_tpoint(const GSERIALIZED *gs, const Temporal *temp); -extern int edisjoint_tpoint_geo(const Temporal *temp, const GSERIALIZED *gs); -extern int edisjoint_tpoint_tpoint(const Temporal *temp1, const Temporal *temp2); -extern int edwithin_tpoint_geo(const Temporal *temp, const GSERIALIZED *gs, double dist); -extern int edwithin_tpoint_tpoint(const Temporal *temp1, const Temporal *temp2, double dist); -extern int eintersects_tpoint_geo(const Temporal *temp, const GSERIALIZED *gs); -extern int eintersects_tpoint_tpoint(const Temporal *temp1, const Temporal *temp2); -extern int etouches_tpoint_geo(const Temporal *temp, const GSERIALIZED *gs); - -/*****************************************************************************/ - -/* Temporal spatial relationship functions for temporal points */ - -extern Temporal *tcontains_geo_tpoint(const GSERIALIZED *gs, const Temporal *temp, bool restr, bool atvalue); -extern Temporal *tdisjoint_tpoint_geo(const Temporal *temp, const GSERIALIZED *gs, bool restr, bool atvalue); -extern Temporal *tdisjoint_tpoint_tpoint (const Temporal *temp1, const Temporal *temp2, bool restr, bool atvalue); -extern Temporal *tdwithin_tpoint_geo(const Temporal *temp, const GSERIALIZED *gs, double dist, bool restr, bool atvalue); -extern Temporal *tdwithin_tpoint_tpoint(const Temporal *temp1, const Temporal *temp2, double dist, bool restr, bool atvalue); -extern Temporal *tintersects_tpoint_geo(const Temporal *temp, const GSERIALIZED *gs, bool restr, bool atvalue); -extern Temporal *tintersects_tpoint_tpoint (const Temporal *temp1, const Temporal *temp2, bool restr, bool atvalue); -extern Temporal *ttouches_tpoint_geo(const Temporal *temp, const GSERIALIZED *gs, bool restr, bool atvalue); +extern int nad_tint_int(const Temporal *temp, int i); +extern int nad_tint_tbox(const Temporal *temp, const TBox *box); +extern int nad_tint_tint(const Temporal *temp1, const Temporal *temp2); /***************************************************************************** * Aggregate functions for temporal types @@ -2463,6 +1858,8 @@ extern Temporal *ttouches_tpoint_geo(const Temporal *temp, const GSERIALIZED *gs extern SkipList *tbool_tand_transfn(SkipList *state, const Temporal *temp); extern SkipList *tbool_tor_transfn(SkipList *state, const Temporal *temp); extern Span *temporal_extent_transfn(Span *s, const Temporal *temp); +extern SkipList *temporal_merge_transfn(SkipList *state, const Temporal *temp); +extern SkipList *temporal_merge_combinefn(SkipList *state1, SkipList *state2); extern Temporal *temporal_tagg_finalfn(SkipList *state); extern SkipList *temporal_tcount_transfn(SkipList *state, const Temporal *temp); extern SkipList *tfloat_tmax_transfn(SkipList *state, const Temporal *temp); @@ -2482,9 +1879,6 @@ extern TBox *tnumber_extent_transfn(TBox *box, const Temporal *temp); extern Temporal *tnumber_tavg_finalfn(SkipList *state); extern SkipList *tnumber_tavg_transfn(SkipList *state, const Temporal *temp); extern SkipList *tnumber_wavg_transfn(SkipList *state, const Temporal *temp, const Interval *interv); -extern STBox *tpoint_extent_transfn(STBox *box, const Temporal *temp); -extern Temporal *tpoint_tcentroid_finalfn(SkipList *state); -extern SkipList *tpoint_tcentroid_transfn(SkipList *state, Temporal *temp); extern SkipList *tstzset_tcount_transfn(SkipList *state, const Set *s); extern SkipList *tstzspan_tcount_transfn(SkipList *state, const Span *s); extern SkipList *tstzspanset_tcount_transfn(SkipList *state, const SpanSet *ss); @@ -2523,26 +1917,2149 @@ extern double temporal_hausdorff_distance(const Temporal *temp1, const Temporal /* Tile functions for temporal types */ -extern double float_bucket(double value, double size, double origin); -extern Span *floatspan_bucket_list(const Span *bounds, double size, double origin, int *count); -extern int int_bucket(int value, int size, int origin); -extern Span *intspan_bucket_list(const Span *bounds, int size, int origin, int *count); -extern STBox *stbox_tile(GSERIALIZED *point, TimestampTz t, double xsize, double ysize, double zsize, Interval *duration, GSERIALIZED *sorigin, TimestampTz torigin, bool hast); -extern STBox *stbox_tile_list(const STBox *bounds, double xsize, double ysize, double zsize, const Interval *duration, GSERIALIZED *sorigin, TimestampTz torigin, bool border_inc, int *count); -extern Temporal **temporal_time_split(Temporal *temp, Interval *duration, TimestampTz torigin, TimestampTz **time_buckets, int *count); -extern Temporal **tfloat_value_split(Temporal *temp, double size, double origin, double **value_buckets, int *count); -extern Temporal **tfloat_value_time_split(Temporal *temp, double size, Interval *duration, double vorigin, TimestampTz torigin, double **value_buckets, TimestampTz **time_buckets, int *count); -extern TBox *tfloatbox_tile(double value, TimestampTz t, double vsize, Interval *duration, double vorigin, TimestampTz torigin); -extern TBox *tfloatbox_tile_list(const TBox *box, double xsize, const Interval *duration, double xorigin, TimestampTz torigin, int *count); -extern TimestampTz timestamptz_bucket(TimestampTz timestamp, const Interval *duration, TimestampTz origin); -extern Temporal **tint_value_split(Temporal *temp, int size, int origin, int **value_buckets, int *count); -extern Temporal **tint_value_time_split(Temporal *temp, int size, Interval *duration, int vorigin, TimestampTz torigin, int **value_buckets, TimestampTz **time_buckets, int *count); -extern TBox *tintbox_tile(int value, TimestampTz t, int vsize, Interval *duration, int vorigin, TimestampTz torigin); -extern TBox *tintbox_tile_list(const TBox *box, int xsize, const Interval *duration, int xorigin, TimestampTz torigin, int *count); -extern Temporal **tpoint_space_split(Temporal *temp, float xsize, float ysize, float zsize, GSERIALIZED *sorigin, bool bitmatrix, bool border_inc, GSERIALIZED ***space_buckets, int *count); -extern Temporal **tpoint_space_time_split(Temporal *temp, float xsize, float ysize, float zsize, Interval *duration, GSERIALIZED *sorigin, TimestampTz torigin, bool bitmatrix, bool border_inc, GSERIALIZED ***space_buckets, TimestampTz **time_buckets, int *count); -extern Span *tstzspan_bucket_list(const Span *bounds, const Interval *duration, TimestampTz origin, int *count); +extern Span *temporal_time_bins(const Temporal *temp, const Interval *duration, TimestampTz origin, int *count); +extern Temporal **temporal_time_split(const Temporal *temp, const Interval *duration, TimestampTz torigin, TimestampTz **time_bins, int *count); +extern TBox *tfloat_time_boxes(const Temporal *temp, const Interval *duration, TimestampTz torigin, int *count); +extern Span *tfloat_value_bins(const Temporal *temp, double vsize, double vorigin, int *count); +extern TBox *tfloat_value_boxes(const Temporal *temp, double vsize, double vorigin, int *count); +extern Temporal **tfloat_value_split(const Temporal *temp, double size, double origin, double **bins, int *count); +extern TBox *tfloat_value_time_boxes(const Temporal *temp, double vsize, const Interval *duration, double vorigin, TimestampTz torigin, int *count); +extern Temporal **tfloat_value_time_split(const Temporal *temp, double vsize, const Interval *duration, double vorigin, TimestampTz torigin, double **value_bins, TimestampTz **time_bins, int *count); +extern TBox *tfloatbox_time_tiles(const TBox *box, const Interval *duration, TimestampTz torigin, int *count); +extern TBox *tfloatbox_value_tiles(const TBox *box, double vsize, double vorigin, int *count); +extern TBox *tfloatbox_value_time_tiles(const TBox *box, double vsize, const Interval *duration, double vorigin, TimestampTz torigin, int *count); +extern TBox *tint_time_boxes(const Temporal *temp, const Interval *duration, TimestampTz torigin, int *count); +extern Span *tint_value_bins(const Temporal *temp, int vsize, int vorigin, int *count); +extern TBox *tint_value_boxes(const Temporal *temp, int vsize, int vorigin, int *count); +extern Temporal **tint_value_split(const Temporal *temp, int vsize, int vorigin, int **bins, int *count); +extern TBox *tint_value_time_boxes(const Temporal *temp, int vsize, const Interval *duration, int vorigin, TimestampTz torigin, int *count); +extern Temporal **tint_value_time_split(const Temporal *temp, int size, const Interval *duration, int vorigin, TimestampTz torigin, int **value_bins, TimestampTz **time_bins, int *count); +extern TBox *tintbox_time_tiles(const TBox *box, const Interval *duration, TimestampTz torigin, int *count); +extern TBox *tintbox_value_tiles(const TBox *box, int xsize, int xorigin, int *count); +extern TBox *tintbox_value_time_tiles(const TBox *box, int xsize, const Interval *duration, int xorigin, TimestampTz torigin, int *count); /*****************************************************************************/ #endif +/***************************************************************************** + * + * This MobilityDB code is provided under The PostgreSQL License. + * Copyright (c) 2016-2025, Université libre de Bruxelles and MobilityDB + * contributors + * + * MobilityDB includes portions of PostGIS version 3 source code released + * under the GNU General Public License (GPLv2 or later). + * Copyright (c) 2001-2025, PostGIS contributors + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without a written + * agreement is hereby granted, provided that the above copyright notice and + * this paragraph and the following two paragraphs appear in all copies. + * + * IN NO EVENT SHALL UNIVERSITE LIBRE DE BRUXELLES BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING + * LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, + * EVEN IF UNIVERSITE LIBRE DE BRUXELLES HAS BEEN ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * UNIVERSITE LIBRE DE BRUXELLES SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON + * AN "AS IS" BASIS, AND UNIVERSITE LIBRE DE BRUXELLES HAS NO OBLIGATIONS TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + * + *****************************************************************************/ + +/** + * @brief API of the Mobility Engine Open Source (MEOS) library. + */ + +#ifndef __MEOS_GEO_H__ +#define __MEOS_GEO_H__ + +/* C */ +#include +#include + +/* PostGIS */ +#include +/* MEOS */ +#include + +/***************************************************************************** + * Type definitions + *****************************************************************************/ + +/** + * @brief Enumeration that defines the spatial relationships for which a call + * to GEOS is made. + */ +typedef enum +{ + INTERSECTS = 0, + CONTAINS = 1, + TOUCHES = 2, + COVERS = 3, +} spatialRel; + +/***************************************************************************** + * Validity macros + *****************************************************************************/ + +/** + * @brief Macro ensuring that a set is a geometry set + */ +#if MEOS + #define VALIDATE_GEOMSET(set, ret) \ + do { \ + if (! ensure_not_null((void *) (set)) || \ + ! ensure_set_isof_type(set, T_GEOMSET) ) \ + return (ret); \ + } while (0) +#else + #define VALIDATE_GEOMSET(set, ret) \ + do { \ + assert(temp); \ + assert((set)->settype == T_GEOMSET); \ + } while (0) +#endif /* MEOS */ + +/** + * @brief Macro ensuring that a set is a geography set + */ +#if MEOS + #define VALIDATE_GEOGSET(set, ret) ( \ + do { \ + if (! ensure_not_null((void *) (set)) || \ + ! ensure_set_isof_type(set, T_GEOGSET) ) \ + return (ret); \ + } while (0) +#else + #define VALIDATE_GEOGSET(set, ret) \ + do { \ + assert(temp); \ + assert((set)->settype == T_GEOGSET); \ + } while (0) +#endif /* MEOS */ + +/** + * @brief Macro ensuring that a set is of a geometry or geography set + */ +#if MEOS + #define VALIDATE_GEOSET(set, ret) \ + do { \ + if (! ensure_not_null((void *) (set)) || \ + ! ensure_geoset_type((set)->settype) ) \ + return (ret); \ + } while (0) +#else + #define VALIDATE_GEOSET(set, ret) \ + do { \ + assert(temp); \ + assert(geoset_type((set)->settype); \ + } while (0) +#endif /* MEOS */ + +/** + * @brief Macro ensuring that a set is of a spatial set + */ +#if MEOS + #define VALIDATE_SPATIALSET(set, ret) \ + do { \ + if (! ensure_not_null((void *) (set)) || \ + ! ensure_spatialset_type((set)->settype) ) \ + return (ret); \ + } while (0) +#else + #define VALIDATE_SPATIALSET(set, ret) \ + do { \ + assert(set); \ + assert(spatialset_type((set)->settype)); \ + } while (0) +#endif /* MEOS */ + +/*****************************************************************************/ + +/** + * @brief Macro ensuring that a temporal value is a temporal geometry + * @note The macro works for the Temporal type and its subtypes TInstant, + * TSequence, and TSequenceSet + */ +#if MEOS + #define VALIDATE_TGEOMETRY(temp, ret) \ + do { \ + if (! ensure_not_null((void *) (temp)) || \ + ! ensure_temporal_isof_type((Temporal *) (temp), T_TGEOMETRY) ) \ + return (ret); \ + } while (0) +#else + #define VALIDATE_TGEOMETRY(temp, ret) \ + do { \ + assert(temp); \ + assert((temp)->temptype == T_TGEOMETRY); \ + } while (0) +#endif /* MEOS */ + +/** + * @brief Macro ensuring that a temporal value is a temporal geography + * @note The macro works for the Temporal type and its subtypes TInstant, + * TSequence, and TSequenceSet + */ +#if MEOS + #define VALIDATE_TGEOGRAPHY(temp, ret) \ + do { \ + if (! ensure_not_null((void *) (temp)) || \ + ! ensure_temporal_isof_type((Temporal *) (temp), T_TGEOGRAPHY) ) \ + return (ret); \ + } while (0) +#else + #define VALIDATE_TGEOGRAPHY(temp, ret) \ + do { \ + assert(temp); \ + assert((temp)->temptype == T_TGEOGRAPHY); \ + } while (0) +#endif /* MEOS */ + +/** + * @brief Macro ensuring that a temporal value is a temporal geometry point + * @note The macro works for the Temporal type and its subtypes TInstant, + * TSequence, and TSequenceSet + */ +#if MEOS + #define VALIDATE_TGEOMPOINT(temp, ret) \ + do { \ + if (! ensure_not_null((void *) (temp)) || \ + ! ensure_temporal_isof_type((Temporal *) (temp), T_TGEOMPOINT) ) \ + return (ret); \ + } while (0) +#else + #define VALIDATE_TGEOMPOINT(temp, ret) \ + do { \ + assert(temp); \ + assert((temp)->temptype == T_TGEOMPOINT); \ + } while (0) +#endif /* MEOS */ + +/** + * @brief Macro ensuring that a temporal value is a temporal geography point + * @note The macro works for the Temporal type and its subtypes TInstant, + * TSequence, and TSequenceSet + */ +#if MEOS + #define VALIDATE_TGEOGPOINT(temp, ret) \ + do { \ + if (! ensure_not_null((void *) (temp)) || \ + ! ensure_temporal_isof_type((Temporal *) (temp), T_TGEOGPOINT) ) \ + return (ret); \ + } while (0) +#else + #define VALIDATE_TGEOGPOINT(temp, ret) \ + do { \ + assert(temp); \ + assert((temp)->temptype == T_TGEOGPOINT); \ + } while (0) +#endif /* MEOS */ + +/** + * @brief Macro ensuring that a temporal value is a temporal geometry or + * geography + * @note The macro works for the Temporal type and its subtypes TInstant, + * TSequence, and TSequenceSet + */ +#if MEOS + #define VALIDATE_TGEO(temp, ret) \ + do { \ + if (! ensure_not_null((void *) (temp)) || \ + ! ensure_tgeo_type_all(((Temporal *) (temp))->temptype) ) \ + return (ret); \ + } while (0) +#else + #define VALIDATE_TGEO(temp, ret) \ + do { \ + assert(temp); \ + assert(tgeo_type_all(((Temporal *) (temp))->temptype)); \ + } while (0) +#endif /* MEOS */ + +/** + * @brief Macro ensuring that a temporal value is a temporal geometry + * @note The macro works for the Temporal type and its subtypes TInstant, + * TSequence, and TSequenceSet + */ +#if MEOS + #define VALIDATE_TGEOM(temp, ret) \ + do { \ + if (! ensure_not_null((void *) (temp)) || \ + ! ensure_tgeometry_type(((Temporal *) (temp))->temptype) ) \ + return (ret); \ + } while (0) +#else + #define VALIDATE_TGEOM(temp, ret) \ + do { \ + assert(temp); \ + assert(tgeometry_type(((Temporal *) (temp))->temptype)); \ + } while (0) +#endif /* MEOS */ + +/** + * @brief Macro ensuring that a temporal value is of a temporal geography + * @note The macro works for the Temporal type and its subtypes TInstant, + * TSequence, and TSequenceSet + */ +#if MEOS + #define VALIDATE_TGEOG(temp, ret) \ + do { \ + if (! ensure_not_null((void *) (temp)) || \ + ! ensure_tgeodetic_type(((Temporal *) (temp))->temptype) ) \ + return (ret); \ + } while (0) +#else + #define VALIDATE_TGEOG(temp, ret) \ + do { \ + assert(temp); \ + assert(tgeodetic_type(((Temporal *) (temp))->temptype)); \ + } while (0) +#endif /* MEOS */ + +/** + * @brief Macro ensuring that a temporal value is of a temporal + * geometry/geography point + * @note The macro works for the Temporal type and its subtypes TInstant, + * TSequence, and TSequenceSet + */ +#if MEOS + #define VALIDATE_TPOINT(temp, ret) \ + do { \ + if (! ensure_not_null((void *) (temp)) || \ + ! ensure_tpoint_type(((Temporal *) (temp))->temptype) ) \ + return (ret); \ + } while (0) +#else + #define VALIDATE_TPOINT(temp, ret) \ + do { \ + assert(temp); \ + assert(tpoint_type(((Temporal *) (temp))->temptype)); \ + } while (0) +#endif /* MEOS */ + +/** + * @brief Macro ensuring that a temporal value is of a spatiotemporal type + * @note The macro works for the Temporal type and its subtypes TInstant, + * TSequence, and TSequenceSet + */ +#if MEOS + #define VALIDATE_TSPATIAL(temp, ret) \ + do { \ + if (! ensure_not_null((void *) (temp)) || \ + ! ensure_tspatial_type(((Temporal *) (temp))->temptype) ) \ + return (ret); \ + } while (0) +#else + #define VALIDATE_TSPATIAL(temp, ret) \ + do { \ + assert(temp); \ + assert(tspatial_type(((Temporal *) (temp))->temptype)); \ + } while (0) +#endif /* MEOS */ + +/*===========================================================================* + * Functions for static geometries + *===========================================================================*/ + +/* Input and output functions */ + +extern uint8_t *geo_as_ewkb(const GSERIALIZED *gs, const char *endian, size_t *size); +extern char *geo_as_ewkt(const GSERIALIZED *gs, int precision); +extern char *geo_as_geojson(const GSERIALIZED *gs, int option, int precision, const char *srs); +extern char *geo_as_hexewkb(const GSERIALIZED *gs, const char *endian); +extern char *geo_as_text(const GSERIALIZED *gs, int precision); +extern GSERIALIZED *geo_from_ewkb(const uint8_t *wkb, size_t wkb_size, int32 srid); +extern GSERIALIZED *geo_from_geojson(const char *geojson); +extern GSERIALIZED *geo_from_text(const char *wkt, int32_t srid); +extern char *geo_out(const GSERIALIZED *gs); +extern GSERIALIZED *geog_from_binary(const char *wkb_bytea); +extern GSERIALIZED *geog_from_hexewkb(const char *wkt); +extern GSERIALIZED *geog_in(const char *str, int32 typmod); +extern GSERIALIZED *geom_from_hexewkb(const char *wkt); +extern GSERIALIZED *geom_in(const char *str, int32 typmod); + +extern BOX3D *box3d_make(double xmin, double xmax, double ymin, double ymax, + double zmin, double zmax, int32_t srid); +extern char *box3d_out(const BOX3D *box, int maxdd); +extern GBOX *gbox_make(bool hasz, double xmin, double xmax, double ymin, + double ymax, double zmin, double zmax); +extern char *gbox_out(const GBOX *box, int maxdd); + +/* Constructor functions */ + +extern GSERIALIZED *geo_copy(const GSERIALIZED *g); +extern GSERIALIZED *geogpoint_make2d(int32_t srid, double x, double y); +extern GSERIALIZED *geogpoint_make3dz(int32_t srid, double x, double y, double z); +extern GSERIALIZED *geompoint_make2d(int32_t srid, double x, double y); +extern GSERIALIZED *geompoint_make3dz(int32_t srid, double x, double y, double z); + +/* Conversion functions */ + +extern GSERIALIZED *geom_to_geog(const GSERIALIZED *geom); +extern GSERIALIZED *geog_to_geom(const GSERIALIZED *geog); + +/* Accessor functions */ + +extern bool geo_is_empty(const GSERIALIZED *g); +extern bool geo_is_unitary(const GSERIALIZED *gs); +extern const char *geo_typename(int type); +extern double geog_area(const GSERIALIZED *g, bool use_spheroid); +extern GSERIALIZED *geog_centroid(const GSERIALIZED *g, bool use_spheroid); +extern double geog_length(const GSERIALIZED *g, bool use_spheroid); +extern double geog_perimeter(const GSERIALIZED *g, bool use_spheroid); +extern bool geom_azimuth(const GSERIALIZED *gs1, const GSERIALIZED *gs2, double *result); +extern double geom_length(const GSERIALIZED *gs); +extern double geom_perimeter(const GSERIALIZED *gs); +extern int line_numpoints(const GSERIALIZED *gs); +extern GSERIALIZED *line_point_n(const GSERIALIZED *geom, int n); + +/* Transformation functions */ + +extern GSERIALIZED *geo_reverse(const GSERIALIZED *gs); +extern GSERIALIZED *geo_round(const GSERIALIZED *gs, int maxdd); + +/* Spatial reference system functions */ + +extern GSERIALIZED *geo_set_srid(const GSERIALIZED *gs, int32_t srid); +extern int32_t geo_srid(const GSERIALIZED *gs); +extern GSERIALIZED *geo_transform(const GSERIALIZED *geom, int32_t srid_to); +extern GSERIALIZED *geo_transform_pipeline(const GSERIALIZED *gs, char *pipeline, int32_t srid_to, bool is_forward); + +/* Spatial processing functions */ + +extern GSERIALIZED *geo_collect_garray(GSERIALIZED **gsarr, int count); +extern GSERIALIZED *geo_makeline_garray(GSERIALIZED **gsarr, int count); +extern int geo_num_points(const GSERIALIZED *gs); +extern int geo_num_geos(const GSERIALIZED *gs); +extern GSERIALIZED *geo_geo_n(const GSERIALIZED *geom, int n); +extern GSERIALIZED **geo_pointarr(const GSERIALIZED *gs, int *count); +extern GSERIALIZED *geo_points(const GSERIALIZED *gs); +extern GSERIALIZED *geom_array_union(GSERIALIZED **gsarr, int count); +extern GSERIALIZED *geom_boundary(const GSERIALIZED *gs); +extern GSERIALIZED *geom_buffer(const GSERIALIZED *gs, double size, const char *params); +extern GSERIALIZED *geom_centroid(const GSERIALIZED *gs); +extern GSERIALIZED *geom_convex_hull(const GSERIALIZED *gs); +extern GSERIALIZED *geom_difference2d(const GSERIALIZED *gs1, const GSERIALIZED *gs2); +extern GSERIALIZED *geom_intersection2d(const GSERIALIZED *gs1, const GSERIALIZED *gs2); +extern GSERIALIZED *geom_intersection2d_coll(const GSERIALIZED *gs1, const GSERIALIZED *gs2); +extern GSERIALIZED *geom_min_bounding_radius(const GSERIALIZED *geom, double *radius); +extern GSERIALIZED *geom_shortestline2d(const GSERIALIZED *gs1, const GSERIALIZED *s2); +extern GSERIALIZED *geom_shortestline3d(const GSERIALIZED *gs1, const GSERIALIZED *s2); +extern GSERIALIZED *geom_unary_union(const GSERIALIZED *gs, double prec); +extern GSERIALIZED *line_interpolate_point(const GSERIALIZED *gs, double distance_fraction, bool repeat); +extern double line_locate_point(const GSERIALIZED *gs1, const GSERIALIZED *gs2); +extern GSERIALIZED *line_substring(const GSERIALIZED *gs, double from, double to); + +/* Spatial relationship functions */ + +extern bool geog_dwithin(const GSERIALIZED *g1, const GSERIALIZED *g2, double tolerance, bool use_spheroid); +extern bool geog_intersects(const GSERIALIZED *gs1, const GSERIALIZED *gs2, bool use_spheroid); +extern bool geom_contains(const GSERIALIZED *gs1, const GSERIALIZED *gs2); +extern bool geom_covers(const GSERIALIZED *gs1, const GSERIALIZED *gs2); +extern bool geom_disjoint2d(const GSERIALIZED *gs1, const GSERIALIZED *gs2); +extern bool geom_dwithin2d(const GSERIALIZED *gs1, const GSERIALIZED *gs2, double tolerance); +extern bool geom_dwithin3d(const GSERIALIZED *gs1, const GSERIALIZED *gs2, double tolerance); +extern bool geom_intersects2d(const GSERIALIZED *gs1, const GSERIALIZED *gs2); +extern bool geom_intersects3d(const GSERIALIZED *gs1, const GSERIALIZED *gs2); +extern bool geom_relate_pattern(const GSERIALIZED *gs1, const GSERIALIZED *gs2, char *patt); +extern bool geom_touches(const GSERIALIZED *gs1, const GSERIALIZED *gs2); + +/* Bounding box functions */ + +extern STBox *geo_stboxes(const GSERIALIZED *gs, int *count); +extern STBox *geo_split_each_n_stboxes(const GSERIALIZED *gs, int elem_count, int *count); +extern STBox *geo_split_n_stboxes(const GSERIALIZED *gs, int box_count, int *count); + +/* Distance functions */ + +extern double geog_distance(const GSERIALIZED *g1, const GSERIALIZED *g2); +extern double geom_distance2d(const GSERIALIZED *gs1, const GSERIALIZED *gs2); +extern double geom_distance3d(const GSERIALIZED *gs1, const GSERIALIZED *gs2); + +/* Comparison functions */ + +extern int geo_equals(const GSERIALIZED *gs1, const GSERIALIZED *gs2); +extern bool geo_same(const GSERIALIZED *gs1, const GSERIALIZED *gs2); + +/***************************************************************************** + * Functions for spatial sets + *****************************************************************************/ + +/* Input and output functions */ + +extern Set *geogset_in(const char *str); +extern Set *geomset_in(const char *str); +extern char *spatialset_as_text(const Set *set, int maxdd); +extern char *spatialset_as_ewkt(const Set *set, int maxdd); + +/* Constructor functions */ + +extern Set *geoset_make(GSERIALIZED **values, int count); + +/* Conversion functions */ + +extern Set *geo_to_set(const GSERIALIZED *gs); + +/* Accessor functions */ + +extern GSERIALIZED *geoset_end_value(const Set *s); +extern GSERIALIZED *geoset_start_value(const Set *s); +extern bool geoset_value_n(const Set *s, int n, GSERIALIZED **result); +extern GSERIALIZED **geoset_values(const Set *s); + +/* Set operations */ + +extern bool contained_geo_set(const GSERIALIZED *gs, const Set *s); +extern bool contains_set_geo(const Set *s, GSERIALIZED *gs); +extern Set *geo_union_transfn(Set *state, const GSERIALIZED *gs); +extern Set *intersection_geo_set(const GSERIALIZED *gs, const Set *s); +extern Set *intersection_set_geo(const Set *s, const GSERIALIZED *gs); +extern Set *minus_geo_set(const GSERIALIZED *gs, const Set *s); +extern Set *minus_set_geo(const Set *s, const GSERIALIZED *gs); +extern Set *union_geo_set(const GSERIALIZED *gs, const Set *s); +extern Set *union_set_geo(const Set *s, const GSERIALIZED *gs); + +/* SRID functions */ + +extern Set *spatialset_set_srid(const Set *s, int32_t srid); +extern int32_t spatialset_srid(const Set *s); +extern Set *spatialset_transform(const Set *s, int32_t srid); +extern Set *spatialset_transform_pipeline(const Set *s, const char *pipelinestr, int32_t srid, bool is_forward); + +/***************************************************************************** + * Functions for spatiotemporal boxes + *****************************************************************************/ + +/* Input/output functions */ + +extern char *stbox_as_hexwkb(const STBox *box, uint8_t variant, size_t *size); +extern uint8_t *stbox_as_wkb(const STBox *box, uint8_t variant, size_t *size_out); +extern STBox *stbox_from_hexwkb(const char *hexwkb); +extern STBox *stbox_from_wkb(const uint8_t *wkb, size_t size); +extern STBox *stbox_in(const char *str); +extern char *stbox_out(const STBox *box, int maxdd); + +/* Constructor functions */ + +extern STBox *geo_timestamptz_to_stbox(const GSERIALIZED *gs, TimestampTz t); +extern STBox *geo_tstzspan_to_stbox(const GSERIALIZED *gs, const Span *s); +extern STBox *stbox_copy(const STBox *box); +extern STBox *stbox_make(bool hasx, bool hasz, bool geodetic, int32 srid, double xmin, double xmax, double ymin, double ymax, double zmin, double zmax, const Span *s); + +/* Conversion functions */ + +extern STBox *geo_to_stbox(const GSERIALIZED *gs); +extern STBox *spatialset_to_stbox(const Set *s); +extern BOX3D *stbox_to_box3d(const STBox *box); +extern GBOX *stbox_to_gbox(const STBox *box); +extern GSERIALIZED *stbox_to_geo(const STBox *box); +extern Span *stbox_to_tstzspan(const STBox *box); +extern STBox *timestamptz_to_stbox(TimestampTz t); +extern STBox *tstzset_to_stbox(const Set *s); +extern STBox *tstzspan_to_stbox(const Span *s); +extern STBox *tstzspanset_to_stbox(const SpanSet *ss); + +/* Accessor functions */ + +extern double stbox_area(const STBox *box, bool spheroid); +extern uint32 stbox_hash(const STBox *box); +extern uint64 stbox_hash_extended(const STBox *box, uint64 seed); +extern bool stbox_hast(const STBox *box); +extern bool stbox_hasx(const STBox *box); +extern bool stbox_hasz(const STBox *box); +extern bool stbox_isgeodetic(const STBox *box); +extern double stbox_perimeter(const STBox *box, bool spheroid); +extern bool stbox_tmax(const STBox *box, TimestampTz *result); +extern bool stbox_tmax_inc(const STBox *box, bool *result); +extern bool stbox_tmin(const STBox *box, TimestampTz *result); +extern bool stbox_tmin_inc(const STBox *box, bool *result); +extern double stbox_volume(const STBox *box); +extern bool stbox_xmax(const STBox *box, double *result); +extern bool stbox_xmin(const STBox *box, double *result); +extern bool stbox_ymax(const STBox *box, double *result); +extern bool stbox_ymin(const STBox *box, double *result); +extern bool stbox_zmax(const STBox *box, double *result); +extern bool stbox_zmin(const STBox *box, double *result); + +/* Transformation functions */ + +extern STBox *stbox_expand_space(const STBox *box, double d); +extern STBox *stbox_expand_time(const STBox *box, const Interval *interv); +extern STBox *stbox_get_space(const STBox *box); +extern STBox *stbox_quad_split(const STBox *box, int *count); +extern STBox *stbox_round(const STBox *box, int maxdd); +extern STBox *stbox_shift_scale_time(const STBox *box, const Interval *shift, const Interval *duration); +extern STBox *stboxarr_round(const STBox *boxarr, int count, int maxdd); + +/* SRID functions */ + +extern STBox *stbox_set_srid(const STBox *box, int32_t srid); +extern int32_t stbox_srid(const STBox *box); +extern STBox *stbox_transform(const STBox *box, int32_t srid); +extern STBox *stbox_transform_pipeline(const STBox *box, const char *pipelinestr, int32_t srid, bool is_forward); + +/* Topological functions */ + +extern bool adjacent_stbox_stbox(const STBox *box1, const STBox *box2); +extern bool contained_stbox_stbox(const STBox *box1, const STBox *box2); +extern bool contains_stbox_stbox(const STBox *box1, const STBox *box2); +extern bool overlaps_stbox_stbox(const STBox *box1, const STBox *box2); +extern bool same_stbox_stbox(const STBox *box1, const STBox *box2); + +/* Position functions */ + +extern bool above_stbox_stbox(const STBox *box1, const STBox *box2); +extern bool after_stbox_stbox(const STBox *box1, const STBox *box2); +extern bool back_stbox_stbox(const STBox *box1, const STBox *box2); +extern bool before_stbox_stbox(const STBox *box1, const STBox *box2); +extern bool below_stbox_stbox(const STBox *box1, const STBox *box2); +extern bool front_stbox_stbox(const STBox *box1, const STBox *box2); +extern bool left_stbox_stbox(const STBox *box1, const STBox *box2); +extern bool overabove_stbox_stbox(const STBox *box1, const STBox *box2); +extern bool overafter_stbox_stbox(const STBox *box1, const STBox *box2); +extern bool overback_stbox_stbox(const STBox *box1, const STBox *box2); +extern bool overbefore_stbox_stbox(const STBox *box1, const STBox *box2); +extern bool overbelow_stbox_stbox(const STBox *box1, const STBox *box2); +extern bool overfront_stbox_stbox(const STBox *box1, const STBox *box2); +extern bool overleft_stbox_stbox(const STBox *box1, const STBox *box2); +extern bool overright_stbox_stbox(const STBox *box1, const STBox *box2); +extern bool right_stbox_stbox(const STBox *box1, const STBox *box2); + +/* Set functions */ + +extern STBox *union_stbox_stbox(const STBox *box1, const STBox *box2, bool strict); +extern STBox *intersection_stbox_stbox(const STBox *box1, const STBox *box2); + +/* Comparisons */ + +extern int stbox_cmp(const STBox *box1, const STBox *box2); +extern bool stbox_eq(const STBox *box1, const STBox *box2); +extern bool stbox_ge(const STBox *box1, const STBox *box2); +extern bool stbox_gt(const STBox *box1, const STBox *box2); +extern bool stbox_le(const STBox *box1, const STBox *box2); +extern bool stbox_lt(const STBox *box1, const STBox *box2); +extern bool stbox_ne(const STBox *box1, const STBox *box2); + +/***************************************************************************** + * Functions for temporal geometries/geographies + *****************************************************************************/ + +/* Input and output functions */ + +extern Temporal *tgeogpoint_from_mfjson(const char *str); +extern Temporal *tgeogpoint_in(const char *str); +extern Temporal *tgeography_from_mfjson(const char *mfjson); +extern Temporal *tgeography_in(const char *str); +extern Temporal *tgeometry_from_mfjson(const char *str); +extern Temporal *tgeometry_in(const char *str); +extern Temporal *tgeompoint_from_mfjson(const char *str); +extern Temporal *tgeompoint_in(const char *str); +extern char *tspatial_as_ewkt(const Temporal *temp, int maxdd); +extern char *tspatial_as_text(const Temporal *temp, int maxdd); +extern char *tspatial_out(const Temporal *temp, int maxdd); + +/* Constructor functions */ + +extern Temporal *tgeo_from_base_temp(const GSERIALIZED *gs, const Temporal *temp); +extern TInstant *tgeoinst_make(const GSERIALIZED *gs, TimestampTz t); +extern TSequence *tgeoseq_from_base_tstzset(const GSERIALIZED *gs, const Set *s); +extern TSequence *tgeoseq_from_base_tstzspan(const GSERIALIZED *gs, const Span *s, interpType interp); +extern TSequenceSet *tgeoseqset_from_base_tstzspanset(const GSERIALIZED *gs, const SpanSet *ss, interpType interp); +extern Temporal *tpoint_from_base_temp(const GSERIALIZED *gs, const Temporal *temp); +extern TInstant *tpointinst_make(const GSERIALIZED *gs, TimestampTz t); +extern TSequence *tpointseq_from_base_tstzset(const GSERIALIZED *gs, const Set *s); +extern TSequence *tpointseq_from_base_tstzspan(const GSERIALIZED *gs, const Span *s, interpType interp); +extern TSequence *tpointseq_make_coords(const double *xcoords, const double *ycoords, const double *zcoords, const TimestampTz *times, int count, int32 srid, bool geodetic, bool lower_inc, bool upper_inc, interpType interp, bool normalize); +extern TSequenceSet *tpointseqset_from_base_tstzspanset(const GSERIALIZED *gs, const SpanSet *ss, interpType interp); + +/* Conversion functions */ + +extern STBox *box3d_to_stbox(const BOX3D *box); +extern STBox *gbox_to_stbox(const GBOX *box); +extern Temporal *geomeas_to_tpoint(const GSERIALIZED *gs); +extern Temporal *tgeogpoint_to_tgeography(const Temporal *temp); +extern Temporal *tgeography_to_tgeogpoint(const Temporal *temp); +extern Temporal *tgeography_to_tgeometry(const Temporal *temp); +extern Temporal *tgeometry_to_tgeography(const Temporal *temp); +extern Temporal *tgeometry_to_tgeompoint(const Temporal *temp); +extern Temporal *tgeompoint_to_tgeometry(const Temporal *temp); +extern bool tpoint_as_mvtgeom(const Temporal *temp, const STBox *bounds, int32_t extent, int32_t buffer, bool clip_geom, GSERIALIZED **gsarr, int64 **timesarr, int *count); +extern bool tpoint_tfloat_to_geomeas(const Temporal *tpoint, const Temporal *measure, bool segmentize, GSERIALIZED **result); +extern STBox *tspatial_to_stbox(const Temporal *temp); + +/* Accessor functions */ + +extern bool bearing_point_point(const GSERIALIZED *gs1, const GSERIALIZED *gs2, double *result); +extern Temporal *bearing_tpoint_point(const Temporal *temp, const GSERIALIZED *gs, bool invert); +extern Temporal *bearing_tpoint_tpoint(const Temporal *temp1, const Temporal *temp2); +extern Temporal *tgeo_centroid(const Temporal *temp); +extern GSERIALIZED *tgeo_convex_hull(const Temporal *temp); +extern GSERIALIZED *tgeo_end_value(const Temporal *temp); +extern GSERIALIZED *tgeo_start_value(const Temporal *temp); +extern GSERIALIZED *tgeo_traversed_area(const Temporal *temp, bool unary_union); +extern bool tgeo_value_at_timestamptz(const Temporal *temp, TimestampTz t, bool strict, GSERIALIZED **value); +extern bool tgeo_value_n(const Temporal *temp, int n, GSERIALIZED **result); +extern GSERIALIZED **tgeo_values(const Temporal *temp, int *count); +extern Temporal *tpoint_angular_difference(const Temporal *temp); +extern Temporal *tpoint_azimuth(const Temporal *temp); +extern Temporal *tpoint_cumulative_length(const Temporal *temp); +extern bool tpoint_direction(const Temporal *temp, double *result); +extern Temporal *tpoint_get_x(const Temporal *temp); +extern Temporal *tpoint_get_y(const Temporal *temp); +extern Temporal *tpoint_get_z(const Temporal *temp); +extern bool tpoint_is_simple(const Temporal *temp); +extern double tpoint_length(const Temporal *temp); +extern Temporal *tpoint_speed(const Temporal *temp); +extern GSERIALIZED *tpoint_trajectory(const Temporal *temp, bool unary_union); +extern GSERIALIZED *tpoint_twcentroid(const Temporal *temp); + +/* Transformation functions */ + +extern Temporal *tgeo_affine(const Temporal *temp, const AFFINE *a); +extern Temporal *tgeo_scale(const Temporal *temp, const GSERIALIZED *scale, const GSERIALIZED *sorigin); +extern Temporal **tpoint_make_simple(const Temporal *temp, int *count); + +/* SRID functions */ + +int32_t tspatial_srid(const Temporal *temp); +extern Temporal *tspatial_set_srid(const Temporal *temp, int32_t srid); +extern Temporal *tspatial_transform(const Temporal *temp, int32_t srid); +extern Temporal *tspatial_transform_pipeline(const Temporal *temp, const char *pipelinestr, int32_t srid, bool is_forward); + +/* Restriction functions */ + +extern Temporal *tgeo_at_geom(const Temporal *temp, const GSERIALIZED *gs); +extern Temporal *tgeo_at_stbox(const Temporal *temp, const STBox *box, bool border_inc); +extern Temporal *tgeo_at_value(const Temporal *temp, GSERIALIZED *gs); +extern Temporal *tgeo_minus_geom(const Temporal *temp, const GSERIALIZED *gs); +extern Temporal *tgeo_minus_stbox(const Temporal *temp, const STBox *box, bool border_inc); +extern Temporal *tgeo_minus_value(const Temporal *temp, GSERIALIZED *gs); +extern Temporal *tpoint_at_elevation(const Temporal *temp, const Span *s); +extern Temporal *tpoint_at_geom(const Temporal *temp, const GSERIALIZED *gs); +extern Temporal *tpoint_at_value(const Temporal *temp, GSERIALIZED *gs); +extern Temporal *tpoint_minus_elevation(const Temporal *temp, const Span *s); +extern Temporal *tpoint_minus_geom(const Temporal *temp, const GSERIALIZED *gs); +extern Temporal *tpoint_minus_value(const Temporal *temp, GSERIALIZED *gs); + +/* Ever and always comparisons */ + +extern int always_eq_geo_tgeo(const GSERIALIZED *gs, const Temporal *temp); +extern int always_eq_tgeo_geo(const Temporal *temp, const GSERIALIZED *gs); +extern int always_eq_tgeo_tgeo(const Temporal *temp1, const Temporal *temp2); +extern int always_ne_geo_tgeo(const GSERIALIZED *gs, const Temporal *temp); +extern int always_ne_tgeo_geo(const Temporal *temp, const GSERIALIZED *gs); +extern int always_ne_tgeo_tgeo(const Temporal *temp1, const Temporal *temp2); +extern int ever_eq_geo_tgeo(const GSERIALIZED *gs, const Temporal *temp); +extern int ever_eq_tgeo_geo(const Temporal *temp, const GSERIALIZED *gs); +extern int ever_eq_tgeo_tgeo(const Temporal *temp1, const Temporal *temp2); +extern int ever_ne_geo_tgeo(const GSERIALIZED *gs, const Temporal *temp); +extern int ever_ne_tgeo_geo(const Temporal *temp, const GSERIALIZED *gs); +extern int ever_ne_tgeo_tgeo(const Temporal *temp1, const Temporal *temp2); + +/* Temporal comparisons */ + +extern Temporal *teq_geo_tgeo(const GSERIALIZED *gs, const Temporal *temp); +extern Temporal *teq_tgeo_geo(const Temporal *temp, const GSERIALIZED *gs); +extern Temporal *tne_geo_tgeo(const GSERIALIZED *gs, const Temporal *temp); +extern Temporal *tne_tgeo_geo(const Temporal *temp, const GSERIALIZED *gs); + +/* Bounding box functions */ + +extern STBox *tgeo_stboxes(const Temporal *temp, int *count); +extern STBox *tgeo_space_boxes(const Temporal *temp, double xsize, double ysize, double zsize, const GSERIALIZED *sorigin, bool bitmatrix, bool border_inc, int *count); +extern STBox *tgeo_space_time_boxes(const Temporal *temp, double xsize, double ysize, double zsize, const Interval *duration, const GSERIALIZED *sorigin, TimestampTz torigin, bool bitmatrix, bool border_inc, int *count); +extern STBox *tgeo_split_each_n_stboxes(const Temporal *temp, int elem_count, int *count); +extern STBox *tgeo_split_n_stboxes(const Temporal *temp, int box_count, int *count); + +/* Topological functions */ + +extern bool adjacent_stbox_tspatial(const STBox *box, const Temporal *temp); +extern bool adjacent_tspatial_stbox(const Temporal *temp, const STBox *box); +extern bool adjacent_tspatial_tspatial(const Temporal *temp1, const Temporal *temp2); +extern bool contained_stbox_tspatial(const STBox *box, const Temporal *temp); +extern bool contained_tspatial_stbox(const Temporal *temp, const STBox *box); +extern bool contained_tspatial_tspatial(const Temporal *temp1, const Temporal *temp2); +extern bool contains_stbox_tspatial(const STBox *box, const Temporal *temp); +extern bool contains_tspatial_stbox(const Temporal *temp, const STBox *box); +extern bool contains_tspatial_tspatial(const Temporal *temp1, const Temporal *temp2); +extern bool overlaps_stbox_tspatial(const STBox *box, const Temporal *temp); +extern bool overlaps_tspatial_stbox(const Temporal *temp, const STBox *box); +extern bool overlaps_tspatial_tspatial(const Temporal *temp1, const Temporal *temp2); +extern bool same_stbox_tspatial(const STBox *box, const Temporal *temp); +extern bool same_tspatial_stbox(const Temporal *temp, const STBox *box); +extern bool same_tspatial_tspatial(const Temporal *temp1, const Temporal *temp2); + +/* Position functions */ + +extern bool above_stbox_tspatial(const STBox *box, const Temporal *temp); +extern bool above_tspatial_stbox(const Temporal *temp, const STBox *box); +extern bool above_tspatial_tspatial(const Temporal *temp1, const Temporal *temp2); +extern bool after_stbox_tspatial(const STBox *box, const Temporal *temp); +extern bool after_tspatial_stbox(const Temporal *temp, const STBox *box); +extern bool after_tspatial_tspatial(const Temporal *temp1, const Temporal *temp2); +extern bool back_stbox_tspatial(const STBox *box, const Temporal *temp); +extern bool back_tspatial_stbox(const Temporal *temp, const STBox *box); +extern bool back_tspatial_tspatial(const Temporal *temp1, const Temporal *temp2); +extern bool before_stbox_tspatial(const STBox *box, const Temporal *temp); +extern bool before_tspatial_stbox(const Temporal *temp, const STBox *box); +extern bool before_tspatial_tspatial(const Temporal *temp1, const Temporal *temp2); +extern bool below_stbox_tspatial(const STBox *box, const Temporal *temp); +extern bool below_tspatial_stbox(const Temporal *temp, const STBox *box); +extern bool below_tspatial_tspatial(const Temporal *temp1, const Temporal *temp2); +extern bool front_stbox_tspatial(const STBox *box, const Temporal *temp); +extern bool front_tspatial_stbox(const Temporal *temp, const STBox *box); +extern bool front_tspatial_tspatial(const Temporal *temp1, const Temporal *temp2); +extern bool left_stbox_tspatial(const STBox *box, const Temporal *temp); +extern bool left_tspatial_stbox(const Temporal *temp, const STBox *box); +extern bool left_tspatial_tspatial(const Temporal *temp1, const Temporal *temp2); +extern bool overabove_stbox_tspatial(const STBox *box, const Temporal *temp); +extern bool overabove_tspatial_stbox(const Temporal *temp, const STBox *box); +extern bool overabove_tspatial_tspatial(const Temporal *temp1, const Temporal *temp2); +extern bool overafter_stbox_tspatial(const STBox *box, const Temporal *temp); +extern bool overafter_tspatial_stbox(const Temporal *temp, const STBox *box); +extern bool overafter_tspatial_tspatial(const Temporal *temp1, const Temporal *temp2); +extern bool overback_stbox_tspatial(const STBox *box, const Temporal *temp); +extern bool overback_tspatial_stbox(const Temporal *temp, const STBox *box); +extern bool overback_tspatial_tspatial(const Temporal *temp1, const Temporal *temp2); +extern bool overbefore_stbox_tspatial(const STBox *box, const Temporal *temp); +extern bool overbefore_tspatial_stbox(const Temporal *temp, const STBox *box); +extern bool overbefore_tspatial_tspatial(const Temporal *temp1, const Temporal *temp2); +extern bool overbelow_stbox_tspatial(const STBox *box, const Temporal *temp); +extern bool overbelow_tspatial_stbox(const Temporal *temp, const STBox *box); +extern bool overbelow_tspatial_tspatial(const Temporal *temp1, const Temporal *temp2); +extern bool overfront_stbox_tspatial(const STBox *box, const Temporal *temp); +extern bool overfront_tspatial_stbox(const Temporal *temp, const STBox *box); +extern bool overfront_tspatial_tspatial(const Temporal *temp1, const Temporal *temp2); +extern bool overleft_stbox_tspatial(const STBox *box, const Temporal *temp); +extern bool overleft_tspatial_stbox(const Temporal *temp, const STBox *box); +extern bool overleft_tspatial_tspatial(const Temporal *temp1, const Temporal *temp2); +extern bool overright_stbox_tspatial(const STBox *box, const Temporal *temp); +extern bool overright_tspatial_stbox(const Temporal *temp, const STBox *box); +extern bool overright_tspatial_tspatial(const Temporal *temp1, const Temporal *temp2); +extern bool right_stbox_tspatial(const STBox *box, const Temporal *temp); +extern bool right_tspatial_stbox(const Temporal *temp, const STBox *box); +extern bool right_tspatial_tspatial(const Temporal *temp1, const Temporal *temp2); + +/* Ever and always spatial relationships */ + +extern int acontains_geo_tgeo(const GSERIALIZED *gs, const Temporal *temp); +extern int acontains_tgeo_geo(const Temporal *temp, const GSERIALIZED *gs); +extern int acontains_tgeo_tgeo(const Temporal *temp1, const Temporal *temp2); +extern int adisjoint_tgeo_geo(const Temporal *temp, const GSERIALIZED *gs); +extern int adisjoint_tgeo_tgeo(const Temporal *temp1, const Temporal *temp2); +extern int adwithin_tgeo_geo(const Temporal *temp, const GSERIALIZED *gs, double dist); +extern int adwithin_tgeo_tgeo(const Temporal *temp1, const Temporal *temp2, double dist); +extern int aintersects_tgeo_geo(const Temporal *temp, const GSERIALIZED *gs); +extern int aintersects_tgeo_tgeo(const Temporal *temp1, const Temporal *temp2); +extern int atouches_tgeo_geo(const Temporal *temp, const GSERIALIZED *gs); +extern int atouches_tgeo_tgeo(const Temporal *temp1, const Temporal *temp2); +extern int atouches_tpoint_geo(const Temporal *temp, const GSERIALIZED *gs); +extern int econtains_geo_tgeo(const GSERIALIZED *gs, const Temporal *temp); +extern int econtains_tgeo_geo(const Temporal *temp, const GSERIALIZED *gs); +extern int econtains_tgeo_tgeo(const Temporal *temp1, const Temporal *temp2); +extern int ecovers_geo_tgeo(const GSERIALIZED *gs, const Temporal *temp); +extern int ecovers_tgeo_geo(const Temporal *temp, const GSERIALIZED *gs); +extern int ecovers_tgeo_tgeo(const Temporal *temp1, const Temporal *temp2); +extern int edisjoint_tgeo_geo(const Temporal *temp, const GSERIALIZED *gs); +extern int edisjoint_tgeo_tgeo(const Temporal *temp1, const Temporal *temp2); +extern int edwithin_tgeo_geo(const Temporal *temp, const GSERIALIZED *gs, double dist); +extern int edwithin_tgeo_tgeo(const Temporal *temp1, const Temporal *temp2, double dist); +extern int eintersects_tgeo_geo(const Temporal *temp, const GSERIALIZED *gs); +extern int eintersects_tgeo_tgeo(const Temporal *temp1, const Temporal *temp2); +extern int etouches_tgeo_geo(const Temporal *temp, const GSERIALIZED *gs); +extern int etouches_tgeo_tgeo(const Temporal *temp1, const Temporal *temp2); +extern int etouches_tpoint_geo(const Temporal *temp, const GSERIALIZED *gs); + +/* Spatiotemporal relationships */ + +extern Temporal *tcontains_geo_tgeo(const GSERIALIZED *gs, const Temporal *temp); +extern Temporal *tcontains_tgeo_geo(const Temporal *temp, const GSERIALIZED *gs); +extern Temporal *tcontains_tgeo_tgeo(const Temporal *temp1, const Temporal *temp2); +extern Temporal *tcovers_geo_tgeo(const GSERIALIZED *gs, const Temporal *temp); +extern Temporal *tcovers_tgeo_geo(const Temporal *temp, const GSERIALIZED *gs); +extern Temporal *tcovers_tgeo_tgeo(const Temporal *temp1, const Temporal *temp2); +extern Temporal *tdisjoint_geo_tgeo(const GSERIALIZED *gs, const Temporal *temp); +extern Temporal *tdisjoint_tgeo_geo(const Temporal *temp, const GSERIALIZED *gs); +extern Temporal *tdisjoint_tgeo_tgeo(const Temporal *temp1, const Temporal *temp2); +extern Temporal *tdwithin_geo_tgeo(const GSERIALIZED *gs, const Temporal *temp, double dist); +extern Temporal *tdwithin_tgeo_geo(const Temporal *temp, const GSERIALIZED *gs, double dist); +extern Temporal *tdwithin_tgeo_tgeo(const Temporal *temp1, const Temporal *temp2, double dist); +extern Temporal *tintersects_geo_tgeo(const GSERIALIZED *gs, const Temporal *temp); +extern Temporal *tintersects_tgeo_geo(const Temporal *temp, const GSERIALIZED *gs); +extern Temporal *tintersects_tgeo_tgeo(const Temporal *temp1, const Temporal *temp2); +extern Temporal *ttouches_geo_tgeo(const GSERIALIZED *gs, const Temporal *temp); +extern Temporal *ttouches_tgeo_geo(const Temporal *temp, const GSERIALIZED *gs); +extern Temporal *ttouches_tgeo_tgeo(const Temporal *temp1, const Temporal *temp2); + +/* Distance */ + +extern Temporal *tdistance_tgeo_geo(const Temporal *temp, const GSERIALIZED *gs); +extern Temporal *tdistance_tgeo_tgeo(const Temporal *temp1, const Temporal *temp2); +extern double nad_stbox_geo(const STBox *box, const GSERIALIZED *gs); +extern double nad_stbox_stbox(const STBox *box1, const STBox *box2); +extern double nad_tgeo_geo(const Temporal *temp, const GSERIALIZED *gs); +extern double nad_tgeo_stbox(const Temporal *temp, const STBox *box); +extern double nad_tgeo_tgeo(const Temporal *temp1, const Temporal *temp2); +extern TInstant *nai_tgeo_geo(const Temporal *temp, const GSERIALIZED *gs); +extern TInstant *nai_tgeo_tgeo(const Temporal *temp1, const Temporal *temp2); +extern GSERIALIZED *shortestline_tgeo_geo(const Temporal *temp, const GSERIALIZED *gs); +extern GSERIALIZED *shortestline_tgeo_tgeo(const Temporal *temp1, const Temporal *temp2); + +/* Aggregates */ + +extern Temporal *tpoint_tcentroid_finalfn(SkipList *state); +extern SkipList *tpoint_tcentroid_transfn(SkipList *state, Temporal *temp); +extern STBox *tspatial_extent_transfn(STBox *box, const Temporal *temp); + +/* Tile functions */ + +extern STBox *stbox_get_space_tile(const GSERIALIZED *point, double xsize, double ysize, double zsize, const GSERIALIZED *sorigin); +extern STBox *stbox_get_space_time_tile(const GSERIALIZED *point, TimestampTz t, double xsize, double ysize, double zsize, const Interval *duration, const GSERIALIZED *sorigin, TimestampTz torigin); +extern STBox *stbox_get_time_tile(TimestampTz t, const Interval *duration, TimestampTz torigin); +extern STBox *stbox_space_tiles(const STBox *bounds, double xsize, double ysize, double zsize, const GSERIALIZED *sorigin, bool border_inc, int *count); +extern STBox *stbox_space_time_tiles(const STBox *bounds, double xsize, double ysize, double zsize, const Interval *duration, const GSERIALIZED *sorigin, TimestampTz torigin, bool border_inc, int *count); +extern STBox *stbox_time_tiles(const STBox *bounds, const Interval *duration, TimestampTz torigin, bool border_inc, int *count); +extern Temporal **tgeo_space_split(const Temporal *temp, double xsize, double ysize, double zsize, const GSERIALIZED *sorigin, bool bitmatrix, bool border_inc, GSERIALIZED ***space_bins, int *count); +extern Temporal **tgeo_space_time_split(const Temporal *temp, double xsize, double ysize, double zsize, const Interval *duration, const GSERIALIZED *sorigin, TimestampTz torigin, bool bitmatrix, bool border_inc, GSERIALIZED ***space_bins, TimestampTz **time_bins, int *count); + +/* Clustering functions */ + +extern int *geo_cluster_kmeans(const GSERIALIZED **geoms, uint32_t ngeoms, uint32_t k); +extern uint32_t *geo_cluster_dbscan(const GSERIALIZED **geoms, uint32_t ngeoms, double tolerance, int minpoints, int *count); +extern GSERIALIZED **geo_cluster_intersecting(const GSERIALIZED **geoms, uint32_t ngeoms, int *count); +extern GSERIALIZED **geo_cluster_within(const GSERIALIZED **geoms, uint32_t ngeoms, double tolerance, int *count); + +/*****************************************************************************/ + +#endif +/***************************************************************************** + * + * This MobilityDB code is provided under The PostgreSQL License. + * Copyright (c) 2016-2025, Université libre de Bruxelles and MobilityDB + * contributors + * + * MobilityDB includes portions of PostGIS version 3 source code released + * under the GNU General Public License (GPLv2 or later). + * Copyright (c) 2001-2025, PostGIS contributors + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without a written + * agreement is hereby granted, provided that the above copyright notice and + * this paragraph and the following two paragraphs appear in all copies. + * + * IN NO EVENT SHALL UNIVERSITE LIBRE DE BRUXELLES BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING + * LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, + * EVEN IF UNIVERSITE LIBRE DE BRUXELLES HAS BEEN ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * UNIVERSITE LIBRE DE BRUXELLES SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON + * AN "AS IS" BASIS, AND UNIVERSITE LIBRE DE BRUXELLES HAS NO OBLIGATIONS TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + * + *****************************************************************************/ + +/** + * @brief API of the Mobility Engine Open Source (MEOS) library. + */ + +#ifndef __MEOS_CBUFFER_H__ +#define __MEOS_CBUFFER_H__ + +/* C */ +#include +#include + +/* MEOS */ +#include +#include + +/***************************************************************************** + * Type definitions + *****************************************************************************/ + +/* Opaque structure to represent circular buffers */ + +typedef struct Cbuffer Cbuffer; + +/***************************************************************************** + * Validity macros and functions + *****************************************************************************/ + +/** + * @brief Macro for ensuring that the set passed as argument is a circular + * buffer set + */ +#if MEOS + #define VALIDATE_CBUFFERSET(set, ret) \ + do { \ + if (! ensure_not_null((void *) (set)) || \ + ! ensure_set_isof_type((set), T_CBUFFERSET) ) \ + return (ret); \ + } while (0) +#else + #define VALIDATE_CBUFFERSET(set, ret) \ + do { \ + assert(set); \ + assert((set)->settype == T_CBUFFERSET); \ + } while (0) +#endif /* MEOS */ + +/** + * @brief Macro for ensuring that the temporal value passed as argument is a + * temporal circular buffer + * @note The macro works for the Temporal type and its subtypes TInstant, + * TSequence, and TSequenceSet + */ +#if MEOS + #define VALIDATE_TCBUFFER(temp, ret) \ + do { \ + if (! ensure_not_null((void *) (temp)) || \ + ! ensure_temporal_isof_type((Temporal *) (temp), T_TCBUFFER) ) \ + return (ret); \ + } while (0) +#else + #define VALIDATE_TCBUFFER(temp, ret) \ + do { \ + assert(temp); \ + assert(((Temporal *) (temp))->temptype == T_TCBUFFER); \ + } while (0) +#endif /* MEOS */ + +/****************************************************************************** + * Functions for circular buffers + ******************************************************************************/ + +/* Input and output functions */ + +extern char *cbuffer_as_ewkt(const Cbuffer *cb, int maxdd); +extern char *cbuffer_as_hexwkb(const Cbuffer *cb, uint8_t variant, size_t *size); +extern char *cbuffer_as_text(const Cbuffer *cb, int maxdd); +extern uint8_t *cbuffer_as_wkb(const Cbuffer *cb, uint8_t variant, size_t *size_out); +extern Cbuffer *cbuffer_from_hexwkb(const char *hexwkb); +extern Cbuffer *cbuffer_from_wkb(const uint8_t *wkb, size_t size); +extern Cbuffer *cbuffer_in(const char *str); +extern char *cbuffer_out(const Cbuffer *cb, int maxdd); + +/* Constructor functions */ + +extern Cbuffer *cbuffer_copy(const Cbuffer *cb); +extern Cbuffer *cbuffer_make(const GSERIALIZED *point, double radius); + +/* Conversion functions */ + +extern GSERIALIZED *cbuffer_to_geom(const Cbuffer *cb); +extern STBox *cbuffer_to_stbox(const Cbuffer *cb); +extern GSERIALIZED *cbufferarr_to_geom(const Cbuffer **cbarr, int count); +extern Cbuffer *geom_to_cbuffer(const GSERIALIZED *gs); + +/* Accessor functions */ + +extern uint32 cbuffer_hash(const Cbuffer *cb); +extern uint64 cbuffer_hash_extended(const Cbuffer *cb, uint64 seed); +extern GSERIALIZED *cbuffer_point(const Cbuffer *cb); +extern double cbuffer_radius(const Cbuffer *cb); + +/* Transformation functions */ + +extern Cbuffer *cbuffer_round(const Cbuffer *cb, int maxdd); +extern Cbuffer **cbufferarr_round(const Cbuffer **cbarr, int count, int maxdd); + +/* Spatial reference system functions */ + +extern void cbuffer_set_srid(Cbuffer *cb, int32_t srid); +extern int32_t cbuffer_srid(const Cbuffer *cb); +extern Cbuffer *cbuffer_transform(const Cbuffer *cb, int32_t srid); +extern Cbuffer *cbuffer_transform_pipeline(const Cbuffer *cb, const char *pipelinestr, int32_t srid, bool is_forward); + +/* Spatial relationship functions */ + +extern int contains_cbuffer_cbuffer(const Cbuffer *cb1, const Cbuffer *cb2); +extern int covers_cbuffer_cbuffer(const Cbuffer *cb1, const Cbuffer *cb2); +extern int disjoint_cbuffer_cbuffer(const Cbuffer *cb1, const Cbuffer *cb2); +extern int dwithin_cbuffer_cbuffer(const Cbuffer *cb1, const Cbuffer *cb2, double dist); +extern int intersects_cbuffer_cbuffer(const Cbuffer *cb1, const Cbuffer *cb2); +extern int touches_cbuffer_cbuffer(const Cbuffer *cb1, const Cbuffer *cb2); + +/* Bounding box functions */ + +extern STBox *cbuffer_tstzspan_to_stbox(const Cbuffer *cb, const Span *s); +extern STBox *cbuffer_timestamptz_to_stbox(const Cbuffer *cb, TimestampTz t); + +/* Distance functions */ + +extern double distance_cbuffer_cbuffer(const Cbuffer *cb1, const Cbuffer *cb2); +extern double distance_cbuffer_geo(const Cbuffer *cb, const GSERIALIZED *gs); +extern double distance_cbuffer_stbox(const Cbuffer *cb, const STBox *box); +extern double nad_cbuffer_stbox(const Cbuffer *cb, const STBox *box); + +/* Comparison functions */ + +extern int cbuffer_cmp(const Cbuffer *cb1, const Cbuffer *cb2); +extern bool cbuffer_eq(const Cbuffer *cb1, const Cbuffer *cb2); +extern bool cbuffer_ge(const Cbuffer *cb1, const Cbuffer *cb2); +extern bool cbuffer_gt(const Cbuffer *cb1, const Cbuffer *cb2); +extern bool cbuffer_le(const Cbuffer *cb1, const Cbuffer *cb2); +extern bool cbuffer_lt(const Cbuffer *cb1, const Cbuffer *cb2); +extern bool cbuffer_ne(const Cbuffer *cb1, const Cbuffer *cb2); +extern bool cbuffer_nsame(const Cbuffer *cb1, const Cbuffer *cb2); +extern bool cbuffer_same(const Cbuffer *cb1, const Cbuffer *cb2); + +/****************************************************************************** + * Functions for circular buffer sets + ******************************************************************************/ + +/* Input and output functions */ + +extern Set *cbufferset_in(const char *str); +extern char *cbufferset_out(const Set *s, int maxdd); + +/* Constructor functions */ + +extern Set *cbufferset_make(Cbuffer **values, int count); + +/* Conversion functions */ + +extern Set *cbuffer_to_set(const Cbuffer *cb); + +/* Accessor functions */ + +extern Cbuffer *cbufferset_end_value(const Set *s); +extern Cbuffer *cbufferset_start_value(const Set *s); +extern bool cbufferset_value_n(const Set *s, int n, Cbuffer **result); +extern Cbuffer **cbufferset_values(const Set *s); + +/* Set operations */ + +extern Set *cbuffer_union_transfn(Set *state, const Cbuffer *cb); +extern bool contained_cbuffer_set(const Cbuffer *cb, const Set *s); +extern bool contains_set_cbuffer(const Set *s, Cbuffer *cb); +extern Set *intersection_cbuffer_set(const Cbuffer *cb, const Set *s); +extern Set *intersection_set_cbuffer(const Set *s, const Cbuffer *cb); +extern Set *minus_cbuffer_set(const Cbuffer *cb, const Set *s); +extern Set *minus_set_cbuffer(const Set *s, const Cbuffer *cb); +extern Set *union_cbuffer_set(const Cbuffer *cb, const Set *s); +extern Set *union_set_cbuffer(const Set *s, const Cbuffer *cb); + +/*===========================================================================* + * Functions for temporal types + *===========================================================================*/ + +/***************************************************************************** + * Input/output functions + *****************************************************************************/ + +extern Temporal *tcbuffer_in(const char *str); + +/***************************************************************************** + * Constructor functions + *****************************************************************************/ + +extern Temporal *tcbuffer_make(const Temporal *tpoint, const Temporal *tfloat); + +/***************************************************************************** + * Accessor functions + *****************************************************************************/ + +extern Set *tcbuffer_points(const Temporal *temp); +extern Set *tcbuffer_radius(const Temporal *temp); +extern GSERIALIZED *tcbuffer_trav_area(const Temporal *temp, bool merge_union); + +/***************************************************************************** + * Conversion functions + *****************************************************************************/ + +extern Temporal *tcbuffer_to_tfloat(const Temporal *temp); +extern Temporal *tcbuffer_to_tgeompoint(const Temporal *temp); +extern Temporal *tgeometry_to_tcbuffer(const Temporal *temp); + +/***************************************************************************** + * Transformation functions + *****************************************************************************/ + +extern Temporal *tcbuffer_expand(const Temporal *temp, double dist); + +/***************************************************************************** + * Restriction functions + *****************************************************************************/ + +extern Temporal *tcbuffer_at_cbuffer(const Temporal *temp, const Cbuffer *cb); +extern Temporal *tcbuffer_at_geom(const Temporal *temp, const GSERIALIZED *gs); +extern Temporal *tcbuffer_at_stbox(const Temporal *temp, const STBox *box, bool border_inc); +extern Temporal *tcbuffer_minus_cbuffer(const Temporal *temp, const Cbuffer *cb); +extern Temporal *tcbuffer_minus_geom(const Temporal *temp, const GSERIALIZED *gs); +extern Temporal *tcbuffer_minus_stbox(const Temporal *temp, const STBox *box, bool border_inc); + +/***************************************************************************** + * Distance functions + *****************************************************************************/ + +extern Temporal *tdistance_tcbuffer_cbuffer(const Temporal *temp, const Cbuffer *cb); +extern Temporal *tdistance_tcbuffer_geo(const Temporal *temp, const GSERIALIZED *gs); +extern Temporal *tdistance_tcbuffer_tcbuffer(const Temporal *temp1, const Temporal *temp2); +extern double nad_tcbuffer_cbuffer(const Temporal *temp, const Cbuffer *cb); +extern double nad_tcbuffer_geo(const Temporal *temp, const GSERIALIZED *gs); +extern double nad_tcbuffer_stbox(const Temporal *temp, const STBox *box); +extern double nad_tcbuffer_tcbuffer(const Temporal *temp1, const Temporal *temp2); +extern TInstant *nai_tcbuffer_cbuffer(const Temporal *temp, const Cbuffer *cb); +extern TInstant *nai_tcbuffer_geo(const Temporal *temp, const GSERIALIZED *gs); +extern TInstant *nai_tcbuffer_tcbuffer(const Temporal *temp1, const Temporal *temp2); +extern GSERIALIZED *shortestline_tcbuffer_cbuffer(const Temporal *temp, const Cbuffer *cb); +extern GSERIALIZED *shortestline_tcbuffer_geo(const Temporal *temp, const GSERIALIZED *gs); +extern GSERIALIZED *shortestline_tcbuffer_tcbuffer(const Temporal *temp1, const Temporal *temp2); + +/***************************************************************************** + * Comparison functions + *****************************************************************************/ + +/* Ever/always comparison functions */ + +extern int always_eq_cbuffer_tcbuffer(const Cbuffer *cb, const Temporal *temp); +extern int always_eq_tcbuffer_cbuffer(const Temporal *temp, const Cbuffer *cb); +extern int always_eq_tcbuffer_tcbuffer(const Temporal *temp1, const Temporal *temp2); +extern int always_ne_cbuffer_tcbuffer(const Cbuffer *cb, const Temporal *temp); +extern int always_ne_tcbuffer_cbuffer(const Temporal *temp, const Cbuffer *cb); +extern int always_ne_tcbuffer_tcbuffer(const Temporal *temp1, const Temporal *temp2); +extern int ever_eq_cbuffer_tcbuffer(const Cbuffer *cb, const Temporal *temp); +extern int ever_eq_tcbuffer_cbuffer(const Temporal *temp, const Cbuffer *cb); +extern int ever_eq_tcbuffer_tcbuffer(const Temporal *temp1, const Temporal *temp2); +extern int ever_ne_cbuffer_tcbuffer(const Cbuffer *cb, const Temporal *temp); +extern int ever_ne_tcbuffer_cbuffer(const Temporal *temp, const Cbuffer *cb); +extern int ever_ne_tcbuffer_tcbuffer(const Temporal *temp1, const Temporal *temp2); + +/* Temporal comparison functions */ + +extern Temporal *teq_cbuffer_tcbuffer(const Cbuffer *cb, const Temporal *temp); +extern Temporal *teq_tcbuffer_cbuffer(const Temporal *temp, const Cbuffer *cb); +extern Temporal *tne_cbuffer_tcbuffer(const Cbuffer *cb, const Temporal *temp); +extern Temporal *tne_tcbuffer_cbuffer(const Temporal *temp, const Cbuffer *cb); + +/***************************************************************************** + * Spatial relationship functions + *****************************************************************************/ + +/* Ever and always spatial relationship functions */ + +extern int acontains_cbuffer_tcbuffer(const Cbuffer *cb, const Temporal *temp); +extern int acontains_geo_tcbuffer(const GSERIALIZED *gs, const Temporal *temp); +extern int acontains_tcbuffer_cbuffer(const Temporal *temp, const Cbuffer *cb); +extern int acontains_tcbuffer_geo(const Temporal *temp, const GSERIALIZED *gs); +extern int acovers_cbuffer_tcbuffer(const Cbuffer *cb, const Temporal *temp); +extern int acovers_geo_tcbuffer(const GSERIALIZED *gs, const Temporal *temp); +extern int acovers_tcbuffer_cbuffer(const Temporal *temp, const Cbuffer *cb); +extern int acovers_tcbuffer_geo(const Temporal *temp, const GSERIALIZED *gs); +extern int adisjoint_tcbuffer_geo(const Temporal *temp, const GSERIALIZED *gs); +extern int adisjoint_tcbuffer_cbuffer(const Temporal *temp, const Cbuffer *cb); +extern int adisjoint_tcbuffer_tcbuffer(const Temporal *temp1, const Temporal *temp2); +extern int adwithin_tcbuffer_geo(const Temporal *temp, const GSERIALIZED *gs, double dist); +extern int adwithin_tcbuffer_cbuffer(const Temporal *temp, const Cbuffer *cb, double dist); +extern int adwithin_tcbuffer_tcbuffer(const Temporal *temp1, const Temporal *temp2, double dist); +extern int aintersects_tcbuffer_geo(const Temporal *temp, const GSERIALIZED *gs); +extern int aintersects_tcbuffer_cbuffer(const Temporal *temp, const Cbuffer *cb); +extern int aintersects_tcbuffer_tcbuffer(const Temporal *temp1, const Temporal *temp2); +extern int atouches_tcbuffer_geo(const Temporal *temp, const GSERIALIZED *gs); +extern int atouches_tcbuffer_cbuffer(const Temporal *temp, const Cbuffer *cb); +extern int atouches_tcbuffer_tcbuffer(const Temporal *temp1, const Temporal *temp2); +extern int econtains_cbuffer_tcbuffer(const Cbuffer *cb, const Temporal *temp); +extern int econtains_tcbuffer_cbuffer(const Temporal *temp, const Cbuffer *cb); +extern int econtains_tcbuffer_geo(const Temporal *temp, const GSERIALIZED *gs); +extern int ecovers_cbuffer_tcbuffer(const Cbuffer *cb, const Temporal *temp); +extern int ecovers_tcbuffer_cbuffer(const Temporal *temp, const Cbuffer *cb); +extern int ecovers_tcbuffer_geo(const Temporal *temp, const GSERIALIZED *gs); +extern int ecovers_tcbuffer_tcbuffer(const Temporal *temp1, const Temporal *temp2); +extern int edisjoint_tcbuffer_geo(const Temporal *temp, const GSERIALIZED *gs); +extern int edisjoint_tcbuffer_cbuffer(const Temporal *temp, const Cbuffer *cb); +extern int edwithin_tcbuffer_geo(const Temporal *temp, const GSERIALIZED *gs, double dist); +extern int edwithin_tcbuffer_cbuffer(const Temporal *temp, const Cbuffer *cb, double dist); +extern int edwithin_tcbuffer_tcbuffer(const Temporal *temp1, const Temporal *temp2, double dist); +extern int eintersects_tcbuffer_geo(const Temporal *temp, const GSERIALIZED *gs); +extern int eintersects_tcbuffer_cbuffer(const Temporal *temp, const Cbuffer *cb); +extern int eintersects_tcbuffer_tcbuffer(const Temporal *temp1, const Temporal *temp2); +extern int etouches_tcbuffer_geo(const Temporal *temp, const GSERIALIZED *gs); +extern int etouches_tcbuffer_cbuffer(const Temporal *temp, const Cbuffer *cb); +extern int etouches_tcbuffer_tcbuffer(const Temporal *temp1, const Temporal *temp2); + +/*****************************************************************************/ + +/* Spatiotemporal relationship functions */ + +extern Temporal *tcontains_cbuffer_tcbuffer(const Cbuffer *cb, const Temporal *temp); +extern Temporal *tcontains_geo_tcbuffer(const GSERIALIZED *gs, const Temporal *temp); +extern Temporal *tcontains_tcbuffer_geo(const Temporal *temp, const GSERIALIZED *gs); +extern Temporal *tcontains_tcbuffer_cbuffer(const Temporal *temp, const Cbuffer *cb); +extern Temporal *tcontains_tcbuffer_tcbuffer(const Temporal *temp1, const Temporal *temp2); +extern Temporal *tcovers_cbuffer_tcbuffer(const Cbuffer *cb, const Temporal *temp); +extern Temporal *tcovers_geo_tcbuffer(const GSERIALIZED *gs, const Temporal *temp); +extern Temporal *tcovers_tcbuffer_geo(const Temporal *temp, const GSERIALIZED *gs); +extern Temporal *tcovers_tcbuffer_cbuffer(const Temporal *temp, const Cbuffer *cb); +extern Temporal *tcovers_tcbuffer_tcbuffer(const Temporal *temp1, const Temporal *temp2); +extern Temporal *tdwithin_geo_tcbuffer(const GSERIALIZED *gs, const Temporal *temp, double dist); +extern Temporal *tdwithin_tcbuffer_geo(const Temporal *temp, const GSERIALIZED *gs, double dist); +extern Temporal *tdwithin_tcbuffer_cbuffer(const Temporal *temp, const Cbuffer *cb, double dist); +extern Temporal *tdwithin_tcbuffer_tcbuffer(const Temporal *temp1, const Temporal *temp2, double dist); +extern Temporal *tdisjoint_cbuffer_tcbuffer(const Cbuffer *cb, const Temporal *temp); +extern Temporal *tdisjoint_geo_tcbuffer(const GSERIALIZED *gs, const Temporal *temp); +extern Temporal *tdisjoint_tcbuffer_geo(const Temporal *temp, const GSERIALIZED *gs); +extern Temporal *tdisjoint_tcbuffer_cbuffer(const Temporal *temp, const Cbuffer *cb); +extern Temporal *tdisjoint_tcbuffer_tcbuffer(const Temporal *temp1, const Temporal *temp2); +extern Temporal *tintersects_cbuffer_tcbuffer(const Cbuffer *cb, const Temporal *temp); +extern Temporal *tintersects_geo_tcbuffer(const GSERIALIZED *gs, const Temporal *temp); +extern Temporal *tintersects_tcbuffer_geo(const Temporal *temp, const GSERIALIZED *gs); +extern Temporal *tintersects_tcbuffer_cbuffer(const Temporal *temp, const Cbuffer *cb); +extern Temporal *tintersects_tcbuffer_tcbuffer(const Temporal *temp1, const Temporal *temp2); +extern Temporal *ttouches_geo_tcbuffer(const GSERIALIZED *gs, const Temporal *temp); +extern Temporal *ttouches_tcbuffer_geo(const Temporal *temp, const GSERIALIZED *gs); +extern Temporal *ttouches_cbuffer_tcbuffer(const Cbuffer *cb, const Temporal *temp); +extern Temporal *ttouches_tcbuffer_cbuffer(const Temporal *temp, const Cbuffer *cb); +extern Temporal *ttouches_tcbuffer_tcbuffer(const Temporal *temp1, const Temporal *temp2); + +/*****************************************************************************/ + +#endif /* __MEOS_CBUFFER_H__ */ +/***************************************************************************** + * + * This MobilityDB code is provided under The PostgreSQL License. + * Copyright (c) 2016-2025, Université libre de Bruxelles and MobilityDB + * contributors + * + * MobilityDB includes portions of PostGIS version 3 source code released + * under the GNU General Public License (GPLv2 or later). + * Copyright (c) 2001-2025, PostGIS contributors + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without a written + * agreement is hereby granted, provided that the above copyright notice and + * this paragraph and the following two paragraphs appear in all copies. + * + * IN NO EVENT SHALL UNIVERSITE LIBRE DE BRUXELLES BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING + * LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, + * EVEN IF UNIVERSITE LIBRE DE BRUXELLES HAS BEEN ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * UNIVERSITE LIBRE DE BRUXELLES SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON + * AN "AS IS" BASIS, AND UNIVERSITE LIBRE DE BRUXELLES HAS NO OBLIGATIONS TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + * + *****************************************************************************/ + +/** + * @brief API of the Mobility Engine Open Source (MEOS) library. + */ + +#ifndef __MEOS_NPOINT_H__ +#define __MEOS_NPOINT_H__ + +/* C */ +#include +#include +/* MEOS */ +#include +#include +#include + +/***************************************************************************** + * Type definitions + *****************************************************************************/ + +/* Structure to represent network-based points */ + +typedef struct +{ + int64 rid; /**< route identifier */ + double pos; /**< position */ +} Npoint; + +/* Structure to represent network-based segments */ + +typedef struct +{ + int64 rid; /**< route identifier */ + double pos1; /**< position1 */ + double pos2; /**< position2 */ +} Nsegment; + +/***************************************************************************** + * Validity macros and functions + *****************************************************************************/ + +/** + * @brief Macro for ensuring that the set passed as argument is a network + * point set + */ +#if MEOS + #define VALIDATE_NPOINTSET(set, ret) \ + do { \ + if (! ensure_not_null((void *) (set)) || \ + ! ensure_set_isof_type((set), T_NPOINTSET) ) \ + return (ret); \ + } while (0) +#else + #define VALIDATE_NPOINTSET(set, ret) \ + do { \ + assert(set); \ + assert(set->settype == T_NPOINTSET); \ + } while (0) +#endif /* MEOS */ + +/** + * @brief Macro for ensuring that the temporal value passed as argument is a + * temporal network point + * @note The macro works for the Temporal type and its subtypes TInstant, + * TSequence, and TSequenceSet + */ +#if MEOS + #define VALIDATE_TNPOINT(temp, ret) \ + do { \ + if (! ensure_not_null((void *) (temp)) || \ + ! ensure_temporal_isof_type((Temporal *) (temp), T_TNPOINT) ) \ + return (ret); \ + } while (0) +#else + #define VALIDATE_TNPOINT(temp, ret) \ + do { \ + assert(temp); \ + assert(((Temporal *) (temp))->temptype == T_TNPOINT); \ + } while (0) +#endif /* MEOS */ + +/****************************************************************************** + * Functions for network points + ******************************************************************************/ + +/* Input and output functions */ + +extern char *npoint_as_ewkt(const Npoint *np, int maxdd); +extern char *npoint_as_hexwkb(const Npoint *np, uint8_t variant, size_t *size_out); +extern char *npoint_as_text(const Npoint *np, int maxdd); +extern uint8_t *npoint_as_wkb(const Npoint *np, uint8_t variant, size_t *size_out); +extern Npoint *npoint_from_hexwkb(const char *hexwkb); +extern Npoint *npoint_from_wkb(const uint8_t *wkb, size_t size); +extern Npoint *npoint_in(const char *str); +extern char *npoint_out(const Npoint *np, int maxdd); +extern Nsegment *nsegment_in(const char *str); +extern char *nsegment_out(const Nsegment *ns, int maxdd); + +/* Constructor functions */ + +extern Npoint *npoint_make(int64 rid, double pos); +extern Nsegment *nsegment_make(int64 rid, double pos1, double pos2); + +/* Conversion functions */ + +extern Npoint *geompoint_to_npoint(const GSERIALIZED *gs); +extern Nsegment *geom_to_nsegment(const GSERIALIZED *gs); +extern GSERIALIZED *npoint_to_geompoint(const Npoint *np); +extern Nsegment *npoint_to_nsegment(const Npoint *np); +extern STBox *npoint_to_stbox(const Npoint *np); +extern GSERIALIZED *nsegment_to_geom(const Nsegment *ns); +extern STBox *nsegment_to_stbox(const Nsegment *np); + +/* Accessor functions */ + +extern uint32 npoint_hash(const Npoint *np); +extern uint64 npoint_hash_extended(const Npoint *np, uint64 seed); +extern double npoint_position(const Npoint *np); +extern int64 npoint_route(const Npoint *np); +extern double nsegment_end_position(const Nsegment *ns); +extern int64 nsegment_route(const Nsegment *ns); +extern double nsegment_start_position(const Nsegment *ns); + +/* Route functions */ + +extern bool route_exists(int64 rid); +extern const GSERIALIZED *route_geom(int64 rid); +extern double route_length(int64 rid); + +/* Transformation functions */ + +extern Npoint *npoint_round(const Npoint *np, int maxdd); +extern Nsegment *nsegment_round(const Nsegment *ns, int maxdd); + +/* Spatial reference system functions */ + +extern int32_t get_srid_ways(void); +extern int32_t npoint_srid(const Npoint *np); +extern int32_t nsegment_srid(const Nsegment *ns); + +/* Bounding box functions */ + +extern STBox *npoint_timestamptz_to_stbox(const Npoint *np, TimestampTz t); +extern STBox *npoint_tstzspan_to_stbox(const Npoint *np, const Span *s); + +/* Comparison functions */ + +extern int npoint_cmp(const Npoint *np1, const Npoint *np2); +extern bool npoint_eq(const Npoint *np1, const Npoint *np2); +extern bool npoint_ge(const Npoint *np1, const Npoint *np2); +extern bool npoint_gt(const Npoint *np1, const Npoint *np2); +extern bool npoint_le(const Npoint *np1, const Npoint *np2); +extern bool npoint_lt(const Npoint *np1, const Npoint *np2); +extern bool npoint_ne(const Npoint *np1, const Npoint *np2); +extern bool npoint_same(const Npoint *np1, const Npoint *np2); +extern int nsegment_cmp(const Nsegment *ns1, const Nsegment *ns2); +extern bool nsegment_eq(const Nsegment *ns1, const Nsegment *ns2); +extern bool nsegment_ge(const Nsegment *ns1, const Nsegment *ns2); +extern bool nsegment_gt(const Nsegment *ns1, const Nsegment *ns2); +extern bool nsegment_le(const Nsegment *ns1, const Nsegment *ns2); +extern bool nsegment_lt(const Nsegment *ns1, const Nsegment *ns2); +extern bool nsegment_ne(const Nsegment *ns1, const Nsegment *ns2); + +/****************************************************************************** + * Functions for network point sets + ******************************************************************************/ + +/* Input and output functions */ + +extern Set *npointset_in(const char *str); +extern char *npointset_out(const Set *s, int maxdd); + +/* Constructor functions */ + +extern Set *npointset_make(Npoint **values, int count); + +/* Conversion functions */ + +extern Set *npoint_to_set(const Npoint *np); + +/* Accessor functions */ + +extern Npoint *npointset_end_value(const Set *s); +extern Set *npointset_routes(const Set *s); +extern Npoint *npointset_start_value(const Set *s); +extern bool npointset_value_n(const Set *s, int n, Npoint **result); +extern Npoint **npointset_values(const Set *s); + +/* Set operations */ + +extern bool contained_npoint_set(const Npoint *np, const Set *s); +extern bool contains_set_npoint(const Set *s, const Npoint *np); +extern Set *intersection_npoint_set(const Npoint *np, const Set *s); +extern Set *intersection_set_npoint(const Set *s, const Npoint *np); +extern Set *minus_npoint_set(const Npoint *np, const Set *s); +extern Set *minus_set_npoint(const Set *s, const Npoint *np); +extern Set *npoint_union_transfn(Set *state, const Npoint *np); +extern Set *union_npoint_set(const Npoint *np, const Set *s); +extern Set *union_set_npoint(const Set *s, const Npoint *np); + +/*===========================================================================* + * Functions for temporal network points + *===========================================================================*/ + +/***************************************************************************** + * Input/output functions + *****************************************************************************/ + +extern Temporal *tnpoint_in(const char *str); +extern char *tnpoint_out(const Temporal *temp, int maxdd); + +/***************************************************************************** + * Constructor functions + *****************************************************************************/ + +extern TInstant *tnpointinst_make(const Npoint *np, TimestampTz t); + +/***************************************************************************** + * Conversion functions + *****************************************************************************/ + +extern Temporal *tgeompoint_to_tnpoint(const Temporal *temp); +extern Temporal *tnpoint_to_tgeompoint(const Temporal *temp); + +/***************************************************************************** + * Accessor functions + *****************************************************************************/ + +extern Temporal *tnpoint_cumulative_length(const Temporal *temp); +extern double tnpoint_length(const Temporal *temp); +extern Nsegment **tnpoint_positions(const Temporal *temp, int *count); +extern int64 tnpoint_route(const Temporal *temp); +extern Set *tnpoint_routes(const Temporal *temp); +extern Temporal *tnpoint_speed(const Temporal *temp); +extern GSERIALIZED *tnpoint_trajectory(const Temporal *temp); +extern GSERIALIZED *tnpoint_twcentroid(const Temporal *temp); + +/***************************************************************************** + * Restriction functions + *****************************************************************************/ + +extern Temporal *tnpoint_at_geom(const Temporal *temp, const GSERIALIZED *gs); +extern Temporal *tnpoint_at_npoint(const Temporal *temp, const Npoint *np); +extern Temporal *tnpoint_at_npointset(const Temporal *temp, const Set *s); +extern Temporal *tnpoint_at_stbox(const Temporal *temp, const STBox *box, bool border_inc); +extern Temporal *tnpoint_minus_geom(const Temporal *temp, const GSERIALIZED *gs); +extern Temporal *tnpoint_minus_npoint(const Temporal *temp, const Npoint *np); +extern Temporal *tnpoint_minus_npointset(const Temporal *temp, const Set *s); +extern Temporal *tnpoint_minus_stbox(const Temporal *temp, const STBox *box, bool border_inc); + +/***************************************************************************** + * Distance functions + *****************************************************************************/ + +extern Temporal *tdistance_tnpoint_npoint(const Temporal *temp, const Npoint *np); +extern Temporal *tdistance_tnpoint_point(const Temporal *temp, const GSERIALIZED *gs); +extern Temporal *tdistance_tnpoint_tnpoint(const Temporal *temp1, const Temporal *temp2); +extern double nad_tnpoint_geo(const Temporal *temp, const GSERIALIZED *gs); +extern double nad_tnpoint_npoint(const Temporal *temp, const Npoint *np); +extern double nad_tnpoint_stbox(const Temporal *temp, const STBox *box); +extern double nad_tnpoint_tnpoint(const Temporal *temp1, const Temporal *temp2); +extern TInstant *nai_tnpoint_geo(const Temporal *temp, const GSERIALIZED *gs); +extern TInstant *nai_tnpoint_npoint(const Temporal *temp, const Npoint *np); +extern TInstant *nai_tnpoint_tnpoint(const Temporal *temp1, const Temporal *temp2); +extern GSERIALIZED *shortestline_tnpoint_geo(const Temporal *temp, const GSERIALIZED *gs); +extern GSERIALIZED *shortestline_tnpoint_npoint(const Temporal *temp, const Npoint *np); +extern GSERIALIZED *shortestline_tnpoint_tnpoint(const Temporal *temp1, const Temporal *temp2); + +/***************************************************************************** + * Aggregate functions + *****************************************************************************/ + +extern SkipList *tnpoint_tcentroid_transfn(SkipList *state, Temporal *temp); + +/***************************************************************************** + * Comparison functions + *****************************************************************************/ + +/* Ever/always comparisons */ + +extern int always_eq_npoint_tnpoint(const Npoint *np, const Temporal *temp); +extern int always_eq_tnpoint_npoint(const Temporal *temp, const Npoint *np); +extern int always_eq_tnpoint_tnpoint(const Temporal *temp1, const Temporal *temp2); +extern int always_ne_npoint_tnpoint(const Npoint *np, const Temporal *temp); +extern int always_ne_tnpoint_npoint(const Temporal *temp, const Npoint *np); +extern int always_ne_tnpoint_tnpoint(const Temporal *temp1, const Temporal *temp2); +extern int ever_eq_npoint_tnpoint(const Npoint *np, const Temporal *temp); +extern int ever_eq_tnpoint_npoint(const Temporal *temp, const Npoint *np); +extern int ever_eq_tnpoint_tnpoint(const Temporal *temp1, const Temporal *temp2); +extern int ever_ne_npoint_tnpoint(const Npoint *np, const Temporal *temp); +extern int ever_ne_tnpoint_npoint(const Temporal *temp, const Npoint *np); +extern int ever_ne_tnpoint_tnpoint(const Temporal *temp1, const Temporal *temp2); + +/* Temporal comparisons */ + +extern Temporal *teq_tnpoint_npoint(const Temporal *temp, const Npoint *np); +extern Temporal *tne_tnpoint_npoint(const Temporal *temp, const Npoint *np); + +/*****************************************************************************/ + +#endif +/***************************************************************************** + * + * This MobilityDB code is provided under The PostgreSQL License. + * Copyright (c) 2016-2025, Université libre de Bruxelles and MobilityDB + * contributors + * + * MobilityDB includes portions of PostGIS version 3 source code released + * under the GNU General Public License (GPLv2 or later). + * Copyright (c) 2001-2025, PostGIS contributors + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without a written + * agreement is hereby granted, provided that the above copyright notice and + * this paragraph and the following two paragraphs appear in all copies. + * + * IN NO EVENT SHALL UNIVERSITE LIBRE DE BRUXELLES BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING + * LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, + * EVEN IF UNIVERSITE LIBRE DE BRUXELLES HAS BEEN ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * UNIVERSITE LIBRE DE BRUXELLES SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON + * AN "AS IS" BASIS, AND UNIVERSITE LIBRE DE BRUXELLES HAS NO OBLIGATIONS TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + * + *****************************************************************************/ + +/** + * @brief External API of the Mobility Engine Open Source (MEOS) library + */ + +#ifndef __MEOS_POSE_H__ +#define __MEOS_POSE_H__ + +/* C */ +#include +#include +/* MEOS */ +#include +#include + +/***************************************************************************** + * Struct definitions + *****************************************************************************/ + +/** + * Opaque structure to represent pose values + */ +typedef struct Pose Pose; + +/***************************************************************************** + * Validity macros + *****************************************************************************/ + +/** + * @brief Macro for ensuring that the set passed as argument is a pose set + */ +#if MEOS + #define VALIDATE_POSESET(set, ret) \ + do { \ + if (! ensure_not_null((void *) set) || \ + ! ensure_set_isof_type((set), T_POSESET) ) \ + return (ret); \ + } while (0) +#else + #define VALIDATE_POSESET(set, ret) \ + do { \ + assert(set); \ + assert((set)->settype == T_POSESET); \ + } while (0) +#endif + +/** + * @brief Macro for ensuring that the temporal value passed as argument is a + * temporal pose + * @note The macro works for the Temporal type and its subtypes TInstant, + * TSequence, and TSequenceSet + */ +#if MEOS + #define VALIDATE_TPOSE(temp, ret) \ + do { \ + if (! ensure_not_null((void *) (temp)) || \ + ! ensure_temporal_isof_type((Temporal *) (temp), T_TPOSE) ) \ + return (ret); \ + } while (0) +#else + #define VALIDATE_TPOSE(temp, ret) \ + do { \ + assert(temp); \ + assert(((Temporal *) (temp))->temptype == T_TPOSE); \ + } while (0) +#endif + +/****************************************************************************** + * Functions for poses + ******************************************************************************/ + +/* Input and output functions */ + +extern char *pose_as_ewkt(const Pose *pose, int maxdd); +extern char *pose_as_hexwkb(const Pose *pose, uint8_t variant, size_t *size); +extern char *pose_as_text(const Pose *pose, int maxdd); +extern uint8_t *pose_as_wkb(const Pose *pose, uint8_t variant, size_t *size_out); +extern Pose *pose_from_wkb(const uint8_t *wkb, size_t size); +extern Pose *pose_from_hexwkb(const char *hexwkb); +extern Pose *pose_in(const char *str); +extern char *pose_out(const Pose *pose, int maxdd); + +/* Constructor functions */ + +extern Pose *pose_copy(const Pose *pose); +extern Pose *pose_make_2d(double x, double y, double theta, int32_t srid); +extern Pose *pose_make_3d(double x, double y, double z, double W, double X, double Y, double Z, int32_t srid); +extern Pose *pose_make_point2d(const GSERIALIZED *gs, double theta); +extern Pose *pose_make_point3d(const GSERIALIZED *gs, double W, double X, double Y, double Z); + +/* Conversion functions */ + +extern GSERIALIZED *pose_to_point(const Pose *pose); +extern STBox *pose_to_stbox(const Pose *pose); + +/* Accessor functions */ + +extern uint32 pose_hash(const Pose *pose); +extern uint64 pose_hash_extended(const Pose *pose, uint64 seed); +extern double *pose_orientation(const Pose *pose); +extern double pose_rotation(const Pose *pose); + +/* Transformation functions */ + +extern Pose *pose_round(const Pose *pose, int maxdd); +extern Pose **posearr_round(const Pose **posearr, int count, int maxdd); + +/* Spatial reference system functions */ + +extern void pose_set_srid(Pose *pose, int32_t srid); +extern int32_t pose_srid(const Pose *pose); +extern Pose *pose_transform(const Pose *pose, int32_t srid); +extern Pose *pose_transform_pipeline(const Pose *pose, const char *pipelinestr, int32_t srid, bool is_forward); + +/* Bounding box functions */ + +extern STBox *pose_tstzspan_to_stbox(const Pose *pose, const Span *s); +extern STBox *pose_timestamptz_to_stbox(const Pose *pose, TimestampTz t); + +/* Distance functions */ + +extern double distance_pose_geo(const Pose *pose, const GSERIALIZED *gs); +extern double distance_pose_pose(const Pose *pose1, const Pose *pose2); +extern double distance_pose_stbox(const Pose *pose, const STBox *box); + +/* Comparison functions */ + +extern int pose_cmp(const Pose *pose1, const Pose *pose2); +extern bool pose_eq(const Pose *pose1, const Pose *pose2); +extern bool pose_ge(const Pose *pose1, const Pose *pose2); +extern bool pose_gt(const Pose *pose1, const Pose *pose2); +extern bool pose_le(const Pose *pose1, const Pose *pose2); +extern bool pose_lt(const Pose *pose1, const Pose *pose2); +extern bool pose_ne(const Pose *pose1, const Pose *pose2); +extern bool pose_nsame(const Pose *pose1, const Pose *pose2); +extern bool pose_same(const Pose *pose1, const Pose *pose2); + +/****************************************************************************** + * Functions for pose sets + ******************************************************************************/ + +/* Input and output functions */ + +extern Set *poseset_in(const char *str); +extern char *poseset_out(const Set *s, int maxdd); + +/* Constructor functions */ + +extern Set *poseset_make(const Pose **values, int count); + +/* Conversion functions */ + +extern Set *pose_to_set(const Pose *pose); + +/* Accessor functions */ + +extern Pose *poseset_end_value(const Set *s); +extern Pose *poseset_start_value(const Set *s); +extern bool poseset_value_n(const Set *s, int n, Pose **result); +extern Pose **poseset_values(const Set *s); + +/* Set operations */ + +extern bool contained_pose_set(const Pose *pose, const Set *s); +extern bool contains_set_pose(const Set *s, Pose *pose); +extern Set *intersection_pose_set(const Pose *pose, const Set *s); +extern Set *intersection_set_pose(const Set *s, const Pose *pose); +extern Set *minus_pose_set(const Pose *pose, const Set *s); +extern Set *minus_set_pose(const Set *s, const Pose *pose); +extern Set *pose_union_transfn(Set *state, const Pose *pose); +extern Set *union_pose_set(const Pose *pose, const Set *s); +extern Set *union_set_pose(const Set *s, const Pose *pose); + +/*===========================================================================* + * Functions for temporal poses + *===========================================================================*/ + +/***************************************************************************** + * Input/output functions + *****************************************************************************/ + +Temporal *tpose_in(const char *str); + +/***************************************************************************** + * Constructor functions + *****************************************************************************/ + + +/***************************************************************************** + * Conversion functions + *****************************************************************************/ + +extern Temporal *tpose_make(const Temporal *tpoint, const Temporal *tradius); +extern Temporal *tpose_to_tpoint(const Temporal *temp); + +/***************************************************************************** + * Accessor functions + *****************************************************************************/ + +extern Pose *tpose_end_value(const Temporal *temp); +extern Set *tpose_points(const Temporal *temp); +// extern Temporal *tpose_orientation(const Temporal *temp); +extern Temporal *tpose_rotation(const Temporal *temp); +extern Pose *tpose_start_value(const Temporal *temp); +extern GSERIALIZED *tpose_trajectory(const Temporal *temp); +extern bool tpose_value_at_timestamptz(const Temporal *temp, TimestampTz t, bool strict, Pose **value); +extern bool tpose_value_n(const Temporal *temp, int n, Pose **result); +extern Pose **tpose_values(const Temporal *temp, int *count); + +/***************************************************************************** + * Restriction functions + *****************************************************************************/ + +extern Temporal *tpose_at_geom(const Temporal *temp, const GSERIALIZED *gs); +extern Temporal *tpose_at_stbox(const Temporal *temp, const STBox *box, bool border_inc); +extern Temporal *tpose_at_pose(const Temporal *temp, const Pose *pose); +extern Temporal *tpose_minus_geom(const Temporal *temp, const GSERIALIZED *gs); +extern Temporal *tpose_minus_pose(const Temporal *temp, const Pose *pose); +extern Temporal *tpose_minus_stbox(const Temporal *temp, const STBox *box, bool border_inc); + +/***************************************************************************** + * Distance functions + *****************************************************************************/ + +extern Temporal *tdistance_tpose_pose(const Temporal *temp, const Pose *pose); +extern Temporal *tdistance_tpose_point(const Temporal *temp, const GSERIALIZED *gs); +extern Temporal *tdistance_tpose_tpose(const Temporal *temp1, const Temporal *temp2); +extern double nad_tpose_geo(const Temporal *temp, const GSERIALIZED *gs); +extern double nad_tpose_pose(const Temporal *temp, const Pose *pose); +extern double nad_tpose_stbox(const Temporal *temp, const STBox *box); +extern double nad_tpose_tpose(const Temporal *temp1, const Temporal *temp2); +extern TInstant *nai_tpose_geo(const Temporal *temp, const GSERIALIZED *gs); +extern TInstant *nai_tpose_pose(const Temporal *temp, const Pose *pose); +extern TInstant *nai_tpose_tpose(const Temporal *temp1, const Temporal *temp2); +extern GSERIALIZED *shortestline_tpose_geo(const Temporal *temp, const GSERIALIZED *gs); +extern GSERIALIZED *shortestline_tpose_pose(const Temporal *temp, const Pose *pose); +extern GSERIALIZED *shortestline_tpose_tpose(const Temporal *temp1, const Temporal *temp2); + +/***************************************************************************** + * Comparison functions + *****************************************************************************/ + +/* Ever/always and temporal comparison functions */ + +extern int always_eq_pose_tpose(const Pose *pose, const Temporal *temp); +extern int always_eq_tpose_pose(const Temporal *temp, const Pose *pose); +extern int always_eq_tpose_tpose(const Temporal *temp1, const Temporal *temp2); +extern int always_ne_pose_tpose(const Pose *pose, const Temporal *temp); +extern int always_ne_tpose_pose(const Temporal *temp, const Pose *pose); +extern int always_ne_tpose_tpose(const Temporal *temp1, const Temporal *temp2); +extern int ever_eq_pose_tpose(const Pose *pose, const Temporal *temp); +extern int ever_eq_tpose_pose(const Temporal *temp, const Pose *pose); +extern int ever_eq_tpose_tpose(const Temporal *temp1, const Temporal *temp2); +extern int ever_ne_pose_tpose(const Pose *pose, const Temporal *temp); +extern int ever_ne_tpose_pose(const Temporal *temp, const Pose *pose); +extern int ever_ne_tpose_tpose(const Temporal *temp1, const Temporal *temp2); + +/*****************************************************************************/ + +extern Temporal *teq_pose_tpose(const Pose *pose, const Temporal *temp); +extern Temporal *teq_tpose_pose(const Temporal *temp, const Pose *pose); +extern Temporal *tne_pose_tpose(const Pose *pose, const Temporal *temp); +extern Temporal *tne_tpose_pose(const Temporal *temp, const Pose *pose); + +/*****************************************************************************/ + +/* Ever and always spatial relationship functions */ + + +/*****************************************************************************/ + +/* Spatiotemporal relationship functions */ + + +/*****************************************************************************/ + +#endif /* __MEOS_POSE_H__ */ +/***************************************************************************** + * + * This MobilityDB code is provided under The PostgreSQL License. + * Copyright (c) 2016-2025, Université libre de Bruxelles and MobilityDB + * contributors + * + * MobilityDB includes portions of PostGIS version 3 source code released + * under the GNU General Public License (GPLv2 or later). + * Copyright (c) 2001-2025, PostGIS contributors + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without a written + * agreement is hereby granted, provided that the above copyright notice and + * this paragraph and the following two paragraphs appear in all copies. + * + * IN NO EVENT SHALL UNIVERSITE LIBRE DE BRUXELLES BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING + * LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, + * EVEN IF UNIVERSITE LIBRE DE BRUXELLES HAS BEEN ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * UNIVERSITE LIBRE DE BRUXELLES SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURRGEO. THE SOFTWARE PROVIDED HEREUNDER IS ON + * AN "AS IS" BASIS, AND UNIVERSITE LIBRE DE BRUXELLES HAS NO OBLIGATIONS TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + * + *****************************************************************************/ + +/** + * @brief External API of the Mobility Engine Open Source (MEOS) library + */ + +#ifndef __MEOS_RGEO_H__ +#define __MEOS_RGEO_H__ + +/* C */ +#include +/* MEOS */ +#include +#include +#include + +/***************************************************************************** + * Validity macros + *****************************************************************************/ + +/** + * @brief Macro for ensuring that the temporal value passed as argument is a + * temporal rigid geometry + * @note The macro works for the Temporal type and its subtypes TInstant, + * TSequence, and TSequenceSet + */ +#if MEOS + #define VALIDATE_TRGEOMETRY(temp, ret) \ + do { \ + if (! ensure_not_null((void *) (temp)) || \ + ! ensure_temporal_isof_type((Temporal *) (temp), T_TRGEOMETRY) ) \ + return (ret); \ + } while (0) +#else + #define VALIDATE_TRGEOMETRY(temp, ret) \ + do { \ + assert(temp); \ + assert(((Temporal *) (temp))->temptype == T_TRGEOMETRY); \ + } while (0) +#endif + +/*===========================================================================* + * Functions for temporal rigid geometries + *===========================================================================*/ + +/***************************************************************************** + * Input/output functions + *****************************************************************************/ + +extern char *trgeo_out(const Temporal *temp); + +/***************************************************************************** + * Constructor functions + *****************************************************************************/ + +extern TInstant *trgeoinst_make(const GSERIALIZED *geom, const Pose *pose, TimestampTz t); +extern Temporal *geo_tpose_to_trgeo(const GSERIALIZED *gs, const Temporal *temp); + +/***************************************************************************** + * Conversion functions + *****************************************************************************/ + +extern Temporal *trgeo_to_tpose(const Temporal *temp); +extern Temporal *trgeo_to_tpoint(const Temporal *temp); + +/***************************************************************************** + * Accessor functions + *****************************************************************************/ + +extern TInstant *trgeo_end_instant(const Temporal *temp); +extern TSequence *trgeo_end_sequence(const Temporal *temp); +extern GSERIALIZED *trgeo_end_value(const Temporal *temp); +extern GSERIALIZED *trgeo_geom(const Temporal *temp); +extern TInstant *trgeo_instant_n(const Temporal *temp, int n); +extern TInstant **trgeo_instants(const Temporal *temp, int *count); +extern Set *trgeo_points(const Temporal *temp); +extern Temporal *trgeo_rotation(const Temporal *temp); +extern TSequence **trgeo_segments(const Temporal *temp, int *count); +extern TSequence *trgeo_sequence_n(const Temporal *temp, int i); +extern TSequence **trgeo_sequences(const Temporal *temp, int *count); +extern TInstant *trgeo_start_instant(const Temporal *temp); +extern TSequence *trgeo_start_sequence(const Temporal *temp); +extern GSERIALIZED *trgeo_start_value(const Temporal *temp); +extern bool trgeo_value_n(const Temporal *temp, int n, GSERIALIZED **result); +extern GSERIALIZED *trgeo_traversed_area(const Temporal *temp, bool unary_union); + +/***************************************************************************** + * Transformation functions + *****************************************************************************/ + +extern Temporal *trgeo_append_tinstant(Temporal *temp, const TInstant *inst, interpType interp, double maxdist, const Interval *maxt, bool expand); +extern Temporal *trgeo_append_tsequence(Temporal *temp, const TSequence *seq, bool expand); +extern Temporal *trgeo_delete_timestamptz(const Temporal *temp, TimestampTz t, bool connect); +extern Temporal *trgeo_delete_tstzset(const Temporal *temp, const Set *s, bool connect); +extern Temporal *trgeo_delete_tstzspan(const Temporal *temp, const Span *s, bool connect); +extern Temporal *trgeo_delete_tstzspanset(const Temporal *temp, const SpanSet *ss, bool connect); +extern Temporal *trgeo_round(const Temporal *temp, int maxdd); +extern Temporal *trgeo_set_interp(const Temporal *temp, interpType interp); +extern TInstant *trgeo_to_tinstant(const Temporal *temp); + +/***************************************************************************** + * Restriction functions + *****************************************************************************/ + +extern Temporal *trgeo_after_timestamptz(const Temporal *temp, TimestampTz t, bool strict); +extern Temporal *trgeo_before_timestamptz(const Temporal *temp, TimestampTz t, bool strict); + +extern Temporal *trgeo_restrict_value(const Temporal *temp, Datum value, bool atfunc); +extern Temporal *trgeo_restrict_values(const Temporal *temp, const Set *s, bool atfunc); + +extern Temporal *trgeo_restrict_timestamptz(const Temporal *temp, TimestampTz t, bool atfunc); +extern Temporal *trgeo_restrict_tstzset(const Temporal *temp, const Set *s, bool atfunc); +extern Temporal *trgeo_restrict_tstzspan(const Temporal *temp, const Span *s, bool atfunc); +extern Temporal *trgeo_restrict_tstzspanset(const Temporal *temp, const SpanSet *ss, bool atfunc); + +// extern Temporal *trgeo_at_geom(const Temporal *temp, const GSERIALIZED *gs); +// extern Temporal *trgeo_at_geo(const Temporal *temp, const GSERIALIZED *gs); +// extern Temporal *trgeo_at_stbox(const Temporal *temp, const STBox *box, bool border_inc); +// extern Temporal *trgeo_at_elevation(const Temporal *temp, const Span *s); +// extern Temporal *trgeo_minus_geom(const Temporal *temp, const GSERIALIZED *gs); +// extern Temporal *trgeo_minus_geo(const Temporal *temp, const GSERIALIZED *gs); +// extern Temporal *trgeo_minus_stbox(const Temporal *temp, const STBox *box, bool border_inc); +// extern Temporal *trgeo_minus_elevation(const Temporal *temp, const Span *s); + +/***************************************************************************** + * Distance functions + *****************************************************************************/ + +extern Temporal *tdistance_trgeo_geo(const Temporal *temp, const GSERIALIZED *gs); +extern Temporal *tdistance_trgeo_tpoint(const Temporal *temp1, const Temporal *temp2); +extern Temporal *tdistance_trgeo_trgeo(const Temporal *temp1, const Temporal *temp2); +extern double nad_stbox_trgeo(const STBox *box, const Temporal *temp); +extern double nad_trgeo_geo(const Temporal *temp, const GSERIALIZED *gs); +extern double nad_trgeo_stbox(const Temporal *temp, const STBox *box); +extern double nad_trgeo_tpoint(const Temporal *temp1, const Temporal *temp2); +extern double nad_trgeo_trgeo(const Temporal *temp1, const Temporal *temp2); +extern TInstant *nai_trgeo_geo(const Temporal *temp, const GSERIALIZED *gs); +extern TInstant *nai_trgeo_tpoint(const Temporal *temp1, const Temporal *temp2); +extern TInstant *nai_trgeo_trgeo(const Temporal *temp1, const Temporal *temp2); +extern GSERIALIZED *shortestline_trgeo_geo(const Temporal *temp, const GSERIALIZED *gs); +extern GSERIALIZED *shortestline_trgeo_tpoint(const Temporal *temp1, const Temporal *temp2); +extern GSERIALIZED *shortestline_trgeo_trgeo(const Temporal *temp1, const Temporal *temp2); + +/***************************************************************************** + * Comparison functions + *****************************************************************************/ + +/* Ever/always and temporal comparison functions */ + +extern int always_eq_geo_trgeo(const GSERIALIZED *gs, const Temporal *temp); +extern int always_eq_trgeo_geo(const Temporal *temp, const GSERIALIZED *gs); +extern int always_eq_trgeo_trgeo(const Temporal *temp1, const Temporal *temp2); +extern int always_ne_geo_trgeo(const GSERIALIZED *gs, const Temporal *temp); +extern int always_ne_trgeo_geo(const Temporal *temp, const GSERIALIZED *gs); +extern int always_ne_trgeo_trgeo(const Temporal *temp1, const Temporal *temp2); +extern int ever_eq_geo_trgeo(const GSERIALIZED *gs, const Temporal *temp); +extern int ever_eq_trgeo_geo(const Temporal *temp, const GSERIALIZED *gs); +extern int ever_eq_trgeo_trgeo(const Temporal *temp1, const Temporal *temp2); +extern int ever_ne_geo_trgeo(const GSERIALIZED *gs, const Temporal *temp); +extern int ever_ne_trgeo_geo(const Temporal *temp, const GSERIALIZED *gs); +extern int ever_ne_trgeo_trgeo(const Temporal *temp1, const Temporal *temp2); +extern Temporal *teq_geo_trgeo(const GSERIALIZED *gs, const Temporal *temp); +extern Temporal *teq_trgeo_geo(const Temporal *temp, const GSERIALIZED *gs); +extern Temporal *tne_geo_trgeo(const GSERIALIZED *gs, const Temporal *temp); +extern Temporal *tne_trgeo_geo(const Temporal *temp, const GSERIALIZED *gs); + +/*****************************************************************************/ + +/* Ever and always spatial relationship functions */ + + +/*****************************************************************************/ + +/* Spatiotemporal relationship functions */ + + +/*****************************************************************************/ + +#endif /* __MEOS_RGEO_H__ */ diff --git a/src/main/java/functions/functions.java b/src/main/java/functions/functions.java index b1481dbf4..86491c0c7 100644 --- a/src/main/java/functions/functions.java +++ b/src/main/java/functions/functions.java @@ -1,206 +1,211 @@ package functions; -import jnr.ffi.*; +import jnr.ffi.Pointer; +import jnr.ffi.Memory; import jnr.ffi.Runtime; -import org.w3c.dom.ls.LSOutput; +import jnr.ffi.byref.PointerByReference; +import jnr.ffi.Struct; import utils.JarLibraryLoader; -import jnr.ffi.LibraryLoader; +import utils.meosCatalog.MeosEnums.meosType; +import utils.meosCatalog.MeosEnums.meosOper; import java.time.*; -import java.util.HashMap; -import java.util.Map; public class functions { public interface MeosLibrary { - String gitLibraryPath= "/home/runner/work/JMEOS/JMEOS/src/lib"; + String libraryPath = "libmeos.so"; - String libraryName= "meos"; - - MeosLibrary INSTANCE = JarLibraryLoader.create(MeosLibrary.class, libraryName).getLibraryInstance(); + MeosLibrary INSTANCE = JarLibraryLoader.create(MeosLibrary.class, libraryPath).getLibraryInstance(); MeosLibrary meos = MeosLibrary.INSTANCE; - int geo_get_srid(Pointer g); + int date_in(String str); - void meos_error(int errlevel, int errcode, String format, Pointer args); + String date_out(int d); - int meos_errno(); + int interval_cmp(Pointer interv1, Pointer interv2); - int meos_errno_set(int err); + Pointer interval_in(String str, int typmod); - int meos_errno_restore(int err); + String interval_out(Pointer interv); - int meos_errno_reset(); + long time_in(String str, int typmod); - void meos_initialize_timezone(String name); + String time_out(long t); - void meos_initialize_error_handler(error_handler_fn err_handler); + long timestamp_in(String str, int typmod); - void meos_initialize_noexit_error_handler(); + String timestamp_out(long t); - void meos_finalize_timezone(); + long timestamptz_in(String str, int typmod); - boolean meos_set_datestyle(String newval, Pointer extra); + String timestamptz_out(long t); - boolean meos_set_intervalstyle(String newval, int extra); + Pointer meos_array_create(int elem_size); - String meos_get_datestyle(); + void meos_array_add(Pointer array, Pointer value); - String meos_get_intervalstyle(); + Pointer meos_array_get(Pointer array, int n); - void meos_initialize(String tz_str, error_handler_fn err_handler); + int meos_array_count(Pointer array); - void meos_initialize(); + void meos_array_reset(Pointer array); - void meos_set_spatial_ref_sys_csv(String path); + void meos_array_reset_free(Pointer array); - void meos_finalize(); + void meos_array_destroy(Pointer array); - int add_date_int(int d, int days); + void meos_array_destroy_free(Pointer array); - Pointer add_interval_interval(Pointer interv1, Pointer interv2); + Pointer rtree_create_intspan(); - long add_timestamptz_interval(long t, Pointer interv); + Pointer rtree_create_bigintspan(); - boolean bool_in(String str); + Pointer rtree_create_floatspan(); - String bool_out(boolean b); + Pointer rtree_create_datespan(); - Pointer cstring2text(String str); + Pointer rtree_create_tstzspan(); - long date_to_timestamptz(int d); + Pointer rtree_create_tbox(); - Pointer minus_date_date(int d1, int d2); + Pointer rtree_create_stbox(); - int minus_date_int(int d, int days); + void rtree_free(Pointer rtree); - long minus_timestamptz_interval(long t, Pointer interv); + void rtree_insert(Pointer rtree, Pointer box, int id); - Pointer minus_timestamptz_timestamptz(long t1, long t2); + void rtree_insert_temporal(Pointer rtree, Pointer temp, int id); - Pointer mult_interval_double(Pointer interv, double factor); + int rtree_search(Pointer rtree, int op, Pointer query, Pointer result); - int pg_date_in(String str); + int rtree_search_temporal(Pointer rtree, int op, Pointer temp, Pointer result); - String pg_date_out(int d); + void meos_error(int errlevel, int errcode, String format, Pointer args); - int pg_interval_cmp(Pointer interv1, Pointer interv2); + int meos_errno(); - Pointer pg_interval_in(String str, int typmod); + int meos_errno_set(int err); - Pointer pg_interval_make(int years, int months, int weeks, int days, int hours, int mins, double secs); + int meos_errno_restore(int err); - String pg_interval_out(Pointer interv); + int meos_errno_reset(); - long pg_time_in(String str, int typmod); + void meos_initialize_timezone(String name); - String pg_time_out(long t); + void meos_initialize_error_handler(Pointer err_handler); - long pg_timestamp_in(String str, int typmod); + void meos_finalize_timezone(); - String pg_timestamp_out(long t); + void meos_finalize_projsrs(); - long pg_timestamptz_in(String str, int typmod); + void meos_finalize_ways(); - String pg_timestamptz_out(long t); + boolean meos_set_datestyle(String newval, Pointer extra); - String text2cstring(Pointer txt); + boolean meos_set_intervalstyle(String newval, int extra); - int text_cmp(Pointer txt1, Pointer txt2); + String meos_get_datestyle(); - Pointer text_copy(Pointer txt); + String meos_get_intervalstyle(); - Pointer text_initcap(Pointer txt); + void meos_set_spatial_ref_sys_csv(String path); - Pointer text_lower(Pointer txt); + void meos_initialize(); - String text_out(Pointer txt); + void meos_finalize(); - Pointer text_upper(Pointer txt); + int add_date_int(int d, int days); - Pointer textcat_text_text(Pointer txt1, Pointer txt2); + Pointer add_interval_interval(Pointer interv1, Pointer interv2); - int timestamptz_to_date(long t); + long add_timestamptz_interval(long t, Pointer interv); - Pointer geo_as_ewkb(Pointer gs, String endian); + boolean bool_in(String str); - String geo_as_ewkt(Pointer gs, int precision); + String bool_out(boolean b); - String geo_as_geojson(Pointer gs, int option, int precision, String srs); + Pointer cstring2text(String str); - String geo_as_hexewkb(Pointer gs, String endian); + long date_to_timestamp(int dateVal); - String geo_as_text(Pointer gs, int precision); + long date_to_timestamptz(int d); - Pointer geo_from_ewkb(Pointer bytea_wkb, int srid); + double float_exp(double d); - Pointer geo_from_geojson(String geojson); + double float_ln(double d); - Pointer geo_from_text(String wkt, int srid); + double float_log10(double d); - boolean geom_contains(Pointer gs1, Pointer gs2); + String float8_out(double d, int maxdd); - boolean geom_covers(Pointer gs1, Pointer gs2); + double float_round(double d, int maxdd); - boolean geom_disjoint2d(Pointer gs1, Pointer gs2); + int int32_cmp(int l, int r); - boolean geom_dwithin2d(Pointer gs1, Pointer gs2, double tolerance); + int int64_cmp(long l, long r); - boolean geom_intersects2d(Pointer gs1, Pointer gs2); + Pointer interval_make(int years, int months, int weeks, int days, int hours, int mins, double secs); - boolean geom_touches(Pointer gs1, Pointer gs2); + int minus_date_date(int d1, int d2); - Pointer geom_boundary(Pointer gs); + int minus_date_int(int d, int days); - Pointer geom_buffer(Pointer gs, double size, String params); + long minus_timestamptz_interval(long t, Pointer interv); - Pointer geom_centroid(Pointer gs); + Pointer minus_timestamptz_timestamptz(long t1, long t2); - Pointer geom_convex_hull(Pointer gs); + Pointer mul_interval_double(Pointer interv, double factor); - Pointer geom_difference2d(Pointer gs1, Pointer gs2); + int pg_date_in(String str); - Pointer geom_intersection2d(Pointer gs1, Pointer gs2); + String pg_date_out(int d); - Pointer geom_unary_union(Pointer gs, double prec); + int pg_interval_cmp(Pointer interv1, Pointer interv2); - double geom_distance2d(Pointer gs1, Pointer gs2); + Pointer pg_interval_in(String str, int typmod); - double geom_length(Pointer gs); + String pg_interval_out(Pointer interv); - double geom_perimeter(Pointer gs); + long pg_timestamp_in(String str, int typmod); - Pointer geo_reverse(Pointer gs); + String pg_timestamp_out(long t); - Pointer geo_round(Pointer gs, int maxdd); + long pg_timestamptz_in(String str, int typmod); - Pointer line_interpolate_point(Pointer gs, double distance_fraction, boolean repeat); + String pg_timestamptz_out(long t); - Pointer line_substring(Pointer gs, double from, double to); + String text2cstring(Pointer txt); - Pointer geom_to_geog(Pointer geom); + int text_cmp(Pointer txt1, Pointer txt2); - String geo_out(Pointer gs); + Pointer text_copy(Pointer txt); - boolean geo_same(Pointer gs1, Pointer gs2); + Pointer text_in(String str); + + Pointer text_initcap(Pointer txt); - Pointer geography_from_hexewkb(String wkt); + Pointer text_lower(Pointer txt); + + String text_out(Pointer txt); - Pointer geography_from_text(String wkt, int srid); + Pointer text_upper(Pointer txt); - Pointer geometry_from_hexewkb(String wkt); + Pointer textcat_text_text(Pointer txt1, Pointer txt2); - Pointer geometry_from_text(String wkt, int srid); + long timestamptz_shift(long t, Pointer interv); - Pointer pgis_geography_in(String str, int typmod); + int timestamp_to_date(long t); - Pointer pgis_geometry_in(String str, int typmod); + int timestamptz_to_date(long t); Pointer bigintset_in(String str); String bigintset_out(Pointer set); + Pointer bigintspan_expand(Pointer s, long value); + Pointer bigintspan_in(String str); String bigintspan_out(Pointer s); @@ -225,6 +230,8 @@ public interface MeosLibrary { String floatset_out(Pointer set, int maxdd); + Pointer floatspan_expand(Pointer s, double value); + Pointer floatspan_in(String str); String floatspan_out(Pointer s, int maxdd); @@ -233,20 +240,12 @@ public interface MeosLibrary { String floatspanset_out(Pointer ss, int maxdd); - Pointer geogset_in(String str); - - Pointer geomset_in(String str); - - String geoset_as_ewkt(Pointer set, int maxdd); - - String geoset_as_text(Pointer set, int maxdd); - - String geoset_out(Pointer set, int maxdd); - Pointer intset_in(String str); String intset_out(Pointer set); + Pointer intspan_expand(Pointer s, int value); + Pointer intspan_in(String str); String intspan_out(Pointer s); @@ -307,8 +306,6 @@ public interface MeosLibrary { Pointer floatspan_make(double lower, double upper, boolean lower_inc, boolean upper_inc); - Pointer geoset_make(Pointer values, int count); - Pointer intset_make(Pointer values, int count); Pointer intspan_make(int lower, int upper, boolean lower_inc, boolean upper_inc); @@ -319,7 +316,7 @@ public interface MeosLibrary { Pointer spanset_copy(Pointer ss); - Pointer spanset_make(Pointer spans, int count, boolean normalize, boolean order); + Pointer spanset_make(Pointer spans, int count); Pointer textset_make(Pointer values, int count); @@ -357,8 +354,6 @@ public interface MeosLibrary { Pointer floatspanset_to_intspanset(Pointer ss); - Pointer geo_to_set(Pointer gs); - Pointer int_to_set(int i); Pointer int_to_span(int i); @@ -371,6 +366,8 @@ public interface MeosLibrary { Pointer intspanset_to_floatspanset(Pointer ss); + Pointer set_to_span(Pointer s); + Pointer set_to_spanset(Pointer s); Pointer span_to_spanset(Pointer s); @@ -455,16 +452,6 @@ public interface MeosLibrary { double floatspanset_width(Pointer ss, boolean boundspan); - Pointer geoset_end_value(Pointer s); - - int geoset_srid(Pointer s); - - Pointer geoset_start_value(Pointer s); - - boolean geoset_value_n(Pointer s, int n, Pointer result); - - Pointer geoset_values(Pointer s); - int intset_end_value(Pointer s); int intset_start_value(Pointer s); @@ -491,8 +478,6 @@ public interface MeosLibrary { int set_num_values(Pointer s); - Pointer set_to_span(Pointer s); - int span_hash(Pointer s); long span_hash_extended(Pointer s, long seed); @@ -515,7 +500,7 @@ public interface MeosLibrary { Pointer spanset_span_n(Pointer ss, int i); - Pointer spanset_spans(Pointer ss); + Pointer spanset_spanarr(Pointer ss); Pointer spanset_start_span(Pointer ss); @@ -553,10 +538,10 @@ public interface MeosLibrary { long tstzspanset_start_timestamptz(Pointer ss); - boolean tstzspanset_timestamptz_n(Pointer ss, int n, Pointer result); - Pointer tstzspanset_timestamps(Pointer ss); + boolean tstzspanset_timestamptz_n(Pointer ss, int n, Pointer result); + long tstzspanset_upper(Pointer ss); Pointer bigintset_shift_scale(Pointer s, long shift, long width, boolean hasshift, boolean haswidth); @@ -573,20 +558,22 @@ public interface MeosLibrary { Pointer floatset_ceil(Pointer s); - Pointer floatset_floor(Pointer s); - Pointer floatset_degrees(Pointer s, boolean normalize); - Pointer floatset_radians(Pointer s); + Pointer floatset_floor(Pointer s); - Pointer floatset_round(Pointer s, int maxdd); + Pointer floatset_radians(Pointer s); Pointer floatset_shift_scale(Pointer s, double shift, double width, boolean hasshift, boolean haswidth); Pointer floatspan_ceil(Pointer s); + Pointer floatspan_degrees(Pointer s, boolean normalize); + Pointer floatspan_floor(Pointer s); + Pointer floatspan_radians(Pointer s); + Pointer floatspan_round(Pointer s, int maxdd); Pointer floatspan_shift_scale(Pointer s, double shift, double width, boolean hasshift, boolean haswidth); @@ -595,27 +582,27 @@ public interface MeosLibrary { Pointer floatspanset_floor(Pointer ss); - Pointer floatspanset_round(Pointer ss, int maxdd); + Pointer floatspanset_degrees(Pointer ss, boolean normalize); - Pointer floatspanset_shift_scale(Pointer ss, double shift, double width, boolean hasshift, boolean haswidth); + Pointer floatspanset_radians(Pointer ss); - Pointer geoset_round(Pointer s, int maxdd); + Pointer floatspanset_round(Pointer ss, int maxdd); - Pointer geoset_set_srid(Pointer s, int srid); + Pointer floatspanset_shift_scale(Pointer ss, double shift, double width, boolean hasshift, boolean haswidth); - Pointer geoset_transform(Pointer s, int srid); + Pointer intset_shift_scale(Pointer s, int shift, int width, boolean hasshift, boolean haswidth); - Pointer geoset_transform_pipeline(Pointer s, String pipelinestr, int srid, boolean is_forward); + Pointer intspan_shift_scale(Pointer s, int shift, int width, boolean hasshift, boolean haswidth); - Pointer point_transform(Pointer gs, int srid); + Pointer intspanset_shift_scale(Pointer ss, int shift, int width, boolean hasshift, boolean haswidth); - Pointer point_transform_pipeline(Pointer gs, String pipelinestr, int srid, boolean is_forward); + Pointer tstzspan_expand(Pointer s, Pointer interv); - Pointer intset_shift_scale(Pointer s, int shift, int width, boolean hasshift, boolean haswidth); + Pointer set_round(Pointer s, int maxdd); - Pointer intspan_shift_scale(Pointer s, int shift, int width, boolean hasshift, boolean haswidth); + Pointer textcat_text_textset(Pointer txt, Pointer s); - Pointer intspanset_shift_scale(Pointer ss, int shift, int width, boolean hasshift, boolean haswidth); + Pointer textcat_textset_text(Pointer s, Pointer txt); Pointer textset_initcap(Pointer s); @@ -623,10 +610,6 @@ public interface MeosLibrary { Pointer textset_upper(Pointer s); - Pointer textcat_textset_text(Pointer s, Pointer txt); - - Pointer textcat_text_textset(Pointer txt, Pointer s); - long timestamptz_tprecision(long t, Pointer duration, long torigin); Pointer tstzset_shift_scale(Pointer s, Pointer shift, Pointer duration); @@ -683,6 +666,18 @@ public interface MeosLibrary { boolean spanset_ne(Pointer ss1, Pointer ss2); + Pointer set_spans(Pointer s); + + Pointer set_split_each_n_spans(Pointer s, int elems_per_span, Pointer count); + + Pointer set_split_n_spans(Pointer s, int span_count, Pointer count); + + Pointer spanset_spans(Pointer ss); + + Pointer spanset_split_each_n_spans(Pointer ss, int elems_per_span, Pointer count); + + Pointer spanset_split_n_spans(Pointer ss, int span_count, Pointer count); + boolean adjacent_span_bigint(Pointer s, long i); boolean adjacent_span_date(Pointer s, int d); @@ -729,8 +724,6 @@ public interface MeosLibrary { boolean contained_float_spanset(double d, Pointer ss); - boolean contained_geo_set(Pointer gs, Pointer s); - boolean contained_int_set(int i, Pointer s); boolean contained_int_span(int i, Pointer s); @@ -761,8 +754,6 @@ public interface MeosLibrary { boolean contains_set_float(Pointer s, double d); - boolean contains_set_geo(Pointer s, Pointer gs); - boolean contains_set_int(Pointer s, int i); boolean contains_set_set(Pointer s1, Pointer s2); @@ -1111,8 +1102,6 @@ public interface MeosLibrary { Pointer intersection_float_set(double d, Pointer s); - Pointer intersection_geo_set(Pointer gs, Pointer s); - Pointer intersection_int_set(int i, Pointer s); Pointer intersection_set_bigint(Pointer s, long i); @@ -1121,8 +1110,6 @@ public interface MeosLibrary { Pointer intersection_set_float(Pointer s, double d); - Pointer intersection_set_geo(Pointer s, Pointer gs); - Pointer intersection_set_int(Pointer s, int i); Pointer intersection_set_set(Pointer s1, Pointer s2); @@ -1181,8 +1168,6 @@ public interface MeosLibrary { Pointer minus_float_spanset(double d, Pointer ss); - Pointer minus_geo_set(Pointer gs, Pointer s); - Pointer minus_int_set(int i, Pointer s); Pointer minus_int_span(int i, Pointer s); @@ -1195,8 +1180,6 @@ public interface MeosLibrary { Pointer minus_set_float(Pointer s, double d); - Pointer minus_set_geo(Pointer s, Pointer gs); - Pointer minus_set_int(Pointer s, int i); Pointer minus_set_set(Pointer s1, Pointer s2); @@ -1259,8 +1242,6 @@ public interface MeosLibrary { Pointer union_float_spanset(double d, Pointer ss); - Pointer union_geo_set(Pointer gs, Pointer s); - Pointer union_int_set(int i, Pointer s); Pointer union_int_span(int i, Pointer s); @@ -1273,8 +1254,6 @@ public interface MeosLibrary { Pointer union_set_float(Pointer s, double d); - Pointer union_set_geo(Pointer s, Pointer gs); - Pointer union_set_int(Pointer s, int i); Pointer union_set_set(Pointer s1, Pointer s2); @@ -1427,58 +1406,66 @@ public interface MeosLibrary { Pointer timestamptz_union_transfn(Pointer state, long t); - Pointer tbox_in(String str); + long bigint_get_bin(long value, long vsize, long vorigin); - String tbox_out(Pointer box, int maxdd); + Pointer bigintspan_bins(Pointer s, long vsize, long vorigin, Pointer count); - Pointer tbox_from_wkb(Pointer wkb, long size); + Pointer bigintspanset_bins(Pointer ss, long vsize, long vorigin, Pointer count); - Pointer tbox_from_hexwkb(String hexwkb); + int date_get_bin(int d, Pointer duration, int torigin); - Pointer stbox_from_wkb(Pointer wkb, long size); + Pointer datespan_bins(Pointer s, Pointer duration, int torigin, Pointer count); - Pointer stbox_from_hexwkb(String hexwkb); + Pointer datespanset_bins(Pointer ss, Pointer duration, int torigin, Pointer count); - Pointer tbox_as_wkb(Pointer box, byte variant, Pointer size_out); + double float_get_bin(double value, double vsize, double vorigin); + + Pointer floatspan_bins(Pointer s, double vsize, double vorigin, Pointer count); + + Pointer floatspanset_bins(Pointer ss, double vsize, double vorigin, Pointer count); + + int int_get_bin(int value, int vsize, int vorigin); + + Pointer intspan_bins(Pointer s, int vsize, int vorigin, Pointer count); + + Pointer intspanset_bins(Pointer ss, int vsize, int vorigin, Pointer count); + + long timestamptz_get_bin(long t, Pointer duration, long torigin); + + Pointer tstzspan_bins(Pointer s, Pointer duration, long origin, Pointer count); + + Pointer tstzspanset_bins(Pointer ss, Pointer duration, long torigin, Pointer count); String tbox_as_hexwkb(Pointer box, byte variant, Pointer size); - Pointer stbox_as_wkb(Pointer box, byte variant, Pointer size_out); + Pointer tbox_as_wkb(Pointer box, byte variant, Pointer size_out); - String stbox_as_hexwkb(Pointer box, byte variant, Pointer size); + Pointer tbox_from_hexwkb(String hexwkb); - Pointer stbox_in(String str); + Pointer tbox_from_wkb(Pointer wkb, long size); - String stbox_out(Pointer box, int maxdd); + Pointer tbox_in(String str); - Pointer float_tstzspan_to_tbox(double d, Pointer s); + String tbox_out(Pointer box, int maxdd); Pointer float_timestamptz_to_tbox(double d, long t); - Pointer geo_tstzspan_to_stbox(Pointer gs, Pointer s); + Pointer float_tstzspan_to_tbox(double d, Pointer s); - Pointer geo_timestamptz_to_stbox(Pointer gs, long t); + Pointer int_timestamptz_to_tbox(int i, long t); Pointer int_tstzspan_to_tbox(int i, Pointer s); - Pointer int_timestamptz_to_tbox(int i, long t); - Pointer numspan_tstzspan_to_tbox(Pointer span, Pointer s); Pointer numspan_timestamptz_to_tbox(Pointer span, long t); - Pointer stbox_copy(Pointer box); - - Pointer stbox_make(boolean hasx, boolean hasz, boolean geodetic, int srid, double xmin, double xmax, double ymin, double ymax, double zmin, double zmax, Pointer s); - Pointer tbox_copy(Pointer box); Pointer tbox_make(Pointer s, Pointer p); Pointer float_to_tbox(double d); - Pointer geo_to_stbox(Pointer gs); - Pointer int_to_tbox(int i); Pointer set_to_tbox(Pointer s); @@ -1487,87 +1474,31 @@ public interface MeosLibrary { Pointer spanset_to_tbox(Pointer ss); - Pointer spatialset_to_stbox(Pointer s); - - Pointer stbox_to_gbox(Pointer box); - - Pointer stbox_to_box3d(Pointer box); - - Pointer stbox_to_geo(Pointer box); - - Pointer stbox_to_tstzspan(Pointer box); - Pointer tbox_to_intspan(Pointer box); Pointer tbox_to_floatspan(Pointer box); Pointer tbox_to_tstzspan(Pointer box); - Pointer timestamptz_to_stbox(long t); - Pointer timestamptz_to_tbox(long t); - Pointer tstzset_to_stbox(Pointer s); + int tbox_hash(Pointer box); - Pointer tstzspan_to_stbox(Pointer s); + long tbox_hash_extended(Pointer box, long seed); - Pointer tstzspanset_to_stbox(Pointer ss); + boolean tbox_hast(Pointer box); - Pointer tnumber_to_tbox(Pointer temp); + boolean tbox_hasx(Pointer box); - Pointer tpoint_to_stbox(Pointer temp); + boolean tbox_tmax(Pointer box, Pointer result); - Pointer tspatial_to_stbox(Pointer temp); + boolean tbox_tmax_inc(Pointer box, Pointer result); - boolean stbox_hast(Pointer box); + boolean tbox_tmin(Pointer box, Pointer result); - boolean stbox_hasx(Pointer box); + boolean tbox_tmin_inc(Pointer box, Pointer result); - boolean stbox_hasz(Pointer box); - - boolean stbox_isgeodetic(Pointer box); - - double stbox_area(Pointer box, boolean spheroid); - - double stbox_perimeter(Pointer box, boolean spheroid); - - double stbox_volume(Pointer box); - - int stbox_srid(Pointer box); - - boolean stbox_tmax(Pointer box, Pointer result); - - boolean stbox_tmax_inc(Pointer box, Pointer result); - - boolean stbox_tmin(Pointer box, Pointer result); - - boolean stbox_tmin_inc(Pointer box, Pointer result); - - boolean stbox_xmax(Pointer box, Pointer result); - - boolean stbox_xmin(Pointer box, Pointer result); - - boolean stbox_ymax(Pointer box, Pointer result); - - boolean stbox_ymin(Pointer box, Pointer result); - - boolean stbox_zmax(Pointer box, Pointer result); - - boolean stbox_zmin(Pointer box, Pointer result); - - boolean tbox_hast(Pointer box); - - boolean tbox_hasx(Pointer box); - - boolean tbox_tmax(Pointer box, Pointer result); - - boolean tbox_tmax_inc(Pointer box, Pointer result); - - boolean tbox_tmin(Pointer box, Pointer result); - - boolean tbox_tmin_inc(Pointer box, Pointer result); - - boolean tbox_xmax(Pointer box, Pointer result); + boolean tbox_xmax(Pointer box, Pointer result); boolean tbox_xmax_inc(Pointer box, Pointer result); @@ -1583,193 +1514,97 @@ public interface MeosLibrary { boolean tboxint_xmin(Pointer box, Pointer result); - Pointer stbox_expand_space(Pointer box, double d); - - Pointer stbox_expand_time(Pointer box, Pointer interv); - - Pointer stbox_get_space(Pointer box); - - Pointer stbox_quad_split(Pointer box, Pointer count); - - Pointer stbox_round(Pointer box, int maxdd); - - Pointer stbox_set_srid(Pointer box, int srid); - - Pointer stbox_shift_scale_time(Pointer box, Pointer shift, Pointer duration); - - Pointer stbox_transform(Pointer box, int srid); - - Pointer stbox_transform_pipeline(Pointer box, String pipelinestr, int srid, boolean is_forward); - Pointer tbox_expand_time(Pointer box, Pointer interv); - Pointer tbox_expand_float(Pointer box, double d); + Pointer tbox_round(Pointer box, int maxdd); - Pointer tbox_expand_int(Pointer box, int i); + Pointer tbox_shift_scale_time(Pointer box, Pointer shift, Pointer duration); - Pointer tbox_round(Pointer box, int maxdd); + Pointer tfloatbox_expand(Pointer box, double d); - Pointer tbox_shift_scale_float(Pointer box, double shift, double width, boolean hasshift, boolean haswidth); + Pointer tfloatbox_shift_scale(Pointer box, double shift, double width, boolean hasshift, boolean haswidth); - Pointer tbox_shift_scale_int(Pointer box, int shift, int width, boolean hasshift, boolean haswidth); + Pointer tintbox_expand(Pointer box, int i); - Pointer tbox_shift_scale_time(Pointer box, Pointer shift, Pointer duration); + Pointer tintbox_shift_scale(Pointer box, int shift, int width, boolean hasshift, boolean haswidth); Pointer union_tbox_tbox(Pointer box1, Pointer box2, boolean strict); Pointer intersection_tbox_tbox(Pointer box1, Pointer box2); - Pointer union_stbox_stbox(Pointer box1, Pointer box2, boolean strict); - - Pointer intersection_stbox_stbox(Pointer box1, Pointer box2); - - boolean adjacent_stbox_stbox(Pointer box1, Pointer box2); - boolean adjacent_tbox_tbox(Pointer box1, Pointer box2); boolean contained_tbox_tbox(Pointer box1, Pointer box2); - boolean contained_stbox_stbox(Pointer box1, Pointer box2); - - boolean contains_stbox_stbox(Pointer box1, Pointer box2); - boolean contains_tbox_tbox(Pointer box1, Pointer box2); boolean overlaps_tbox_tbox(Pointer box1, Pointer box2); - boolean overlaps_stbox_stbox(Pointer box1, Pointer box2); - boolean same_tbox_tbox(Pointer box1, Pointer box2); - boolean same_stbox_stbox(Pointer box1, Pointer box2); - - boolean left_tbox_tbox(Pointer box1, Pointer box2); - - boolean overleft_tbox_tbox(Pointer box1, Pointer box2); - - boolean right_tbox_tbox(Pointer box1, Pointer box2); - - boolean overright_tbox_tbox(Pointer box1, Pointer box2); + boolean after_tbox_tbox(Pointer box1, Pointer box2); boolean before_tbox_tbox(Pointer box1, Pointer box2); - boolean overbefore_tbox_tbox(Pointer box1, Pointer box2); - - boolean after_tbox_tbox(Pointer box1, Pointer box2); + boolean left_tbox_tbox(Pointer box1, Pointer box2); boolean overafter_tbox_tbox(Pointer box1, Pointer box2); - boolean left_stbox_stbox(Pointer box1, Pointer box2); - - boolean overleft_stbox_stbox(Pointer box1, Pointer box2); - - boolean right_stbox_stbox(Pointer box1, Pointer box2); - - boolean overright_stbox_stbox(Pointer box1, Pointer box2); - - boolean below_stbox_stbox(Pointer box1, Pointer box2); - - boolean overbelow_stbox_stbox(Pointer box1, Pointer box2); - - boolean above_stbox_stbox(Pointer box1, Pointer box2); - - boolean overabove_stbox_stbox(Pointer box1, Pointer box2); - - boolean front_stbox_stbox(Pointer box1, Pointer box2); - - boolean overfront_stbox_stbox(Pointer box1, Pointer box2); - - boolean back_stbox_stbox(Pointer box1, Pointer box2); - - boolean overback_stbox_stbox(Pointer box1, Pointer box2); - - boolean before_stbox_stbox(Pointer box1, Pointer box2); - - boolean overbefore_stbox_stbox(Pointer box1, Pointer box2); - - boolean after_stbox_stbox(Pointer box1, Pointer box2); + boolean overbefore_tbox_tbox(Pointer box1, Pointer box2); - boolean overafter_stbox_stbox(Pointer box1, Pointer box2); + boolean overleft_tbox_tbox(Pointer box1, Pointer box2); - boolean tbox_eq(Pointer box1, Pointer box2); + boolean overright_tbox_tbox(Pointer box1, Pointer box2); - boolean tbox_ne(Pointer box1, Pointer box2); + boolean right_tbox_tbox(Pointer box1, Pointer box2); int tbox_cmp(Pointer box1, Pointer box2); - boolean tbox_lt(Pointer box1, Pointer box2); - - boolean tbox_le(Pointer box1, Pointer box2); + boolean tbox_eq(Pointer box1, Pointer box2); boolean tbox_ge(Pointer box1, Pointer box2); boolean tbox_gt(Pointer box1, Pointer box2); - boolean stbox_eq(Pointer box1, Pointer box2); - - boolean stbox_ne(Pointer box1, Pointer box2); - - int stbox_cmp(Pointer box1, Pointer box2); - - boolean stbox_lt(Pointer box1, Pointer box2); + boolean tbox_le(Pointer box1, Pointer box2); - boolean stbox_le(Pointer box1, Pointer box2); + boolean tbox_lt(Pointer box1, Pointer box2); - boolean stbox_ge(Pointer box1, Pointer box2); + boolean tbox_ne(Pointer box1, Pointer box2); - boolean stbox_gt(Pointer box1, Pointer box2); + Pointer tbool_from_mfjson(String str); Pointer tbool_in(String str); - Pointer tint_in(String str); - - Pointer tfloat_in(String str); - - Pointer ttext_in(String str); - - Pointer tgeompoint_in(String str); - - Pointer tgeogpoint_in(String str); - - Pointer tbool_from_mfjson(String str); - - Pointer tint_from_mfjson(String str); + String tbool_out(Pointer temp); - Pointer tfloat_from_mfjson(String str); + String temporal_as_hexwkb(Pointer temp, byte variant, Pointer size_out); - Pointer ttext_from_mfjson(String str); + String temporal_as_mfjson(Pointer temp, boolean with_bbox, int flags, int precision, String srs); - Pointer tgeompoint_from_mfjson(String str); + Pointer temporal_as_wkb(Pointer temp, byte variant, Pointer size_out); - Pointer tgeogpoint_from_mfjson(String str); + Pointer temporal_from_hexwkb(String hexwkb); Pointer temporal_from_wkb(Pointer wkb, long size); - Pointer temporal_from_hexwkb(String hexwkb); - - String tbool_out(Pointer temp); + Pointer tfloat_from_mfjson(String str); - String tint_out(Pointer temp); + Pointer tfloat_in(String str); String tfloat_out(Pointer temp, int maxdd); - String ttext_out(Pointer temp); - - String tpoint_out(Pointer temp, int maxdd); - - String tpoint_as_text(Pointer temp, int maxdd); - - String tpoint_as_ewkt(Pointer temp, int maxdd); + Pointer tint_from_mfjson(String str); - String tspatial_as_ewkt(Pointer temp, int maxdd); + Pointer tint_in(String str); - String tspatial_as_text(Pointer temp, int maxdd); + String tint_out(Pointer temp); - String temporal_as_mfjson(Pointer temp, boolean with_bbox, int flags, int precision, String srs); + Pointer ttext_from_mfjson(String str); - Pointer temporal_as_wkb(Pointer temp, byte variant, Pointer size_out); + Pointer ttext_in(String str); - String temporal_as_hexwkb(Pointer temp, byte variant, Pointer size_out); + String ttext_out(Pointer temp); Pointer tbool_from_base_temp(boolean b, Pointer temp); @@ -1787,31 +1622,21 @@ public interface MeosLibrary { Pointer tfloatinst_make(double d, long t); - Pointer tfloatseq_from_base_tstzspan(double d, Pointer s, int interp); - Pointer tfloatseq_from_base_tstzset(double d, Pointer s); + Pointer tfloatseq_from_base_tstzspan(double d, Pointer s, int interp); + Pointer tfloatseqset_from_base_tstzspanset(double d, Pointer ss, int interp); Pointer tint_from_base_temp(int i, Pointer temp); Pointer tintinst_make(int i, long t); - Pointer tintseq_from_base_tstzspan(int i, Pointer s); - Pointer tintseq_from_base_tstzset(int i, Pointer s); - Pointer tintseqset_from_base_tstzspanset(int i, Pointer ss); - - Pointer tpoint_from_base_temp(Pointer gs, Pointer temp); - - Pointer tpointinst_make(Pointer gs, long t); - - Pointer tpointseq_from_base_tstzspan(Pointer gs, Pointer s, int interp); - - Pointer tpointseq_from_base_tstzset(Pointer gs, Pointer s); + Pointer tintseq_from_base_tstzspan(int i, Pointer s); - Pointer tpointseqset_from_base_tstzspanset(Pointer gs, Pointer ss, int interp); + Pointer tintseqset_from_base_tstzspanset(int i, Pointer ss); Pointer tsequence_make(Pointer instants, int count, boolean lower_inc, boolean upper_inc, int interp, boolean normalize); @@ -1823,12 +1648,14 @@ public interface MeosLibrary { Pointer ttextinst_make(Pointer txt, long t); - Pointer ttextseq_from_base_tstzspan(Pointer txt, Pointer s); - Pointer ttextseq_from_base_tstzset(Pointer txt, Pointer s); + Pointer ttextseq_from_base_tstzspan(Pointer txt, Pointer s); + Pointer ttextseqset_from_base_tstzspanset(Pointer txt, Pointer ss); + Pointer tbool_to_tint(Pointer temp); + Pointer temporal_to_tstzspan(Pointer temp); Pointer tfloat_to_tint(Pointer temp); @@ -1837,6 +1664,8 @@ public interface MeosLibrary { Pointer tnumber_to_span(Pointer temp); + Pointer tnumber_to_tbox (Pointer temp); + boolean tbool_end_value(Pointer temp); boolean tbool_start_value(Pointer temp); @@ -1863,6 +1692,8 @@ public interface MeosLibrary { String temporal_interp(Pointer temp); + boolean temporal_lower_inc(Pointer temp); + Pointer temporal_max_instant(Pointer temp); Pointer temporal_min_instant(Pointer temp); @@ -1873,16 +1704,14 @@ public interface MeosLibrary { int temporal_num_timestamps(Pointer temp); + Pointer temporal_segm_duration(Pointer temp, Pointer duration, boolean atleast, boolean strict); + Pointer temporal_segments(Pointer temp, Pointer count); Pointer temporal_sequence_n(Pointer temp, int i); Pointer temporal_sequences(Pointer temp, Pointer count); - int temporal_lower_inc(Pointer temp); - - int temporal_upper_inc(Pointer temp); - Pointer temporal_start_instant(Pointer temp); Pointer temporal_start_sequence(Pointer temp); @@ -1895,16 +1724,20 @@ public interface MeosLibrary { Pointer temporal_time(Pointer temp); + Pointer temporal_timestamps(Pointer temp, Pointer count); + boolean temporal_timestamptz_n(Pointer temp, int n, Pointer result); - Pointer temporal_timestamps(Pointer temp, Pointer count); + boolean temporal_upper_inc(Pointer temp); - double tfloat_end_value(Pointer temp); + double tfloat_avg_value(Pointer temp); - double tfloat_max_value(Pointer temp); + double tfloat_end_value(Pointer temp); double tfloat_min_value(Pointer temp); + double tfloat_max_value(Pointer temp); + double tfloat_start_value(Pointer temp); boolean tfloat_value_at_timestamptz(Pointer temp, long t, boolean strict, Pointer value); @@ -1927,24 +1760,14 @@ public interface MeosLibrary { Pointer tint_values(Pointer temp, Pointer count); + double tnumber_avg_value(Pointer temp); + double tnumber_integral(Pointer temp); double tnumber_twavg(Pointer temp); Pointer tnumber_valuespans(Pointer temp); - Pointer tgeo_end_value(Pointer temp); - - Pointer tgeo_start_value(Pointer temp); - - boolean tpoint_value_at_timestamptz(Pointer temp, long t, boolean strict, Pointer value); - - boolean tgeo_value_n(Pointer temp, int n, Pointer result); - - boolean tpoint_value_n(Pointer temp, int n, Pointer result); - - Pointer tpoint_values(Pointer temp, Pointer count); - Pointer ttext_end_value(Pointer temp); Pointer ttext_max_value(Pointer temp); @@ -1961,6 +1784,10 @@ public interface MeosLibrary { double float_degrees(double value, boolean normalize); + Pointer temparr_round(Pointer temp, int count, int maxdd); + + Pointer temporal_round(Pointer temp, int maxdd); + Pointer temporal_scale_time(Pointer temp, Pointer duration); Pointer temporal_set_interp(Pointer temp, int interp); @@ -1971,27 +1798,17 @@ public interface MeosLibrary { Pointer temporal_to_tinstant(Pointer temp); - Pointer temporal_to_tsequence(Pointer temp, String interp_str); - - Pointer temporal_to_tsequenceset(Pointer temp, String interp_str); + Pointer temporal_to_tsequence(Pointer temp, int interp); - Pointer tfloat_floor(Pointer temp); + Pointer temporal_to_tsequenceset(Pointer temp, int interp); Pointer tfloat_ceil(Pointer temp); Pointer tfloat_degrees(Pointer temp, boolean normalize); - Pointer tfloat_radians(Pointer temp); - - Pointer tfloat_exp(Pointer temp); - - Pointer tfloat_ln(Pointer temp); - - Pointer tfloat_log10(Pointer temp); - - Pointer tnumber_trend(Pointer temp); + Pointer tfloat_floor(Pointer temp); - Pointer temporal_round(Pointer temp, int maxdd); + Pointer tfloat_radians(Pointer temp); Pointer tfloat_scale_value(Pointer temp, double width); @@ -1999,42 +1816,24 @@ public interface MeosLibrary { Pointer tfloat_shift_value(Pointer temp, double shift); - Pointer tfloatarr_round(Pointer temp, int count, int maxdd); - Pointer tint_scale_value(Pointer temp, int width); Pointer tint_shift_scale_value(Pointer temp, int shift, int width); Pointer tint_shift_value(Pointer temp, int shift); - Pointer tpoint_round(Pointer temp, int maxdd); + Pointer temporal_append_tinstant(Pointer temp, Pointer inst, int interp, double maxdist, Pointer maxt, boolean expand); - Pointer tpoint_transform(Pointer temp, int srid); + Pointer temporal_append_tsequence(Pointer temp, Pointer seq, boolean expand); - Pointer tpoint_transform_pipeline(Pointer temp, String pipelinestr, int srid, boolean is_forward); + Pointer temporal_delete_timestamptz(Pointer temp, long t, boolean connect); - Pointer tpoint_transform_pj(Pointer temp, int srid, Pointer pj); - - Pointer tspatial_set_srid(Pointer temp, int srid); - - Pointer tspatial_transform(Pointer temp, int srid); - - Pointer lwproj_transform(int srid_from, int srid_to); - - Pointer tpointarr_round(Pointer temp, int count, int maxdd); - - Pointer temporal_append_tinstant(Pointer temp, Pointer inst, double maxdist, Pointer maxt, boolean expand); - - Pointer temporal_append_tsequence(Pointer temp, Pointer seq, boolean expand); + Pointer temporal_delete_tstzset(Pointer temp, Pointer s, boolean connect); Pointer temporal_delete_tstzspan(Pointer temp, Pointer s, boolean connect); Pointer temporal_delete_tstzspanset(Pointer temp, Pointer ss, boolean connect); - Pointer temporal_delete_timestamptz(Pointer temp, long t, boolean connect); - - Pointer temporal_delete_tstzset(Pointer temp, Pointer s, boolean connect); - Pointer temporal_insert(Pointer temp1, Pointer temp2, boolean connect); Pointer temporal_merge(Pointer temp1, Pointer temp2); @@ -2047,32 +1846,36 @@ public interface MeosLibrary { Pointer tbool_minus_value(Pointer temp, boolean b); + Pointer temporal_after_timestamptz(Pointer temp, long t, boolean strict); + Pointer temporal_at_max(Pointer temp); Pointer temporal_at_min(Pointer temp); - Pointer temporal_at_tstzspan(Pointer temp, Pointer s); - - Pointer temporal_at_tstzspanset(Pointer temp, Pointer ss); - Pointer temporal_at_timestamptz(Pointer temp, long t); Pointer temporal_at_tstzset(Pointer temp, Pointer s); + Pointer temporal_at_tstzspan(Pointer temp, Pointer s); + + Pointer temporal_at_tstzspanset(Pointer temp, Pointer ss); + Pointer temporal_at_values(Pointer temp, Pointer set); + Pointer temporal_before_timestamptz(Pointer temp, long t, boolean strict); + Pointer temporal_minus_max(Pointer temp); Pointer temporal_minus_min(Pointer temp); - Pointer temporal_minus_tstzspan(Pointer temp, Pointer s); - - Pointer temporal_minus_tstzspanset(Pointer temp, Pointer ss); - Pointer temporal_minus_timestamptz(Pointer temp, long t); Pointer temporal_minus_tstzset(Pointer temp, Pointer s); + Pointer temporal_minus_tstzspan(Pointer temp, Pointer s); + + Pointer temporal_minus_tstzspanset(Pointer temp, Pointer ss); + Pointer temporal_minus_values(Pointer temp, Pointer set); Pointer tfloat_at_value(Pointer temp, double d); @@ -2095,26 +1898,6 @@ public interface MeosLibrary { Pointer tnumber_minus_tbox(Pointer temp, Pointer box); - Pointer tpoint_at_elevation(Pointer temp, Pointer s); - - Pointer tpoint_minus_elevation(Pointer temp, Pointer s); - - Pointer tpoint_at_geom_time(Pointer temp, Pointer gs, Pointer zspan, Pointer period); - - Pointer tgeo_at_stbox(Pointer temp, Pointer box, boolean border_inc); - - Pointer tgeo_at_geom(Pointer temp, Pointer gs); - - Pointer tgeo_minus_geom(Pointer temp, Pointer gs); - - Pointer tpoint_at_value(Pointer temp, Pointer gs); - - Pointer tpoint_minus_geom_time(Pointer temp, Pointer gs, Pointer zspan, Pointer period); - - Pointer tgeo_minus_stbox(Pointer temp, Pointer box, boolean border_inc); - - Pointer tpoint_minus_value(Pointer temp, Pointer gs); - Pointer ttext_at_value(Pointer temp, Pointer txt); Pointer ttext_minus_value(Pointer temp, Pointer txt); @@ -2139,8 +1922,6 @@ public interface MeosLibrary { int always_eq_int_tint(int i, Pointer temp); - int always_eq_point_tpoint(Pointer gs, Pointer temp); - int always_eq_tbool_bool(Pointer temp, boolean b); int always_eq_temporal_temporal(Pointer temp1, Pointer temp2); @@ -2151,36 +1932,8 @@ public interface MeosLibrary { int always_eq_tint_int(Pointer temp, int i); - int always_eq_tpoint_point(Pointer temp, Pointer gs); - - int always_eq_tpoint_tpoint(Pointer temp1, Pointer temp2); - int always_eq_ttext_text(Pointer temp, Pointer txt); - int always_ne_bool_tbool(boolean b, Pointer temp); - - int always_ne_float_tfloat(double d, Pointer temp); - - int always_ne_int_tint(int i, Pointer temp); - - int always_ne_point_tpoint(Pointer gs, Pointer temp); - - int always_ne_tbool_bool(Pointer temp, boolean b); - - int always_ne_temporal_temporal(Pointer temp1, Pointer temp2); - - int always_ne_text_ttext(Pointer txt, Pointer temp); - - int always_ne_tfloat_float(Pointer temp, double d); - - int always_ne_tint_int(Pointer temp, int i); - - int always_ne_tpoint_point(Pointer temp, Pointer gs); - - int always_ne_tpoint_tpoint(Pointer temp1, Pointer temp2); - - int always_ne_ttext_text(Pointer temp, Pointer txt); - int always_ge_float_tfloat(double d, Pointer temp); int always_ge_int_tint(int i, Pointer temp); @@ -2237,14 +1990,30 @@ public interface MeosLibrary { int always_lt_ttext_text(Pointer temp, Pointer txt); + int always_ne_bool_tbool(boolean b, Pointer temp); + + int always_ne_float_tfloat(double d, Pointer temp); + + int always_ne_int_tint(int i, Pointer temp); + + int always_ne_tbool_bool(Pointer temp, boolean b); + + int always_ne_temporal_temporal(Pointer temp1, Pointer temp2); + + int always_ne_text_ttext(Pointer txt, Pointer temp); + + int always_ne_tfloat_float(Pointer temp, double d); + + int always_ne_tint_int(Pointer temp, int i); + + int always_ne_ttext_text(Pointer temp, Pointer txt); + int ever_eq_bool_tbool(boolean b, Pointer temp); int ever_eq_float_tfloat(double d, Pointer temp); int ever_eq_int_tint(int i, Pointer temp); - int ever_eq_point_tpoint(Pointer gs, Pointer temp); - int ever_eq_tbool_bool(Pointer temp, boolean b); int ever_eq_temporal_temporal(Pointer temp1, Pointer temp2); @@ -2255,10 +2024,6 @@ public interface MeosLibrary { int ever_eq_tint_int(Pointer temp, int i); - int ever_eq_tpoint_point(Pointer temp, Pointer gs); - - int ever_eq_tpoint_tpoint(Pointer temp1, Pointer temp2); - int ever_eq_ttext_text(Pointer temp, Pointer txt); int ever_ge_float_tfloat(double d, Pointer temp); @@ -2323,8 +2088,6 @@ public interface MeosLibrary { int ever_ne_int_tint(int i, Pointer temp); - int ever_ne_point_tpoint(Pointer gs, Pointer temp); - int ever_ne_tbool_bool(Pointer temp, boolean b); int ever_ne_temporal_temporal(Pointer temp1, Pointer temp2); @@ -2335,10 +2098,6 @@ public interface MeosLibrary { int ever_ne_tint_int(Pointer temp, int i); - int ever_ne_tpoint_point(Pointer temp, Pointer gs); - - int ever_ne_tpoint_tpoint(Pointer temp1, Pointer temp2); - int ever_ne_ttext_text(Pointer temp, Pointer txt); Pointer teq_bool_tbool(boolean b, Pointer temp); @@ -2347,8 +2106,6 @@ public interface MeosLibrary { Pointer teq_int_tint(int i, Pointer temp); - Pointer teq_point_tpoint(Pointer gs, Pointer temp); - Pointer teq_tbool_bool(Pointer temp, boolean b); Pointer teq_temporal_temporal(Pointer temp1, Pointer temp2); @@ -2357,8 +2114,6 @@ public interface MeosLibrary { Pointer teq_tfloat_float(Pointer temp, double d); - Pointer teq_tpoint_point(Pointer temp, Pointer gs); - Pointer teq_tint_int(Pointer temp, int i); Pointer teq_ttext_text(Pointer temp, Pointer txt); @@ -2425,8 +2180,6 @@ public interface MeosLibrary { Pointer tne_int_tint(int i, Pointer temp); - Pointer tne_point_tpoint(Pointer gs, Pointer temp); - Pointer tne_tbool_bool(Pointer temp, boolean b); Pointer tne_temporal_temporal(Pointer temp1, Pointer temp2); @@ -2435,15 +2188,23 @@ public interface MeosLibrary { Pointer tne_tfloat_float(Pointer temp, double d); - Pointer tne_tpoint_point(Pointer temp, Pointer gs); - Pointer tne_tint_int(Pointer temp, int i); Pointer tne_ttext_text(Pointer temp, Pointer txt); - boolean adjacent_numspan_tnumber(Pointer s, Pointer temp); + Pointer temporal_spans(Pointer temp, Pointer count); + + Pointer temporal_split_each_n_spans(Pointer temp, int elem_count, Pointer count); + + Pointer temporal_split_n_spans(Pointer temp, int span_count, Pointer count); + + Pointer tnumber_split_each_n_tboxes(Pointer temp, int elem_count, Pointer count); - boolean adjacent_stbox_tpoint(Pointer box, Pointer temp); + Pointer tnumber_split_n_tboxes(Pointer temp, int box_count, Pointer count); + + Pointer tnumber_tboxes(Pointer temp, Pointer count); + + boolean adjacent_numspan_tnumber(Pointer s, Pointer temp); boolean adjacent_tbox_tnumber(Pointer box, Pointer temp); @@ -2457,16 +2218,10 @@ public interface MeosLibrary { boolean adjacent_tnumber_tnumber(Pointer temp1, Pointer temp2); - boolean adjacent_tpoint_stbox(Pointer temp, Pointer box); - - boolean adjacent_tpoint_tpoint(Pointer temp1, Pointer temp2); - boolean adjacent_tstzspan_temporal(Pointer s, Pointer temp); boolean contained_numspan_tnumber(Pointer s, Pointer temp); - boolean contained_stbox_tpoint(Pointer box, Pointer temp); - boolean contained_tbox_tnumber(Pointer box, Pointer temp); boolean contained_temporal_temporal(Pointer temp1, Pointer temp2); @@ -2479,16 +2234,10 @@ public interface MeosLibrary { boolean contained_tnumber_tnumber(Pointer temp1, Pointer temp2); - boolean contained_tpoint_stbox(Pointer temp, Pointer box); - - boolean contained_tpoint_tpoint(Pointer temp1, Pointer temp2); - boolean contained_tstzspan_temporal(Pointer s, Pointer temp); boolean contains_numspan_tnumber(Pointer s, Pointer temp); - boolean contains_stbox_tpoint(Pointer box, Pointer temp); - boolean contains_tbox_tnumber(Pointer box, Pointer temp); boolean contains_temporal_tstzspan(Pointer temp, Pointer s); @@ -2501,16 +2250,10 @@ public interface MeosLibrary { boolean contains_tnumber_tnumber(Pointer temp1, Pointer temp2); - boolean contains_tpoint_stbox(Pointer temp, Pointer box); - - boolean contains_tpoint_tpoint(Pointer temp1, Pointer temp2); - boolean contains_tstzspan_temporal(Pointer s, Pointer temp); boolean overlaps_numspan_tnumber(Pointer s, Pointer temp); - boolean overlaps_stbox_tpoint(Pointer box, Pointer temp); - boolean overlaps_tbox_tnumber(Pointer box, Pointer temp); boolean overlaps_temporal_temporal(Pointer temp1, Pointer temp2); @@ -2523,16 +2266,10 @@ public interface MeosLibrary { boolean overlaps_tnumber_tnumber(Pointer temp1, Pointer temp2); - boolean overlaps_tpoint_stbox(Pointer temp, Pointer box); - - boolean overlaps_tpoint_tpoint(Pointer temp1, Pointer temp2); - boolean overlaps_tstzspan_temporal(Pointer s, Pointer temp); boolean same_numspan_tnumber(Pointer s, Pointer temp); - boolean same_stbox_tpoint(Pointer box, Pointer temp); - boolean same_tbox_tnumber(Pointer box, Pointer temp); boolean same_temporal_temporal(Pointer temp1, Pointer temp2); @@ -2545,20 +2282,8 @@ public interface MeosLibrary { boolean same_tnumber_tnumber(Pointer temp1, Pointer temp2); - boolean same_tpoint_stbox(Pointer temp, Pointer box); - - boolean same_tpoint_tpoint(Pointer temp1, Pointer temp2); - boolean same_tstzspan_temporal(Pointer s, Pointer temp); - boolean above_stbox_tpoint(Pointer box, Pointer temp); - - boolean above_tpoint_stbox(Pointer temp, Pointer box); - - boolean above_tpoint_tpoint(Pointer temp1, Pointer temp2); - - boolean after_stbox_tpoint(Pointer box, Pointer temp); - boolean after_tbox_tnumber(Pointer box, Pointer temp); boolean after_temporal_tstzspan(Pointer temp, Pointer s); @@ -2569,20 +2294,8 @@ public interface MeosLibrary { boolean after_tnumber_tnumber(Pointer temp1, Pointer temp2); - boolean after_tpoint_stbox(Pointer temp, Pointer box); - - boolean after_tpoint_tpoint(Pointer temp1, Pointer temp2); - boolean after_tstzspan_temporal(Pointer s, Pointer temp); - boolean back_stbox_tpoint(Pointer box, Pointer temp); - - boolean back_tpoint_stbox(Pointer temp, Pointer box); - - boolean back_tpoint_tpoint(Pointer temp1, Pointer temp2); - - boolean before_stbox_tpoint(Pointer box, Pointer temp); - boolean before_tbox_tnumber(Pointer box, Pointer temp); boolean before_temporal_tstzspan(Pointer temp, Pointer s); @@ -2593,26 +2306,8 @@ public interface MeosLibrary { boolean before_tnumber_tnumber(Pointer temp1, Pointer temp2); - boolean before_tpoint_stbox(Pointer temp, Pointer box); - - boolean before_tpoint_tpoint(Pointer temp1, Pointer temp2); - boolean before_tstzspan_temporal(Pointer s, Pointer temp); - boolean below_stbox_tpoint(Pointer box, Pointer temp); - - boolean below_tpoint_stbox(Pointer temp, Pointer box); - - boolean below_tpoint_tpoint(Pointer temp1, Pointer temp2); - - boolean front_stbox_tpoint(Pointer box, Pointer temp); - - boolean front_tpoint_stbox(Pointer temp, Pointer box); - - boolean front_tpoint_tpoint(Pointer temp1, Pointer temp2); - - boolean left_stbox_tpoint(Pointer box, Pointer temp); - boolean left_tbox_tnumber(Pointer box, Pointer temp); boolean left_numspan_tnumber(Pointer s, Pointer temp); @@ -2623,18 +2318,6 @@ public interface MeosLibrary { boolean left_tnumber_tnumber(Pointer temp1, Pointer temp2); - boolean left_tpoint_stbox(Pointer temp, Pointer box); - - boolean left_tpoint_tpoint(Pointer temp1, Pointer temp2); - - boolean overabove_stbox_tpoint(Pointer box, Pointer temp); - - boolean overabove_tpoint_stbox(Pointer temp, Pointer box); - - boolean overabove_tpoint_tpoint(Pointer temp1, Pointer temp2); - - boolean overafter_stbox_tpoint(Pointer box, Pointer temp); - boolean overafter_tbox_tnumber(Pointer box, Pointer temp); boolean overafter_temporal_tstzspan(Pointer temp, Pointer s); @@ -2645,20 +2328,8 @@ public interface MeosLibrary { boolean overafter_tnumber_tnumber(Pointer temp1, Pointer temp2); - boolean overafter_tpoint_stbox(Pointer temp, Pointer box); - - boolean overafter_tpoint_tpoint(Pointer temp1, Pointer temp2); - boolean overafter_tstzspan_temporal(Pointer s, Pointer temp); - boolean overback_stbox_tpoint(Pointer box, Pointer temp); - - boolean overback_tpoint_stbox(Pointer temp, Pointer box); - - boolean overback_tpoint_tpoint(Pointer temp1, Pointer temp2); - - boolean overbefore_stbox_tpoint(Pointer box, Pointer temp); - boolean overbefore_tbox_tnumber(Pointer box, Pointer temp); boolean overbefore_temporal_tstzspan(Pointer temp, Pointer s); @@ -2669,28 +2340,10 @@ public interface MeosLibrary { boolean overbefore_tnumber_tnumber(Pointer temp1, Pointer temp2); - boolean overbefore_tpoint_stbox(Pointer temp, Pointer box); - - boolean overbefore_tpoint_tpoint(Pointer temp1, Pointer temp2); - boolean overbefore_tstzspan_temporal(Pointer s, Pointer temp); - boolean overbelow_stbox_tpoint(Pointer box, Pointer temp); - - boolean overbelow_tpoint_stbox(Pointer temp, Pointer box); - - boolean overbelow_tpoint_tpoint(Pointer temp1, Pointer temp2); - - boolean overfront_stbox_tpoint(Pointer box, Pointer temp); - - boolean overfront_tpoint_stbox(Pointer temp, Pointer box); - - boolean overfront_tpoint_tpoint(Pointer temp1, Pointer temp2); - boolean overleft_numspan_tnumber(Pointer s, Pointer temp); - boolean overleft_stbox_tpoint(Pointer box, Pointer temp); - boolean overleft_tbox_tnumber(Pointer box, Pointer temp); boolean overleft_tnumber_numspan(Pointer temp, Pointer s); @@ -2699,14 +2352,8 @@ public interface MeosLibrary { boolean overleft_tnumber_tnumber(Pointer temp1, Pointer temp2); - boolean overleft_tpoint_stbox(Pointer temp, Pointer box); - - boolean overleft_tpoint_tpoint(Pointer temp1, Pointer temp2); - boolean overright_numspan_tnumber(Pointer s, Pointer temp); - boolean overright_stbox_tpoint(Pointer box, Pointer temp); - boolean overright_tbox_tnumber(Pointer box, Pointer temp); boolean overright_tnumber_numspan(Pointer temp, Pointer s); @@ -2715,14 +2362,8 @@ public interface MeosLibrary { boolean overright_tnumber_tnumber(Pointer temp1, Pointer temp2); - boolean overright_tpoint_stbox(Pointer temp, Pointer box); - - boolean overright_tpoint_tpoint(Pointer temp1, Pointer temp2); - boolean right_numspan_tnumber(Pointer s, Pointer temp); - boolean right_stbox_tpoint(Pointer box, Pointer temp); - boolean right_tbox_tnumber(Pointer box, Pointer temp); boolean right_tnumber_numspan(Pointer temp, Pointer s); @@ -2731,26 +2372,6 @@ public interface MeosLibrary { boolean right_tnumber_tnumber(Pointer temp1, Pointer temp2); - boolean right_tpoint_stbox(Pointer temp, Pointer box); - - boolean right_tpoint_tpoint(Pointer temp1, Pointer temp2); - - boolean above_tspatial_tspatial(Pointer temp1, Pointer temp2); - boolean back_tspatial_tspatial(Pointer temp1, Pointer temp2); - boolean before_tspatial_tspatial(Pointer temp1, Pointer temp2); - boolean below_tspatial_tspatial(Pointer temp1, Pointer temp2); - boolean front_tspatial_tspatial(Pointer temp1, Pointer temp2); - boolean left_tspatial_tspatial(Pointer temp1, Pointer temp2); - boolean overabove_tspatial_tspatial(Pointer temp1, Pointer temp2); - boolean overafter_tspatial_tspatial(Pointer temp1, Pointer temp2); - boolean overback_tspatial_tspatial(Pointer temp1, Pointer temp2); - boolean overbefore_tspatial_tspatial(Pointer temp1, Pointer temp2); - boolean overbelow_tspatial_tspatial(Pointer temp1, Pointer temp2); - boolean overfront_tspatial_tspatial(Pointer temp1, Pointer temp2); - boolean overleft_tspatial_tspatial(Pointer temp1, Pointer temp2); - boolean overright_tspatial_tspatial(Pointer temp1, Pointer temp2); - boolean right_tspatial_tspatial(Pointer temp1, Pointer temp2); - Pointer tand_bool_tbool(boolean b, Pointer temp); Pointer tand_tbool_bool(Pointer temp, boolean b); @@ -2809,8 +2430,18 @@ public interface MeosLibrary { Pointer temporal_derivative(Pointer temp); + Pointer tfloat_exp(Pointer temp); + + Pointer tfloat_ln(Pointer temp); + + Pointer tfloat_log10(Pointer temp); + Pointer tnumber_abs(Pointer temp); + Pointer tnumber_trend(Pointer temp); + + double float_angular_difference(double degrees1, double degrees2); + Pointer tnumber_angular_difference(Pointer temp); Pointer tnumber_delta_value(Pointer temp); @@ -2821,25 +2452,27 @@ public interface MeosLibrary { Pointer textcat_ttext_ttext(Pointer temp1, Pointer temp2); + Pointer ttext_initcap(Pointer temp); + Pointer ttext_upper(Pointer temp); Pointer ttext_lower(Pointer temp); - Pointer ttext_initcap(Pointer temp); + Pointer tdistance_tfloat_float(Pointer temp, double d); - Pointer distance_tfloat_float(Pointer temp, double d); + Pointer tdistance_tint_int(Pointer temp, int i); - Pointer distance_tint_int(Pointer temp, int i); + Pointer tdistance_tnumber_tnumber(Pointer temp1, Pointer temp2); - Pointer distance_tnumber_tnumber(Pointer temp1, Pointer temp2); + double nad_tboxfloat_tboxfloat(Pointer box1, Pointer box2); - Pointer distance_tpoint_point(Pointer temp, Pointer gs); + int nad_tboxint_tboxint(Pointer box1, Pointer box2); - Pointer distance_tpoint_tpoint(Pointer temp1, Pointer temp2); + double nad_tfloat_float(Pointer temp, double d); - double nad_stbox_geo(Pointer box, Pointer gs); + double nad_tfloat_tfloat(Pointer temp1, Pointer temp2); - double nad_stbox_stbox(Pointer box1, Pointer box2); + double nad_tfloat_tbox(Pointer temp, Pointer box); int nad_tint_int(Pointer temp, int i); @@ -2847,8583 +2480,13207 @@ public interface MeosLibrary { int nad_tint_tint(Pointer temp1, Pointer temp2); - int nad_tboxint_tboxint(Pointer box1, Pointer box2); + Pointer tbool_tand_transfn(Pointer state, Pointer temp); - double nad_tfloat_float(Pointer temp, double d); + Pointer tbool_tor_transfn(Pointer state, Pointer temp); - double nad_tfloat_tfloat(Pointer temp1, Pointer temp2); + Pointer temporal_extent_transfn(Pointer s, Pointer temp); - double nad_tfloat_tbox(Pointer temp, Pointer box); + Pointer temporal_merge_transfn(Pointer state, Pointer temp); - double nad_tboxfloat_tboxfloat(Pointer box1, Pointer box2); + Pointer temporal_merge_combinefn(Pointer state1, Pointer state2); - double nad_tpoint_geo(Pointer temp, Pointer gs); + Pointer temporal_tagg_finalfn(Pointer state); - double nad_tpoint_stbox(Pointer temp, Pointer box); + Pointer temporal_tcount_transfn(Pointer state, Pointer temp); - double nad_tpoint_tpoint(Pointer temp1, Pointer temp2); + Pointer tfloat_tmax_transfn(Pointer state, Pointer temp); - double nad_tgeo_tgeo(Pointer temp1, Pointer temp2); + Pointer tfloat_tmin_transfn(Pointer state, Pointer temp); - Pointer nai_tpoint_geo(Pointer temp, Pointer gs); + Pointer tfloat_tsum_transfn(Pointer state, Pointer temp); - Pointer nai_tpoint_tpoint(Pointer temp1, Pointer temp2); + Pointer tfloat_wmax_transfn(Pointer state, Pointer temp, Pointer interv); - Pointer shortestline_tpoint_geo(Pointer temp, Pointer gs); + Pointer tfloat_wmin_transfn(Pointer state, Pointer temp, Pointer interv); - Pointer shortestline_tgeo_tgeo(Pointer temp1, Pointer temp2); + Pointer tfloat_wsum_transfn(Pointer state, Pointer temp, Pointer interv); - boolean bearing_point_point(Pointer gs1, Pointer gs2, Pointer result); + Pointer timestamptz_tcount_transfn(Pointer state, long t); - Pointer bearing_tpoint_point(Pointer temp, Pointer gs, boolean invert); + Pointer tint_tmax_transfn(Pointer state, Pointer temp); - Pointer bearing_tpoint_tpoint(Pointer temp1, Pointer temp2); + Pointer tint_tmin_transfn(Pointer state, Pointer temp); - Pointer tpoint_angular_difference(Pointer temp); + Pointer tint_tsum_transfn(Pointer state, Pointer temp); - Pointer tpoint_azimuth(Pointer temp); + Pointer tint_wmax_transfn(Pointer state, Pointer temp, Pointer interv); - Pointer tgeo_convex_hull(Pointer temp); + Pointer tint_wmin_transfn(Pointer state, Pointer temp, Pointer interv); - Pointer tgeo_traversed_area(Pointer temp, boolean unary_union); + Pointer tint_wsum_transfn(Pointer state, Pointer temp, Pointer interv); - Pointer tpoint_convex_hull(Pointer temp); + Pointer tnumber_extent_transfn(Pointer box, Pointer temp); - Pointer tpoint_cumulative_length(Pointer temp); + Pointer tnumber_tavg_finalfn(Pointer state); - boolean tpoint_direction(Pointer temp, Pointer result); + Pointer tnumber_tavg_transfn(Pointer state, Pointer temp); - Pointer tpoint_get_x(Pointer temp); + Pointer tnumber_wavg_transfn(Pointer state, Pointer temp, Pointer interv); - Pointer tpoint_get_y(Pointer temp); + Pointer tstzset_tcount_transfn(Pointer state, Pointer s); - Pointer tpoint_get_z(Pointer temp); + Pointer tstzspan_tcount_transfn(Pointer state, Pointer s); - boolean tpoint_is_simple(Pointer temp); + Pointer tstzspanset_tcount_transfn(Pointer state, Pointer ss); - double tpoint_length(Pointer temp); + Pointer ttext_tmax_transfn(Pointer state, Pointer temp); - Pointer tpoint_speed(Pointer temp); + Pointer ttext_tmin_transfn(Pointer state, Pointer temp); - int tspatial_srid(Pointer temp); + Pointer temporal_simplify_dp(Pointer temp, double eps_dist, boolean synchronize); - int tpoint_srid(Pointer temp); + Pointer temporal_simplify_max_dist(Pointer temp, double eps_dist, boolean synchronize); - Pointer tpoint_stboxes(Pointer temp, Pointer count); + Pointer temporal_simplify_min_dist(Pointer temp, double dist); - Pointer tpoint_trajectory(Pointer temp, boolean unary_union); + Pointer temporal_simplify_min_tdelta(Pointer temp, Pointer mint); - Pointer tpoint_twcentroid(Pointer temp); + Pointer temporal_tprecision(Pointer temp, Pointer duration, long origin); - Pointer geo_expand_space(Pointer gs, double d); + Pointer temporal_tsample(Pointer temp, Pointer duration, long origin, int interp); - Pointer geomeas_to_tpoint(Pointer gs); + double temporal_dyntimewarp_distance(Pointer temp1, Pointer temp2); - Pointer tgeogpoint_to_tgeompoint(Pointer temp); + Pointer temporal_dyntimewarp_path(Pointer temp1, Pointer temp2, Pointer count); - Pointer tgeompoint_to_tgeogpoint(Pointer temp); + double temporal_frechet_distance(Pointer temp1, Pointer temp2); - boolean tpoint_AsMVTGeom(Pointer temp, Pointer bounds, int extent, int buffer, boolean clip_geom, Pointer gsarr, Pointer timesarr, Pointer count); + Pointer temporal_frechet_path(Pointer temp1, Pointer temp2, Pointer count); - Pointer tpoint_expand_space(Pointer temp, double d); + double temporal_hausdorff_distance(Pointer temp1, Pointer temp2); - Pointer tpoint_make_simple(Pointer temp, Pointer count); + Pointer temporal_time_bins(Pointer temp, Pointer duration, long origin, Pointer count); - Pointer tpoint_set_srid(Pointer temp, int srid); + Pointer temporal_time_split(Pointer temp, Pointer duration, long torigin, Pointer time_bins, Pointer count); - boolean tpoint_tfloat_to_geomeas(Pointer tpoint, Pointer measure, boolean segmentize, Pointer result); + Pointer tfloat_time_boxes(Pointer temp, Pointer duration, long torigin, Pointer count); - int acontains_geo_tpoint(Pointer gs, Pointer temp); + Pointer tfloat_value_bins(Pointer temp, double vsize, double vorigin, Pointer count); - int adisjoint_tpoint_geo(Pointer temp, Pointer gs); + Pointer tfloat_value_boxes(Pointer temp, double vsize, double vorigin, Pointer count); - int adisjoint_tpoint_tpoint(Pointer temp1, Pointer temp2); + Pointer tfloat_value_split(Pointer temp, double size, double origin, Pointer bins, Pointer count); - int adwithin_tpoint_geo(Pointer temp, Pointer gs, double dist); + Pointer tfloat_value_time_boxes(Pointer temp, double vsize, Pointer duration, double vorigin, long torigin, Pointer count); - int adwithin_tpoint_tpoint(Pointer temp1, Pointer temp2, double dist); + Pointer tfloat_value_time_split(Pointer temp, double vsize, Pointer duration, double vorigin, long torigin, Pointer value_bins, Pointer time_bins, Pointer count); - int aintersects_tpoint_geo(Pointer temp, Pointer gs); + Pointer tfloatbox_time_tiles(Pointer box, Pointer duration, long torigin, Pointer count); - int aintersects_tpoint_tpoint(Pointer temp1, Pointer temp2); + Pointer tfloatbox_value_tiles(Pointer box, double vsize, double vorigin, Pointer count); - int atouches_tpoint_geo(Pointer temp, Pointer gs); + Pointer tfloatbox_value_time_tiles(Pointer box, double vsize, Pointer duration, double vorigin, long torigin, Pointer count); - int econtains_geo_tpoint(Pointer gs, Pointer temp); + Pointer tint_time_boxes(Pointer temp, Pointer duration, long torigin, Pointer count); - int econtains_geo_tgeo(Pointer gs, Pointer temp); + Pointer tint_value_bins(Pointer temp, int vsize, int vorigin, Pointer count); - int edisjoint_tpoint_geo(Pointer temp, Pointer gs); + Pointer tint_value_boxes(Pointer temp, int vsize, int vorigin, Pointer count); - int edisjoint_tpoint_tpoint(Pointer temp1, Pointer temp2); + Pointer tint_value_split(Pointer temp, int vsize, int vorigin, Pointer bins, Pointer count); - int edwithin_tpoint_geo(Pointer temp, Pointer gs, double dist); + Pointer tint_value_time_boxes(Pointer temp, int vsize, Pointer duration, int vorigin, long torigin, Pointer count); - int edwithin_tpoint_tpoint(Pointer temp1, Pointer temp2, double dist); + Pointer tint_value_time_split(Pointer temp, int size, Pointer duration, int vorigin, long torigin, Pointer value_bins, Pointer time_bins, Pointer count); - int edwithin_tgeo_tgeo(Pointer temp1, Pointer temp2, double dist); + Pointer tintbox_time_tiles(Pointer box, Pointer duration, long torigin, Pointer count); - int eintersects_tpoint_geo(Pointer temp, Pointer gs); + Pointer tintbox_value_tiles(Pointer box, int xsize, int xorigin, Pointer count); - int eintersects_tgeo_geo(Pointer temp, Pointer gs); + Pointer tintbox_value_time_tiles(Pointer box, int xsize, Pointer duration, int xorigin, long torigin, Pointer count); - int eintersects_tpoint_tpoint(Pointer temp1, Pointer temp2); + Pointer geo_as_ewkb(Pointer gs, String endian, Pointer size); - int etouches_tpoint_geo(Pointer temp, Pointer gs); + String geo_as_ewkt(Pointer gs, int precision); - int edisjoint_tgeo_geo(Pointer temp, Pointer gs); - int edisjoint_tgeo_tgeo(Pointer temp1, Pointer temp2); - int adisjoint_tgeo_geo(Pointer temp, Pointer gs); - int adisjoint_tgeo_tgeo(Pointer temp1, Pointer temp2); - int eintersects_tgeo_tgeo(Pointer temp1, Pointer temp2); - int aintersects_tgeo_geo(Pointer temp, Pointer gs); - int aintersects_tgeo_tgeo(Pointer temp1, Pointer temp2); - int etouches_tgeo_geo(Pointer temp, Pointer gs); - int etouches_tgeo_tgeo(Pointer temp1, Pointer temp2); - int atouches_tgeo_geo(Pointer temp, Pointer gs); - int atouches_tgeo_tgeo(Pointer temp1, Pointer temp2); - int ecovers_tgeo_geo(Pointer temp, Pointer gs); - int ecovers_tgeo_tgeo(Pointer temp1, Pointer temp2); - int acovers_tgeo_geo(Pointer temp, Pointer gs); - int econtains_tgeo_geo(Pointer temp, Pointer gs); - int econtains_tgeo_tgeo(Pointer temp1, Pointer temp2); - int acontains_tgeo_geo(Pointer temp, Pointer gs); - int acontains_tgeo_tgeo(Pointer temp1, Pointer temp2); - int adwithin_tgeo_tgeo(Pointer temp1, Pointer temp2, double dist); - int adwithin_tgeo_geo(Pointer temp, Pointer gs, double dist); - int edwithin_tgeo_geo(Pointer temp, Pointer gs, double dist); + String geo_as_geojson(Pointer gs, int option, int precision, String srs); - Pointer tcontains_geo_tgeo(Pointer gs, Pointer temp); + String geo_as_hexewkb(Pointer gs, String endian); - Pointer tcontains_geo_tpoint(Pointer gs, Pointer temp, boolean restr, boolean atvalue); + String geo_as_text(Pointer gs, int precision); - Pointer tcovers_tgeo_tgeo(Pointer temp1, Pointer temp2); + Pointer geo_from_ewkb(Pointer wkb, long wkb_size, int srid); - Pointer tdisjoint_tpoint_geo(Pointer temp, Pointer gs, boolean restr, boolean atvalue); + Pointer geo_from_geojson(String geojson); - Pointer tdisjoint_tgeo_geo(Pointer temp, Pointer gs); + Pointer geo_from_text(String wkt, int srid); - Pointer tdisjoint_tpoint_tpoint (Pointer temp1, Pointer temp2, boolean restr, boolean atvalue); + String geo_out(Pointer gs); - Pointer tdistance_tgeo_geo(Pointer temp, Pointer gs); + Pointer geog_from_binary(String wkb_bytea); - Pointer tdistance_tgeo_tgeo(Pointer temp1, Pointer temp2); + Pointer geog_from_hexewkb(String wkt); - Pointer tdistance_tfloat_float(Pointer temp, double d); + Pointer geog_in(String str, int typmod); - Pointer tdistance_tint_int(Pointer temp, int i); + Pointer geom_from_hexewkb(String wkt); - Pointer tdistance_tnumber_tnumber(Pointer temp1, Pointer temp2); + Pointer geom_in(String str, int typmod); - Pointer tdwithin_tpoint_geo(Pointer temp, Pointer gs, double dist, boolean restr, boolean atvalue); + String box3d_out(Pointer box, int maxdd); - Pointer tdwithin_tgeo_tgeo(Pointer temp1, Pointer temp2, double dist); + String gbox_out(Pointer box, int maxdd); - Pointer tdwithin_tpoint_tpoint(Pointer temp1, Pointer temp2, double dist, boolean restr, boolean atvalue); + Pointer geo_copy(Pointer g); - Pointer tintersects_tpoint_geo(Pointer temp, Pointer gs, boolean restr, boolean atvalue); + Pointer geogpoint_make2d(int srid, double x, double y); - Pointer tintersects_tgeo_geo(Pointer temp, Pointer gs); + Pointer geogpoint_make3dz(int srid, double x, double y, double z); - Pointer tintersects_tpoint_tpoint (Pointer temp1, Pointer temp2, boolean restr, boolean atvalue); + Pointer geompoint_make2d(int srid, double x, double y); - Pointer ttouches_tpoint_geo(Pointer temp, Pointer gs, boolean restr, boolean atvalue); + Pointer geompoint_make3dz(int srid, double x, double y, double z); - Pointer ttouches_tgeo_geo(Pointer temp, Pointer gs); + Pointer geom_to_geog(Pointer geom); - Pointer tdisjoint_tgeo_tgeo(Pointer temp1, Pointer temp2); - Pointer tintersects_tgeo_tgeo(Pointer temp1, Pointer temp2); - Pointer ttouches_tgeo_tgeo(Pointer temp1, Pointer temp2); - Pointer tcontains_tgeo_geo(Pointer temp, Pointer gs); - Pointer tcontains_tgeo_tgeo(Pointer temp1, Pointer temp2); - Pointer tcovers_tgeo_geo(Pointer temp, Pointer gs); - Pointer tdwithin_tgeo_geo(Pointer temp, Pointer gs, double dist); + Pointer geog_to_geom(Pointer geog); - Pointer tbool_tand_transfn(Pointer state, Pointer temp); + boolean geo_is_empty(Pointer g); - Pointer tbool_tor_transfn(Pointer state, Pointer temp); + boolean geo_is_unitary(Pointer gs); - Pointer temporal_extent_transfn(Pointer s, Pointer temp); + String geo_typename(int type); - Pointer temporal_tagg_finalfn(Pointer state); + double geog_area(Pointer g, boolean use_spheroid); - Pointer temporal_tcount_transfn(Pointer state, Pointer temp); + Pointer geog_centroid(Pointer g, boolean use_spheroid); - Pointer tfloat_tmax_transfn(Pointer state, Pointer temp); + double geog_length(Pointer g, boolean use_spheroid); - Pointer tfloat_tmin_transfn(Pointer state, Pointer temp); + double geog_perimeter(Pointer g, boolean use_spheroid); - Pointer tfloat_tsum_transfn(Pointer state, Pointer temp); + boolean geom_azimuth(Pointer gs1, Pointer gs2, Pointer result); - Pointer tfloat_wmax_transfn(Pointer state, Pointer temp, Pointer interv); + double geom_length(Pointer gs); - Pointer tfloat_wmin_transfn(Pointer state, Pointer temp, Pointer interv); + double geom_perimeter(Pointer gs); - Pointer tfloat_wsum_transfn(Pointer state, Pointer temp, Pointer interv); + int line_numpoints(Pointer gs); - Pointer timestamptz_tcount_transfn(Pointer state, long t); + Pointer line_point_n(Pointer geom, int n); - Pointer tint_tmax_transfn(Pointer state, Pointer temp); + Pointer geo_reverse(Pointer gs); - Pointer tint_tmin_transfn(Pointer state, Pointer temp); + Pointer geo_round(Pointer gs, int maxdd); - Pointer tint_tsum_transfn(Pointer state, Pointer temp); + Pointer geo_set_srid(Pointer gs, int srid); - Pointer tint_wmax_transfn(Pointer state, Pointer temp, Pointer interv); + int geo_srid(Pointer gs); - Pointer tint_wmin_transfn(Pointer state, Pointer temp, Pointer interv); + Pointer geo_transform(Pointer geom, int srid_to); - Pointer tint_wsum_transfn(Pointer state, Pointer temp, Pointer interv); + Pointer geo_transform_pipeline(Pointer gs, String pipeline, int srid_to, boolean is_forward); - Pointer tnumber_extent_transfn(Pointer box, Pointer temp); + Pointer geo_collect_garray(Pointer gsarr, int count); - Pointer tnumber_tavg_finalfn(Pointer state); + Pointer geo_makeline_garray(Pointer gsarr, int count); - Pointer tnumber_tavg_transfn(Pointer state, Pointer temp); + int geo_num_points(Pointer gs); - Pointer tnumber_wavg_transfn(Pointer state, Pointer temp, Pointer interv); + int geo_num_geos(Pointer gs); - Pointer tpoint_extent_transfn(Pointer box, Pointer temp); + Pointer geo_geo_n(Pointer geom, int n); - Pointer tspatial_extent_transfn(Pointer box, Pointer temp); + Pointer geo_pointarr(Pointer gs, Pointer count); - Pointer tpoint_tcentroid_finalfn(Pointer state); + Pointer geo_points(Pointer gs); - Pointer tpoint_tcentroid_transfn(Pointer state, Pointer temp); + Pointer geom_array_union(Pointer gsarr, int count); - Pointer tstzset_tcount_transfn(Pointer state, Pointer s); + Pointer geom_boundary(Pointer gs); - Pointer tstzspan_tcount_transfn(Pointer state, Pointer s); + Pointer geom_buffer(Pointer gs, double size, String params); - Pointer tstzspanset_tcount_transfn(Pointer state, Pointer ss); + Pointer geom_centroid(Pointer gs); - Pointer ttext_tmax_transfn(Pointer state, Pointer temp); + Pointer geom_convex_hull(Pointer gs); - Pointer ttext_tmin_transfn(Pointer state, Pointer temp); + Pointer geom_difference2d(Pointer gs1, Pointer gs2); - Pointer temporal_simplify_dp(Pointer temp, double eps_dist, boolean synchronize); + Pointer geom_intersection2d(Pointer gs1, Pointer gs2); - Pointer temporal_simplify_max_dist(Pointer temp, double eps_dist, boolean synchronize); + Pointer geom_intersection2d_coll(Pointer gs1, Pointer gs2); - Pointer temporal_simplify_min_dist(Pointer temp, double dist); + Pointer geom_min_bounding_radius(Pointer geom, Pointer radius); - Pointer temporal_simplify_min_tdelta(Pointer temp, Pointer mint); + Pointer geom_shortestline2d(Pointer gs1, Pointer s2); - Pointer temporal_tprecision(Pointer temp, Pointer duration, long origin); + Pointer geom_shortestline3d(Pointer gs1, Pointer s2); - Pointer temporal_tsample(Pointer temp, Pointer duration, long origin, int interp); + Pointer geom_unary_union(Pointer gs, double prec); - double temporal_dyntimewarp_distance(Pointer temp1, Pointer temp2); + Pointer line_interpolate_point(Pointer gs, double distance_fraction, boolean repeat); - Pointer temporal_dyntimewarp_path(Pointer temp1, Pointer temp2, Pointer count); + double line_locate_point(Pointer gs1, Pointer gs2); - double temporal_frechet_distance(Pointer temp1, Pointer temp2); + Pointer line_substring(Pointer gs, double from, double to); - Pointer temporal_frechet_path(Pointer temp1, Pointer temp2, Pointer count); + boolean geog_dwithin(Pointer g1, Pointer g2, double tolerance, boolean use_spheroid); - double temporal_hausdorff_distance(Pointer temp1, Pointer temp2); + boolean geog_intersects(Pointer gs1, Pointer gs2, boolean use_spheroid); + + boolean geom_contains(Pointer gs1, Pointer gs2); + + boolean geom_covers(Pointer gs1, Pointer gs2); + + boolean geom_disjoint2d(Pointer gs1, Pointer gs2); - double float_bucket(double value, double size, double origin); + boolean geom_dwithin2d(Pointer gs1, Pointer gs2, double tolerance); + + boolean geom_dwithin3d(Pointer gs1, Pointer gs2, double tolerance); + + boolean geom_intersects2d(Pointer gs1, Pointer gs2); + + boolean geom_intersects3d(Pointer gs1, Pointer gs2); + + boolean geom_relate_pattern(Pointer gs1, Pointer gs2, String patt); + + boolean geom_touches(Pointer gs1, Pointer gs2); + + Pointer geo_stboxes(Pointer gs, Pointer count); + + Pointer geo_split_each_n_stboxes(Pointer gs, int elem_count, Pointer count); + + Pointer geo_split_n_stboxes(Pointer gs, int box_count, Pointer count); + + double geog_distance(Pointer g1, Pointer g2); + + double geom_distance2d(Pointer gs1, Pointer gs2); + + double geom_distance3d(Pointer gs1, Pointer gs2); + + int geo_equals(Pointer gs1, Pointer gs2); + + boolean geo_same(Pointer gs1, Pointer gs2); + + Pointer geogset_in(String str); + + Pointer geomset_in(String str); + + String spatialset_as_text(Pointer set, int maxdd); + + String spatialset_as_ewkt(Pointer set, int maxdd); + + Pointer geoset_make(Pointer values, int count); + + Pointer geo_to_set(Pointer gs); + + Pointer geoset_end_value(Pointer s); + + Pointer geoset_start_value(Pointer s); + + boolean geoset_value_n(Pointer s, int n, Pointer result); + + Pointer geoset_values(Pointer s); + + boolean contained_geo_set(Pointer gs, Pointer s); + + boolean contains_set_geo(Pointer s, Pointer gs); + + Pointer geo_union_transfn(Pointer state, Pointer gs); + + Pointer intersection_geo_set(Pointer gs, Pointer s); + + Pointer intersection_set_geo(Pointer s, Pointer gs); + + Pointer minus_geo_set(Pointer gs, Pointer s); + + Pointer minus_set_geo(Pointer s, Pointer gs); + + Pointer union_geo_set(Pointer gs, Pointer s); + + Pointer union_set_geo(Pointer s, Pointer gs); + + Pointer spatialset_set_srid(Pointer s, int srid); + + int spatialset_srid(Pointer s); + + Pointer spatialset_transform(Pointer s, int srid); + + Pointer spatialset_transform_pipeline(Pointer s, String pipelinestr, int srid, boolean is_forward); + + String stbox_as_hexwkb(Pointer box, byte variant, Pointer size); + + Pointer stbox_as_wkb(Pointer box, byte variant, Pointer size_out); + + Pointer stbox_from_hexwkb(String hexwkb); + + Pointer stbox_from_wkb(Pointer wkb, long size); + + Pointer stbox_in(String str); + + String stbox_out(Pointer box, int maxdd); + + Pointer geo_timestamptz_to_stbox(Pointer gs, long t); + + Pointer geo_tstzspan_to_stbox(Pointer gs, Pointer s); + + Pointer stbox_copy(Pointer box); + + Pointer stbox_make(boolean hasx, boolean hasz, boolean geodetic, int srid, double xmin, double xmax, double ymin, double ymax, double zmin, double zmax, Pointer s); + + Pointer geo_to_stbox(Pointer gs); + + Pointer spatialset_to_stbox(Pointer s); + + Pointer stbox_to_box3d(Pointer box); + + Pointer stbox_to_gbox(Pointer box); + + Pointer stbox_to_geo(Pointer box); + + Pointer stbox_to_tstzspan(Pointer box); + + Pointer timestamptz_to_stbox(long t); + + Pointer tstzset_to_stbox(Pointer s); + + Pointer tstzspan_to_stbox(Pointer s); + + Pointer tstzspanset_to_stbox(Pointer ss); + + double stbox_area(Pointer box, boolean spheroid); + + int stbox_hash(Pointer box); + + long stbox_hash_extended(Pointer box, long seed); + + boolean stbox_hast(Pointer box); + + boolean stbox_hasx(Pointer box); + + boolean stbox_hasz(Pointer box); + + boolean stbox_isgeodetic(Pointer box); + + double stbox_perimeter(Pointer box, boolean spheroid); - Pointer floatspan_bucket_list(Pointer bounds, double size, double origin, Pointer count); + boolean stbox_tmax(Pointer box, Pointer result); - int int_bucket(int value, int size, int origin); + boolean stbox_tmax_inc(Pointer box, Pointer result); - Pointer intspan_bucket_list(Pointer bounds, int size, int origin, Pointer count); + boolean stbox_tmin(Pointer box, Pointer result); - Pointer stbox_tile(Pointer point, long t, double xsize, double ysize, double zsize, Pointer duration, Pointer sorigin, long torigin, boolean hast); + boolean stbox_tmin_inc(Pointer box, Pointer result); - Pointer stbox_tile_list(Pointer bounds, double xsize, double ysize, double zsize, Pointer duration, Pointer sorigin, long torigin, boolean border_inc, Pointer count); + double stbox_volume(Pointer box); - Pointer temporal_time_split(Pointer temp, Pointer duration, long torigin, Pointer time_buckets, Pointer count); + boolean stbox_xmax(Pointer box, Pointer result); - Pointer tfloat_value_split(Pointer temp, double size, double origin, Pointer value_buckets, Pointer count); + boolean stbox_xmin(Pointer box, Pointer result); - Pointer tfloat_value_time_split(Pointer temp, double size, Pointer duration, double vorigin, long torigin, Pointer value_buckets, Pointer time_buckets, Pointer count); + boolean stbox_ymax(Pointer box, Pointer result); - Pointer tfloatbox_tile(double value, long t, double vsize, Pointer duration, double vorigin, long torigin); + boolean stbox_ymin(Pointer box, Pointer result); - Pointer tfloatbox_tile_list(Pointer box, double xsize, Pointer duration, double xorigin, long torigin, Pointer count); + boolean stbox_zmax(Pointer box, Pointer result); - long timestamptz_bucket(long timestamp, Pointer duration, long origin); + boolean stbox_zmin(Pointer box, Pointer result); - Pointer tint_value_split(Pointer temp, int size, int origin, Pointer value_buckets, Pointer count); + Pointer stbox_expand_space(Pointer box, double d); - Pointer tint_value_time_split(Pointer temp, int size, Pointer duration, int vorigin, long torigin, Pointer value_buckets, Pointer time_buckets, Pointer count); + Pointer stbox_expand_time(Pointer box, Pointer interv); - Pointer tintbox_tile(int value, long t, int vsize, Pointer duration, int vorigin, long torigin); + Pointer stbox_get_space(Pointer box); - Pointer tintbox_tile_list(Pointer box, int xsize, Pointer duration, int xorigin, long torigin, Pointer count); + Pointer stbox_quad_split(Pointer box, Pointer count); - Pointer tpoint_space_split(Pointer temp, float xsize, float ysize, float zsize, Pointer sorigin, boolean bitmatrix, boolean border_inc, Pointer space_buckets, Pointer count); + Pointer stbox_round(Pointer box, int maxdd); - Pointer tpoint_space_time_split(Pointer temp, float xsize, float ysize, float zsize, Pointer duration, Pointer sorigin, long torigin, boolean bitmatrix, boolean border_inc, Pointer space_buckets, Pointer time_buckets, Pointer count); + Pointer stbox_shift_scale_time(Pointer box, Pointer shift, Pointer duration); - Pointer tstzspan_bucket_list(Pointer bounds, Pointer duration, long origin, Pointer count); + Pointer stboxarr_round(Pointer boxarr, int count, int maxdd); + Pointer stbox_set_srid(Pointer box, int srid); + + int stbox_srid(Pointer box); + + Pointer stbox_transform(Pointer box, int srid); + + Pointer stbox_transform_pipeline(Pointer box, String pipelinestr, int srid, boolean is_forward); + + boolean adjacent_stbox_stbox(Pointer box1, Pointer box2); + + boolean contained_stbox_stbox(Pointer box1, Pointer box2); + + boolean contains_stbox_stbox(Pointer box1, Pointer box2); + + boolean overlaps_stbox_stbox(Pointer box1, Pointer box2); + + boolean same_stbox_stbox(Pointer box1, Pointer box2); + + boolean above_stbox_stbox(Pointer box1, Pointer box2); + + boolean after_stbox_stbox(Pointer box1, Pointer box2); + + boolean back_stbox_stbox(Pointer box1, Pointer box2); + + boolean before_stbox_stbox(Pointer box1, Pointer box2); + + boolean below_stbox_stbox(Pointer box1, Pointer box2); + + boolean front_stbox_stbox(Pointer box1, Pointer box2); + + boolean left_stbox_stbox(Pointer box1, Pointer box2); + + boolean overabove_stbox_stbox(Pointer box1, Pointer box2); + + boolean overafter_stbox_stbox(Pointer box1, Pointer box2); + + boolean overback_stbox_stbox(Pointer box1, Pointer box2); + + boolean overbefore_stbox_stbox(Pointer box1, Pointer box2); + + boolean overbelow_stbox_stbox(Pointer box1, Pointer box2); + + boolean overfront_stbox_stbox(Pointer box1, Pointer box2); + + boolean overleft_stbox_stbox(Pointer box1, Pointer box2); + + boolean overright_stbox_stbox(Pointer box1, Pointer box2); + + boolean right_stbox_stbox(Pointer box1, Pointer box2); + + Pointer union_stbox_stbox(Pointer box1, Pointer box2, boolean strict); + + Pointer intersection_stbox_stbox(Pointer box1, Pointer box2); + + int stbox_cmp(Pointer box1, Pointer box2); + + boolean stbox_eq(Pointer box1, Pointer box2); + + boolean stbox_ge(Pointer box1, Pointer box2); + + boolean stbox_gt(Pointer box1, Pointer box2); + + boolean stbox_le(Pointer box1, Pointer box2); + + boolean stbox_lt(Pointer box1, Pointer box2); + + boolean stbox_ne(Pointer box1, Pointer box2); + + Pointer tgeogpoint_from_mfjson(String str); + + Pointer tgeogpoint_in(String str); + + Pointer tgeography_from_mfjson(String mfjson); + + Pointer tgeography_in(String str); + + Pointer tgeometry_from_mfjson(String str); + + Pointer tgeometry_in(String str); + + Pointer tgeompoint_from_mfjson(String str); + + Pointer tgeompoint_in(String str); + + String tspatial_as_ewkt(Pointer temp, int maxdd); + + String tspatial_as_text(Pointer temp, int maxdd); + + String tspatial_out(Pointer temp, int maxdd); + + Pointer tgeo_from_base_temp(Pointer gs, Pointer temp); + + Pointer tgeoinst_make(Pointer gs, long t); + + Pointer tgeoseq_from_base_tstzset(Pointer gs, Pointer s); + + Pointer tgeoseq_from_base_tstzspan(Pointer gs, Pointer s, int interp); + + Pointer tgeoseqset_from_base_tstzspanset(Pointer gs, Pointer ss, int interp); + + Pointer tpoint_from_base_temp(Pointer gs, Pointer temp); + + Pointer tpointinst_make(Pointer gs, long t); + + Pointer tpointseq_from_base_tstzset(Pointer gs, Pointer s); + + Pointer tpointseq_from_base_tstzspan(Pointer gs, Pointer s, int interp); + + Pointer tpointseq_make_coords(Pointer xcoords, Pointer ycoords, Pointer zcoords, Pointer times, int count, int srid, boolean geodetic, boolean lower_inc, boolean upper_inc, int interp, boolean normalize); + + Pointer tpointseqset_from_base_tstzspanset(Pointer gs, Pointer ss, int interp); + + Pointer box3d_to_stbox(Pointer box); + + Pointer gbox_to_stbox(Pointer box); + + Pointer geomeas_to_tpoint(Pointer gs); + + Pointer tgeogpoint_to_tgeography(Pointer temp); + + Pointer tgeography_to_tgeogpoint(Pointer temp); + + Pointer tgeography_to_tgeometry(Pointer temp); + + Pointer tgeometry_to_tgeography(Pointer temp); + + Pointer tgeometry_to_tgeompoint(Pointer temp); + + Pointer tgeompoint_to_tgeometry(Pointer temp); + + boolean tpoint_as_mvtgeom(Pointer temp, Pointer bounds, int extent, int buffer, boolean clip_geom, Pointer gsarr, Pointer timesarr, Pointer count); + + boolean tpoint_tfloat_to_geomeas(Pointer tpoint, Pointer measure, boolean segmentize, Pointer result); + + Pointer tspatial_to_stbox(Pointer temp); + + boolean bearing_point_point(Pointer gs1, Pointer gs2, Pointer result); + + Pointer bearing_tpoint_point(Pointer temp, Pointer gs, boolean invert); + + Pointer bearing_tpoint_tpoint(Pointer temp1, Pointer temp2); + + Pointer tgeo_centroid(Pointer temp); + + Pointer tgeo_convex_hull(Pointer temp); + + Pointer tgeo_end_value(Pointer temp); + + Pointer tgeo_start_value(Pointer temp); + + Pointer tgeo_traversed_area(Pointer temp, boolean unary_union); + + boolean tgeo_value_at_timestamptz(Pointer temp, long t, boolean strict, Pointer value); + + boolean tgeo_value_n(Pointer temp, int n, Pointer result); + + Pointer tgeo_values(Pointer temp, Pointer count); + + Pointer tpoint_angular_difference(Pointer temp); + + Pointer tpoint_azimuth(Pointer temp); + + Pointer tpoint_cumulative_length(Pointer temp); + + boolean tpoint_direction(Pointer temp, Pointer result); + + Pointer tpoint_get_x(Pointer temp); + + Pointer tpoint_get_y(Pointer temp); + + Pointer tpoint_get_z(Pointer temp); + + boolean tpoint_is_simple(Pointer temp); + + double tpoint_length(Pointer temp); + + Pointer tpoint_speed(Pointer temp); + + Pointer tpoint_trajectory(Pointer temp, boolean unary_union); + + Pointer tpoint_twcentroid(Pointer temp); + + Pointer tgeo_affine(Pointer temp, Pointer a); + + Pointer tgeo_scale(Pointer temp, Pointer scale, Pointer sorigin); + + Pointer tpoint_make_simple(Pointer temp, Pointer count); + + int tspatial_srid(Pointer temp); + + Pointer tspatial_set_srid(Pointer temp, int srid); + + Pointer tspatial_transform(Pointer temp, int srid); + + Pointer tspatial_transform_pipeline(Pointer temp, String pipelinestr, int srid, boolean is_forward); + + Pointer tgeo_at_geom(Pointer temp, Pointer gs); + + Pointer tgeo_at_stbox(Pointer temp, Pointer box, boolean border_inc); + + Pointer tgeo_at_value(Pointer temp, Pointer gs); + + Pointer tgeo_minus_geom(Pointer temp, Pointer gs); + + Pointer tgeo_minus_stbox(Pointer temp, Pointer box, boolean border_inc); + + Pointer tgeo_minus_value(Pointer temp, Pointer gs); + + Pointer tpoint_at_elevation(Pointer temp, Pointer s); + + Pointer tpoint_at_geom(Pointer temp, Pointer gs); + + Pointer tpoint_at_value(Pointer temp, Pointer gs); + + Pointer tpoint_minus_elevation(Pointer temp, Pointer s); + + Pointer tpoint_minus_geom(Pointer temp, Pointer gs); + + Pointer tpoint_minus_value(Pointer temp, Pointer gs); + + int always_eq_geo_tgeo(Pointer gs, Pointer temp); + + int always_eq_tgeo_geo(Pointer temp, Pointer gs); + + int always_eq_tgeo_tgeo(Pointer temp1, Pointer temp2); + + int always_ne_geo_tgeo(Pointer gs, Pointer temp); + + int always_ne_tgeo_geo(Pointer temp, Pointer gs); + + int always_ne_tgeo_tgeo(Pointer temp1, Pointer temp2); + + int ever_eq_geo_tgeo(Pointer gs, Pointer temp); + + int ever_eq_tgeo_geo(Pointer temp, Pointer gs); + + int ever_eq_tgeo_tgeo(Pointer temp1, Pointer temp2); + + int ever_ne_geo_tgeo(Pointer gs, Pointer temp); + + int ever_ne_tgeo_geo(Pointer temp, Pointer gs); + + int ever_ne_tgeo_tgeo(Pointer temp1, Pointer temp2); + + Pointer teq_geo_tgeo(Pointer gs, Pointer temp); + + Pointer teq_tgeo_geo(Pointer temp, Pointer gs); + + Pointer tne_geo_tgeo(Pointer gs, Pointer temp); + + Pointer tne_tgeo_geo(Pointer temp, Pointer gs); + + Pointer tgeo_stboxes(Pointer temp, Pointer count); + + Pointer tgeo_space_boxes(Pointer temp, double xsize, double ysize, double zsize, Pointer sorigin, boolean bitmatrix, boolean border_inc, Pointer count); + + Pointer tgeo_space_time_boxes(Pointer temp, double xsize, double ysize, double zsize, Pointer duration, Pointer sorigin, long torigin, boolean bitmatrix, boolean border_inc, Pointer count); + + Pointer tgeo_split_each_n_stboxes(Pointer temp, int elem_count, Pointer count); + + Pointer tgeo_split_n_stboxes(Pointer temp, int box_count, Pointer count); + + boolean adjacent_stbox_tspatial(Pointer box, Pointer temp); + + boolean adjacent_tspatial_stbox(Pointer temp, Pointer box); + + boolean adjacent_tspatial_tspatial(Pointer temp1, Pointer temp2); + + boolean contained_stbox_tspatial(Pointer box, Pointer temp); + + boolean contained_tspatial_stbox(Pointer temp, Pointer box); + + boolean contained_tspatial_tspatial(Pointer temp1, Pointer temp2); + + boolean contains_stbox_tspatial(Pointer box, Pointer temp); + + boolean contains_tspatial_stbox(Pointer temp, Pointer box); + + boolean contains_tspatial_tspatial(Pointer temp1, Pointer temp2); + + boolean overlaps_stbox_tspatial(Pointer box, Pointer temp); + + boolean overlaps_tspatial_stbox(Pointer temp, Pointer box); + + boolean overlaps_tspatial_tspatial(Pointer temp1, Pointer temp2); + + boolean same_stbox_tspatial(Pointer box, Pointer temp); + + boolean same_tspatial_stbox(Pointer temp, Pointer box); + + boolean same_tspatial_tspatial(Pointer temp1, Pointer temp2); + + boolean above_stbox_tspatial(Pointer box, Pointer temp); + + boolean above_tspatial_stbox(Pointer temp, Pointer box); + + boolean above_tspatial_tspatial(Pointer temp1, Pointer temp2); + + boolean after_stbox_tspatial(Pointer box, Pointer temp); + + boolean after_tspatial_stbox(Pointer temp, Pointer box); + + boolean after_tspatial_tspatial(Pointer temp1, Pointer temp2); + + boolean back_stbox_tspatial(Pointer box, Pointer temp); + + boolean back_tspatial_stbox(Pointer temp, Pointer box); + + boolean back_tspatial_tspatial(Pointer temp1, Pointer temp2); + + boolean before_stbox_tspatial(Pointer box, Pointer temp); + + boolean before_tspatial_stbox(Pointer temp, Pointer box); + + boolean before_tspatial_tspatial(Pointer temp1, Pointer temp2); + + boolean below_stbox_tspatial(Pointer box, Pointer temp); + + boolean below_tspatial_stbox(Pointer temp, Pointer box); + + boolean below_tspatial_tspatial(Pointer temp1, Pointer temp2); + + boolean front_stbox_tspatial(Pointer box, Pointer temp); + + boolean front_tspatial_stbox(Pointer temp, Pointer box); + + boolean front_tspatial_tspatial(Pointer temp1, Pointer temp2); + + boolean left_stbox_tspatial(Pointer box, Pointer temp); + + boolean left_tspatial_stbox(Pointer temp, Pointer box); + + boolean left_tspatial_tspatial(Pointer temp1, Pointer temp2); + + boolean overabove_stbox_tspatial(Pointer box, Pointer temp); + + boolean overabove_tspatial_stbox(Pointer temp, Pointer box); + + boolean overabove_tspatial_tspatial(Pointer temp1, Pointer temp2); + + boolean overafter_stbox_tspatial(Pointer box, Pointer temp); + + boolean overafter_tspatial_stbox(Pointer temp, Pointer box); + + boolean overafter_tspatial_tspatial(Pointer temp1, Pointer temp2); + + boolean overback_stbox_tspatial(Pointer box, Pointer temp); + + boolean overback_tspatial_stbox(Pointer temp, Pointer box); + + boolean overback_tspatial_tspatial(Pointer temp1, Pointer temp2); + + boolean overbefore_stbox_tspatial(Pointer box, Pointer temp); + + boolean overbefore_tspatial_stbox(Pointer temp, Pointer box); + + boolean overbefore_tspatial_tspatial(Pointer temp1, Pointer temp2); + + boolean overbelow_stbox_tspatial(Pointer box, Pointer temp); + + boolean overbelow_tspatial_stbox(Pointer temp, Pointer box); + + boolean overbelow_tspatial_tspatial(Pointer temp1, Pointer temp2); + + boolean overfront_stbox_tspatial(Pointer box, Pointer temp); + + boolean overfront_tspatial_stbox(Pointer temp, Pointer box); + + boolean overfront_tspatial_tspatial(Pointer temp1, Pointer temp2); + + boolean overleft_stbox_tspatial(Pointer box, Pointer temp); + + boolean overleft_tspatial_stbox(Pointer temp, Pointer box); + + boolean overleft_tspatial_tspatial(Pointer temp1, Pointer temp2); + + boolean overright_stbox_tspatial(Pointer box, Pointer temp); + + boolean overright_tspatial_stbox(Pointer temp, Pointer box); + + boolean overright_tspatial_tspatial(Pointer temp1, Pointer temp2); + + boolean right_stbox_tspatial(Pointer box, Pointer temp); + + boolean right_tspatial_stbox(Pointer temp, Pointer box); + + boolean right_tspatial_tspatial(Pointer temp1, Pointer temp2); + + int acontains_geo_tgeo(Pointer gs, Pointer temp); + + int acontains_tgeo_geo(Pointer temp, Pointer gs); + + int acontains_tgeo_tgeo(Pointer temp1, Pointer temp2); + + int adisjoint_tgeo_geo(Pointer temp, Pointer gs); + + int adisjoint_tgeo_tgeo(Pointer temp1, Pointer temp2); + + int adwithin_tgeo_geo(Pointer temp, Pointer gs, double dist); + + int adwithin_tgeo_tgeo(Pointer temp1, Pointer temp2, double dist); + + int aintersects_tgeo_geo(Pointer temp, Pointer gs); + + int aintersects_tgeo_tgeo(Pointer temp1, Pointer temp2); + + int atouches_tgeo_geo(Pointer temp, Pointer gs); + + int atouches_tgeo_tgeo(Pointer temp1, Pointer temp2); + + int atouches_tpoint_geo(Pointer temp, Pointer gs); + + int econtains_geo_tgeo(Pointer gs, Pointer temp); + + int econtains_tgeo_geo(Pointer temp, Pointer gs); + + int econtains_tgeo_tgeo(Pointer temp1, Pointer temp2); + + int ecovers_geo_tgeo(Pointer gs, Pointer temp); + + int ecovers_tgeo_geo(Pointer temp, Pointer gs); + + int ecovers_tgeo_tgeo(Pointer temp1, Pointer temp2); + + int edisjoint_tgeo_geo(Pointer temp, Pointer gs); + + int edisjoint_tgeo_tgeo(Pointer temp1, Pointer temp2); + + int edwithin_tgeo_geo(Pointer temp, Pointer gs, double dist); + + int edwithin_tgeo_tgeo(Pointer temp1, Pointer temp2, double dist); + + int eintersects_tgeo_geo(Pointer temp, Pointer gs); + + int eintersects_tgeo_tgeo(Pointer temp1, Pointer temp2); + + int etouches_tgeo_geo(Pointer temp, Pointer gs); + + int etouches_tgeo_tgeo(Pointer temp1, Pointer temp2); + + int etouches_tpoint_geo(Pointer temp, Pointer gs); + + Pointer tcontains_geo_tgeo(Pointer gs, Pointer temp); + + Pointer tcontains_tgeo_geo(Pointer temp, Pointer gs); + + Pointer tcontains_tgeo_tgeo(Pointer temp1, Pointer temp2); + + Pointer tcovers_geo_tgeo(Pointer gs, Pointer temp); + + Pointer tcovers_tgeo_geo(Pointer temp, Pointer gs); + + Pointer tcovers_tgeo_tgeo(Pointer temp1, Pointer temp2); + + Pointer tdisjoint_geo_tgeo(Pointer gs, Pointer temp); + + Pointer tdisjoint_tgeo_geo(Pointer temp, Pointer gs); + + Pointer tdisjoint_tgeo_tgeo(Pointer temp1, Pointer temp2); + + Pointer tdwithin_geo_tgeo(Pointer gs, Pointer temp, double dist); + + Pointer tdwithin_tgeo_geo(Pointer temp, Pointer gs, double dist); + + Pointer tdwithin_tgeo_tgeo(Pointer temp1, Pointer temp2, double dist); + + Pointer tintersects_geo_tgeo(Pointer gs, Pointer temp); + + Pointer tintersects_tgeo_geo(Pointer temp, Pointer gs); + + Pointer tintersects_tgeo_tgeo(Pointer temp1, Pointer temp2); + + Pointer ttouches_geo_tgeo(Pointer gs, Pointer temp); + + Pointer ttouches_tgeo_geo(Pointer temp, Pointer gs); + + Pointer ttouches_tgeo_tgeo(Pointer temp1, Pointer temp2); + + Pointer tdistance_tgeo_geo(Pointer temp, Pointer gs); + + Pointer tdistance_tgeo_tgeo(Pointer temp1, Pointer temp2); + + double nad_stbox_geo(Pointer box, Pointer gs); + + double nad_stbox_stbox(Pointer box1, Pointer box2); + + double nad_tgeo_geo(Pointer temp, Pointer gs); + + double nad_tgeo_stbox(Pointer temp, Pointer box); + + double nad_tgeo_tgeo(Pointer temp1, Pointer temp2); + + Pointer nai_tgeo_geo(Pointer temp, Pointer gs); + + Pointer nai_tgeo_tgeo(Pointer temp1, Pointer temp2); + + Pointer shortestline_tgeo_geo(Pointer temp, Pointer gs); + + Pointer shortestline_tgeo_tgeo(Pointer temp1, Pointer temp2); + + Pointer tpoint_tcentroid_finalfn(Pointer state); + + Pointer tpoint_tcentroid_transfn(Pointer state, Pointer temp); + + Pointer tspatial_extent_transfn(Pointer box, Pointer temp); + + Pointer stbox_get_space_tile(Pointer point, double xsize, double ysize, double zsize, Pointer sorigin); + + Pointer stbox_get_space_time_tile(Pointer point, long t, double xsize, double ysize, double zsize, Pointer duration, Pointer sorigin, long torigin); + + Pointer stbox_get_time_tile(long t, Pointer duration, long torigin); + + Pointer stbox_space_tiles(Pointer bounds, double xsize, double ysize, double zsize, Pointer sorigin, boolean border_inc, Pointer count); + + Pointer stbox_space_time_tiles(Pointer bounds, double xsize, double ysize, double zsize, Pointer duration, Pointer sorigin, long torigin, boolean border_inc, Pointer count); + + Pointer stbox_time_tiles(Pointer bounds, Pointer duration, long torigin, boolean border_inc, Pointer count); + + Pointer tgeo_space_split(Pointer temp, double xsize, double ysize, double zsize, Pointer sorigin, boolean bitmatrix, boolean border_inc, Pointer space_bins, Pointer count); + + Pointer tgeo_space_time_split(Pointer temp, double xsize, double ysize, double zsize, Pointer duration, Pointer sorigin, long torigin, boolean bitmatrix, boolean border_inc, Pointer space_bins, Pointer time_bins, Pointer count); + + Pointer geo_cluster_kmeans(Pointer geoms, int ngeoms, int k); + + Pointer geo_cluster_dbscan(Pointer geoms, int ngeoms, double tolerance, int minpoints, Pointer count); + + Pointer geo_cluster_intersecting(Pointer geoms, int ngeoms, Pointer count); + + Pointer geo_cluster_within(Pointer geoms, int ngeoms, double tolerance, Pointer count); + + String cbuffer_as_ewkt(Pointer cb, int maxdd); + + String cbuffer_as_hexwkb(Pointer cb, byte variant, Pointer size); + + String cbuffer_as_text(Pointer cb, int maxdd); + + Pointer cbuffer_as_wkb(Pointer cb, byte variant, Pointer size_out); + + Pointer cbuffer_from_hexwkb(String hexwkb); + + Pointer cbuffer_from_wkb(Pointer wkb, long size); + + Pointer cbuffer_in(String str); + + String cbuffer_out(Pointer cb, int maxdd); + + Pointer cbuffer_copy(Pointer cb); + + Pointer cbuffer_make(Pointer point, double radius); + + Pointer cbuffer_to_geom(Pointer cb); + + Pointer cbuffer_to_stbox(Pointer cb); + + Pointer cbufferarr_to_geom(Pointer cbarr, int count); + + Pointer geom_to_cbuffer(Pointer gs); + + int cbuffer_hash(Pointer cb); + + long cbuffer_hash_extended(Pointer cb, long seed); + + Pointer cbuffer_point(Pointer cb); + + double cbuffer_radius(Pointer cb); + + Pointer cbuffer_round(Pointer cb, int maxdd); + + Pointer cbufferarr_round(Pointer cbarr, int count, int maxdd); + + void cbuffer_set_srid(Pointer cb, int srid); + + int cbuffer_srid(Pointer cb); + + Pointer cbuffer_transform(Pointer cb, int srid); + + Pointer cbuffer_transform_pipeline(Pointer cb, String pipelinestr, int srid, boolean is_forward); + + int contains_cbuffer_cbuffer(Pointer cb1, Pointer cb2); + + int covers_cbuffer_cbuffer(Pointer cb1, Pointer cb2); + + int disjoint_cbuffer_cbuffer(Pointer cb1, Pointer cb2); + + int dwithin_cbuffer_cbuffer(Pointer cb1, Pointer cb2, double dist); + + int intersects_cbuffer_cbuffer(Pointer cb1, Pointer cb2); + + int touches_cbuffer_cbuffer(Pointer cb1, Pointer cb2); + + Pointer cbuffer_tstzspan_to_stbox(Pointer cb, Pointer s); + + Pointer cbuffer_timestamptz_to_stbox(Pointer cb, long t); + + double distance_cbuffer_cbuffer(Pointer cb1, Pointer cb2); + + double distance_cbuffer_geo(Pointer cb, Pointer gs); + + double distance_cbuffer_stbox(Pointer cb, Pointer box); + + double nad_cbuffer_stbox(Pointer cb, Pointer box); + + int cbuffer_cmp(Pointer cb1, Pointer cb2); + + boolean cbuffer_eq(Pointer cb1, Pointer cb2); + + boolean cbuffer_ge(Pointer cb1, Pointer cb2); + + boolean cbuffer_gt(Pointer cb1, Pointer cb2); + + boolean cbuffer_le(Pointer cb1, Pointer cb2); + + boolean cbuffer_lt(Pointer cb1, Pointer cb2); + + boolean cbuffer_ne(Pointer cb1, Pointer cb2); + + boolean cbuffer_nsame(Pointer cb1, Pointer cb2); + + boolean cbuffer_same(Pointer cb1, Pointer cb2); + + Pointer cbufferset_in(String str); + + String cbufferset_out(Pointer s, int maxdd); + + Pointer cbufferset_make(Pointer values, int count); + + Pointer cbuffer_to_set(Pointer cb); + + Pointer cbufferset_end_value(Pointer s); + + Pointer cbufferset_start_value(Pointer s); + + boolean cbufferset_value_n(Pointer s, int n, Pointer result); + + Pointer cbufferset_values(Pointer s); + + Pointer cbuffer_union_transfn(Pointer state, Pointer cb); + + boolean contained_cbuffer_set(Pointer cb, Pointer s); + + boolean contains_set_cbuffer(Pointer s, Pointer cb); + + Pointer intersection_cbuffer_set(Pointer cb, Pointer s); + + Pointer intersection_set_cbuffer(Pointer s, Pointer cb); + + Pointer minus_cbuffer_set(Pointer cb, Pointer s); + + Pointer minus_set_cbuffer(Pointer s, Pointer cb); + + Pointer union_cbuffer_set(Pointer cb, Pointer s); + + Pointer union_set_cbuffer(Pointer s, Pointer cb); + + Pointer tcbuffer_in(String str); + + Pointer tcbuffer_make(Pointer tpoint, Pointer tfloat); + + Pointer tcbuffer_points(Pointer temp); + + Pointer tcbuffer_radius(Pointer temp); + + Pointer tcbuffer_trav_area(Pointer temp, boolean merge_union); + + Pointer tcbuffer_to_tfloat(Pointer temp); + + Pointer tcbuffer_to_tgeompoint(Pointer temp); + + Pointer tgeometry_to_tcbuffer(Pointer temp); + + Pointer tcbuffer_expand(Pointer temp, double dist); + + Pointer tcbuffer_at_cbuffer(Pointer temp, Pointer cb); + + Pointer tcbuffer_at_geom(Pointer temp, Pointer gs); + + Pointer tcbuffer_at_stbox(Pointer temp, Pointer box, boolean border_inc); + + Pointer tcbuffer_minus_cbuffer(Pointer temp, Pointer cb); + + Pointer tcbuffer_minus_geom(Pointer temp, Pointer gs); + + Pointer tcbuffer_minus_stbox(Pointer temp, Pointer box, boolean border_inc); + + Pointer tdistance_tcbuffer_cbuffer(Pointer temp, Pointer cb); + + Pointer tdistance_tcbuffer_geo(Pointer temp, Pointer gs); + + Pointer tdistance_tcbuffer_tcbuffer(Pointer temp1, Pointer temp2); + + double nad_tcbuffer_cbuffer(Pointer temp, Pointer cb); + + double nad_tcbuffer_geo(Pointer temp, Pointer gs); + + double nad_tcbuffer_stbox(Pointer temp, Pointer box); + + double nad_tcbuffer_tcbuffer(Pointer temp1, Pointer temp2); + + Pointer nai_tcbuffer_cbuffer(Pointer temp, Pointer cb); + + Pointer nai_tcbuffer_geo(Pointer temp, Pointer gs); + + Pointer nai_tcbuffer_tcbuffer(Pointer temp1, Pointer temp2); + + Pointer shortestline_tcbuffer_cbuffer(Pointer temp, Pointer cb); + + Pointer shortestline_tcbuffer_geo(Pointer temp, Pointer gs); + + Pointer shortestline_tcbuffer_tcbuffer(Pointer temp1, Pointer temp2); + + int always_eq_cbuffer_tcbuffer(Pointer cb, Pointer temp); + + int always_eq_tcbuffer_cbuffer(Pointer temp, Pointer cb); + + int always_eq_tcbuffer_tcbuffer(Pointer temp1, Pointer temp2); + + int always_ne_cbuffer_tcbuffer(Pointer cb, Pointer temp); + + int always_ne_tcbuffer_cbuffer(Pointer temp, Pointer cb); + + int always_ne_tcbuffer_tcbuffer(Pointer temp1, Pointer temp2); + + int ever_eq_cbuffer_tcbuffer(Pointer cb, Pointer temp); + + int ever_eq_tcbuffer_cbuffer(Pointer temp, Pointer cb); + + int ever_eq_tcbuffer_tcbuffer(Pointer temp1, Pointer temp2); + + int ever_ne_cbuffer_tcbuffer(Pointer cb, Pointer temp); + + int ever_ne_tcbuffer_cbuffer(Pointer temp, Pointer cb); + + int ever_ne_tcbuffer_tcbuffer(Pointer temp1, Pointer temp2); + + Pointer teq_cbuffer_tcbuffer(Pointer cb, Pointer temp); + + Pointer teq_tcbuffer_cbuffer(Pointer temp, Pointer cb); + + Pointer tne_cbuffer_tcbuffer(Pointer cb, Pointer temp); + + Pointer tne_tcbuffer_cbuffer(Pointer temp, Pointer cb); + + int acontains_cbuffer_tcbuffer(Pointer cb, Pointer temp); + + int acontains_geo_tcbuffer(Pointer gs, Pointer temp); + + int acontains_tcbuffer_cbuffer(Pointer temp, Pointer cb); + + int acontains_tcbuffer_geo(Pointer temp, Pointer gs); + + int acovers_cbuffer_tcbuffer(Pointer cb, Pointer temp); + + int acovers_geo_tcbuffer(Pointer gs, Pointer temp); + + int acovers_tcbuffer_cbuffer(Pointer temp, Pointer cb); + + int acovers_tcbuffer_geo(Pointer temp, Pointer gs); + + int adisjoint_tcbuffer_geo(Pointer temp, Pointer gs); + + int adisjoint_tcbuffer_cbuffer(Pointer temp, Pointer cb); + + int adisjoint_tcbuffer_tcbuffer(Pointer temp1, Pointer temp2); + + int adwithin_tcbuffer_geo(Pointer temp, Pointer gs, double dist); + + int adwithin_tcbuffer_cbuffer(Pointer temp, Pointer cb, double dist); + + int adwithin_tcbuffer_tcbuffer(Pointer temp1, Pointer temp2, double dist); + + int aintersects_tcbuffer_geo(Pointer temp, Pointer gs); + + int aintersects_tcbuffer_cbuffer(Pointer temp, Pointer cb); + + int aintersects_tcbuffer_tcbuffer(Pointer temp1, Pointer temp2); + + int atouches_tcbuffer_geo(Pointer temp, Pointer gs); + + int atouches_tcbuffer_cbuffer(Pointer temp, Pointer cb); + + int atouches_tcbuffer_tcbuffer(Pointer temp1, Pointer temp2); + + int econtains_cbuffer_tcbuffer(Pointer cb, Pointer temp); + + int econtains_tcbuffer_cbuffer(Pointer temp, Pointer cb); + + int econtains_tcbuffer_geo(Pointer temp, Pointer gs); + + int ecovers_cbuffer_tcbuffer(Pointer cb, Pointer temp); + + int ecovers_tcbuffer_cbuffer(Pointer temp, Pointer cb); + + int ecovers_tcbuffer_geo(Pointer temp, Pointer gs); + + int ecovers_tcbuffer_tcbuffer(Pointer temp1, Pointer temp2); + + int edisjoint_tcbuffer_geo(Pointer temp, Pointer gs); + + int edisjoint_tcbuffer_cbuffer(Pointer temp, Pointer cb); + + int edwithin_tcbuffer_geo(Pointer temp, Pointer gs, double dist); + + int edwithin_tcbuffer_cbuffer(Pointer temp, Pointer cb, double dist); + + int edwithin_tcbuffer_tcbuffer(Pointer temp1, Pointer temp2, double dist); + + int eintersects_tcbuffer_geo(Pointer temp, Pointer gs); + + int eintersects_tcbuffer_cbuffer(Pointer temp, Pointer cb); + + int eintersects_tcbuffer_tcbuffer(Pointer temp1, Pointer temp2); + + int etouches_tcbuffer_geo(Pointer temp, Pointer gs); + + int etouches_tcbuffer_cbuffer(Pointer temp, Pointer cb); + + int etouches_tcbuffer_tcbuffer(Pointer temp1, Pointer temp2); + + Pointer tcontains_cbuffer_tcbuffer(Pointer cb, Pointer temp); + + Pointer tcontains_geo_tcbuffer(Pointer gs, Pointer temp); + + Pointer tcontains_tcbuffer_geo(Pointer temp, Pointer gs); + + Pointer tcontains_tcbuffer_cbuffer(Pointer temp, Pointer cb); + + Pointer tcontains_tcbuffer_tcbuffer(Pointer temp1, Pointer temp2); + + Pointer tcovers_cbuffer_tcbuffer(Pointer cb, Pointer temp); + + Pointer tcovers_geo_tcbuffer(Pointer gs, Pointer temp); + + Pointer tcovers_tcbuffer_geo(Pointer temp, Pointer gs); + + Pointer tcovers_tcbuffer_cbuffer(Pointer temp, Pointer cb); + + Pointer tcovers_tcbuffer_tcbuffer(Pointer temp1, Pointer temp2); + + Pointer tdwithin_geo_tcbuffer(Pointer gs, Pointer temp, double dist); + + Pointer tdwithin_tcbuffer_geo(Pointer temp, Pointer gs, double dist); + + Pointer tdwithin_tcbuffer_cbuffer(Pointer temp, Pointer cb, double dist); + + Pointer tdwithin_tcbuffer_tcbuffer(Pointer temp1, Pointer temp2, double dist); + + Pointer tdisjoint_cbuffer_tcbuffer(Pointer cb, Pointer temp); + + Pointer tdisjoint_geo_tcbuffer(Pointer gs, Pointer temp); + + Pointer tdisjoint_tcbuffer_geo(Pointer temp, Pointer gs); + + Pointer tdisjoint_tcbuffer_cbuffer(Pointer temp, Pointer cb); + + Pointer tdisjoint_tcbuffer_tcbuffer(Pointer temp1, Pointer temp2); + + Pointer tintersects_cbuffer_tcbuffer(Pointer cb, Pointer temp); + + Pointer tintersects_geo_tcbuffer(Pointer gs, Pointer temp); + + Pointer tintersects_tcbuffer_geo(Pointer temp, Pointer gs); + + Pointer tintersects_tcbuffer_cbuffer(Pointer temp, Pointer cb); + + Pointer tintersects_tcbuffer_tcbuffer(Pointer temp1, Pointer temp2); + + Pointer ttouches_geo_tcbuffer(Pointer gs, Pointer temp); + + Pointer ttouches_tcbuffer_geo(Pointer temp, Pointer gs); + + Pointer ttouches_cbuffer_tcbuffer(Pointer cb, Pointer temp); + + Pointer ttouches_tcbuffer_cbuffer(Pointer temp, Pointer cb); + + Pointer ttouches_tcbuffer_tcbuffer(Pointer temp1, Pointer temp2); + + String npoint_as_ewkt(Pointer np, int maxdd); + + String npoint_as_hexwkb(Pointer np, byte variant, Pointer size_out); + + String npoint_as_text(Pointer np, int maxdd); + + Pointer npoint_as_wkb(Pointer np, byte variant, Pointer size_out); + + Pointer npoint_from_hexwkb(String hexwkb); + + Pointer npoint_from_wkb(Pointer wkb, long size); + + Pointer npoint_in(String str); + + String npoint_out(Pointer np, int maxdd); + + Pointer nsegment_in(String str); + + String nsegment_out(Pointer ns, int maxdd); + + Pointer npoint_make(long rid, double pos); + + Pointer nsegment_make(long rid, double pos1, double pos2); + + Pointer geompoint_to_npoint(Pointer gs); + + Pointer geom_to_nsegment(Pointer gs); + + Pointer npoint_to_geompoint(Pointer np); + + Pointer npoint_to_nsegment(Pointer np); + + Pointer npoint_to_stbox(Pointer np); + + Pointer nsegment_to_geom(Pointer ns); + + Pointer nsegment_to_stbox(Pointer np); + + int npoint_hash(Pointer np); + + long npoint_hash_extended(Pointer np, long seed); + + double npoint_position(Pointer np); + + long npoint_route(Pointer np); + + double nsegment_end_position(Pointer ns); + + long nsegment_route(Pointer ns); + + double nsegment_start_position(Pointer ns); + + boolean route_exists(long rid); + + Pointer route_geom(long rid); + + double route_length(long rid); + + Pointer npoint_round(Pointer np, int maxdd); + + Pointer nsegment_round(Pointer ns, int maxdd); + + int get_srid_ways(); + + int npoint_srid(Pointer np); + + int nsegment_srid(Pointer ns); + + Pointer npoint_timestamptz_to_stbox(Pointer np, long t); + + Pointer npoint_tstzspan_to_stbox(Pointer np, Pointer s); + + int npoint_cmp(Pointer np1, Pointer np2); + + boolean npoint_eq(Pointer np1, Pointer np2); + + boolean npoint_ge(Pointer np1, Pointer np2); + + boolean npoint_gt(Pointer np1, Pointer np2); + + boolean npoint_le(Pointer np1, Pointer np2); + + boolean npoint_lt(Pointer np1, Pointer np2); + + boolean npoint_ne(Pointer np1, Pointer np2); + + boolean npoint_same(Pointer np1, Pointer np2); + + int nsegment_cmp(Pointer ns1, Pointer ns2); + + boolean nsegment_eq(Pointer ns1, Pointer ns2); + + boolean nsegment_ge(Pointer ns1, Pointer ns2); + + boolean nsegment_gt(Pointer ns1, Pointer ns2); + + boolean nsegment_le(Pointer ns1, Pointer ns2); + + boolean nsegment_lt(Pointer ns1, Pointer ns2); + + boolean nsegment_ne(Pointer ns1, Pointer ns2); + + Pointer npointset_in(String str); + + String npointset_out(Pointer s, int maxdd); + + Pointer npointset_make(Pointer values, int count); + + Pointer npoint_to_set(Pointer np); + + Pointer npointset_end_value(Pointer s); + + Pointer npointset_routes(Pointer s); + + Pointer npointset_start_value(Pointer s); + + boolean npointset_value_n(Pointer s, int n, Pointer result); + + Pointer npointset_values(Pointer s); + + boolean contained_npoint_set(Pointer np, Pointer s); + + boolean contains_set_npoint(Pointer s, Pointer np); + + Pointer intersection_npoint_set(Pointer np, Pointer s); + + Pointer intersection_set_npoint(Pointer s, Pointer np); + + Pointer minus_npoint_set(Pointer np, Pointer s); + + Pointer minus_set_npoint(Pointer s, Pointer np); + + Pointer npoint_union_transfn(Pointer state, Pointer np); + + Pointer union_npoint_set(Pointer np, Pointer s); + + Pointer union_set_npoint(Pointer s, Pointer np); + + Pointer tnpoint_in(String str); + + String tnpoint_out(Pointer temp, int maxdd); + + Pointer tnpointinst_make(Pointer np, long t); + + Pointer tgeompoint_to_tnpoint(Pointer temp); + + Pointer tnpoint_to_tgeompoint(Pointer temp); + + Pointer tnpoint_cumulative_length(Pointer temp); + + double tnpoint_length(Pointer temp); + + Pointer tnpoint_positions(Pointer temp, Pointer count); + + long tnpoint_route(Pointer temp); + + Pointer tnpoint_routes(Pointer temp); + + Pointer tnpoint_speed(Pointer temp); + + Pointer tnpoint_trajectory(Pointer temp); + + Pointer tnpoint_twcentroid(Pointer temp); + + Pointer tnpoint_at_geom(Pointer temp, Pointer gs); + + Pointer tnpoint_at_npoint(Pointer temp, Pointer np); + + Pointer tnpoint_at_npointset(Pointer temp, Pointer s); + + Pointer tnpoint_at_stbox(Pointer temp, Pointer box, boolean border_inc); + + Pointer tnpoint_minus_geom(Pointer temp, Pointer gs); + + Pointer tnpoint_minus_npoint(Pointer temp, Pointer np); + + Pointer tnpoint_minus_npointset(Pointer temp, Pointer s); + + Pointer tnpoint_minus_stbox(Pointer temp, Pointer box, boolean border_inc); + + Pointer tdistance_tnpoint_npoint(Pointer temp, Pointer np); + + Pointer tdistance_tnpoint_point(Pointer temp, Pointer gs); + + Pointer tdistance_tnpoint_tnpoint(Pointer temp1, Pointer temp2); + + double nad_tnpoint_geo(Pointer temp, Pointer gs); + + double nad_tnpoint_npoint(Pointer temp, Pointer np); + + double nad_tnpoint_stbox(Pointer temp, Pointer box); + + double nad_tnpoint_tnpoint(Pointer temp1, Pointer temp2); + + Pointer nai_tnpoint_geo(Pointer temp, Pointer gs); + + Pointer nai_tnpoint_npoint(Pointer temp, Pointer np); + + Pointer nai_tnpoint_tnpoint(Pointer temp1, Pointer temp2); + + Pointer shortestline_tnpoint_geo(Pointer temp, Pointer gs); + + Pointer shortestline_tnpoint_npoint(Pointer temp, Pointer np); + + Pointer shortestline_tnpoint_tnpoint(Pointer temp1, Pointer temp2); + + Pointer tnpoint_tcentroid_transfn(Pointer state, Pointer temp); + + int always_eq_npoint_tnpoint(Pointer np, Pointer temp); + + int always_eq_tnpoint_npoint(Pointer temp, Pointer np); + + int always_eq_tnpoint_tnpoint(Pointer temp1, Pointer temp2); + + int always_ne_npoint_tnpoint(Pointer np, Pointer temp); + + int always_ne_tnpoint_npoint(Pointer temp, Pointer np); + + int always_ne_tnpoint_tnpoint(Pointer temp1, Pointer temp2); + + int ever_eq_npoint_tnpoint(Pointer np, Pointer temp); + + int ever_eq_tnpoint_npoint(Pointer temp, Pointer np); + + int ever_eq_tnpoint_tnpoint(Pointer temp1, Pointer temp2); + + int ever_ne_npoint_tnpoint(Pointer np, Pointer temp); + + int ever_ne_tnpoint_npoint(Pointer temp, Pointer np); + + int ever_ne_tnpoint_tnpoint(Pointer temp1, Pointer temp2); + + Pointer teq_tnpoint_npoint(Pointer temp, Pointer np); + + Pointer tne_tnpoint_npoint(Pointer temp, Pointer np); + + String pose_as_ewkt(Pointer pose, int maxdd); + + String pose_as_hexwkb(Pointer pose, byte variant, Pointer size); + + String pose_as_text(Pointer pose, int maxdd); + + Pointer pose_as_wkb(Pointer pose, byte variant, Pointer size_out); + + Pointer pose_from_wkb(Pointer wkb, long size); + + Pointer pose_from_hexwkb(String hexwkb); + + Pointer pose_in(String str); + + String pose_out(Pointer pose, int maxdd); + + Pointer pose_copy(Pointer pose); + + Pointer pose_make_2d(double x, double y, double theta, int srid); + + Pointer pose_make_3d(double x, double y, double z, double W, double X, double Y, double Z, int srid); + + Pointer pose_make_point2d(Pointer gs, double theta); + + Pointer pose_make_point3d(Pointer gs, double W, double X, double Y, double Z); + + Pointer pose_to_point(Pointer pose); + + Pointer pose_to_stbox(Pointer pose); + + int pose_hash(Pointer pose); + + long pose_hash_extended(Pointer pose, long seed); + + Pointer pose_orientation(Pointer pose); + + double pose_rotation(Pointer pose); + + Pointer pose_round(Pointer pose, int maxdd); + + Pointer posearr_round(Pointer posearr, int count, int maxdd); + + void pose_set_srid(Pointer pose, int srid); + + int pose_srid(Pointer pose); + + Pointer pose_transform(Pointer pose, int srid); + + Pointer pose_transform_pipeline(Pointer pose, String pipelinestr, int srid, boolean is_forward); + + Pointer pose_tstzspan_to_stbox(Pointer pose, Pointer s); + + Pointer pose_timestamptz_to_stbox(Pointer pose, long t); + + double distance_pose_geo(Pointer pose, Pointer gs); + + double distance_pose_pose(Pointer pose1, Pointer pose2); + + double distance_pose_stbox(Pointer pose, Pointer box); + + int pose_cmp(Pointer pose1, Pointer pose2); + + boolean pose_eq(Pointer pose1, Pointer pose2); + + boolean pose_ge(Pointer pose1, Pointer pose2); + + boolean pose_gt(Pointer pose1, Pointer pose2); + + boolean pose_le(Pointer pose1, Pointer pose2); + + boolean pose_lt(Pointer pose1, Pointer pose2); + + boolean pose_ne(Pointer pose1, Pointer pose2); + + boolean pose_nsame(Pointer pose1, Pointer pose2); + + boolean pose_same(Pointer pose1, Pointer pose2); + + Pointer poseset_in(String str); + + String poseset_out(Pointer s, int maxdd); + + Pointer poseset_make(Pointer values, int count); + + Pointer pose_to_set(Pointer pose); + + Pointer poseset_end_value(Pointer s); + + Pointer poseset_start_value(Pointer s); + + boolean poseset_value_n(Pointer s, int n, Pointer result); + + Pointer poseset_values(Pointer s); + + boolean contained_pose_set(Pointer pose, Pointer s); + + boolean contains_set_pose(Pointer s, Pointer pose); + + Pointer intersection_pose_set(Pointer pose, Pointer s); + + Pointer intersection_set_pose(Pointer s, Pointer pose); + + Pointer minus_pose_set(Pointer pose, Pointer s); + + Pointer minus_set_pose(Pointer s, Pointer pose); + + Pointer pose_union_transfn(Pointer state, Pointer pose); + + Pointer union_pose_set(Pointer pose, Pointer s); + + Pointer union_set_pose(Pointer s, Pointer pose); + + Pointer tpose_in(String str); + + Pointer tpose_make(Pointer tpoint, Pointer tradius); + + Pointer tpose_to_tpoint(Pointer temp); + + Pointer tpose_end_value(Pointer temp); + + Pointer tpose_points(Pointer temp); + + Pointer tpose_orientation(Pointer temp); + + Pointer tpose_rotation(Pointer temp); + + Pointer tpose_start_value(Pointer temp); + + Pointer tpose_trajectory(Pointer temp); + + boolean tpose_value_at_timestamptz(Pointer temp, long t, boolean strict, Pointer value); + + boolean tpose_value_n(Pointer temp, int n, Pointer result); + + Pointer tpose_values(Pointer temp, Pointer count); + + Pointer tpose_at_geom(Pointer temp, Pointer gs); + + Pointer tpose_at_stbox(Pointer temp, Pointer box, boolean border_inc); + + Pointer tpose_at_pose(Pointer temp, Pointer pose); + + Pointer tpose_minus_geom(Pointer temp, Pointer gs); + + Pointer tpose_minus_pose(Pointer temp, Pointer pose); + + Pointer tpose_minus_stbox(Pointer temp, Pointer box, boolean border_inc); + + Pointer tdistance_tpose_pose(Pointer temp, Pointer pose); + + Pointer tdistance_tpose_point(Pointer temp, Pointer gs); + + Pointer tdistance_tpose_tpose(Pointer temp1, Pointer temp2); + + double nad_tpose_geo(Pointer temp, Pointer gs); + + double nad_tpose_pose(Pointer temp, Pointer pose); + + double nad_tpose_stbox(Pointer temp, Pointer box); + + double nad_tpose_tpose(Pointer temp1, Pointer temp2); + + Pointer nai_tpose_geo(Pointer temp, Pointer gs); + + Pointer nai_tpose_pose(Pointer temp, Pointer pose); + + Pointer nai_tpose_tpose(Pointer temp1, Pointer temp2); + + Pointer shortestline_tpose_geo(Pointer temp, Pointer gs); + + Pointer shortestline_tpose_pose(Pointer temp, Pointer pose); + + Pointer shortestline_tpose_tpose(Pointer temp1, Pointer temp2); + + int always_eq_pose_tpose(Pointer pose, Pointer temp); + + int always_eq_tpose_pose(Pointer temp, Pointer pose); + + int always_eq_tpose_tpose(Pointer temp1, Pointer temp2); + + int always_ne_pose_tpose(Pointer pose, Pointer temp); + + int always_ne_tpose_pose(Pointer temp, Pointer pose); + + int always_ne_tpose_tpose(Pointer temp1, Pointer temp2); + + int ever_eq_pose_tpose(Pointer pose, Pointer temp); + + int ever_eq_tpose_pose(Pointer temp, Pointer pose); + + int ever_eq_tpose_tpose(Pointer temp1, Pointer temp2); + + int ever_ne_pose_tpose(Pointer pose, Pointer temp); + + int ever_ne_tpose_pose(Pointer temp, Pointer pose); + + int ever_ne_tpose_tpose(Pointer temp1, Pointer temp2); + + Pointer teq_pose_tpose(Pointer pose, Pointer temp); + + Pointer teq_tpose_pose(Pointer temp, Pointer pose); + + Pointer tne_pose_tpose(Pointer pose, Pointer temp); + + Pointer tne_tpose_pose(Pointer temp, Pointer pose); + + String trgeo_out(Pointer temp); + + Pointer trgeoinst_make(Pointer geom, Pointer pose, long t); + + Pointer geo_tpose_to_trgeo(Pointer gs, Pointer temp); + + Pointer trgeo_to_tpose(Pointer temp); + + Pointer trgeo_to_tpoint(Pointer temp); + + Pointer trgeo_end_instant(Pointer temp); + + Pointer trgeo_end_sequence(Pointer temp); + + Pointer trgeo_end_value(Pointer temp); + + Pointer trgeo_geom(Pointer temp); + + Pointer trgeo_instant_n(Pointer temp, int n); + + Pointer trgeo_instants(Pointer temp, Pointer count); + + Pointer trgeo_points(Pointer temp); + + Pointer trgeo_rotation(Pointer temp); + + Pointer trgeo_segments(Pointer temp, Pointer count); + + Pointer trgeo_sequence_n(Pointer temp, int i); + + Pointer trgeo_sequences(Pointer temp, Pointer count); + + Pointer trgeo_start_instant(Pointer temp); + + Pointer trgeo_start_sequence(Pointer temp); + + Pointer trgeo_start_value(Pointer temp); + + boolean trgeo_value_n(Pointer temp, int n, Pointer result); + + Pointer trgeo_traversed_area(Pointer temp, boolean unary_union); + + Pointer trgeo_append_tinstant(Pointer temp, Pointer inst, int interp, double maxdist, Pointer maxt, boolean expand); + + Pointer trgeo_append_tsequence(Pointer temp, Pointer seq, boolean expand); + + Pointer trgeo_delete_timestamptz(Pointer temp, long t, boolean connect); + + Pointer trgeo_delete_tstzset(Pointer temp, Pointer s, boolean connect); + + Pointer trgeo_delete_tstzspan(Pointer temp, Pointer s, boolean connect); + + Pointer trgeo_delete_tstzspanset(Pointer temp, Pointer ss, boolean connect); + + Pointer trgeo_round(Pointer temp, int maxdd); + + Pointer trgeo_set_interp(Pointer temp, int interp); + + Pointer trgeo_to_tinstant(Pointer temp); + + Pointer trgeo_after_timestamptz(Pointer temp, long t, boolean strict); + + Pointer trgeo_before_timestamptz(Pointer temp, long t, boolean strict); + + Pointer trgeo_restrict_value(Pointer temp, long value, boolean atfunc); + + Pointer trgeo_restrict_values(Pointer temp, Pointer s, boolean atfunc); + + Pointer trgeo_restrict_timestamptz(Pointer temp, long t, boolean atfunc); + + Pointer trgeo_restrict_tstzset(Pointer temp, Pointer s, boolean atfunc); + + Pointer trgeo_restrict_tstzspan(Pointer temp, Pointer s, boolean atfunc); + + Pointer trgeo_restrict_tstzspanset(Pointer temp, Pointer ss, boolean atfunc); + + Pointer trgeo_at_geom(Pointer temp, Pointer gs); + + Pointer trgeo_at_geo(Pointer temp, Pointer gs); + + Pointer trgeo_at_stbox(Pointer temp, Pointer box, boolean border_inc); + + Pointer trgeo_at_elevation(Pointer temp, Pointer s); + + Pointer trgeo_minus_geom(Pointer temp, Pointer gs); + + Pointer trgeo_minus_geo(Pointer temp, Pointer gs); + + Pointer trgeo_minus_stbox(Pointer temp, Pointer box, boolean border_inc); + + Pointer trgeo_minus_elevation(Pointer temp, Pointer s); + + Pointer tdistance_trgeo_geo(Pointer temp, Pointer gs); + + Pointer tdistance_trgeo_tpoint(Pointer temp1, Pointer temp2); + + Pointer tdistance_trgeo_trgeo(Pointer temp1, Pointer temp2); + + double nad_stbox_trgeo(Pointer box, Pointer temp); + + double nad_trgeo_geo(Pointer temp, Pointer gs); + + double nad_trgeo_stbox(Pointer temp, Pointer box); + + double nad_trgeo_tpoint(Pointer temp1, Pointer temp2); + + double nad_trgeo_trgeo(Pointer temp1, Pointer temp2); + + Pointer nai_trgeo_geo(Pointer temp, Pointer gs); + + Pointer nai_trgeo_tpoint(Pointer temp1, Pointer temp2); + + Pointer nai_trgeo_trgeo(Pointer temp1, Pointer temp2); + + Pointer shortestline_trgeo_geo(Pointer temp, Pointer gs); + + Pointer shortestline_trgeo_tpoint(Pointer temp1, Pointer temp2); + + Pointer shortestline_trgeo_trgeo(Pointer temp1, Pointer temp2); + + int always_eq_geo_trgeo(Pointer gs, Pointer temp); + + int always_eq_trgeo_geo(Pointer temp, Pointer gs); + + int always_eq_trgeo_trgeo(Pointer temp1, Pointer temp2); + + int always_ne_geo_trgeo(Pointer gs, Pointer temp); + + int always_ne_trgeo_geo(Pointer temp, Pointer gs); + + int always_ne_trgeo_trgeo(Pointer temp1, Pointer temp2); + + int ever_eq_geo_trgeo(Pointer gs, Pointer temp); + + int ever_eq_trgeo_geo(Pointer temp, Pointer gs); + + int ever_eq_trgeo_trgeo(Pointer temp1, Pointer temp2); + + int ever_ne_geo_trgeo(Pointer gs, Pointer temp); + + int ever_ne_trgeo_geo(Pointer temp, Pointer gs); + + int ever_ne_trgeo_trgeo(Pointer temp1, Pointer temp2); + + Pointer teq_geo_trgeo(Pointer gs, Pointer temp); + + Pointer teq_trgeo_geo(Pointer temp, Pointer gs); + + Pointer tne_geo_trgeo(Pointer gs, Pointer temp); + + Pointer tne_trgeo_geo(Pointer temp, Pointer gs); + + } + + @SuppressWarnings("unused") + public static int date_in(String str) { + return MeosLibrary.meos.date_in(str); + } + + @SuppressWarnings("unused") + public static String date_out(int d) { + return MeosLibrary.meos.date_out(d); + } + + @SuppressWarnings("unused") + public static int interval_cmp(Pointer interv1, Pointer interv2) { + return MeosLibrary.meos.interval_cmp(interv1, interv2); + } + + @SuppressWarnings("unused") + public static Pointer interval_in(String str, int typmod) { + return MeosLibrary.meos.interval_in(str, typmod); + } + + @SuppressWarnings("unused") + public static String interval_out(Pointer interv) { + return MeosLibrary.meos.interval_out(interv); + } + + @SuppressWarnings("unused") + public static long time_in(String str, int typmod) { + return MeosLibrary.meos.time_in(str, typmod); + } + + @SuppressWarnings("unused") + public static String time_out(long t) { + return MeosLibrary.meos.time_out(t); + } + + @SuppressWarnings("unused") + public static LocalDateTime timestamp_in(String str, int typmod) { + var result = MeosLibrary.meos.timestamp_in(str, typmod); + return LocalDateTime.ofEpochSecond(result, 0, ZoneOffset.UTC); + } + + @SuppressWarnings("unused") + public static String timestamp_out(LocalDateTime t) { + var t_new = t.toEpochSecond(ZoneOffset.UTC); + return MeosLibrary.meos.timestamp_out(t_new); + } + + @SuppressWarnings("unused") + public static OffsetDateTime timestamptz_in(String str, int typmod) { + var result = MeosLibrary.meos.timestamptz_in(str, typmod); + Instant instant = Instant.ofEpochSecond(result); + return OffsetDateTime.ofInstant(instant, ZoneOffset.UTC); + } + + @SuppressWarnings("unused") + public static String timestamptz_out(OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.timestamptz_out(t_new); + } + + @SuppressWarnings("unused") + public static Pointer meos_array_create(int elem_size) { + return MeosLibrary.meos.meos_array_create(elem_size); + } + + @SuppressWarnings("unused") + public static void meos_array_add(Pointer array, Pointer value) { + MeosLibrary.meos.meos_array_add(array, value); + } + + @SuppressWarnings("unused") + public static Pointer meos_array_get(Pointer array, int n) { + return MeosLibrary.meos.meos_array_get(array, n); + } + + @SuppressWarnings("unused") + public static int meos_array_count(Pointer array) { + return MeosLibrary.meos.meos_array_count(array); + } + + @SuppressWarnings("unused") + public static void meos_array_reset(Pointer array) { + MeosLibrary.meos.meos_array_reset(array); + } + + @SuppressWarnings("unused") + public static void meos_array_reset_free(Pointer array) { + MeosLibrary.meos.meos_array_reset_free(array); + } + + @SuppressWarnings("unused") + public static void meos_array_destroy(Pointer array) { + MeosLibrary.meos.meos_array_destroy(array); + } + + @SuppressWarnings("unused") + public static void meos_array_destroy_free(Pointer array) { + MeosLibrary.meos.meos_array_destroy_free(array); + } + + @SuppressWarnings("unused") + public static Pointer rtree_create_intspan() { + return MeosLibrary.meos.rtree_create_intspan(); + } + + @SuppressWarnings("unused") + public static Pointer rtree_create_bigintspan() { + return MeosLibrary.meos.rtree_create_bigintspan(); + } + + @SuppressWarnings("unused") + public static Pointer rtree_create_floatspan() { + return MeosLibrary.meos.rtree_create_floatspan(); + } + + @SuppressWarnings("unused") + public static Pointer rtree_create_datespan() { + return MeosLibrary.meos.rtree_create_datespan(); + } + + @SuppressWarnings("unused") + public static Pointer rtree_create_tstzspan() { + return MeosLibrary.meos.rtree_create_tstzspan(); + } + + @SuppressWarnings("unused") + public static Pointer rtree_create_tbox() { + return MeosLibrary.meos.rtree_create_tbox(); + } + + @SuppressWarnings("unused") + public static Pointer rtree_create_stbox() { + return MeosLibrary.meos.rtree_create_stbox(); + } + + @SuppressWarnings("unused") + public static void rtree_free(Pointer rtree) { + MeosLibrary.meos.rtree_free(rtree); + } + + @SuppressWarnings("unused") + public static void rtree_insert(Pointer rtree, Pointer box, int id) { + MeosLibrary.meos.rtree_insert(rtree, box, id); + } + + @SuppressWarnings("unused") + public static void rtree_insert_temporal(Pointer rtree, Pointer temp, int id) { + MeosLibrary.meos.rtree_insert_temporal(rtree, temp, id); + } + + @SuppressWarnings("unused") + public static int rtree_search(Pointer rtree, int op, Pointer query, Pointer result) { + return MeosLibrary.meos.rtree_search(rtree, op, query, result); + } + + @SuppressWarnings("unused") + public static int rtree_search_temporal(Pointer rtree, int op, Pointer temp, Pointer result) { + return MeosLibrary.meos.rtree_search_temporal(rtree, op, temp, result); + } + + @SuppressWarnings("unused") + public static void meos_error(int errlevel, int errcode, String format, Pointer args) { + MeosLibrary.meos.meos_error(errlevel, errcode, format, args); + } + + @SuppressWarnings("unused") + public static int meos_errno() { + return MeosLibrary.meos.meos_errno(); + } + + @SuppressWarnings("unused") + public static int meos_errno_set(int err) { + return MeosLibrary.meos.meos_errno_set(err); + } + + @SuppressWarnings("unused") + public static int meos_errno_restore(int err) { + return MeosLibrary.meos.meos_errno_restore(err); + } + + @SuppressWarnings("unused") + public static int meos_errno_reset() { + return MeosLibrary.meos.meos_errno_reset(); + } + + @SuppressWarnings("unused") + public static void meos_initialize_timezone(String name) { + MeosLibrary.meos.meos_initialize_timezone(name); + } + + @SuppressWarnings("unused") + public static void meos_initialize_error_handler(Pointer err_handler) { + MeosLibrary.meos.meos_initialize_error_handler(err_handler); + } + + @SuppressWarnings("unused") + public static void meos_finalize_timezone() { + MeosLibrary.meos.meos_finalize_timezone(); + } + + @SuppressWarnings("unused") + public static void meos_finalize_projsrs() { + MeosLibrary.meos.meos_finalize_projsrs(); + } + + @SuppressWarnings("unused") + public static void meos_finalize_ways() { + MeosLibrary.meos.meos_finalize_ways(); + } + + @SuppressWarnings("unused") + public static boolean meos_set_datestyle(String newval, Pointer extra) { + return MeosLibrary.meos.meos_set_datestyle(newval, extra); + } + + @SuppressWarnings("unused") + public static boolean meos_set_intervalstyle(String newval, int extra) { + return MeosLibrary.meos.meos_set_intervalstyle(newval, extra); + } + + @SuppressWarnings("unused") + public static String meos_get_datestyle() { + return MeosLibrary.meos.meos_get_datestyle(); + } + + @SuppressWarnings("unused") + public static String meos_get_intervalstyle() { + return MeosLibrary.meos.meos_get_intervalstyle(); + } + + @SuppressWarnings("unused") + public static void meos_set_spatial_ref_sys_csv(String path) { + MeosLibrary.meos.meos_set_spatial_ref_sys_csv(path); + } + + @SuppressWarnings("unused") + public static void meos_initialize() { + MeosLibrary.meos.meos_initialize(); + } + + @SuppressWarnings("unused") + public static void meos_finalize() { + MeosLibrary.meos.meos_finalize(); + } + + @SuppressWarnings("unused") + public static int add_date_int(int d, int days) { + return MeosLibrary.meos.add_date_int(d, days); + } + + @SuppressWarnings("unused") + public static Pointer add_interval_interval(Pointer interv1, Pointer interv2) { + return MeosLibrary.meos.add_interval_interval(interv1, interv2); + } + + @SuppressWarnings("unused") + public static OffsetDateTime add_timestamptz_interval(OffsetDateTime t, Pointer interv) { + var t_new = t.toEpochSecond(); + var result = MeosLibrary.meos.add_timestamptz_interval(t_new, interv); + Instant instant = Instant.ofEpochSecond(result); + return OffsetDateTime.ofInstant(instant, ZoneOffset.UTC); + } + + @SuppressWarnings("unused") + public static boolean bool_in(String str) { + return MeosLibrary.meos.bool_in(str); + } + + @SuppressWarnings("unused") + public static String bool_out(boolean b) { + return MeosLibrary.meos.bool_out(b); + } + + @SuppressWarnings("unused") + public static Pointer cstring2text(String str) { + return MeosLibrary.meos.cstring2text(str); + } + + @SuppressWarnings("unused") + public static LocalDateTime date_to_timestamp(int dateVal) { + var result = MeosLibrary.meos.date_to_timestamp(dateVal); + return LocalDateTime.ofEpochSecond(result, 0, ZoneOffset.UTC); + } + + @SuppressWarnings("unused") + public static OffsetDateTime date_to_timestamptz(int d) { + var result = MeosLibrary.meos.date_to_timestamptz(d); + Instant instant = Instant.ofEpochSecond(result); + return OffsetDateTime.ofInstant(instant, ZoneOffset.UTC); + } + + @SuppressWarnings("unused") + public static double float_exp(double d) { + return MeosLibrary.meos.float_exp(d); + } + + @SuppressWarnings("unused") + public static double float_ln(double d) { + return MeosLibrary.meos.float_ln(d); + } + + @SuppressWarnings("unused") + public static double float_log10(double d) { + return MeosLibrary.meos.float_log10(d); + } + + @SuppressWarnings("unused") + public static String float8_out(double d, int maxdd) { + return MeosLibrary.meos.float8_out(d, maxdd); + } + + @SuppressWarnings("unused") + public static double float_round(double d, int maxdd) { + return MeosLibrary.meos.float_round(d, maxdd); + } + + @SuppressWarnings("unused") + public static int int32_cmp(int l, int r) { + return MeosLibrary.meos.int32_cmp(l, r); + } + + @SuppressWarnings("unused") + public static int int64_cmp(long l, long r) { + return MeosLibrary.meos.int64_cmp(l, r); + } + + @SuppressWarnings("unused") + public static Pointer interval_make(int years, int months, int weeks, int days, int hours, int mins, double secs) { + return MeosLibrary.meos.interval_make(years, months, weeks, days, hours, mins, secs); + } + + @SuppressWarnings("unused") + public static int minus_date_date(int d1, int d2) { + return MeosLibrary.meos.minus_date_date(d1, d2); + } + + @SuppressWarnings("unused") + public static int minus_date_int(int d, int days) { + return MeosLibrary.meos.minus_date_int(d, days); + } + + @SuppressWarnings("unused") + public static OffsetDateTime minus_timestamptz_interval(OffsetDateTime t, Pointer interv) { + var t_new = t.toEpochSecond(); + var result = MeosLibrary.meos.minus_timestamptz_interval(t_new, interv); + Instant instant = Instant.ofEpochSecond(result); + return OffsetDateTime.ofInstant(instant, ZoneOffset.UTC); + } + + @SuppressWarnings("unused") + public static Pointer minus_timestamptz_timestamptz(OffsetDateTime t1, OffsetDateTime t2) { + var t1_new = t1.toEpochSecond(); + var t2_new = t2.toEpochSecond(); + return MeosLibrary.meos.minus_timestamptz_timestamptz(t1_new, t2_new); + } + + @SuppressWarnings("unused") + public static Pointer mul_interval_double(Pointer interv, double factor) { + return MeosLibrary.meos.mul_interval_double(interv, factor); + } + + @SuppressWarnings("unused") + public static int pg_date_in(String str) { + return MeosLibrary.meos.pg_date_in(str); + } + + @SuppressWarnings("unused") + public static String pg_date_out(int d) { + return MeosLibrary.meos.pg_date_out(d); + } + + @SuppressWarnings("unused") + public static int pg_interval_cmp(Pointer interv1, Pointer interv2) { + return MeosLibrary.meos.pg_interval_cmp(interv1, interv2); + } + + @SuppressWarnings("unused") + public static Pointer pg_interval_in(String str, int typmod) { + return MeosLibrary.meos.pg_interval_in(str, typmod); + } + + @SuppressWarnings("unused") + public static String pg_interval_out(Pointer interv) { + return MeosLibrary.meos.pg_interval_out(interv); + } + + @SuppressWarnings("unused") + public static LocalDateTime pg_timestamp_in(String str, int typmod) { + var result = MeosLibrary.meos.pg_timestamp_in(str, typmod); + return LocalDateTime.ofEpochSecond(result, 0, ZoneOffset.UTC); + } + + @SuppressWarnings("unused") + public static String pg_timestamp_out(LocalDateTime t) { + var t_new = t.toEpochSecond(ZoneOffset.UTC); + return MeosLibrary.meos.pg_timestamp_out(t_new); + } + + @SuppressWarnings("unused") + public static OffsetDateTime pg_timestamptz_in(String str, int typmod) { + var result = MeosLibrary.meos.pg_timestamptz_in(str, typmod); + Instant instant = Instant.ofEpochSecond(result); + return OffsetDateTime.ofInstant(instant, ZoneOffset.UTC); + } + + @SuppressWarnings("unused") + public static String pg_timestamptz_out(OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.pg_timestamptz_out(t_new); + } + + @SuppressWarnings("unused") + public static String text2cstring(Pointer txt) { + return MeosLibrary.meos.text2cstring(txt); + } + + @SuppressWarnings("unused") + public static int text_cmp(Pointer txt1, Pointer txt2) { + return MeosLibrary.meos.text_cmp(txt1, txt2); + } + + @SuppressWarnings("unused") + public static Pointer text_copy(Pointer txt) { + return MeosLibrary.meos.text_copy(txt); + } + + @SuppressWarnings("unused") + public static Pointer text_in(String str) { + return MeosLibrary.meos.text_in(str); + } + + @SuppressWarnings("unused") + public static Pointer text_initcap(Pointer txt) { + return MeosLibrary.meos.text_initcap(txt); + } + + @SuppressWarnings("unused") + public static Pointer text_lower(Pointer txt) { + return MeosLibrary.meos.text_lower(txt); + } + + @SuppressWarnings("unused") + public static String text_out(Pointer txt) { + return MeosLibrary.meos.text_out(txt); + } + + @SuppressWarnings("unused") + public static Pointer text_upper(Pointer txt) { + return MeosLibrary.meos.text_upper(txt); + } + + @SuppressWarnings("unused") + public static Pointer textcat_text_text(Pointer txt1, Pointer txt2) { + return MeosLibrary.meos.textcat_text_text(txt1, txt2); + } + + @SuppressWarnings("unused") + public static OffsetDateTime timestamptz_shift(OffsetDateTime t, Pointer interv) { + var t_new = t.toEpochSecond(); + var result = MeosLibrary.meos.timestamptz_shift(t_new, interv); + Instant instant = Instant.ofEpochSecond(result); + return OffsetDateTime.ofInstant(instant, ZoneOffset.UTC); + } + + @SuppressWarnings("unused") + public static int timestamp_to_date(LocalDateTime t) { + var t_new = t.toEpochSecond(ZoneOffset.UTC); + return MeosLibrary.meos.timestamp_to_date(t_new); + } + + @SuppressWarnings("unused") + public static int timestamptz_to_date(OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.timestamptz_to_date(t_new); + } + + @SuppressWarnings("unused") + public static Pointer bigintset_in(String str) { + return MeosLibrary.meos.bigintset_in(str); + } + + @SuppressWarnings("unused") + public static String bigintset_out(Pointer set) { + return MeosLibrary.meos.bigintset_out(set); + } + + @SuppressWarnings("unused") + public static Pointer bigintspan_expand(Pointer s, long value) { + return MeosLibrary.meos.bigintspan_expand(s, value); + } + + @SuppressWarnings("unused") + public static Pointer bigintspan_in(String str) { + return MeosLibrary.meos.bigintspan_in(str); + } + + @SuppressWarnings("unused") + public static String bigintspan_out(Pointer s) { + return MeosLibrary.meos.bigintspan_out(s); + } + + @SuppressWarnings("unused") + public static Pointer bigintspanset_in(String str) { + return MeosLibrary.meos.bigintspanset_in(str); + } + + @SuppressWarnings("unused") + public static String bigintspanset_out(Pointer ss) { + return MeosLibrary.meos.bigintspanset_out(ss); + } + + @SuppressWarnings("unused") + public static Pointer dateset_in(String str) { + return MeosLibrary.meos.dateset_in(str); + } + + @SuppressWarnings("unused") + public static String dateset_out(Pointer s) { + return MeosLibrary.meos.dateset_out(s); + } + + @SuppressWarnings("unused") + public static Pointer datespan_in(String str) { + return MeosLibrary.meos.datespan_in(str); + } + + @SuppressWarnings("unused") + public static String datespan_out(Pointer s) { + return MeosLibrary.meos.datespan_out(s); + } + + @SuppressWarnings("unused") + public static Pointer datespanset_in(String str) { + return MeosLibrary.meos.datespanset_in(str); + } + + @SuppressWarnings("unused") + public static String datespanset_out(Pointer ss) { + return MeosLibrary.meos.datespanset_out(ss); + } + + @SuppressWarnings("unused") + public static Pointer floatset_in(String str) { + return MeosLibrary.meos.floatset_in(str); + } + + @SuppressWarnings("unused") + public static String floatset_out(Pointer set, int maxdd) { + return MeosLibrary.meos.floatset_out(set, maxdd); + } + + @SuppressWarnings("unused") + public static Pointer floatspan_expand(Pointer s, double value) { + return MeosLibrary.meos.floatspan_expand(s, value); + } + + @SuppressWarnings("unused") + public static Pointer floatspan_in(String str) { + return MeosLibrary.meos.floatspan_in(str); + } + + @SuppressWarnings("unused") + public static String floatspan_out(Pointer s, int maxdd) { + return MeosLibrary.meos.floatspan_out(s, maxdd); + } + + @SuppressWarnings("unused") + public static Pointer floatspanset_in(String str) { + return MeosLibrary.meos.floatspanset_in(str); + } + + @SuppressWarnings("unused") + public static String floatspanset_out(Pointer ss, int maxdd) { + return MeosLibrary.meos.floatspanset_out(ss, maxdd); + } + + @SuppressWarnings("unused") + public static Pointer intset_in(String str) { + return MeosLibrary.meos.intset_in(str); + } + + @SuppressWarnings("unused") + public static String intset_out(Pointer set) { + return MeosLibrary.meos.intset_out(set); + } + + @SuppressWarnings("unused") + public static Pointer intspan_expand(Pointer s, int value) { + return MeosLibrary.meos.intspan_expand(s, value); + } + + @SuppressWarnings("unused") + public static Pointer intspan_in(String str) { + return MeosLibrary.meos.intspan_in(str); + } + + @SuppressWarnings("unused") + public static String intspan_out(Pointer s) { + return MeosLibrary.meos.intspan_out(s); + } + + @SuppressWarnings("unused") + public static Pointer intspanset_in(String str) { + return MeosLibrary.meos.intspanset_in(str); + } + + @SuppressWarnings("unused") + public static String intspanset_out(Pointer ss) { + return MeosLibrary.meos.intspanset_out(ss); + } + + @SuppressWarnings("unused") + public static String set_as_hexwkb(Pointer s, byte variant) { + Runtime runtime = Runtime.getSystemRuntime(); + Pointer size_out = Memory.allocateDirect(runtime, Long.BYTES); + return MeosLibrary.meos.set_as_hexwkb(s, variant, size_out); + } + + @SuppressWarnings("unused") + public static Pointer set_as_wkb(Pointer s, byte variant) { + Runtime runtime = Runtime.getSystemRuntime(); + Pointer size_out = Memory.allocateDirect(runtime, Long.BYTES); + return MeosLibrary.meos.set_as_wkb(s, variant, size_out); + } + + @SuppressWarnings("unused") + public static Pointer set_from_hexwkb(String hexwkb) { + return MeosLibrary.meos.set_from_hexwkb(hexwkb); + } + + @SuppressWarnings("unused") + public static Pointer set_from_wkb(Pointer wkb, long size) { + return MeosLibrary.meos.set_from_wkb(wkb, size); + } + + @SuppressWarnings("unused") + public static String span_as_hexwkb(Pointer s, byte variant) { + Runtime runtime = Runtime.getSystemRuntime(); + Pointer size_out = Memory.allocateDirect(runtime, Long.BYTES); + return MeosLibrary.meos.span_as_hexwkb(s, variant, size_out); + } + + @SuppressWarnings("unused") + public static Pointer span_as_wkb(Pointer s, byte variant) { + Runtime runtime = Runtime.getSystemRuntime(); + Pointer size_out = Memory.allocateDirect(runtime, Long.BYTES); + return MeosLibrary.meos.span_as_wkb(s, variant, size_out); + } + + @SuppressWarnings("unused") + public static Pointer span_from_hexwkb(String hexwkb) { + return MeosLibrary.meos.span_from_hexwkb(hexwkb); + } + + @SuppressWarnings("unused") + public static Pointer span_from_wkb(Pointer wkb, long size) { + return MeosLibrary.meos.span_from_wkb(wkb, size); + } + + @SuppressWarnings("unused") + public static String spanset_as_hexwkb(Pointer ss, byte variant) { + Runtime runtime = Runtime.getSystemRuntime(); + Pointer size_out = Memory.allocateDirect(runtime, Long.BYTES); + return MeosLibrary.meos.spanset_as_hexwkb(ss, variant, size_out); + } + + @SuppressWarnings("unused") + public static Pointer spanset_as_wkb(Pointer ss, byte variant) { + Runtime runtime = Runtime.getSystemRuntime(); + Pointer size_out = Memory.allocateDirect(runtime, Long.BYTES); + return MeosLibrary.meos.spanset_as_wkb(ss, variant, size_out); + } + + @SuppressWarnings("unused") + public static Pointer spanset_from_hexwkb(String hexwkb) { + return MeosLibrary.meos.spanset_from_hexwkb(hexwkb); + } + + @SuppressWarnings("unused") + public static Pointer spanset_from_wkb(Pointer wkb, long size) { + return MeosLibrary.meos.spanset_from_wkb(wkb, size); + } + + @SuppressWarnings("unused") + public static Pointer textset_in(String str) { + return MeosLibrary.meos.textset_in(str); + } + + @SuppressWarnings("unused") + public static String textset_out(Pointer set) { + return MeosLibrary.meos.textset_out(set); + } + + @SuppressWarnings("unused") + public static Pointer tstzset_in(String str) { + return MeosLibrary.meos.tstzset_in(str); + } + + @SuppressWarnings("unused") + public static String tstzset_out(Pointer set) { + return MeosLibrary.meos.tstzset_out(set); + } + + @SuppressWarnings("unused") + public static Pointer tstzspan_in(String str) { + return MeosLibrary.meos.tstzspan_in(str); + } + + @SuppressWarnings("unused") + public static String tstzspan_out(Pointer s) { + return MeosLibrary.meos.tstzspan_out(s); + } + + @SuppressWarnings("unused") + public static Pointer tstzspanset_in(String str) { + return MeosLibrary.meos.tstzspanset_in(str); + } + + @SuppressWarnings("unused") + public static String tstzspanset_out(Pointer ss) { + return MeosLibrary.meos.tstzspanset_out(ss); + } + + @SuppressWarnings("unused") + public static Pointer bigintset_make(Pointer values, int count) { + return MeosLibrary.meos.bigintset_make(values, count); + } + + @SuppressWarnings("unused") + public static Pointer bigintspan_make(long lower, long upper, boolean lower_inc, boolean upper_inc) { + return MeosLibrary.meos.bigintspan_make(lower, upper, lower_inc, upper_inc); + } + + @SuppressWarnings("unused") + public static Pointer dateset_make(Pointer values, int count) { + return MeosLibrary.meos.dateset_make(values, count); + } + + @SuppressWarnings("unused") + public static Pointer datespan_make(int lower, int upper, boolean lower_inc, boolean upper_inc) { + return MeosLibrary.meos.datespan_make(lower, upper, lower_inc, upper_inc); + } + + @SuppressWarnings("unused") + public static Pointer floatset_make(Pointer values, int count) { + return MeosLibrary.meos.floatset_make(values, count); + } + + @SuppressWarnings("unused") + public static Pointer floatspan_make(double lower, double upper, boolean lower_inc, boolean upper_inc) { + return MeosLibrary.meos.floatspan_make(lower, upper, lower_inc, upper_inc); + } + + @SuppressWarnings("unused") + public static Pointer intset_make(Pointer values, int count) { + return MeosLibrary.meos.intset_make(values, count); + } + + @SuppressWarnings("unused") + public static Pointer intspan_make(int lower, int upper, boolean lower_inc, boolean upper_inc) { + return MeosLibrary.meos.intspan_make(lower, upper, lower_inc, upper_inc); + } + + @SuppressWarnings("unused") + public static Pointer set_copy(Pointer s) { + return MeosLibrary.meos.set_copy(s); + } + + @SuppressWarnings("unused") + public static Pointer span_copy(Pointer s) { + return MeosLibrary.meos.span_copy(s); + } + + @SuppressWarnings("unused") + public static Pointer spanset_copy(Pointer ss) { + return MeosLibrary.meos.spanset_copy(ss); + } + + @SuppressWarnings("unused") + public static Pointer spanset_make(Pointer spans, int count) { + return MeosLibrary.meos.spanset_make(spans, count); + } + + @SuppressWarnings("unused") + public static Pointer textset_make(Pointer values, int count) { + return MeosLibrary.meos.textset_make(values, count); + } + + @SuppressWarnings("unused") + public static Pointer tstzset_make(Pointer values, int count) { + return MeosLibrary.meos.tstzset_make(values, count); + } + + @SuppressWarnings("unused") + public static Pointer tstzspan_make(OffsetDateTime lower, OffsetDateTime upper, boolean lower_inc, boolean upper_inc) { + var lower_new = lower.toEpochSecond(); + var upper_new = upper.toEpochSecond(); + return MeosLibrary.meos.tstzspan_make(lower_new, upper_new, lower_inc, upper_inc); + } + + @SuppressWarnings("unused") + public static Pointer bigint_to_set(long i) { + return MeosLibrary.meos.bigint_to_set(i); + } + + @SuppressWarnings("unused") + public static Pointer bigint_to_span(int i) { + return MeosLibrary.meos.bigint_to_span(i); + } + + @SuppressWarnings("unused") + public static Pointer bigint_to_spanset(int i) { + return MeosLibrary.meos.bigint_to_spanset(i); + } + + @SuppressWarnings("unused") + public static Pointer date_to_set(int d) { + return MeosLibrary.meos.date_to_set(d); + } + + @SuppressWarnings("unused") + public static Pointer date_to_span(int d) { + return MeosLibrary.meos.date_to_span(d); + } + + @SuppressWarnings("unused") + public static Pointer date_to_spanset(int d) { + return MeosLibrary.meos.date_to_spanset(d); + } + + @SuppressWarnings("unused") + public static Pointer dateset_to_tstzset(Pointer s) { + return MeosLibrary.meos.dateset_to_tstzset(s); + } + + @SuppressWarnings("unused") + public static Pointer datespan_to_tstzspan(Pointer s) { + return MeosLibrary.meos.datespan_to_tstzspan(s); + } + + @SuppressWarnings("unused") + public static Pointer datespanset_to_tstzspanset(Pointer ss) { + return MeosLibrary.meos.datespanset_to_tstzspanset(ss); + } + + @SuppressWarnings("unused") + public static Pointer float_to_set(double d) { + return MeosLibrary.meos.float_to_set(d); + } + + @SuppressWarnings("unused") + public static Pointer float_to_span(double d) { + return MeosLibrary.meos.float_to_span(d); + } + + @SuppressWarnings("unused") + public static Pointer float_to_spanset(double d) { + return MeosLibrary.meos.float_to_spanset(d); + } + + @SuppressWarnings("unused") + public static Pointer floatset_to_intset(Pointer s) { + return MeosLibrary.meos.floatset_to_intset(s); + } + + @SuppressWarnings("unused") + public static Pointer floatspan_to_intspan(Pointer s) { + return MeosLibrary.meos.floatspan_to_intspan(s); + } + + @SuppressWarnings("unused") + public static Pointer floatspanset_to_intspanset(Pointer ss) { + return MeosLibrary.meos.floatspanset_to_intspanset(ss); + } + + @SuppressWarnings("unused") + public static Pointer int_to_set(int i) { + return MeosLibrary.meos.int_to_set(i); + } + + @SuppressWarnings("unused") + public static Pointer int_to_span(int i) { + return MeosLibrary.meos.int_to_span(i); + } + + @SuppressWarnings("unused") + public static Pointer int_to_spanset(int i) { + return MeosLibrary.meos.int_to_spanset(i); + } + + @SuppressWarnings("unused") + public static Pointer intset_to_floatset(Pointer s) { + return MeosLibrary.meos.intset_to_floatset(s); + } + + @SuppressWarnings("unused") + public static Pointer intspan_to_floatspan(Pointer s) { + return MeosLibrary.meos.intspan_to_floatspan(s); + } + + @SuppressWarnings("unused") + public static Pointer intspanset_to_floatspanset(Pointer ss) { + return MeosLibrary.meos.intspanset_to_floatspanset(ss); + } + + @SuppressWarnings("unused") + public static Pointer set_to_span(Pointer s) { + return MeosLibrary.meos.set_to_span(s); + } + + @SuppressWarnings("unused") + public static Pointer set_to_spanset(Pointer s) { + return MeosLibrary.meos.set_to_spanset(s); + } + + @SuppressWarnings("unused") + public static Pointer span_to_spanset(Pointer s) { + return MeosLibrary.meos.span_to_spanset(s); + } + + @SuppressWarnings("unused") + public static Pointer text_to_set(Pointer txt) { + return MeosLibrary.meos.text_to_set(txt); + } + + @SuppressWarnings("unused") + public static Pointer timestamptz_to_set(OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.timestamptz_to_set(t_new); + } + + @SuppressWarnings("unused") + public static Pointer timestamptz_to_span(OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.timestamptz_to_span(t_new); + } + + @SuppressWarnings("unused") + public static Pointer timestamptz_to_spanset(OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.timestamptz_to_spanset(t_new); + } + + @SuppressWarnings("unused") + public static Pointer tstzset_to_dateset(Pointer s) { + return MeosLibrary.meos.tstzset_to_dateset(s); + } + + @SuppressWarnings("unused") + public static Pointer tstzspan_to_datespan(Pointer s) { + return MeosLibrary.meos.tstzspan_to_datespan(s); + } + + @SuppressWarnings("unused") + public static Pointer tstzspanset_to_datespanset(Pointer ss) { + return MeosLibrary.meos.tstzspanset_to_datespanset(ss); + } + + @SuppressWarnings("unused") + public static long bigintset_end_value(Pointer s) { + return MeosLibrary.meos.bigintset_end_value(s); + } + + @SuppressWarnings("unused") + public static long bigintset_start_value(Pointer s) { + return MeosLibrary.meos.bigintset_start_value(s); + } + + @SuppressWarnings("unused") + public static Pointer bigintset_value_n(Pointer s, int n) { + boolean out; + Runtime runtime = Runtime.getSystemRuntime(); + Pointer result = Memory.allocateDirect(runtime, Long.BYTES); + out = MeosLibrary.meos.bigintset_value_n(s, n, result); + Pointer new_result = result.getPointer(0); + return out ? new_result : null ; + } + + @SuppressWarnings("unused") + public static Pointer bigintset_values(Pointer s) { + return MeosLibrary.meos.bigintset_values(s); + } + + @SuppressWarnings("unused") + public static long bigintspan_lower(Pointer s) { + return MeosLibrary.meos.bigintspan_lower(s); + } + + @SuppressWarnings("unused") + public static long bigintspan_upper(Pointer s) { + return MeosLibrary.meos.bigintspan_upper(s); + } + + @SuppressWarnings("unused") + public static long bigintspan_width(Pointer s) { + return MeosLibrary.meos.bigintspan_width(s); + } + + @SuppressWarnings("unused") + public static long bigintspanset_lower(Pointer ss) { + return MeosLibrary.meos.bigintspanset_lower(ss); + } + + @SuppressWarnings("unused") + public static long bigintspanset_upper(Pointer ss) { + return MeosLibrary.meos.bigintspanset_upper(ss); + } + + @SuppressWarnings("unused") + public static long bigintspanset_width(Pointer ss, boolean boundspan) { + return MeosLibrary.meos.bigintspanset_width(ss, boundspan); + } + + @SuppressWarnings("unused") + public static int dateset_end_value(Pointer s) { + return MeosLibrary.meos.dateset_end_value(s); + } + + @SuppressWarnings("unused") + public static int dateset_start_value(Pointer s) { + return MeosLibrary.meos.dateset_start_value(s); + } + + @SuppressWarnings("unused") + public static Pointer dateset_value_n(Pointer s, int n) { + boolean out; + Runtime runtime = Runtime.getSystemRuntime(); + Pointer result = Memory.allocateDirect(runtime, Long.BYTES); + out = MeosLibrary.meos.dateset_value_n(s, n, result); + Pointer new_result = result.getPointer(0); + return out ? new_result : null ; + } + + @SuppressWarnings("unused") + public static Pointer dateset_values(Pointer s) { + return MeosLibrary.meos.dateset_values(s); + } + + @SuppressWarnings("unused") + public static Pointer datespan_duration(Pointer s) { + return MeosLibrary.meos.datespan_duration(s); + } + + @SuppressWarnings("unused") + public static int datespan_lower(Pointer s) { + return MeosLibrary.meos.datespan_lower(s); + } + + @SuppressWarnings("unused") + public static int datespan_upper(Pointer s) { + return MeosLibrary.meos.datespan_upper(s); + } + + @SuppressWarnings("unused") + public static Pointer datespanset_date_n(Pointer ss, int n) { + boolean out; + Runtime runtime = Runtime.getSystemRuntime(); + Pointer result = Memory.allocateDirect(runtime, Long.BYTES); + out = MeosLibrary.meos.datespanset_date_n(ss, n, result); + Pointer new_result = result.getPointer(0); + return out ? new_result : null ; + } + + @SuppressWarnings("unused") + public static Pointer datespanset_dates(Pointer ss) { + return MeosLibrary.meos.datespanset_dates(ss); + } + + @SuppressWarnings("unused") + public static Pointer datespanset_duration(Pointer ss, boolean boundspan) { + return MeosLibrary.meos.datespanset_duration(ss, boundspan); + } + + @SuppressWarnings("unused") + public static int datespanset_end_date(Pointer ss) { + return MeosLibrary.meos.datespanset_end_date(ss); + } + + @SuppressWarnings("unused") + public static int datespanset_num_dates(Pointer ss) { + return MeosLibrary.meos.datespanset_num_dates(ss); + } + + @SuppressWarnings("unused") + public static int datespanset_start_date(Pointer ss) { + return MeosLibrary.meos.datespanset_start_date(ss); + } + + @SuppressWarnings("unused") + public static double floatset_end_value(Pointer s) { + return MeosLibrary.meos.floatset_end_value(s); + } + + @SuppressWarnings("unused") + public static double floatset_start_value(Pointer s) { + return MeosLibrary.meos.floatset_start_value(s); + } + + @SuppressWarnings("unused") + public static Pointer floatset_value_n(Pointer s, int n) { + boolean out; + Runtime runtime = Runtime.getSystemRuntime(); + Pointer result = Memory.allocateDirect(runtime, Long.BYTES); + out = MeosLibrary.meos.floatset_value_n(s, n, result); + Pointer new_result = result.getPointer(0); + return out ? new_result : null ; + } + + @SuppressWarnings("unused") + public static Pointer floatset_values(Pointer s) { + return MeosLibrary.meos.floatset_values(s); + } + + @SuppressWarnings("unused") + public static double floatspan_lower(Pointer s) { + return MeosLibrary.meos.floatspan_lower(s); + } + + @SuppressWarnings("unused") + public static double floatspan_upper(Pointer s) { + return MeosLibrary.meos.floatspan_upper(s); + } + + @SuppressWarnings("unused") + public static double floatspan_width(Pointer s) { + return MeosLibrary.meos.floatspan_width(s); + } + + @SuppressWarnings("unused") + public static double floatspanset_lower(Pointer ss) { + return MeosLibrary.meos.floatspanset_lower(ss); + } + + @SuppressWarnings("unused") + public static double floatspanset_upper(Pointer ss) { + return MeosLibrary.meos.floatspanset_upper(ss); + } + + @SuppressWarnings("unused") + public static double floatspanset_width(Pointer ss, boolean boundspan) { + return MeosLibrary.meos.floatspanset_width(ss, boundspan); + } + + @SuppressWarnings("unused") + public static int intset_end_value(Pointer s) { + return MeosLibrary.meos.intset_end_value(s); + } + + @SuppressWarnings("unused") + public static int intset_start_value(Pointer s) { + return MeosLibrary.meos.intset_start_value(s); + } + + @SuppressWarnings("unused") + public static Pointer intset_value_n(Pointer s, int n) { + boolean out; + Runtime runtime = Runtime.getSystemRuntime(); + Pointer result = Memory.allocateDirect(runtime, Long.BYTES); + out = MeosLibrary.meos.intset_value_n(s, n, result); + Pointer new_result = result.getPointer(0); + return out ? new_result : null ; + } + + @SuppressWarnings("unused") + public static Pointer intset_values(Pointer s) { + return MeosLibrary.meos.intset_values(s); + } + + @SuppressWarnings("unused") + public static int intspan_lower(Pointer s) { + return MeosLibrary.meos.intspan_lower(s); + } + + @SuppressWarnings("unused") + public static int intspan_upper(Pointer s) { + return MeosLibrary.meos.intspan_upper(s); + } + + @SuppressWarnings("unused") + public static int intspan_width(Pointer s) { + return MeosLibrary.meos.intspan_width(s); + } + + @SuppressWarnings("unused") + public static int intspanset_lower(Pointer ss) { + return MeosLibrary.meos.intspanset_lower(ss); + } + + @SuppressWarnings("unused") + public static int intspanset_upper(Pointer ss) { + return MeosLibrary.meos.intspanset_upper(ss); + } + + @SuppressWarnings("unused") + public static int intspanset_width(Pointer ss, boolean boundspan) { + return MeosLibrary.meos.intspanset_width(ss, boundspan); + } + + @SuppressWarnings("unused") + public static int set_hash(Pointer s) { + return MeosLibrary.meos.set_hash(s); + } + + @SuppressWarnings("unused") + public static long set_hash_extended(Pointer s, long seed) { + return MeosLibrary.meos.set_hash_extended(s, seed); + } + + @SuppressWarnings("unused") + public static int set_num_values(Pointer s) { + return MeosLibrary.meos.set_num_values(s); + } + + @SuppressWarnings("unused") + public static int span_hash(Pointer s) { + return MeosLibrary.meos.span_hash(s); + } + + @SuppressWarnings("unused") + public static long span_hash_extended(Pointer s, long seed) { + return MeosLibrary.meos.span_hash_extended(s, seed); + } + + @SuppressWarnings("unused") + public static boolean span_lower_inc(Pointer s) { + return MeosLibrary.meos.span_lower_inc(s); + } + + @SuppressWarnings("unused") + public static boolean span_upper_inc(Pointer s) { + return MeosLibrary.meos.span_upper_inc(s); + } + + @SuppressWarnings("unused") + public static Pointer spanset_end_span(Pointer ss) { + return MeosLibrary.meos.spanset_end_span(ss); + } + + @SuppressWarnings("unused") + public static int spanset_hash(Pointer ss) { + return MeosLibrary.meos.spanset_hash(ss); + } + + @SuppressWarnings("unused") + public static long spanset_hash_extended(Pointer ss, long seed) { + return MeosLibrary.meos.spanset_hash_extended(ss, seed); + } + + @SuppressWarnings("unused") + public static boolean spanset_lower_inc(Pointer ss) { + return MeosLibrary.meos.spanset_lower_inc(ss); + } + + @SuppressWarnings("unused") + public static int spanset_num_spans(Pointer ss) { + return MeosLibrary.meos.spanset_num_spans(ss); + } + + @SuppressWarnings("unused") + public static Pointer spanset_span(Pointer ss) { + return MeosLibrary.meos.spanset_span(ss); + } + + @SuppressWarnings("unused") + public static Pointer spanset_span_n(Pointer ss, int i) { + return MeosLibrary.meos.spanset_span_n(ss, i); + } + + @SuppressWarnings("unused") + public static Pointer spanset_spanarr(Pointer ss) { + return MeosLibrary.meos.spanset_spanarr(ss); + } + + @SuppressWarnings("unused") + public static Pointer spanset_start_span(Pointer ss) { + return MeosLibrary.meos.spanset_start_span(ss); + } + + @SuppressWarnings("unused") + public static boolean spanset_upper_inc(Pointer ss) { + return MeosLibrary.meos.spanset_upper_inc(ss); + } + + @SuppressWarnings("unused") + public static Pointer textset_end_value(Pointer s) { + return MeosLibrary.meos.textset_end_value(s); + } + + @SuppressWarnings("unused") + public static Pointer textset_start_value(Pointer s) { + return MeosLibrary.meos.textset_start_value(s); + } + + @SuppressWarnings("unused") + public static Pointer textset_value_n(Pointer s, int n) { + boolean out; + Runtime runtime = Runtime.getSystemRuntime(); + Pointer result = Memory.allocateDirect(runtime, Long.BYTES); + out = MeosLibrary.meos.textset_value_n(s, n, result); + Pointer new_result = result.getPointer(0); + return out ? new_result : null ; + } + + @SuppressWarnings("unused") + public static Pointer textset_values(Pointer s) { + return MeosLibrary.meos.textset_values(s); + } + + @SuppressWarnings("unused") + public static OffsetDateTime tstzset_end_value(Pointer s) { + var result = MeosLibrary.meos.tstzset_end_value(s); + Instant instant = Instant.ofEpochSecond(result); + return OffsetDateTime.ofInstant(instant, ZoneOffset.UTC); + } + + @SuppressWarnings("unused") + public static OffsetDateTime tstzset_start_value(Pointer s) { + var result = MeosLibrary.meos.tstzset_start_value(s); + Instant instant = Instant.ofEpochSecond(result); + return OffsetDateTime.ofInstant(instant, ZoneOffset.UTC); + } + + @SuppressWarnings("unused") + public static Pointer tstzset_value_n(Pointer s, int n) { + boolean out; + Runtime runtime = Runtime.getSystemRuntime(); + Pointer result = Memory.allocateDirect(runtime, Long.BYTES); + out = MeosLibrary.meos.tstzset_value_n(s, n, result); + Pointer new_result = result.getPointer(0); + return out ? new_result : null ; + } + + @SuppressWarnings("unused") + public static Pointer tstzset_values(Pointer s) { + return MeosLibrary.meos.tstzset_values(s); + } + + @SuppressWarnings("unused") + public static Pointer tstzspan_duration(Pointer s) { + return MeosLibrary.meos.tstzspan_duration(s); + } + + @SuppressWarnings("unused") + public static OffsetDateTime tstzspan_lower(Pointer s) { + var result = MeosLibrary.meos.tstzspan_lower(s); + Instant instant = Instant.ofEpochSecond(result); + return OffsetDateTime.ofInstant(instant, ZoneOffset.UTC); + } + + @SuppressWarnings("unused") + public static OffsetDateTime tstzspan_upper(Pointer s) { + var result = MeosLibrary.meos.tstzspan_upper(s); + Instant instant = Instant.ofEpochSecond(result); + return OffsetDateTime.ofInstant(instant, ZoneOffset.UTC); + } + + @SuppressWarnings("unused") + public static Pointer tstzspanset_duration(Pointer ss, boolean boundspan) { + return MeosLibrary.meos.tstzspanset_duration(ss, boundspan); + } + + @SuppressWarnings("unused") + public static OffsetDateTime tstzspanset_end_timestamptz(Pointer ss) { + var result = MeosLibrary.meos.tstzspanset_end_timestamptz(ss); + Instant instant = Instant.ofEpochSecond(result); + return OffsetDateTime.ofInstant(instant, ZoneOffset.UTC); + } + + @SuppressWarnings("unused") + public static OffsetDateTime tstzspanset_lower(Pointer ss) { + var result = MeosLibrary.meos.tstzspanset_lower(ss); + Instant instant = Instant.ofEpochSecond(result); + return OffsetDateTime.ofInstant(instant, ZoneOffset.UTC); + } + + @SuppressWarnings("unused") + public static int tstzspanset_num_timestamps(Pointer ss) { + return MeosLibrary.meos.tstzspanset_num_timestamps(ss); + } + + @SuppressWarnings("unused") + public static OffsetDateTime tstzspanset_start_timestamptz(Pointer ss) { + var result = MeosLibrary.meos.tstzspanset_start_timestamptz(ss); + Instant instant = Instant.ofEpochSecond(result); + return OffsetDateTime.ofInstant(instant, ZoneOffset.UTC); + } + + @SuppressWarnings("unused") + public static Pointer tstzspanset_timestamps(Pointer ss) { + return MeosLibrary.meos.tstzspanset_timestamps(ss); + } + + @SuppressWarnings("unused") + public static Pointer tstzspanset_timestamptz_n(Pointer ss, int n) { + boolean out; + Runtime runtime = Runtime.getSystemRuntime(); + Pointer result = Memory.allocateDirect(runtime, Long.BYTES); + out = MeosLibrary.meos.tstzspanset_timestamptz_n(ss, n, result); + Pointer new_result = result.getPointer(0); + return out ? new_result : null ; + } + + @SuppressWarnings("unused") + public static OffsetDateTime tstzspanset_upper(Pointer ss) { + var result = MeosLibrary.meos.tstzspanset_upper(ss); + Instant instant = Instant.ofEpochSecond(result); + return OffsetDateTime.ofInstant(instant, ZoneOffset.UTC); + } + + @SuppressWarnings("unused") + public static Pointer bigintset_shift_scale(Pointer s, long shift, long width, boolean hasshift, boolean haswidth) { + return MeosLibrary.meos.bigintset_shift_scale(s, shift, width, hasshift, haswidth); + } + + @SuppressWarnings("unused") + public static Pointer bigintspan_shift_scale(Pointer s, long shift, long width, boolean hasshift, boolean haswidth) { + return MeosLibrary.meos.bigintspan_shift_scale(s, shift, width, hasshift, haswidth); + } + + @SuppressWarnings("unused") + public static Pointer bigintspanset_shift_scale(Pointer ss, long shift, long width, boolean hasshift, boolean haswidth) { + return MeosLibrary.meos.bigintspanset_shift_scale(ss, shift, width, hasshift, haswidth); + } + + @SuppressWarnings("unused") + public static Pointer dateset_shift_scale(Pointer s, int shift, int width, boolean hasshift, boolean haswidth) { + return MeosLibrary.meos.dateset_shift_scale(s, shift, width, hasshift, haswidth); + } + + @SuppressWarnings("unused") + public static Pointer datespan_shift_scale(Pointer s, int shift, int width, boolean hasshift, boolean haswidth) { + return MeosLibrary.meos.datespan_shift_scale(s, shift, width, hasshift, haswidth); + } + + @SuppressWarnings("unused") + public static Pointer datespanset_shift_scale(Pointer ss, int shift, int width, boolean hasshift, boolean haswidth) { + return MeosLibrary.meos.datespanset_shift_scale(ss, shift, width, hasshift, haswidth); + } + + @SuppressWarnings("unused") + public static Pointer floatset_ceil(Pointer s) { + return MeosLibrary.meos.floatset_ceil(s); + } + + @SuppressWarnings("unused") + public static Pointer floatset_degrees(Pointer s, boolean normalize) { + return MeosLibrary.meos.floatset_degrees(s, normalize); + } + + @SuppressWarnings("unused") + public static Pointer floatset_floor(Pointer s) { + return MeosLibrary.meos.floatset_floor(s); + } + + @SuppressWarnings("unused") + public static Pointer floatset_radians(Pointer s) { + return MeosLibrary.meos.floatset_radians(s); + } + + @SuppressWarnings("unused") + public static Pointer floatset_shift_scale(Pointer s, double shift, double width, boolean hasshift, boolean haswidth) { + return MeosLibrary.meos.floatset_shift_scale(s, shift, width, hasshift, haswidth); + } + + @SuppressWarnings("unused") + public static Pointer floatspan_ceil(Pointer s) { + return MeosLibrary.meos.floatspan_ceil(s); + } + + @SuppressWarnings("unused") + public static Pointer floatspan_degrees(Pointer s, boolean normalize) { + return MeosLibrary.meos.floatspan_degrees(s, normalize); + } + + @SuppressWarnings("unused") + public static Pointer floatspan_floor(Pointer s) { + return MeosLibrary.meos.floatspan_floor(s); + } + + @SuppressWarnings("unused") + public static Pointer floatspan_radians(Pointer s) { + return MeosLibrary.meos.floatspan_radians(s); + } + + @SuppressWarnings("unused") + public static Pointer floatspan_round(Pointer s, int maxdd) { + return MeosLibrary.meos.floatspan_round(s, maxdd); + } + + @SuppressWarnings("unused") + public static Pointer floatspan_shift_scale(Pointer s, double shift, double width, boolean hasshift, boolean haswidth) { + return MeosLibrary.meos.floatspan_shift_scale(s, shift, width, hasshift, haswidth); + } + + @SuppressWarnings("unused") + public static Pointer floatspanset_ceil(Pointer ss) { + return MeosLibrary.meos.floatspanset_ceil(ss); + } + + @SuppressWarnings("unused") + public static Pointer floatspanset_floor(Pointer ss) { + return MeosLibrary.meos.floatspanset_floor(ss); + } + + @SuppressWarnings("unused") + public static Pointer floatspanset_degrees(Pointer ss, boolean normalize) { + return MeosLibrary.meos.floatspanset_degrees(ss, normalize); + } + + @SuppressWarnings("unused") + public static Pointer floatspanset_radians(Pointer ss) { + return MeosLibrary.meos.floatspanset_radians(ss); + } + + @SuppressWarnings("unused") + public static Pointer floatspanset_round(Pointer ss, int maxdd) { + return MeosLibrary.meos.floatspanset_round(ss, maxdd); + } + + @SuppressWarnings("unused") + public static Pointer floatspanset_shift_scale(Pointer ss, double shift, double width, boolean hasshift, boolean haswidth) { + return MeosLibrary.meos.floatspanset_shift_scale(ss, shift, width, hasshift, haswidth); + } + + @SuppressWarnings("unused") + public static Pointer intset_shift_scale(Pointer s, int shift, int width, boolean hasshift, boolean haswidth) { + return MeosLibrary.meos.intset_shift_scale(s, shift, width, hasshift, haswidth); + } + + @SuppressWarnings("unused") + public static Pointer intspan_shift_scale(Pointer s, int shift, int width, boolean hasshift, boolean haswidth) { + return MeosLibrary.meos.intspan_shift_scale(s, shift, width, hasshift, haswidth); + } + + @SuppressWarnings("unused") + public static Pointer intspanset_shift_scale(Pointer ss, int shift, int width, boolean hasshift, boolean haswidth) { + return MeosLibrary.meos.intspanset_shift_scale(ss, shift, width, hasshift, haswidth); + } + + @SuppressWarnings("unused") + public static Pointer tstzspan_expand(Pointer s, Pointer interv) { + return MeosLibrary.meos.tstzspan_expand(s, interv); + } + + @SuppressWarnings("unused") + public static Pointer set_round(Pointer s, int maxdd) { + return MeosLibrary.meos.set_round(s, maxdd); + } + + @SuppressWarnings("unused") + public static Pointer textcat_text_textset(Pointer txt, Pointer s) { + return MeosLibrary.meos.textcat_text_textset(txt, s); + } + + @SuppressWarnings("unused") + public static Pointer textcat_textset_text(Pointer s, Pointer txt) { + return MeosLibrary.meos.textcat_textset_text(s, txt); + } + + @SuppressWarnings("unused") + public static Pointer textset_initcap(Pointer s) { + return MeosLibrary.meos.textset_initcap(s); + } + + @SuppressWarnings("unused") + public static Pointer textset_lower(Pointer s) { + return MeosLibrary.meos.textset_lower(s); + } + + @SuppressWarnings("unused") + public static Pointer textset_upper(Pointer s) { + return MeosLibrary.meos.textset_upper(s); + } + + @SuppressWarnings("unused") + public static OffsetDateTime timestamptz_tprecision(OffsetDateTime t, Pointer duration, OffsetDateTime torigin) { + var t_new = t.toEpochSecond(); + var torigin_new = torigin.toEpochSecond(); + var result = MeosLibrary.meos.timestamptz_tprecision(t_new, duration, torigin_new); + Instant instant = Instant.ofEpochSecond(result); + return OffsetDateTime.ofInstant(instant, ZoneOffset.UTC); + } + + @SuppressWarnings("unused") + public static Pointer tstzset_shift_scale(Pointer s, Pointer shift, Pointer duration) { + return MeosLibrary.meos.tstzset_shift_scale(s, shift, duration); + } + + @SuppressWarnings("unused") + public static Pointer tstzset_tprecision(Pointer s, Pointer duration, OffsetDateTime torigin) { + var torigin_new = torigin.toEpochSecond(); + return MeosLibrary.meos.tstzset_tprecision(s, duration, torigin_new); + } + + @SuppressWarnings("unused") + public static Pointer tstzspan_shift_scale(Pointer s, Pointer shift, Pointer duration) { + return MeosLibrary.meos.tstzspan_shift_scale(s, shift, duration); + } + + @SuppressWarnings("unused") + public static Pointer tstzspan_tprecision(Pointer s, Pointer duration, OffsetDateTime torigin) { + var torigin_new = torigin.toEpochSecond(); + return MeosLibrary.meos.tstzspan_tprecision(s, duration, torigin_new); + } + + @SuppressWarnings("unused") + public static Pointer tstzspanset_shift_scale(Pointer ss, Pointer shift, Pointer duration) { + return MeosLibrary.meos.tstzspanset_shift_scale(ss, shift, duration); + } + + @SuppressWarnings("unused") + public static Pointer tstzspanset_tprecision(Pointer ss, Pointer duration, OffsetDateTime torigin) { + var torigin_new = torigin.toEpochSecond(); + return MeosLibrary.meos.tstzspanset_tprecision(ss, duration, torigin_new); + } + + @SuppressWarnings("unused") + public static int set_cmp(Pointer s1, Pointer s2) { + return MeosLibrary.meos.set_cmp(s1, s2); + } + + @SuppressWarnings("unused") + public static boolean set_eq(Pointer s1, Pointer s2) { + return MeosLibrary.meos.set_eq(s1, s2); + } + + @SuppressWarnings("unused") + public static boolean set_ge(Pointer s1, Pointer s2) { + return MeosLibrary.meos.set_ge(s1, s2); + } + + @SuppressWarnings("unused") + public static boolean set_gt(Pointer s1, Pointer s2) { + return MeosLibrary.meos.set_gt(s1, s2); + } + + @SuppressWarnings("unused") + public static boolean set_le(Pointer s1, Pointer s2) { + return MeosLibrary.meos.set_le(s1, s2); + } + + @SuppressWarnings("unused") + public static boolean set_lt(Pointer s1, Pointer s2) { + return MeosLibrary.meos.set_lt(s1, s2); + } + + @SuppressWarnings("unused") + public static boolean set_ne(Pointer s1, Pointer s2) { + return MeosLibrary.meos.set_ne(s1, s2); + } + + @SuppressWarnings("unused") + public static int span_cmp(Pointer s1, Pointer s2) { + return MeosLibrary.meos.span_cmp(s1, s2); + } + + @SuppressWarnings("unused") + public static boolean span_eq(Pointer s1, Pointer s2) { + return MeosLibrary.meos.span_eq(s1, s2); + } + + @SuppressWarnings("unused") + public static boolean span_ge(Pointer s1, Pointer s2) { + return MeosLibrary.meos.span_ge(s1, s2); + } + + @SuppressWarnings("unused") + public static boolean span_gt(Pointer s1, Pointer s2) { + return MeosLibrary.meos.span_gt(s1, s2); + } + + @SuppressWarnings("unused") + public static boolean span_le(Pointer s1, Pointer s2) { + return MeosLibrary.meos.span_le(s1, s2); + } + + @SuppressWarnings("unused") + public static boolean span_lt(Pointer s1, Pointer s2) { + return MeosLibrary.meos.span_lt(s1, s2); + } + + @SuppressWarnings("unused") + public static boolean span_ne(Pointer s1, Pointer s2) { + return MeosLibrary.meos.span_ne(s1, s2); + } + + @SuppressWarnings("unused") + public static int spanset_cmp(Pointer ss1, Pointer ss2) { + return MeosLibrary.meos.spanset_cmp(ss1, ss2); + } + + @SuppressWarnings("unused") + public static boolean spanset_eq(Pointer ss1, Pointer ss2) { + return MeosLibrary.meos.spanset_eq(ss1, ss2); + } + + @SuppressWarnings("unused") + public static boolean spanset_ge(Pointer ss1, Pointer ss2) { + return MeosLibrary.meos.spanset_ge(ss1, ss2); + } + + @SuppressWarnings("unused") + public static boolean spanset_gt(Pointer ss1, Pointer ss2) { + return MeosLibrary.meos.spanset_gt(ss1, ss2); + } + + @SuppressWarnings("unused") + public static boolean spanset_le(Pointer ss1, Pointer ss2) { + return MeosLibrary.meos.spanset_le(ss1, ss2); + } + + @SuppressWarnings("unused") + public static boolean spanset_lt(Pointer ss1, Pointer ss2) { + return MeosLibrary.meos.spanset_lt(ss1, ss2); + } + + @SuppressWarnings("unused") + public static boolean spanset_ne(Pointer ss1, Pointer ss2) { + return MeosLibrary.meos.spanset_ne(ss1, ss2); + } + + @SuppressWarnings("unused") + public static Pointer set_spans(Pointer s) { + return MeosLibrary.meos.set_spans(s); + } + + @SuppressWarnings("unused") + public static Pointer set_split_each_n_spans(Pointer s, int elems_per_span, Pointer count) { + return MeosLibrary.meos.set_split_each_n_spans(s, elems_per_span, count); + } + + @SuppressWarnings("unused") + public static Pointer set_split_n_spans(Pointer s, int span_count, Pointer count) { + return MeosLibrary.meos.set_split_n_spans(s, span_count, count); + } + + @SuppressWarnings("unused") + public static Pointer spanset_spans(Pointer ss) { + return MeosLibrary.meos.spanset_spans(ss); + } + + @SuppressWarnings("unused") + public static Pointer spanset_split_each_n_spans(Pointer ss, int elems_per_span, Pointer count) { + return MeosLibrary.meos.spanset_split_each_n_spans(ss, elems_per_span, count); + } + + @SuppressWarnings("unused") + public static Pointer spanset_split_n_spans(Pointer ss, int span_count, Pointer count) { + return MeosLibrary.meos.spanset_split_n_spans(ss, span_count, count); + } + + @SuppressWarnings("unused") + public static boolean adjacent_span_bigint(Pointer s, long i) { + return MeosLibrary.meos.adjacent_span_bigint(s, i); + } + + @SuppressWarnings("unused") + public static boolean adjacent_span_date(Pointer s, int d) { + return MeosLibrary.meos.adjacent_span_date(s, d); + } + + @SuppressWarnings("unused") + public static boolean adjacent_span_float(Pointer s, double d) { + return MeosLibrary.meos.adjacent_span_float(s, d); + } + + @SuppressWarnings("unused") + public static boolean adjacent_span_int(Pointer s, int i) { + return MeosLibrary.meos.adjacent_span_int(s, i); + } + + @SuppressWarnings("unused") + public static boolean adjacent_span_span(Pointer s1, Pointer s2) { + return MeosLibrary.meos.adjacent_span_span(s1, s2); + } + + @SuppressWarnings("unused") + public static boolean adjacent_span_spanset(Pointer s, Pointer ss) { + return MeosLibrary.meos.adjacent_span_spanset(s, ss); + } + + @SuppressWarnings("unused") + public static boolean adjacent_span_timestamptz(Pointer s, OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.adjacent_span_timestamptz(s, t_new); + } + + @SuppressWarnings("unused") + public static boolean adjacent_spanset_bigint(Pointer ss, long i) { + return MeosLibrary.meos.adjacent_spanset_bigint(ss, i); + } + + @SuppressWarnings("unused") + public static boolean adjacent_spanset_date(Pointer ss, int d) { + return MeosLibrary.meos.adjacent_spanset_date(ss, d); + } + + @SuppressWarnings("unused") + public static boolean adjacent_spanset_float(Pointer ss, double d) { + return MeosLibrary.meos.adjacent_spanset_float(ss, d); + } + + @SuppressWarnings("unused") + public static boolean adjacent_spanset_int(Pointer ss, int i) { + return MeosLibrary.meos.adjacent_spanset_int(ss, i); + } + + @SuppressWarnings("unused") + public static boolean adjacent_spanset_timestamptz(Pointer ss, OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.adjacent_spanset_timestamptz(ss, t_new); + } + + @SuppressWarnings("unused") + public static boolean adjacent_spanset_span(Pointer ss, Pointer s) { + return MeosLibrary.meos.adjacent_spanset_span(ss, s); + } + + @SuppressWarnings("unused") + public static boolean adjacent_spanset_spanset(Pointer ss1, Pointer ss2) { + return MeosLibrary.meos.adjacent_spanset_spanset(ss1, ss2); + } + + @SuppressWarnings("unused") + public static boolean contained_bigint_set(long i, Pointer s) { + return MeosLibrary.meos.contained_bigint_set(i, s); + } + + @SuppressWarnings("unused") + public static boolean contained_bigint_span(long i, Pointer s) { + return MeosLibrary.meos.contained_bigint_span(i, s); + } + + @SuppressWarnings("unused") + public static boolean contained_bigint_spanset(long i, Pointer ss) { + return MeosLibrary.meos.contained_bigint_spanset(i, ss); + } + + @SuppressWarnings("unused") + public static boolean contained_date_set(int d, Pointer s) { + return MeosLibrary.meos.contained_date_set(d, s); + } + + @SuppressWarnings("unused") + public static boolean contained_date_span(int d, Pointer s) { + return MeosLibrary.meos.contained_date_span(d, s); + } + + @SuppressWarnings("unused") + public static boolean contained_date_spanset(int d, Pointer ss) { + return MeosLibrary.meos.contained_date_spanset(d, ss); + } + + @SuppressWarnings("unused") + public static boolean contained_float_set(double d, Pointer s) { + return MeosLibrary.meos.contained_float_set(d, s); + } + + @SuppressWarnings("unused") + public static boolean contained_float_span(double d, Pointer s) { + return MeosLibrary.meos.contained_float_span(d, s); + } + + @SuppressWarnings("unused") + public static boolean contained_float_spanset(double d, Pointer ss) { + return MeosLibrary.meos.contained_float_spanset(d, ss); + } + + @SuppressWarnings("unused") + public static boolean contained_int_set(int i, Pointer s) { + return MeosLibrary.meos.contained_int_set(i, s); + } + + @SuppressWarnings("unused") + public static boolean contained_int_span(int i, Pointer s) { + return MeosLibrary.meos.contained_int_span(i, s); + } + + @SuppressWarnings("unused") + public static boolean contained_int_spanset(int i, Pointer ss) { + return MeosLibrary.meos.contained_int_spanset(i, ss); + } + + @SuppressWarnings("unused") + public static boolean contained_set_set(Pointer s1, Pointer s2) { + return MeosLibrary.meos.contained_set_set(s1, s2); + } + + @SuppressWarnings("unused") + public static boolean contained_span_span(Pointer s1, Pointer s2) { + return MeosLibrary.meos.contained_span_span(s1, s2); + } + + @SuppressWarnings("unused") + public static boolean contained_span_spanset(Pointer s, Pointer ss) { + return MeosLibrary.meos.contained_span_spanset(s, ss); + } + + @SuppressWarnings("unused") + public static boolean contained_spanset_span(Pointer ss, Pointer s) { + return MeosLibrary.meos.contained_spanset_span(ss, s); + } + + @SuppressWarnings("unused") + public static boolean contained_spanset_spanset(Pointer ss1, Pointer ss2) { + return MeosLibrary.meos.contained_spanset_spanset(ss1, ss2); + } + + @SuppressWarnings("unused") + public static boolean contained_text_set(Pointer txt, Pointer s) { + return MeosLibrary.meos.contained_text_set(txt, s); + } + + @SuppressWarnings("unused") + public static boolean contained_timestamptz_set(OffsetDateTime t, Pointer s) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.contained_timestamptz_set(t_new, s); + } + + @SuppressWarnings("unused") + public static boolean contained_timestamptz_span(OffsetDateTime t, Pointer s) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.contained_timestamptz_span(t_new, s); + } + + @SuppressWarnings("unused") + public static boolean contained_timestamptz_spanset(OffsetDateTime t, Pointer ss) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.contained_timestamptz_spanset(t_new, ss); + } + + @SuppressWarnings("unused") + public static boolean contains_set_bigint(Pointer s, long i) { + return MeosLibrary.meos.contains_set_bigint(s, i); + } + + @SuppressWarnings("unused") + public static boolean contains_set_date(Pointer s, int d) { + return MeosLibrary.meos.contains_set_date(s, d); + } + + @SuppressWarnings("unused") + public static boolean contains_set_float(Pointer s, double d) { + return MeosLibrary.meos.contains_set_float(s, d); + } + + @SuppressWarnings("unused") + public static boolean contains_set_int(Pointer s, int i) { + return MeosLibrary.meos.contains_set_int(s, i); + } + + @SuppressWarnings("unused") + public static boolean contains_set_set(Pointer s1, Pointer s2) { + return MeosLibrary.meos.contains_set_set(s1, s2); + } + + @SuppressWarnings("unused") + public static boolean contains_set_text(Pointer s, Pointer t) { + return MeosLibrary.meos.contains_set_text(s, t); + } + + @SuppressWarnings("unused") + public static boolean contains_set_timestamptz(Pointer s, OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.contains_set_timestamptz(s, t_new); + } + + @SuppressWarnings("unused") + public static boolean contains_span_bigint(Pointer s, long i) { + return MeosLibrary.meos.contains_span_bigint(s, i); + } + + @SuppressWarnings("unused") + public static boolean contains_span_date(Pointer s, int d) { + return MeosLibrary.meos.contains_span_date(s, d); + } + + @SuppressWarnings("unused") + public static boolean contains_span_float(Pointer s, double d) { + return MeosLibrary.meos.contains_span_float(s, d); + } + + @SuppressWarnings("unused") + public static boolean contains_span_int(Pointer s, int i) { + return MeosLibrary.meos.contains_span_int(s, i); + } + + @SuppressWarnings("unused") + public static boolean contains_span_span(Pointer s1, Pointer s2) { + return MeosLibrary.meos.contains_span_span(s1, s2); + } + + @SuppressWarnings("unused") + public static boolean contains_span_spanset(Pointer s, Pointer ss) { + return MeosLibrary.meos.contains_span_spanset(s, ss); + } + + @SuppressWarnings("unused") + public static boolean contains_span_timestamptz(Pointer s, OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.contains_span_timestamptz(s, t_new); + } + + @SuppressWarnings("unused") + public static boolean contains_spanset_bigint(Pointer ss, long i) { + return MeosLibrary.meos.contains_spanset_bigint(ss, i); + } + + @SuppressWarnings("unused") + public static boolean contains_spanset_date(Pointer ss, int d) { + return MeosLibrary.meos.contains_spanset_date(ss, d); + } + + @SuppressWarnings("unused") + public static boolean contains_spanset_float(Pointer ss, double d) { + return MeosLibrary.meos.contains_spanset_float(ss, d); + } + + @SuppressWarnings("unused") + public static boolean contains_spanset_int(Pointer ss, int i) { + return MeosLibrary.meos.contains_spanset_int(ss, i); + } + + @SuppressWarnings("unused") + public static boolean contains_spanset_span(Pointer ss, Pointer s) { + return MeosLibrary.meos.contains_spanset_span(ss, s); + } + + @SuppressWarnings("unused") + public static boolean contains_spanset_spanset(Pointer ss1, Pointer ss2) { + return MeosLibrary.meos.contains_spanset_spanset(ss1, ss2); + } + + @SuppressWarnings("unused") + public static boolean contains_spanset_timestamptz(Pointer ss, OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.contains_spanset_timestamptz(ss, t_new); + } + + @SuppressWarnings("unused") + public static boolean overlaps_set_set(Pointer s1, Pointer s2) { + return MeosLibrary.meos.overlaps_set_set(s1, s2); + } + + @SuppressWarnings("unused") + public static boolean overlaps_span_span(Pointer s1, Pointer s2) { + return MeosLibrary.meos.overlaps_span_span(s1, s2); + } + + @SuppressWarnings("unused") + public static boolean overlaps_span_spanset(Pointer s, Pointer ss) { + return MeosLibrary.meos.overlaps_span_spanset(s, ss); + } + + @SuppressWarnings("unused") + public static boolean overlaps_spanset_span(Pointer ss, Pointer s) { + return MeosLibrary.meos.overlaps_spanset_span(ss, s); + } + + @SuppressWarnings("unused") + public static boolean overlaps_spanset_spanset(Pointer ss1, Pointer ss2) { + return MeosLibrary.meos.overlaps_spanset_spanset(ss1, ss2); + } + + @SuppressWarnings("unused") + public static boolean after_date_set(int d, Pointer s) { + return MeosLibrary.meos.after_date_set(d, s); + } + + @SuppressWarnings("unused") + public static boolean after_date_span(int d, Pointer s) { + return MeosLibrary.meos.after_date_span(d, s); + } + + @SuppressWarnings("unused") + public static boolean after_date_spanset(int d, Pointer ss) { + return MeosLibrary.meos.after_date_spanset(d, ss); + } + + @SuppressWarnings("unused") + public static boolean after_set_date(Pointer s, int d) { + return MeosLibrary.meos.after_set_date(s, d); + } + + @SuppressWarnings("unused") + public static boolean after_set_timestamptz(Pointer s, OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.after_set_timestamptz(s, t_new); + } + + @SuppressWarnings("unused") + public static boolean after_span_date(Pointer s, int d) { + return MeosLibrary.meos.after_span_date(s, d); + } + + @SuppressWarnings("unused") + public static boolean after_span_timestamptz(Pointer s, OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.after_span_timestamptz(s, t_new); + } + + @SuppressWarnings("unused") + public static boolean after_spanset_date(Pointer ss, int d) { + return MeosLibrary.meos.after_spanset_date(ss, d); + } + + @SuppressWarnings("unused") + public static boolean after_spanset_timestamptz(Pointer ss, OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.after_spanset_timestamptz(ss, t_new); + } + + @SuppressWarnings("unused") + public static boolean after_timestamptz_set(OffsetDateTime t, Pointer s) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.after_timestamptz_set(t_new, s); + } + + @SuppressWarnings("unused") + public static boolean after_timestamptz_span(OffsetDateTime t, Pointer s) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.after_timestamptz_span(t_new, s); + } + + @SuppressWarnings("unused") + public static boolean after_timestamptz_spanset(OffsetDateTime t, Pointer ss) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.after_timestamptz_spanset(t_new, ss); + } + + @SuppressWarnings("unused") + public static boolean before_date_set(int d, Pointer s) { + return MeosLibrary.meos.before_date_set(d, s); + } + + @SuppressWarnings("unused") + public static boolean before_date_span(int d, Pointer s) { + return MeosLibrary.meos.before_date_span(d, s); + } + + @SuppressWarnings("unused") + public static boolean before_date_spanset(int d, Pointer ss) { + return MeosLibrary.meos.before_date_spanset(d, ss); + } + + @SuppressWarnings("unused") + public static boolean before_set_date(Pointer s, int d) { + return MeosLibrary.meos.before_set_date(s, d); + } + + @SuppressWarnings("unused") + public static boolean before_set_timestamptz(Pointer s, OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.before_set_timestamptz(s, t_new); + } + + @SuppressWarnings("unused") + public static boolean before_span_date(Pointer s, int d) { + return MeosLibrary.meos.before_span_date(s, d); + } + + @SuppressWarnings("unused") + public static boolean before_span_timestamptz(Pointer s, OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.before_span_timestamptz(s, t_new); + } + + @SuppressWarnings("unused") + public static boolean before_spanset_date(Pointer ss, int d) { + return MeosLibrary.meos.before_spanset_date(ss, d); + } + + @SuppressWarnings("unused") + public static boolean before_spanset_timestamptz(Pointer ss, OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.before_spanset_timestamptz(ss, t_new); + } + + @SuppressWarnings("unused") + public static boolean before_timestamptz_set(OffsetDateTime t, Pointer s) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.before_timestamptz_set(t_new, s); + } + + @SuppressWarnings("unused") + public static boolean before_timestamptz_span(OffsetDateTime t, Pointer s) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.before_timestamptz_span(t_new, s); + } + + @SuppressWarnings("unused") + public static boolean before_timestamptz_spanset(OffsetDateTime t, Pointer ss) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.before_timestamptz_spanset(t_new, ss); + } + + @SuppressWarnings("unused") + public static boolean left_bigint_set(long i, Pointer s) { + return MeosLibrary.meos.left_bigint_set(i, s); + } + + @SuppressWarnings("unused") + public static boolean left_bigint_span(long i, Pointer s) { + return MeosLibrary.meos.left_bigint_span(i, s); + } + + @SuppressWarnings("unused") + public static boolean left_bigint_spanset(long i, Pointer ss) { + return MeosLibrary.meos.left_bigint_spanset(i, ss); + } + + @SuppressWarnings("unused") + public static boolean left_float_set(double d, Pointer s) { + return MeosLibrary.meos.left_float_set(d, s); + } + + @SuppressWarnings("unused") + public static boolean left_float_span(double d, Pointer s) { + return MeosLibrary.meos.left_float_span(d, s); + } + + @SuppressWarnings("unused") + public static boolean left_float_spanset(double d, Pointer ss) { + return MeosLibrary.meos.left_float_spanset(d, ss); + } + + @SuppressWarnings("unused") + public static boolean left_int_set(int i, Pointer s) { + return MeosLibrary.meos.left_int_set(i, s); + } + + @SuppressWarnings("unused") + public static boolean left_int_span(int i, Pointer s) { + return MeosLibrary.meos.left_int_span(i, s); + } + + @SuppressWarnings("unused") + public static boolean left_int_spanset(int i, Pointer ss) { + return MeosLibrary.meos.left_int_spanset(i, ss); + } + + @SuppressWarnings("unused") + public static boolean left_set_bigint(Pointer s, long i) { + return MeosLibrary.meos.left_set_bigint(s, i); + } + + @SuppressWarnings("unused") + public static boolean left_set_float(Pointer s, double d) { + return MeosLibrary.meos.left_set_float(s, d); + } + + @SuppressWarnings("unused") + public static boolean left_set_int(Pointer s, int i) { + return MeosLibrary.meos.left_set_int(s, i); + } + + @SuppressWarnings("unused") + public static boolean left_set_set(Pointer s1, Pointer s2) { + return MeosLibrary.meos.left_set_set(s1, s2); + } + + @SuppressWarnings("unused") + public static boolean left_set_text(Pointer s, Pointer txt) { + return MeosLibrary.meos.left_set_text(s, txt); + } + + @SuppressWarnings("unused") + public static boolean left_span_bigint(Pointer s, long i) { + return MeosLibrary.meos.left_span_bigint(s, i); + } + + @SuppressWarnings("unused") + public static boolean left_span_float(Pointer s, double d) { + return MeosLibrary.meos.left_span_float(s, d); + } + + @SuppressWarnings("unused") + public static boolean left_span_int(Pointer s, int i) { + return MeosLibrary.meos.left_span_int(s, i); + } + + @SuppressWarnings("unused") + public static boolean left_span_span(Pointer s1, Pointer s2) { + return MeosLibrary.meos.left_span_span(s1, s2); + } + + @SuppressWarnings("unused") + public static boolean left_span_spanset(Pointer s, Pointer ss) { + return MeosLibrary.meos.left_span_spanset(s, ss); + } + + @SuppressWarnings("unused") + public static boolean left_spanset_bigint(Pointer ss, long i) { + return MeosLibrary.meos.left_spanset_bigint(ss, i); + } + + @SuppressWarnings("unused") + public static boolean left_spanset_float(Pointer ss, double d) { + return MeosLibrary.meos.left_spanset_float(ss, d); + } + + @SuppressWarnings("unused") + public static boolean left_spanset_int(Pointer ss, int i) { + return MeosLibrary.meos.left_spanset_int(ss, i); + } + + @SuppressWarnings("unused") + public static boolean left_spanset_span(Pointer ss, Pointer s) { + return MeosLibrary.meos.left_spanset_span(ss, s); + } + + @SuppressWarnings("unused") + public static boolean left_spanset_spanset(Pointer ss1, Pointer ss2) { + return MeosLibrary.meos.left_spanset_spanset(ss1, ss2); + } + + @SuppressWarnings("unused") + public static boolean left_text_set(Pointer txt, Pointer s) { + return MeosLibrary.meos.left_text_set(txt, s); + } + + @SuppressWarnings("unused") + public static boolean overafter_date_set(int d, Pointer s) { + return MeosLibrary.meos.overafter_date_set(d, s); + } + + @SuppressWarnings("unused") + public static boolean overafter_date_span(int d, Pointer s) { + return MeosLibrary.meos.overafter_date_span(d, s); + } + + @SuppressWarnings("unused") + public static boolean overafter_date_spanset(int d, Pointer ss) { + return MeosLibrary.meos.overafter_date_spanset(d, ss); + } + + @SuppressWarnings("unused") + public static boolean overafter_set_date(Pointer s, int d) { + return MeosLibrary.meos.overafter_set_date(s, d); + } + + @SuppressWarnings("unused") + public static boolean overafter_set_timestamptz(Pointer s, OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.overafter_set_timestamptz(s, t_new); + } + + @SuppressWarnings("unused") + public static boolean overafter_span_date(Pointer s, int d) { + return MeosLibrary.meos.overafter_span_date(s, d); + } + + @SuppressWarnings("unused") + public static boolean overafter_span_timestamptz(Pointer s, OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.overafter_span_timestamptz(s, t_new); + } + + @SuppressWarnings("unused") + public static boolean overafter_spanset_date(Pointer ss, int d) { + return MeosLibrary.meos.overafter_spanset_date(ss, d); + } + + @SuppressWarnings("unused") + public static boolean overafter_spanset_timestamptz(Pointer ss, OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.overafter_spanset_timestamptz(ss, t_new); + } + + @SuppressWarnings("unused") + public static boolean overafter_timestamptz_set(OffsetDateTime t, Pointer s) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.overafter_timestamptz_set(t_new, s); + } + + @SuppressWarnings("unused") + public static boolean overafter_timestamptz_span(OffsetDateTime t, Pointer s) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.overafter_timestamptz_span(t_new, s); + } + + @SuppressWarnings("unused") + public static boolean overafter_timestamptz_spanset(OffsetDateTime t, Pointer ss) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.overafter_timestamptz_spanset(t_new, ss); + } + + @SuppressWarnings("unused") + public static boolean overbefore_date_set(int d, Pointer s) { + return MeosLibrary.meos.overbefore_date_set(d, s); + } + + @SuppressWarnings("unused") + public static boolean overbefore_date_span(int d, Pointer s) { + return MeosLibrary.meos.overbefore_date_span(d, s); + } + + @SuppressWarnings("unused") + public static boolean overbefore_date_spanset(int d, Pointer ss) { + return MeosLibrary.meos.overbefore_date_spanset(d, ss); + } + + @SuppressWarnings("unused") + public static boolean overbefore_set_date(Pointer s, int d) { + return MeosLibrary.meos.overbefore_set_date(s, d); + } + + @SuppressWarnings("unused") + public static boolean overbefore_set_timestamptz(Pointer s, OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.overbefore_set_timestamptz(s, t_new); + } + + @SuppressWarnings("unused") + public static boolean overbefore_span_date(Pointer s, int d) { + return MeosLibrary.meos.overbefore_span_date(s, d); + } + + @SuppressWarnings("unused") + public static boolean overbefore_span_timestamptz(Pointer s, OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.overbefore_span_timestamptz(s, t_new); + } + + @SuppressWarnings("unused") + public static boolean overbefore_spanset_date(Pointer ss, int d) { + return MeosLibrary.meos.overbefore_spanset_date(ss, d); + } + + @SuppressWarnings("unused") + public static boolean overbefore_spanset_timestamptz(Pointer ss, OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.overbefore_spanset_timestamptz(ss, t_new); + } + + @SuppressWarnings("unused") + public static boolean overbefore_timestamptz_set(OffsetDateTime t, Pointer s) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.overbefore_timestamptz_set(t_new, s); + } + + @SuppressWarnings("unused") + public static boolean overbefore_timestamptz_span(OffsetDateTime t, Pointer s) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.overbefore_timestamptz_span(t_new, s); + } + + @SuppressWarnings("unused") + public static boolean overbefore_timestamptz_spanset(OffsetDateTime t, Pointer ss) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.overbefore_timestamptz_spanset(t_new, ss); + } + + @SuppressWarnings("unused") + public static boolean overleft_bigint_set(long i, Pointer s) { + return MeosLibrary.meos.overleft_bigint_set(i, s); + } + + @SuppressWarnings("unused") + public static boolean overleft_bigint_span(long i, Pointer s) { + return MeosLibrary.meos.overleft_bigint_span(i, s); + } + + @SuppressWarnings("unused") + public static boolean overleft_bigint_spanset(long i, Pointer ss) { + return MeosLibrary.meos.overleft_bigint_spanset(i, ss); + } + + @SuppressWarnings("unused") + public static boolean overleft_float_set(double d, Pointer s) { + return MeosLibrary.meos.overleft_float_set(d, s); + } + + @SuppressWarnings("unused") + public static boolean overleft_float_span(double d, Pointer s) { + return MeosLibrary.meos.overleft_float_span(d, s); + } + + @SuppressWarnings("unused") + public static boolean overleft_float_spanset(double d, Pointer ss) { + return MeosLibrary.meos.overleft_float_spanset(d, ss); + } + + @SuppressWarnings("unused") + public static boolean overleft_int_set(int i, Pointer s) { + return MeosLibrary.meos.overleft_int_set(i, s); + } + + @SuppressWarnings("unused") + public static boolean overleft_int_span(int i, Pointer s) { + return MeosLibrary.meos.overleft_int_span(i, s); + } + + @SuppressWarnings("unused") + public static boolean overleft_int_spanset(int i, Pointer ss) { + return MeosLibrary.meos.overleft_int_spanset(i, ss); + } + + @SuppressWarnings("unused") + public static boolean overleft_set_bigint(Pointer s, long i) { + return MeosLibrary.meos.overleft_set_bigint(s, i); + } + + @SuppressWarnings("unused") + public static boolean overleft_set_float(Pointer s, double d) { + return MeosLibrary.meos.overleft_set_float(s, d); + } + + @SuppressWarnings("unused") + public static boolean overleft_set_int(Pointer s, int i) { + return MeosLibrary.meos.overleft_set_int(s, i); + } + + @SuppressWarnings("unused") + public static boolean overleft_set_set(Pointer s1, Pointer s2) { + return MeosLibrary.meos.overleft_set_set(s1, s2); + } + + @SuppressWarnings("unused") + public static boolean overleft_set_text(Pointer s, Pointer txt) { + return MeosLibrary.meos.overleft_set_text(s, txt); + } + + @SuppressWarnings("unused") + public static boolean overleft_span_bigint(Pointer s, long i) { + return MeosLibrary.meos.overleft_span_bigint(s, i); + } + + @SuppressWarnings("unused") + public static boolean overleft_span_float(Pointer s, double d) { + return MeosLibrary.meos.overleft_span_float(s, d); + } + + @SuppressWarnings("unused") + public static boolean overleft_span_int(Pointer s, int i) { + return MeosLibrary.meos.overleft_span_int(s, i); + } + + @SuppressWarnings("unused") + public static boolean overleft_span_span(Pointer s1, Pointer s2) { + return MeosLibrary.meos.overleft_span_span(s1, s2); + } + + @SuppressWarnings("unused") + public static boolean overleft_span_spanset(Pointer s, Pointer ss) { + return MeosLibrary.meos.overleft_span_spanset(s, ss); + } + + @SuppressWarnings("unused") + public static boolean overleft_spanset_bigint(Pointer ss, long i) { + return MeosLibrary.meos.overleft_spanset_bigint(ss, i); + } + + @SuppressWarnings("unused") + public static boolean overleft_spanset_float(Pointer ss, double d) { + return MeosLibrary.meos.overleft_spanset_float(ss, d); + } + + @SuppressWarnings("unused") + public static boolean overleft_spanset_int(Pointer ss, int i) { + return MeosLibrary.meos.overleft_spanset_int(ss, i); + } + + @SuppressWarnings("unused") + public static boolean overleft_spanset_span(Pointer ss, Pointer s) { + return MeosLibrary.meos.overleft_spanset_span(ss, s); + } + + @SuppressWarnings("unused") + public static boolean overleft_spanset_spanset(Pointer ss1, Pointer ss2) { + return MeosLibrary.meos.overleft_spanset_spanset(ss1, ss2); + } + + @SuppressWarnings("unused") + public static boolean overleft_text_set(Pointer txt, Pointer s) { + return MeosLibrary.meos.overleft_text_set(txt, s); + } + + @SuppressWarnings("unused") + public static boolean overright_bigint_set(long i, Pointer s) { + return MeosLibrary.meos.overright_bigint_set(i, s); + } + + @SuppressWarnings("unused") + public static boolean overright_bigint_span(long i, Pointer s) { + return MeosLibrary.meos.overright_bigint_span(i, s); + } + + @SuppressWarnings("unused") + public static boolean overright_bigint_spanset(long i, Pointer ss) { + return MeosLibrary.meos.overright_bigint_spanset(i, ss); + } + + @SuppressWarnings("unused") + public static boolean overright_float_set(double d, Pointer s) { + return MeosLibrary.meos.overright_float_set(d, s); + } + + @SuppressWarnings("unused") + public static boolean overright_float_span(double d, Pointer s) { + return MeosLibrary.meos.overright_float_span(d, s); + } + + @SuppressWarnings("unused") + public static boolean overright_float_spanset(double d, Pointer ss) { + return MeosLibrary.meos.overright_float_spanset(d, ss); + } + + @SuppressWarnings("unused") + public static boolean overright_int_set(int i, Pointer s) { + return MeosLibrary.meos.overright_int_set(i, s); + } + + @SuppressWarnings("unused") + public static boolean overright_int_span(int i, Pointer s) { + return MeosLibrary.meos.overright_int_span(i, s); + } + + @SuppressWarnings("unused") + public static boolean overright_int_spanset(int i, Pointer ss) { + return MeosLibrary.meos.overright_int_spanset(i, ss); + } + + @SuppressWarnings("unused") + public static boolean overright_set_bigint(Pointer s, long i) { + return MeosLibrary.meos.overright_set_bigint(s, i); + } + + @SuppressWarnings("unused") + public static boolean overright_set_float(Pointer s, double d) { + return MeosLibrary.meos.overright_set_float(s, d); + } + + @SuppressWarnings("unused") + public static boolean overright_set_int(Pointer s, int i) { + return MeosLibrary.meos.overright_set_int(s, i); + } + + @SuppressWarnings("unused") + public static boolean overright_set_set(Pointer s1, Pointer s2) { + return MeosLibrary.meos.overright_set_set(s1, s2); + } + + @SuppressWarnings("unused") + public static boolean overright_set_text(Pointer s, Pointer txt) { + return MeosLibrary.meos.overright_set_text(s, txt); + } + + @SuppressWarnings("unused") + public static boolean overright_span_bigint(Pointer s, long i) { + return MeosLibrary.meos.overright_span_bigint(s, i); + } + + @SuppressWarnings("unused") + public static boolean overright_span_float(Pointer s, double d) { + return MeosLibrary.meos.overright_span_float(s, d); + } + + @SuppressWarnings("unused") + public static boolean overright_span_int(Pointer s, int i) { + return MeosLibrary.meos.overright_span_int(s, i); + } + + @SuppressWarnings("unused") + public static boolean overright_span_span(Pointer s1, Pointer s2) { + return MeosLibrary.meos.overright_span_span(s1, s2); + } + + @SuppressWarnings("unused") + public static boolean overright_span_spanset(Pointer s, Pointer ss) { + return MeosLibrary.meos.overright_span_spanset(s, ss); + } + + @SuppressWarnings("unused") + public static boolean overright_spanset_bigint(Pointer ss, long i) { + return MeosLibrary.meos.overright_spanset_bigint(ss, i); + } + + @SuppressWarnings("unused") + public static boolean overright_spanset_float(Pointer ss, double d) { + return MeosLibrary.meos.overright_spanset_float(ss, d); + } + + @SuppressWarnings("unused") + public static boolean overright_spanset_int(Pointer ss, int i) { + return MeosLibrary.meos.overright_spanset_int(ss, i); + } + + @SuppressWarnings("unused") + public static boolean overright_spanset_span(Pointer ss, Pointer s) { + return MeosLibrary.meos.overright_spanset_span(ss, s); + } + + @SuppressWarnings("unused") + public static boolean overright_spanset_spanset(Pointer ss1, Pointer ss2) { + return MeosLibrary.meos.overright_spanset_spanset(ss1, ss2); + } + + @SuppressWarnings("unused") + public static boolean overright_text_set(Pointer txt, Pointer s) { + return MeosLibrary.meos.overright_text_set(txt, s); + } + + @SuppressWarnings("unused") + public static boolean right_bigint_set(long i, Pointer s) { + return MeosLibrary.meos.right_bigint_set(i, s); + } + + @SuppressWarnings("unused") + public static boolean right_bigint_span(long i, Pointer s) { + return MeosLibrary.meos.right_bigint_span(i, s); + } + + @SuppressWarnings("unused") + public static boolean right_bigint_spanset(long i, Pointer ss) { + return MeosLibrary.meos.right_bigint_spanset(i, ss); + } + + @SuppressWarnings("unused") + public static boolean right_float_set(double d, Pointer s) { + return MeosLibrary.meos.right_float_set(d, s); + } + + @SuppressWarnings("unused") + public static boolean right_float_span(double d, Pointer s) { + return MeosLibrary.meos.right_float_span(d, s); + } + + @SuppressWarnings("unused") + public static boolean right_float_spanset(double d, Pointer ss) { + return MeosLibrary.meos.right_float_spanset(d, ss); + } + + @SuppressWarnings("unused") + public static boolean right_int_set(int i, Pointer s) { + return MeosLibrary.meos.right_int_set(i, s); + } + + @SuppressWarnings("unused") + public static boolean right_int_span(int i, Pointer s) { + return MeosLibrary.meos.right_int_span(i, s); + } + + @SuppressWarnings("unused") + public static boolean right_int_spanset(int i, Pointer ss) { + return MeosLibrary.meos.right_int_spanset(i, ss); + } + + @SuppressWarnings("unused") + public static boolean right_set_bigint(Pointer s, long i) { + return MeosLibrary.meos.right_set_bigint(s, i); + } + + @SuppressWarnings("unused") + public static boolean right_set_float(Pointer s, double d) { + return MeosLibrary.meos.right_set_float(s, d); + } + + @SuppressWarnings("unused") + public static boolean right_set_int(Pointer s, int i) { + return MeosLibrary.meos.right_set_int(s, i); + } + + @SuppressWarnings("unused") + public static boolean right_set_set(Pointer s1, Pointer s2) { + return MeosLibrary.meos.right_set_set(s1, s2); + } + + @SuppressWarnings("unused") + public static boolean right_set_text(Pointer s, Pointer txt) { + return MeosLibrary.meos.right_set_text(s, txt); + } + + @SuppressWarnings("unused") + public static boolean right_span_bigint(Pointer s, long i) { + return MeosLibrary.meos.right_span_bigint(s, i); + } + + @SuppressWarnings("unused") + public static boolean right_span_float(Pointer s, double d) { + return MeosLibrary.meos.right_span_float(s, d); + } + + @SuppressWarnings("unused") + public static boolean right_span_int(Pointer s, int i) { + return MeosLibrary.meos.right_span_int(s, i); + } + + @SuppressWarnings("unused") + public static boolean right_span_span(Pointer s1, Pointer s2) { + return MeosLibrary.meos.right_span_span(s1, s2); + } + + @SuppressWarnings("unused") + public static boolean right_span_spanset(Pointer s, Pointer ss) { + return MeosLibrary.meos.right_span_spanset(s, ss); + } + + @SuppressWarnings("unused") + public static boolean right_spanset_bigint(Pointer ss, long i) { + return MeosLibrary.meos.right_spanset_bigint(ss, i); + } + + @SuppressWarnings("unused") + public static boolean right_spanset_float(Pointer ss, double d) { + return MeosLibrary.meos.right_spanset_float(ss, d); + } + + @SuppressWarnings("unused") + public static boolean right_spanset_int(Pointer ss, int i) { + return MeosLibrary.meos.right_spanset_int(ss, i); + } + + @SuppressWarnings("unused") + public static boolean right_spanset_span(Pointer ss, Pointer s) { + return MeosLibrary.meos.right_spanset_span(ss, s); + } + + @SuppressWarnings("unused") + public static boolean right_spanset_spanset(Pointer ss1, Pointer ss2) { + return MeosLibrary.meos.right_spanset_spanset(ss1, ss2); + } + + @SuppressWarnings("unused") + public static boolean right_text_set(Pointer txt, Pointer s) { + return MeosLibrary.meos.right_text_set(txt, s); + } + + @SuppressWarnings("unused") + public static Pointer intersection_bigint_set(long i, Pointer s) { + return MeosLibrary.meos.intersection_bigint_set(i, s); + } + + @SuppressWarnings("unused") + public static Pointer intersection_date_set(int d, Pointer s) { + return MeosLibrary.meos.intersection_date_set(d, s); + } + + @SuppressWarnings("unused") + public static Pointer intersection_float_set(double d, Pointer s) { + return MeosLibrary.meos.intersection_float_set(d, s); + } + + @SuppressWarnings("unused") + public static Pointer intersection_int_set(int i, Pointer s) { + return MeosLibrary.meos.intersection_int_set(i, s); + } + + @SuppressWarnings("unused") + public static Pointer intersection_set_bigint(Pointer s, long i) { + return MeosLibrary.meos.intersection_set_bigint(s, i); + } + + @SuppressWarnings("unused") + public static Pointer intersection_set_date(Pointer s, int d) { + return MeosLibrary.meos.intersection_set_date(s, d); + } + + @SuppressWarnings("unused") + public static Pointer intersection_set_float(Pointer s, double d) { + return MeosLibrary.meos.intersection_set_float(s, d); + } + + @SuppressWarnings("unused") + public static Pointer intersection_set_int(Pointer s, int i) { + return MeosLibrary.meos.intersection_set_int(s, i); + } + + @SuppressWarnings("unused") + public static Pointer intersection_set_set(Pointer s1, Pointer s2) { + return MeosLibrary.meos.intersection_set_set(s1, s2); + } + + @SuppressWarnings("unused") + public static Pointer intersection_set_text(Pointer s, Pointer txt) { + return MeosLibrary.meos.intersection_set_text(s, txt); + } + + @SuppressWarnings("unused") + public static Pointer intersection_set_timestamptz(Pointer s, OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.intersection_set_timestamptz(s, t_new); + } + + @SuppressWarnings("unused") + public static Pointer intersection_span_bigint(Pointer s, long i) { + return MeosLibrary.meos.intersection_span_bigint(s, i); + } + + @SuppressWarnings("unused") + public static Pointer intersection_span_date(Pointer s, int d) { + return MeosLibrary.meos.intersection_span_date(s, d); + } + + @SuppressWarnings("unused") + public static Pointer intersection_span_float(Pointer s, double d) { + return MeosLibrary.meos.intersection_span_float(s, d); + } + + @SuppressWarnings("unused") + public static Pointer intersection_span_int(Pointer s, int i) { + return MeosLibrary.meos.intersection_span_int(s, i); + } + + @SuppressWarnings("unused") + public static Pointer intersection_span_span(Pointer s1, Pointer s2) { + return MeosLibrary.meos.intersection_span_span(s1, s2); + } + + @SuppressWarnings("unused") + public static Pointer intersection_span_spanset(Pointer s, Pointer ss) { + return MeosLibrary.meos.intersection_span_spanset(s, ss); + } + + @SuppressWarnings("unused") + public static Pointer intersection_span_timestamptz(Pointer s, OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.intersection_span_timestamptz(s, t_new); + } + + @SuppressWarnings("unused") + public static Pointer intersection_spanset_bigint(Pointer ss, long i) { + return MeosLibrary.meos.intersection_spanset_bigint(ss, i); + } + + @SuppressWarnings("unused") + public static Pointer intersection_spanset_date(Pointer ss, int d) { + return MeosLibrary.meos.intersection_spanset_date(ss, d); + } + + @SuppressWarnings("unused") + public static Pointer intersection_spanset_float(Pointer ss, double d) { + return MeosLibrary.meos.intersection_spanset_float(ss, d); + } + + @SuppressWarnings("unused") + public static Pointer intersection_spanset_int(Pointer ss, int i) { + return MeosLibrary.meos.intersection_spanset_int(ss, i); + } + + @SuppressWarnings("unused") + public static Pointer intersection_spanset_span(Pointer ss, Pointer s) { + return MeosLibrary.meos.intersection_spanset_span(ss, s); + } + + @SuppressWarnings("unused") + public static Pointer intersection_spanset_spanset(Pointer ss1, Pointer ss2) { + return MeosLibrary.meos.intersection_spanset_spanset(ss1, ss2); + } + + @SuppressWarnings("unused") + public static Pointer intersection_spanset_timestamptz(Pointer ss, OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.intersection_spanset_timestamptz(ss, t_new); + } + + @SuppressWarnings("unused") + public static Pointer intersection_text_set(Pointer txt, Pointer s) { + return MeosLibrary.meos.intersection_text_set(txt, s); + } + + @SuppressWarnings("unused") + public static Pointer intersection_timestamptz_set(OffsetDateTime t, Pointer s) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.intersection_timestamptz_set(t_new, s); + } + + @SuppressWarnings("unused") + public static Pointer minus_bigint_set(long i, Pointer s) { + return MeosLibrary.meos.minus_bigint_set(i, s); + } + + @SuppressWarnings("unused") + public static Pointer minus_bigint_span(long i, Pointer s) { + return MeosLibrary.meos.minus_bigint_span(i, s); + } + + @SuppressWarnings("unused") + public static Pointer minus_bigint_spanset(long i, Pointer ss) { + return MeosLibrary.meos.minus_bigint_spanset(i, ss); + } + + @SuppressWarnings("unused") + public static Pointer minus_date_set(int d, Pointer s) { + return MeosLibrary.meos.minus_date_set(d, s); + } + + @SuppressWarnings("unused") + public static Pointer minus_date_span(int d, Pointer s) { + return MeosLibrary.meos.minus_date_span(d, s); + } + + @SuppressWarnings("unused") + public static Pointer minus_date_spanset(int d, Pointer ss) { + return MeosLibrary.meos.minus_date_spanset(d, ss); + } + + @SuppressWarnings("unused") + public static Pointer minus_float_set(double d, Pointer s) { + return MeosLibrary.meos.minus_float_set(d, s); + } + + @SuppressWarnings("unused") + public static Pointer minus_float_span(double d, Pointer s) { + return MeosLibrary.meos.minus_float_span(d, s); + } + + @SuppressWarnings("unused") + public static Pointer minus_float_spanset(double d, Pointer ss) { + return MeosLibrary.meos.minus_float_spanset(d, ss); + } + + @SuppressWarnings("unused") + public static Pointer minus_int_set(int i, Pointer s) { + return MeosLibrary.meos.minus_int_set(i, s); + } + + @SuppressWarnings("unused") + public static Pointer minus_int_span(int i, Pointer s) { + return MeosLibrary.meos.minus_int_span(i, s); + } + + @SuppressWarnings("unused") + public static Pointer minus_int_spanset(int i, Pointer ss) { + return MeosLibrary.meos.minus_int_spanset(i, ss); + } + + @SuppressWarnings("unused") + public static Pointer minus_set_bigint(Pointer s, long i) { + return MeosLibrary.meos.minus_set_bigint(s, i); } - + @SuppressWarnings("unused") - public static int geo_get_srid(Pointer g) { - return MeosLibrary.meos.geo_get_srid(g); + public static Pointer minus_set_date(Pointer s, int d) { + return MeosLibrary.meos.minus_set_date(s, d); } @SuppressWarnings("unused") - public static void meos_error(int errlevel, int errcode, String format, Pointer args) { - MeosLibrary.meos.meos_error(errlevel, errcode, format, args); + public static Pointer minus_set_float(Pointer s, double d) { + return MeosLibrary.meos.minus_set_float(s, d); } @SuppressWarnings("unused") - public static int meos_errno() { - return MeosLibrary.meos.meos_errno(); + public static Pointer minus_set_int(Pointer s, int i) { + return MeosLibrary.meos.minus_set_int(s, i); } @SuppressWarnings("unused") - public static int meos_errno_set(int err) { - return MeosLibrary.meos.meos_errno_set(err); + public static Pointer minus_set_set(Pointer s1, Pointer s2) { + return MeosLibrary.meos.minus_set_set(s1, s2); } @SuppressWarnings("unused") - public static int meos_errno_restore(int err) { - return MeosLibrary.meos.meos_errno_restore(err); + public static Pointer minus_set_text(Pointer s, Pointer txt) { + return MeosLibrary.meos.minus_set_text(s, txt); } @SuppressWarnings("unused") - public static int meos_errno_reset() { - return MeosLibrary.meos.meos_errno_reset(); + public static Pointer minus_set_timestamptz(Pointer s, OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.minus_set_timestamptz(s, t_new); } @SuppressWarnings("unused") - public static void meos_initialize_timezone(String name) { - MeosLibrary.meos.meos_initialize_timezone(name); + public static Pointer minus_span_bigint(Pointer s, long i) { + return MeosLibrary.meos.minus_span_bigint(s, i); } @SuppressWarnings("unused") - public static void meos_initialize_error_handler(error_handler_fn err_handler) { - MeosLibrary.meos.meos_initialize_error_handler(err_handler); + public static Pointer minus_span_date(Pointer s, int d) { + return MeosLibrary.meos.minus_span_date(s, d); } - - public static void meos_initialize_noexit_error_handler() { - MeosLibrary.meos.meos_initialize_noexit_error_handler(); + + @SuppressWarnings("unused") + public static Pointer minus_span_float(Pointer s, double d) { + return MeosLibrary.meos.minus_span_float(s, d); } - + @SuppressWarnings("unused") - public static void meos_finalize_timezone() { - MeosLibrary.meos.meos_finalize_timezone(); + public static Pointer minus_span_int(Pointer s, int i) { + return MeosLibrary.meos.minus_span_int(s, i); } @SuppressWarnings("unused") - public static boolean meos_set_datestyle(String newval, Pointer extra) { - return MeosLibrary.meos.meos_set_datestyle(newval, extra); + public static Pointer minus_span_span(Pointer s1, Pointer s2) { + return MeosLibrary.meos.minus_span_span(s1, s2); } @SuppressWarnings("unused") - public static boolean meos_set_intervalstyle(String newval, int extra) { - return MeosLibrary.meos.meos_set_intervalstyle(newval, extra); + public static Pointer minus_span_spanset(Pointer s, Pointer ss) { + return MeosLibrary.meos.minus_span_spanset(s, ss); } @SuppressWarnings("unused") - public static String meos_get_datestyle() { - return MeosLibrary.meos.meos_get_datestyle(); + public static Pointer minus_span_timestamptz(Pointer s, OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.minus_span_timestamptz(s, t_new); } @SuppressWarnings("unused") - public static String meos_get_intervalstyle() { - return MeosLibrary.meos.meos_get_intervalstyle(); + public static Pointer minus_spanset_bigint(Pointer ss, long i) { + return MeosLibrary.meos.minus_spanset_bigint(ss, i); } @SuppressWarnings("unused") - public static void meos_initialize(String tz_str, error_handler_fn err_handler) { - MeosLibrary.meos.meos_initialize(tz_str, err_handler); + public static Pointer minus_spanset_date(Pointer ss, int d) { + return MeosLibrary.meos.minus_spanset_date(ss, d); } - + @SuppressWarnings("unused") - public static void meos_initialize() { - MeosLibrary.meos.meos_initialize(); + public static Pointer minus_spanset_float(Pointer ss, double d) { + return MeosLibrary.meos.minus_spanset_float(ss, d); } - + @SuppressWarnings("unused") - public static void meos_set_spatial_ref_sys_csv(String path) { - MeosLibrary.meos.meos_set_spatial_ref_sys_csv(path); + public static Pointer minus_spanset_int(Pointer ss, int i) { + return MeosLibrary.meos.minus_spanset_int(ss, i); } - + @SuppressWarnings("unused") - public static void meos_finalize() { - MeosLibrary.meos.meos_finalize(); + public static Pointer minus_spanset_span(Pointer ss, Pointer s) { + return MeosLibrary.meos.minus_spanset_span(ss, s); } @SuppressWarnings("unused") - public static int add_date_int(int d, int days) { - return MeosLibrary.meos.add_date_int(d, days); + public static Pointer minus_spanset_spanset(Pointer ss1, Pointer ss2) { + return MeosLibrary.meos.minus_spanset_spanset(ss1, ss2); } @SuppressWarnings("unused") - public static Pointer add_interval_interval(Pointer interv1, Pointer interv2) { - return MeosLibrary.meos.add_interval_interval(interv1, interv2); + public static Pointer minus_spanset_timestamptz(Pointer ss, OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.minus_spanset_timestamptz(ss, t_new); } @SuppressWarnings("unused") - public static OffsetDateTime add_timestamptz_interval(OffsetDateTime t, Pointer interv) { + public static Pointer minus_text_set(Pointer txt, Pointer s) { + return MeosLibrary.meos.minus_text_set(txt, s); + } + + @SuppressWarnings("unused") + public static Pointer minus_timestamptz_set(OffsetDateTime t, Pointer s) { var t_new = t.toEpochSecond(); - var result = MeosLibrary.meos.add_timestamptz_interval(t_new, interv); - Instant instant = Instant.ofEpochSecond(result); - return OffsetDateTime.ofInstant(instant, ZoneOffset.UTC); + return MeosLibrary.meos.minus_timestamptz_set(t_new, s); } @SuppressWarnings("unused") - public static boolean bool_in(String str) { - return MeosLibrary.meos.bool_in(str); + public static Pointer minus_timestamptz_span(OffsetDateTime t, Pointer s) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.minus_timestamptz_span(t_new, s); } @SuppressWarnings("unused") - public static String bool_out(boolean b) { - return MeosLibrary.meos.bool_out(b); + public static Pointer minus_timestamptz_spanset(OffsetDateTime t, Pointer ss) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.minus_timestamptz_spanset(t_new, ss); } @SuppressWarnings("unused") - public static Pointer cstring2text(String str) { - return MeosLibrary.meos.cstring2text(str); + public static Pointer union_bigint_set(long i, Pointer s) { + return MeosLibrary.meos.union_bigint_set(i, s); } @SuppressWarnings("unused") - public static OffsetDateTime date_to_timestamptz(int d) { - var result = MeosLibrary.meos.date_to_timestamptz(d); - Instant instant = Instant.ofEpochSecond(result); - return OffsetDateTime.ofInstant(instant, ZoneOffset.UTC); + public static Pointer union_bigint_span(Pointer s, long i) { + return MeosLibrary.meos.union_bigint_span(s, i); } @SuppressWarnings("unused") - public static Pointer minus_date_date(int d1, int d2) { - return MeosLibrary.meos.minus_date_date(d1, d2); + public static Pointer union_bigint_spanset(long i, Pointer ss) { + return MeosLibrary.meos.union_bigint_spanset(i, ss); } @SuppressWarnings("unused") - public static int minus_date_int(int d, int days) { - return MeosLibrary.meos.minus_date_int(d, days); + public static Pointer union_date_set(int d, Pointer s) { + return MeosLibrary.meos.union_date_set(d, s); } @SuppressWarnings("unused") - public static OffsetDateTime minus_timestamptz_interval(OffsetDateTime t, Pointer interv) { - var t_new = t.toEpochSecond(); - var result = MeosLibrary.meos.minus_timestamptz_interval(t_new, interv); - Instant instant = Instant.ofEpochSecond(result); - return OffsetDateTime.ofInstant(instant, ZoneOffset.UTC); + public static Pointer union_date_span(Pointer s, int d) { + return MeosLibrary.meos.union_date_span(s, d); } @SuppressWarnings("unused") - public static Pointer minus_timestamptz_timestamptz(OffsetDateTime t1, OffsetDateTime t2) { - var t1_new = t1.toEpochSecond(); - var t2_new = t2.toEpochSecond(); - return MeosLibrary.meos.minus_timestamptz_timestamptz(t1_new, t2_new); + public static Pointer union_date_spanset(int d, Pointer ss) { + return MeosLibrary.meos.union_date_spanset(d, ss); } @SuppressWarnings("unused") - public static Pointer mult_interval_double(Pointer interv, double factor) { - return MeosLibrary.meos.mult_interval_double(interv, factor); + public static Pointer union_float_set(double d, Pointer s) { + return MeosLibrary.meos.union_float_set(d, s); } @SuppressWarnings("unused") - public static int pg_date_in(String str) { - return MeosLibrary.meos.pg_date_in(str); + public static Pointer union_float_span(Pointer s, double d) { + return MeosLibrary.meos.union_float_span(s, d); } @SuppressWarnings("unused") - public static String pg_date_out(int d) { - return MeosLibrary.meos.pg_date_out(d); + public static Pointer union_float_spanset(double d, Pointer ss) { + return MeosLibrary.meos.union_float_spanset(d, ss); } @SuppressWarnings("unused") - public static int pg_interval_cmp(Pointer interv1, Pointer interv2) { - return MeosLibrary.meos.pg_interval_cmp(interv1, interv2); + public static Pointer union_int_set(int i, Pointer s) { + return MeosLibrary.meos.union_int_set(i, s); } @SuppressWarnings("unused") - public static Pointer pg_interval_in(String str, int typmod) { - return MeosLibrary.meos.pg_interval_in(str, typmod); + public static Pointer union_int_span(int i, Pointer s) { + return MeosLibrary.meos.union_int_span(i, s); } @SuppressWarnings("unused") - public static Pointer pg_interval_make(int years, int months, int weeks, int days, int hours, int mins, double secs) { - return MeosLibrary.meos.pg_interval_make(years, months, weeks, days, hours, mins, secs); + public static Pointer union_int_spanset(int i, Pointer ss) { + return MeosLibrary.meos.union_int_spanset(i, ss); } @SuppressWarnings("unused") - public static String pg_interval_out(Pointer interv) { - return MeosLibrary.meos.pg_interval_out(interv); + public static Pointer union_set_bigint(Pointer s, long i) { + return MeosLibrary.meos.union_set_bigint(s, i); } @SuppressWarnings("unused") - public static long pg_time_in(String str, int typmod) { - return MeosLibrary.meos.pg_time_in(str, typmod); + public static Pointer union_set_date(Pointer s, int d) { + return MeosLibrary.meos.union_set_date(s, d); } @SuppressWarnings("unused") - public static String pg_time_out(long t) { - return MeosLibrary.meos.pg_time_out(t); + public static Pointer union_set_float(Pointer s, double d) { + return MeosLibrary.meos.union_set_float(s, d); } @SuppressWarnings("unused") - public static LocalDateTime pg_timestamp_in(String str, int typmod) { - var result = MeosLibrary.meos.pg_timestamp_in(str, typmod); - return LocalDateTime.ofEpochSecond(result, 0, ZoneOffset.UTC); + public static Pointer union_set_int(Pointer s, int i) { + return MeosLibrary.meos.union_set_int(s, i); } @SuppressWarnings("unused") - public static String pg_timestamp_out(LocalDateTime t) { - var t_new = t.toEpochSecond(ZoneOffset.UTC); - return MeosLibrary.meos.pg_timestamp_out(t_new); + public static Pointer union_set_set(Pointer s1, Pointer s2) { + return MeosLibrary.meos.union_set_set(s1, s2); } @SuppressWarnings("unused") - public static OffsetDateTime pg_timestamptz_in(String str, int typmod) { - var result = MeosLibrary.meos.pg_timestamptz_in(str, typmod); - Instant instant = Instant.ofEpochSecond(result); - return OffsetDateTime.ofInstant(instant, ZoneOffset.UTC); + public static Pointer union_set_text(Pointer s, Pointer txt) { + return MeosLibrary.meos.union_set_text(s, txt); } @SuppressWarnings("unused") - public static String pg_timestamptz_out(OffsetDateTime t) { + public static Pointer union_set_timestamptz(Pointer s, OffsetDateTime t) { var t_new = t.toEpochSecond(); - return MeosLibrary.meos.pg_timestamptz_out(t_new); + return MeosLibrary.meos.union_set_timestamptz(s, t_new); } @SuppressWarnings("unused") - public static String text2cstring(Pointer txt) { - return MeosLibrary.meos.text2cstring(txt); + public static Pointer union_span_bigint(Pointer s, long i) { + return MeosLibrary.meos.union_span_bigint(s, i); } @SuppressWarnings("unused") - public static int text_cmp(Pointer txt1, Pointer txt2) { - return MeosLibrary.meos.text_cmp(txt1, txt2); + public static Pointer union_span_date(Pointer s, int d) { + return MeosLibrary.meos.union_span_date(s, d); } @SuppressWarnings("unused") - public static Pointer text_copy(Pointer txt) { - return MeosLibrary.meos.text_copy(txt); + public static Pointer union_span_float(Pointer s, double d) { + return MeosLibrary.meos.union_span_float(s, d); } @SuppressWarnings("unused") - public static Pointer text_initcap(Pointer txt) { - return MeosLibrary.meos.text_initcap(txt); + public static Pointer union_span_int(Pointer s, int i) { + return MeosLibrary.meos.union_span_int(s, i); } @SuppressWarnings("unused") - public static Pointer text_lower(Pointer txt) { - return MeosLibrary.meos.text_lower(txt); + public static Pointer union_span_span(Pointer s1, Pointer s2) { + return MeosLibrary.meos.union_span_span(s1, s2); } @SuppressWarnings("unused") - public static String text_out(Pointer txt) { - return MeosLibrary.meos.text_out(txt); + public static Pointer union_span_spanset(Pointer s, Pointer ss) { + return MeosLibrary.meos.union_span_spanset(s, ss); } @SuppressWarnings("unused") - public static Pointer text_upper(Pointer txt) { - return MeosLibrary.meos.text_upper(txt); + public static Pointer union_span_timestamptz(Pointer s, OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.union_span_timestamptz(s, t_new); } @SuppressWarnings("unused") - public static Pointer textcat_text_text(Pointer txt1, Pointer txt2) { - return MeosLibrary.meos.textcat_text_text(txt1, txt2); + public static Pointer union_spanset_bigint(Pointer ss, long i) { + return MeosLibrary.meos.union_spanset_bigint(ss, i); } @SuppressWarnings("unused") - public static int timestamptz_to_date(OffsetDateTime t) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.timestamptz_to_date(t_new); + public static Pointer union_spanset_date(Pointer ss, int d) { + return MeosLibrary.meos.union_spanset_date(ss, d); } @SuppressWarnings("unused") - public static Pointer geo_as_ewkb(Pointer gs, String endian) { - return MeosLibrary.meos.geo_as_ewkb(gs, endian); + public static Pointer union_spanset_float(Pointer ss, double d) { + return MeosLibrary.meos.union_spanset_float(ss, d); } @SuppressWarnings("unused") - public static String geo_as_ewkt(Pointer gs, int precision) { - return MeosLibrary.meos.geo_as_ewkt(gs, precision); + public static Pointer union_spanset_int(Pointer ss, int i) { + return MeosLibrary.meos.union_spanset_int(ss, i); } @SuppressWarnings("unused") - public static String geo_as_geojson(Pointer gs, int option, int precision, String srs) { - return MeosLibrary.meos.geo_as_geojson(gs, option, precision, srs); + public static Pointer union_spanset_span(Pointer ss, Pointer s) { + return MeosLibrary.meos.union_spanset_span(ss, s); } @SuppressWarnings("unused") - public static String geo_as_hexewkb(Pointer gs, String endian) { - return MeosLibrary.meos.geo_as_hexewkb(gs, endian); + public static Pointer union_spanset_spanset(Pointer ss1, Pointer ss2) { + return MeosLibrary.meos.union_spanset_spanset(ss1, ss2); } @SuppressWarnings("unused") - public static String geo_as_text(Pointer gs, int precision) { - return MeosLibrary.meos.geo_as_text(gs, precision); + public static Pointer union_spanset_timestamptz(Pointer ss, OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.union_spanset_timestamptz(ss, t_new); } @SuppressWarnings("unused") - public static Pointer geo_from_ewkb(Pointer bytea_wkb, int srid) { - return MeosLibrary.meos.geo_from_ewkb(bytea_wkb, srid); + public static Pointer union_text_set(Pointer txt, Pointer s) { + return MeosLibrary.meos.union_text_set(txt, s); } @SuppressWarnings("unused") - public static Pointer geo_from_geojson(String geojson) { - return MeosLibrary.meos.geo_from_geojson(geojson); + public static Pointer union_timestamptz_set(OffsetDateTime t, Pointer s) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.union_timestamptz_set(t_new, s); } - + @SuppressWarnings("unused") - public static Pointer geo_from_text(String wkt, int srid) { - return MeosLibrary.meos.geo_from_text(wkt, srid); + public static Pointer union_timestamptz_span(OffsetDateTime t, Pointer s) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.union_timestamptz_span(t_new, s); } - + @SuppressWarnings("unused") - public static boolean geom_contains(Pointer gs1, Pointer gs2) { - return MeosLibrary.meos.geom_contains(gs1, gs2); + public static Pointer union_timestamptz_spanset(OffsetDateTime t, Pointer ss) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.union_timestamptz_spanset(t_new, ss); } - + @SuppressWarnings("unused") - public static boolean geom_covers(Pointer gs1, Pointer gs2) { - return MeosLibrary.meos.geom_covers(gs1, gs2); + public static long distance_bigintset_bigintset(Pointer s1, Pointer s2) { + return MeosLibrary.meos.distance_bigintset_bigintset(s1, s2); } - + @SuppressWarnings("unused") - public static boolean geom_disjoint2d(Pointer gs1, Pointer gs2) { - return MeosLibrary.meos.geom_disjoint2d(gs1, gs2); + public static long distance_bigintspan_bigintspan(Pointer s1, Pointer s2) { + return MeosLibrary.meos.distance_bigintspan_bigintspan(s1, s2); } - + @SuppressWarnings("unused") - public static boolean geom_dwithin2d(Pointer gs1, Pointer gs2, double tolerance) { - return MeosLibrary.meos.geom_dwithin2d(gs1, gs2, tolerance); + public static long distance_bigintspanset_bigintspan(Pointer ss, Pointer s) { + return MeosLibrary.meos.distance_bigintspanset_bigintspan(ss, s); } - + @SuppressWarnings("unused") - public static boolean geom_intersects2d(Pointer gs1, Pointer gs2) { - return MeosLibrary.meos.geom_intersects2d(gs1, gs2); + public static long distance_bigintspanset_bigintspanset(Pointer ss1, Pointer ss2) { + return MeosLibrary.meos.distance_bigintspanset_bigintspanset(ss1, ss2); } - + @SuppressWarnings("unused") - public static boolean geom_touches(Pointer gs1, Pointer gs2) { - return MeosLibrary.meos.geom_touches(gs1, gs2); + public static int distance_dateset_dateset(Pointer s1, Pointer s2) { + return MeosLibrary.meos.distance_dateset_dateset(s1, s2); } - + @SuppressWarnings("unused") - public static Pointer geom_boundary(Pointer gs) { - return MeosLibrary.meos.geom_boundary(gs); + public static int distance_datespan_datespan(Pointer s1, Pointer s2) { + return MeosLibrary.meos.distance_datespan_datespan(s1, s2); } - + @SuppressWarnings("unused") - public static Pointer geom_buffer(Pointer gs, double size, String params) { - return MeosLibrary.meos.geom_buffer(gs, size, params); + public static int distance_datespanset_datespan(Pointer ss, Pointer s) { + return MeosLibrary.meos.distance_datespanset_datespan(ss, s); } - + @SuppressWarnings("unused") - public static Pointer geom_centroid(Pointer gs) { - return MeosLibrary.meos.geom_centroid(gs); + public static int distance_datespanset_datespanset(Pointer ss1, Pointer ss2) { + return MeosLibrary.meos.distance_datespanset_datespanset(ss1, ss2); } - + @SuppressWarnings("unused") - public static Pointer geom_convex_hull(Pointer gs) { - return MeosLibrary.meos.geom_convex_hull(gs); + public static double distance_floatset_floatset(Pointer s1, Pointer s2) { + return MeosLibrary.meos.distance_floatset_floatset(s1, s2); } - + @SuppressWarnings("unused") - public static Pointer geom_difference2d(Pointer gs1, Pointer gs2) { - return MeosLibrary.meos.geom_difference2d(gs1, gs2); + public static double distance_floatspan_floatspan(Pointer s1, Pointer s2) { + return MeosLibrary.meos.distance_floatspan_floatspan(s1, s2); } - + @SuppressWarnings("unused") - public static Pointer geom_intersection2d(Pointer gs1, Pointer gs2) { - return MeosLibrary.meos.geom_intersection2d(gs1, gs2); + public static double distance_floatspanset_floatspan(Pointer ss, Pointer s) { + return MeosLibrary.meos.distance_floatspanset_floatspan(ss, s); } - + @SuppressWarnings("unused") - public static Pointer geom_unary_union(Pointer gs, double prec) { - return MeosLibrary.meos.geom_unary_union(gs, prec); + public static double distance_floatspanset_floatspanset(Pointer ss1, Pointer ss2) { + return MeosLibrary.meos.distance_floatspanset_floatspanset(ss1, ss2); } - + @SuppressWarnings("unused") - public static double geom_distance2d(Pointer gs1, Pointer gs2) { - return MeosLibrary.meos.geom_distance2d(gs1, gs2); + public static int distance_intset_intset(Pointer s1, Pointer s2) { + return MeosLibrary.meos.distance_intset_intset(s1, s2); } - + @SuppressWarnings("unused") - public static double geom_length(Pointer gs) { - return MeosLibrary.meos.geom_length(gs); + public static int distance_intspan_intspan(Pointer s1, Pointer s2) { + return MeosLibrary.meos.distance_intspan_intspan(s1, s2); } - + @SuppressWarnings("unused") - public static double geom_perimeter(Pointer gs) { - return MeosLibrary.meos.geom_perimeter(gs); + public static int distance_intspanset_intspan(Pointer ss, Pointer s) { + return MeosLibrary.meos.distance_intspanset_intspan(ss, s); } - + @SuppressWarnings("unused") - public static Pointer geo_reverse(Pointer gs) { - return MeosLibrary.meos.geo_reverse(gs); + public static int distance_intspanset_intspanset(Pointer ss1, Pointer ss2) { + return MeosLibrary.meos.distance_intspanset_intspanset(ss1, ss2); } - + @SuppressWarnings("unused") - public static Pointer geo_round(Pointer gs, int maxdd) { - return MeosLibrary.meos.geo_round(gs, maxdd); + public static long distance_set_bigint(Pointer s, long i) { + return MeosLibrary.meos.distance_set_bigint(s, i); } - + @SuppressWarnings("unused") - public static Pointer line_interpolate_point(Pointer gs, double distance_fraction, boolean repeat) { - return MeosLibrary.meos.line_interpolate_point(gs, distance_fraction, repeat); + public static int distance_set_date(Pointer s, int d) { + return MeosLibrary.meos.distance_set_date(s, d); } - + @SuppressWarnings("unused") - public static Pointer line_substring(Pointer gs, double from, double to) { - return MeosLibrary.meos.line_substring(gs, from, to); + public static double distance_set_float(Pointer s, double d) { + return MeosLibrary.meos.distance_set_float(s, d); } - + @SuppressWarnings("unused") - public static Pointer geom_to_geog(Pointer geom) { - return MeosLibrary.meos.geom_to_geog(geom); + public static int distance_set_int(Pointer s, int i) { + return MeosLibrary.meos.distance_set_int(s, i); } - + @SuppressWarnings("unused") - public static String geo_out(Pointer gs) { - return MeosLibrary.meos.geo_out(gs); + public static double distance_set_timestamptz(Pointer s, OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.distance_set_timestamptz(s, t_new); } @SuppressWarnings("unused") - public static boolean geo_same(Pointer gs1, Pointer gs2) { - return MeosLibrary.meos.geo_same(gs1, gs2); + public static long distance_span_bigint(Pointer s, long i) { + return MeosLibrary.meos.distance_span_bigint(s, i); } @SuppressWarnings("unused") - public static Pointer geography_from_hexewkb(String wkt) { - return MeosLibrary.meos.geography_from_hexewkb(wkt); + public static int distance_span_date(Pointer s, int d) { + return MeosLibrary.meos.distance_span_date(s, d); } @SuppressWarnings("unused") - public static Pointer geography_from_text(String wkt, int srid) { - return MeosLibrary.meos.geography_from_text(wkt, srid); + public static double distance_span_float(Pointer s, double d) { + return MeosLibrary.meos.distance_span_float(s, d); } @SuppressWarnings("unused") - public static Pointer geometry_from_hexewkb(String wkt) { - return MeosLibrary.meos.geometry_from_hexewkb(wkt); + public static int distance_span_int(Pointer s, int i) { + return MeosLibrary.meos.distance_span_int(s, i); } @SuppressWarnings("unused") - public static Pointer geometry_from_text(String wkt, int srid) { - return MeosLibrary.meos.geometry_from_text(wkt, srid); + public static double distance_span_timestamptz(Pointer s, OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.distance_span_timestamptz(s, t_new); } @SuppressWarnings("unused") - public static Pointer pgis_geography_in(String str, int typmod) { - return MeosLibrary.meos.pgis_geography_in(str, typmod); + public static long distance_spanset_bigint(Pointer ss, long i) { + return MeosLibrary.meos.distance_spanset_bigint(ss, i); } @SuppressWarnings("unused") - public static Pointer pgis_geometry_in(String str, int typmod) { - return MeosLibrary.meos.pgis_geometry_in(str, typmod); + public static int distance_spanset_date(Pointer ss, int d) { + return MeosLibrary.meos.distance_spanset_date(ss, d); } @SuppressWarnings("unused") - public static Pointer bigintset_in(String str) { - return MeosLibrary.meos.bigintset_in(str); + public static double distance_spanset_float(Pointer ss, double d) { + return MeosLibrary.meos.distance_spanset_float(ss, d); } @SuppressWarnings("unused") - public static String bigintset_out(Pointer set) { - return MeosLibrary.meos.bigintset_out(set); + public static int distance_spanset_int(Pointer ss, int i) { + return MeosLibrary.meos.distance_spanset_int(ss, i); } @SuppressWarnings("unused") - public static Pointer bigintspan_in(String str) { - return MeosLibrary.meos.bigintspan_in(str); + public static double distance_spanset_timestamptz(Pointer ss, OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.distance_spanset_timestamptz(ss, t_new); } @SuppressWarnings("unused") - public static String bigintspan_out(Pointer s) { - return MeosLibrary.meos.bigintspan_out(s); + public static double distance_tstzset_tstzset(Pointer s1, Pointer s2) { + return MeosLibrary.meos.distance_tstzset_tstzset(s1, s2); } @SuppressWarnings("unused") - public static Pointer bigintspanset_in(String str) { - return MeosLibrary.meos.bigintspanset_in(str); + public static double distance_tstzspan_tstzspan(Pointer s1, Pointer s2) { + return MeosLibrary.meos.distance_tstzspan_tstzspan(s1, s2); } @SuppressWarnings("unused") - public static String bigintspanset_out(Pointer ss) { - return MeosLibrary.meos.bigintspanset_out(ss); + public static double distance_tstzspanset_tstzspan(Pointer ss, Pointer s) { + return MeosLibrary.meos.distance_tstzspanset_tstzspan(ss, s); } @SuppressWarnings("unused") - public static Pointer dateset_in(String str) { - return MeosLibrary.meos.dateset_in(str); + public static double distance_tstzspanset_tstzspanset(Pointer ss1, Pointer ss2) { + return MeosLibrary.meos.distance_tstzspanset_tstzspanset(ss1, ss2); } @SuppressWarnings("unused") - public static String dateset_out(Pointer s) { - return MeosLibrary.meos.dateset_out(s); + public static Pointer bigint_extent_transfn(Pointer state, long i) { + return MeosLibrary.meos.bigint_extent_transfn(state, i); } @SuppressWarnings("unused") - public static Pointer datespan_in(String str) { - return MeosLibrary.meos.datespan_in(str); + public static Pointer bigint_union_transfn(Pointer state, long i) { + return MeosLibrary.meos.bigint_union_transfn(state, i); } @SuppressWarnings("unused") - public static String datespan_out(Pointer s) { - return MeosLibrary.meos.datespan_out(s); + public static Pointer date_extent_transfn(Pointer state, int d) { + return MeosLibrary.meos.date_extent_transfn(state, d); } @SuppressWarnings("unused") - public static Pointer datespanset_in(String str) { - return MeosLibrary.meos.datespanset_in(str); + public static Pointer date_union_transfn(Pointer state, int d) { + return MeosLibrary.meos.date_union_transfn(state, d); } @SuppressWarnings("unused") - public static String datespanset_out(Pointer ss) { - return MeosLibrary.meos.datespanset_out(ss); + public static Pointer float_extent_transfn(Pointer state, double d) { + return MeosLibrary.meos.float_extent_transfn(state, d); } @SuppressWarnings("unused") - public static Pointer floatset_in(String str) { - return MeosLibrary.meos.floatset_in(str); + public static Pointer float_union_transfn(Pointer state, double d) { + return MeosLibrary.meos.float_union_transfn(state, d); } @SuppressWarnings("unused") - public static String floatset_out(Pointer set, int maxdd) { - return MeosLibrary.meos.floatset_out(set, maxdd); + public static Pointer int_extent_transfn(Pointer state, int i) { + return MeosLibrary.meos.int_extent_transfn(state, i); } @SuppressWarnings("unused") - public static Pointer floatspan_in(String str) { - return MeosLibrary.meos.floatspan_in(str); + public static Pointer int_union_transfn(Pointer state, int i) { + return MeosLibrary.meos.int_union_transfn(state, i); } @SuppressWarnings("unused") - public static String floatspan_out(Pointer s, int maxdd) { - return MeosLibrary.meos.floatspan_out(s, maxdd); + public static Pointer set_extent_transfn(Pointer state, Pointer s) { + return MeosLibrary.meos.set_extent_transfn(state, s); } @SuppressWarnings("unused") - public static Pointer floatspanset_in(String str) { - return MeosLibrary.meos.floatspanset_in(str); + public static Pointer set_union_finalfn(Pointer state) { + return MeosLibrary.meos.set_union_finalfn(state); } @SuppressWarnings("unused") - public static String floatspanset_out(Pointer ss, int maxdd) { - return MeosLibrary.meos.floatspanset_out(ss, maxdd); + public static Pointer set_union_transfn(Pointer state, Pointer s) { + return MeosLibrary.meos.set_union_transfn(state, s); } @SuppressWarnings("unused") - public static Pointer geogset_in(String str) { - return MeosLibrary.meos.geogset_in(str); + public static Pointer span_extent_transfn(Pointer state, Pointer s) { + return MeosLibrary.meos.span_extent_transfn(state, s); } @SuppressWarnings("unused") - public static Pointer geomset_in(String str) { - return MeosLibrary.meos.geomset_in(str); + public static Pointer span_union_transfn(Pointer state, Pointer s) { + return MeosLibrary.meos.span_union_transfn(state, s); } @SuppressWarnings("unused") - public static String geoset_as_ewkt(Pointer set, int maxdd) { - return MeosLibrary.meos.geoset_as_ewkt(set, maxdd); + public static Pointer spanset_extent_transfn(Pointer state, Pointer ss) { + return MeosLibrary.meos.spanset_extent_transfn(state, ss); } @SuppressWarnings("unused") - public static String geoset_as_text(Pointer set, int maxdd) { - return MeosLibrary.meos.geoset_as_text(set, maxdd); + public static Pointer spanset_union_finalfn(Pointer state) { + return MeosLibrary.meos.spanset_union_finalfn(state); } @SuppressWarnings("unused") - public static String geoset_out(Pointer set, int maxdd) { - return MeosLibrary.meos.geoset_out(set, maxdd); + public static Pointer spanset_union_transfn(Pointer state, Pointer ss) { + return MeosLibrary.meos.spanset_union_transfn(state, ss); } @SuppressWarnings("unused") - public static Pointer intset_in(String str) { - return MeosLibrary.meos.intset_in(str); + public static Pointer text_union_transfn(Pointer state, Pointer txt) { + return MeosLibrary.meos.text_union_transfn(state, txt); } @SuppressWarnings("unused") - public static String intset_out(Pointer set) { - return MeosLibrary.meos.intset_out(set); + public static Pointer timestamptz_extent_transfn(Pointer state, OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.timestamptz_extent_transfn(state, t_new); } @SuppressWarnings("unused") - public static Pointer intspan_in(String str) { - return MeosLibrary.meos.intspan_in(str); + public static Pointer timestamptz_union_transfn(Pointer state, OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.timestamptz_union_transfn(state, t_new); + } + + @SuppressWarnings("unused") + public static long bigint_get_bin(long value, long vsize, long vorigin) { + return MeosLibrary.meos.bigint_get_bin(value, vsize, vorigin); } @SuppressWarnings("unused") - public static String intspan_out(Pointer s) { - return MeosLibrary.meos.intspan_out(s); + public static Pointer bigintspan_bins(Pointer s, long vsize, long vorigin, Pointer count) { + return MeosLibrary.meos.bigintspan_bins(s, vsize, vorigin, count); } @SuppressWarnings("unused") - public static Pointer intspanset_in(String str) { - return MeosLibrary.meos.intspanset_in(str); + public static Pointer bigintspanset_bins(Pointer ss, long vsize, long vorigin, Pointer count) { + return MeosLibrary.meos.bigintspanset_bins(ss, vsize, vorigin, count); } @SuppressWarnings("unused") - public static String intspanset_out(Pointer ss) { - return MeosLibrary.meos.intspanset_out(ss); + public static int date_get_bin(int d, Pointer duration, int torigin) { + return MeosLibrary.meos.date_get_bin(d, duration, torigin); } @SuppressWarnings("unused") - public static String set_as_hexwkb(Pointer s, byte variant) { - Runtime runtime = Runtime.getSystemRuntime(); - Pointer size_out = Memory.allocateDirect(runtime, Long.BYTES); - return MeosLibrary.meos.set_as_hexwkb(s, variant, size_out); + public static Pointer datespan_bins(Pointer s, Pointer duration, int torigin, Pointer count) { + return MeosLibrary.meos.datespan_bins(s, duration, torigin, count); } @SuppressWarnings("unused") - public static Pointer set_as_wkb(Pointer s, byte variant) { - Runtime runtime = Runtime.getSystemRuntime(); - Pointer size_out = Memory.allocateDirect(runtime, Long.BYTES); - return MeosLibrary.meos.set_as_wkb(s, variant, size_out); + public static Pointer datespanset_bins(Pointer ss, Pointer duration, int torigin, Pointer count) { + return MeosLibrary.meos.datespanset_bins(ss, duration, torigin, count); } @SuppressWarnings("unused") - public static Pointer set_from_hexwkb(String hexwkb) { - return MeosLibrary.meos.set_from_hexwkb(hexwkb); + public static double float_get_bin(double value, double vsize, double vorigin) { + return MeosLibrary.meos.float_get_bin(value, vsize, vorigin); } @SuppressWarnings("unused") - public static Pointer set_from_wkb(Pointer wkb, long size) { - return MeosLibrary.meos.set_from_wkb(wkb, size); + public static Pointer floatspan_bins(Pointer s, double vsize, double vorigin, Pointer count) { + return MeosLibrary.meos.floatspan_bins(s, vsize, vorigin, count); } @SuppressWarnings("unused") - public static String span_as_hexwkb(Pointer s, byte variant) { - Runtime runtime = Runtime.getSystemRuntime(); - Pointer size_out = Memory.allocateDirect(runtime, Long.BYTES); - return MeosLibrary.meos.span_as_hexwkb(s, variant, size_out); + public static Pointer floatspanset_bins(Pointer ss, double vsize, double vorigin, Pointer count) { + return MeosLibrary.meos.floatspanset_bins(ss, vsize, vorigin, count); } @SuppressWarnings("unused") - public static Pointer span_as_wkb(Pointer s, byte variant) { - Runtime runtime = Runtime.getSystemRuntime(); - Pointer size_out = Memory.allocateDirect(runtime, Long.BYTES); - return MeosLibrary.meos.span_as_wkb(s, variant, size_out); + public static int int_get_bin(int value, int vsize, int vorigin) { + return MeosLibrary.meos.int_get_bin(value, vsize, vorigin); } @SuppressWarnings("unused") - public static Pointer span_from_hexwkb(String hexwkb) { - return MeosLibrary.meos.span_from_hexwkb(hexwkb); + public static Pointer intspan_bins(Pointer s, int vsize, int vorigin, Pointer count) { + return MeosLibrary.meos.intspan_bins(s, vsize, vorigin, count); } @SuppressWarnings("unused") - public static Pointer span_from_wkb(Pointer wkb, long size) { - return MeosLibrary.meos.span_from_wkb(wkb, size); + public static Pointer intspanset_bins(Pointer ss, int vsize, int vorigin, Pointer count) { + return MeosLibrary.meos.intspanset_bins(ss, vsize, vorigin, count); } @SuppressWarnings("unused") - public static String spanset_as_hexwkb(Pointer ss, byte variant) { - Runtime runtime = Runtime.getSystemRuntime(); - Pointer size_out = Memory.allocateDirect(runtime, Long.BYTES); - return MeosLibrary.meos.spanset_as_hexwkb(ss, variant, size_out); + public static OffsetDateTime timestamptz_get_bin(OffsetDateTime t, Pointer duration, OffsetDateTime torigin) { + var t_new = t.toEpochSecond(); + var torigin_new = torigin.toEpochSecond(); + var result = MeosLibrary.meos.timestamptz_get_bin(t_new, duration, torigin_new); + Instant instant = Instant.ofEpochSecond(result); + return OffsetDateTime.ofInstant(instant, ZoneOffset.UTC); } @SuppressWarnings("unused") - public static Pointer spanset_as_wkb(Pointer ss, byte variant) { - Runtime runtime = Runtime.getSystemRuntime(); - Pointer size_out = Memory.allocateDirect(runtime, Long.BYTES); - return MeosLibrary.meos.spanset_as_wkb(ss, variant, size_out); + public static Pointer tstzspan_bins(Pointer s, Pointer duration, OffsetDateTime origin, Pointer count) { + var origin_new = origin.toEpochSecond(); + return MeosLibrary.meos.tstzspan_bins(s, duration, origin_new, count); } @SuppressWarnings("unused") - public static Pointer spanset_from_hexwkb(String hexwkb) { - return MeosLibrary.meos.spanset_from_hexwkb(hexwkb); + public static Pointer tstzspanset_bins(Pointer ss, Pointer duration, OffsetDateTime torigin, Pointer count) { + var torigin_new = torigin.toEpochSecond(); + return MeosLibrary.meos.tstzspanset_bins(ss, duration, torigin_new, count); } @SuppressWarnings("unused") - public static Pointer spanset_from_wkb(Pointer wkb, long size) { - return MeosLibrary.meos.spanset_from_wkb(wkb, size); + public static String tbox_as_hexwkb(Pointer box, byte variant, Pointer size) { + return MeosLibrary.meos.tbox_as_hexwkb(box, variant, size); } @SuppressWarnings("unused") - public static Pointer textset_in(String str) { - return MeosLibrary.meos.textset_in(str); + public static Pointer tbox_as_wkb(Pointer box, byte variant) { + Runtime runtime = Runtime.getSystemRuntime(); + Pointer size_out = Memory.allocateDirect(runtime, Long.BYTES); + return MeosLibrary.meos.tbox_as_wkb(box, variant, size_out); } @SuppressWarnings("unused") - public static String textset_out(Pointer set) { - return MeosLibrary.meos.textset_out(set); + public static Pointer tbox_from_hexwkb(String hexwkb) { + return MeosLibrary.meos.tbox_from_hexwkb(hexwkb); } @SuppressWarnings("unused") - public static Pointer tstzset_in(String str) { - return MeosLibrary.meos.tstzset_in(str); + public static Pointer tbox_from_wkb(Pointer wkb, long size) { + return MeosLibrary.meos.tbox_from_wkb(wkb, size); } @SuppressWarnings("unused") - public static String tstzset_out(Pointer set) { - return MeosLibrary.meos.tstzset_out(set); + public static Pointer tbox_in(String str) { + return MeosLibrary.meos.tbox_in(str); } @SuppressWarnings("unused") - public static Pointer tstzspan_in(String str) { - return MeosLibrary.meos.tstzspan_in(str); + public static String tbox_out(Pointer box, int maxdd) { + return MeosLibrary.meos.tbox_out(box, maxdd); } @SuppressWarnings("unused") - public static String tstzspan_out(Pointer s) { - return MeosLibrary.meos.tstzspan_out(s); + public static Pointer float_timestamptz_to_tbox(double d, OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.float_timestamptz_to_tbox(d, t_new); } @SuppressWarnings("unused") - public static Pointer tstzspanset_in(String str) { - return MeosLibrary.meos.tstzspanset_in(str); + public static Pointer float_tstzspan_to_tbox(double d, Pointer s) { + return MeosLibrary.meos.float_tstzspan_to_tbox(d, s); } @SuppressWarnings("unused") - public static String tstzspanset_out(Pointer ss) { - return MeosLibrary.meos.tstzspanset_out(ss); + public static Pointer int_timestamptz_to_tbox(int i, OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.int_timestamptz_to_tbox(i, t_new); } @SuppressWarnings("unused") - public static Pointer bigintset_make(Pointer values, int count) { - return MeosLibrary.meos.bigintset_make(values, count); + public static Pointer int_tstzspan_to_tbox(int i, Pointer s) { + return MeosLibrary.meos.int_tstzspan_to_tbox(i, s); } @SuppressWarnings("unused") - public static Pointer bigintspan_make(long lower, long upper, boolean lower_inc, boolean upper_inc) { - return MeosLibrary.meos.bigintspan_make(lower, upper, lower_inc, upper_inc); + public static Pointer numspan_tstzspan_to_tbox(Pointer span, Pointer s) { + return MeosLibrary.meos.numspan_tstzspan_to_tbox(span, s); } @SuppressWarnings("unused") - public static Pointer dateset_make(Pointer values, int count) { - return MeosLibrary.meos.dateset_make(values, count); + public static Pointer numspan_timestamptz_to_tbox(Pointer span, OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.numspan_timestamptz_to_tbox(span, t_new); } @SuppressWarnings("unused") - public static Pointer datespan_make(int lower, int upper, boolean lower_inc, boolean upper_inc) { - return MeosLibrary.meos.datespan_make(lower, upper, lower_inc, upper_inc); + public static Pointer tbox_copy(Pointer box) { + return MeosLibrary.meos.tbox_copy(box); } @SuppressWarnings("unused") - public static Pointer floatset_make(Pointer values, int count) { - return MeosLibrary.meos.floatset_make(values, count); + public static Pointer tbox_make(Pointer s, Pointer p) { + return MeosLibrary.meos.tbox_make(s, p); } @SuppressWarnings("unused") - public static Pointer floatspan_make(double lower, double upper, boolean lower_inc, boolean upper_inc) { - return MeosLibrary.meos.floatspan_make(lower, upper, lower_inc, upper_inc); + public static Pointer float_to_tbox(double d) { + return MeosLibrary.meos.float_to_tbox(d); } @SuppressWarnings("unused") - public static Pointer geoset_make(Pointer values, int count) { - return MeosLibrary.meos.geoset_make(values, count); + public static Pointer int_to_tbox(int i) { + return MeosLibrary.meos.int_to_tbox(i); } @SuppressWarnings("unused") - public static Pointer intset_make(Pointer values, int count) { - return MeosLibrary.meos.intset_make(values, count); + public static Pointer set_to_tbox(Pointer s) { + return MeosLibrary.meos.set_to_tbox(s); } @SuppressWarnings("unused") - public static Pointer intspan_make(int lower, int upper, boolean lower_inc, boolean upper_inc) { - return MeosLibrary.meos.intspan_make(lower, upper, lower_inc, upper_inc); + public static Pointer span_to_tbox(Pointer s) { + return MeosLibrary.meos.span_to_tbox(s); } @SuppressWarnings("unused") - public static Pointer set_copy(Pointer s) { - return MeosLibrary.meos.set_copy(s); + public static Pointer spanset_to_tbox(Pointer ss) { + return MeosLibrary.meos.spanset_to_tbox(ss); } @SuppressWarnings("unused") - public static Pointer span_copy(Pointer s) { - return MeosLibrary.meos.span_copy(s); + public static Pointer tbox_to_intspan(Pointer box) { + return MeosLibrary.meos.tbox_to_intspan(box); } @SuppressWarnings("unused") - public static Pointer spanset_copy(Pointer ss) { - return MeosLibrary.meos.spanset_copy(ss); + public static Pointer tbox_to_floatspan(Pointer box) { + return MeosLibrary.meos.tbox_to_floatspan(box); } @SuppressWarnings("unused") - public static Pointer spanset_make(Pointer spans, int count, boolean normalize, boolean order) { - return MeosLibrary.meos.spanset_make(spans, count, normalize, order); + public static Pointer tbox_to_tstzspan(Pointer box) { + return MeosLibrary.meos.tbox_to_tstzspan(box); } @SuppressWarnings("unused") - public static Pointer textset_make(Pointer values, int count) { - return MeosLibrary.meos.textset_make(values, count); + public static Pointer timestamptz_to_tbox(OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.timestamptz_to_tbox(t_new); } @SuppressWarnings("unused") - public static Pointer tstzset_make(Pointer values, int count) { - return MeosLibrary.meos.tstzset_make(values, count); + public static int tbox_hash(Pointer box) { + return MeosLibrary.meos.tbox_hash(box); } @SuppressWarnings("unused") - public static Pointer tstzspan_make(OffsetDateTime lower, OffsetDateTime upper, boolean lower_inc, boolean upper_inc) { - var lower_new = lower.toEpochSecond(); - var upper_new = upper.toEpochSecond(); - return MeosLibrary.meos.tstzspan_make(lower_new, upper_new, lower_inc, upper_inc); + public static long tbox_hash_extended(Pointer box, long seed) { + return MeosLibrary.meos.tbox_hash_extended(box, seed); } @SuppressWarnings("unused") - public static Pointer bigint_to_set(long i) { - return MeosLibrary.meos.bigint_to_set(i); + public static boolean tbox_hast(Pointer box) { + return MeosLibrary.meos.tbox_hast(box); } @SuppressWarnings("unused") - public static Pointer bigint_to_span(int i) { - return MeosLibrary.meos.bigint_to_span(i); + public static boolean tbox_hasx(Pointer box) { + return MeosLibrary.meos.tbox_hasx(box); } @SuppressWarnings("unused") - public static Pointer bigint_to_spanset(int i) { - return MeosLibrary.meos.bigint_to_spanset(i); + public static Pointer tbox_tmax(Pointer box) { + boolean out; + Runtime runtime = Runtime.getSystemRuntime(); + Pointer result = Memory.allocateDirect(runtime, Long.BYTES); + out = MeosLibrary.meos.tbox_tmax(box, result); + Pointer new_result = result.getPointer(0); + return out ? new_result : null ; } @SuppressWarnings("unused") - public static Pointer date_to_set(int d) { - return MeosLibrary.meos.date_to_set(d); + public static Pointer tbox_tmax_inc(Pointer box) { + boolean out; + Runtime runtime = Runtime.getSystemRuntime(); + Pointer result = Memory.allocateDirect(runtime, Long.BYTES); + out = MeosLibrary.meos.tbox_tmax_inc(box, result); + Pointer new_result = result.getPointer(0); + return out ? new_result : null ; } @SuppressWarnings("unused") - public static Pointer date_to_span(int d) { - return MeosLibrary.meos.date_to_span(d); + public static Pointer tbox_tmin(Pointer box) { + boolean out; + Runtime runtime = Runtime.getSystemRuntime(); + Pointer result = Memory.allocateDirect(runtime, Long.BYTES); + out = MeosLibrary.meos.tbox_tmin(box, result); + Pointer new_result = result.getPointer(0); + return out ? new_result : null ; } @SuppressWarnings("unused") - public static Pointer date_to_spanset(int d) { - return MeosLibrary.meos.date_to_spanset(d); + public static Pointer tbox_tmin_inc(Pointer box) { + boolean out; + Runtime runtime = Runtime.getSystemRuntime(); + Pointer result = Memory.allocateDirect(runtime, Long.BYTES); + out = MeosLibrary.meos.tbox_tmin_inc(box, result); + Pointer new_result = result.getPointer(0); + return out ? new_result : null ; } @SuppressWarnings("unused") - public static Pointer dateset_to_tstzset(Pointer s) { - return MeosLibrary.meos.dateset_to_tstzset(s); + public static Pointer tbox_xmax(Pointer box) { + boolean out; + Runtime runtime = Runtime.getSystemRuntime(); + Pointer result = Memory.allocateDirect(runtime, Long.BYTES); + out = MeosLibrary.meos.tbox_xmax(box, result); + Pointer new_result = result.getPointer(0); + return out ? new_result : null ; } @SuppressWarnings("unused") - public static Pointer datespan_to_tstzspan(Pointer s) { - return MeosLibrary.meos.datespan_to_tstzspan(s); + public static Pointer tbox_xmax_inc(Pointer box) { + boolean out; + Runtime runtime = Runtime.getSystemRuntime(); + Pointer result = Memory.allocateDirect(runtime, Long.BYTES); + out = MeosLibrary.meos.tbox_xmax_inc(box, result); + Pointer new_result = result.getPointer(0); + return out ? new_result : null ; } @SuppressWarnings("unused") - public static Pointer datespanset_to_tstzspanset(Pointer ss) { - return MeosLibrary.meos.datespanset_to_tstzspanset(ss); + public static Pointer tbox_xmin(Pointer box) { + boolean out; + Runtime runtime = Runtime.getSystemRuntime(); + Pointer result = Memory.allocateDirect(runtime, Long.BYTES); + out = MeosLibrary.meos.tbox_xmin(box, result); + Pointer new_result = result.getPointer(0); + return out ? new_result : null ; } @SuppressWarnings("unused") - public static Pointer float_to_set(double d) { - return MeosLibrary.meos.float_to_set(d); + public static Pointer tbox_xmin_inc(Pointer box) { + boolean out; + Runtime runtime = Runtime.getSystemRuntime(); + Pointer result = Memory.allocateDirect(runtime, Long.BYTES); + out = MeosLibrary.meos.tbox_xmin_inc(box, result); + Pointer new_result = result.getPointer(0); + return out ? new_result : null ; } @SuppressWarnings("unused") - public static Pointer float_to_span(double d) { - return MeosLibrary.meos.float_to_span(d); + public static Pointer tboxfloat_xmax(Pointer box) { + boolean out; + Runtime runtime = Runtime.getSystemRuntime(); + Pointer result = Memory.allocateDirect(runtime, Long.BYTES); + out = MeosLibrary.meos.tboxfloat_xmax(box, result); + Pointer new_result = result.getPointer(0); + return out ? new_result : null ; } @SuppressWarnings("unused") - public static Pointer float_to_spanset(double d) { - return MeosLibrary.meos.float_to_spanset(d); + public static Pointer tboxfloat_xmin(Pointer box) { + boolean out; + Runtime runtime = Runtime.getSystemRuntime(); + Pointer result = Memory.allocateDirect(runtime, Long.BYTES); + out = MeosLibrary.meos.tboxfloat_xmin(box, result); + Pointer new_result = result.getPointer(0); + return out ? new_result : null ; } @SuppressWarnings("unused") - public static Pointer floatset_to_intset(Pointer s) { - return MeosLibrary.meos.floatset_to_intset(s); + public static Pointer tboxint_xmax(Pointer box) { + boolean out; + Runtime runtime = Runtime.getSystemRuntime(); + Pointer result = Memory.allocateDirect(runtime, Long.BYTES); + out = MeosLibrary.meos.tboxint_xmax(box, result); + Pointer new_result = result.getPointer(0); + return out ? new_result : null ; } @SuppressWarnings("unused") - public static Pointer floatspan_to_intspan(Pointer s) { - return MeosLibrary.meos.floatspan_to_intspan(s); + public static Pointer tboxint_xmin(Pointer box) { + boolean out; + Runtime runtime = Runtime.getSystemRuntime(); + Pointer result = Memory.allocateDirect(runtime, Long.BYTES); + out = MeosLibrary.meos.tboxint_xmin(box, result); + Pointer new_result = result.getPointer(0); + return out ? new_result : null ; } @SuppressWarnings("unused") - public static Pointer floatspanset_to_intspanset(Pointer ss) { - return MeosLibrary.meos.floatspanset_to_intspanset(ss); + public static Pointer tbox_expand_time(Pointer box, Pointer interv) { + return MeosLibrary.meos.tbox_expand_time(box, interv); } @SuppressWarnings("unused") - public static Pointer geo_to_set(Pointer gs) { - return MeosLibrary.meos.geo_to_set(gs); + public static Pointer tbox_round(Pointer box, int maxdd) { + return MeosLibrary.meos.tbox_round(box, maxdd); } @SuppressWarnings("unused") - public static Pointer int_to_set(int i) { - return MeosLibrary.meos.int_to_set(i); + public static Pointer tbox_shift_scale_time(Pointer box, Pointer shift, Pointer duration) { + return MeosLibrary.meos.tbox_shift_scale_time(box, shift, duration); } @SuppressWarnings("unused") - public static Pointer int_to_span(int i) { - return MeosLibrary.meos.int_to_span(i); + public static Pointer tfloatbox_expand(Pointer box, double d) { + return MeosLibrary.meos.tfloatbox_expand(box, d); } @SuppressWarnings("unused") - public static Pointer int_to_spanset(int i) { - return MeosLibrary.meos.int_to_spanset(i); + public static Pointer tfloatbox_shift_scale(Pointer box, double shift, double width, boolean hasshift, boolean haswidth) { + return MeosLibrary.meos.tfloatbox_shift_scale(box, shift, width, hasshift, haswidth); } @SuppressWarnings("unused") - public static Pointer intset_to_floatset(Pointer s) { - return MeosLibrary.meos.intset_to_floatset(s); + public static Pointer tintbox_expand(Pointer box, int i) { + return MeosLibrary.meos.tintbox_expand(box, i); } @SuppressWarnings("unused") - public static Pointer intspan_to_floatspan(Pointer s) { - return MeosLibrary.meos.intspan_to_floatspan(s); + public static Pointer tintbox_shift_scale(Pointer box, int shift, int width, boolean hasshift, boolean haswidth) { + return MeosLibrary.meos.tintbox_shift_scale(box, shift, width, hasshift, haswidth); } @SuppressWarnings("unused") - public static Pointer intspanset_to_floatspanset(Pointer ss) { - return MeosLibrary.meos.intspanset_to_floatspanset(ss); + public static Pointer union_tbox_tbox(Pointer box1, Pointer box2, boolean strict) { + return MeosLibrary.meos.union_tbox_tbox(box1, box2, strict); } @SuppressWarnings("unused") - public static Pointer set_to_spanset(Pointer s) { - return MeosLibrary.meos.set_to_spanset(s); + public static Pointer intersection_tbox_tbox(Pointer box1, Pointer box2) { + return MeosLibrary.meos.intersection_tbox_tbox(box1, box2); } @SuppressWarnings("unused") - public static Pointer span_to_spanset(Pointer s) { - return MeosLibrary.meos.span_to_spanset(s); + public static boolean adjacent_tbox_tbox(Pointer box1, Pointer box2) { + return MeosLibrary.meos.adjacent_tbox_tbox(box1, box2); } @SuppressWarnings("unused") - public static Pointer text_to_set(Pointer txt) { - return MeosLibrary.meos.text_to_set(txt); + public static boolean contained_tbox_tbox(Pointer box1, Pointer box2) { + return MeosLibrary.meos.contained_tbox_tbox(box1, box2); } @SuppressWarnings("unused") - public static Pointer timestamptz_to_set(OffsetDateTime t) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.timestamptz_to_set(t_new); + public static boolean contains_tbox_tbox(Pointer box1, Pointer box2) { + return MeosLibrary.meos.contains_tbox_tbox(box1, box2); } @SuppressWarnings("unused") - public static Pointer timestamptz_to_span(OffsetDateTime t) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.timestamptz_to_span(t_new); + public static boolean overlaps_tbox_tbox(Pointer box1, Pointer box2) { + return MeosLibrary.meos.overlaps_tbox_tbox(box1, box2); } @SuppressWarnings("unused") - public static Pointer timestamptz_to_spanset(OffsetDateTime t) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.timestamptz_to_spanset(t_new); + public static boolean same_tbox_tbox(Pointer box1, Pointer box2) { + return MeosLibrary.meos.same_tbox_tbox(box1, box2); } @SuppressWarnings("unused") - public static Pointer tstzset_to_dateset(Pointer s) { - return MeosLibrary.meos.tstzset_to_dateset(s); + public static boolean after_tbox_tbox(Pointer box1, Pointer box2) { + return MeosLibrary.meos.after_tbox_tbox(box1, box2); } @SuppressWarnings("unused") - public static Pointer tstzspan_to_datespan(Pointer s) { - return MeosLibrary.meos.tstzspan_to_datespan(s); + public static boolean before_tbox_tbox(Pointer box1, Pointer box2) { + return MeosLibrary.meos.before_tbox_tbox(box1, box2); } @SuppressWarnings("unused") - public static Pointer tstzspanset_to_datespanset(Pointer ss) { - return MeosLibrary.meos.tstzspanset_to_datespanset(ss); + public static boolean left_tbox_tbox(Pointer box1, Pointer box2) { + return MeosLibrary.meos.left_tbox_tbox(box1, box2); } @SuppressWarnings("unused") - public static long bigintset_end_value(Pointer s) { - return MeosLibrary.meos.bigintset_end_value(s); + public static boolean overafter_tbox_tbox(Pointer box1, Pointer box2) { + return MeosLibrary.meos.overafter_tbox_tbox(box1, box2); } @SuppressWarnings("unused") - public static long bigintset_start_value(Pointer s) { - return MeosLibrary.meos.bigintset_start_value(s); + public static boolean overbefore_tbox_tbox(Pointer box1, Pointer box2) { + return MeosLibrary.meos.overbefore_tbox_tbox(box1, box2); } @SuppressWarnings("unused") - public static Pointer bigintset_value_n(Pointer s, int n) { - boolean out; - Runtime runtime = Runtime.getSystemRuntime(); - Pointer result = Memory.allocateDirect(runtime, Long.BYTES); - out = MeosLibrary.meos.bigintset_value_n(s, n, result); - return out ? result : null ; + public static boolean overleft_tbox_tbox(Pointer box1, Pointer box2) { + return MeosLibrary.meos.overleft_tbox_tbox(box1, box2); } @SuppressWarnings("unused") - public static Pointer bigintset_values(Pointer s) { - return MeosLibrary.meos.bigintset_values(s); + public static boolean overright_tbox_tbox(Pointer box1, Pointer box2) { + return MeosLibrary.meos.overright_tbox_tbox(box1, box2); } @SuppressWarnings("unused") - public static long bigintspan_lower(Pointer s) { - return MeosLibrary.meos.bigintspan_lower(s); + public static boolean right_tbox_tbox(Pointer box1, Pointer box2) { + return MeosLibrary.meos.right_tbox_tbox(box1, box2); } @SuppressWarnings("unused") - public static long bigintspan_upper(Pointer s) { - return MeosLibrary.meos.bigintspan_upper(s); + public static int tbox_cmp(Pointer box1, Pointer box2) { + return MeosLibrary.meos.tbox_cmp(box1, box2); } @SuppressWarnings("unused") - public static long bigintspan_width(Pointer s) { - return MeosLibrary.meos.bigintspan_width(s); + public static boolean tbox_eq(Pointer box1, Pointer box2) { + return MeosLibrary.meos.tbox_eq(box1, box2); } @SuppressWarnings("unused") - public static long bigintspanset_lower(Pointer ss) { - return MeosLibrary.meos.bigintspanset_lower(ss); + public static boolean tbox_ge(Pointer box1, Pointer box2) { + return MeosLibrary.meos.tbox_ge(box1, box2); } @SuppressWarnings("unused") - public static long bigintspanset_upper(Pointer ss) { - return MeosLibrary.meos.bigintspanset_upper(ss); + public static boolean tbox_gt(Pointer box1, Pointer box2) { + return MeosLibrary.meos.tbox_gt(box1, box2); } @SuppressWarnings("unused") - public static long bigintspanset_width(Pointer ss, boolean boundspan) { - return MeosLibrary.meos.bigintspanset_width(ss, boundspan); + public static boolean tbox_le(Pointer box1, Pointer box2) { + return MeosLibrary.meos.tbox_le(box1, box2); } @SuppressWarnings("unused") - public static int dateset_end_value(Pointer s) { - return MeosLibrary.meos.dateset_end_value(s); + public static boolean tbox_lt(Pointer box1, Pointer box2) { + return MeosLibrary.meos.tbox_lt(box1, box2); } @SuppressWarnings("unused") - public static int dateset_start_value(Pointer s) { - return MeosLibrary.meos.dateset_start_value(s); + public static boolean tbox_ne(Pointer box1, Pointer box2) { + return MeosLibrary.meos.tbox_ne(box1, box2); } @SuppressWarnings("unused") - public static Pointer dateset_value_n(Pointer s, int n) { - boolean out; - Runtime runtime = Runtime.getSystemRuntime(); - Pointer result = Memory.allocateDirect(runtime, Long.BYTES); - out = MeosLibrary.meos.dateset_value_n(s, n, result); - return out ? result : null ; + public static Pointer tbool_from_mfjson(String str) { + return MeosLibrary.meos.tbool_from_mfjson(str); } @SuppressWarnings("unused") - public static Pointer dateset_values(Pointer s) { - return MeosLibrary.meos.dateset_values(s); + public static Pointer tbool_in(String str) { + return MeosLibrary.meos.tbool_in(str); } @SuppressWarnings("unused") - public static Pointer datespan_duration(Pointer s) { - return MeosLibrary.meos.datespan_duration(s); + public static String tbool_out(Pointer temp) { + return MeosLibrary.meos.tbool_out(temp); } @SuppressWarnings("unused") - public static int datespan_lower(Pointer s) { - return MeosLibrary.meos.datespan_lower(s); + public static String temporal_as_hexwkb(Pointer temp, byte variant) { + Runtime runtime = Runtime.getSystemRuntime(); + Pointer size_out = Memory.allocateDirect(runtime, Long.BYTES); + return MeosLibrary.meos.temporal_as_hexwkb(temp, variant, size_out); } @SuppressWarnings("unused") - public static int datespan_upper(Pointer s) { - return MeosLibrary.meos.datespan_upper(s); + public static String temporal_as_mfjson(Pointer temp, boolean with_bbox, int flags, int precision, String srs) { + return MeosLibrary.meos.temporal_as_mfjson(temp, with_bbox, flags, precision, srs); } @SuppressWarnings("unused") - public static Pointer datespanset_date_n(Pointer ss, int n) { - boolean out; + public static Pointer temporal_as_wkb(Pointer temp, byte variant) { Runtime runtime = Runtime.getSystemRuntime(); - Pointer result = Memory.allocateDirect(runtime, Long.BYTES); - out = MeosLibrary.meos.datespanset_date_n(ss, n, result); - return out ? result : null ; + Pointer size_out = Memory.allocateDirect(runtime, Long.BYTES); + return MeosLibrary.meos.temporal_as_wkb(temp, variant, size_out); } @SuppressWarnings("unused") - public static Pointer datespanset_dates(Pointer ss) { - return MeosLibrary.meos.datespanset_dates(ss); + public static Pointer temporal_from_hexwkb(String hexwkb) { + return MeosLibrary.meos.temporal_from_hexwkb(hexwkb); } @SuppressWarnings("unused") - public static Pointer datespanset_duration(Pointer ss, boolean boundspan) { - return MeosLibrary.meos.datespanset_duration(ss, boundspan); + public static Pointer temporal_from_wkb(Pointer wkb, long size) { + return MeosLibrary.meos.temporal_from_wkb(wkb, size); } @SuppressWarnings("unused") - public static int datespanset_end_date(Pointer ss) { - return MeosLibrary.meos.datespanset_end_date(ss); + public static Pointer tfloat_from_mfjson(String str) { + return MeosLibrary.meos.tfloat_from_mfjson(str); } @SuppressWarnings("unused") - public static int datespanset_num_dates(Pointer ss) { - return MeosLibrary.meos.datespanset_num_dates(ss); + public static Pointer tfloat_in(String str) { + return MeosLibrary.meos.tfloat_in(str); } @SuppressWarnings("unused") - public static int datespanset_start_date(Pointer ss) { - return MeosLibrary.meos.datespanset_start_date(ss); + public static String tfloat_out(Pointer temp, int maxdd) { + return MeosLibrary.meos.tfloat_out(temp, maxdd); } @SuppressWarnings("unused") - public static double floatset_end_value(Pointer s) { - return MeosLibrary.meos.floatset_end_value(s); + public static Pointer tint_from_mfjson(String str) { + return MeosLibrary.meos.tint_from_mfjson(str); } @SuppressWarnings("unused") - public static double floatset_start_value(Pointer s) { - return MeosLibrary.meos.floatset_start_value(s); + public static Pointer tint_in(String str) { + return MeosLibrary.meos.tint_in(str); } @SuppressWarnings("unused") - public static Pointer floatset_value_n(Pointer s, int n) { - boolean out; - Runtime runtime = Runtime.getSystemRuntime(); - Pointer result = Memory.allocateDirect(runtime, Long.BYTES); - out = MeosLibrary.meos.floatset_value_n(s, n, result); - return out ? result : null ; + public static String tint_out(Pointer temp) { + return MeosLibrary.meos.tint_out(temp); } @SuppressWarnings("unused") - public static Pointer floatset_values(Pointer s) { - return MeosLibrary.meos.floatset_values(s); + public static Pointer ttext_from_mfjson(String str) { + return MeosLibrary.meos.ttext_from_mfjson(str); } @SuppressWarnings("unused") - public static double floatspan_lower(Pointer s) { - return MeosLibrary.meos.floatspan_lower(s); + public static Pointer ttext_in(String str) { + return MeosLibrary.meos.ttext_in(str); } @SuppressWarnings("unused") - public static double floatspan_upper(Pointer s) { - return MeosLibrary.meos.floatspan_upper(s); + public static String ttext_out(Pointer temp) { + return MeosLibrary.meos.ttext_out(temp); } @SuppressWarnings("unused") - public static double floatspan_width(Pointer s) { - return MeosLibrary.meos.floatspan_width(s); + public static Pointer tbool_from_base_temp(boolean b, Pointer temp) { + return MeosLibrary.meos.tbool_from_base_temp(b, temp); } @SuppressWarnings("unused") - public static double floatspanset_lower(Pointer ss) { - return MeosLibrary.meos.floatspanset_lower(ss); + public static Pointer tboolinst_make(boolean b, OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.tboolinst_make(b, t_new); } @SuppressWarnings("unused") - public static double floatspanset_upper(Pointer ss) { - return MeosLibrary.meos.floatspanset_upper(ss); + public static Pointer tboolseq_from_base_tstzset(boolean b, Pointer s) { + return MeosLibrary.meos.tboolseq_from_base_tstzset(b, s); } @SuppressWarnings("unused") - public static double floatspanset_width(Pointer ss, boolean boundspan) { - return MeosLibrary.meos.floatspanset_width(ss, boundspan); + public static Pointer tboolseq_from_base_tstzspan(boolean b, Pointer s) { + return MeosLibrary.meos.tboolseq_from_base_tstzspan(b, s); } @SuppressWarnings("unused") - public static Pointer geoset_end_value(Pointer s) { - return MeosLibrary.meos.geoset_end_value(s); + public static Pointer tboolseqset_from_base_tstzspanset(boolean b, Pointer ss) { + return MeosLibrary.meos.tboolseqset_from_base_tstzspanset(b, ss); } @SuppressWarnings("unused") - public static int geoset_srid(Pointer s) { - return MeosLibrary.meos.geoset_srid(s); + public static Pointer temporal_copy(Pointer temp) { + return MeosLibrary.meos.temporal_copy(temp); } @SuppressWarnings("unused") - public static Pointer geoset_start_value(Pointer s) { - return MeosLibrary.meos.geoset_start_value(s); + public static Pointer tfloat_from_base_temp(double d, Pointer temp) { + return MeosLibrary.meos.tfloat_from_base_temp(d, temp); } @SuppressWarnings("unused") - public static Pointer geoset_value_n(Pointer s, int n) { - boolean out; - Runtime runtime = Runtime.getSystemRuntime(); - Pointer result = Memory.allocateDirect(runtime, Long.BYTES); - out = MeosLibrary.meos.geoset_value_n(s, n, result); - Pointer new_result = result.getPointer(0); - return out ? new_result : null ; + public static Pointer tfloatinst_make(double d, OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.tfloatinst_make(d, t_new); } @SuppressWarnings("unused") - public static Pointer geoset_values(Pointer s) { - return MeosLibrary.meos.geoset_values(s); + public static Pointer tfloatseq_from_base_tstzset(double d, Pointer s) { + return MeosLibrary.meos.tfloatseq_from_base_tstzset(d, s); } @SuppressWarnings("unused") - public static int intset_end_value(Pointer s) { - return MeosLibrary.meos.intset_end_value(s); + public static Pointer tfloatseq_from_base_tstzspan(double d, Pointer s, int interp) { + return MeosLibrary.meos.tfloatseq_from_base_tstzspan(d, s, interp); } @SuppressWarnings("unused") - public static int intset_start_value(Pointer s) { - return MeosLibrary.meos.intset_start_value(s); + public static Pointer tfloatseqset_from_base_tstzspanset(double d, Pointer ss, int interp) { + return MeosLibrary.meos.tfloatseqset_from_base_tstzspanset(d, ss, interp); } @SuppressWarnings("unused") - public static Pointer intset_value_n(Pointer s, int n) { - boolean out; - Runtime runtime = Runtime.getSystemRuntime(); - Pointer result = Memory.allocateDirect(runtime, Long.BYTES); - out = MeosLibrary.meos.intset_value_n(s, n, result); - return out ? result : null ; + public static Pointer tint_from_base_temp(int i, Pointer temp) { + return MeosLibrary.meos.tint_from_base_temp(i, temp); } @SuppressWarnings("unused") - public static Pointer intset_values(Pointer s) { - return MeosLibrary.meos.intset_values(s); + public static Pointer tintinst_make(int i, OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.tintinst_make(i, t_new); } @SuppressWarnings("unused") - public static int intspan_lower(Pointer s) { - return MeosLibrary.meos.intspan_lower(s); + public static Pointer tintseq_from_base_tstzset(int i, Pointer s) { + return MeosLibrary.meos.tintseq_from_base_tstzset(i, s); } @SuppressWarnings("unused") - public static int intspan_upper(Pointer s) { - return MeosLibrary.meos.intspan_upper(s); + public static Pointer tintseq_from_base_tstzspan(int i, Pointer s) { + return MeosLibrary.meos.tintseq_from_base_tstzspan(i, s); } @SuppressWarnings("unused") - public static int intspan_width(Pointer s) { - return MeosLibrary.meos.intspan_width(s); + public static Pointer tintseqset_from_base_tstzspanset(int i, Pointer ss) { + return MeosLibrary.meos.tintseqset_from_base_tstzspanset(i, ss); } @SuppressWarnings("unused") - public static int intspanset_lower(Pointer ss) { - return MeosLibrary.meos.intspanset_lower(ss); + public static Pointer tsequence_make(Pointer instants, int count, boolean lower_inc, boolean upper_inc, int interp, boolean normalize) { + return MeosLibrary.meos.tsequence_make(instants, count, lower_inc, upper_inc, interp, normalize); } @SuppressWarnings("unused") - public static int intspanset_upper(Pointer ss) { - return MeosLibrary.meos.intspanset_upper(ss); + public static Pointer tsequenceset_make(Pointer sequences, int count, boolean normalize) { + return MeosLibrary.meos.tsequenceset_make(sequences, count, normalize); } @SuppressWarnings("unused") - public static int intspanset_width(Pointer ss, boolean boundspan) { - return MeosLibrary.meos.intspanset_width(ss, boundspan); + public static Pointer tsequenceset_make_gaps(Pointer instants, int count, int interp, Pointer maxt, double maxdist) { + return MeosLibrary.meos.tsequenceset_make_gaps(instants, count, interp, maxt, maxdist); } @SuppressWarnings("unused") - public static int set_hash(Pointer s) { - return MeosLibrary.meos.set_hash(s); + public static Pointer ttext_from_base_temp(Pointer txt, Pointer temp) { + return MeosLibrary.meos.ttext_from_base_temp(txt, temp); } @SuppressWarnings("unused") - public static long set_hash_extended(Pointer s, long seed) { - return MeosLibrary.meos.set_hash_extended(s, seed); + public static Pointer ttextinst_make(Pointer txt, OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.ttextinst_make(txt, t_new); } @SuppressWarnings("unused") - public static int set_num_values(Pointer s) { - return MeosLibrary.meos.set_num_values(s); + public static Pointer ttextseq_from_base_tstzset(Pointer txt, Pointer s) { + return MeosLibrary.meos.ttextseq_from_base_tstzset(txt, s); } @SuppressWarnings("unused") - public static Pointer set_to_span(Pointer s) { - return MeosLibrary.meos.set_to_span(s); + public static Pointer ttextseq_from_base_tstzspan(Pointer txt, Pointer s) { + return MeosLibrary.meos.ttextseq_from_base_tstzspan(txt, s); } @SuppressWarnings("unused") - public static int span_hash(Pointer s) { - return MeosLibrary.meos.span_hash(s); + public static Pointer ttextseqset_from_base_tstzspanset(Pointer txt, Pointer ss) { + return MeosLibrary.meos.ttextseqset_from_base_tstzspanset(txt, ss); } @SuppressWarnings("unused") - public static long span_hash_extended(Pointer s, long seed) { - return MeosLibrary.meos.span_hash_extended(s, seed); + public static Pointer tbool_to_tint(Pointer temp) { + return MeosLibrary.meos.tbool_to_tint(temp); } @SuppressWarnings("unused") - public static boolean span_lower_inc(Pointer s) { - return MeosLibrary.meos.span_lower_inc(s); + public static Pointer temporal_to_tstzspan(Pointer temp) { + return MeosLibrary.meos.temporal_to_tstzspan(temp); } @SuppressWarnings("unused") - public static boolean span_upper_inc(Pointer s) { - return MeosLibrary.meos.span_upper_inc(s); + public static Pointer tfloat_to_tint(Pointer temp) { + return MeosLibrary.meos.tfloat_to_tint(temp); } @SuppressWarnings("unused") - public static Pointer spanset_end_span(Pointer ss) { - return MeosLibrary.meos.spanset_end_span(ss); + public static Pointer tint_to_tfloat(Pointer temp) { + return MeosLibrary.meos.tint_to_tfloat(temp); } @SuppressWarnings("unused") - public static int spanset_hash(Pointer ss) { - return MeosLibrary.meos.spanset_hash(ss); + public static Pointer tnumber_to_span(Pointer temp) { + return MeosLibrary.meos.tnumber_to_span(temp); } @SuppressWarnings("unused") - public static long spanset_hash_extended(Pointer ss, long seed) { - return MeosLibrary.meos.spanset_hash_extended(ss, seed); + public static Pointer tnumber_to_tbox (Pointer temp) { + return MeosLibrary.meos.tnumber_to_tbox(temp); } @SuppressWarnings("unused") - public static boolean spanset_lower_inc(Pointer ss) { - return MeosLibrary.meos.spanset_lower_inc(ss); + public static boolean tbool_end_value(Pointer temp) { + return MeosLibrary.meos.tbool_end_value(temp); } @SuppressWarnings("unused") - public static int spanset_num_spans(Pointer ss) { - return MeosLibrary.meos.spanset_num_spans(ss); + public static boolean tbool_start_value(Pointer temp) { + return MeosLibrary.meos.tbool_start_value(temp); } @SuppressWarnings("unused") - public static Pointer spanset_span(Pointer ss) { - return MeosLibrary.meos.spanset_span(ss); + public static boolean tbool_value_at_timestamptz(Pointer temp, OffsetDateTime t, boolean strict, Pointer value) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.tbool_value_at_timestamptz(temp, t_new, strict, value); } @SuppressWarnings("unused") - public static Pointer spanset_span_n(Pointer ss, int i) { - return MeosLibrary.meos.spanset_span_n(ss, i); + public static Pointer tbool_value_n(Pointer temp, int n) { + boolean out; + Runtime runtime = Runtime.getSystemRuntime(); + Pointer result = Memory.allocateDirect(runtime, Long.BYTES); + out = MeosLibrary.meos.tbool_value_n(temp, n, result); + Pointer new_result = result.getPointer(0); + return out ? new_result : null ; } @SuppressWarnings("unused") - public static Pointer spanset_spans(Pointer ss) { - return MeosLibrary.meos.spanset_spans(ss); + public static Pointer tbool_values(Pointer temp, Pointer count) { + return MeosLibrary.meos.tbool_values(temp, count); } @SuppressWarnings("unused") - public static Pointer spanset_start_span(Pointer ss) { - return MeosLibrary.meos.spanset_start_span(ss); + public static Pointer temporal_duration(Pointer temp, boolean boundspan) { + return MeosLibrary.meos.temporal_duration(temp, boundspan); } @SuppressWarnings("unused") - public static boolean spanset_upper_inc(Pointer ss) { - return MeosLibrary.meos.spanset_upper_inc(ss); + public static Pointer temporal_end_instant(Pointer temp) { + return MeosLibrary.meos.temporal_end_instant(temp); } @SuppressWarnings("unused") - public static Pointer textset_end_value(Pointer s) { - return MeosLibrary.meos.textset_end_value(s); + public static Pointer temporal_end_sequence(Pointer temp) { + return MeosLibrary.meos.temporal_end_sequence(temp); } @SuppressWarnings("unused") - public static Pointer textset_start_value(Pointer s) { - return MeosLibrary.meos.textset_start_value(s); + public static OffsetDateTime temporal_end_timestamptz(Pointer temp) { + var result = MeosLibrary.meos.temporal_end_timestamptz(temp); + Instant instant = Instant.ofEpochSecond(result); + return OffsetDateTime.ofInstant(instant, ZoneOffset.UTC); } @SuppressWarnings("unused") - public static Pointer textset_value_n(Pointer s, int n) { - boolean out; - Runtime runtime = Runtime.getSystemRuntime(); - Pointer result = Memory.allocateDirect(runtime, Long.BYTES); - out = MeosLibrary.meos.textset_value_n(s, n, result); - Pointer new_result = result.getPointer(0); - return out ? new_result : null ; + public static int temporal_hash(Pointer temp) { + return MeosLibrary.meos.temporal_hash(temp); } @SuppressWarnings("unused") - public static Pointer textset_values(Pointer s) { - return MeosLibrary.meos.textset_values(s); + public static Pointer temporal_instant_n(Pointer temp, int n) { + return MeosLibrary.meos.temporal_instant_n(temp, n); } @SuppressWarnings("unused") - public static OffsetDateTime tstzset_end_value(Pointer s) { - var result = MeosLibrary.meos.tstzset_end_value(s); - Instant instant = Instant.ofEpochSecond(result); - return OffsetDateTime.ofInstant(instant, ZoneOffset.UTC); + public static Pointer temporal_instants(Pointer temp, Pointer count) { + return MeosLibrary.meos.temporal_instants(temp, count); } @SuppressWarnings("unused") - public static OffsetDateTime tstzset_start_value(Pointer s) { - var result = MeosLibrary.meos.tstzset_start_value(s); - Instant instant = Instant.ofEpochSecond(result); - return OffsetDateTime.ofInstant(instant, ZoneOffset.UTC); + public static String temporal_interp(Pointer temp) { + return MeosLibrary.meos.temporal_interp(temp); } @SuppressWarnings("unused") - public static Pointer tstzset_value_n(Pointer s, int n) { - boolean out; - Runtime runtime = Runtime.getSystemRuntime(); - Pointer result = Memory.allocateDirect(runtime, Long.BYTES); - out = MeosLibrary.meos.tstzset_value_n(s, n, result); - return out ? result : null ; + public static boolean temporal_lower_inc(Pointer temp) { + return MeosLibrary.meos.temporal_lower_inc(temp); } @SuppressWarnings("unused") - public static Pointer tstzset_values(Pointer s) { - return MeosLibrary.meos.tstzset_values(s); + public static Pointer temporal_max_instant(Pointer temp) { + return MeosLibrary.meos.temporal_max_instant(temp); } @SuppressWarnings("unused") - public static Pointer tstzspan_duration(Pointer s) { - return MeosLibrary.meos.tstzspan_duration(s); + public static Pointer temporal_min_instant(Pointer temp) { + return MeosLibrary.meos.temporal_min_instant(temp); } @SuppressWarnings("unused") - public static OffsetDateTime tstzspan_lower(Pointer s) { - var result = MeosLibrary.meos.tstzspan_lower(s); - Instant instant = Instant.ofEpochSecond(result); - return OffsetDateTime.ofInstant(instant, ZoneOffset.UTC); + public static int temporal_num_instants(Pointer temp) { + return MeosLibrary.meos.temporal_num_instants(temp); } @SuppressWarnings("unused") - public static OffsetDateTime tstzspan_upper(Pointer s) { - var result = MeosLibrary.meos.tstzspan_upper(s); - Instant instant = Instant.ofEpochSecond(result); - return OffsetDateTime.ofInstant(instant, ZoneOffset.UTC); + public static int temporal_num_sequences(Pointer temp) { + return MeosLibrary.meos.temporal_num_sequences(temp); } @SuppressWarnings("unused") - public static Pointer tstzspanset_duration(Pointer ss, boolean boundspan) { - return MeosLibrary.meos.tstzspanset_duration(ss, boundspan); + public static int temporal_num_timestamps(Pointer temp) { + return MeosLibrary.meos.temporal_num_timestamps(temp); } @SuppressWarnings("unused") - public static OffsetDateTime tstzspanset_end_timestamptz(Pointer ss) { - var result = MeosLibrary.meos.tstzspanset_end_timestamptz(ss); - Instant instant = Instant.ofEpochSecond(result); - return OffsetDateTime.ofInstant(instant, ZoneOffset.UTC); + public static Pointer temporal_segm_duration(Pointer temp, Pointer duration, boolean atleast, boolean strict) { + return MeosLibrary.meos.temporal_segm_duration(temp, duration, atleast, strict); } @SuppressWarnings("unused") - public static OffsetDateTime tstzspanset_lower(Pointer ss) { - var result = MeosLibrary.meos.tstzspanset_lower(ss); - Instant instant = Instant.ofEpochSecond(result); - return OffsetDateTime.ofInstant(instant, ZoneOffset.UTC); + public static Pointer temporal_segments(Pointer temp, Pointer count) { + return MeosLibrary.meos.temporal_segments(temp, count); } @SuppressWarnings("unused") - public static int tstzspanset_num_timestamps(Pointer ss) { - return MeosLibrary.meos.tstzspanset_num_timestamps(ss); + public static Pointer temporal_sequence_n(Pointer temp, int i) { + return MeosLibrary.meos.temporal_sequence_n(temp, i); } @SuppressWarnings("unused") - public static OffsetDateTime tstzspanset_start_timestamptz(Pointer ss) { - var result = MeosLibrary.meos.tstzspanset_start_timestamptz(ss); - Instant instant = Instant.ofEpochSecond(result); - return OffsetDateTime.ofInstant(instant, ZoneOffset.UTC); + public static Pointer temporal_sequences(Pointer temp, Pointer count) { + return MeosLibrary.meos.temporal_sequences(temp, count); } @SuppressWarnings("unused") - public static Pointer tstzspanset_timestamptz_n(Pointer ss, int n) { - boolean out; - Runtime runtime = Runtime.getSystemRuntime(); - Pointer result = Memory.allocateDirect(runtime, Long.BYTES); - out = MeosLibrary.meos.tstzspanset_timestamptz_n(ss, n, result); - return out ? result : null ; + public static Pointer temporal_start_instant(Pointer temp) { + return MeosLibrary.meos.temporal_start_instant(temp); } @SuppressWarnings("unused") - public static Pointer tstzspanset_timestamps(Pointer ss) { - return MeosLibrary.meos.tstzspanset_timestamps(ss); + public static Pointer temporal_start_sequence(Pointer temp) { + return MeosLibrary.meos.temporal_start_sequence(temp); } @SuppressWarnings("unused") - public static OffsetDateTime tstzspanset_upper(Pointer ss) { - var result = MeosLibrary.meos.tstzspanset_upper(ss); + public static OffsetDateTime temporal_start_timestamptz(Pointer temp) { + var result = MeosLibrary.meos.temporal_start_timestamptz(temp); Instant instant = Instant.ofEpochSecond(result); return OffsetDateTime.ofInstant(instant, ZoneOffset.UTC); } @SuppressWarnings("unused") - public static Pointer bigintset_shift_scale(Pointer s, long shift, long width, boolean hasshift, boolean haswidth) { - return MeosLibrary.meos.bigintset_shift_scale(s, shift, width, hasshift, haswidth); + public static Pointer temporal_stops(Pointer temp, double maxdist, Pointer minduration) { + return MeosLibrary.meos.temporal_stops(temp, maxdist, minduration); } @SuppressWarnings("unused") - public static Pointer bigintspan_shift_scale(Pointer s, long shift, long width, boolean hasshift, boolean haswidth) { - return MeosLibrary.meos.bigintspan_shift_scale(s, shift, width, hasshift, haswidth); + public static String temporal_subtype(Pointer temp) { + return MeosLibrary.meos.temporal_subtype(temp); } @SuppressWarnings("unused") - public static Pointer bigintspanset_shift_scale(Pointer ss, long shift, long width, boolean hasshift, boolean haswidth) { - return MeosLibrary.meos.bigintspanset_shift_scale(ss, shift, width, hasshift, haswidth); + public static Pointer temporal_time(Pointer temp) { + return MeosLibrary.meos.temporal_time(temp); } @SuppressWarnings("unused") - public static Pointer dateset_shift_scale(Pointer s, int shift, int width, boolean hasshift, boolean haswidth) { - return MeosLibrary.meos.dateset_shift_scale(s, shift, width, hasshift, haswidth); + public static Pointer temporal_timestamps(Pointer temp, Pointer count) { + return MeosLibrary.meos.temporal_timestamps(temp, count); } @SuppressWarnings("unused") - public static Pointer datespan_shift_scale(Pointer s, int shift, int width, boolean hasshift, boolean haswidth) { - return MeosLibrary.meos.datespan_shift_scale(s, shift, width, hasshift, haswidth); + public static Pointer temporal_timestamptz_n(Pointer temp, int n) { + boolean out; + Runtime runtime = Runtime.getSystemRuntime(); + Pointer result = Memory.allocateDirect(runtime, Long.BYTES); + out = MeosLibrary.meos.temporal_timestamptz_n(temp, n, result); + Pointer new_result = result.getPointer(0); + return out ? new_result : null ; } @SuppressWarnings("unused") - public static Pointer datespanset_shift_scale(Pointer ss, int shift, int width, boolean hasshift, boolean haswidth) { - return MeosLibrary.meos.datespanset_shift_scale(ss, shift, width, hasshift, haswidth); + public static boolean temporal_upper_inc(Pointer temp) { + return MeosLibrary.meos.temporal_upper_inc(temp); } @SuppressWarnings("unused") - public static Pointer floatset_ceil(Pointer s) { - return MeosLibrary.meos.floatset_ceil(s); + public static double tfloat_avg_value(Pointer temp) { + return MeosLibrary.meos.tfloat_avg_value(temp); } @SuppressWarnings("unused") - public static Pointer floatset_floor(Pointer s) { - return MeosLibrary.meos.floatset_floor(s); + public static double tfloat_end_value(Pointer temp) { + return MeosLibrary.meos.tfloat_end_value(temp); } @SuppressWarnings("unused") - public static Pointer floatset_degrees(Pointer s, boolean normalize) { - return MeosLibrary.meos.floatset_degrees(s, normalize); + public static double tfloat_min_value(Pointer temp) { + return MeosLibrary.meos.tfloat_min_value(temp); } @SuppressWarnings("unused") - public static Pointer floatset_radians(Pointer s) { - return MeosLibrary.meos.floatset_radians(s); + public static double tfloat_max_value(Pointer temp) { + return MeosLibrary.meos.tfloat_max_value(temp); + } + + @SuppressWarnings("unused") + public static double tfloat_start_value(Pointer temp) { + return MeosLibrary.meos.tfloat_start_value(temp); } @SuppressWarnings("unused") - public static Pointer floatset_round(Pointer s, int maxdd) { - return MeosLibrary.meos.floatset_round(s, maxdd); + public static boolean tfloat_value_at_timestamptz(Pointer temp, OffsetDateTime t, boolean strict, Pointer value) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.tfloat_value_at_timestamptz(temp, t_new, strict, value); } @SuppressWarnings("unused") - public static Pointer floatset_shift_scale(Pointer s, double shift, double width, boolean hasshift, boolean haswidth) { - return MeosLibrary.meos.floatset_shift_scale(s, shift, width, hasshift, haswidth); + public static Pointer tfloat_value_n(Pointer temp, int n) { + boolean out; + Runtime runtime = Runtime.getSystemRuntime(); + Pointer result = Memory.allocateDirect(runtime, Long.BYTES); + out = MeosLibrary.meos.tfloat_value_n(temp, n, result); + Pointer new_result = result.getPointer(0); + return out ? new_result : null ; } @SuppressWarnings("unused") - public static Pointer floatspan_ceil(Pointer s) { - return MeosLibrary.meos.floatspan_ceil(s); + public static Pointer tfloat_values(Pointer temp, Pointer count) { + return MeosLibrary.meos.tfloat_values(temp, count); } @SuppressWarnings("unused") - public static Pointer floatspan_floor(Pointer s) { - return MeosLibrary.meos.floatspan_floor(s); + public static int tint_end_value(Pointer temp) { + return MeosLibrary.meos.tint_end_value(temp); } @SuppressWarnings("unused") - public static Pointer floatspan_round(Pointer s, int maxdd) { - return MeosLibrary.meos.floatspan_round(s, maxdd); + public static int tint_max_value(Pointer temp) { + return MeosLibrary.meos.tint_max_value(temp); } @SuppressWarnings("unused") - public static Pointer floatspan_shift_scale(Pointer s, double shift, double width, boolean hasshift, boolean haswidth) { - return MeosLibrary.meos.floatspan_shift_scale(s, shift, width, hasshift, haswidth); + public static int tint_min_value(Pointer temp) { + return MeosLibrary.meos.tint_min_value(temp); } @SuppressWarnings("unused") - public static Pointer floatspanset_ceil(Pointer ss) { - return MeosLibrary.meos.floatspanset_ceil(ss); + public static int tint_start_value(Pointer temp) { + return MeosLibrary.meos.tint_start_value(temp); } @SuppressWarnings("unused") - public static Pointer floatspanset_floor(Pointer ss) { - return MeosLibrary.meos.floatspanset_floor(ss); + public static boolean tint_value_at_timestamptz(Pointer temp, OffsetDateTime t, boolean strict, Pointer value) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.tint_value_at_timestamptz(temp, t_new, strict, value); } @SuppressWarnings("unused") - public static Pointer floatspanset_round(Pointer ss, int maxdd) { - return MeosLibrary.meos.floatspanset_round(ss, maxdd); + public static Pointer tint_value_n(Pointer temp, int n) { + boolean out; + Runtime runtime = Runtime.getSystemRuntime(); + Pointer result = Memory.allocateDirect(runtime, Long.BYTES); + out = MeosLibrary.meos.tint_value_n(temp, n, result); + Pointer new_result = result.getPointer(0); + return out ? new_result : null ; } @SuppressWarnings("unused") - public static Pointer floatspanset_shift_scale(Pointer ss, double shift, double width, boolean hasshift, boolean haswidth) { - return MeosLibrary.meos.floatspanset_shift_scale(ss, shift, width, hasshift, haswidth); + public static Pointer tint_values(Pointer temp, Pointer count) { + return MeosLibrary.meos.tint_values(temp, count); } @SuppressWarnings("unused") - public static Pointer geoset_round(Pointer s, int maxdd) { - return MeosLibrary.meos.geoset_round(s, maxdd); + public static double tnumber_avg_value(Pointer temp) { + return MeosLibrary.meos.tnumber_avg_value(temp); } @SuppressWarnings("unused") - public static Pointer geoset_set_srid(Pointer s, int srid) { - return MeosLibrary.meos.geoset_set_srid(s, srid); + public static double tnumber_integral(Pointer temp) { + return MeosLibrary.meos.tnumber_integral(temp); } @SuppressWarnings("unused") - public static Pointer geoset_transform(Pointer s, int srid) { - return MeosLibrary.meos.geoset_transform(s, srid); + public static double tnumber_twavg(Pointer temp) { + return MeosLibrary.meos.tnumber_twavg(temp); } @SuppressWarnings("unused") - public static Pointer geoset_transform_pipeline(Pointer s, String pipelinestr, int srid, boolean is_forward) { - return MeosLibrary.meos.geoset_transform_pipeline(s, pipelinestr, srid, is_forward); + public static Pointer tnumber_valuespans(Pointer temp) { + return MeosLibrary.meos.tnumber_valuespans(temp); } @SuppressWarnings("unused") - public static Pointer point_transform(Pointer gs, int srid) { - return MeosLibrary.meos.point_transform(gs, srid); + public static Pointer ttext_end_value(Pointer temp) { + return MeosLibrary.meos.ttext_end_value(temp); } @SuppressWarnings("unused") - public static Pointer point_transform_pipeline(Pointer gs, String pipelinestr, int srid, boolean is_forward) { - return MeosLibrary.meos.point_transform_pipeline(gs, pipelinestr, srid, is_forward); + public static Pointer ttext_max_value(Pointer temp) { + return MeosLibrary.meos.ttext_max_value(temp); } @SuppressWarnings("unused") - public static Pointer intset_shift_scale(Pointer s, int shift, int width, boolean hasshift, boolean haswidth) { - return MeosLibrary.meos.intset_shift_scale(s, shift, width, hasshift, haswidth); + public static Pointer ttext_min_value(Pointer temp) { + return MeosLibrary.meos.ttext_min_value(temp); } @SuppressWarnings("unused") - public static Pointer intspan_shift_scale(Pointer s, int shift, int width, boolean hasshift, boolean haswidth) { - return MeosLibrary.meos.intspan_shift_scale(s, shift, width, hasshift, haswidth); + public static Pointer ttext_start_value(Pointer temp) { + return MeosLibrary.meos.ttext_start_value(temp); } @SuppressWarnings("unused") - public static Pointer intspanset_shift_scale(Pointer ss, int shift, int width, boolean hasshift, boolean haswidth) { - return MeosLibrary.meos.intspanset_shift_scale(ss, shift, width, hasshift, haswidth); + public static boolean ttext_value_at_timestamptz(Pointer temp, OffsetDateTime t, boolean strict, Pointer value) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.ttext_value_at_timestamptz(temp, t_new, strict, value); } @SuppressWarnings("unused") - public static Pointer textset_initcap(Pointer s) { - return MeosLibrary.meos.textset_initcap(s); + public static Pointer ttext_value_n(Pointer temp, int n) { + boolean out; + Runtime runtime = Runtime.getSystemRuntime(); + Pointer result = Memory.allocateDirect(runtime, Long.BYTES); + out = MeosLibrary.meos.ttext_value_n(temp, n, result); + Pointer new_result = result.getPointer(0); + return out ? new_result : null ; } @SuppressWarnings("unused") - public static Pointer textset_lower(Pointer s) { - return MeosLibrary.meos.textset_lower(s); + public static Pointer ttext_values(Pointer temp, Pointer count) { + return MeosLibrary.meos.ttext_values(temp, count); } @SuppressWarnings("unused") - public static Pointer textset_upper(Pointer s) { - return MeosLibrary.meos.textset_upper(s); + public static double float_degrees(double value, boolean normalize) { + return MeosLibrary.meos.float_degrees(value, normalize); } @SuppressWarnings("unused") - public static Pointer textcat_textset_text(Pointer s, Pointer txt) { - return MeosLibrary.meos.textcat_textset_text(s, txt); + public static Pointer temparr_round(Pointer temp, int count, int maxdd) { + return MeosLibrary.meos.temparr_round(temp, count, maxdd); } @SuppressWarnings("unused") - public static Pointer textcat_text_textset(Pointer txt, Pointer s) { - return MeosLibrary.meos.textcat_text_textset(txt, s); + public static Pointer temporal_round(Pointer temp, int maxdd) { + return MeosLibrary.meos.temporal_round(temp, maxdd); } @SuppressWarnings("unused") - public static OffsetDateTime timestamptz_tprecision(OffsetDateTime t, Pointer duration, OffsetDateTime torigin) { - var t_new = t.toEpochSecond(); - var torigin_new = torigin.toEpochSecond(); - var result = MeosLibrary.meos.timestamptz_tprecision(t_new, duration, torigin_new); - Instant instant = Instant.ofEpochSecond(result); - return OffsetDateTime.ofInstant(instant, ZoneOffset.UTC); + public static Pointer temporal_scale_time(Pointer temp, Pointer duration) { + return MeosLibrary.meos.temporal_scale_time(temp, duration); } @SuppressWarnings("unused") - public static Pointer tstzset_shift_scale(Pointer s, Pointer shift, Pointer duration) { - return MeosLibrary.meos.tstzset_shift_scale(s, shift, duration); + public static Pointer temporal_set_interp(Pointer temp, int interp) { + return MeosLibrary.meos.temporal_set_interp(temp, interp); } @SuppressWarnings("unused") - public static Pointer tstzset_tprecision(Pointer s, Pointer duration, OffsetDateTime torigin) { - var torigin_new = torigin.toEpochSecond(); - return MeosLibrary.meos.tstzset_tprecision(s, duration, torigin_new); + public static Pointer temporal_shift_scale_time(Pointer temp, Pointer shift, Pointer duration) { + return MeosLibrary.meos.temporal_shift_scale_time(temp, shift, duration); } @SuppressWarnings("unused") - public static Pointer tstzspan_shift_scale(Pointer s, Pointer shift, Pointer duration) { - return MeosLibrary.meos.tstzspan_shift_scale(s, shift, duration); + public static Pointer temporal_shift_time(Pointer temp, Pointer shift) { + return MeosLibrary.meos.temporal_shift_time(temp, shift); } @SuppressWarnings("unused") - public static Pointer tstzspan_tprecision(Pointer s, Pointer duration, OffsetDateTime torigin) { - var torigin_new = torigin.toEpochSecond(); - return MeosLibrary.meos.tstzspan_tprecision(s, duration, torigin_new); + public static Pointer temporal_to_tinstant(Pointer temp) { + return MeosLibrary.meos.temporal_to_tinstant(temp); } @SuppressWarnings("unused") - public static Pointer tstzspanset_shift_scale(Pointer ss, Pointer shift, Pointer duration) { - return MeosLibrary.meos.tstzspanset_shift_scale(ss, shift, duration); + public static Pointer temporal_to_tsequence(Pointer temp, int interp) { + return MeosLibrary.meos.temporal_to_tsequence(temp, interp); } @SuppressWarnings("unused") - public static Pointer tstzspanset_tprecision(Pointer ss, Pointer duration, OffsetDateTime torigin) { - var torigin_new = torigin.toEpochSecond(); - return MeosLibrary.meos.tstzspanset_tprecision(ss, duration, torigin_new); + public static Pointer temporal_to_tsequenceset(Pointer temp, int interp) { + return MeosLibrary.meos.temporal_to_tsequenceset(temp, interp); } @SuppressWarnings("unused") - public static int set_cmp(Pointer s1, Pointer s2) { - return MeosLibrary.meos.set_cmp(s1, s2); + public static Pointer tfloat_ceil(Pointer temp) { + return MeosLibrary.meos.tfloat_ceil(temp); } @SuppressWarnings("unused") - public static boolean set_eq(Pointer s1, Pointer s2) { - return MeosLibrary.meos.set_eq(s1, s2); + public static Pointer tfloat_degrees(Pointer temp, boolean normalize) { + return MeosLibrary.meos.tfloat_degrees(temp, normalize); } @SuppressWarnings("unused") - public static boolean set_ge(Pointer s1, Pointer s2) { - return MeosLibrary.meos.set_ge(s1, s2); + public static Pointer tfloat_floor(Pointer temp) { + return MeosLibrary.meos.tfloat_floor(temp); } @SuppressWarnings("unused") - public static boolean set_gt(Pointer s1, Pointer s2) { - return MeosLibrary.meos.set_gt(s1, s2); + public static Pointer tfloat_radians(Pointer temp) { + return MeosLibrary.meos.tfloat_radians(temp); } @SuppressWarnings("unused") - public static boolean set_le(Pointer s1, Pointer s2) { - return MeosLibrary.meos.set_le(s1, s2); + public static Pointer tfloat_scale_value(Pointer temp, double width) { + return MeosLibrary.meos.tfloat_scale_value(temp, width); } @SuppressWarnings("unused") - public static boolean set_lt(Pointer s1, Pointer s2) { - return MeosLibrary.meos.set_lt(s1, s2); + public static Pointer tfloat_shift_scale_value(Pointer temp, double shift, double width) { + return MeosLibrary.meos.tfloat_shift_scale_value(temp, shift, width); } @SuppressWarnings("unused") - public static boolean set_ne(Pointer s1, Pointer s2) { - return MeosLibrary.meos.set_ne(s1, s2); + public static Pointer tfloat_shift_value(Pointer temp, double shift) { + return MeosLibrary.meos.tfloat_shift_value(temp, shift); } @SuppressWarnings("unused") - public static int span_cmp(Pointer s1, Pointer s2) { - return MeosLibrary.meos.span_cmp(s1, s2); + public static Pointer tint_scale_value(Pointer temp, int width) { + return MeosLibrary.meos.tint_scale_value(temp, width); } @SuppressWarnings("unused") - public static boolean span_eq(Pointer s1, Pointer s2) { - return MeosLibrary.meos.span_eq(s1, s2); + public static Pointer tint_shift_scale_value(Pointer temp, int shift, int width) { + return MeosLibrary.meos.tint_shift_scale_value(temp, shift, width); } @SuppressWarnings("unused") - public static boolean span_ge(Pointer s1, Pointer s2) { - return MeosLibrary.meos.span_ge(s1, s2); + public static Pointer tint_shift_value(Pointer temp, int shift) { + return MeosLibrary.meos.tint_shift_value(temp, shift); } @SuppressWarnings("unused") - public static boolean span_gt(Pointer s1, Pointer s2) { - return MeosLibrary.meos.span_gt(s1, s2); + public static Pointer temporal_append_tinstant(Pointer temp, Pointer inst, int interp, double maxdist, Pointer maxt, boolean expand) { + return MeosLibrary.meos.temporal_append_tinstant(temp, inst, interp, maxdist, maxt, expand); } @SuppressWarnings("unused") - public static boolean span_le(Pointer s1, Pointer s2) { - return MeosLibrary.meos.span_le(s1, s2); + public static Pointer temporal_append_tsequence(Pointer temp, Pointer seq, boolean expand) { + return MeosLibrary.meos.temporal_append_tsequence(temp, seq, expand); } @SuppressWarnings("unused") - public static boolean span_lt(Pointer s1, Pointer s2) { - return MeosLibrary.meos.span_lt(s1, s2); + public static Pointer temporal_delete_timestamptz(Pointer temp, OffsetDateTime t, boolean connect) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.temporal_delete_timestamptz(temp, t_new, connect); } @SuppressWarnings("unused") - public static boolean span_ne(Pointer s1, Pointer s2) { - return MeosLibrary.meos.span_ne(s1, s2); + public static Pointer temporal_delete_tstzset(Pointer temp, Pointer s, boolean connect) { + return MeosLibrary.meos.temporal_delete_tstzset(temp, s, connect); } @SuppressWarnings("unused") - public static int spanset_cmp(Pointer ss1, Pointer ss2) { - return MeosLibrary.meos.spanset_cmp(ss1, ss2); + public static Pointer temporal_delete_tstzspan(Pointer temp, Pointer s, boolean connect) { + return MeosLibrary.meos.temporal_delete_tstzspan(temp, s, connect); } @SuppressWarnings("unused") - public static boolean spanset_eq(Pointer ss1, Pointer ss2) { - return MeosLibrary.meos.spanset_eq(ss1, ss2); + public static Pointer temporal_delete_tstzspanset(Pointer temp, Pointer ss, boolean connect) { + return MeosLibrary.meos.temporal_delete_tstzspanset(temp, ss, connect); } @SuppressWarnings("unused") - public static boolean spanset_ge(Pointer ss1, Pointer ss2) { - return MeosLibrary.meos.spanset_ge(ss1, ss2); + public static Pointer temporal_insert(Pointer temp1, Pointer temp2, boolean connect) { + return MeosLibrary.meos.temporal_insert(temp1, temp2, connect); } @SuppressWarnings("unused") - public static boolean spanset_gt(Pointer ss1, Pointer ss2) { - return MeosLibrary.meos.spanset_gt(ss1, ss2); + public static Pointer temporal_merge(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.temporal_merge(temp1, temp2); } @SuppressWarnings("unused") - public static boolean spanset_le(Pointer ss1, Pointer ss2) { - return MeosLibrary.meos.spanset_le(ss1, ss2); + public static Pointer temporal_merge_array(Pointer temparr, int count) { + return MeosLibrary.meos.temporal_merge_array(temparr, count); } @SuppressWarnings("unused") - public static boolean spanset_lt(Pointer ss1, Pointer ss2) { - return MeosLibrary.meos.spanset_lt(ss1, ss2); + public static Pointer temporal_update(Pointer temp1, Pointer temp2, boolean connect) { + return MeosLibrary.meos.temporal_update(temp1, temp2, connect); } @SuppressWarnings("unused") - public static boolean spanset_ne(Pointer ss1, Pointer ss2) { - return MeosLibrary.meos.spanset_ne(ss1, ss2); + public static Pointer tbool_at_value(Pointer temp, boolean b) { + return MeosLibrary.meos.tbool_at_value(temp, b); } @SuppressWarnings("unused") - public static boolean adjacent_span_bigint(Pointer s, long i) { - return MeosLibrary.meos.adjacent_span_bigint(s, i); + public static Pointer tbool_minus_value(Pointer temp, boolean b) { + return MeosLibrary.meos.tbool_minus_value(temp, b); } @SuppressWarnings("unused") - public static boolean adjacent_span_date(Pointer s, int d) { - return MeosLibrary.meos.adjacent_span_date(s, d); + public static Pointer temporal_after_timestamptz(Pointer temp, OffsetDateTime t, boolean strict) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.temporal_after_timestamptz(temp, t_new, strict); } @SuppressWarnings("unused") - public static boolean adjacent_span_float(Pointer s, double d) { - return MeosLibrary.meos.adjacent_span_float(s, d); + public static Pointer temporal_at_max(Pointer temp) { + return MeosLibrary.meos.temporal_at_max(temp); } @SuppressWarnings("unused") - public static boolean adjacent_span_int(Pointer s, int i) { - return MeosLibrary.meos.adjacent_span_int(s, i); + public static Pointer temporal_at_min(Pointer temp) { + return MeosLibrary.meos.temporal_at_min(temp); } @SuppressWarnings("unused") - public static boolean adjacent_span_span(Pointer s1, Pointer s2) { - return MeosLibrary.meos.adjacent_span_span(s1, s2); + public static Pointer temporal_at_timestamptz(Pointer temp, OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.temporal_at_timestamptz(temp, t_new); } @SuppressWarnings("unused") - public static boolean adjacent_span_spanset(Pointer s, Pointer ss) { - return MeosLibrary.meos.adjacent_span_spanset(s, ss); + public static Pointer temporal_at_tstzset(Pointer temp, Pointer s) { + return MeosLibrary.meos.temporal_at_tstzset(temp, s); } @SuppressWarnings("unused") - public static boolean adjacent_span_timestamptz(Pointer s, OffsetDateTime t) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.adjacent_span_timestamptz(s, t_new); + public static Pointer temporal_at_tstzspan(Pointer temp, Pointer s) { + return MeosLibrary.meos.temporal_at_tstzspan(temp, s); } @SuppressWarnings("unused") - public static boolean adjacent_spanset_bigint(Pointer ss, long i) { - return MeosLibrary.meos.adjacent_spanset_bigint(ss, i); + public static Pointer temporal_at_tstzspanset(Pointer temp, Pointer ss) { + return MeosLibrary.meos.temporal_at_tstzspanset(temp, ss); } @SuppressWarnings("unused") - public static boolean adjacent_spanset_date(Pointer ss, int d) { - return MeosLibrary.meos.adjacent_spanset_date(ss, d); + public static Pointer temporal_at_values(Pointer temp, Pointer set) { + return MeosLibrary.meos.temporal_at_values(temp, set); } @SuppressWarnings("unused") - public static boolean adjacent_spanset_float(Pointer ss, double d) { - return MeosLibrary.meos.adjacent_spanset_float(ss, d); + public static Pointer temporal_before_timestamptz(Pointer temp, OffsetDateTime t, boolean strict) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.temporal_before_timestamptz(temp, t_new, strict); } @SuppressWarnings("unused") - public static boolean adjacent_spanset_int(Pointer ss, int i) { - return MeosLibrary.meos.adjacent_spanset_int(ss, i); + public static Pointer temporal_minus_max(Pointer temp) { + return MeosLibrary.meos.temporal_minus_max(temp); } @SuppressWarnings("unused") - public static boolean adjacent_spanset_timestamptz(Pointer ss, OffsetDateTime t) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.adjacent_spanset_timestamptz(ss, t_new); + public static Pointer temporal_minus_min(Pointer temp) { + return MeosLibrary.meos.temporal_minus_min(temp); } @SuppressWarnings("unused") - public static boolean adjacent_spanset_span(Pointer ss, Pointer s) { - return MeosLibrary.meos.adjacent_spanset_span(ss, s); + public static Pointer temporal_minus_timestamptz(Pointer temp, OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.temporal_minus_timestamptz(temp, t_new); } @SuppressWarnings("unused") - public static boolean adjacent_spanset_spanset(Pointer ss1, Pointer ss2) { - return MeosLibrary.meos.adjacent_spanset_spanset(ss1, ss2); + public static Pointer temporal_minus_tstzset(Pointer temp, Pointer s) { + return MeosLibrary.meos.temporal_minus_tstzset(temp, s); } @SuppressWarnings("unused") - public static boolean contained_bigint_set(long i, Pointer s) { - return MeosLibrary.meos.contained_bigint_set(i, s); + public static Pointer temporal_minus_tstzspan(Pointer temp, Pointer s) { + return MeosLibrary.meos.temporal_minus_tstzspan(temp, s); } @SuppressWarnings("unused") - public static boolean contained_bigint_span(long i, Pointer s) { - return MeosLibrary.meos.contained_bigint_span(i, s); + public static Pointer temporal_minus_tstzspanset(Pointer temp, Pointer ss) { + return MeosLibrary.meos.temporal_minus_tstzspanset(temp, ss); } @SuppressWarnings("unused") - public static boolean contained_bigint_spanset(long i, Pointer ss) { - return MeosLibrary.meos.contained_bigint_spanset(i, ss); + public static Pointer temporal_minus_values(Pointer temp, Pointer set) { + return MeosLibrary.meos.temporal_minus_values(temp, set); } @SuppressWarnings("unused") - public static boolean contained_date_set(int d, Pointer s) { - return MeosLibrary.meos.contained_date_set(d, s); + public static Pointer tfloat_at_value(Pointer temp, double d) { + return MeosLibrary.meos.tfloat_at_value(temp, d); } @SuppressWarnings("unused") - public static boolean contained_date_span(int d, Pointer s) { - return MeosLibrary.meos.contained_date_span(d, s); + public static Pointer tfloat_minus_value(Pointer temp, double d) { + return MeosLibrary.meos.tfloat_minus_value(temp, d); } @SuppressWarnings("unused") - public static boolean contained_date_spanset(int d, Pointer ss) { - return MeosLibrary.meos.contained_date_spanset(d, ss); + public static Pointer tint_at_value(Pointer temp, int i) { + return MeosLibrary.meos.tint_at_value(temp, i); } @SuppressWarnings("unused") - public static boolean contained_float_set(double d, Pointer s) { - return MeosLibrary.meos.contained_float_set(d, s); + public static Pointer tint_minus_value(Pointer temp, int i) { + return MeosLibrary.meos.tint_minus_value(temp, i); } @SuppressWarnings("unused") - public static boolean contained_float_span(double d, Pointer s) { - return MeosLibrary.meos.contained_float_span(d, s); + public static Pointer tnumber_at_span(Pointer temp, Pointer span) { + return MeosLibrary.meos.tnumber_at_span(temp, span); } @SuppressWarnings("unused") - public static boolean contained_float_spanset(double d, Pointer ss) { - return MeosLibrary.meos.contained_float_spanset(d, ss); + public static Pointer tnumber_at_spanset(Pointer temp, Pointer ss) { + return MeosLibrary.meos.tnumber_at_spanset(temp, ss); } @SuppressWarnings("unused") - public static boolean contained_geo_set(Pointer gs, Pointer s) { - return MeosLibrary.meos.contained_geo_set(gs, s); + public static Pointer tnumber_at_tbox(Pointer temp, Pointer box) { + return MeosLibrary.meos.tnumber_at_tbox(temp, box); } @SuppressWarnings("unused") - public static boolean contained_int_set(int i, Pointer s) { - return MeosLibrary.meos.contained_int_set(i, s); + public static Pointer tnumber_minus_span(Pointer temp, Pointer span) { + return MeosLibrary.meos.tnumber_minus_span(temp, span); } @SuppressWarnings("unused") - public static boolean contained_int_span(int i, Pointer s) { - return MeosLibrary.meos.contained_int_span(i, s); + public static Pointer tnumber_minus_spanset(Pointer temp, Pointer ss) { + return MeosLibrary.meos.tnumber_minus_spanset(temp, ss); } @SuppressWarnings("unused") - public static boolean contained_int_spanset(int i, Pointer ss) { - return MeosLibrary.meos.contained_int_spanset(i, ss); + public static Pointer tnumber_minus_tbox(Pointer temp, Pointer box) { + return MeosLibrary.meos.tnumber_minus_tbox(temp, box); } @SuppressWarnings("unused") - public static boolean contained_set_set(Pointer s1, Pointer s2) { - return MeosLibrary.meos.contained_set_set(s1, s2); + public static Pointer ttext_at_value(Pointer temp, Pointer txt) { + return MeosLibrary.meos.ttext_at_value(temp, txt); } @SuppressWarnings("unused") - public static boolean contained_span_span(Pointer s1, Pointer s2) { - return MeosLibrary.meos.contained_span_span(s1, s2); + public static Pointer ttext_minus_value(Pointer temp, Pointer txt) { + return MeosLibrary.meos.ttext_minus_value(temp, txt); } @SuppressWarnings("unused") - public static boolean contained_span_spanset(Pointer s, Pointer ss) { - return MeosLibrary.meos.contained_span_spanset(s, ss); + public static int temporal_cmp(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.temporal_cmp(temp1, temp2); } @SuppressWarnings("unused") - public static boolean contained_spanset_span(Pointer ss, Pointer s) { - return MeosLibrary.meos.contained_spanset_span(ss, s); + public static boolean temporal_eq(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.temporal_eq(temp1, temp2); } @SuppressWarnings("unused") - public static boolean contained_spanset_spanset(Pointer ss1, Pointer ss2) { - return MeosLibrary.meos.contained_spanset_spanset(ss1, ss2); + public static boolean temporal_ge(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.temporal_ge(temp1, temp2); } @SuppressWarnings("unused") - public static boolean contained_text_set(Pointer txt, Pointer s) { - return MeosLibrary.meos.contained_text_set(txt, s); + public static boolean temporal_gt(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.temporal_gt(temp1, temp2); } @SuppressWarnings("unused") - public static boolean contained_timestamptz_set(OffsetDateTime t, Pointer s) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.contained_timestamptz_set(t_new, s); + public static boolean temporal_le(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.temporal_le(temp1, temp2); } @SuppressWarnings("unused") - public static boolean contained_timestamptz_span(OffsetDateTime t, Pointer s) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.contained_timestamptz_span(t_new, s); + public static boolean temporal_lt(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.temporal_lt(temp1, temp2); } @SuppressWarnings("unused") - public static boolean contained_timestamptz_spanset(OffsetDateTime t, Pointer ss) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.contained_timestamptz_spanset(t_new, ss); + public static boolean temporal_ne(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.temporal_ne(temp1, temp2); } @SuppressWarnings("unused") - public static boolean contains_set_bigint(Pointer s, long i) { - return MeosLibrary.meos.contains_set_bigint(s, i); + public static int always_eq_bool_tbool(boolean b, Pointer temp) { + return MeosLibrary.meos.always_eq_bool_tbool(b, temp); } @SuppressWarnings("unused") - public static boolean contains_set_date(Pointer s, int d) { - return MeosLibrary.meos.contains_set_date(s, d); + public static int always_eq_float_tfloat(double d, Pointer temp) { + return MeosLibrary.meos.always_eq_float_tfloat(d, temp); } @SuppressWarnings("unused") - public static boolean contains_set_float(Pointer s, double d) { - return MeosLibrary.meos.contains_set_float(s, d); + public static int always_eq_int_tint(int i, Pointer temp) { + return MeosLibrary.meos.always_eq_int_tint(i, temp); } @SuppressWarnings("unused") - public static boolean contains_set_geo(Pointer s, Pointer gs) { - return MeosLibrary.meos.contains_set_geo(s, gs); + public static int always_eq_tbool_bool(Pointer temp, boolean b) { + return MeosLibrary.meos.always_eq_tbool_bool(temp, b); } @SuppressWarnings("unused") - public static boolean contains_set_int(Pointer s, int i) { - return MeosLibrary.meos.contains_set_int(s, i); + public static int always_eq_temporal_temporal(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.always_eq_temporal_temporal(temp1, temp2); } @SuppressWarnings("unused") - public static boolean contains_set_set(Pointer s1, Pointer s2) { - return MeosLibrary.meos.contains_set_set(s1, s2); + public static int always_eq_text_ttext(Pointer txt, Pointer temp) { + return MeosLibrary.meos.always_eq_text_ttext(txt, temp); } @SuppressWarnings("unused") - public static boolean contains_set_text(Pointer s, Pointer t) { - return MeosLibrary.meos.contains_set_text(s, t); + public static int always_eq_tfloat_float(Pointer temp, double d) { + return MeosLibrary.meos.always_eq_tfloat_float(temp, d); } @SuppressWarnings("unused") - public static boolean contains_set_timestamptz(Pointer s, OffsetDateTime t) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.contains_set_timestamptz(s, t_new); + public static int always_eq_tint_int(Pointer temp, int i) { + return MeosLibrary.meos.always_eq_tint_int(temp, i); } @SuppressWarnings("unused") - public static boolean contains_span_bigint(Pointer s, long i) { - return MeosLibrary.meos.contains_span_bigint(s, i); + public static int always_eq_ttext_text(Pointer temp, Pointer txt) { + return MeosLibrary.meos.always_eq_ttext_text(temp, txt); } @SuppressWarnings("unused") - public static boolean contains_span_date(Pointer s, int d) { - return MeosLibrary.meos.contains_span_date(s, d); + public static int always_ge_float_tfloat(double d, Pointer temp) { + return MeosLibrary.meos.always_ge_float_tfloat(d, temp); } @SuppressWarnings("unused") - public static boolean contains_span_float(Pointer s, double d) { - return MeosLibrary.meos.contains_span_float(s, d); + public static int always_ge_int_tint(int i, Pointer temp) { + return MeosLibrary.meos.always_ge_int_tint(i, temp); } @SuppressWarnings("unused") - public static boolean contains_span_int(Pointer s, int i) { - return MeosLibrary.meos.contains_span_int(s, i); + public static int always_ge_temporal_temporal(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.always_ge_temporal_temporal(temp1, temp2); } @SuppressWarnings("unused") - public static boolean contains_span_span(Pointer s1, Pointer s2) { - return MeosLibrary.meos.contains_span_span(s1, s2); + public static int always_ge_text_ttext(Pointer txt, Pointer temp) { + return MeosLibrary.meos.always_ge_text_ttext(txt, temp); } @SuppressWarnings("unused") - public static boolean contains_span_spanset(Pointer s, Pointer ss) { - return MeosLibrary.meos.contains_span_spanset(s, ss); + public static int always_ge_tfloat_float(Pointer temp, double d) { + return MeosLibrary.meos.always_ge_tfloat_float(temp, d); } @SuppressWarnings("unused") - public static boolean contains_span_timestamptz(Pointer s, OffsetDateTime t) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.contains_span_timestamptz(s, t_new); + public static int always_ge_tint_int(Pointer temp, int i) { + return MeosLibrary.meos.always_ge_tint_int(temp, i); } @SuppressWarnings("unused") - public static boolean contains_spanset_bigint(Pointer ss, long i) { - return MeosLibrary.meos.contains_spanset_bigint(ss, i); + public static int always_ge_ttext_text(Pointer temp, Pointer txt) { + return MeosLibrary.meos.always_ge_ttext_text(temp, txt); } @SuppressWarnings("unused") - public static boolean contains_spanset_date(Pointer ss, int d) { - return MeosLibrary.meos.contains_spanset_date(ss, d); + public static int always_gt_float_tfloat(double d, Pointer temp) { + return MeosLibrary.meos.always_gt_float_tfloat(d, temp); } @SuppressWarnings("unused") - public static boolean contains_spanset_float(Pointer ss, double d) { - return MeosLibrary.meos.contains_spanset_float(ss, d); + public static int always_gt_int_tint(int i, Pointer temp) { + return MeosLibrary.meos.always_gt_int_tint(i, temp); } @SuppressWarnings("unused") - public static boolean contains_spanset_int(Pointer ss, int i) { - return MeosLibrary.meos.contains_spanset_int(ss, i); + public static int always_gt_temporal_temporal(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.always_gt_temporal_temporal(temp1, temp2); } @SuppressWarnings("unused") - public static boolean contains_spanset_span(Pointer ss, Pointer s) { - return MeosLibrary.meos.contains_spanset_span(ss, s); + public static int always_gt_text_ttext(Pointer txt, Pointer temp) { + return MeosLibrary.meos.always_gt_text_ttext(txt, temp); } @SuppressWarnings("unused") - public static boolean contains_spanset_spanset(Pointer ss1, Pointer ss2) { - return MeosLibrary.meos.contains_spanset_spanset(ss1, ss2); + public static int always_gt_tfloat_float(Pointer temp, double d) { + return MeosLibrary.meos.always_gt_tfloat_float(temp, d); } @SuppressWarnings("unused") - public static boolean contains_spanset_timestamptz(Pointer ss, OffsetDateTime t) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.contains_spanset_timestamptz(ss, t_new); + public static int always_gt_tint_int(Pointer temp, int i) { + return MeosLibrary.meos.always_gt_tint_int(temp, i); } @SuppressWarnings("unused") - public static boolean overlaps_set_set(Pointer s1, Pointer s2) { - return MeosLibrary.meos.overlaps_set_set(s1, s2); + public static int always_gt_ttext_text(Pointer temp, Pointer txt) { + return MeosLibrary.meos.always_gt_ttext_text(temp, txt); } @SuppressWarnings("unused") - public static boolean overlaps_span_span(Pointer s1, Pointer s2) { - return MeosLibrary.meos.overlaps_span_span(s1, s2); + public static int always_le_float_tfloat(double d, Pointer temp) { + return MeosLibrary.meos.always_le_float_tfloat(d, temp); } @SuppressWarnings("unused") - public static boolean overlaps_span_spanset(Pointer s, Pointer ss) { - return MeosLibrary.meos.overlaps_span_spanset(s, ss); + public static int always_le_int_tint(int i, Pointer temp) { + return MeosLibrary.meos.always_le_int_tint(i, temp); } @SuppressWarnings("unused") - public static boolean overlaps_spanset_span(Pointer ss, Pointer s) { - return MeosLibrary.meos.overlaps_spanset_span(ss, s); + public static int always_le_temporal_temporal(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.always_le_temporal_temporal(temp1, temp2); } @SuppressWarnings("unused") - public static boolean overlaps_spanset_spanset(Pointer ss1, Pointer ss2) { - return MeosLibrary.meos.overlaps_spanset_spanset(ss1, ss2); + public static int always_le_text_ttext(Pointer txt, Pointer temp) { + return MeosLibrary.meos.always_le_text_ttext(txt, temp); } @SuppressWarnings("unused") - public static boolean after_date_set(int d, Pointer s) { - return MeosLibrary.meos.after_date_set(d, s); + public static int always_le_tfloat_float(Pointer temp, double d) { + return MeosLibrary.meos.always_le_tfloat_float(temp, d); } @SuppressWarnings("unused") - public static boolean after_date_span(int d, Pointer s) { - return MeosLibrary.meos.after_date_span(d, s); + public static int always_le_tint_int(Pointer temp, int i) { + return MeosLibrary.meos.always_le_tint_int(temp, i); } @SuppressWarnings("unused") - public static boolean after_date_spanset(int d, Pointer ss) { - return MeosLibrary.meos.after_date_spanset(d, ss); + public static int always_le_ttext_text(Pointer temp, Pointer txt) { + return MeosLibrary.meos.always_le_ttext_text(temp, txt); } @SuppressWarnings("unused") - public static boolean after_set_date(Pointer s, int d) { - return MeosLibrary.meos.after_set_date(s, d); + public static int always_lt_float_tfloat(double d, Pointer temp) { + return MeosLibrary.meos.always_lt_float_tfloat(d, temp); } @SuppressWarnings("unused") - public static boolean after_set_timestamptz(Pointer s, OffsetDateTime t) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.after_set_timestamptz(s, t_new); + public static int always_lt_int_tint(int i, Pointer temp) { + return MeosLibrary.meos.always_lt_int_tint(i, temp); } @SuppressWarnings("unused") - public static boolean after_span_date(Pointer s, int d) { - return MeosLibrary.meos.after_span_date(s, d); + public static int always_lt_temporal_temporal(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.always_lt_temporal_temporal(temp1, temp2); } @SuppressWarnings("unused") - public static boolean after_span_timestamptz(Pointer s, OffsetDateTime t) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.after_span_timestamptz(s, t_new); + public static int always_lt_text_ttext(Pointer txt, Pointer temp) { + return MeosLibrary.meos.always_lt_text_ttext(txt, temp); } @SuppressWarnings("unused") - public static boolean after_spanset_date(Pointer ss, int d) { - return MeosLibrary.meos.after_spanset_date(ss, d); + public static int always_lt_tfloat_float(Pointer temp, double d) { + return MeosLibrary.meos.always_lt_tfloat_float(temp, d); } @SuppressWarnings("unused") - public static boolean after_spanset_timestamptz(Pointer ss, OffsetDateTime t) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.after_spanset_timestamptz(ss, t_new); + public static int always_lt_tint_int(Pointer temp, int i) { + return MeosLibrary.meos.always_lt_tint_int(temp, i); } @SuppressWarnings("unused") - public static boolean after_timestamptz_set(OffsetDateTime t, Pointer s) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.after_timestamptz_set(t_new, s); + public static int always_lt_ttext_text(Pointer temp, Pointer txt) { + return MeosLibrary.meos.always_lt_ttext_text(temp, txt); } @SuppressWarnings("unused") - public static boolean after_timestamptz_span(OffsetDateTime t, Pointer s) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.after_timestamptz_span(t_new, s); + public static int always_ne_bool_tbool(boolean b, Pointer temp) { + return MeosLibrary.meos.always_ne_bool_tbool(b, temp); } @SuppressWarnings("unused") - public static boolean after_timestamptz_spanset(OffsetDateTime t, Pointer ss) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.after_timestamptz_spanset(t_new, ss); + public static int always_ne_float_tfloat(double d, Pointer temp) { + return MeosLibrary.meos.always_ne_float_tfloat(d, temp); } @SuppressWarnings("unused") - public static boolean before_date_set(int d, Pointer s) { - return MeosLibrary.meos.before_date_set(d, s); + public static int always_ne_int_tint(int i, Pointer temp) { + return MeosLibrary.meos.always_ne_int_tint(i, temp); } @SuppressWarnings("unused") - public static boolean before_date_span(int d, Pointer s) { - return MeosLibrary.meos.before_date_span(d, s); + public static int always_ne_tbool_bool(Pointer temp, boolean b) { + return MeosLibrary.meos.always_ne_tbool_bool(temp, b); } @SuppressWarnings("unused") - public static boolean before_date_spanset(int d, Pointer ss) { - return MeosLibrary.meos.before_date_spanset(d, ss); + public static int always_ne_temporal_temporal(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.always_ne_temporal_temporal(temp1, temp2); } @SuppressWarnings("unused") - public static boolean before_set_date(Pointer s, int d) { - return MeosLibrary.meos.before_set_date(s, d); + public static int always_ne_text_ttext(Pointer txt, Pointer temp) { + return MeosLibrary.meos.always_ne_text_ttext(txt, temp); } @SuppressWarnings("unused") - public static boolean before_set_timestamptz(Pointer s, OffsetDateTime t) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.before_set_timestamptz(s, t_new); + public static int always_ne_tfloat_float(Pointer temp, double d) { + return MeosLibrary.meos.always_ne_tfloat_float(temp, d); } @SuppressWarnings("unused") - public static boolean before_span_date(Pointer s, int d) { - return MeosLibrary.meos.before_span_date(s, d); + public static int always_ne_tint_int(Pointer temp, int i) { + return MeosLibrary.meos.always_ne_tint_int(temp, i); } @SuppressWarnings("unused") - public static boolean before_span_timestamptz(Pointer s, OffsetDateTime t) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.before_span_timestamptz(s, t_new); + public static int always_ne_ttext_text(Pointer temp, Pointer txt) { + return MeosLibrary.meos.always_ne_ttext_text(temp, txt); } @SuppressWarnings("unused") - public static boolean before_spanset_date(Pointer ss, int d) { - return MeosLibrary.meos.before_spanset_date(ss, d); + public static int ever_eq_bool_tbool(boolean b, Pointer temp) { + return MeosLibrary.meos.ever_eq_bool_tbool(b, temp); } @SuppressWarnings("unused") - public static boolean before_spanset_timestamptz(Pointer ss, OffsetDateTime t) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.before_spanset_timestamptz(ss, t_new); + public static int ever_eq_float_tfloat(double d, Pointer temp) { + return MeosLibrary.meos.ever_eq_float_tfloat(d, temp); } @SuppressWarnings("unused") - public static boolean before_timestamptz_set(OffsetDateTime t, Pointer s) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.before_timestamptz_set(t_new, s); + public static int ever_eq_int_tint(int i, Pointer temp) { + return MeosLibrary.meos.ever_eq_int_tint(i, temp); } @SuppressWarnings("unused") - public static boolean before_timestamptz_span(OffsetDateTime t, Pointer s) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.before_timestamptz_span(t_new, s); + public static int ever_eq_tbool_bool(Pointer temp, boolean b) { + return MeosLibrary.meos.ever_eq_tbool_bool(temp, b); } @SuppressWarnings("unused") - public static boolean before_timestamptz_spanset(OffsetDateTime t, Pointer ss) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.before_timestamptz_spanset(t_new, ss); + public static int ever_eq_temporal_temporal(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.ever_eq_temporal_temporal(temp1, temp2); } @SuppressWarnings("unused") - public static boolean left_bigint_set(long i, Pointer s) { - return MeosLibrary.meos.left_bigint_set(i, s); + public static int ever_eq_text_ttext(Pointer txt, Pointer temp) { + return MeosLibrary.meos.ever_eq_text_ttext(txt, temp); } @SuppressWarnings("unused") - public static boolean left_bigint_span(long i, Pointer s) { - return MeosLibrary.meos.left_bigint_span(i, s); + public static int ever_eq_tfloat_float(Pointer temp, double d) { + return MeosLibrary.meos.ever_eq_tfloat_float(temp, d); } @SuppressWarnings("unused") - public static boolean left_bigint_spanset(long i, Pointer ss) { - return MeosLibrary.meos.left_bigint_spanset(i, ss); + public static int ever_eq_tint_int(Pointer temp, int i) { + return MeosLibrary.meos.ever_eq_tint_int(temp, i); } @SuppressWarnings("unused") - public static boolean left_float_set(double d, Pointer s) { - return MeosLibrary.meos.left_float_set(d, s); + public static int ever_eq_ttext_text(Pointer temp, Pointer txt) { + return MeosLibrary.meos.ever_eq_ttext_text(temp, txt); } @SuppressWarnings("unused") - public static boolean left_float_span(double d, Pointer s) { - return MeosLibrary.meos.left_float_span(d, s); + public static int ever_ge_float_tfloat(double d, Pointer temp) { + return MeosLibrary.meos.ever_ge_float_tfloat(d, temp); } @SuppressWarnings("unused") - public static boolean left_float_spanset(double d, Pointer ss) { - return MeosLibrary.meos.left_float_spanset(d, ss); + public static int ever_ge_int_tint(int i, Pointer temp) { + return MeosLibrary.meos.ever_ge_int_tint(i, temp); } @SuppressWarnings("unused") - public static boolean left_int_set(int i, Pointer s) { - return MeosLibrary.meos.left_int_set(i, s); + public static int ever_ge_temporal_temporal(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.ever_ge_temporal_temporal(temp1, temp2); } @SuppressWarnings("unused") - public static boolean left_int_span(int i, Pointer s) { - return MeosLibrary.meos.left_int_span(i, s); + public static int ever_ge_text_ttext(Pointer txt, Pointer temp) { + return MeosLibrary.meos.ever_ge_text_ttext(txt, temp); } @SuppressWarnings("unused") - public static boolean left_int_spanset(int i, Pointer ss) { - return MeosLibrary.meos.left_int_spanset(i, ss); + public static int ever_ge_tfloat_float(Pointer temp, double d) { + return MeosLibrary.meos.ever_ge_tfloat_float(temp, d); } @SuppressWarnings("unused") - public static boolean left_set_bigint(Pointer s, long i) { - return MeosLibrary.meos.left_set_bigint(s, i); + public static int ever_ge_tint_int(Pointer temp, int i) { + return MeosLibrary.meos.ever_ge_tint_int(temp, i); } @SuppressWarnings("unused") - public static boolean left_set_float(Pointer s, double d) { - return MeosLibrary.meos.left_set_float(s, d); + public static int ever_ge_ttext_text(Pointer temp, Pointer txt) { + return MeosLibrary.meos.ever_ge_ttext_text(temp, txt); } @SuppressWarnings("unused") - public static boolean left_set_int(Pointer s, int i) { - return MeosLibrary.meos.left_set_int(s, i); + public static int ever_gt_float_tfloat(double d, Pointer temp) { + return MeosLibrary.meos.ever_gt_float_tfloat(d, temp); } @SuppressWarnings("unused") - public static boolean left_set_set(Pointer s1, Pointer s2) { - return MeosLibrary.meos.left_set_set(s1, s2); + public static int ever_gt_int_tint(int i, Pointer temp) { + return MeosLibrary.meos.ever_gt_int_tint(i, temp); } @SuppressWarnings("unused") - public static boolean left_set_text(Pointer s, Pointer txt) { - return MeosLibrary.meos.left_set_text(s, txt); + public static int ever_gt_temporal_temporal(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.ever_gt_temporal_temporal(temp1, temp2); } @SuppressWarnings("unused") - public static boolean left_span_bigint(Pointer s, long i) { - return MeosLibrary.meos.left_span_bigint(s, i); + public static int ever_gt_text_ttext(Pointer txt, Pointer temp) { + return MeosLibrary.meos.ever_gt_text_ttext(txt, temp); } @SuppressWarnings("unused") - public static boolean left_span_float(Pointer s, double d) { - return MeosLibrary.meos.left_span_float(s, d); + public static int ever_gt_tfloat_float(Pointer temp, double d) { + return MeosLibrary.meos.ever_gt_tfloat_float(temp, d); } @SuppressWarnings("unused") - public static boolean left_span_int(Pointer s, int i) { - return MeosLibrary.meos.left_span_int(s, i); + public static int ever_gt_tint_int(Pointer temp, int i) { + return MeosLibrary.meos.ever_gt_tint_int(temp, i); } @SuppressWarnings("unused") - public static boolean left_span_span(Pointer s1, Pointer s2) { - return MeosLibrary.meos.left_span_span(s1, s2); + public static int ever_gt_ttext_text(Pointer temp, Pointer txt) { + return MeosLibrary.meos.ever_gt_ttext_text(temp, txt); } @SuppressWarnings("unused") - public static boolean left_span_spanset(Pointer s, Pointer ss) { - return MeosLibrary.meos.left_span_spanset(s, ss); + public static int ever_le_float_tfloat(double d, Pointer temp) { + return MeosLibrary.meos.ever_le_float_tfloat(d, temp); } @SuppressWarnings("unused") - public static boolean left_spanset_bigint(Pointer ss, long i) { - return MeosLibrary.meos.left_spanset_bigint(ss, i); + public static int ever_le_int_tint(int i, Pointer temp) { + return MeosLibrary.meos.ever_le_int_tint(i, temp); } @SuppressWarnings("unused") - public static boolean left_spanset_float(Pointer ss, double d) { - return MeosLibrary.meos.left_spanset_float(ss, d); + public static int ever_le_temporal_temporal(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.ever_le_temporal_temporal(temp1, temp2); } @SuppressWarnings("unused") - public static boolean left_spanset_int(Pointer ss, int i) { - return MeosLibrary.meos.left_spanset_int(ss, i); + public static int ever_le_text_ttext(Pointer txt, Pointer temp) { + return MeosLibrary.meos.ever_le_text_ttext(txt, temp); } @SuppressWarnings("unused") - public static boolean left_spanset_span(Pointer ss, Pointer s) { - return MeosLibrary.meos.left_spanset_span(ss, s); + public static int ever_le_tfloat_float(Pointer temp, double d) { + return MeosLibrary.meos.ever_le_tfloat_float(temp, d); } @SuppressWarnings("unused") - public static boolean left_spanset_spanset(Pointer ss1, Pointer ss2) { - return MeosLibrary.meos.left_spanset_spanset(ss1, ss2); + public static int ever_le_tint_int(Pointer temp, int i) { + return MeosLibrary.meos.ever_le_tint_int(temp, i); } @SuppressWarnings("unused") - public static boolean left_text_set(Pointer txt, Pointer s) { - return MeosLibrary.meos.left_text_set(txt, s); + public static int ever_le_ttext_text(Pointer temp, Pointer txt) { + return MeosLibrary.meos.ever_le_ttext_text(temp, txt); } @SuppressWarnings("unused") - public static boolean overafter_date_set(int d, Pointer s) { - return MeosLibrary.meos.overafter_date_set(d, s); + public static int ever_lt_float_tfloat(double d, Pointer temp) { + return MeosLibrary.meos.ever_lt_float_tfloat(d, temp); } @SuppressWarnings("unused") - public static boolean overafter_date_span(int d, Pointer s) { - return MeosLibrary.meos.overafter_date_span(d, s); + public static int ever_lt_int_tint(int i, Pointer temp) { + return MeosLibrary.meos.ever_lt_int_tint(i, temp); } @SuppressWarnings("unused") - public static boolean overafter_date_spanset(int d, Pointer ss) { - return MeosLibrary.meos.overafter_date_spanset(d, ss); + public static int ever_lt_temporal_temporal(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.ever_lt_temporal_temporal(temp1, temp2); } @SuppressWarnings("unused") - public static boolean overafter_set_date(Pointer s, int d) { - return MeosLibrary.meos.overafter_set_date(s, d); + public static int ever_lt_text_ttext(Pointer txt, Pointer temp) { + return MeosLibrary.meos.ever_lt_text_ttext(txt, temp); } @SuppressWarnings("unused") - public static boolean overafter_set_timestamptz(Pointer s, OffsetDateTime t) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.overafter_set_timestamptz(s, t_new); + public static int ever_lt_tfloat_float(Pointer temp, double d) { + return MeosLibrary.meos.ever_lt_tfloat_float(temp, d); } @SuppressWarnings("unused") - public static boolean overafter_span_date(Pointer s, int d) { - return MeosLibrary.meos.overafter_span_date(s, d); + public static int ever_lt_tint_int(Pointer temp, int i) { + return MeosLibrary.meos.ever_lt_tint_int(temp, i); } @SuppressWarnings("unused") - public static boolean overafter_span_timestamptz(Pointer s, OffsetDateTime t) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.overafter_span_timestamptz(s, t_new); + public static int ever_lt_ttext_text(Pointer temp, Pointer txt) { + return MeosLibrary.meos.ever_lt_ttext_text(temp, txt); } @SuppressWarnings("unused") - public static boolean overafter_spanset_date(Pointer ss, int d) { - return MeosLibrary.meos.overafter_spanset_date(ss, d); + public static int ever_ne_bool_tbool(boolean b, Pointer temp) { + return MeosLibrary.meos.ever_ne_bool_tbool(b, temp); } @SuppressWarnings("unused") - public static boolean overafter_spanset_timestamptz(Pointer ss, OffsetDateTime t) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.overafter_spanset_timestamptz(ss, t_new); + public static int ever_ne_float_tfloat(double d, Pointer temp) { + return MeosLibrary.meos.ever_ne_float_tfloat(d, temp); } @SuppressWarnings("unused") - public static boolean overafter_timestamptz_set(OffsetDateTime t, Pointer s) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.overafter_timestamptz_set(t_new, s); + public static int ever_ne_int_tint(int i, Pointer temp) { + return MeosLibrary.meos.ever_ne_int_tint(i, temp); } @SuppressWarnings("unused") - public static boolean overafter_timestamptz_span(OffsetDateTime t, Pointer s) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.overafter_timestamptz_span(t_new, s); + public static int ever_ne_tbool_bool(Pointer temp, boolean b) { + return MeosLibrary.meos.ever_ne_tbool_bool(temp, b); } @SuppressWarnings("unused") - public static boolean overafter_timestamptz_spanset(OffsetDateTime t, Pointer ss) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.overafter_timestamptz_spanset(t_new, ss); + public static int ever_ne_temporal_temporal(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.ever_ne_temporal_temporal(temp1, temp2); } @SuppressWarnings("unused") - public static boolean overbefore_date_set(int d, Pointer s) { - return MeosLibrary.meos.overbefore_date_set(d, s); + public static int ever_ne_text_ttext(Pointer txt, Pointer temp) { + return MeosLibrary.meos.ever_ne_text_ttext(txt, temp); } @SuppressWarnings("unused") - public static boolean overbefore_date_span(int d, Pointer s) { - return MeosLibrary.meos.overbefore_date_span(d, s); + public static int ever_ne_tfloat_float(Pointer temp, double d) { + return MeosLibrary.meos.ever_ne_tfloat_float(temp, d); } @SuppressWarnings("unused") - public static boolean overbefore_date_spanset(int d, Pointer ss) { - return MeosLibrary.meos.overbefore_date_spanset(d, ss); + public static int ever_ne_tint_int(Pointer temp, int i) { + return MeosLibrary.meos.ever_ne_tint_int(temp, i); } @SuppressWarnings("unused") - public static boolean overbefore_set_date(Pointer s, int d) { - return MeosLibrary.meos.overbefore_set_date(s, d); + public static int ever_ne_ttext_text(Pointer temp, Pointer txt) { + return MeosLibrary.meos.ever_ne_ttext_text(temp, txt); } @SuppressWarnings("unused") - public static boolean overbefore_set_timestamptz(Pointer s, OffsetDateTime t) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.overbefore_set_timestamptz(s, t_new); + public static Pointer teq_bool_tbool(boolean b, Pointer temp) { + return MeosLibrary.meos.teq_bool_tbool(b, temp); } @SuppressWarnings("unused") - public static boolean overbefore_span_date(Pointer s, int d) { - return MeosLibrary.meos.overbefore_span_date(s, d); + public static Pointer teq_float_tfloat(double d, Pointer temp) { + return MeosLibrary.meos.teq_float_tfloat(d, temp); } @SuppressWarnings("unused") - public static boolean overbefore_span_timestamptz(Pointer s, OffsetDateTime t) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.overbefore_span_timestamptz(s, t_new); + public static Pointer teq_int_tint(int i, Pointer temp) { + return MeosLibrary.meos.teq_int_tint(i, temp); } @SuppressWarnings("unused") - public static boolean overbefore_spanset_date(Pointer ss, int d) { - return MeosLibrary.meos.overbefore_spanset_date(ss, d); + public static Pointer teq_tbool_bool(Pointer temp, boolean b) { + return MeosLibrary.meos.teq_tbool_bool(temp, b); } @SuppressWarnings("unused") - public static boolean overbefore_spanset_timestamptz(Pointer ss, OffsetDateTime t) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.overbefore_spanset_timestamptz(ss, t_new); + public static Pointer teq_temporal_temporal(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.teq_temporal_temporal(temp1, temp2); } @SuppressWarnings("unused") - public static boolean overbefore_timestamptz_set(OffsetDateTime t, Pointer s) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.overbefore_timestamptz_set(t_new, s); + public static Pointer teq_text_ttext(Pointer txt, Pointer temp) { + return MeosLibrary.meos.teq_text_ttext(txt, temp); } @SuppressWarnings("unused") - public static boolean overbefore_timestamptz_span(OffsetDateTime t, Pointer s) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.overbefore_timestamptz_span(t_new, s); + public static Pointer teq_tfloat_float(Pointer temp, double d) { + return MeosLibrary.meos.teq_tfloat_float(temp, d); } @SuppressWarnings("unused") - public static boolean overbefore_timestamptz_spanset(OffsetDateTime t, Pointer ss) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.overbefore_timestamptz_spanset(t_new, ss); + public static Pointer teq_tint_int(Pointer temp, int i) { + return MeosLibrary.meos.teq_tint_int(temp, i); } @SuppressWarnings("unused") - public static boolean overleft_bigint_set(long i, Pointer s) { - return MeosLibrary.meos.overleft_bigint_set(i, s); + public static Pointer teq_ttext_text(Pointer temp, Pointer txt) { + return MeosLibrary.meos.teq_ttext_text(temp, txt); } @SuppressWarnings("unused") - public static boolean overleft_bigint_span(long i, Pointer s) { - return MeosLibrary.meos.overleft_bigint_span(i, s); + public static Pointer tge_float_tfloat(double d, Pointer temp) { + return MeosLibrary.meos.tge_float_tfloat(d, temp); } @SuppressWarnings("unused") - public static boolean overleft_bigint_spanset(long i, Pointer ss) { - return MeosLibrary.meos.overleft_bigint_spanset(i, ss); + public static Pointer tge_int_tint(int i, Pointer temp) { + return MeosLibrary.meos.tge_int_tint(i, temp); } @SuppressWarnings("unused") - public static boolean overleft_float_set(double d, Pointer s) { - return MeosLibrary.meos.overleft_float_set(d, s); + public static Pointer tge_temporal_temporal(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.tge_temporal_temporal(temp1, temp2); } @SuppressWarnings("unused") - public static boolean overleft_float_span(double d, Pointer s) { - return MeosLibrary.meos.overleft_float_span(d, s); + public static Pointer tge_text_ttext(Pointer txt, Pointer temp) { + return MeosLibrary.meos.tge_text_ttext(txt, temp); } @SuppressWarnings("unused") - public static boolean overleft_float_spanset(double d, Pointer ss) { - return MeosLibrary.meos.overleft_float_spanset(d, ss); + public static Pointer tge_tfloat_float(Pointer temp, double d) { + return MeosLibrary.meos.tge_tfloat_float(temp, d); } @SuppressWarnings("unused") - public static boolean overleft_int_set(int i, Pointer s) { - return MeosLibrary.meos.overleft_int_set(i, s); + public static Pointer tge_tint_int(Pointer temp, int i) { + return MeosLibrary.meos.tge_tint_int(temp, i); } @SuppressWarnings("unused") - public static boolean overleft_int_span(int i, Pointer s) { - return MeosLibrary.meos.overleft_int_span(i, s); + public static Pointer tge_ttext_text(Pointer temp, Pointer txt) { + return MeosLibrary.meos.tge_ttext_text(temp, txt); } @SuppressWarnings("unused") - public static boolean overleft_int_spanset(int i, Pointer ss) { - return MeosLibrary.meos.overleft_int_spanset(i, ss); + public static Pointer tgt_float_tfloat(double d, Pointer temp) { + return MeosLibrary.meos.tgt_float_tfloat(d, temp); } @SuppressWarnings("unused") - public static boolean overleft_set_bigint(Pointer s, long i) { - return MeosLibrary.meos.overleft_set_bigint(s, i); + public static Pointer tgt_int_tint(int i, Pointer temp) { + return MeosLibrary.meos.tgt_int_tint(i, temp); } @SuppressWarnings("unused") - public static boolean overleft_set_float(Pointer s, double d) { - return MeosLibrary.meos.overleft_set_float(s, d); + public static Pointer tgt_temporal_temporal(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.tgt_temporal_temporal(temp1, temp2); } @SuppressWarnings("unused") - public static boolean overleft_set_int(Pointer s, int i) { - return MeosLibrary.meos.overleft_set_int(s, i); + public static Pointer tgt_text_ttext(Pointer txt, Pointer temp) { + return MeosLibrary.meos.tgt_text_ttext(txt, temp); } @SuppressWarnings("unused") - public static boolean overleft_set_set(Pointer s1, Pointer s2) { - return MeosLibrary.meos.overleft_set_set(s1, s2); + public static Pointer tgt_tfloat_float(Pointer temp, double d) { + return MeosLibrary.meos.tgt_tfloat_float(temp, d); } @SuppressWarnings("unused") - public static boolean overleft_set_text(Pointer s, Pointer txt) { - return MeosLibrary.meos.overleft_set_text(s, txt); + public static Pointer tgt_tint_int(Pointer temp, int i) { + return MeosLibrary.meos.tgt_tint_int(temp, i); } @SuppressWarnings("unused") - public static boolean overleft_span_bigint(Pointer s, long i) { - return MeosLibrary.meos.overleft_span_bigint(s, i); + public static Pointer tgt_ttext_text(Pointer temp, Pointer txt) { + return MeosLibrary.meos.tgt_ttext_text(temp, txt); } @SuppressWarnings("unused") - public static boolean overleft_span_float(Pointer s, double d) { - return MeosLibrary.meos.overleft_span_float(s, d); + public static Pointer tle_float_tfloat(double d, Pointer temp) { + return MeosLibrary.meos.tle_float_tfloat(d, temp); } @SuppressWarnings("unused") - public static boolean overleft_span_int(Pointer s, int i) { - return MeosLibrary.meos.overleft_span_int(s, i); + public static Pointer tle_int_tint(int i, Pointer temp) { + return MeosLibrary.meos.tle_int_tint(i, temp); } @SuppressWarnings("unused") - public static boolean overleft_span_span(Pointer s1, Pointer s2) { - return MeosLibrary.meos.overleft_span_span(s1, s2); + public static Pointer tle_temporal_temporal(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.tle_temporal_temporal(temp1, temp2); } @SuppressWarnings("unused") - public static boolean overleft_span_spanset(Pointer s, Pointer ss) { - return MeosLibrary.meos.overleft_span_spanset(s, ss); + public static Pointer tle_text_ttext(Pointer txt, Pointer temp) { + return MeosLibrary.meos.tle_text_ttext(txt, temp); } @SuppressWarnings("unused") - public static boolean overleft_spanset_bigint(Pointer ss, long i) { - return MeosLibrary.meos.overleft_spanset_bigint(ss, i); + public static Pointer tle_tfloat_float(Pointer temp, double d) { + return MeosLibrary.meos.tle_tfloat_float(temp, d); } @SuppressWarnings("unused") - public static boolean overleft_spanset_float(Pointer ss, double d) { - return MeosLibrary.meos.overleft_spanset_float(ss, d); + public static Pointer tle_tint_int(Pointer temp, int i) { + return MeosLibrary.meos.tle_tint_int(temp, i); } @SuppressWarnings("unused") - public static boolean overleft_spanset_int(Pointer ss, int i) { - return MeosLibrary.meos.overleft_spanset_int(ss, i); + public static Pointer tle_ttext_text(Pointer temp, Pointer txt) { + return MeosLibrary.meos.tle_ttext_text(temp, txt); } @SuppressWarnings("unused") - public static boolean overleft_spanset_span(Pointer ss, Pointer s) { - return MeosLibrary.meos.overleft_spanset_span(ss, s); + public static Pointer tlt_float_tfloat(double d, Pointer temp) { + return MeosLibrary.meos.tlt_float_tfloat(d, temp); } @SuppressWarnings("unused") - public static boolean overleft_spanset_spanset(Pointer ss1, Pointer ss2) { - return MeosLibrary.meos.overleft_spanset_spanset(ss1, ss2); + public static Pointer tlt_int_tint(int i, Pointer temp) { + return MeosLibrary.meos.tlt_int_tint(i, temp); } @SuppressWarnings("unused") - public static boolean overleft_text_set(Pointer txt, Pointer s) { - return MeosLibrary.meos.overleft_text_set(txt, s); + public static Pointer tlt_temporal_temporal(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.tlt_temporal_temporal(temp1, temp2); } @SuppressWarnings("unused") - public static boolean overright_bigint_set(long i, Pointer s) { - return MeosLibrary.meos.overright_bigint_set(i, s); + public static Pointer tlt_text_ttext(Pointer txt, Pointer temp) { + return MeosLibrary.meos.tlt_text_ttext(txt, temp); } @SuppressWarnings("unused") - public static boolean overright_bigint_span(long i, Pointer s) { - return MeosLibrary.meos.overright_bigint_span(i, s); + public static Pointer tlt_tfloat_float(Pointer temp, double d) { + return MeosLibrary.meos.tlt_tfloat_float(temp, d); } @SuppressWarnings("unused") - public static boolean overright_bigint_spanset(long i, Pointer ss) { - return MeosLibrary.meos.overright_bigint_spanset(i, ss); + public static Pointer tlt_tint_int(Pointer temp, int i) { + return MeosLibrary.meos.tlt_tint_int(temp, i); } @SuppressWarnings("unused") - public static boolean overright_float_set(double d, Pointer s) { - return MeosLibrary.meos.overright_float_set(d, s); + public static Pointer tlt_ttext_text(Pointer temp, Pointer txt) { + return MeosLibrary.meos.tlt_ttext_text(temp, txt); } @SuppressWarnings("unused") - public static boolean overright_float_span(double d, Pointer s) { - return MeosLibrary.meos.overright_float_span(d, s); + public static Pointer tne_bool_tbool(boolean b, Pointer temp) { + return MeosLibrary.meos.tne_bool_tbool(b, temp); } @SuppressWarnings("unused") - public static boolean overright_float_spanset(double d, Pointer ss) { - return MeosLibrary.meos.overright_float_spanset(d, ss); + public static Pointer tne_float_tfloat(double d, Pointer temp) { + return MeosLibrary.meos.tne_float_tfloat(d, temp); } @SuppressWarnings("unused") - public static boolean overright_int_set(int i, Pointer s) { - return MeosLibrary.meos.overright_int_set(i, s); + public static Pointer tne_int_tint(int i, Pointer temp) { + return MeosLibrary.meos.tne_int_tint(i, temp); } @SuppressWarnings("unused") - public static boolean overright_int_span(int i, Pointer s) { - return MeosLibrary.meos.overright_int_span(i, s); + public static Pointer tne_tbool_bool(Pointer temp, boolean b) { + return MeosLibrary.meos.tne_tbool_bool(temp, b); } @SuppressWarnings("unused") - public static boolean overright_int_spanset(int i, Pointer ss) { - return MeosLibrary.meos.overright_int_spanset(i, ss); + public static Pointer tne_temporal_temporal(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.tne_temporal_temporal(temp1, temp2); } @SuppressWarnings("unused") - public static boolean overright_set_bigint(Pointer s, long i) { - return MeosLibrary.meos.overright_set_bigint(s, i); + public static Pointer tne_text_ttext(Pointer txt, Pointer temp) { + return MeosLibrary.meos.tne_text_ttext(txt, temp); } @SuppressWarnings("unused") - public static boolean overright_set_float(Pointer s, double d) { - return MeosLibrary.meos.overright_set_float(s, d); + public static Pointer tne_tfloat_float(Pointer temp, double d) { + return MeosLibrary.meos.tne_tfloat_float(temp, d); } @SuppressWarnings("unused") - public static boolean overright_set_int(Pointer s, int i) { - return MeosLibrary.meos.overright_set_int(s, i); + public static Pointer tne_tint_int(Pointer temp, int i) { + return MeosLibrary.meos.tne_tint_int(temp, i); } @SuppressWarnings("unused") - public static boolean overright_set_set(Pointer s1, Pointer s2) { - return MeosLibrary.meos.overright_set_set(s1, s2); + public static Pointer tne_ttext_text(Pointer temp, Pointer txt) { + return MeosLibrary.meos.tne_ttext_text(temp, txt); } @SuppressWarnings("unused") - public static boolean overright_set_text(Pointer s, Pointer txt) { - return MeosLibrary.meos.overright_set_text(s, txt); + public static Pointer temporal_spans(Pointer temp, Pointer count) { + return MeosLibrary.meos.temporal_spans(temp, count); } @SuppressWarnings("unused") - public static boolean overright_span_bigint(Pointer s, long i) { - return MeosLibrary.meos.overright_span_bigint(s, i); + public static Pointer temporal_split_each_n_spans(Pointer temp, int elem_count, Pointer count) { + return MeosLibrary.meos.temporal_split_each_n_spans(temp, elem_count, count); } @SuppressWarnings("unused") - public static boolean overright_span_float(Pointer s, double d) { - return MeosLibrary.meos.overright_span_float(s, d); + public static Pointer temporal_split_n_spans(Pointer temp, int span_count, Pointer count) { + return MeosLibrary.meos.temporal_split_n_spans(temp, span_count, count); } @SuppressWarnings("unused") - public static boolean overright_span_int(Pointer s, int i) { - return MeosLibrary.meos.overright_span_int(s, i); + public static Pointer tnumber_split_each_n_tboxes(Pointer temp, int elem_count, Pointer count) { + return MeosLibrary.meos.tnumber_split_each_n_tboxes(temp, elem_count, count); } @SuppressWarnings("unused") - public static boolean overright_span_span(Pointer s1, Pointer s2) { - return MeosLibrary.meos.overright_span_span(s1, s2); + public static Pointer tnumber_split_n_tboxes(Pointer temp, int box_count, Pointer count) { + return MeosLibrary.meos.tnumber_split_n_tboxes(temp, box_count, count); } @SuppressWarnings("unused") - public static boolean overright_span_spanset(Pointer s, Pointer ss) { - return MeosLibrary.meos.overright_span_spanset(s, ss); + public static Pointer tnumber_tboxes(Pointer temp, Pointer count) { + return MeosLibrary.meos.tnumber_tboxes(temp, count); } @SuppressWarnings("unused") - public static boolean overright_spanset_bigint(Pointer ss, long i) { - return MeosLibrary.meos.overright_spanset_bigint(ss, i); + public static boolean adjacent_numspan_tnumber(Pointer s, Pointer temp) { + return MeosLibrary.meos.adjacent_numspan_tnumber(s, temp); } @SuppressWarnings("unused") - public static boolean overright_spanset_float(Pointer ss, double d) { - return MeosLibrary.meos.overright_spanset_float(ss, d); + public static boolean adjacent_tbox_tnumber(Pointer box, Pointer temp) { + return MeosLibrary.meos.adjacent_tbox_tnumber(box, temp); } @SuppressWarnings("unused") - public static boolean overright_spanset_int(Pointer ss, int i) { - return MeosLibrary.meos.overright_spanset_int(ss, i); + public static boolean adjacent_temporal_temporal(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.adjacent_temporal_temporal(temp1, temp2); } @SuppressWarnings("unused") - public static boolean overright_spanset_span(Pointer ss, Pointer s) { - return MeosLibrary.meos.overright_spanset_span(ss, s); + public static boolean adjacent_temporal_tstzspan(Pointer temp, Pointer s) { + return MeosLibrary.meos.adjacent_temporal_tstzspan(temp, s); } @SuppressWarnings("unused") - public static boolean overright_spanset_spanset(Pointer ss1, Pointer ss2) { - return MeosLibrary.meos.overright_spanset_spanset(ss1, ss2); + public static boolean adjacent_tnumber_numspan(Pointer temp, Pointer s) { + return MeosLibrary.meos.adjacent_tnumber_numspan(temp, s); } @SuppressWarnings("unused") - public static boolean overright_text_set(Pointer txt, Pointer s) { - return MeosLibrary.meos.overright_text_set(txt, s); + public static boolean adjacent_tnumber_tbox(Pointer temp, Pointer box) { + return MeosLibrary.meos.adjacent_tnumber_tbox(temp, box); } @SuppressWarnings("unused") - public static boolean right_bigint_set(long i, Pointer s) { - return MeosLibrary.meos.right_bigint_set(i, s); + public static boolean adjacent_tnumber_tnumber(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.adjacent_tnumber_tnumber(temp1, temp2); } @SuppressWarnings("unused") - public static boolean right_bigint_span(long i, Pointer s) { - return MeosLibrary.meos.right_bigint_span(i, s); + public static boolean adjacent_tstzspan_temporal(Pointer s, Pointer temp) { + return MeosLibrary.meos.adjacent_tstzspan_temporal(s, temp); } @SuppressWarnings("unused") - public static boolean right_bigint_spanset(long i, Pointer ss) { - return MeosLibrary.meos.right_bigint_spanset(i, ss); + public static boolean contained_numspan_tnumber(Pointer s, Pointer temp) { + return MeosLibrary.meos.contained_numspan_tnumber(s, temp); } @SuppressWarnings("unused") - public static boolean right_float_set(double d, Pointer s) { - return MeosLibrary.meos.right_float_set(d, s); + public static boolean contained_tbox_tnumber(Pointer box, Pointer temp) { + return MeosLibrary.meos.contained_tbox_tnumber(box, temp); } @SuppressWarnings("unused") - public static boolean right_float_span(double d, Pointer s) { - return MeosLibrary.meos.right_float_span(d, s); + public static boolean contained_temporal_temporal(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.contained_temporal_temporal(temp1, temp2); } @SuppressWarnings("unused") - public static boolean right_float_spanset(double d, Pointer ss) { - return MeosLibrary.meos.right_float_spanset(d, ss); + public static boolean contained_temporal_tstzspan(Pointer temp, Pointer s) { + return MeosLibrary.meos.contained_temporal_tstzspan(temp, s); } @SuppressWarnings("unused") - public static boolean right_int_set(int i, Pointer s) { - return MeosLibrary.meos.right_int_set(i, s); + public static boolean contained_tnumber_numspan(Pointer temp, Pointer s) { + return MeosLibrary.meos.contained_tnumber_numspan(temp, s); } @SuppressWarnings("unused") - public static boolean right_int_span(int i, Pointer s) { - return MeosLibrary.meos.right_int_span(i, s); + public static boolean contained_tnumber_tbox(Pointer temp, Pointer box) { + return MeosLibrary.meos.contained_tnumber_tbox(temp, box); } @SuppressWarnings("unused") - public static boolean right_int_spanset(int i, Pointer ss) { - return MeosLibrary.meos.right_int_spanset(i, ss); + public static boolean contained_tnumber_tnumber(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.contained_tnumber_tnumber(temp1, temp2); } @SuppressWarnings("unused") - public static boolean right_set_bigint(Pointer s, long i) { - return MeosLibrary.meos.right_set_bigint(s, i); + public static boolean contained_tstzspan_temporal(Pointer s, Pointer temp) { + return MeosLibrary.meos.contained_tstzspan_temporal(s, temp); } @SuppressWarnings("unused") - public static boolean right_set_float(Pointer s, double d) { - return MeosLibrary.meos.right_set_float(s, d); + public static boolean contains_numspan_tnumber(Pointer s, Pointer temp) { + return MeosLibrary.meos.contains_numspan_tnumber(s, temp); } @SuppressWarnings("unused") - public static boolean right_set_int(Pointer s, int i) { - return MeosLibrary.meos.right_set_int(s, i); + public static boolean contains_tbox_tnumber(Pointer box, Pointer temp) { + return MeosLibrary.meos.contains_tbox_tnumber(box, temp); } @SuppressWarnings("unused") - public static boolean right_set_set(Pointer s1, Pointer s2) { - return MeosLibrary.meos.right_set_set(s1, s2); + public static boolean contains_temporal_tstzspan(Pointer temp, Pointer s) { + return MeosLibrary.meos.contains_temporal_tstzspan(temp, s); } @SuppressWarnings("unused") - public static boolean right_set_text(Pointer s, Pointer txt) { - return MeosLibrary.meos.right_set_text(s, txt); + public static boolean contains_temporal_temporal(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.contains_temporal_temporal(temp1, temp2); } @SuppressWarnings("unused") - public static boolean right_span_bigint(Pointer s, long i) { - return MeosLibrary.meos.right_span_bigint(s, i); + public static boolean contains_tnumber_numspan(Pointer temp, Pointer s) { + return MeosLibrary.meos.contains_tnumber_numspan(temp, s); } @SuppressWarnings("unused") - public static boolean right_span_float(Pointer s, double d) { - return MeosLibrary.meos.right_span_float(s, d); + public static boolean contains_tnumber_tbox(Pointer temp, Pointer box) { + return MeosLibrary.meos.contains_tnumber_tbox(temp, box); } @SuppressWarnings("unused") - public static boolean right_span_int(Pointer s, int i) { - return MeosLibrary.meos.right_span_int(s, i); + public static boolean contains_tnumber_tnumber(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.contains_tnumber_tnumber(temp1, temp2); } @SuppressWarnings("unused") - public static boolean right_span_span(Pointer s1, Pointer s2) { - return MeosLibrary.meos.right_span_span(s1, s2); + public static boolean contains_tstzspan_temporal(Pointer s, Pointer temp) { + return MeosLibrary.meos.contains_tstzspan_temporal(s, temp); } @SuppressWarnings("unused") - public static boolean right_span_spanset(Pointer s, Pointer ss) { - return MeosLibrary.meos.right_span_spanset(s, ss); + public static boolean overlaps_numspan_tnumber(Pointer s, Pointer temp) { + return MeosLibrary.meos.overlaps_numspan_tnumber(s, temp); } @SuppressWarnings("unused") - public static boolean right_spanset_bigint(Pointer ss, long i) { - return MeosLibrary.meos.right_spanset_bigint(ss, i); + public static boolean overlaps_tbox_tnumber(Pointer box, Pointer temp) { + return MeosLibrary.meos.overlaps_tbox_tnumber(box, temp); } @SuppressWarnings("unused") - public static boolean right_spanset_float(Pointer ss, double d) { - return MeosLibrary.meos.right_spanset_float(ss, d); + public static boolean overlaps_temporal_temporal(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.overlaps_temporal_temporal(temp1, temp2); } @SuppressWarnings("unused") - public static boolean right_spanset_int(Pointer ss, int i) { - return MeosLibrary.meos.right_spanset_int(ss, i); + public static boolean overlaps_temporal_tstzspan(Pointer temp, Pointer s) { + return MeosLibrary.meos.overlaps_temporal_tstzspan(temp, s); } @SuppressWarnings("unused") - public static boolean right_spanset_span(Pointer ss, Pointer s) { - return MeosLibrary.meos.right_spanset_span(ss, s); + public static boolean overlaps_tnumber_numspan(Pointer temp, Pointer s) { + return MeosLibrary.meos.overlaps_tnumber_numspan(temp, s); } @SuppressWarnings("unused") - public static boolean right_spanset_spanset(Pointer ss1, Pointer ss2) { - return MeosLibrary.meos.right_spanset_spanset(ss1, ss2); + public static boolean overlaps_tnumber_tbox(Pointer temp, Pointer box) { + return MeosLibrary.meos.overlaps_tnumber_tbox(temp, box); } @SuppressWarnings("unused") - public static boolean right_text_set(Pointer txt, Pointer s) { - return MeosLibrary.meos.right_text_set(txt, s); + public static boolean overlaps_tnumber_tnumber(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.overlaps_tnumber_tnumber(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer intersection_bigint_set(long i, Pointer s) { - return MeosLibrary.meos.intersection_bigint_set(i, s); + public static boolean overlaps_tstzspan_temporal(Pointer s, Pointer temp) { + return MeosLibrary.meos.overlaps_tstzspan_temporal(s, temp); } @SuppressWarnings("unused") - public static Pointer intersection_date_set(int d, Pointer s) { - return MeosLibrary.meos.intersection_date_set(d, s); + public static boolean same_numspan_tnumber(Pointer s, Pointer temp) { + return MeosLibrary.meos.same_numspan_tnumber(s, temp); } @SuppressWarnings("unused") - public static Pointer intersection_float_set(double d, Pointer s) { - return MeosLibrary.meos.intersection_float_set(d, s); + public static boolean same_tbox_tnumber(Pointer box, Pointer temp) { + return MeosLibrary.meos.same_tbox_tnumber(box, temp); } @SuppressWarnings("unused") - public static Pointer intersection_geo_set(Pointer gs, Pointer s) { - return MeosLibrary.meos.intersection_geo_set(gs, s); + public static boolean same_temporal_temporal(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.same_temporal_temporal(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer intersection_int_set(int i, Pointer s) { - return MeosLibrary.meos.intersection_int_set(i, s); + public static boolean same_temporal_tstzspan(Pointer temp, Pointer s) { + return MeosLibrary.meos.same_temporal_tstzspan(temp, s); } @SuppressWarnings("unused") - public static Pointer intersection_set_bigint(Pointer s, long i) { - return MeosLibrary.meos.intersection_set_bigint(s, i); + public static boolean same_tnumber_numspan(Pointer temp, Pointer s) { + return MeosLibrary.meos.same_tnumber_numspan(temp, s); } @SuppressWarnings("unused") - public static Pointer intersection_set_date(Pointer s, int d) { - return MeosLibrary.meos.intersection_set_date(s, d); + public static boolean same_tnumber_tbox(Pointer temp, Pointer box) { + return MeosLibrary.meos.same_tnumber_tbox(temp, box); } @SuppressWarnings("unused") - public static Pointer intersection_set_float(Pointer s, double d) { - return MeosLibrary.meos.intersection_set_float(s, d); + public static boolean same_tnumber_tnumber(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.same_tnumber_tnumber(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer intersection_set_geo(Pointer s, Pointer gs) { - return MeosLibrary.meos.intersection_set_geo(s, gs); + public static boolean same_tstzspan_temporal(Pointer s, Pointer temp) { + return MeosLibrary.meos.same_tstzspan_temporal(s, temp); } @SuppressWarnings("unused") - public static Pointer intersection_set_int(Pointer s, int i) { - return MeosLibrary.meos.intersection_set_int(s, i); + public static boolean after_tbox_tnumber(Pointer box, Pointer temp) { + return MeosLibrary.meos.after_tbox_tnumber(box, temp); } @SuppressWarnings("unused") - public static Pointer intersection_set_set(Pointer s1, Pointer s2) { - return MeosLibrary.meos.intersection_set_set(s1, s2); + public static boolean after_temporal_tstzspan(Pointer temp, Pointer s) { + return MeosLibrary.meos.after_temporal_tstzspan(temp, s); } @SuppressWarnings("unused") - public static Pointer intersection_set_text(Pointer s, Pointer txt) { - return MeosLibrary.meos.intersection_set_text(s, txt); + public static boolean after_temporal_temporal(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.after_temporal_temporal(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer intersection_set_timestamptz(Pointer s, OffsetDateTime t) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.intersection_set_timestamptz(s, t_new); + public static boolean after_tnumber_tbox(Pointer temp, Pointer box) { + return MeosLibrary.meos.after_tnumber_tbox(temp, box); } @SuppressWarnings("unused") - public static Pointer intersection_span_bigint(Pointer s, long i) { - return MeosLibrary.meos.intersection_span_bigint(s, i); + public static boolean after_tnumber_tnumber(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.after_tnumber_tnumber(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer intersection_span_date(Pointer s, int d) { - return MeosLibrary.meos.intersection_span_date(s, d); + public static boolean after_tstzspan_temporal(Pointer s, Pointer temp) { + return MeosLibrary.meos.after_tstzspan_temporal(s, temp); } @SuppressWarnings("unused") - public static Pointer intersection_span_float(Pointer s, double d) { - return MeosLibrary.meos.intersection_span_float(s, d); + public static boolean before_tbox_tnumber(Pointer box, Pointer temp) { + return MeosLibrary.meos.before_tbox_tnumber(box, temp); } @SuppressWarnings("unused") - public static Pointer intersection_span_int(Pointer s, int i) { - return MeosLibrary.meos.intersection_span_int(s, i); + public static boolean before_temporal_tstzspan(Pointer temp, Pointer s) { + return MeosLibrary.meos.before_temporal_tstzspan(temp, s); } @SuppressWarnings("unused") - public static Pointer intersection_span_span(Pointer s1, Pointer s2) { - return MeosLibrary.meos.intersection_span_span(s1, s2); + public static boolean before_temporal_temporal(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.before_temporal_temporal(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer intersection_span_spanset(Pointer s, Pointer ss) { - return MeosLibrary.meos.intersection_span_spanset(s, ss); + public static boolean before_tnumber_tbox(Pointer temp, Pointer box) { + return MeosLibrary.meos.before_tnumber_tbox(temp, box); } @SuppressWarnings("unused") - public static Pointer intersection_span_timestamptz(Pointer s, OffsetDateTime t) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.intersection_span_timestamptz(s, t_new); + public static boolean before_tnumber_tnumber(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.before_tnumber_tnumber(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer intersection_spanset_bigint(Pointer ss, long i) { - return MeosLibrary.meos.intersection_spanset_bigint(ss, i); + public static boolean before_tstzspan_temporal(Pointer s, Pointer temp) { + return MeosLibrary.meos.before_tstzspan_temporal(s, temp); } @SuppressWarnings("unused") - public static Pointer intersection_spanset_date(Pointer ss, int d) { - return MeosLibrary.meos.intersection_spanset_date(ss, d); + public static boolean left_tbox_tnumber(Pointer box, Pointer temp) { + return MeosLibrary.meos.left_tbox_tnumber(box, temp); } @SuppressWarnings("unused") - public static Pointer intersection_spanset_float(Pointer ss, double d) { - return MeosLibrary.meos.intersection_spanset_float(ss, d); + public static boolean left_numspan_tnumber(Pointer s, Pointer temp) { + return MeosLibrary.meos.left_numspan_tnumber(s, temp); } @SuppressWarnings("unused") - public static Pointer intersection_spanset_int(Pointer ss, int i) { - return MeosLibrary.meos.intersection_spanset_int(ss, i); + public static boolean left_tnumber_numspan(Pointer temp, Pointer s) { + return MeosLibrary.meos.left_tnumber_numspan(temp, s); } @SuppressWarnings("unused") - public static Pointer intersection_spanset_span(Pointer ss, Pointer s) { - return MeosLibrary.meos.intersection_spanset_span(ss, s); + public static boolean left_tnumber_tbox(Pointer temp, Pointer box) { + return MeosLibrary.meos.left_tnumber_tbox(temp, box); } @SuppressWarnings("unused") - public static Pointer intersection_spanset_spanset(Pointer ss1, Pointer ss2) { - return MeosLibrary.meos.intersection_spanset_spanset(ss1, ss2); + public static boolean left_tnumber_tnumber(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.left_tnumber_tnumber(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer intersection_spanset_timestamptz(Pointer ss, OffsetDateTime t) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.intersection_spanset_timestamptz(ss, t_new); + public static boolean overafter_tbox_tnumber(Pointer box, Pointer temp) { + return MeosLibrary.meos.overafter_tbox_tnumber(box, temp); } @SuppressWarnings("unused") - public static Pointer intersection_text_set(Pointer txt, Pointer s) { - return MeosLibrary.meos.intersection_text_set(txt, s); + public static boolean overafter_temporal_tstzspan(Pointer temp, Pointer s) { + return MeosLibrary.meos.overafter_temporal_tstzspan(temp, s); } @SuppressWarnings("unused") - public static Pointer intersection_timestamptz_set(OffsetDateTime t, Pointer s) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.intersection_timestamptz_set(t_new, s); + public static boolean overafter_temporal_temporal(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.overafter_temporal_temporal(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer minus_bigint_set(long i, Pointer s) { - return MeosLibrary.meos.minus_bigint_set(i, s); + public static boolean overafter_tnumber_tbox(Pointer temp, Pointer box) { + return MeosLibrary.meos.overafter_tnumber_tbox(temp, box); } @SuppressWarnings("unused") - public static Pointer minus_bigint_span(long i, Pointer s) { - return MeosLibrary.meos.minus_bigint_span(i, s); + public static boolean overafter_tnumber_tnumber(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.overafter_tnumber_tnumber(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer minus_bigint_spanset(long i, Pointer ss) { - return MeosLibrary.meos.minus_bigint_spanset(i, ss); + public static boolean overafter_tstzspan_temporal(Pointer s, Pointer temp) { + return MeosLibrary.meos.overafter_tstzspan_temporal(s, temp); } @SuppressWarnings("unused") - public static Pointer minus_date_set(int d, Pointer s) { - return MeosLibrary.meos.minus_date_set(d, s); + public static boolean overbefore_tbox_tnumber(Pointer box, Pointer temp) { + return MeosLibrary.meos.overbefore_tbox_tnumber(box, temp); } @SuppressWarnings("unused") - public static Pointer minus_date_span(int d, Pointer s) { - return MeosLibrary.meos.minus_date_span(d, s); + public static boolean overbefore_temporal_tstzspan(Pointer temp, Pointer s) { + return MeosLibrary.meos.overbefore_temporal_tstzspan(temp, s); } @SuppressWarnings("unused") - public static Pointer minus_date_spanset(int d, Pointer ss) { - return MeosLibrary.meos.minus_date_spanset(d, ss); + public static boolean overbefore_temporal_temporal(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.overbefore_temporal_temporal(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer minus_float_set(double d, Pointer s) { - return MeosLibrary.meos.minus_float_set(d, s); + public static boolean overbefore_tnumber_tbox(Pointer temp, Pointer box) { + return MeosLibrary.meos.overbefore_tnumber_tbox(temp, box); } @SuppressWarnings("unused") - public static Pointer minus_float_span(double d, Pointer s) { - return MeosLibrary.meos.minus_float_span(d, s); + public static boolean overbefore_tnumber_tnumber(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.overbefore_tnumber_tnumber(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer minus_float_spanset(double d, Pointer ss) { - return MeosLibrary.meos.minus_float_spanset(d, ss); + public static boolean overbefore_tstzspan_temporal(Pointer s, Pointer temp) { + return MeosLibrary.meos.overbefore_tstzspan_temporal(s, temp); } @SuppressWarnings("unused") - public static Pointer minus_geo_set(Pointer gs, Pointer s) { - return MeosLibrary.meos.minus_geo_set(gs, s); + public static boolean overleft_numspan_tnumber(Pointer s, Pointer temp) { + return MeosLibrary.meos.overleft_numspan_tnumber(s, temp); } @SuppressWarnings("unused") - public static Pointer minus_int_set(int i, Pointer s) { - return MeosLibrary.meos.minus_int_set(i, s); + public static boolean overleft_tbox_tnumber(Pointer box, Pointer temp) { + return MeosLibrary.meos.overleft_tbox_tnumber(box, temp); } @SuppressWarnings("unused") - public static Pointer minus_int_span(int i, Pointer s) { - return MeosLibrary.meos.minus_int_span(i, s); + public static boolean overleft_tnumber_numspan(Pointer temp, Pointer s) { + return MeosLibrary.meos.overleft_tnumber_numspan(temp, s); } @SuppressWarnings("unused") - public static Pointer minus_int_spanset(int i, Pointer ss) { - return MeosLibrary.meos.minus_int_spanset(i, ss); + public static boolean overleft_tnumber_tbox(Pointer temp, Pointer box) { + return MeosLibrary.meos.overleft_tnumber_tbox(temp, box); } @SuppressWarnings("unused") - public static Pointer minus_set_bigint(Pointer s, long i) { - return MeosLibrary.meos.minus_set_bigint(s, i); + public static boolean overleft_tnumber_tnumber(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.overleft_tnumber_tnumber(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer minus_set_date(Pointer s, int d) { - return MeosLibrary.meos.minus_set_date(s, d); + public static boolean overright_numspan_tnumber(Pointer s, Pointer temp) { + return MeosLibrary.meos.overright_numspan_tnumber(s, temp); } @SuppressWarnings("unused") - public static Pointer minus_set_float(Pointer s, double d) { - return MeosLibrary.meos.minus_set_float(s, d); + public static boolean overright_tbox_tnumber(Pointer box, Pointer temp) { + return MeosLibrary.meos.overright_tbox_tnumber(box, temp); } @SuppressWarnings("unused") - public static Pointer minus_set_geo(Pointer s, Pointer gs) { - return MeosLibrary.meos.minus_set_geo(s, gs); + public static boolean overright_tnumber_numspan(Pointer temp, Pointer s) { + return MeosLibrary.meos.overright_tnumber_numspan(temp, s); } @SuppressWarnings("unused") - public static Pointer minus_set_int(Pointer s, int i) { - return MeosLibrary.meos.minus_set_int(s, i); + public static boolean overright_tnumber_tbox(Pointer temp, Pointer box) { + return MeosLibrary.meos.overright_tnumber_tbox(temp, box); } @SuppressWarnings("unused") - public static Pointer minus_set_set(Pointer s1, Pointer s2) { - return MeosLibrary.meos.minus_set_set(s1, s2); + public static boolean overright_tnumber_tnumber(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.overright_tnumber_tnumber(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer minus_set_text(Pointer s, Pointer txt) { - return MeosLibrary.meos.minus_set_text(s, txt); + public static boolean right_numspan_tnumber(Pointer s, Pointer temp) { + return MeosLibrary.meos.right_numspan_tnumber(s, temp); } @SuppressWarnings("unused") - public static Pointer minus_set_timestamptz(Pointer s, OffsetDateTime t) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.minus_set_timestamptz(s, t_new); + public static boolean right_tbox_tnumber(Pointer box, Pointer temp) { + return MeosLibrary.meos.right_tbox_tnumber(box, temp); } @SuppressWarnings("unused") - public static Pointer minus_span_bigint(Pointer s, long i) { - return MeosLibrary.meos.minus_span_bigint(s, i); + public static boolean right_tnumber_numspan(Pointer temp, Pointer s) { + return MeosLibrary.meos.right_tnumber_numspan(temp, s); } @SuppressWarnings("unused") - public static Pointer minus_span_date(Pointer s, int d) { - return MeosLibrary.meos.minus_span_date(s, d); + public static boolean right_tnumber_tbox(Pointer temp, Pointer box) { + return MeosLibrary.meos.right_tnumber_tbox(temp, box); } @SuppressWarnings("unused") - public static Pointer minus_span_float(Pointer s, double d) { - return MeosLibrary.meos.minus_span_float(s, d); + public static boolean right_tnumber_tnumber(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.right_tnumber_tnumber(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer minus_span_int(Pointer s, int i) { - return MeosLibrary.meos.minus_span_int(s, i); + public static Pointer tand_bool_tbool(boolean b, Pointer temp) { + return MeosLibrary.meos.tand_bool_tbool(b, temp); } @SuppressWarnings("unused") - public static Pointer minus_span_span(Pointer s1, Pointer s2) { - return MeosLibrary.meos.minus_span_span(s1, s2); + public static Pointer tand_tbool_bool(Pointer temp, boolean b) { + return MeosLibrary.meos.tand_tbool_bool(temp, b); } @SuppressWarnings("unused") - public static Pointer minus_span_spanset(Pointer s, Pointer ss) { - return MeosLibrary.meos.minus_span_spanset(s, ss); + public static Pointer tand_tbool_tbool(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.tand_tbool_tbool(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer minus_span_timestamptz(Pointer s, OffsetDateTime t) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.minus_span_timestamptz(s, t_new); + public static Pointer tbool_when_true(Pointer temp) { + return MeosLibrary.meos.tbool_when_true(temp); } @SuppressWarnings("unused") - public static Pointer minus_spanset_bigint(Pointer ss, long i) { - return MeosLibrary.meos.minus_spanset_bigint(ss, i); + public static Pointer tnot_tbool(Pointer temp) { + return MeosLibrary.meos.tnot_tbool(temp); } @SuppressWarnings("unused") - public static Pointer minus_spanset_date(Pointer ss, int d) { - return MeosLibrary.meos.minus_spanset_date(ss, d); + public static Pointer tor_bool_tbool(boolean b, Pointer temp) { + return MeosLibrary.meos.tor_bool_tbool(b, temp); } @SuppressWarnings("unused") - public static Pointer minus_spanset_float(Pointer ss, double d) { - return MeosLibrary.meos.minus_spanset_float(ss, d); + public static Pointer tor_tbool_bool(Pointer temp, boolean b) { + return MeosLibrary.meos.tor_tbool_bool(temp, b); } @SuppressWarnings("unused") - public static Pointer minus_spanset_int(Pointer ss, int i) { - return MeosLibrary.meos.minus_spanset_int(ss, i); + public static Pointer tor_tbool_tbool(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.tor_tbool_tbool(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer minus_spanset_span(Pointer ss, Pointer s) { - return MeosLibrary.meos.minus_spanset_span(ss, s); + public static Pointer add_float_tfloat(double d, Pointer tnumber) { + return MeosLibrary.meos.add_float_tfloat(d, tnumber); } @SuppressWarnings("unused") - public static Pointer minus_spanset_spanset(Pointer ss1, Pointer ss2) { - return MeosLibrary.meos.minus_spanset_spanset(ss1, ss2); + public static Pointer add_int_tint(int i, Pointer tnumber) { + return MeosLibrary.meos.add_int_tint(i, tnumber); } @SuppressWarnings("unused") - public static Pointer minus_spanset_timestamptz(Pointer ss, OffsetDateTime t) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.minus_spanset_timestamptz(ss, t_new); + public static Pointer add_tfloat_float(Pointer tnumber, double d) { + return MeosLibrary.meos.add_tfloat_float(tnumber, d); } @SuppressWarnings("unused") - public static Pointer minus_text_set(Pointer txt, Pointer s) { - return MeosLibrary.meos.minus_text_set(txt, s); + public static Pointer add_tint_int(Pointer tnumber, int i) { + return MeosLibrary.meos.add_tint_int(tnumber, i); } @SuppressWarnings("unused") - public static Pointer minus_timestamptz_set(OffsetDateTime t, Pointer s) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.minus_timestamptz_set(t_new, s); + public static Pointer add_tnumber_tnumber(Pointer tnumber1, Pointer tnumber2) { + return MeosLibrary.meos.add_tnumber_tnumber(tnumber1, tnumber2); } @SuppressWarnings("unused") - public static Pointer minus_timestamptz_span(OffsetDateTime t, Pointer s) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.minus_timestamptz_span(t_new, s); + public static Pointer div_float_tfloat(double d, Pointer tnumber) { + return MeosLibrary.meos.div_float_tfloat(d, tnumber); } @SuppressWarnings("unused") - public static Pointer minus_timestamptz_spanset(OffsetDateTime t, Pointer ss) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.minus_timestamptz_spanset(t_new, ss); + public static Pointer div_int_tint(int i, Pointer tnumber) { + return MeosLibrary.meos.div_int_tint(i, tnumber); } @SuppressWarnings("unused") - public static Pointer union_bigint_set(long i, Pointer s) { - return MeosLibrary.meos.union_bigint_set(i, s); + public static Pointer div_tfloat_float(Pointer tnumber, double d) { + return MeosLibrary.meos.div_tfloat_float(tnumber, d); } @SuppressWarnings("unused") - public static Pointer union_bigint_span(Pointer s, long i) { - return MeosLibrary.meos.union_bigint_span(s, i); + public static Pointer div_tint_int(Pointer tnumber, int i) { + return MeosLibrary.meos.div_tint_int(tnumber, i); } @SuppressWarnings("unused") - public static Pointer union_bigint_spanset(long i, Pointer ss) { - return MeosLibrary.meos.union_bigint_spanset(i, ss); + public static Pointer div_tnumber_tnumber(Pointer tnumber1, Pointer tnumber2) { + return MeosLibrary.meos.div_tnumber_tnumber(tnumber1, tnumber2); } @SuppressWarnings("unused") - public static Pointer union_date_set(int d, Pointer s) { - return MeosLibrary.meos.union_date_set(d, s); + public static Pointer mult_float_tfloat(double d, Pointer tnumber) { + return MeosLibrary.meos.mult_float_tfloat(d, tnumber); } @SuppressWarnings("unused") - public static Pointer union_date_span(Pointer s, int d) { - return MeosLibrary.meos.union_date_span(s, d); + public static Pointer mult_int_tint(int i, Pointer tnumber) { + return MeosLibrary.meos.mult_int_tint(i, tnumber); } @SuppressWarnings("unused") - public static Pointer union_date_spanset(int d, Pointer ss) { - return MeosLibrary.meos.union_date_spanset(d, ss); + public static Pointer mult_tfloat_float(Pointer tnumber, double d) { + return MeosLibrary.meos.mult_tfloat_float(tnumber, d); } @SuppressWarnings("unused") - public static Pointer union_float_set(double d, Pointer s) { - return MeosLibrary.meos.union_float_set(d, s); + public static Pointer mult_tint_int(Pointer tnumber, int i) { + return MeosLibrary.meos.mult_tint_int(tnumber, i); } @SuppressWarnings("unused") - public static Pointer union_float_span(Pointer s, double d) { - return MeosLibrary.meos.union_float_span(s, d); + public static Pointer mult_tnumber_tnumber(Pointer tnumber1, Pointer tnumber2) { + return MeosLibrary.meos.mult_tnumber_tnumber(tnumber1, tnumber2); } @SuppressWarnings("unused") - public static Pointer union_float_spanset(double d, Pointer ss) { - return MeosLibrary.meos.union_float_spanset(d, ss); + public static Pointer sub_float_tfloat(double d, Pointer tnumber) { + return MeosLibrary.meos.sub_float_tfloat(d, tnumber); } @SuppressWarnings("unused") - public static Pointer union_geo_set(Pointer gs, Pointer s) { - return MeosLibrary.meos.union_geo_set(gs, s); + public static Pointer sub_int_tint(int i, Pointer tnumber) { + return MeosLibrary.meos.sub_int_tint(i, tnumber); } @SuppressWarnings("unused") - public static Pointer union_int_set(int i, Pointer s) { - return MeosLibrary.meos.union_int_set(i, s); + public static Pointer sub_tfloat_float(Pointer tnumber, double d) { + return MeosLibrary.meos.sub_tfloat_float(tnumber, d); } @SuppressWarnings("unused") - public static Pointer union_int_span(int i, Pointer s) { - return MeosLibrary.meos.union_int_span(i, s); + public static Pointer sub_tint_int(Pointer tnumber, int i) { + return MeosLibrary.meos.sub_tint_int(tnumber, i); } @SuppressWarnings("unused") - public static Pointer union_int_spanset(int i, Pointer ss) { - return MeosLibrary.meos.union_int_spanset(i, ss); + public static Pointer sub_tnumber_tnumber(Pointer tnumber1, Pointer tnumber2) { + return MeosLibrary.meos.sub_tnumber_tnumber(tnumber1, tnumber2); } @SuppressWarnings("unused") - public static Pointer union_set_bigint(Pointer s, long i) { - return MeosLibrary.meos.union_set_bigint(s, i); + public static Pointer temporal_derivative(Pointer temp) { + return MeosLibrary.meos.temporal_derivative(temp); } @SuppressWarnings("unused") - public static Pointer union_set_date(Pointer s, int d) { - return MeosLibrary.meos.union_set_date(s, d); + public static Pointer tfloat_exp(Pointer temp) { + return MeosLibrary.meos.tfloat_exp(temp); } @SuppressWarnings("unused") - public static Pointer union_set_float(Pointer s, double d) { - return MeosLibrary.meos.union_set_float(s, d); + public static Pointer tfloat_ln(Pointer temp) { + return MeosLibrary.meos.tfloat_ln(temp); } @SuppressWarnings("unused") - public static Pointer union_set_geo(Pointer s, Pointer gs) { - return MeosLibrary.meos.union_set_geo(s, gs); + public static Pointer tfloat_log10(Pointer temp) { + return MeosLibrary.meos.tfloat_log10(temp); } @SuppressWarnings("unused") - public static Pointer union_set_int(Pointer s, int i) { - return MeosLibrary.meos.union_set_int(s, i); + public static Pointer tnumber_abs(Pointer temp) { + return MeosLibrary.meos.tnumber_abs(temp); } @SuppressWarnings("unused") - public static Pointer union_set_set(Pointer s1, Pointer s2) { - return MeosLibrary.meos.union_set_set(s1, s2); + public static Pointer tnumber_trend(Pointer temp) { + return MeosLibrary.meos.tnumber_trend(temp); } @SuppressWarnings("unused") - public static Pointer union_set_text(Pointer s, Pointer txt) { - return MeosLibrary.meos.union_set_text(s, txt); + public static double float_angular_difference(double degrees1, double degrees2) { + return MeosLibrary.meos.float_angular_difference(degrees1, degrees2); } @SuppressWarnings("unused") - public static Pointer union_set_timestamptz(Pointer s, OffsetDateTime t) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.union_set_timestamptz(s, t_new); + public static Pointer tnumber_angular_difference(Pointer temp) { + return MeosLibrary.meos.tnumber_angular_difference(temp); } @SuppressWarnings("unused") - public static Pointer union_span_bigint(Pointer s, long i) { - return MeosLibrary.meos.union_span_bigint(s, i); + public static Pointer tnumber_delta_value(Pointer temp) { + return MeosLibrary.meos.tnumber_delta_value(temp); } @SuppressWarnings("unused") - public static Pointer union_span_date(Pointer s, int d) { - return MeosLibrary.meos.union_span_date(s, d); + public static Pointer textcat_text_ttext(Pointer txt, Pointer temp) { + return MeosLibrary.meos.textcat_text_ttext(txt, temp); } @SuppressWarnings("unused") - public static Pointer union_span_float(Pointer s, double d) { - return MeosLibrary.meos.union_span_float(s, d); + public static Pointer textcat_ttext_text(Pointer temp, Pointer txt) { + return MeosLibrary.meos.textcat_ttext_text(temp, txt); } @SuppressWarnings("unused") - public static Pointer union_span_int(Pointer s, int i) { - return MeosLibrary.meos.union_span_int(s, i); + public static Pointer textcat_ttext_ttext(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.textcat_ttext_ttext(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer union_span_span(Pointer s1, Pointer s2) { - return MeosLibrary.meos.union_span_span(s1, s2); + public static Pointer ttext_initcap(Pointer temp) { + return MeosLibrary.meos.ttext_initcap(temp); } @SuppressWarnings("unused") - public static Pointer union_span_spanset(Pointer s, Pointer ss) { - return MeosLibrary.meos.union_span_spanset(s, ss); + public static Pointer ttext_upper(Pointer temp) { + return MeosLibrary.meos.ttext_upper(temp); } @SuppressWarnings("unused") - public static Pointer union_span_timestamptz(Pointer s, OffsetDateTime t) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.union_span_timestamptz(s, t_new); + public static Pointer ttext_lower(Pointer temp) { + return MeosLibrary.meos.ttext_lower(temp); } @SuppressWarnings("unused") - public static Pointer union_spanset_bigint(Pointer ss, long i) { - return MeosLibrary.meos.union_spanset_bigint(ss, i); + public static Pointer tdistance_tfloat_float(Pointer temp, double d) { + return MeosLibrary.meos.tdistance_tfloat_float(temp, d); } @SuppressWarnings("unused") - public static Pointer union_spanset_date(Pointer ss, int d) { - return MeosLibrary.meos.union_spanset_date(ss, d); + public static Pointer tdistance_tint_int(Pointer temp, int i) { + return MeosLibrary.meos.tdistance_tint_int(temp, i); } @SuppressWarnings("unused") - public static Pointer union_spanset_float(Pointer ss, double d) { - return MeosLibrary.meos.union_spanset_float(ss, d); + public static Pointer tdistance_tnumber_tnumber(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.tdistance_tnumber_tnumber(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer union_spanset_int(Pointer ss, int i) { - return MeosLibrary.meos.union_spanset_int(ss, i); + public static double nad_tboxfloat_tboxfloat(Pointer box1, Pointer box2) { + return MeosLibrary.meos.nad_tboxfloat_tboxfloat(box1, box2); } @SuppressWarnings("unused") - public static Pointer union_spanset_span(Pointer ss, Pointer s) { - return MeosLibrary.meos.union_spanset_span(ss, s); + public static int nad_tboxint_tboxint(Pointer box1, Pointer box2) { + return MeosLibrary.meos.nad_tboxint_tboxint(box1, box2); } @SuppressWarnings("unused") - public static Pointer union_spanset_spanset(Pointer ss1, Pointer ss2) { - return MeosLibrary.meos.union_spanset_spanset(ss1, ss2); + public static double nad_tfloat_float(Pointer temp, double d) { + return MeosLibrary.meos.nad_tfloat_float(temp, d); } @SuppressWarnings("unused") - public static Pointer union_spanset_timestamptz(Pointer ss, OffsetDateTime t) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.union_spanset_timestamptz(ss, t_new); + public static double nad_tfloat_tfloat(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.nad_tfloat_tfloat(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer union_text_set(Pointer txt, Pointer s) { - return MeosLibrary.meos.union_text_set(txt, s); + public static double nad_tfloat_tbox(Pointer temp, Pointer box) { + return MeosLibrary.meos.nad_tfloat_tbox(temp, box); } @SuppressWarnings("unused") - public static Pointer union_timestamptz_set(OffsetDateTime t, Pointer s) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.union_timestamptz_set(t_new, s); + public static int nad_tint_int(Pointer temp, int i) { + return MeosLibrary.meos.nad_tint_int(temp, i); } @SuppressWarnings("unused") - public static Pointer union_timestamptz_span(OffsetDateTime t, Pointer s) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.union_timestamptz_span(t_new, s); + public static int nad_tint_tbox(Pointer temp, Pointer box) { + return MeosLibrary.meos.nad_tint_tbox(temp, box); } @SuppressWarnings("unused") - public static Pointer union_timestamptz_spanset(OffsetDateTime t, Pointer ss) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.union_timestamptz_spanset(t_new, ss); + public static int nad_tint_tint(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.nad_tint_tint(temp1, temp2); } @SuppressWarnings("unused") - public static long distance_bigintset_bigintset(Pointer s1, Pointer s2) { - return MeosLibrary.meos.distance_bigintset_bigintset(s1, s2); + public static Pointer tbool_tand_transfn(Pointer state, Pointer temp) { + return MeosLibrary.meos.tbool_tand_transfn(state, temp); } @SuppressWarnings("unused") - public static long distance_bigintspan_bigintspan(Pointer s1, Pointer s2) { - return MeosLibrary.meos.distance_bigintspan_bigintspan(s1, s2); + public static Pointer tbool_tor_transfn(Pointer state, Pointer temp) { + return MeosLibrary.meos.tbool_tor_transfn(state, temp); } @SuppressWarnings("unused") - public static long distance_bigintspanset_bigintspan(Pointer ss, Pointer s) { - return MeosLibrary.meos.distance_bigintspanset_bigintspan(ss, s); + public static Pointer temporal_extent_transfn(Pointer s, Pointer temp) { + return MeosLibrary.meos.temporal_extent_transfn(s, temp); } @SuppressWarnings("unused") - public static long distance_bigintspanset_bigintspanset(Pointer ss1, Pointer ss2) { - return MeosLibrary.meos.distance_bigintspanset_bigintspanset(ss1, ss2); + public static Pointer temporal_merge_transfn(Pointer state, Pointer temp) { + return MeosLibrary.meos.temporal_merge_transfn(state, temp); } @SuppressWarnings("unused") - public static int distance_dateset_dateset(Pointer s1, Pointer s2) { - return MeosLibrary.meos.distance_dateset_dateset(s1, s2); + public static Pointer temporal_merge_combinefn(Pointer state1, Pointer state2) { + return MeosLibrary.meos.temporal_merge_combinefn(state1, state2); } @SuppressWarnings("unused") - public static int distance_datespan_datespan(Pointer s1, Pointer s2) { - return MeosLibrary.meos.distance_datespan_datespan(s1, s2); + public static Pointer temporal_tagg_finalfn(Pointer state) { + return MeosLibrary.meos.temporal_tagg_finalfn(state); } @SuppressWarnings("unused") - public static int distance_datespanset_datespan(Pointer ss, Pointer s) { - return MeosLibrary.meos.distance_datespanset_datespan(ss, s); + public static Pointer temporal_tcount_transfn(Pointer state, Pointer temp) { + return MeosLibrary.meos.temporal_tcount_transfn(state, temp); } @SuppressWarnings("unused") - public static int distance_datespanset_datespanset(Pointer ss1, Pointer ss2) { - return MeosLibrary.meos.distance_datespanset_datespanset(ss1, ss2); + public static Pointer tfloat_tmax_transfn(Pointer state, Pointer temp) { + return MeosLibrary.meos.tfloat_tmax_transfn(state, temp); } @SuppressWarnings("unused") - public static double distance_floatset_floatset(Pointer s1, Pointer s2) { - return MeosLibrary.meos.distance_floatset_floatset(s1, s2); + public static Pointer tfloat_tmin_transfn(Pointer state, Pointer temp) { + return MeosLibrary.meos.tfloat_tmin_transfn(state, temp); } @SuppressWarnings("unused") - public static double distance_floatspan_floatspan(Pointer s1, Pointer s2) { - return MeosLibrary.meos.distance_floatspan_floatspan(s1, s2); + public static Pointer tfloat_tsum_transfn(Pointer state, Pointer temp) { + return MeosLibrary.meos.tfloat_tsum_transfn(state, temp); } @SuppressWarnings("unused") - public static double distance_floatspanset_floatspan(Pointer ss, Pointer s) { - return MeosLibrary.meos.distance_floatspanset_floatspan(ss, s); + public static Pointer tfloat_wmax_transfn(Pointer state, Pointer temp, Pointer interv) { + return MeosLibrary.meos.tfloat_wmax_transfn(state, temp, interv); } @SuppressWarnings("unused") - public static double distance_floatspanset_floatspanset(Pointer ss1, Pointer ss2) { - return MeosLibrary.meos.distance_floatspanset_floatspanset(ss1, ss2); + public static Pointer tfloat_wmin_transfn(Pointer state, Pointer temp, Pointer interv) { + return MeosLibrary.meos.tfloat_wmin_transfn(state, temp, interv); } @SuppressWarnings("unused") - public static int distance_intset_intset(Pointer s1, Pointer s2) { - return MeosLibrary.meos.distance_intset_intset(s1, s2); + public static Pointer tfloat_wsum_transfn(Pointer state, Pointer temp, Pointer interv) { + return MeosLibrary.meos.tfloat_wsum_transfn(state, temp, interv); } @SuppressWarnings("unused") - public static int distance_intspan_intspan(Pointer s1, Pointer s2) { - return MeosLibrary.meos.distance_intspan_intspan(s1, s2); + public static Pointer timestamptz_tcount_transfn(Pointer state, OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.timestamptz_tcount_transfn(state, t_new); } @SuppressWarnings("unused") - public static int distance_intspanset_intspan(Pointer ss, Pointer s) { - return MeosLibrary.meos.distance_intspanset_intspan(ss, s); + public static Pointer tint_tmax_transfn(Pointer state, Pointer temp) { + return MeosLibrary.meos.tint_tmax_transfn(state, temp); } @SuppressWarnings("unused") - public static int distance_intspanset_intspanset(Pointer ss1, Pointer ss2) { - return MeosLibrary.meos.distance_intspanset_intspanset(ss1, ss2); + public static Pointer tint_tmin_transfn(Pointer state, Pointer temp) { + return MeosLibrary.meos.tint_tmin_transfn(state, temp); } @SuppressWarnings("unused") - public static long distance_set_bigint(Pointer s, long i) { - return MeosLibrary.meos.distance_set_bigint(s, i); + public static Pointer tint_tsum_transfn(Pointer state, Pointer temp) { + return MeosLibrary.meos.tint_tsum_transfn(state, temp); } @SuppressWarnings("unused") - public static int distance_set_date(Pointer s, int d) { - return MeosLibrary.meos.distance_set_date(s, d); + public static Pointer tint_wmax_transfn(Pointer state, Pointer temp, Pointer interv) { + return MeosLibrary.meos.tint_wmax_transfn(state, temp, interv); } @SuppressWarnings("unused") - public static double distance_set_float(Pointer s, double d) { - return MeosLibrary.meos.distance_set_float(s, d); + public static Pointer tint_wmin_transfn(Pointer state, Pointer temp, Pointer interv) { + return MeosLibrary.meos.tint_wmin_transfn(state, temp, interv); } @SuppressWarnings("unused") - public static int distance_set_int(Pointer s, int i) { - return MeosLibrary.meos.distance_set_int(s, i); + public static Pointer tint_wsum_transfn(Pointer state, Pointer temp, Pointer interv) { + return MeosLibrary.meos.tint_wsum_transfn(state, temp, interv); } @SuppressWarnings("unused") - public static double distance_set_timestamptz(Pointer s, OffsetDateTime t) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.distance_set_timestamptz(s, t_new); + public static Pointer tnumber_extent_transfn(Pointer box, Pointer temp) { + return MeosLibrary.meos.tnumber_extent_transfn(box, temp); } @SuppressWarnings("unused") - public static long distance_span_bigint(Pointer s, long i) { - return MeosLibrary.meos.distance_span_bigint(s, i); + public static Pointer tnumber_tavg_finalfn(Pointer state) { + return MeosLibrary.meos.tnumber_tavg_finalfn(state); } @SuppressWarnings("unused") - public static int distance_span_date(Pointer s, int d) { - return MeosLibrary.meos.distance_span_date(s, d); + public static Pointer tnumber_tavg_transfn(Pointer state, Pointer temp) { + return MeosLibrary.meos.tnumber_tavg_transfn(state, temp); } @SuppressWarnings("unused") - public static double distance_span_float(Pointer s, double d) { - return MeosLibrary.meos.distance_span_float(s, d); + public static Pointer tnumber_wavg_transfn(Pointer state, Pointer temp, Pointer interv) { + return MeosLibrary.meos.tnumber_wavg_transfn(state, temp, interv); } @SuppressWarnings("unused") - public static int distance_span_int(Pointer s, int i) { - return MeosLibrary.meos.distance_span_int(s, i); + public static Pointer tstzset_tcount_transfn(Pointer state, Pointer s) { + return MeosLibrary.meos.tstzset_tcount_transfn(state, s); } @SuppressWarnings("unused") - public static double distance_span_timestamptz(Pointer s, OffsetDateTime t) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.distance_span_timestamptz(s, t_new); + public static Pointer tstzspan_tcount_transfn(Pointer state, Pointer s) { + return MeosLibrary.meos.tstzspan_tcount_transfn(state, s); } @SuppressWarnings("unused") - public static long distance_spanset_bigint(Pointer ss, long i) { - return MeosLibrary.meos.distance_spanset_bigint(ss, i); + public static Pointer tstzspanset_tcount_transfn(Pointer state, Pointer ss) { + return MeosLibrary.meos.tstzspanset_tcount_transfn(state, ss); } @SuppressWarnings("unused") - public static int distance_spanset_date(Pointer ss, int d) { - return MeosLibrary.meos.distance_spanset_date(ss, d); + public static Pointer ttext_tmax_transfn(Pointer state, Pointer temp) { + return MeosLibrary.meos.ttext_tmax_transfn(state, temp); } @SuppressWarnings("unused") - public static double distance_spanset_float(Pointer ss, double d) { - return MeosLibrary.meos.distance_spanset_float(ss, d); + public static Pointer ttext_tmin_transfn(Pointer state, Pointer temp) { + return MeosLibrary.meos.ttext_tmin_transfn(state, temp); } @SuppressWarnings("unused") - public static int distance_spanset_int(Pointer ss, int i) { - return MeosLibrary.meos.distance_spanset_int(ss, i); + public static Pointer temporal_simplify_dp(Pointer temp, double eps_dist, boolean synchronize) { + return MeosLibrary.meos.temporal_simplify_dp(temp, eps_dist, synchronize); } @SuppressWarnings("unused") - public static double distance_spanset_timestamptz(Pointer ss, OffsetDateTime t) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.distance_spanset_timestamptz(ss, t_new); + public static Pointer temporal_simplify_max_dist(Pointer temp, double eps_dist, boolean synchronize) { + return MeosLibrary.meos.temporal_simplify_max_dist(temp, eps_dist, synchronize); } @SuppressWarnings("unused") - public static double distance_tstzset_tstzset(Pointer s1, Pointer s2) { - return MeosLibrary.meos.distance_tstzset_tstzset(s1, s2); + public static Pointer temporal_simplify_min_dist(Pointer temp, double dist) { + return MeosLibrary.meos.temporal_simplify_min_dist(temp, dist); } @SuppressWarnings("unused") - public static double distance_tstzspan_tstzspan(Pointer s1, Pointer s2) { - return MeosLibrary.meos.distance_tstzspan_tstzspan(s1, s2); + public static Pointer temporal_simplify_min_tdelta(Pointer temp, Pointer mint) { + return MeosLibrary.meos.temporal_simplify_min_tdelta(temp, mint); } @SuppressWarnings("unused") - public static double distance_tstzspanset_tstzspan(Pointer ss, Pointer s) { - return MeosLibrary.meos.distance_tstzspanset_tstzspan(ss, s); + public static Pointer temporal_tprecision(Pointer temp, Pointer duration, OffsetDateTime origin) { + var origin_new = origin.toEpochSecond(); + return MeosLibrary.meos.temporal_tprecision(temp, duration, origin_new); } @SuppressWarnings("unused") - public static double distance_tstzspanset_tstzspanset(Pointer ss1, Pointer ss2) { - return MeosLibrary.meos.distance_tstzspanset_tstzspanset(ss1, ss2); + public static Pointer temporal_tsample(Pointer temp, Pointer duration, OffsetDateTime origin, int interp) { + var origin_new = origin.toEpochSecond(); + return MeosLibrary.meos.temporal_tsample(temp, duration, origin_new, interp); } @SuppressWarnings("unused") - public static Pointer bigint_extent_transfn(Pointer state, long i) { - return MeosLibrary.meos.bigint_extent_transfn(state, i); + public static double temporal_dyntimewarp_distance(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.temporal_dyntimewarp_distance(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer bigint_union_transfn(Pointer state, long i) { - return MeosLibrary.meos.bigint_union_transfn(state, i); + public static Pointer temporal_dyntimewarp_path(Pointer temp1, Pointer temp2, Pointer count) { + return MeosLibrary.meos.temporal_dyntimewarp_path(temp1, temp2, count); } @SuppressWarnings("unused") - public static Pointer date_extent_transfn(Pointer state, int d) { - return MeosLibrary.meos.date_extent_transfn(state, d); + public static double temporal_frechet_distance(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.temporal_frechet_distance(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer date_union_transfn(Pointer state, int d) { - return MeosLibrary.meos.date_union_transfn(state, d); + public static Pointer temporal_frechet_path(Pointer temp1, Pointer temp2, Pointer count) { + return MeosLibrary.meos.temporal_frechet_path(temp1, temp2, count); } @SuppressWarnings("unused") - public static Pointer float_extent_transfn(Pointer state, double d) { - return MeosLibrary.meos.float_extent_transfn(state, d); + public static double temporal_hausdorff_distance(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.temporal_hausdorff_distance(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer float_union_transfn(Pointer state, double d) { - return MeosLibrary.meos.float_union_transfn(state, d); + public static Pointer temporal_time_bins(Pointer temp, Pointer duration, OffsetDateTime origin, Pointer count) { + var origin_new = origin.toEpochSecond(); + return MeosLibrary.meos.temporal_time_bins(temp, duration, origin_new, count); } @SuppressWarnings("unused") - public static Pointer int_extent_transfn(Pointer state, int i) { - return MeosLibrary.meos.int_extent_transfn(state, i); + public static Pointer temporal_time_split(Pointer temp, Pointer duration, OffsetDateTime torigin, Pointer time_bins, Pointer count) { + var torigin_new = torigin.toEpochSecond(); + return MeosLibrary.meos.temporal_time_split(temp, duration, torigin_new, time_bins, count); } @SuppressWarnings("unused") - public static Pointer int_union_transfn(Pointer state, int i) { - return MeosLibrary.meos.int_union_transfn(state, i); + public static Pointer tfloat_time_boxes(Pointer temp, Pointer duration, OffsetDateTime torigin, Pointer count) { + var torigin_new = torigin.toEpochSecond(); + return MeosLibrary.meos.tfloat_time_boxes(temp, duration, torigin_new, count); } @SuppressWarnings("unused") - public static Pointer set_extent_transfn(Pointer state, Pointer s) { - return MeosLibrary.meos.set_extent_transfn(state, s); + public static Pointer tfloat_value_bins(Pointer temp, double vsize, double vorigin, Pointer count) { + return MeosLibrary.meos.tfloat_value_bins(temp, vsize, vorigin, count); } @SuppressWarnings("unused") - public static Pointer set_union_finalfn(Pointer state) { - return MeosLibrary.meos.set_union_finalfn(state); + public static Pointer tfloat_value_boxes(Pointer temp, double vsize, double vorigin, Pointer count) { + return MeosLibrary.meos.tfloat_value_boxes(temp, vsize, vorigin, count); } @SuppressWarnings("unused") - public static Pointer set_union_transfn(Pointer state, Pointer s) { - return MeosLibrary.meos.set_union_transfn(state, s); + public static Pointer tfloat_value_split(Pointer temp, double size, double origin, Pointer bins, Pointer count) { + return MeosLibrary.meos.tfloat_value_split(temp, size, origin, bins, count); } @SuppressWarnings("unused") - public static Pointer span_extent_transfn(Pointer state, Pointer s) { - return MeosLibrary.meos.span_extent_transfn(state, s); + public static Pointer tfloat_value_time_boxes(Pointer temp, double vsize, Pointer duration, double vorigin, OffsetDateTime torigin, Pointer count) { + var torigin_new = torigin.toEpochSecond(); + return MeosLibrary.meos.tfloat_value_time_boxes(temp, vsize, duration, vorigin, torigin_new, count); } @SuppressWarnings("unused") - public static Pointer span_union_transfn(Pointer state, Pointer s) { - return MeosLibrary.meos.span_union_transfn(state, s); + public static Pointer tfloat_value_time_split(Pointer temp, double vsize, Pointer duration, double vorigin, OffsetDateTime torigin, Pointer value_bins, Pointer time_bins, Pointer count) { + var torigin_new = torigin.toEpochSecond(); + return MeosLibrary.meos.tfloat_value_time_split(temp, vsize, duration, vorigin, torigin_new, value_bins, time_bins, count); } @SuppressWarnings("unused") - public static Pointer spanset_extent_transfn(Pointer state, Pointer ss) { - return MeosLibrary.meos.spanset_extent_transfn(state, ss); + public static Pointer tfloatbox_time_tiles(Pointer box, Pointer duration, OffsetDateTime torigin, Pointer count) { + var torigin_new = torigin.toEpochSecond(); + return MeosLibrary.meos.tfloatbox_time_tiles(box, duration, torigin_new, count); } @SuppressWarnings("unused") - public static Pointer spanset_union_finalfn(Pointer state) { - return MeosLibrary.meos.spanset_union_finalfn(state); + public static Pointer tfloatbox_value_tiles(Pointer box, double vsize, double vorigin, Pointer count) { + return MeosLibrary.meos.tfloatbox_value_tiles(box, vsize, vorigin, count); } @SuppressWarnings("unused") - public static Pointer spanset_union_transfn(Pointer state, Pointer ss) { - return MeosLibrary.meos.spanset_union_transfn(state, ss); + public static Pointer tfloatbox_value_time_tiles(Pointer box, double vsize, Pointer duration, double vorigin, OffsetDateTime torigin, Pointer count) { + var torigin_new = torigin.toEpochSecond(); + return MeosLibrary.meos.tfloatbox_value_time_tiles(box, vsize, duration, vorigin, torigin_new, count); } @SuppressWarnings("unused") - public static Pointer text_union_transfn(Pointer state, Pointer txt) { - return MeosLibrary.meos.text_union_transfn(state, txt); + public static Pointer tint_time_boxes(Pointer temp, Pointer duration, OffsetDateTime torigin, Pointer count) { + var torigin_new = torigin.toEpochSecond(); + return MeosLibrary.meos.tint_time_boxes(temp, duration, torigin_new, count); } @SuppressWarnings("unused") - public static Pointer timestamptz_extent_transfn(Pointer state, OffsetDateTime t) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.timestamptz_extent_transfn(state, t_new); + public static Pointer tint_value_bins(Pointer temp, int vsize, int vorigin, Pointer count) { + return MeosLibrary.meos.tint_value_bins(temp, vsize, vorigin, count); } @SuppressWarnings("unused") - public static Pointer timestamptz_union_transfn(Pointer state, OffsetDateTime t) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.timestamptz_union_transfn(state, t_new); + public static Pointer tint_value_boxes(Pointer temp, int vsize, int vorigin, Pointer count) { + return MeosLibrary.meos.tint_value_boxes(temp, vsize, vorigin, count); } @SuppressWarnings("unused") - public static Pointer tbox_in(String str) { - return MeosLibrary.meos.tbox_in(str); + public static Pointer tint_value_split(Pointer temp, int vsize, int vorigin, Pointer bins, Pointer count) { + return MeosLibrary.meos.tint_value_split(temp, vsize, vorigin, bins, count); } @SuppressWarnings("unused") - public static String tbox_out(Pointer box, int maxdd) { - return MeosLibrary.meos.tbox_out(box, maxdd); + public static Pointer tint_value_time_boxes(Pointer temp, int vsize, Pointer duration, int vorigin, OffsetDateTime torigin, Pointer count) { + var torigin_new = torigin.toEpochSecond(); + return MeosLibrary.meos.tint_value_time_boxes(temp, vsize, duration, vorigin, torigin_new, count); } @SuppressWarnings("unused") - public static Pointer tbox_from_wkb(Pointer wkb, long size) { - return MeosLibrary.meos.tbox_from_wkb(wkb, size); + public static Pointer tint_value_time_split(Pointer temp, int size, Pointer duration, int vorigin, OffsetDateTime torigin, Pointer value_bins, Pointer time_bins, Pointer count) { + var torigin_new = torigin.toEpochSecond(); + return MeosLibrary.meos.tint_value_time_split(temp, size, duration, vorigin, torigin_new, value_bins, time_bins, count); } @SuppressWarnings("unused") - public static Pointer tbox_from_hexwkb(String hexwkb) { - return MeosLibrary.meos.tbox_from_hexwkb(hexwkb); + public static Pointer tintbox_time_tiles(Pointer box, Pointer duration, OffsetDateTime torigin, Pointer count) { + var torigin_new = torigin.toEpochSecond(); + return MeosLibrary.meos.tintbox_time_tiles(box, duration, torigin_new, count); } @SuppressWarnings("unused") - public static Pointer stbox_from_wkb(Pointer wkb, long size) { - return MeosLibrary.meos.stbox_from_wkb(wkb, size); + public static Pointer tintbox_value_tiles(Pointer box, int xsize, int xorigin, Pointer count) { + return MeosLibrary.meos.tintbox_value_tiles(box, xsize, xorigin, count); } @SuppressWarnings("unused") - public static Pointer stbox_from_hexwkb(String hexwkb) { - return MeosLibrary.meos.stbox_from_hexwkb(hexwkb); + public static Pointer tintbox_value_time_tiles(Pointer box, int xsize, Pointer duration, int xorigin, OffsetDateTime torigin, Pointer count) { + var torigin_new = torigin.toEpochSecond(); + return MeosLibrary.meos.tintbox_value_time_tiles(box, xsize, duration, xorigin, torigin_new, count); } @SuppressWarnings("unused") - public static Pointer tbox_as_wkb(Pointer box, byte variant) { - Runtime runtime = Runtime.getSystemRuntime(); - Pointer size_out = Memory.allocateDirect(runtime, Long.BYTES); - return MeosLibrary.meos.tbox_as_wkb(box, variant, size_out); + public static Pointer geo_as_ewkb(Pointer gs, String endian, Pointer size) { + return MeosLibrary.meos.geo_as_ewkb(gs, endian, size); } @SuppressWarnings("unused") - public static String tbox_as_hexwkb(Pointer box, byte variant, Pointer size) { - return MeosLibrary.meos.tbox_as_hexwkb(box, variant, size); + public static String geo_as_ewkt(Pointer gs, int precision) { + return MeosLibrary.meos.geo_as_ewkt(gs, precision); } @SuppressWarnings("unused") - public static Pointer stbox_as_wkb(Pointer box, byte variant) { - Runtime runtime = Runtime.getSystemRuntime(); - Pointer size_out = Memory.allocateDirect(runtime, Long.BYTES); - return MeosLibrary.meos.stbox_as_wkb(box, variant, size_out); + public static String geo_as_geojson(Pointer gs, int option, int precision, String srs) { + return MeosLibrary.meos.geo_as_geojson(gs, option, precision, srs); } @SuppressWarnings("unused") - public static String stbox_as_hexwkb(Pointer box, byte variant, Pointer size) { - return MeosLibrary.meos.stbox_as_hexwkb(box, variant, size); + public static String geo_as_hexewkb(Pointer gs, String endian) { + return MeosLibrary.meos.geo_as_hexewkb(gs, endian); } @SuppressWarnings("unused") - public static Pointer stbox_in(String str) { - return MeosLibrary.meos.stbox_in(str); + public static String geo_as_text(Pointer gs, int precision) { + return MeosLibrary.meos.geo_as_text(gs, precision); } @SuppressWarnings("unused") - public static String stbox_out(Pointer box, int maxdd) { - return MeosLibrary.meos.stbox_out(box, maxdd); + public static Pointer geo_from_ewkb(Pointer wkb, long wkb_size, int srid) { + return MeosLibrary.meos.geo_from_ewkb(wkb, wkb_size, srid); } @SuppressWarnings("unused") - public static Pointer float_tstzspan_to_tbox(double d, Pointer s) { - return MeosLibrary.meos.float_tstzspan_to_tbox(d, s); + public static Pointer geo_from_geojson(String geojson) { + return MeosLibrary.meos.geo_from_geojson(geojson); } @SuppressWarnings("unused") - public static Pointer float_timestamptz_to_tbox(double d, OffsetDateTime t) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.float_timestamptz_to_tbox(d, t_new); + public static Pointer geo_from_text(String wkt, int srid) { + return MeosLibrary.meos.geo_from_text(wkt, srid); } @SuppressWarnings("unused") - public static Pointer geo_tstzspan_to_stbox(Pointer gs, Pointer s) { - return MeosLibrary.meos.geo_tstzspan_to_stbox(gs, s); + public static String geo_out(Pointer gs) { + return MeosLibrary.meos.geo_out(gs); } @SuppressWarnings("unused") - public static Pointer geo_timestamptz_to_stbox(Pointer gs, OffsetDateTime t) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.geo_timestamptz_to_stbox(gs, t_new); + public static Pointer geog_from_binary(String wkb_bytea) { + return MeosLibrary.meos.geog_from_binary(wkb_bytea); } @SuppressWarnings("unused") - public static Pointer int_tstzspan_to_tbox(int i, Pointer s) { - return MeosLibrary.meos.int_tstzspan_to_tbox(i, s); + public static Pointer geog_from_hexewkb(String wkt) { + return MeosLibrary.meos.geog_from_hexewkb(wkt); } @SuppressWarnings("unused") - public static Pointer int_timestamptz_to_tbox(int i, OffsetDateTime t) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.int_timestamptz_to_tbox(i, t_new); + public static Pointer geog_in(String str, int typmod) { + return MeosLibrary.meos.geog_in(str, typmod); } @SuppressWarnings("unused") - public static Pointer numspan_tstzspan_to_tbox(Pointer span, Pointer s) { - return MeosLibrary.meos.numspan_tstzspan_to_tbox(span, s); + public static Pointer geom_from_hexewkb(String wkt) { + return MeosLibrary.meos.geom_from_hexewkb(wkt); } @SuppressWarnings("unused") - public static Pointer numspan_timestamptz_to_tbox(Pointer span, OffsetDateTime t) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.numspan_timestamptz_to_tbox(span, t_new); + public static Pointer geom_in(String str, int typmod) { + return MeosLibrary.meos.geom_in(str, typmod); } @SuppressWarnings("unused") - public static Pointer stbox_copy(Pointer box) { - return MeosLibrary.meos.stbox_copy(box); + public static String box3d_out(Pointer box, int maxdd) { + return MeosLibrary.meos.box3d_out(box, maxdd); } @SuppressWarnings("unused") - public static Pointer stbox_make(boolean hasx, boolean hasz, boolean geodetic, int srid, double xmin, double xmax, double ymin, double ymax, double zmin, double zmax, Pointer s) { - return MeosLibrary.meos.stbox_make(hasx, hasz, geodetic, srid, xmin, xmax, ymin, ymax, zmin, zmax, s); + public static String gbox_out(Pointer box, int maxdd) { + return MeosLibrary.meos.gbox_out(box, maxdd); } @SuppressWarnings("unused") - public static Pointer tbox_copy(Pointer box) { - return MeosLibrary.meos.tbox_copy(box); + public static Pointer geo_copy(Pointer g) { + return MeosLibrary.meos.geo_copy(g); } @SuppressWarnings("unused") - public static Pointer tbox_make(Pointer s, Pointer p) { - return MeosLibrary.meos.tbox_make(s, p); + public static Pointer geogpoint_make2d(int srid, double x, double y) { + return MeosLibrary.meos.geogpoint_make2d(srid, x, y); } @SuppressWarnings("unused") - public static Pointer float_to_tbox(double d) { - return MeosLibrary.meos.float_to_tbox(d); + public static Pointer geogpoint_make3dz(int srid, double x, double y, double z) { + return MeosLibrary.meos.geogpoint_make3dz(srid, x, y, z); } @SuppressWarnings("unused") - public static Pointer geo_to_stbox(Pointer gs) { - return MeosLibrary.meos.geo_to_stbox(gs); + public static Pointer geompoint_make2d(int srid, double x, double y) { + return MeosLibrary.meos.geompoint_make2d(srid, x, y); } @SuppressWarnings("unused") - public static Pointer int_to_tbox(int i) { - return MeosLibrary.meos.int_to_tbox(i); + public static Pointer geompoint_make3dz(int srid, double x, double y, double z) { + return MeosLibrary.meos.geompoint_make3dz(srid, x, y, z); } @SuppressWarnings("unused") - public static Pointer set_to_tbox(Pointer s) { - return MeosLibrary.meos.set_to_tbox(s); + public static Pointer geom_to_geog(Pointer geom) { + return MeosLibrary.meos.geom_to_geog(geom); } @SuppressWarnings("unused") - public static Pointer span_to_tbox(Pointer s) { - return MeosLibrary.meos.span_to_tbox(s); + public static Pointer geog_to_geom(Pointer geog) { + return MeosLibrary.meos.geog_to_geom(geog); } @SuppressWarnings("unused") - public static Pointer spanset_to_tbox(Pointer ss) { - return MeosLibrary.meos.spanset_to_tbox(ss); + public static boolean geo_is_empty(Pointer g) { + return MeosLibrary.meos.geo_is_empty(g); } @SuppressWarnings("unused") - public static Pointer spatialset_to_stbox(Pointer s) { - return MeosLibrary.meos.spatialset_to_stbox(s); + public static boolean geo_is_unitary(Pointer gs) { + return MeosLibrary.meos.geo_is_unitary(gs); } @SuppressWarnings("unused") - public static Pointer stbox_to_gbox(Pointer box) { - return MeosLibrary.meos.stbox_to_gbox(box); + public static String geo_typename(int type) { + return MeosLibrary.meos.geo_typename(type); } @SuppressWarnings("unused") - public static Pointer stbox_to_box3d(Pointer box) { - return MeosLibrary.meos.stbox_to_box3d(box); + public static double geog_area(Pointer g, boolean use_spheroid) { + return MeosLibrary.meos.geog_area(g, use_spheroid); } @SuppressWarnings("unused") - public static Pointer stbox_to_geo(Pointer box) { - return MeosLibrary.meos.stbox_to_geo(box); + public static Pointer geog_centroid(Pointer g, boolean use_spheroid) { + return MeosLibrary.meos.geog_centroid(g, use_spheroid); } @SuppressWarnings("unused") - public static Pointer stbox_to_tstzspan(Pointer box) { - return MeosLibrary.meos.stbox_to_tstzspan(box); + public static double geog_length(Pointer g, boolean use_spheroid) { + return MeosLibrary.meos.geog_length(g, use_spheroid); } @SuppressWarnings("unused") - public static Pointer tbox_to_intspan(Pointer box) { - return MeosLibrary.meos.tbox_to_intspan(box); + public static double geog_perimeter(Pointer g, boolean use_spheroid) { + return MeosLibrary.meos.geog_perimeter(g, use_spheroid); } @SuppressWarnings("unused") - public static Pointer tbox_to_floatspan(Pointer box) { - return MeosLibrary.meos.tbox_to_floatspan(box); + public static Pointer geom_azimuth(Pointer gs1, Pointer gs2) { + boolean out; + Runtime runtime = Runtime.getSystemRuntime(); + Pointer result = Memory.allocateDirect(runtime, Long.BYTES); + out = MeosLibrary.meos.geom_azimuth(gs1, gs2, result); + Pointer new_result = result.getPointer(0); + return out ? new_result : null ; } @SuppressWarnings("unused") - public static Pointer tbox_to_tstzspan(Pointer box) { - return MeosLibrary.meos.tbox_to_tstzspan(box); + public static double geom_length(Pointer gs) { + return MeosLibrary.meos.geom_length(gs); } @SuppressWarnings("unused") - public static Pointer timestamptz_to_stbox(OffsetDateTime t) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.timestamptz_to_stbox(t_new); + public static double geom_perimeter(Pointer gs) { + return MeosLibrary.meos.geom_perimeter(gs); } @SuppressWarnings("unused") - public static Pointer timestamptz_to_tbox(OffsetDateTime t) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.timestamptz_to_tbox(t_new); + public static int line_numpoints(Pointer gs) { + return MeosLibrary.meos.line_numpoints(gs); } @SuppressWarnings("unused") - public static Pointer tstzset_to_stbox(Pointer s) { - return MeosLibrary.meos.tstzset_to_stbox(s); + public static Pointer line_point_n(Pointer geom, int n) { + return MeosLibrary.meos.line_point_n(geom, n); } @SuppressWarnings("unused") - public static Pointer tstzspan_to_stbox(Pointer s) { - return MeosLibrary.meos.tstzspan_to_stbox(s); + public static Pointer geo_reverse(Pointer gs) { + return MeosLibrary.meos.geo_reverse(gs); } @SuppressWarnings("unused") - public static Pointer tstzspanset_to_stbox(Pointer ss) { - return MeosLibrary.meos.tstzspanset_to_stbox(ss); + public static Pointer geo_round(Pointer gs, int maxdd) { + return MeosLibrary.meos.geo_round(gs, maxdd); } @SuppressWarnings("unused") - public static Pointer tnumber_to_tbox(Pointer temp) { - return MeosLibrary.meos.tnumber_to_tbox(temp); + public static Pointer geo_set_srid(Pointer gs, int srid) { + return MeosLibrary.meos.geo_set_srid(gs, srid); } @SuppressWarnings("unused") - public static Pointer tpoint_to_stbox(Pointer temp) { - return MeosLibrary.meos.tpoint_to_stbox(temp); + public static int geo_srid(Pointer gs) { + return MeosLibrary.meos.geo_srid(gs); } - + @SuppressWarnings("unused") - public static Pointer tspatial_to_stbox(Pointer temp) { - return MeosLibrary.meos.tspatial_to_stbox(temp); + public static Pointer geo_transform(Pointer geom, int srid_to) { + return MeosLibrary.meos.geo_transform(geom, srid_to); } - + @SuppressWarnings("unused") - public static boolean stbox_hast(Pointer box) { - return MeosLibrary.meos.stbox_hast(box); + public static Pointer geo_transform_pipeline(Pointer gs, String pipeline, int srid_to, boolean is_forward) { + return MeosLibrary.meos.geo_transform_pipeline(gs, pipeline, srid_to, is_forward); } @SuppressWarnings("unused") - public static boolean stbox_hasx(Pointer box) { - return MeosLibrary.meos.stbox_hasx(box); + public static Pointer geo_collect_garray(Pointer gsarr, int count) { + return MeosLibrary.meos.geo_collect_garray(gsarr, count); } @SuppressWarnings("unused") - public static boolean stbox_hasz(Pointer box) { - return MeosLibrary.meos.stbox_hasz(box); + public static Pointer geo_makeline_garray(Pointer gsarr, int count) { + return MeosLibrary.meos.geo_makeline_garray(gsarr, count); } @SuppressWarnings("unused") - public static boolean stbox_isgeodetic(Pointer box) { - return MeosLibrary.meos.stbox_isgeodetic(box); + public static int geo_num_points(Pointer gs) { + return MeosLibrary.meos.geo_num_points(gs); } - + @SuppressWarnings("unused") - public static double stbox_area(Pointer box, boolean spheroid) { - return MeosLibrary.meos.stbox_area(box, spheroid); + public static int geo_num_geos(Pointer gs) { + return MeosLibrary.meos.geo_num_geos(gs); } - + @SuppressWarnings("unused") - public static double stbox_perimeter(Pointer box, boolean spheroid) { - return MeosLibrary.meos.stbox_perimeter(box, spheroid); + public static Pointer geo_geo_n(Pointer geom, int n) { + return MeosLibrary.meos.geo_geo_n(geom, n); } - + @SuppressWarnings("unused") - public static double stbox_volume(Pointer box) { - return MeosLibrary.meos.stbox_volume(box); + public static Pointer geo_pointarr(Pointer gs, Pointer count) { + return MeosLibrary.meos.geo_pointarr(gs, count); } - + @SuppressWarnings("unused") - public static int stbox_srid(Pointer box) { - return MeosLibrary.meos.stbox_srid(box); + public static Pointer geo_points(Pointer gs) { + return MeosLibrary.meos.geo_points(gs); } @SuppressWarnings("unused") - public static Pointer stbox_tmax(Pointer box) { - boolean out; - Runtime runtime = Runtime.getSystemRuntime(); - Pointer result = Memory.allocateDirect(runtime, Long.BYTES); - out = MeosLibrary.meos.stbox_tmax(box, result); - return out ? result : null ; + public static Pointer geom_array_union(Pointer gsarr, int count) { + return MeosLibrary.meos.geom_array_union(gsarr, count); } @SuppressWarnings("unused") - public static Pointer stbox_tmax_inc(Pointer box) { - boolean out; - Runtime runtime = Runtime.getSystemRuntime(); - Pointer result = Memory.allocateDirect(runtime, Long.BYTES); - out = MeosLibrary.meos.stbox_tmax_inc(box, result); - return out ? result : null ; + public static Pointer geom_boundary(Pointer gs) { + return MeosLibrary.meos.geom_boundary(gs); } @SuppressWarnings("unused") - public static Pointer stbox_tmin(Pointer box) { - boolean out; - Runtime runtime = Runtime.getSystemRuntime(); - Pointer result = Memory.allocateDirect(runtime, Long.BYTES); - out = MeosLibrary.meos.stbox_tmin(box, result); - return out ? result : null ; + public static Pointer geom_buffer(Pointer gs, double size, String params) { + return MeosLibrary.meos.geom_buffer(gs, size, params); } @SuppressWarnings("unused") - public static Pointer stbox_tmin_inc(Pointer box) { - boolean out; - Runtime runtime = Runtime.getSystemRuntime(); - Pointer result = Memory.allocateDirect(runtime, Long.BYTES); - out = MeosLibrary.meos.stbox_tmin_inc(box, result); - return out ? result : null ; + public static Pointer geom_centroid(Pointer gs) { + return MeosLibrary.meos.geom_centroid(gs); } @SuppressWarnings("unused") - public static Pointer stbox_xmax(Pointer box) { - boolean out; - Runtime runtime = Runtime.getSystemRuntime(); - Pointer result = Memory.allocateDirect(runtime, Long.BYTES); - out = MeosLibrary.meos.stbox_xmax(box, result); - return out ? result : null ; + public static Pointer geom_convex_hull(Pointer gs) { + return MeosLibrary.meos.geom_convex_hull(gs); } @SuppressWarnings("unused") - public static Pointer stbox_xmin(Pointer box) { - boolean out; - Runtime runtime = Runtime.getSystemRuntime(); - Pointer result = Memory.allocateDirect(runtime, Long.BYTES); - out = MeosLibrary.meos.stbox_xmin(box, result); - return out ? result : null ; + public static Pointer geom_difference2d(Pointer gs1, Pointer gs2) { + return MeosLibrary.meos.geom_difference2d(gs1, gs2); } @SuppressWarnings("unused") - public static Pointer stbox_ymax(Pointer box) { - boolean out; - Runtime runtime = Runtime.getSystemRuntime(); - Pointer result = Memory.allocateDirect(runtime, Long.BYTES); - out = MeosLibrary.meos.stbox_ymax(box, result); - return out ? result : null ; + public static Pointer geom_intersection2d(Pointer gs1, Pointer gs2) { + return MeosLibrary.meos.geom_intersection2d(gs1, gs2); } @SuppressWarnings("unused") - public static Pointer stbox_ymin(Pointer box) { - boolean out; - Runtime runtime = Runtime.getSystemRuntime(); - Pointer result = Memory.allocateDirect(runtime, Long.BYTES); - out = MeosLibrary.meos.stbox_ymin(box, result); - return out ? result : null ; + public static Pointer geom_intersection2d_coll(Pointer gs1, Pointer gs2) { + return MeosLibrary.meos.geom_intersection2d_coll(gs1, gs2); } @SuppressWarnings("unused") - public static Pointer stbox_zmax(Pointer box) { - boolean out; - Runtime runtime = Runtime.getSystemRuntime(); - Pointer result = Memory.allocateDirect(runtime, Long.BYTES); - out = MeosLibrary.meos.stbox_zmax(box, result); - return out ? result : null ; + public static Pointer geom_min_bounding_radius(Pointer geom, Pointer radius) { + return MeosLibrary.meos.geom_min_bounding_radius(geom, radius); } @SuppressWarnings("unused") - public static Pointer stbox_zmin(Pointer box) { - boolean out; - Runtime runtime = Runtime.getSystemRuntime(); - Pointer result = Memory.allocateDirect(runtime, Long.BYTES); - out = MeosLibrary.meos.stbox_zmin(box, result); - return out ? result : null ; + public static Pointer geom_shortestline2d(Pointer gs1, Pointer s2) { + return MeosLibrary.meos.geom_shortestline2d(gs1, s2); } @SuppressWarnings("unused") - public static boolean tbox_hast(Pointer box) { - return MeosLibrary.meos.tbox_hast(box); + public static Pointer geom_shortestline3d(Pointer gs1, Pointer s2) { + return MeosLibrary.meos.geom_shortestline3d(gs1, s2); } @SuppressWarnings("unused") - public static boolean tbox_hasx(Pointer box) { - return MeosLibrary.meos.tbox_hasx(box); + public static Pointer geom_unary_union(Pointer gs, double prec) { + return MeosLibrary.meos.geom_unary_union(gs, prec); } @SuppressWarnings("unused") - public static Pointer tbox_tmax(Pointer box) { - boolean out; - Runtime runtime = Runtime.getSystemRuntime(); - Pointer result = Memory.allocateDirect(runtime, Long.BYTES); - out = MeosLibrary.meos.tbox_tmax(box, result); - return out ? result : null ; + public static Pointer line_interpolate_point(Pointer gs, double distance_fraction, boolean repeat) { + return MeosLibrary.meos.line_interpolate_point(gs, distance_fraction, repeat); } @SuppressWarnings("unused") - public static Pointer tbox_tmax_inc(Pointer box) { - boolean out; - Runtime runtime = Runtime.getSystemRuntime(); - Pointer result = Memory.allocateDirect(runtime, Long.BYTES); - out = MeosLibrary.meos.tbox_tmax_inc(box, result); - return out ? result : null ; + public static double line_locate_point(Pointer gs1, Pointer gs2) { + return MeosLibrary.meos.line_locate_point(gs1, gs2); } @SuppressWarnings("unused") - public static Pointer tbox_tmin(Pointer box) { - boolean out; - Runtime runtime = Runtime.getSystemRuntime(); - Pointer result = Memory.allocateDirect(runtime, Long.BYTES); - out = MeosLibrary.meos.tbox_tmin(box, result); - return out ? result : null ; + public static Pointer line_substring(Pointer gs, double from, double to) { + return MeosLibrary.meos.line_substring(gs, from, to); } @SuppressWarnings("unused") - public static Pointer tbox_tmin_inc(Pointer box) { - boolean out; - Runtime runtime = Runtime.getSystemRuntime(); - Pointer result = Memory.allocateDirect(runtime, Long.BYTES); - out = MeosLibrary.meos.tbox_tmin_inc(box, result); - return out ? result : null ; + public static boolean geog_dwithin(Pointer g1, Pointer g2, double tolerance, boolean use_spheroid) { + return MeosLibrary.meos.geog_dwithin(g1, g2, tolerance, use_spheroid); } @SuppressWarnings("unused") - public static Pointer tbox_xmax(Pointer box) { - boolean out; - Runtime runtime = Runtime.getSystemRuntime(); - Pointer result = Memory.allocateDirect(runtime, Long.BYTES); - out = MeosLibrary.meos.tbox_xmax(box, result); - return out ? result : null ; + public static boolean geog_intersects(Pointer gs1, Pointer gs2, boolean use_spheroid) { + return MeosLibrary.meos.geog_intersects(gs1, gs2, use_spheroid); } @SuppressWarnings("unused") - public static Pointer tbox_xmax_inc(Pointer box) { - boolean out; - Runtime runtime = Runtime.getSystemRuntime(); - Pointer result = Memory.allocateDirect(runtime, Long.BYTES); - out = MeosLibrary.meos.tbox_xmax_inc(box, result); - return out ? result : null ; + public static boolean geom_contains(Pointer gs1, Pointer gs2) { + return MeosLibrary.meos.geom_contains(gs1, gs2); } @SuppressWarnings("unused") - public static Pointer tbox_xmin(Pointer box) { - boolean out; - Runtime runtime = Runtime.getSystemRuntime(); - Pointer result = Memory.allocateDirect(runtime, Long.BYTES); - out = MeosLibrary.meos.tbox_xmin(box, result); - return out ? result : null ; + public static boolean geom_covers(Pointer gs1, Pointer gs2) { + return MeosLibrary.meos.geom_covers(gs1, gs2); } @SuppressWarnings("unused") - public static Pointer tbox_xmin_inc(Pointer box) { - boolean out; - Runtime runtime = Runtime.getSystemRuntime(); - Pointer result = Memory.allocateDirect(runtime, Long.BYTES); - out = MeosLibrary.meos.tbox_xmin_inc(box, result); - return out ? result : null ; + public static boolean geom_disjoint2d(Pointer gs1, Pointer gs2) { + return MeosLibrary.meos.geom_disjoint2d(gs1, gs2); } @SuppressWarnings("unused") - public static Pointer tboxfloat_xmax(Pointer box) { - boolean out; - Runtime runtime = Runtime.getSystemRuntime(); - Pointer result = Memory.allocateDirect(runtime, Long.BYTES); - out = MeosLibrary.meos.tboxfloat_xmax(box, result); - return out ? result : null ; + public static boolean geom_dwithin2d(Pointer gs1, Pointer gs2, double tolerance) { + return MeosLibrary.meos.geom_dwithin2d(gs1, gs2, tolerance); } @SuppressWarnings("unused") - public static Pointer tboxfloat_xmin(Pointer box) { - boolean out; - Runtime runtime = Runtime.getSystemRuntime(); - Pointer result = Memory.allocateDirect(runtime, Long.BYTES); - out = MeosLibrary.meos.tboxfloat_xmin(box, result); - return out ? result : null ; + public static boolean geom_dwithin3d(Pointer gs1, Pointer gs2, double tolerance) { + return MeosLibrary.meos.geom_dwithin3d(gs1, gs2, tolerance); } @SuppressWarnings("unused") - public static Pointer tboxint_xmax(Pointer box) { - boolean out; - Runtime runtime = Runtime.getSystemRuntime(); - Pointer result = Memory.allocateDirect(runtime, Long.BYTES); - out = MeosLibrary.meos.tboxint_xmax(box, result); - return out ? result : null ; + public static boolean geom_intersects2d(Pointer gs1, Pointer gs2) { + return MeosLibrary.meos.geom_intersects2d(gs1, gs2); } @SuppressWarnings("unused") - public static Pointer tboxint_xmin(Pointer box) { - boolean out; - Runtime runtime = Runtime.getSystemRuntime(); - Pointer result = Memory.allocateDirect(runtime, Long.BYTES); - out = MeosLibrary.meos.tboxint_xmin(box, result); - return out ? result : null ; + public static boolean geom_intersects3d(Pointer gs1, Pointer gs2) { + return MeosLibrary.meos.geom_intersects3d(gs1, gs2); } @SuppressWarnings("unused") - public static Pointer stbox_expand_space(Pointer box, double d) { - return MeosLibrary.meos.stbox_expand_space(box, d); + public static boolean geom_relate_pattern(Pointer gs1, Pointer gs2, String patt) { + return MeosLibrary.meos.geom_relate_pattern(gs1, gs2, patt); } @SuppressWarnings("unused") - public static Pointer stbox_expand_time(Pointer box, Pointer interv) { - return MeosLibrary.meos.stbox_expand_time(box, interv); + public static boolean geom_touches(Pointer gs1, Pointer gs2) { + return MeosLibrary.meos.geom_touches(gs1, gs2); } @SuppressWarnings("unused") - public static Pointer stbox_get_space(Pointer box) { - return MeosLibrary.meos.stbox_get_space(box); + public static Pointer geo_stboxes(Pointer gs, Pointer count) { + return MeosLibrary.meos.geo_stboxes(gs, count); } @SuppressWarnings("unused") - public static Pointer stbox_quad_split(Pointer box, Pointer count) { - return MeosLibrary.meos.stbox_quad_split(box, count); + public static Pointer geo_split_each_n_stboxes(Pointer gs, int elem_count, Pointer count) { + return MeosLibrary.meos.geo_split_each_n_stboxes(gs, elem_count, count); } @SuppressWarnings("unused") - public static Pointer stbox_round(Pointer box, int maxdd) { - return MeosLibrary.meos.stbox_round(box, maxdd); + public static Pointer geo_split_n_stboxes(Pointer gs, int box_count, Pointer count) { + return MeosLibrary.meos.geo_split_n_stboxes(gs, box_count, count); } @SuppressWarnings("unused") - public static Pointer stbox_set_srid(Pointer box, int srid) { - return MeosLibrary.meos.stbox_set_srid(box, srid); + public static double geog_distance(Pointer g1, Pointer g2) { + return MeosLibrary.meos.geog_distance(g1, g2); } @SuppressWarnings("unused") - public static Pointer stbox_shift_scale_time(Pointer box, Pointer shift, Pointer duration) { - return MeosLibrary.meos.stbox_shift_scale_time(box, shift, duration); + public static double geom_distance2d(Pointer gs1, Pointer gs2) { + return MeosLibrary.meos.geom_distance2d(gs1, gs2); } @SuppressWarnings("unused") - public static Pointer stbox_transform(Pointer box, int srid) { - return MeosLibrary.meos.stbox_transform(box, srid); + public static double geom_distance3d(Pointer gs1, Pointer gs2) { + return MeosLibrary.meos.geom_distance3d(gs1, gs2); } @SuppressWarnings("unused") - public static Pointer stbox_transform_pipeline(Pointer box, String pipelinestr, int srid, boolean is_forward) { - return MeosLibrary.meos.stbox_transform_pipeline(box, pipelinestr, srid, is_forward); + public static int geo_equals(Pointer gs1, Pointer gs2) { + return MeosLibrary.meos.geo_equals(gs1, gs2); } @SuppressWarnings("unused") - public static Pointer tbox_expand_time(Pointer box, Pointer interv) { - return MeosLibrary.meos.tbox_expand_time(box, interv); + public static boolean geo_same(Pointer gs1, Pointer gs2) { + return MeosLibrary.meos.geo_same(gs1, gs2); } @SuppressWarnings("unused") - public static Pointer tbox_expand_float(Pointer box, double d) { - return MeosLibrary.meos.tbox_expand_float(box, d); + public static Pointer geogset_in(String str) { + return MeosLibrary.meos.geogset_in(str); } @SuppressWarnings("unused") - public static Pointer tbox_expand_int(Pointer box, int i) { - return MeosLibrary.meos.tbox_expand_int(box, i); + public static Pointer geomset_in(String str) { + return MeosLibrary.meos.geomset_in(str); } @SuppressWarnings("unused") - public static Pointer tbox_round(Pointer box, int maxdd) { - return MeosLibrary.meos.tbox_round(box, maxdd); + public static String spatialset_as_text(Pointer set, int maxdd) { + return MeosLibrary.meos.spatialset_as_text(set, maxdd); } @SuppressWarnings("unused") - public static Pointer tbox_shift_scale_float(Pointer box, double shift, double width, boolean hasshift, boolean haswidth) { - return MeosLibrary.meos.tbox_shift_scale_float(box, shift, width, hasshift, haswidth); + public static String spatialset_as_ewkt(Pointer set, int maxdd) { + return MeosLibrary.meos.spatialset_as_ewkt(set, maxdd); } @SuppressWarnings("unused") - public static Pointer tbox_shift_scale_int(Pointer box, int shift, int width, boolean hasshift, boolean haswidth) { - return MeosLibrary.meos.tbox_shift_scale_int(box, shift, width, hasshift, haswidth); + public static Pointer geoset_make(Pointer values, int count) { + return MeosLibrary.meos.geoset_make(values, count); } @SuppressWarnings("unused") - public static Pointer tbox_shift_scale_time(Pointer box, Pointer shift, Pointer duration) { - return MeosLibrary.meos.tbox_shift_scale_time(box, shift, duration); + public static Pointer geo_to_set(Pointer gs) { + return MeosLibrary.meos.geo_to_set(gs); } @SuppressWarnings("unused") - public static Pointer union_tbox_tbox(Pointer box1, Pointer box2, boolean strict) { - return MeosLibrary.meos.union_tbox_tbox(box1, box2, strict); + public static Pointer geoset_end_value(Pointer s) { + return MeosLibrary.meos.geoset_end_value(s); } @SuppressWarnings("unused") - public static Pointer intersection_tbox_tbox(Pointer box1, Pointer box2) { - return MeosLibrary.meos.intersection_tbox_tbox(box1, box2); + public static Pointer geoset_start_value(Pointer s) { + return MeosLibrary.meos.geoset_start_value(s); } @SuppressWarnings("unused") - public static Pointer union_stbox_stbox(Pointer box1, Pointer box2, boolean strict) { - return MeosLibrary.meos.union_stbox_stbox(box1, box2, strict); + public static Pointer geoset_value_n(Pointer s, int n) { + boolean out; + Runtime runtime = Runtime.getSystemRuntime(); + Pointer result = Memory.allocateDirect(runtime, Long.BYTES); + out = MeosLibrary.meos.geoset_value_n(s, n, result); + Pointer new_result = result.getPointer(0); + return out ? new_result : null ; } @SuppressWarnings("unused") - public static Pointer intersection_stbox_stbox(Pointer box1, Pointer box2) { - return MeosLibrary.meos.intersection_stbox_stbox(box1, box2); + public static Pointer geoset_values(Pointer s) { + return MeosLibrary.meos.geoset_values(s); } @SuppressWarnings("unused") - public static boolean adjacent_stbox_stbox(Pointer box1, Pointer box2) { - return MeosLibrary.meos.adjacent_stbox_stbox(box1, box2); + public static boolean contained_geo_set(Pointer gs, Pointer s) { + return MeosLibrary.meos.contained_geo_set(gs, s); } @SuppressWarnings("unused") - public static boolean adjacent_tbox_tbox(Pointer box1, Pointer box2) { - return MeosLibrary.meos.adjacent_tbox_tbox(box1, box2); + public static boolean contains_set_geo(Pointer s, Pointer gs) { + return MeosLibrary.meos.contains_set_geo(s, gs); } @SuppressWarnings("unused") - public static boolean contained_tbox_tbox(Pointer box1, Pointer box2) { - return MeosLibrary.meos.contained_tbox_tbox(box1, box2); + public static Pointer geo_union_transfn(Pointer state, Pointer gs) { + return MeosLibrary.meos.geo_union_transfn(state, gs); } @SuppressWarnings("unused") - public static boolean contained_stbox_stbox(Pointer box1, Pointer box2) { - return MeosLibrary.meos.contained_stbox_stbox(box1, box2); + public static Pointer intersection_geo_set(Pointer gs, Pointer s) { + return MeosLibrary.meos.intersection_geo_set(gs, s); } @SuppressWarnings("unused") - public static boolean contains_stbox_stbox(Pointer box1, Pointer box2) { - return MeosLibrary.meos.contains_stbox_stbox(box1, box2); + public static Pointer intersection_set_geo(Pointer s, Pointer gs) { + return MeosLibrary.meos.intersection_set_geo(s, gs); } @SuppressWarnings("unused") - public static boolean contains_tbox_tbox(Pointer box1, Pointer box2) { - return MeosLibrary.meos.contains_tbox_tbox(box1, box2); + public static Pointer minus_geo_set(Pointer gs, Pointer s) { + return MeosLibrary.meos.minus_geo_set(gs, s); } @SuppressWarnings("unused") - public static boolean overlaps_tbox_tbox(Pointer box1, Pointer box2) { - return MeosLibrary.meos.overlaps_tbox_tbox(box1, box2); + public static Pointer minus_set_geo(Pointer s, Pointer gs) { + return MeosLibrary.meos.minus_set_geo(s, gs); } @SuppressWarnings("unused") - public static boolean overlaps_stbox_stbox(Pointer box1, Pointer box2) { - return MeosLibrary.meos.overlaps_stbox_stbox(box1, box2); + public static Pointer union_geo_set(Pointer gs, Pointer s) { + return MeosLibrary.meos.union_geo_set(gs, s); } @SuppressWarnings("unused") - public static boolean same_tbox_tbox(Pointer box1, Pointer box2) { - return MeosLibrary.meos.same_tbox_tbox(box1, box2); + public static Pointer union_set_geo(Pointer s, Pointer gs) { + return MeosLibrary.meos.union_set_geo(s, gs); } @SuppressWarnings("unused") - public static boolean same_stbox_stbox(Pointer box1, Pointer box2) { - return MeosLibrary.meos.same_stbox_stbox(box1, box2); + public static Pointer spatialset_set_srid(Pointer s, int srid) { + return MeosLibrary.meos.spatialset_set_srid(s, srid); } @SuppressWarnings("unused") - public static boolean left_tbox_tbox(Pointer box1, Pointer box2) { - return MeosLibrary.meos.left_tbox_tbox(box1, box2); + public static int spatialset_srid(Pointer s) { + return MeosLibrary.meos.spatialset_srid(s); } @SuppressWarnings("unused") - public static boolean overleft_tbox_tbox(Pointer box1, Pointer box2) { - return MeosLibrary.meos.overleft_tbox_tbox(box1, box2); + public static Pointer spatialset_transform(Pointer s, int srid) { + return MeosLibrary.meos.spatialset_transform(s, srid); } @SuppressWarnings("unused") - public static boolean right_tbox_tbox(Pointer box1, Pointer box2) { - return MeosLibrary.meos.right_tbox_tbox(box1, box2); + public static Pointer spatialset_transform_pipeline(Pointer s, String pipelinestr, int srid, boolean is_forward) { + return MeosLibrary.meos.spatialset_transform_pipeline(s, pipelinestr, srid, is_forward); } @SuppressWarnings("unused") - public static boolean overright_tbox_tbox(Pointer box1, Pointer box2) { - return MeosLibrary.meos.overright_tbox_tbox(box1, box2); + public static String stbox_as_hexwkb(Pointer box, byte variant, Pointer size) { + return MeosLibrary.meos.stbox_as_hexwkb(box, variant, size); } @SuppressWarnings("unused") - public static boolean before_tbox_tbox(Pointer box1, Pointer box2) { - return MeosLibrary.meos.before_tbox_tbox(box1, box2); + public static Pointer stbox_as_wkb(Pointer box, byte variant) { + Runtime runtime = Runtime.getSystemRuntime(); + Pointer size_out = Memory.allocateDirect(runtime, Long.BYTES); + return MeosLibrary.meos.stbox_as_wkb(box, variant, size_out); } @SuppressWarnings("unused") - public static boolean overbefore_tbox_tbox(Pointer box1, Pointer box2) { - return MeosLibrary.meos.overbefore_tbox_tbox(box1, box2); + public static Pointer stbox_from_hexwkb(String hexwkb) { + return MeosLibrary.meos.stbox_from_hexwkb(hexwkb); } @SuppressWarnings("unused") - public static boolean after_tbox_tbox(Pointer box1, Pointer box2) { - return MeosLibrary.meos.after_tbox_tbox(box1, box2); + public static Pointer stbox_from_wkb(Pointer wkb, long size) { + return MeosLibrary.meos.stbox_from_wkb(wkb, size); } @SuppressWarnings("unused") - public static boolean overafter_tbox_tbox(Pointer box1, Pointer box2) { - return MeosLibrary.meos.overafter_tbox_tbox(box1, box2); + public static Pointer stbox_in(String str) { + return MeosLibrary.meos.stbox_in(str); } @SuppressWarnings("unused") - public static boolean left_stbox_stbox(Pointer box1, Pointer box2) { - return MeosLibrary.meos.left_stbox_stbox(box1, box2); + public static String stbox_out(Pointer box, int maxdd) { + return MeosLibrary.meos.stbox_out(box, maxdd); } @SuppressWarnings("unused") - public static boolean overleft_stbox_stbox(Pointer box1, Pointer box2) { - return MeosLibrary.meos.overleft_stbox_stbox(box1, box2); + public static Pointer geo_timestamptz_to_stbox(Pointer gs, OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.geo_timestamptz_to_stbox(gs, t_new); } @SuppressWarnings("unused") - public static boolean right_stbox_stbox(Pointer box1, Pointer box2) { - return MeosLibrary.meos.right_stbox_stbox(box1, box2); + public static Pointer geo_tstzspan_to_stbox(Pointer gs, Pointer s) { + return MeosLibrary.meos.geo_tstzspan_to_stbox(gs, s); } @SuppressWarnings("unused") - public static boolean overright_stbox_stbox(Pointer box1, Pointer box2) { - return MeosLibrary.meos.overright_stbox_stbox(box1, box2); + public static Pointer stbox_copy(Pointer box) { + return MeosLibrary.meos.stbox_copy(box); } @SuppressWarnings("unused") - public static boolean below_stbox_stbox(Pointer box1, Pointer box2) { - return MeosLibrary.meos.below_stbox_stbox(box1, box2); + public static Pointer stbox_make(boolean hasx, boolean hasz, boolean geodetic, int srid, double xmin, double xmax, double ymin, double ymax, double zmin, double zmax, Pointer s) { + return MeosLibrary.meos.stbox_make(hasx, hasz, geodetic, srid, xmin, xmax, ymin, ymax, zmin, zmax, s); } @SuppressWarnings("unused") - public static boolean overbelow_stbox_stbox(Pointer box1, Pointer box2) { - return MeosLibrary.meos.overbelow_stbox_stbox(box1, box2); + public static Pointer geo_to_stbox(Pointer gs) { + return MeosLibrary.meos.geo_to_stbox(gs); } @SuppressWarnings("unused") - public static boolean above_stbox_stbox(Pointer box1, Pointer box2) { - return MeosLibrary.meos.above_stbox_stbox(box1, box2); + public static Pointer spatialset_to_stbox(Pointer s) { + return MeosLibrary.meos.spatialset_to_stbox(s); } @SuppressWarnings("unused") - public static boolean overabove_stbox_stbox(Pointer box1, Pointer box2) { - return MeosLibrary.meos.overabove_stbox_stbox(box1, box2); + public static Pointer stbox_to_box3d(Pointer box) { + return MeosLibrary.meos.stbox_to_box3d(box); } @SuppressWarnings("unused") - public static boolean front_stbox_stbox(Pointer box1, Pointer box2) { - return MeosLibrary.meos.front_stbox_stbox(box1, box2); + public static Pointer stbox_to_gbox(Pointer box) { + return MeosLibrary.meos.stbox_to_gbox(box); } @SuppressWarnings("unused") - public static boolean overfront_stbox_stbox(Pointer box1, Pointer box2) { - return MeosLibrary.meos.overfront_stbox_stbox(box1, box2); + public static Pointer stbox_to_geo(Pointer box) { + return MeosLibrary.meos.stbox_to_geo(box); } @SuppressWarnings("unused") - public static boolean back_stbox_stbox(Pointer box1, Pointer box2) { - return MeosLibrary.meos.back_stbox_stbox(box1, box2); + public static Pointer stbox_to_tstzspan(Pointer box) { + return MeosLibrary.meos.stbox_to_tstzspan(box); } @SuppressWarnings("unused") - public static boolean overback_stbox_stbox(Pointer box1, Pointer box2) { - return MeosLibrary.meos.overback_stbox_stbox(box1, box2); + public static Pointer timestamptz_to_stbox(OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.timestamptz_to_stbox(t_new); } @SuppressWarnings("unused") - public static boolean before_stbox_stbox(Pointer box1, Pointer box2) { - return MeosLibrary.meos.before_stbox_stbox(box1, box2); + public static Pointer tstzset_to_stbox(Pointer s) { + return MeosLibrary.meos.tstzset_to_stbox(s); } @SuppressWarnings("unused") - public static boolean overbefore_stbox_stbox(Pointer box1, Pointer box2) { - return MeosLibrary.meos.overbefore_stbox_stbox(box1, box2); + public static Pointer tstzspan_to_stbox(Pointer s) { + return MeosLibrary.meos.tstzspan_to_stbox(s); } @SuppressWarnings("unused") - public static boolean after_stbox_stbox(Pointer box1, Pointer box2) { - return MeosLibrary.meos.after_stbox_stbox(box1, box2); + public static Pointer tstzspanset_to_stbox(Pointer ss) { + return MeosLibrary.meos.tstzspanset_to_stbox(ss); } @SuppressWarnings("unused") - public static boolean overafter_stbox_stbox(Pointer box1, Pointer box2) { - return MeosLibrary.meos.overafter_stbox_stbox(box1, box2); + public static double stbox_area(Pointer box, boolean spheroid) { + return MeosLibrary.meos.stbox_area(box, spheroid); } @SuppressWarnings("unused") - public static boolean tbox_eq(Pointer box1, Pointer box2) { - return MeosLibrary.meos.tbox_eq(box1, box2); + public static int stbox_hash(Pointer box) { + return MeosLibrary.meos.stbox_hash(box); } @SuppressWarnings("unused") - public static boolean tbox_ne(Pointer box1, Pointer box2) { - return MeosLibrary.meos.tbox_ne(box1, box2); + public static long stbox_hash_extended(Pointer box, long seed) { + return MeosLibrary.meos.stbox_hash_extended(box, seed); } @SuppressWarnings("unused") - public static int tbox_cmp(Pointer box1, Pointer box2) { - return MeosLibrary.meos.tbox_cmp(box1, box2); + public static boolean stbox_hast(Pointer box) { + return MeosLibrary.meos.stbox_hast(box); } @SuppressWarnings("unused") - public static boolean tbox_lt(Pointer box1, Pointer box2) { - return MeosLibrary.meos.tbox_lt(box1, box2); + public static boolean stbox_hasx(Pointer box) { + return MeosLibrary.meos.stbox_hasx(box); } @SuppressWarnings("unused") - public static boolean tbox_le(Pointer box1, Pointer box2) { - return MeosLibrary.meos.tbox_le(box1, box2); + public static boolean stbox_hasz(Pointer box) { + return MeosLibrary.meos.stbox_hasz(box); } @SuppressWarnings("unused") - public static boolean tbox_ge(Pointer box1, Pointer box2) { - return MeosLibrary.meos.tbox_ge(box1, box2); + public static boolean stbox_isgeodetic(Pointer box) { + return MeosLibrary.meos.stbox_isgeodetic(box); } @SuppressWarnings("unused") - public static boolean tbox_gt(Pointer box1, Pointer box2) { - return MeosLibrary.meos.tbox_gt(box1, box2); + public static double stbox_perimeter(Pointer box, boolean spheroid) { + return MeosLibrary.meos.stbox_perimeter(box, spheroid); } @SuppressWarnings("unused") - public static boolean stbox_eq(Pointer box1, Pointer box2) { - return MeosLibrary.meos.stbox_eq(box1, box2); + public static Pointer stbox_tmax(Pointer box) { + boolean out; + Runtime runtime = Runtime.getSystemRuntime(); + Pointer result = Memory.allocateDirect(runtime, Long.BYTES); + out = MeosLibrary.meos.stbox_tmax(box, result); + Pointer new_result = result.getPointer(0); + return out ? new_result : null ; } @SuppressWarnings("unused") - public static boolean stbox_ne(Pointer box1, Pointer box2) { - return MeosLibrary.meos.stbox_ne(box1, box2); + public static Pointer stbox_tmax_inc(Pointer box) { + boolean out; + Runtime runtime = Runtime.getSystemRuntime(); + Pointer result = Memory.allocateDirect(runtime, Long.BYTES); + out = MeosLibrary.meos.stbox_tmax_inc(box, result); + Pointer new_result = result.getPointer(0); + return out ? new_result : null ; } @SuppressWarnings("unused") - public static int stbox_cmp(Pointer box1, Pointer box2) { - return MeosLibrary.meos.stbox_cmp(box1, box2); + public static Pointer stbox_tmin(Pointer box) { + boolean out; + Runtime runtime = Runtime.getSystemRuntime(); + Pointer result = Memory.allocateDirect(runtime, Long.BYTES); + out = MeosLibrary.meos.stbox_tmin(box, result); + Pointer new_result = result.getPointer(0); + return out ? new_result : null ; } @SuppressWarnings("unused") - public static boolean stbox_lt(Pointer box1, Pointer box2) { - return MeosLibrary.meos.stbox_lt(box1, box2); + public static Pointer stbox_tmin_inc(Pointer box) { + boolean out; + Runtime runtime = Runtime.getSystemRuntime(); + Pointer result = Memory.allocateDirect(runtime, Long.BYTES); + out = MeosLibrary.meos.stbox_tmin_inc(box, result); + Pointer new_result = result.getPointer(0); + return out ? new_result : null ; } @SuppressWarnings("unused") - public static boolean stbox_le(Pointer box1, Pointer box2) { - return MeosLibrary.meos.stbox_le(box1, box2); + public static double stbox_volume(Pointer box) { + return MeosLibrary.meos.stbox_volume(box); } @SuppressWarnings("unused") - public static boolean stbox_ge(Pointer box1, Pointer box2) { - return MeosLibrary.meos.stbox_ge(box1, box2); + public static Pointer stbox_xmax(Pointer box) { + boolean out; + Runtime runtime = Runtime.getSystemRuntime(); + Pointer result = Memory.allocateDirect(runtime, Long.BYTES); + out = MeosLibrary.meos.stbox_xmax(box, result); + Pointer new_result = result.getPointer(0); + return out ? new_result : null ; } @SuppressWarnings("unused") - public static boolean stbox_gt(Pointer box1, Pointer box2) { - return MeosLibrary.meos.stbox_gt(box1, box2); + public static Pointer stbox_xmin(Pointer box) { + boolean out; + Runtime runtime = Runtime.getSystemRuntime(); + Pointer result = Memory.allocateDirect(runtime, Long.BYTES); + out = MeosLibrary.meos.stbox_xmin(box, result); + Pointer new_result = result.getPointer(0); + return out ? new_result : null ; } @SuppressWarnings("unused") - public static Pointer tbool_in(String str) { - return MeosLibrary.meos.tbool_in(str); + public static Pointer stbox_ymax(Pointer box) { + boolean out; + Runtime runtime = Runtime.getSystemRuntime(); + Pointer result = Memory.allocateDirect(runtime, Long.BYTES); + out = MeosLibrary.meos.stbox_ymax(box, result); + Pointer new_result = result.getPointer(0); + return out ? new_result : null ; } @SuppressWarnings("unused") - public static Pointer tint_in(String str) { - return MeosLibrary.meos.tint_in(str); + public static Pointer stbox_ymin(Pointer box) { + boolean out; + Runtime runtime = Runtime.getSystemRuntime(); + Pointer result = Memory.allocateDirect(runtime, Long.BYTES); + out = MeosLibrary.meos.stbox_ymin(box, result); + Pointer new_result = result.getPointer(0); + return out ? new_result : null ; } @SuppressWarnings("unused") - public static Pointer tfloat_in(String str) { - return MeosLibrary.meos.tfloat_in(str); + public static Pointer stbox_zmax(Pointer box) { + boolean out; + Runtime runtime = Runtime.getSystemRuntime(); + Pointer result = Memory.allocateDirect(runtime, Long.BYTES); + out = MeosLibrary.meos.stbox_zmax(box, result); + Pointer new_result = result.getPointer(0); + return out ? new_result : null ; } @SuppressWarnings("unused") - public static Pointer ttext_in(String str) { - return MeosLibrary.meos.ttext_in(str); + public static Pointer stbox_zmin(Pointer box) { + boolean out; + Runtime runtime = Runtime.getSystemRuntime(); + Pointer result = Memory.allocateDirect(runtime, Long.BYTES); + out = MeosLibrary.meos.stbox_zmin(box, result); + Pointer new_result = result.getPointer(0); + return out ? new_result : null ; } @SuppressWarnings("unused") - public static Pointer tgeompoint_in(String str) { - return MeosLibrary.meos.tgeompoint_in(str); + public static Pointer stbox_expand_space(Pointer box, double d) { + return MeosLibrary.meos.stbox_expand_space(box, d); } @SuppressWarnings("unused") - public static Pointer tgeogpoint_in(String str) { - return MeosLibrary.meos.tgeogpoint_in(str); + public static Pointer stbox_expand_time(Pointer box, Pointer interv) { + return MeosLibrary.meos.stbox_expand_time(box, interv); } @SuppressWarnings("unused") - public static Pointer tbool_from_mfjson(String str) { - return MeosLibrary.meos.tbool_from_mfjson(str); + public static Pointer stbox_get_space(Pointer box) { + return MeosLibrary.meos.stbox_get_space(box); } @SuppressWarnings("unused") - public static Pointer tint_from_mfjson(String str) { - return MeosLibrary.meos.tint_from_mfjson(str); + public static Pointer stbox_quad_split(Pointer box, Pointer count) { + return MeosLibrary.meos.stbox_quad_split(box, count); } @SuppressWarnings("unused") - public static Pointer tfloat_from_mfjson(String str) { - return MeosLibrary.meos.tfloat_from_mfjson(str); + public static Pointer stbox_round(Pointer box, int maxdd) { + return MeosLibrary.meos.stbox_round(box, maxdd); } @SuppressWarnings("unused") - public static Pointer ttext_from_mfjson(String str) { - return MeosLibrary.meos.ttext_from_mfjson(str); + public static Pointer stbox_shift_scale_time(Pointer box, Pointer shift, Pointer duration) { + return MeosLibrary.meos.stbox_shift_scale_time(box, shift, duration); } @SuppressWarnings("unused") - public static Pointer tgeompoint_from_mfjson(String str) { - return MeosLibrary.meos.tgeompoint_from_mfjson(str); + public static Pointer stboxarr_round(Pointer boxarr, int count, int maxdd) { + return MeosLibrary.meos.stboxarr_round(boxarr, count, maxdd); } @SuppressWarnings("unused") - public static Pointer tgeogpoint_from_mfjson(String str) { - return MeosLibrary.meos.tgeogpoint_from_mfjson(str); + public static Pointer stbox_set_srid(Pointer box, int srid) { + return MeosLibrary.meos.stbox_set_srid(box, srid); } @SuppressWarnings("unused") - public static Pointer temporal_from_wkb(Pointer wkb, long size) { - return MeosLibrary.meos.temporal_from_wkb(wkb, size); + public static int stbox_srid(Pointer box) { + return MeosLibrary.meos.stbox_srid(box); } @SuppressWarnings("unused") - public static Pointer temporal_from_hexwkb(String hexwkb) { - return MeosLibrary.meos.temporal_from_hexwkb(hexwkb); + public static Pointer stbox_transform(Pointer box, int srid) { + return MeosLibrary.meos.stbox_transform(box, srid); } @SuppressWarnings("unused") - public static String tbool_out(Pointer temp) { - return MeosLibrary.meos.tbool_out(temp); + public static Pointer stbox_transform_pipeline(Pointer box, String pipelinestr, int srid, boolean is_forward) { + return MeosLibrary.meos.stbox_transform_pipeline(box, pipelinestr, srid, is_forward); } @SuppressWarnings("unused") - public static String tint_out(Pointer temp) { - return MeosLibrary.meos.tint_out(temp); + public static boolean adjacent_stbox_stbox(Pointer box1, Pointer box2) { + return MeosLibrary.meos.adjacent_stbox_stbox(box1, box2); } @SuppressWarnings("unused") - public static String tfloat_out(Pointer temp, int maxdd) { - return MeosLibrary.meos.tfloat_out(temp, maxdd); + public static boolean contained_stbox_stbox(Pointer box1, Pointer box2) { + return MeosLibrary.meos.contained_stbox_stbox(box1, box2); } @SuppressWarnings("unused") - public static String ttext_out(Pointer temp) { - return MeosLibrary.meos.ttext_out(temp); + public static boolean contains_stbox_stbox(Pointer box1, Pointer box2) { + return MeosLibrary.meos.contains_stbox_stbox(box1, box2); } @SuppressWarnings("unused") - public static String tpoint_out(Pointer temp, int maxdd) { - return MeosLibrary.meos.tpoint_out(temp, maxdd); + public static boolean overlaps_stbox_stbox(Pointer box1, Pointer box2) { + return MeosLibrary.meos.overlaps_stbox_stbox(box1, box2); } @SuppressWarnings("unused") - public static String tpoint_as_text(Pointer temp, int maxdd) { - return MeosLibrary.meos.tpoint_as_text(temp, maxdd); + public static boolean same_stbox_stbox(Pointer box1, Pointer box2) { + return MeosLibrary.meos.same_stbox_stbox(box1, box2); } @SuppressWarnings("unused") - public static String tpoint_as_ewkt(Pointer temp, int maxdd) { - return MeosLibrary.meos.tpoint_as_ewkt(temp, maxdd); - } - - @SuppressWarnings("unused") - public static String tspatial_as_ewkt(Pointer temp, int maxdd) { - return MeosLibrary.meos.tspatial_as_ewkt(temp, maxdd); - } - - @SuppressWarnings("unused") - public static String tspatial_as_text(Pointer temp, int maxdd) { - return MeosLibrary.meos.tspatial_as_text(temp, maxdd); + public static boolean above_stbox_stbox(Pointer box1, Pointer box2) { + return MeosLibrary.meos.above_stbox_stbox(box1, box2); } - + @SuppressWarnings("unused") - public static String temporal_as_mfjson(Pointer temp, boolean with_bbox, int flags, int precision, String srs) { - return MeosLibrary.meos.temporal_as_mfjson(temp, with_bbox, flags, precision, srs); + public static boolean after_stbox_stbox(Pointer box1, Pointer box2) { + return MeosLibrary.meos.after_stbox_stbox(box1, box2); } @SuppressWarnings("unused") - public static Pointer temporal_as_wkb(Pointer temp, byte variant) { - Runtime runtime = Runtime.getSystemRuntime(); - Pointer size_out = Memory.allocateDirect(runtime, Long.BYTES); - return MeosLibrary.meos.temporal_as_wkb(temp, variant, size_out); + public static boolean back_stbox_stbox(Pointer box1, Pointer box2) { + return MeosLibrary.meos.back_stbox_stbox(box1, box2); } @SuppressWarnings("unused") - public static String temporal_as_hexwkb(Pointer temp, byte variant) { - Runtime runtime = Runtime.getSystemRuntime(); - Pointer size_out = Memory.allocateDirect(runtime, Long.BYTES); - return MeosLibrary.meos.temporal_as_hexwkb(temp, variant, size_out); + public static boolean before_stbox_stbox(Pointer box1, Pointer box2) { + return MeosLibrary.meos.before_stbox_stbox(box1, box2); } @SuppressWarnings("unused") - public static Pointer tbool_from_base_temp(boolean b, Pointer temp) { - return MeosLibrary.meos.tbool_from_base_temp(b, temp); + public static boolean below_stbox_stbox(Pointer box1, Pointer box2) { + return MeosLibrary.meos.below_stbox_stbox(box1, box2); } @SuppressWarnings("unused") - public static Pointer tboolinst_make(boolean b, OffsetDateTime t) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.tboolinst_make(b, t_new); + public static boolean front_stbox_stbox(Pointer box1, Pointer box2) { + return MeosLibrary.meos.front_stbox_stbox(box1, box2); } @SuppressWarnings("unused") - public static Pointer tboolseq_from_base_tstzset(boolean b, Pointer s) { - return MeosLibrary.meos.tboolseq_from_base_tstzset(b, s); + public static boolean left_stbox_stbox(Pointer box1, Pointer box2) { + return MeosLibrary.meos.left_stbox_stbox(box1, box2); } @SuppressWarnings("unused") - public static Pointer tboolseq_from_base_tstzspan(boolean b, Pointer s) { - return MeosLibrary.meos.tboolseq_from_base_tstzspan(b, s); + public static boolean overabove_stbox_stbox(Pointer box1, Pointer box2) { + return MeosLibrary.meos.overabove_stbox_stbox(box1, box2); } @SuppressWarnings("unused") - public static Pointer tboolseqset_from_base_tstzspanset(boolean b, Pointer ss) { - return MeosLibrary.meos.tboolseqset_from_base_tstzspanset(b, ss); + public static boolean overafter_stbox_stbox(Pointer box1, Pointer box2) { + return MeosLibrary.meos.overafter_stbox_stbox(box1, box2); } @SuppressWarnings("unused") - public static Pointer temporal_copy(Pointer temp) { - return MeosLibrary.meos.temporal_copy(temp); + public static boolean overback_stbox_stbox(Pointer box1, Pointer box2) { + return MeosLibrary.meos.overback_stbox_stbox(box1, box2); } @SuppressWarnings("unused") - public static Pointer tfloat_from_base_temp(double d, Pointer temp) { - return MeosLibrary.meos.tfloat_from_base_temp(d, temp); + public static boolean overbefore_stbox_stbox(Pointer box1, Pointer box2) { + return MeosLibrary.meos.overbefore_stbox_stbox(box1, box2); } @SuppressWarnings("unused") - public static Pointer tfloatinst_make(double d, OffsetDateTime t) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.tfloatinst_make(d, t_new); + public static boolean overbelow_stbox_stbox(Pointer box1, Pointer box2) { + return MeosLibrary.meos.overbelow_stbox_stbox(box1, box2); } @SuppressWarnings("unused") - public static Pointer tfloatseq_from_base_tstzspan(double d, Pointer s, int interp) { - return MeosLibrary.meos.tfloatseq_from_base_tstzspan(d, s, interp); + public static boolean overfront_stbox_stbox(Pointer box1, Pointer box2) { + return MeosLibrary.meos.overfront_stbox_stbox(box1, box2); } @SuppressWarnings("unused") - public static Pointer tfloatseq_from_base_tstzset(double d, Pointer s) { - return MeosLibrary.meos.tfloatseq_from_base_tstzset(d, s); + public static boolean overleft_stbox_stbox(Pointer box1, Pointer box2) { + return MeosLibrary.meos.overleft_stbox_stbox(box1, box2); } @SuppressWarnings("unused") - public static Pointer tfloatseqset_from_base_tstzspanset(double d, Pointer ss, int interp) { - return MeosLibrary.meos.tfloatseqset_from_base_tstzspanset(d, ss, interp); + public static boolean overright_stbox_stbox(Pointer box1, Pointer box2) { + return MeosLibrary.meos.overright_stbox_stbox(box1, box2); } @SuppressWarnings("unused") - public static Pointer tint_from_base_temp(int i, Pointer temp) { - return MeosLibrary.meos.tint_from_base_temp(i, temp); + public static boolean right_stbox_stbox(Pointer box1, Pointer box2) { + return MeosLibrary.meos.right_stbox_stbox(box1, box2); } @SuppressWarnings("unused") - public static Pointer tintinst_make(int i, OffsetDateTime t) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.tintinst_make(i, t_new); + public static Pointer union_stbox_stbox(Pointer box1, Pointer box2, boolean strict) { + return MeosLibrary.meos.union_stbox_stbox(box1, box2, strict); } @SuppressWarnings("unused") - public static Pointer tintseq_from_base_tstzspan(int i, Pointer s) { - return MeosLibrary.meos.tintseq_from_base_tstzspan(i, s); + public static Pointer intersection_stbox_stbox(Pointer box1, Pointer box2) { + return MeosLibrary.meos.intersection_stbox_stbox(box1, box2); } @SuppressWarnings("unused") - public static Pointer tintseq_from_base_tstzset(int i, Pointer s) { - return MeosLibrary.meos.tintseq_from_base_tstzset(i, s); + public static int stbox_cmp(Pointer box1, Pointer box2) { + return MeosLibrary.meos.stbox_cmp(box1, box2); } @SuppressWarnings("unused") - public static Pointer tintseqset_from_base_tstzspanset(int i, Pointer ss) { - return MeosLibrary.meos.tintseqset_from_base_tstzspanset(i, ss); + public static boolean stbox_eq(Pointer box1, Pointer box2) { + return MeosLibrary.meos.stbox_eq(box1, box2); } @SuppressWarnings("unused") - public static Pointer tpoint_from_base_temp(Pointer gs, Pointer temp) { - return MeosLibrary.meos.tpoint_from_base_temp(gs, temp); + public static boolean stbox_ge(Pointer box1, Pointer box2) { + return MeosLibrary.meos.stbox_ge(box1, box2); } @SuppressWarnings("unused") - public static Pointer tpointinst_make(Pointer gs, OffsetDateTime t) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.tpointinst_make(gs, t_new); + public static boolean stbox_gt(Pointer box1, Pointer box2) { + return MeosLibrary.meos.stbox_gt(box1, box2); } @SuppressWarnings("unused") - public static Pointer tpointseq_from_base_tstzspan(Pointer gs, Pointer s, int interp) { - return MeosLibrary.meos.tpointseq_from_base_tstzspan(gs, s, interp); + public static boolean stbox_le(Pointer box1, Pointer box2) { + return MeosLibrary.meos.stbox_le(box1, box2); } @SuppressWarnings("unused") - public static Pointer tpointseq_from_base_tstzset(Pointer gs, Pointer s) { - return MeosLibrary.meos.tpointseq_from_base_tstzset(gs, s); + public static boolean stbox_lt(Pointer box1, Pointer box2) { + return MeosLibrary.meos.stbox_lt(box1, box2); } @SuppressWarnings("unused") - public static Pointer tpointseqset_from_base_tstzspanset(Pointer gs, Pointer ss, int interp) { - return MeosLibrary.meos.tpointseqset_from_base_tstzspanset(gs, ss, interp); + public static boolean stbox_ne(Pointer box1, Pointer box2) { + return MeosLibrary.meos.stbox_ne(box1, box2); } @SuppressWarnings("unused") - public static Pointer tsequence_make(Pointer instants, int count, boolean lower_inc, boolean upper_inc, int interp, boolean normalize) { - return MeosLibrary.meos.tsequence_make(instants, count, lower_inc, upper_inc, interp, normalize); + public static Pointer tgeogpoint_from_mfjson(String str) { + return MeosLibrary.meos.tgeogpoint_from_mfjson(str); } @SuppressWarnings("unused") - public static Pointer tsequenceset_make(Pointer sequences, int count, boolean normalize) { - return MeosLibrary.meos.tsequenceset_make(sequences, count, normalize); + public static Pointer tgeogpoint_in(String str) { + return MeosLibrary.meos.tgeogpoint_in(str); } @SuppressWarnings("unused") - public static Pointer tsequenceset_make_gaps(Pointer instants, int count, int interp, Pointer maxt, double maxdist) { - return MeosLibrary.meos.tsequenceset_make_gaps(instants, count, interp, maxt, maxdist); + public static Pointer tgeography_from_mfjson(String mfjson) { + return MeosLibrary.meos.tgeography_from_mfjson(mfjson); } @SuppressWarnings("unused") - public static Pointer ttext_from_base_temp(Pointer txt, Pointer temp) { - return MeosLibrary.meos.ttext_from_base_temp(txt, temp); + public static Pointer tgeography_in(String str) { + return MeosLibrary.meos.tgeography_in(str); } @SuppressWarnings("unused") - public static Pointer ttextinst_make(Pointer txt, OffsetDateTime t) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.ttextinst_make(txt, t_new); + public static Pointer tgeometry_from_mfjson(String str) { + return MeosLibrary.meos.tgeometry_from_mfjson(str); } @SuppressWarnings("unused") - public static Pointer ttextseq_from_base_tstzspan(Pointer txt, Pointer s) { - return MeosLibrary.meos.ttextseq_from_base_tstzspan(txt, s); + public static Pointer tgeometry_in(String str) { + return MeosLibrary.meos.tgeometry_in(str); } @SuppressWarnings("unused") - public static Pointer ttextseq_from_base_tstzset(Pointer txt, Pointer s) { - return MeosLibrary.meos.ttextseq_from_base_tstzset(txt, s); + public static Pointer tgeompoint_from_mfjson(String str) { + return MeosLibrary.meos.tgeompoint_from_mfjson(str); } @SuppressWarnings("unused") - public static Pointer ttextseqset_from_base_tstzspanset(Pointer txt, Pointer ss) { - return MeosLibrary.meos.ttextseqset_from_base_tstzspanset(txt, ss); + public static Pointer tgeompoint_in(String str) { + return MeosLibrary.meos.tgeompoint_in(str); } @SuppressWarnings("unused") - public static Pointer temporal_to_tstzspan(Pointer temp) { - return MeosLibrary.meos.temporal_to_tstzspan(temp); + public static String tspatial_as_ewkt(Pointer temp, int maxdd) { + return MeosLibrary.meos.tspatial_as_ewkt(temp, maxdd); } @SuppressWarnings("unused") - public static Pointer tfloat_to_tint(Pointer temp) { - return MeosLibrary.meos.tfloat_to_tint(temp); + public static String tspatial_as_text(Pointer temp, int maxdd) { + return MeosLibrary.meos.tspatial_as_text(temp, maxdd); } @SuppressWarnings("unused") - public static Pointer tint_to_tfloat(Pointer temp) { - return MeosLibrary.meos.tint_to_tfloat(temp); + public static String tspatial_out(Pointer temp, int maxdd) { + return MeosLibrary.meos.tspatial_out(temp, maxdd); } @SuppressWarnings("unused") - public static Pointer tnumber_to_span(Pointer temp) { - return MeosLibrary.meos.tnumber_to_span(temp); + public static Pointer tgeo_from_base_temp(Pointer gs, Pointer temp) { + return MeosLibrary.meos.tgeo_from_base_temp(gs, temp); } @SuppressWarnings("unused") - public static boolean tbool_end_value(Pointer temp) { - return MeosLibrary.meos.tbool_end_value(temp); + public static Pointer tgeoinst_make(Pointer gs, OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.tgeoinst_make(gs, t_new); } @SuppressWarnings("unused") - public static boolean tbool_start_value(Pointer temp) { - return MeosLibrary.meos.tbool_start_value(temp); + public static Pointer tgeoseq_from_base_tstzset(Pointer gs, Pointer s) { + return MeosLibrary.meos.tgeoseq_from_base_tstzset(gs, s); } @SuppressWarnings("unused") - public static boolean tbool_value_at_timestamptz(Pointer temp, OffsetDateTime t, boolean strict, Pointer value) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.tbool_value_at_timestamptz(temp, t_new, strict, value); + public static Pointer tgeoseq_from_base_tstzspan(Pointer gs, Pointer s, int interp) { + return MeosLibrary.meos.tgeoseq_from_base_tstzspan(gs, s, interp); } @SuppressWarnings("unused") - public static Pointer tbool_value_n(Pointer temp, int n) { - boolean out; - Runtime runtime = Runtime.getSystemRuntime(); - Pointer result = Memory.allocateDirect(runtime, Long.BYTES); - out = MeosLibrary.meos.tbool_value_n(temp, n, result); - return out ? result : null ; + public static Pointer tgeoseqset_from_base_tstzspanset(Pointer gs, Pointer ss, int interp) { + return MeosLibrary.meos.tgeoseqset_from_base_tstzspanset(gs, ss, interp); } @SuppressWarnings("unused") - public static Pointer tbool_values(Pointer temp, Pointer count) { - return MeosLibrary.meos.tbool_values(temp, count); + public static Pointer tpoint_from_base_temp(Pointer gs, Pointer temp) { + return MeosLibrary.meos.tpoint_from_base_temp(gs, temp); } @SuppressWarnings("unused") - public static Pointer temporal_duration(Pointer temp, boolean boundspan) { - return MeosLibrary.meos.temporal_duration(temp, boundspan); + public static Pointer tpointinst_make(Pointer gs, OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.tpointinst_make(gs, t_new); } @SuppressWarnings("unused") - public static Pointer temporal_end_instant(Pointer temp) { - return MeosLibrary.meos.temporal_end_instant(temp); + public static Pointer tpointseq_from_base_tstzset(Pointer gs, Pointer s) { + return MeosLibrary.meos.tpointseq_from_base_tstzset(gs, s); } @SuppressWarnings("unused") - public static Pointer temporal_end_sequence(Pointer temp) { - return MeosLibrary.meos.temporal_end_sequence(temp); + public static Pointer tpointseq_from_base_tstzspan(Pointer gs, Pointer s, int interp) { + return MeosLibrary.meos.tpointseq_from_base_tstzspan(gs, s, interp); } @SuppressWarnings("unused") - public static OffsetDateTime temporal_end_timestamptz(Pointer temp) { - var result = MeosLibrary.meos.temporal_end_timestamptz(temp); - Instant instant = Instant.ofEpochSecond(result); - return OffsetDateTime.ofInstant(instant, ZoneOffset.UTC); + public static Pointer tpointseq_make_coords(Pointer xcoords, Pointer ycoords, Pointer zcoords, Pointer times, int count, int srid, boolean geodetic, boolean lower_inc, boolean upper_inc, int interp, boolean normalize) { + return MeosLibrary.meos.tpointseq_make_coords(xcoords, ycoords, zcoords, times, count, srid, geodetic, lower_inc, upper_inc, interp, normalize); } @SuppressWarnings("unused") - public static int temporal_hash(Pointer temp) { - return MeosLibrary.meos.temporal_hash(temp); + public static Pointer tpointseqset_from_base_tstzspanset(Pointer gs, Pointer ss, int interp) { + return MeosLibrary.meos.tpointseqset_from_base_tstzspanset(gs, ss, interp); } @SuppressWarnings("unused") - public static Pointer temporal_instant_n(Pointer temp, int n) { - return MeosLibrary.meos.temporal_instant_n(temp, n); + public static Pointer box3d_to_stbox(Pointer box) { + return MeosLibrary.meos.box3d_to_stbox(box); } @SuppressWarnings("unused") - public static Pointer temporal_instants(Pointer temp, Pointer count) { - return MeosLibrary.meos.temporal_instants(temp, count); + public static Pointer gbox_to_stbox(Pointer box) { + return MeosLibrary.meos.gbox_to_stbox(box); } @SuppressWarnings("unused") - public static String temporal_interp(Pointer temp) { - return MeosLibrary.meos.temporal_interp(temp); + public static Pointer geomeas_to_tpoint(Pointer gs) { + return MeosLibrary.meos.geomeas_to_tpoint(gs); } @SuppressWarnings("unused") - public static Pointer temporal_max_instant(Pointer temp) { - return MeosLibrary.meos.temporal_max_instant(temp); + public static Pointer tgeogpoint_to_tgeography(Pointer temp) { + return MeosLibrary.meos.tgeogpoint_to_tgeography(temp); } @SuppressWarnings("unused") - public static Pointer temporal_min_instant(Pointer temp) { - return MeosLibrary.meos.temporal_min_instant(temp); + public static Pointer tgeography_to_tgeogpoint(Pointer temp) { + return MeosLibrary.meos.tgeography_to_tgeogpoint(temp); } @SuppressWarnings("unused") - public static int temporal_num_instants(Pointer temp) { - return MeosLibrary.meos.temporal_num_instants(temp); + public static Pointer tgeography_to_tgeometry(Pointer temp) { + return MeosLibrary.meos.tgeography_to_tgeometry(temp); } @SuppressWarnings("unused") - public static int temporal_num_sequences(Pointer temp) { - return MeosLibrary.meos.temporal_num_sequences(temp); + public static Pointer tgeometry_to_tgeography(Pointer temp) { + return MeosLibrary.meos.tgeometry_to_tgeography(temp); } @SuppressWarnings("unused") - public static int temporal_num_timestamps(Pointer temp) { - return MeosLibrary.meos.temporal_num_timestamps(temp); + public static Pointer tgeometry_to_tgeompoint(Pointer temp) { + return MeosLibrary.meos.tgeometry_to_tgeompoint(temp); } @SuppressWarnings("unused") - public static Pointer temporal_segments(Pointer temp, Pointer count) { - return MeosLibrary.meos.temporal_segments(temp, count); + public static Pointer tgeompoint_to_tgeometry(Pointer temp) { + return MeosLibrary.meos.tgeompoint_to_tgeometry(temp); } @SuppressWarnings("unused") - public static Pointer temporal_sequence_n(Pointer temp, int i) { - return MeosLibrary.meos.temporal_sequence_n(temp, i); + public static boolean tpoint_as_mvtgeom(Pointer temp, Pointer bounds, int extent, int buffer, boolean clip_geom, Pointer gsarr, Pointer timesarr, Pointer count) { + return MeosLibrary.meos.tpoint_as_mvtgeom(temp, bounds, extent, buffer, clip_geom, gsarr, timesarr, count); } @SuppressWarnings("unused") - public static Pointer temporal_sequences(Pointer temp, Pointer count) { - return MeosLibrary.meos.temporal_sequences(temp, count); + public static Pointer tpoint_tfloat_to_geomeas(Pointer tpoint, Pointer measure, boolean segmentize) { + boolean out; + Runtime runtime = Runtime.getSystemRuntime(); + Pointer result = Memory.allocateDirect(runtime, Long.BYTES); + out = MeosLibrary.meos.tpoint_tfloat_to_geomeas(tpoint, measure, segmentize, result); + Pointer new_result = result.getPointer(0); + return out ? new_result : null ; } @SuppressWarnings("unused") - public static int temporal_lower_inc(Pointer temp) { - return MeosLibrary.meos.temporal_lower_inc(temp); + public static Pointer tspatial_to_stbox(Pointer temp) { + return MeosLibrary.meos.tspatial_to_stbox(temp); } @SuppressWarnings("unused") - public static int temporal_upper_inc(Pointer temp) { - return MeosLibrary.meos.temporal_upper_inc(temp); + public static Pointer bearing_point_point(Pointer gs1, Pointer gs2) { + boolean out; + Runtime runtime = Runtime.getSystemRuntime(); + Pointer result = Memory.allocateDirect(runtime, Long.BYTES); + out = MeosLibrary.meos.bearing_point_point(gs1, gs2, result); + Pointer new_result = result.getPointer(0); + return out ? new_result : null ; } @SuppressWarnings("unused") - public static Pointer temporal_start_instant(Pointer temp) { - return MeosLibrary.meos.temporal_start_instant(temp); + public static Pointer bearing_tpoint_point(Pointer temp, Pointer gs, boolean invert) { + return MeosLibrary.meos.bearing_tpoint_point(temp, gs, invert); } @SuppressWarnings("unused") - public static Pointer temporal_start_sequence(Pointer temp) { - return MeosLibrary.meos.temporal_start_sequence(temp); + public static Pointer bearing_tpoint_tpoint(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.bearing_tpoint_tpoint(temp1, temp2); } @SuppressWarnings("unused") - public static OffsetDateTime temporal_start_timestamptz(Pointer temp) { - var result = MeosLibrary.meos.temporal_start_timestamptz(temp); - Instant instant = Instant.ofEpochSecond(result); - return OffsetDateTime.ofInstant(instant, ZoneOffset.UTC); + public static Pointer tgeo_centroid(Pointer temp) { + return MeosLibrary.meos.tgeo_centroid(temp); } @SuppressWarnings("unused") - public static Pointer temporal_stops(Pointer temp, double maxdist, Pointer minduration) { - return MeosLibrary.meos.temporal_stops(temp, maxdist, minduration); + public static Pointer tgeo_convex_hull(Pointer temp) { + return MeosLibrary.meos.tgeo_convex_hull(temp); } @SuppressWarnings("unused") - public static String temporal_subtype(Pointer temp) { - return MeosLibrary.meos.temporal_subtype(temp); + public static Pointer tgeo_end_value(Pointer temp) { + return MeosLibrary.meos.tgeo_end_value(temp); } @SuppressWarnings("unused") - public static Pointer temporal_time(Pointer temp) { - return MeosLibrary.meos.temporal_time(temp); + public static Pointer tgeo_start_value(Pointer temp) { + return MeosLibrary.meos.tgeo_start_value(temp); } @SuppressWarnings("unused") - public static Pointer temporal_timestamptz_n(Pointer temp, int n) { - boolean out; - Runtime runtime = Runtime.getSystemRuntime(); - Pointer result = Memory.allocateDirect(runtime, Long.BYTES); - out = MeosLibrary.meos.temporal_timestamptz_n(temp, n, result); - return out ? result : null ; + public static Pointer tgeo_traversed_area(Pointer temp, boolean unary_union) { + return MeosLibrary.meos.tgeo_traversed_area(temp, unary_union); } @SuppressWarnings("unused") - public static Pointer temporal_timestamps(Pointer temp, Pointer count) { - return MeosLibrary.meos.temporal_timestamps(temp, count); + public static boolean tgeo_value_at_timestamptz(Pointer temp, OffsetDateTime t, boolean strict, Pointer value) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.tgeo_value_at_timestamptz(temp, t_new, strict, value); } @SuppressWarnings("unused") - public static double tfloat_end_value(Pointer temp) { - return MeosLibrary.meos.tfloat_end_value(temp); + public static Pointer tgeo_value_n(Pointer temp, int n) { + boolean out; + Runtime runtime = Runtime.getSystemRuntime(); + Pointer result = Memory.allocateDirect(runtime, Long.BYTES); + out = MeosLibrary.meos.tgeo_value_n(temp, n, result); + Pointer new_result = result.getPointer(0); + return out ? new_result : null ; } @SuppressWarnings("unused") - public static double tfloat_max_value(Pointer temp) { - return MeosLibrary.meos.tfloat_max_value(temp); + public static Pointer tgeo_values(Pointer temp, Pointer count) { + return MeosLibrary.meos.tgeo_values(temp, count); } @SuppressWarnings("unused") - public static double tfloat_min_value(Pointer temp) { - return MeosLibrary.meos.tfloat_min_value(temp); + public static Pointer tpoint_angular_difference(Pointer temp) { + return MeosLibrary.meos.tpoint_angular_difference(temp); } @SuppressWarnings("unused") - public static double tfloat_start_value(Pointer temp) { - return MeosLibrary.meos.tfloat_start_value(temp); + public static Pointer tpoint_azimuth(Pointer temp) { + return MeosLibrary.meos.tpoint_azimuth(temp); } @SuppressWarnings("unused") - public static boolean tfloat_value_at_timestamptz(Pointer temp, OffsetDateTime t, boolean strict, Pointer value) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.tfloat_value_at_timestamptz(temp, t_new, strict, value); + public static Pointer tpoint_cumulative_length(Pointer temp) { + return MeosLibrary.meos.tpoint_cumulative_length(temp); } @SuppressWarnings("unused") - public static Pointer tfloat_value_n(Pointer temp, int n) { + public static Pointer tpoint_direction(Pointer temp) { boolean out; Runtime runtime = Runtime.getSystemRuntime(); Pointer result = Memory.allocateDirect(runtime, Long.BYTES); - out = MeosLibrary.meos.tfloat_value_n(temp, n, result); - return out ? result : null ; + out = MeosLibrary.meos.tpoint_direction(temp, result); + Pointer new_result = result.getPointer(0); + return out ? new_result : null ; } @SuppressWarnings("unused") - public static Pointer tfloat_values(Pointer temp, Pointer count) { - return MeosLibrary.meos.tfloat_values(temp, count); + public static Pointer tpoint_get_x(Pointer temp) { + return MeosLibrary.meos.tpoint_get_x(temp); } @SuppressWarnings("unused") - public static int tint_end_value(Pointer temp) { - return MeosLibrary.meos.tint_end_value(temp); + public static Pointer tpoint_get_y(Pointer temp) { + return MeosLibrary.meos.tpoint_get_y(temp); } @SuppressWarnings("unused") - public static int tint_max_value(Pointer temp) { - return MeosLibrary.meos.tint_max_value(temp); + public static Pointer tpoint_get_z(Pointer temp) { + return MeosLibrary.meos.tpoint_get_z(temp); } @SuppressWarnings("unused") - public static int tint_min_value(Pointer temp) { - return MeosLibrary.meos.tint_min_value(temp); + public static boolean tpoint_is_simple(Pointer temp) { + return MeosLibrary.meos.tpoint_is_simple(temp); } @SuppressWarnings("unused") - public static int tint_start_value(Pointer temp) { - return MeosLibrary.meos.tint_start_value(temp); + public static double tpoint_length(Pointer temp) { + return MeosLibrary.meos.tpoint_length(temp); } @SuppressWarnings("unused") - public static boolean tint_value_at_timestamptz(Pointer temp, OffsetDateTime t, boolean strict, Pointer value) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.tint_value_at_timestamptz(temp, t_new, strict, value); + public static Pointer tpoint_speed(Pointer temp) { + return MeosLibrary.meos.tpoint_speed(temp); } @SuppressWarnings("unused") - public static Pointer tint_value_n(Pointer temp, int n) { - boolean out; - Runtime runtime = Runtime.getSystemRuntime(); - Pointer result = Memory.allocateDirect(runtime, Long.BYTES); - out = MeosLibrary.meos.tint_value_n(temp, n, result); - return out ? result : null ; + public static Pointer tpoint_trajectory(Pointer temp, boolean unary_union) { + return MeosLibrary.meos.tpoint_trajectory(temp, unary_union); } @SuppressWarnings("unused") - public static Pointer tint_values(Pointer temp, Pointer count) { - return MeosLibrary.meos.tint_values(temp, count); + public static Pointer tpoint_twcentroid(Pointer temp) { + return MeosLibrary.meos.tpoint_twcentroid(temp); } @SuppressWarnings("unused") - public static double tnumber_integral(Pointer temp) { - return MeosLibrary.meos.tnumber_integral(temp); + public static Pointer tgeo_affine(Pointer temp, Pointer a) { + return MeosLibrary.meos.tgeo_affine(temp, a); } @SuppressWarnings("unused") - public static double tnumber_twavg(Pointer temp) { - return MeosLibrary.meos.tnumber_twavg(temp); + public static Pointer tgeo_scale(Pointer temp, Pointer scale, Pointer sorigin) { + return MeosLibrary.meos.tgeo_scale(temp, scale, sorigin); } @SuppressWarnings("unused") - public static Pointer tnumber_valuespans(Pointer temp) { - return MeosLibrary.meos.tnumber_valuespans(temp); + public static Pointer tpoint_make_simple(Pointer temp, Pointer count) { + return MeosLibrary.meos.tpoint_make_simple(temp, count); } @SuppressWarnings("unused") - public static Pointer tgeo_end_value(Pointer temp) { - return MeosLibrary.meos.tgeo_end_value(temp); + public static int tspatial_srid(Pointer temp) { + return MeosLibrary.meos.tspatial_srid(temp); } @SuppressWarnings("unused") - public static Pointer tgeo_start_value(Pointer temp) { - return MeosLibrary.meos.tgeo_start_value(temp); + public static Pointer tspatial_set_srid(Pointer temp, int srid) { + return MeosLibrary.meos.tspatial_set_srid(temp, srid); } @SuppressWarnings("unused") - public static boolean tpoint_value_at_timestamptz(Pointer temp, OffsetDateTime t, boolean strict, Pointer value) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.tpoint_value_at_timestamptz(temp, t_new, strict, value); + public static Pointer tspatial_transform(Pointer temp, int srid) { + return MeosLibrary.meos.tspatial_transform(temp, srid); } @SuppressWarnings("unused") - public static Pointer tgeo_value_n(Pointer temp, int n) { - Runtime runtime = Runtime.getSystemRuntime(); - Pointer result = Memory.allocateDirect(runtime, Long.BYTES); - boolean out = MeosLibrary.meos.tgeo_value_n(temp, n, result); - return out ? result.getPointer(0) : null; + public static Pointer tspatial_transform_pipeline(Pointer temp, String pipelinestr, int srid, boolean is_forward) { + return MeosLibrary.meos.tspatial_transform_pipeline(temp, pipelinestr, srid, is_forward); } - + @SuppressWarnings("unused") - public static Pointer tpoint_value_n(Pointer temp, int n) { - boolean out; - Runtime runtime = Runtime.getSystemRuntime(); - Pointer result = Memory.allocateDirect(runtime, Long.BYTES); - out = MeosLibrary.meos.tpoint_value_n(temp, n, result); - Pointer new_result = result.getPointer(0); - return out ? new_result : null ; + public static Pointer tgeo_at_geom(Pointer temp, Pointer gs) { + return MeosLibrary.meos.tgeo_at_geom(temp, gs); } @SuppressWarnings("unused") - public static Pointer tpoint_values(Pointer temp, Pointer count) { - return MeosLibrary.meos.tpoint_values(temp, count); + public static Pointer tgeo_at_stbox(Pointer temp, Pointer box, boolean border_inc) { + return MeosLibrary.meos.tgeo_at_stbox(temp, box, border_inc); } @SuppressWarnings("unused") - public static Pointer ttext_end_value(Pointer temp) { - return MeosLibrary.meos.ttext_end_value(temp); + public static Pointer tgeo_at_value(Pointer temp, Pointer gs) { + return MeosLibrary.meos.tgeo_at_value(temp, gs); } @SuppressWarnings("unused") - public static Pointer ttext_max_value(Pointer temp) { - return MeosLibrary.meos.ttext_max_value(temp); + public static Pointer tgeo_minus_geom(Pointer temp, Pointer gs) { + return MeosLibrary.meos.tgeo_minus_geom(temp, gs); } @SuppressWarnings("unused") - public static Pointer ttext_min_value(Pointer temp) { - return MeosLibrary.meos.ttext_min_value(temp); + public static Pointer tgeo_minus_stbox(Pointer temp, Pointer box, boolean border_inc) { + return MeosLibrary.meos.tgeo_minus_stbox(temp, box, border_inc); } @SuppressWarnings("unused") - public static Pointer ttext_start_value(Pointer temp) { - return MeosLibrary.meos.ttext_start_value(temp); + public static Pointer tgeo_minus_value(Pointer temp, Pointer gs) { + return MeosLibrary.meos.tgeo_minus_value(temp, gs); } @SuppressWarnings("unused") - public static boolean ttext_value_at_timestamptz(Pointer temp, OffsetDateTime t, boolean strict, Pointer value) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.ttext_value_at_timestamptz(temp, t_new, strict, value); + public static Pointer tpoint_at_elevation(Pointer temp, Pointer s) { + return MeosLibrary.meos.tpoint_at_elevation(temp, s); } @SuppressWarnings("unused") - public static Pointer ttext_value_n(Pointer temp, int n) { - boolean out; - Runtime runtime = Runtime.getSystemRuntime(); - Pointer result = Memory.allocateDirect(runtime, Long.BYTES); - out = MeosLibrary.meos.ttext_value_n(temp, n, result); - Pointer new_result = result.getPointer(0); - return out ? new_result : null ; + public static Pointer tpoint_at_geom(Pointer temp, Pointer gs) { + return MeosLibrary.meos.tpoint_at_geom(temp, gs); } @SuppressWarnings("unused") - public static Pointer ttext_values(Pointer temp, Pointer count) { - return MeosLibrary.meos.ttext_values(temp, count); + public static Pointer tpoint_at_value(Pointer temp, Pointer gs) { + return MeosLibrary.meos.tpoint_at_value(temp, gs); } @SuppressWarnings("unused") - public static double float_degrees(double value, boolean normalize) { - return MeosLibrary.meos.float_degrees(value, normalize); + public static Pointer tpoint_minus_elevation(Pointer temp, Pointer s) { + return MeosLibrary.meos.tpoint_minus_elevation(temp, s); } @SuppressWarnings("unused") - public static Pointer temporal_scale_time(Pointer temp, Pointer duration) { - return MeosLibrary.meos.temporal_scale_time(temp, duration); + public static Pointer tpoint_minus_geom(Pointer temp, Pointer gs) { + return MeosLibrary.meos.tpoint_minus_geom(temp, gs); } @SuppressWarnings("unused") - public static Pointer temporal_set_interp(Pointer temp, int interp) { - return MeosLibrary.meos.temporal_set_interp(temp, interp); + public static Pointer tpoint_minus_value(Pointer temp, Pointer gs) { + return MeosLibrary.meos.tpoint_minus_value(temp, gs); } @SuppressWarnings("unused") - public static Pointer temporal_shift_scale_time(Pointer temp, Pointer shift, Pointer duration) { - return MeosLibrary.meos.temporal_shift_scale_time(temp, shift, duration); + public static int always_eq_geo_tgeo(Pointer gs, Pointer temp) { + return MeosLibrary.meos.always_eq_geo_tgeo(gs, temp); } @SuppressWarnings("unused") - public static Pointer temporal_shift_time(Pointer temp, Pointer shift) { - return MeosLibrary.meos.temporal_shift_time(temp, shift); + public static int always_eq_tgeo_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.always_eq_tgeo_geo(temp, gs); } @SuppressWarnings("unused") - public static Pointer temporal_to_tinstant(Pointer temp) { - return MeosLibrary.meos.temporal_to_tinstant(temp); + public static int always_eq_tgeo_tgeo(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.always_eq_tgeo_tgeo(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer temporal_to_tsequence(Pointer temp, String interp_str) { - return MeosLibrary.meos.temporal_to_tsequence(temp, interp_str); + public static int always_ne_geo_tgeo(Pointer gs, Pointer temp) { + return MeosLibrary.meos.always_ne_geo_tgeo(gs, temp); } @SuppressWarnings("unused") - public static Pointer temporal_to_tsequenceset(Pointer temp, String interp_str) { - return MeosLibrary.meos.temporal_to_tsequenceset(temp, interp_str); + public static int always_ne_tgeo_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.always_ne_tgeo_geo(temp, gs); } @SuppressWarnings("unused") - public static Pointer tfloat_floor(Pointer temp) { - return MeosLibrary.meos.tfloat_floor(temp); + public static int always_ne_tgeo_tgeo(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.always_ne_tgeo_tgeo(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer tfloat_ceil(Pointer temp) { - return MeosLibrary.meos.tfloat_ceil(temp); + public static int ever_eq_geo_tgeo(Pointer gs, Pointer temp) { + return MeosLibrary.meos.ever_eq_geo_tgeo(gs, temp); } @SuppressWarnings("unused") - public static Pointer tfloat_degrees(Pointer temp, boolean normalize) { - return MeosLibrary.meos.tfloat_degrees(temp, normalize); + public static int ever_eq_tgeo_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.ever_eq_tgeo_geo(temp, gs); } @SuppressWarnings("unused") - public static Pointer tfloat_radians(Pointer temp) { - return MeosLibrary.meos.tfloat_radians(temp); + public static int ever_eq_tgeo_tgeo(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.ever_eq_tgeo_tgeo(temp1, temp2); } - + @SuppressWarnings("unused") - public static Pointer tfloat_exp(Pointer temp) { - return MeosLibrary.meos.tfloat_exp(temp); + public static int ever_ne_geo_tgeo(Pointer gs, Pointer temp) { + return MeosLibrary.meos.ever_ne_geo_tgeo(gs, temp); } - + @SuppressWarnings("unused") - public static Pointer tfloat_ln(Pointer temp) { - return MeosLibrary.meos.tfloat_ln(temp); + public static int ever_ne_tgeo_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.ever_ne_tgeo_geo(temp, gs); } - + @SuppressWarnings("unused") - public static Pointer tfloat_log10(Pointer temp) { - return MeosLibrary.meos.tfloat_log10(temp); + public static int ever_ne_tgeo_tgeo(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.ever_ne_tgeo_tgeo(temp1, temp2); } - + @SuppressWarnings("unused") - public static Pointer tnumber_trend(Pointer temp) { - return MeosLibrary.meos.tnumber_trend(temp); + public static Pointer teq_geo_tgeo(Pointer gs, Pointer temp) { + return MeosLibrary.meos.teq_geo_tgeo(gs, temp); } - + @SuppressWarnings("unused") - public static Pointer temporal_round(Pointer temp, int maxdd) { - return MeosLibrary.meos.temporal_round(temp, maxdd); + public static Pointer teq_tgeo_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.teq_tgeo_geo(temp, gs); } @SuppressWarnings("unused") - public static Pointer tfloat_scale_value(Pointer temp, double width) { - return MeosLibrary.meos.tfloat_scale_value(temp, width); + public static Pointer tne_geo_tgeo(Pointer gs, Pointer temp) { + return MeosLibrary.meos.tne_geo_tgeo(gs, temp); } @SuppressWarnings("unused") - public static Pointer tfloat_shift_scale_value(Pointer temp, double shift, double width) { - return MeosLibrary.meos.tfloat_shift_scale_value(temp, shift, width); + public static Pointer tne_tgeo_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.tne_tgeo_geo(temp, gs); } @SuppressWarnings("unused") - public static Pointer tfloat_shift_value(Pointer temp, double shift) { - return MeosLibrary.meos.tfloat_shift_value(temp, shift); + public static Pointer tgeo_stboxes(Pointer temp, Pointer count) { + return MeosLibrary.meos.tgeo_stboxes(temp, count); } @SuppressWarnings("unused") - public static Pointer tfloatarr_round(Pointer temp, int count, int maxdd) { - return MeosLibrary.meos.tfloatarr_round(temp, count, maxdd); + public static Pointer tgeo_space_boxes(Pointer temp, double xsize, double ysize, double zsize, Pointer sorigin, boolean bitmatrix, boolean border_inc, Pointer count) { + return MeosLibrary.meos.tgeo_space_boxes(temp, xsize, ysize, zsize, sorigin, bitmatrix, border_inc, count); } @SuppressWarnings("unused") - public static Pointer tint_scale_value(Pointer temp, int width) { - return MeosLibrary.meos.tint_scale_value(temp, width); + public static Pointer tgeo_space_time_boxes(Pointer temp, double xsize, double ysize, double zsize, Pointer duration, Pointer sorigin, OffsetDateTime torigin, boolean bitmatrix, boolean border_inc, Pointer count) { + var torigin_new = torigin.toEpochSecond(); + return MeosLibrary.meos.tgeo_space_time_boxes(temp, xsize, ysize, zsize, duration, sorigin, torigin_new, bitmatrix, border_inc, count); } @SuppressWarnings("unused") - public static Pointer tint_shift_scale_value(Pointer temp, int shift, int width) { - return MeosLibrary.meos.tint_shift_scale_value(temp, shift, width); + public static Pointer tgeo_split_each_n_stboxes(Pointer temp, int elem_count, Pointer count) { + return MeosLibrary.meos.tgeo_split_each_n_stboxes(temp, elem_count, count); } @SuppressWarnings("unused") - public static Pointer tint_shift_value(Pointer temp, int shift) { - return MeosLibrary.meos.tint_shift_value(temp, shift); + public static Pointer tgeo_split_n_stboxes(Pointer temp, int box_count, Pointer count) { + return MeosLibrary.meos.tgeo_split_n_stboxes(temp, box_count, count); } @SuppressWarnings("unused") - public static Pointer tpoint_round(Pointer temp, int maxdd) { - return MeosLibrary.meos.tpoint_round(temp, maxdd); + public static boolean adjacent_stbox_tspatial(Pointer box, Pointer temp) { + return MeosLibrary.meos.adjacent_stbox_tspatial(box, temp); } @SuppressWarnings("unused") - public static Pointer tpoint_transform(Pointer temp, int srid) { - return MeosLibrary.meos.tpoint_transform(temp, srid); + public static boolean adjacent_tspatial_stbox(Pointer temp, Pointer box) { + return MeosLibrary.meos.adjacent_tspatial_stbox(temp, box); } @SuppressWarnings("unused") - public static Pointer tpoint_transform_pipeline(Pointer temp, String pipelinestr, int srid, boolean is_forward) { - return MeosLibrary.meos.tpoint_transform_pipeline(temp, pipelinestr, srid, is_forward); + public static boolean adjacent_tspatial_tspatial(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.adjacent_tspatial_tspatial(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer tpoint_transform_pj(Pointer temp, int srid, Pointer pj) { - return MeosLibrary.meos.tpoint_transform_pj(temp, srid, pj); + public static boolean contained_stbox_tspatial(Pointer box, Pointer temp) { + return MeosLibrary.meos.contained_stbox_tspatial(box, temp); } - + @SuppressWarnings("unused") - public static Pointer tspatial_set_srid(Pointer temp, int srid) { - return MeosLibrary.meos.tspatial_set_srid(temp, srid); + public static boolean contained_tspatial_stbox(Pointer temp, Pointer box) { + return MeosLibrary.meos.contained_tspatial_stbox(temp, box); } - + @SuppressWarnings("unused") - public static Pointer tspatial_transform(Pointer temp, int srid) { - return MeosLibrary.meos.tspatial_transform(temp, srid); + public static boolean contained_tspatial_tspatial(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.contained_tspatial_tspatial(temp1, temp2); } - + @SuppressWarnings("unused") - public static Pointer lwproj_transform(int srid_from, int srid_to) { - return MeosLibrary.meos.lwproj_transform(srid_from, srid_to); + public static boolean contains_stbox_tspatial(Pointer box, Pointer temp) { + return MeosLibrary.meos.contains_stbox_tspatial(box, temp); } @SuppressWarnings("unused") - public static Pointer tpointarr_round(Pointer temp, int count, int maxdd) { - return MeosLibrary.meos.tpointarr_round(temp, count, maxdd); + public static boolean contains_tspatial_stbox(Pointer temp, Pointer box) { + return MeosLibrary.meos.contains_tspatial_stbox(temp, box); } @SuppressWarnings("unused") - public static Pointer temporal_append_tinstant(Pointer temp, Pointer inst, double maxdist, Pointer maxt, boolean expand) { - return MeosLibrary.meos.temporal_append_tinstant(temp, inst, maxdist, maxt, expand); + public static boolean contains_tspatial_tspatial(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.contains_tspatial_tspatial(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer temporal_append_tsequence(Pointer temp, Pointer seq, boolean expand) { - return MeosLibrary.meos.temporal_append_tsequence(temp, seq, expand); + public static boolean overlaps_stbox_tspatial(Pointer box, Pointer temp) { + return MeosLibrary.meos.overlaps_stbox_tspatial(box, temp); } @SuppressWarnings("unused") - public static Pointer temporal_delete_tstzspan(Pointer temp, Pointer s, boolean connect) { - return MeosLibrary.meos.temporal_delete_tstzspan(temp, s, connect); + public static boolean overlaps_tspatial_stbox(Pointer temp, Pointer box) { + return MeosLibrary.meos.overlaps_tspatial_stbox(temp, box); } @SuppressWarnings("unused") - public static Pointer temporal_delete_tstzspanset(Pointer temp, Pointer ss, boolean connect) { - return MeosLibrary.meos.temporal_delete_tstzspanset(temp, ss, connect); + public static boolean overlaps_tspatial_tspatial(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.overlaps_tspatial_tspatial(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer temporal_delete_timestamptz(Pointer temp, OffsetDateTime t, boolean connect) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.temporal_delete_timestamptz(temp, t_new, connect); + public static boolean same_stbox_tspatial(Pointer box, Pointer temp) { + return MeosLibrary.meos.same_stbox_tspatial(box, temp); } @SuppressWarnings("unused") - public static Pointer temporal_delete_tstzset(Pointer temp, Pointer s, boolean connect) { - return MeosLibrary.meos.temporal_delete_tstzset(temp, s, connect); + public static boolean same_tspatial_stbox(Pointer temp, Pointer box) { + return MeosLibrary.meos.same_tspatial_stbox(temp, box); } @SuppressWarnings("unused") - public static Pointer temporal_insert(Pointer temp1, Pointer temp2, boolean connect) { - return MeosLibrary.meos.temporal_insert(temp1, temp2, connect); + public static boolean same_tspatial_tspatial(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.same_tspatial_tspatial(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer temporal_merge(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.temporal_merge(temp1, temp2); + public static boolean above_stbox_tspatial(Pointer box, Pointer temp) { + return MeosLibrary.meos.above_stbox_tspatial(box, temp); } @SuppressWarnings("unused") - public static Pointer temporal_merge_array(Pointer temparr, int count) { - return MeosLibrary.meos.temporal_merge_array(temparr, count); + public static boolean above_tspatial_stbox(Pointer temp, Pointer box) { + return MeosLibrary.meos.above_tspatial_stbox(temp, box); } @SuppressWarnings("unused") - public static Pointer temporal_update(Pointer temp1, Pointer temp2, boolean connect) { - return MeosLibrary.meos.temporal_update(temp1, temp2, connect); + public static boolean above_tspatial_tspatial(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.above_tspatial_tspatial(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer tbool_at_value(Pointer temp, boolean b) { - return MeosLibrary.meos.tbool_at_value(temp, b); + public static boolean after_stbox_tspatial(Pointer box, Pointer temp) { + return MeosLibrary.meos.after_stbox_tspatial(box, temp); } @SuppressWarnings("unused") - public static Pointer tbool_minus_value(Pointer temp, boolean b) { - return MeosLibrary.meos.tbool_minus_value(temp, b); + public static boolean after_tspatial_stbox(Pointer temp, Pointer box) { + return MeosLibrary.meos.after_tspatial_stbox(temp, box); } @SuppressWarnings("unused") - public static Pointer temporal_at_max(Pointer temp) { - return MeosLibrary.meos.temporal_at_max(temp); + public static boolean after_tspatial_tspatial(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.after_tspatial_tspatial(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer temporal_at_min(Pointer temp) { - return MeosLibrary.meos.temporal_at_min(temp); + public static boolean back_stbox_tspatial(Pointer box, Pointer temp) { + return MeosLibrary.meos.back_stbox_tspatial(box, temp); } @SuppressWarnings("unused") - public static Pointer temporal_at_tstzspan(Pointer temp, Pointer s) { - return MeosLibrary.meos.temporal_at_tstzspan(temp, s); + public static boolean back_tspatial_stbox(Pointer temp, Pointer box) { + return MeosLibrary.meos.back_tspatial_stbox(temp, box); } @SuppressWarnings("unused") - public static Pointer temporal_at_tstzspanset(Pointer temp, Pointer ss) { - return MeosLibrary.meos.temporal_at_tstzspanset(temp, ss); + public static boolean back_tspatial_tspatial(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.back_tspatial_tspatial(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer temporal_at_timestamptz(Pointer temp, OffsetDateTime t) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.temporal_at_timestamptz(temp, t_new); + public static boolean before_stbox_tspatial(Pointer box, Pointer temp) { + return MeosLibrary.meos.before_stbox_tspatial(box, temp); } @SuppressWarnings("unused") - public static Pointer temporal_at_tstzset(Pointer temp, Pointer s) { - return MeosLibrary.meos.temporal_at_tstzset(temp, s); + public static boolean before_tspatial_stbox(Pointer temp, Pointer box) { + return MeosLibrary.meos.before_tspatial_stbox(temp, box); } @SuppressWarnings("unused") - public static Pointer temporal_at_values(Pointer temp, Pointer set) { - return MeosLibrary.meos.temporal_at_values(temp, set); + public static boolean before_tspatial_tspatial(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.before_tspatial_tspatial(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer temporal_minus_max(Pointer temp) { - return MeosLibrary.meos.temporal_minus_max(temp); + public static boolean below_stbox_tspatial(Pointer box, Pointer temp) { + return MeosLibrary.meos.below_stbox_tspatial(box, temp); } @SuppressWarnings("unused") - public static Pointer temporal_minus_min(Pointer temp) { - return MeosLibrary.meos.temporal_minus_min(temp); + public static boolean below_tspatial_stbox(Pointer temp, Pointer box) { + return MeosLibrary.meos.below_tspatial_stbox(temp, box); } @SuppressWarnings("unused") - public static Pointer temporal_minus_tstzspan(Pointer temp, Pointer s) { - return MeosLibrary.meos.temporal_minus_tstzspan(temp, s); + public static boolean below_tspatial_tspatial(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.below_tspatial_tspatial(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer temporal_minus_tstzspanset(Pointer temp, Pointer ss) { - return MeosLibrary.meos.temporal_minus_tstzspanset(temp, ss); + public static boolean front_stbox_tspatial(Pointer box, Pointer temp) { + return MeosLibrary.meos.front_stbox_tspatial(box, temp); } @SuppressWarnings("unused") - public static Pointer temporal_minus_timestamptz(Pointer temp, OffsetDateTime t) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.temporal_minus_timestamptz(temp, t_new); + public static boolean front_tspatial_stbox(Pointer temp, Pointer box) { + return MeosLibrary.meos.front_tspatial_stbox(temp, box); } @SuppressWarnings("unused") - public static Pointer temporal_minus_tstzset(Pointer temp, Pointer s) { - return MeosLibrary.meos.temporal_minus_tstzset(temp, s); + public static boolean front_tspatial_tspatial(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.front_tspatial_tspatial(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer temporal_minus_values(Pointer temp, Pointer set) { - return MeosLibrary.meos.temporal_minus_values(temp, set); + public static boolean left_stbox_tspatial(Pointer box, Pointer temp) { + return MeosLibrary.meos.left_stbox_tspatial(box, temp); } @SuppressWarnings("unused") - public static Pointer tfloat_at_value(Pointer temp, double d) { - return MeosLibrary.meos.tfloat_at_value(temp, d); + public static boolean left_tspatial_stbox(Pointer temp, Pointer box) { + return MeosLibrary.meos.left_tspatial_stbox(temp, box); } @SuppressWarnings("unused") - public static Pointer tfloat_minus_value(Pointer temp, double d) { - return MeosLibrary.meos.tfloat_minus_value(temp, d); + public static boolean left_tspatial_tspatial(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.left_tspatial_tspatial(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer tint_at_value(Pointer temp, int i) { - return MeosLibrary.meos.tint_at_value(temp, i); + public static boolean overabove_stbox_tspatial(Pointer box, Pointer temp) { + return MeosLibrary.meos.overabove_stbox_tspatial(box, temp); } @SuppressWarnings("unused") - public static Pointer tint_minus_value(Pointer temp, int i) { - return MeosLibrary.meos.tint_minus_value(temp, i); + public static boolean overabove_tspatial_stbox(Pointer temp, Pointer box) { + return MeosLibrary.meos.overabove_tspatial_stbox(temp, box); } @SuppressWarnings("unused") - public static Pointer tnumber_at_span(Pointer temp, Pointer span) { - return MeosLibrary.meos.tnumber_at_span(temp, span); + public static boolean overabove_tspatial_tspatial(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.overabove_tspatial_tspatial(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer tnumber_at_spanset(Pointer temp, Pointer ss) { - return MeosLibrary.meos.tnumber_at_spanset(temp, ss); + public static boolean overafter_stbox_tspatial(Pointer box, Pointer temp) { + return MeosLibrary.meos.overafter_stbox_tspatial(box, temp); } @SuppressWarnings("unused") - public static Pointer tnumber_at_tbox(Pointer temp, Pointer box) { - return MeosLibrary.meos.tnumber_at_tbox(temp, box); + public static boolean overafter_tspatial_stbox(Pointer temp, Pointer box) { + return MeosLibrary.meos.overafter_tspatial_stbox(temp, box); } @SuppressWarnings("unused") - public static Pointer tnumber_minus_span(Pointer temp, Pointer span) { - return MeosLibrary.meos.tnumber_minus_span(temp, span); + public static boolean overafter_tspatial_tspatial(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.overafter_tspatial_tspatial(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer tnumber_minus_spanset(Pointer temp, Pointer ss) { - return MeosLibrary.meos.tnumber_minus_spanset(temp, ss); + public static boolean overback_stbox_tspatial(Pointer box, Pointer temp) { + return MeosLibrary.meos.overback_stbox_tspatial(box, temp); } @SuppressWarnings("unused") - public static Pointer tnumber_minus_tbox(Pointer temp, Pointer box) { - return MeosLibrary.meos.tnumber_minus_tbox(temp, box); + public static boolean overback_tspatial_stbox(Pointer temp, Pointer box) { + return MeosLibrary.meos.overback_tspatial_stbox(temp, box); } @SuppressWarnings("unused") - public static Pointer tpoint_at_elevation(Pointer temp, Pointer s) { - return MeosLibrary.meos.tpoint_at_elevation(temp, s); + public static boolean overback_tspatial_tspatial(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.overback_tspatial_tspatial(temp1, temp2); } - + @SuppressWarnings("unused") - public static Pointer tpoint_minus_elevation(Pointer temp, Pointer s) { - return MeosLibrary.meos.tpoint_minus_elevation(temp, s); + public static boolean overbefore_stbox_tspatial(Pointer box, Pointer temp) { + return MeosLibrary.meos.overbefore_stbox_tspatial(box, temp); } - + @SuppressWarnings("unused") - public static Pointer tpoint_at_geom_time(Pointer temp, Pointer gs, Pointer zspan, Pointer period) { - return MeosLibrary.meos.tpoint_at_geom_time(temp, gs, zspan, period); + public static boolean overbefore_tspatial_stbox(Pointer temp, Pointer box) { + return MeosLibrary.meos.overbefore_tspatial_stbox(temp, box); } @SuppressWarnings("unused") - public static Pointer tgeo_at_stbox(Pointer temp, Pointer box, boolean border_inc) { - return MeosLibrary.meos.tgeo_at_stbox(temp, box, border_inc); + public static boolean overbefore_tspatial_tspatial(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.overbefore_tspatial_tspatial(temp1, temp2); } - + @SuppressWarnings("unused") - public static Pointer tgeo_at_geom(Pointer temp, Pointer gs) { - return MeosLibrary.meos.tgeo_at_geom(temp, gs); + public static boolean overbelow_stbox_tspatial(Pointer box, Pointer temp) { + return MeosLibrary.meos.overbelow_stbox_tspatial(box, temp); } - + @SuppressWarnings("unused") - public static Pointer tgeo_minus_geom(Pointer temp, Pointer gs) { - return MeosLibrary.meos.tgeo_minus_geom(temp, gs); + public static boolean overbelow_tspatial_stbox(Pointer temp, Pointer box) { + return MeosLibrary.meos.overbelow_tspatial_stbox(temp, box); } - + @SuppressWarnings("unused") - public static Pointer tpoint_at_value(Pointer temp, Pointer gs) { - return MeosLibrary.meos.tpoint_at_value(temp, gs); + public static boolean overbelow_tspatial_tspatial(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.overbelow_tspatial_tspatial(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer tpoint_minus_geom_time(Pointer temp, Pointer gs, Pointer zspan, Pointer period) { - return MeosLibrary.meos.tpoint_minus_geom_time(temp, gs, zspan, period); + public static boolean overfront_stbox_tspatial(Pointer box, Pointer temp) { + return MeosLibrary.meos.overfront_stbox_tspatial(box, temp); } @SuppressWarnings("unused") - public static Pointer tgeo_minus_stbox(Pointer temp, Pointer box, boolean border_inc) { - return MeosLibrary.meos.tgeo_minus_stbox(temp, box, border_inc); + public static boolean overfront_tspatial_stbox(Pointer temp, Pointer box) { + return MeosLibrary.meos.overfront_tspatial_stbox(temp, box); } @SuppressWarnings("unused") - public static Pointer tpoint_minus_value(Pointer temp, Pointer gs) { - return MeosLibrary.meos.tpoint_minus_value(temp, gs); + public static boolean overfront_tspatial_tspatial(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.overfront_tspatial_tspatial(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer ttext_at_value(Pointer temp, Pointer txt) { - return MeosLibrary.meos.ttext_at_value(temp, txt); + public static boolean overleft_stbox_tspatial(Pointer box, Pointer temp) { + return MeosLibrary.meos.overleft_stbox_tspatial(box, temp); } @SuppressWarnings("unused") - public static Pointer ttext_minus_value(Pointer temp, Pointer txt) { - return MeosLibrary.meos.ttext_minus_value(temp, txt); + public static boolean overleft_tspatial_stbox(Pointer temp, Pointer box) { + return MeosLibrary.meos.overleft_tspatial_stbox(temp, box); } @SuppressWarnings("unused") - public static int temporal_cmp(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.temporal_cmp(temp1, temp2); + public static boolean overleft_tspatial_tspatial(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.overleft_tspatial_tspatial(temp1, temp2); } @SuppressWarnings("unused") - public static boolean temporal_eq(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.temporal_eq(temp1, temp2); + public static boolean overright_stbox_tspatial(Pointer box, Pointer temp) { + return MeosLibrary.meos.overright_stbox_tspatial(box, temp); } @SuppressWarnings("unused") - public static boolean temporal_ge(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.temporal_ge(temp1, temp2); + public static boolean overright_tspatial_stbox(Pointer temp, Pointer box) { + return MeosLibrary.meos.overright_tspatial_stbox(temp, box); } @SuppressWarnings("unused") - public static boolean temporal_gt(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.temporal_gt(temp1, temp2); + public static boolean overright_tspatial_tspatial(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.overright_tspatial_tspatial(temp1, temp2); } @SuppressWarnings("unused") - public static boolean temporal_le(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.temporal_le(temp1, temp2); + public static boolean right_stbox_tspatial(Pointer box, Pointer temp) { + return MeosLibrary.meos.right_stbox_tspatial(box, temp); } @SuppressWarnings("unused") - public static boolean temporal_lt(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.temporal_lt(temp1, temp2); + public static boolean right_tspatial_stbox(Pointer temp, Pointer box) { + return MeosLibrary.meos.right_tspatial_stbox(temp, box); } @SuppressWarnings("unused") - public static boolean temporal_ne(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.temporal_ne(temp1, temp2); + public static boolean right_tspatial_tspatial(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.right_tspatial_tspatial(temp1, temp2); } @SuppressWarnings("unused") - public static int always_eq_bool_tbool(boolean b, Pointer temp) { - return MeosLibrary.meos.always_eq_bool_tbool(b, temp); + public static int acontains_geo_tgeo(Pointer gs, Pointer temp) { + return MeosLibrary.meos.acontains_geo_tgeo(gs, temp); } @SuppressWarnings("unused") - public static int always_eq_float_tfloat(double d, Pointer temp) { - return MeosLibrary.meos.always_eq_float_tfloat(d, temp); + public static int acontains_tgeo_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.acontains_tgeo_geo(temp, gs); } @SuppressWarnings("unused") - public static int always_eq_int_tint(int i, Pointer temp) { - return MeosLibrary.meos.always_eq_int_tint(i, temp); + public static int acontains_tgeo_tgeo(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.acontains_tgeo_tgeo(temp1, temp2); } @SuppressWarnings("unused") - public static int always_eq_point_tpoint(Pointer gs, Pointer temp) { - return MeosLibrary.meos.always_eq_point_tpoint(gs, temp); + public static int adisjoint_tgeo_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.adisjoint_tgeo_geo(temp, gs); } @SuppressWarnings("unused") - public static int always_eq_tbool_bool(Pointer temp, boolean b) { - return MeosLibrary.meos.always_eq_tbool_bool(temp, b); + public static int adisjoint_tgeo_tgeo(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.adisjoint_tgeo_tgeo(temp1, temp2); } @SuppressWarnings("unused") - public static int always_eq_temporal_temporal(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.always_eq_temporal_temporal(temp1, temp2); + public static int adwithin_tgeo_geo(Pointer temp, Pointer gs, double dist) { + return MeosLibrary.meos.adwithin_tgeo_geo(temp, gs, dist); } @SuppressWarnings("unused") - public static int always_eq_text_ttext(Pointer txt, Pointer temp) { - return MeosLibrary.meos.always_eq_text_ttext(txt, temp); + public static int adwithin_tgeo_tgeo(Pointer temp1, Pointer temp2, double dist) { + return MeosLibrary.meos.adwithin_tgeo_tgeo(temp1, temp2, dist); } @SuppressWarnings("unused") - public static int always_eq_tfloat_float(Pointer temp, double d) { - return MeosLibrary.meos.always_eq_tfloat_float(temp, d); + public static int aintersects_tgeo_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.aintersects_tgeo_geo(temp, gs); } @SuppressWarnings("unused") - public static int always_eq_tint_int(Pointer temp, int i) { - return MeosLibrary.meos.always_eq_tint_int(temp, i); + public static int aintersects_tgeo_tgeo(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.aintersects_tgeo_tgeo(temp1, temp2); } @SuppressWarnings("unused") - public static int always_eq_tpoint_point(Pointer temp, Pointer gs) { - return MeosLibrary.meos.always_eq_tpoint_point(temp, gs); + public static int atouches_tgeo_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.atouches_tgeo_geo(temp, gs); } @SuppressWarnings("unused") - public static int always_eq_tpoint_tpoint(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.always_eq_tpoint_tpoint(temp1, temp2); + public static int atouches_tgeo_tgeo(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.atouches_tgeo_tgeo(temp1, temp2); } @SuppressWarnings("unused") - public static int always_eq_ttext_text(Pointer temp, Pointer txt) { - return MeosLibrary.meos.always_eq_ttext_text(temp, txt); + public static int atouches_tpoint_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.atouches_tpoint_geo(temp, gs); } @SuppressWarnings("unused") - public static int always_ne_bool_tbool(boolean b, Pointer temp) { - return MeosLibrary.meos.always_ne_bool_tbool(b, temp); + public static int econtains_geo_tgeo(Pointer gs, Pointer temp) { + return MeosLibrary.meos.econtains_geo_tgeo(gs, temp); } @SuppressWarnings("unused") - public static int always_ne_float_tfloat(double d, Pointer temp) { - return MeosLibrary.meos.always_ne_float_tfloat(d, temp); + public static int econtains_tgeo_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.econtains_tgeo_geo(temp, gs); } @SuppressWarnings("unused") - public static int always_ne_int_tint(int i, Pointer temp) { - return MeosLibrary.meos.always_ne_int_tint(i, temp); + public static int econtains_tgeo_tgeo(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.econtains_tgeo_tgeo(temp1, temp2); } @SuppressWarnings("unused") - public static int always_ne_point_tpoint(Pointer gs, Pointer temp) { - return MeosLibrary.meos.always_ne_point_tpoint(gs, temp); + public static int ecovers_geo_tgeo(Pointer gs, Pointer temp) { + return MeosLibrary.meos.ecovers_geo_tgeo(gs, temp); } @SuppressWarnings("unused") - public static int always_ne_tbool_bool(Pointer temp, boolean b) { - return MeosLibrary.meos.always_ne_tbool_bool(temp, b); + public static int ecovers_tgeo_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.ecovers_tgeo_geo(temp, gs); } @SuppressWarnings("unused") - public static int always_ne_temporal_temporal(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.always_ne_temporal_temporal(temp1, temp2); + public static int ecovers_tgeo_tgeo(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.ecovers_tgeo_tgeo(temp1, temp2); } @SuppressWarnings("unused") - public static int always_ne_text_ttext(Pointer txt, Pointer temp) { - return MeosLibrary.meos.always_ne_text_ttext(txt, temp); + public static int edisjoint_tgeo_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.edisjoint_tgeo_geo(temp, gs); } @SuppressWarnings("unused") - public static int always_ne_tfloat_float(Pointer temp, double d) { - return MeosLibrary.meos.always_ne_tfloat_float(temp, d); + public static int edisjoint_tgeo_tgeo(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.edisjoint_tgeo_tgeo(temp1, temp2); } @SuppressWarnings("unused") - public static int always_ne_tint_int(Pointer temp, int i) { - return MeosLibrary.meos.always_ne_tint_int(temp, i); + public static int edwithin_tgeo_geo(Pointer temp, Pointer gs, double dist) { + return MeosLibrary.meos.edwithin_tgeo_geo(temp, gs, dist); } @SuppressWarnings("unused") - public static int always_ne_tpoint_point(Pointer temp, Pointer gs) { - return MeosLibrary.meos.always_ne_tpoint_point(temp, gs); + public static int edwithin_tgeo_tgeo(Pointer temp1, Pointer temp2, double dist) { + return MeosLibrary.meos.edwithin_tgeo_tgeo(temp1, temp2, dist); } @SuppressWarnings("unused") - public static int always_ne_tpoint_tpoint(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.always_ne_tpoint_tpoint(temp1, temp2); + public static int eintersects_tgeo_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.eintersects_tgeo_geo(temp, gs); } @SuppressWarnings("unused") - public static int always_ne_ttext_text(Pointer temp, Pointer txt) { - return MeosLibrary.meos.always_ne_ttext_text(temp, txt); + public static int eintersects_tgeo_tgeo(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.eintersects_tgeo_tgeo(temp1, temp2); + } + + @SuppressWarnings("unused") + public static int etouches_tgeo_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.etouches_tgeo_geo(temp, gs); } @SuppressWarnings("unused") - public static int always_ge_float_tfloat(double d, Pointer temp) { - return MeosLibrary.meos.always_ge_float_tfloat(d, temp); + public static int etouches_tgeo_tgeo(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.etouches_tgeo_tgeo(temp1, temp2); } @SuppressWarnings("unused") - public static int always_ge_int_tint(int i, Pointer temp) { - return MeosLibrary.meos.always_ge_int_tint(i, temp); + public static int etouches_tpoint_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.etouches_tpoint_geo(temp, gs); } @SuppressWarnings("unused") - public static int always_ge_temporal_temporal(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.always_ge_temporal_temporal(temp1, temp2); + public static Pointer tcontains_geo_tgeo(Pointer gs, Pointer temp) { + return MeosLibrary.meos.tcontains_geo_tgeo(gs, temp); } @SuppressWarnings("unused") - public static int always_ge_text_ttext(Pointer txt, Pointer temp) { - return MeosLibrary.meos.always_ge_text_ttext(txt, temp); + public static Pointer tcontains_tgeo_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.tcontains_tgeo_geo(temp, gs); } @SuppressWarnings("unused") - public static int always_ge_tfloat_float(Pointer temp, double d) { - return MeosLibrary.meos.always_ge_tfloat_float(temp, d); + public static Pointer tcontains_tgeo_tgeo(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.tcontains_tgeo_tgeo(temp1, temp2); } @SuppressWarnings("unused") - public static int always_ge_tint_int(Pointer temp, int i) { - return MeosLibrary.meos.always_ge_tint_int(temp, i); + public static Pointer tcovers_geo_tgeo(Pointer gs, Pointer temp) { + return MeosLibrary.meos.tcovers_geo_tgeo(gs, temp); } @SuppressWarnings("unused") - public static int always_ge_ttext_text(Pointer temp, Pointer txt) { - return MeosLibrary.meos.always_ge_ttext_text(temp, txt); + public static Pointer tcovers_tgeo_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.tcovers_tgeo_geo(temp, gs); } @SuppressWarnings("unused") - public static int always_gt_float_tfloat(double d, Pointer temp) { - return MeosLibrary.meos.always_gt_float_tfloat(d, temp); + public static Pointer tcovers_tgeo_tgeo(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.tcovers_tgeo_tgeo(temp1, temp2); } @SuppressWarnings("unused") - public static int always_gt_int_tint(int i, Pointer temp) { - return MeosLibrary.meos.always_gt_int_tint(i, temp); + public static Pointer tdisjoint_geo_tgeo(Pointer gs, Pointer temp) { + return MeosLibrary.meos.tdisjoint_geo_tgeo(gs, temp); } @SuppressWarnings("unused") - public static int always_gt_temporal_temporal(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.always_gt_temporal_temporal(temp1, temp2); + public static Pointer tdisjoint_tgeo_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.tdisjoint_tgeo_geo(temp, gs); } @SuppressWarnings("unused") - public static int always_gt_text_ttext(Pointer txt, Pointer temp) { - return MeosLibrary.meos.always_gt_text_ttext(txt, temp); + public static Pointer tdisjoint_tgeo_tgeo(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.tdisjoint_tgeo_tgeo(temp1, temp2); } @SuppressWarnings("unused") - public static int always_gt_tfloat_float(Pointer temp, double d) { - return MeosLibrary.meos.always_gt_tfloat_float(temp, d); + public static Pointer tdwithin_geo_tgeo(Pointer gs, Pointer temp, double dist) { + return MeosLibrary.meos.tdwithin_geo_tgeo(gs, temp, dist); } @SuppressWarnings("unused") - public static int always_gt_tint_int(Pointer temp, int i) { - return MeosLibrary.meos.always_gt_tint_int(temp, i); + public static Pointer tdwithin_tgeo_geo(Pointer temp, Pointer gs, double dist) { + return MeosLibrary.meos.tdwithin_tgeo_geo(temp, gs, dist); } @SuppressWarnings("unused") - public static int always_gt_ttext_text(Pointer temp, Pointer txt) { - return MeosLibrary.meos.always_gt_ttext_text(temp, txt); + public static Pointer tdwithin_tgeo_tgeo(Pointer temp1, Pointer temp2, double dist) { + return MeosLibrary.meos.tdwithin_tgeo_tgeo(temp1, temp2, dist); } @SuppressWarnings("unused") - public static int always_le_float_tfloat(double d, Pointer temp) { - return MeosLibrary.meos.always_le_float_tfloat(d, temp); + public static Pointer tintersects_geo_tgeo(Pointer gs, Pointer temp) { + return MeosLibrary.meos.tintersects_geo_tgeo(gs, temp); } @SuppressWarnings("unused") - public static int always_le_int_tint(int i, Pointer temp) { - return MeosLibrary.meos.always_le_int_tint(i, temp); + public static Pointer tintersects_tgeo_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.tintersects_tgeo_geo(temp, gs); } @SuppressWarnings("unused") - public static int always_le_temporal_temporal(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.always_le_temporal_temporal(temp1, temp2); + public static Pointer tintersects_tgeo_tgeo(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.tintersects_tgeo_tgeo(temp1, temp2); } @SuppressWarnings("unused") - public static int always_le_text_ttext(Pointer txt, Pointer temp) { - return MeosLibrary.meos.always_le_text_ttext(txt, temp); + public static Pointer ttouches_geo_tgeo(Pointer gs, Pointer temp) { + return MeosLibrary.meos.ttouches_geo_tgeo(gs, temp); } @SuppressWarnings("unused") - public static int always_le_tfloat_float(Pointer temp, double d) { - return MeosLibrary.meos.always_le_tfloat_float(temp, d); + public static Pointer ttouches_tgeo_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.ttouches_tgeo_geo(temp, gs); } @SuppressWarnings("unused") - public static int always_le_tint_int(Pointer temp, int i) { - return MeosLibrary.meos.always_le_tint_int(temp, i); + public static Pointer ttouches_tgeo_tgeo(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.ttouches_tgeo_tgeo(temp1, temp2); } @SuppressWarnings("unused") - public static int always_le_ttext_text(Pointer temp, Pointer txt) { - return MeosLibrary.meos.always_le_ttext_text(temp, txt); + public static Pointer tdistance_tgeo_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.tdistance_tgeo_geo(temp, gs); } @SuppressWarnings("unused") - public static int always_lt_float_tfloat(double d, Pointer temp) { - return MeosLibrary.meos.always_lt_float_tfloat(d, temp); + public static Pointer tdistance_tgeo_tgeo(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.tdistance_tgeo_tgeo(temp1, temp2); } @SuppressWarnings("unused") - public static int always_lt_int_tint(int i, Pointer temp) { - return MeosLibrary.meos.always_lt_int_tint(i, temp); + public static double nad_stbox_geo(Pointer box, Pointer gs) { + return MeosLibrary.meos.nad_stbox_geo(box, gs); } @SuppressWarnings("unused") - public static int always_lt_temporal_temporal(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.always_lt_temporal_temporal(temp1, temp2); + public static double nad_stbox_stbox(Pointer box1, Pointer box2) { + return MeosLibrary.meos.nad_stbox_stbox(box1, box2); } @SuppressWarnings("unused") - public static int always_lt_text_ttext(Pointer txt, Pointer temp) { - return MeosLibrary.meos.always_lt_text_ttext(txt, temp); + public static double nad_tgeo_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.nad_tgeo_geo(temp, gs); } @SuppressWarnings("unused") - public static int always_lt_tfloat_float(Pointer temp, double d) { - return MeosLibrary.meos.always_lt_tfloat_float(temp, d); + public static double nad_tgeo_stbox(Pointer temp, Pointer box) { + return MeosLibrary.meos.nad_tgeo_stbox(temp, box); } @SuppressWarnings("unused") - public static int always_lt_tint_int(Pointer temp, int i) { - return MeosLibrary.meos.always_lt_tint_int(temp, i); + public static double nad_tgeo_tgeo(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.nad_tgeo_tgeo(temp1, temp2); } @SuppressWarnings("unused") - public static int always_lt_ttext_text(Pointer temp, Pointer txt) { - return MeosLibrary.meos.always_lt_ttext_text(temp, txt); + public static Pointer nai_tgeo_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.nai_tgeo_geo(temp, gs); } @SuppressWarnings("unused") - public static int ever_eq_bool_tbool(boolean b, Pointer temp) { - return MeosLibrary.meos.ever_eq_bool_tbool(b, temp); + public static Pointer nai_tgeo_tgeo(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.nai_tgeo_tgeo(temp1, temp2); } @SuppressWarnings("unused") - public static int ever_eq_float_tfloat(double d, Pointer temp) { - return MeosLibrary.meos.ever_eq_float_tfloat(d, temp); + public static Pointer shortestline_tgeo_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.shortestline_tgeo_geo(temp, gs); } @SuppressWarnings("unused") - public static int ever_eq_int_tint(int i, Pointer temp) { - return MeosLibrary.meos.ever_eq_int_tint(i, temp); + public static Pointer shortestline_tgeo_tgeo(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.shortestline_tgeo_tgeo(temp1, temp2); } @SuppressWarnings("unused") - public static int ever_eq_point_tpoint(Pointer gs, Pointer temp) { - return MeosLibrary.meos.ever_eq_point_tpoint(gs, temp); + public static Pointer tpoint_tcentroid_finalfn(Pointer state) { + return MeosLibrary.meos.tpoint_tcentroid_finalfn(state); } @SuppressWarnings("unused") - public static int ever_eq_tbool_bool(Pointer temp, boolean b) { - return MeosLibrary.meos.ever_eq_tbool_bool(temp, b); + public static Pointer tpoint_tcentroid_transfn(Pointer state, Pointer temp) { + return MeosLibrary.meos.tpoint_tcentroid_transfn(state, temp); } @SuppressWarnings("unused") - public static int ever_eq_temporal_temporal(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.ever_eq_temporal_temporal(temp1, temp2); + public static Pointer tspatial_extent_transfn(Pointer box, Pointer temp) { + return MeosLibrary.meos.tspatial_extent_transfn(box, temp); } @SuppressWarnings("unused") - public static int ever_eq_text_ttext(Pointer txt, Pointer temp) { - return MeosLibrary.meos.ever_eq_text_ttext(txt, temp); + public static Pointer stbox_get_space_tile(Pointer point, double xsize, double ysize, double zsize, Pointer sorigin) { + return MeosLibrary.meos.stbox_get_space_tile(point, xsize, ysize, zsize, sorigin); } @SuppressWarnings("unused") - public static int ever_eq_tfloat_float(Pointer temp, double d) { - return MeosLibrary.meos.ever_eq_tfloat_float(temp, d); + public static Pointer stbox_get_space_time_tile(Pointer point, OffsetDateTime t, double xsize, double ysize, double zsize, Pointer duration, Pointer sorigin, OffsetDateTime torigin) { + var t_new = t.toEpochSecond(); + var torigin_new = torigin.toEpochSecond(); + return MeosLibrary.meos.stbox_get_space_time_tile(point, t_new, xsize, ysize, zsize, duration, sorigin, torigin_new); } @SuppressWarnings("unused") - public static int ever_eq_tint_int(Pointer temp, int i) { - return MeosLibrary.meos.ever_eq_tint_int(temp, i); + public static Pointer stbox_get_time_tile(OffsetDateTime t, Pointer duration, OffsetDateTime torigin) { + var t_new = t.toEpochSecond(); + var torigin_new = torigin.toEpochSecond(); + return MeosLibrary.meos.stbox_get_time_tile(t_new, duration, torigin_new); } @SuppressWarnings("unused") - public static int ever_eq_tpoint_point(Pointer temp, Pointer gs) { - return MeosLibrary.meos.ever_eq_tpoint_point(temp, gs); + public static Pointer stbox_space_tiles(Pointer bounds, double xsize, double ysize, double zsize, Pointer sorigin, boolean border_inc, Pointer count) { + return MeosLibrary.meos.stbox_space_tiles(bounds, xsize, ysize, zsize, sorigin, border_inc, count); } @SuppressWarnings("unused") - public static int ever_eq_tpoint_tpoint(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.ever_eq_tpoint_tpoint(temp1, temp2); + public static Pointer stbox_space_time_tiles(Pointer bounds, double xsize, double ysize, double zsize, Pointer duration, Pointer sorigin, OffsetDateTime torigin, boolean border_inc, Pointer count) { + var torigin_new = torigin.toEpochSecond(); + return MeosLibrary.meos.stbox_space_time_tiles(bounds, xsize, ysize, zsize, duration, sorigin, torigin_new, border_inc, count); } @SuppressWarnings("unused") - public static int ever_eq_ttext_text(Pointer temp, Pointer txt) { - return MeosLibrary.meos.ever_eq_ttext_text(temp, txt); + public static Pointer stbox_time_tiles(Pointer bounds, Pointer duration, OffsetDateTime torigin, boolean border_inc, Pointer count) { + var torigin_new = torigin.toEpochSecond(); + return MeosLibrary.meos.stbox_time_tiles(bounds, duration, torigin_new, border_inc, count); } @SuppressWarnings("unused") - public static int ever_ge_float_tfloat(double d, Pointer temp) { - return MeosLibrary.meos.ever_ge_float_tfloat(d, temp); + public static Pointer tgeo_space_split(Pointer temp, double xsize, double ysize, double zsize, Pointer sorigin, boolean bitmatrix, boolean border_inc, Pointer space_bins, Pointer count) { + return MeosLibrary.meos.tgeo_space_split(temp, xsize, ysize, zsize, sorigin, bitmatrix, border_inc, space_bins, count); } @SuppressWarnings("unused") - public static int ever_ge_int_tint(int i, Pointer temp) { - return MeosLibrary.meos.ever_ge_int_tint(i, temp); + public static Pointer tgeo_space_time_split(Pointer temp, double xsize, double ysize, double zsize, Pointer duration, Pointer sorigin, OffsetDateTime torigin, boolean bitmatrix, boolean border_inc, Pointer space_bins, Pointer time_bins, Pointer count) { + var torigin_new = torigin.toEpochSecond(); + return MeosLibrary.meos.tgeo_space_time_split(temp, xsize, ysize, zsize, duration, sorigin, torigin_new, bitmatrix, border_inc, space_bins, time_bins, count); } @SuppressWarnings("unused") - public static int ever_ge_temporal_temporal(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.ever_ge_temporal_temporal(temp1, temp2); + public static Pointer geo_cluster_kmeans(Pointer geoms, int ngeoms, int k) { + return MeosLibrary.meos.geo_cluster_kmeans(geoms, ngeoms, k); } @SuppressWarnings("unused") - public static int ever_ge_text_ttext(Pointer txt, Pointer temp) { - return MeosLibrary.meos.ever_ge_text_ttext(txt, temp); + public static Pointer geo_cluster_dbscan(Pointer geoms, int ngeoms, double tolerance, int minpoints, Pointer count) { + return MeosLibrary.meos.geo_cluster_dbscan(geoms, ngeoms, tolerance, minpoints, count); } @SuppressWarnings("unused") - public static int ever_ge_tfloat_float(Pointer temp, double d) { - return MeosLibrary.meos.ever_ge_tfloat_float(temp, d); + public static Pointer geo_cluster_intersecting(Pointer geoms, int ngeoms, Pointer count) { + return MeosLibrary.meos.geo_cluster_intersecting(geoms, ngeoms, count); } @SuppressWarnings("unused") - public static int ever_ge_tint_int(Pointer temp, int i) { - return MeosLibrary.meos.ever_ge_tint_int(temp, i); + public static Pointer geo_cluster_within(Pointer geoms, int ngeoms, double tolerance, Pointer count) { + return MeosLibrary.meos.geo_cluster_within(geoms, ngeoms, tolerance, count); } @SuppressWarnings("unused") - public static int ever_ge_ttext_text(Pointer temp, Pointer txt) { - return MeosLibrary.meos.ever_ge_ttext_text(temp, txt); + public static String cbuffer_as_ewkt(Pointer cb, int maxdd) { + return MeosLibrary.meos.cbuffer_as_ewkt(cb, maxdd); } @SuppressWarnings("unused") - public static int ever_gt_float_tfloat(double d, Pointer temp) { - return MeosLibrary.meos.ever_gt_float_tfloat(d, temp); + public static String cbuffer_as_hexwkb(Pointer cb, byte variant, Pointer size) { + return MeosLibrary.meos.cbuffer_as_hexwkb(cb, variant, size); } @SuppressWarnings("unused") - public static int ever_gt_int_tint(int i, Pointer temp) { - return MeosLibrary.meos.ever_gt_int_tint(i, temp); + public static String cbuffer_as_text(Pointer cb, int maxdd) { + return MeosLibrary.meos.cbuffer_as_text(cb, maxdd); } @SuppressWarnings("unused") - public static int ever_gt_temporal_temporal(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.ever_gt_temporal_temporal(temp1, temp2); + public static Pointer cbuffer_as_wkb(Pointer cb, byte variant) { + Runtime runtime = Runtime.getSystemRuntime(); + Pointer size_out = Memory.allocateDirect(runtime, Long.BYTES); + return MeosLibrary.meos.cbuffer_as_wkb(cb, variant, size_out); } @SuppressWarnings("unused") - public static int ever_gt_text_ttext(Pointer txt, Pointer temp) { - return MeosLibrary.meos.ever_gt_text_ttext(txt, temp); + public static Pointer cbuffer_from_hexwkb(String hexwkb) { + return MeosLibrary.meos.cbuffer_from_hexwkb(hexwkb); } @SuppressWarnings("unused") - public static int ever_gt_tfloat_float(Pointer temp, double d) { - return MeosLibrary.meos.ever_gt_tfloat_float(temp, d); + public static Pointer cbuffer_from_wkb(Pointer wkb, long size) { + return MeosLibrary.meos.cbuffer_from_wkb(wkb, size); } @SuppressWarnings("unused") - public static int ever_gt_tint_int(Pointer temp, int i) { - return MeosLibrary.meos.ever_gt_tint_int(temp, i); + public static Pointer cbuffer_in(String str) { + return MeosLibrary.meos.cbuffer_in(str); } @SuppressWarnings("unused") - public static int ever_gt_ttext_text(Pointer temp, Pointer txt) { - return MeosLibrary.meos.ever_gt_ttext_text(temp, txt); + public static String cbuffer_out(Pointer cb, int maxdd) { + return MeosLibrary.meos.cbuffer_out(cb, maxdd); } @SuppressWarnings("unused") - public static int ever_le_float_tfloat(double d, Pointer temp) { - return MeosLibrary.meos.ever_le_float_tfloat(d, temp); + public static Pointer cbuffer_copy(Pointer cb) { + return MeosLibrary.meos.cbuffer_copy(cb); } @SuppressWarnings("unused") - public static int ever_le_int_tint(int i, Pointer temp) { - return MeosLibrary.meos.ever_le_int_tint(i, temp); + public static Pointer cbuffer_make(Pointer point, double radius) { + return MeosLibrary.meos.cbuffer_make(point, radius); } @SuppressWarnings("unused") - public static int ever_le_temporal_temporal(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.ever_le_temporal_temporal(temp1, temp2); + public static Pointer cbuffer_to_geom(Pointer cb) { + return MeosLibrary.meos.cbuffer_to_geom(cb); } @SuppressWarnings("unused") - public static int ever_le_text_ttext(Pointer txt, Pointer temp) { - return MeosLibrary.meos.ever_le_text_ttext(txt, temp); + public static Pointer cbuffer_to_stbox(Pointer cb) { + return MeosLibrary.meos.cbuffer_to_stbox(cb); } @SuppressWarnings("unused") - public static int ever_le_tfloat_float(Pointer temp, double d) { - return MeosLibrary.meos.ever_le_tfloat_float(temp, d); + public static Pointer cbufferarr_to_geom(Pointer cbarr, int count) { + return MeosLibrary.meos.cbufferarr_to_geom(cbarr, count); } @SuppressWarnings("unused") - public static int ever_le_tint_int(Pointer temp, int i) { - return MeosLibrary.meos.ever_le_tint_int(temp, i); + public static Pointer geom_to_cbuffer(Pointer gs) { + return MeosLibrary.meos.geom_to_cbuffer(gs); } @SuppressWarnings("unused") - public static int ever_le_ttext_text(Pointer temp, Pointer txt) { - return MeosLibrary.meos.ever_le_ttext_text(temp, txt); + public static int cbuffer_hash(Pointer cb) { + return MeosLibrary.meos.cbuffer_hash(cb); } @SuppressWarnings("unused") - public static int ever_lt_float_tfloat(double d, Pointer temp) { - return MeosLibrary.meos.ever_lt_float_tfloat(d, temp); + public static long cbuffer_hash_extended(Pointer cb, long seed) { + return MeosLibrary.meos.cbuffer_hash_extended(cb, seed); } @SuppressWarnings("unused") - public static int ever_lt_int_tint(int i, Pointer temp) { - return MeosLibrary.meos.ever_lt_int_tint(i, temp); + public static Pointer cbuffer_point(Pointer cb) { + return MeosLibrary.meos.cbuffer_point(cb); } @SuppressWarnings("unused") - public static int ever_lt_temporal_temporal(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.ever_lt_temporal_temporal(temp1, temp2); + public static double cbuffer_radius(Pointer cb) { + return MeosLibrary.meos.cbuffer_radius(cb); } @SuppressWarnings("unused") - public static int ever_lt_text_ttext(Pointer txt, Pointer temp) { - return MeosLibrary.meos.ever_lt_text_ttext(txt, temp); + public static Pointer cbuffer_round(Pointer cb, int maxdd) { + return MeosLibrary.meos.cbuffer_round(cb, maxdd); } @SuppressWarnings("unused") - public static int ever_lt_tfloat_float(Pointer temp, double d) { - return MeosLibrary.meos.ever_lt_tfloat_float(temp, d); + public static Pointer cbufferarr_round(Pointer cbarr, int count, int maxdd) { + return MeosLibrary.meos.cbufferarr_round(cbarr, count, maxdd); } @SuppressWarnings("unused") - public static int ever_lt_tint_int(Pointer temp, int i) { - return MeosLibrary.meos.ever_lt_tint_int(temp, i); + public static void cbuffer_set_srid(Pointer cb, int srid) { + MeosLibrary.meos.cbuffer_set_srid(cb, srid); } @SuppressWarnings("unused") - public static int ever_lt_ttext_text(Pointer temp, Pointer txt) { - return MeosLibrary.meos.ever_lt_ttext_text(temp, txt); + public static int cbuffer_srid(Pointer cb) { + return MeosLibrary.meos.cbuffer_srid(cb); } @SuppressWarnings("unused") - public static int ever_ne_bool_tbool(boolean b, Pointer temp) { - return MeosLibrary.meos.ever_ne_bool_tbool(b, temp); + public static Pointer cbuffer_transform(Pointer cb, int srid) { + return MeosLibrary.meos.cbuffer_transform(cb, srid); } @SuppressWarnings("unused") - public static int ever_ne_float_tfloat(double d, Pointer temp) { - return MeosLibrary.meos.ever_ne_float_tfloat(d, temp); + public static Pointer cbuffer_transform_pipeline(Pointer cb, String pipelinestr, int srid, boolean is_forward) { + return MeosLibrary.meos.cbuffer_transform_pipeline(cb, pipelinestr, srid, is_forward); } @SuppressWarnings("unused") - public static int ever_ne_int_tint(int i, Pointer temp) { - return MeosLibrary.meos.ever_ne_int_tint(i, temp); + public static int contains_cbuffer_cbuffer(Pointer cb1, Pointer cb2) { + return MeosLibrary.meos.contains_cbuffer_cbuffer(cb1, cb2); } @SuppressWarnings("unused") - public static int ever_ne_point_tpoint(Pointer gs, Pointer temp) { - return MeosLibrary.meos.ever_ne_point_tpoint(gs, temp); + public static int covers_cbuffer_cbuffer(Pointer cb1, Pointer cb2) { + return MeosLibrary.meos.covers_cbuffer_cbuffer(cb1, cb2); } @SuppressWarnings("unused") - public static int ever_ne_tbool_bool(Pointer temp, boolean b) { - return MeosLibrary.meos.ever_ne_tbool_bool(temp, b); + public static int disjoint_cbuffer_cbuffer(Pointer cb1, Pointer cb2) { + return MeosLibrary.meos.disjoint_cbuffer_cbuffer(cb1, cb2); } @SuppressWarnings("unused") - public static int ever_ne_temporal_temporal(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.ever_ne_temporal_temporal(temp1, temp2); + public static int dwithin_cbuffer_cbuffer(Pointer cb1, Pointer cb2, double dist) { + return MeosLibrary.meos.dwithin_cbuffer_cbuffer(cb1, cb2, dist); } @SuppressWarnings("unused") - public static int ever_ne_text_ttext(Pointer txt, Pointer temp) { - return MeosLibrary.meos.ever_ne_text_ttext(txt, temp); + public static int intersects_cbuffer_cbuffer(Pointer cb1, Pointer cb2) { + return MeosLibrary.meos.intersects_cbuffer_cbuffer(cb1, cb2); } @SuppressWarnings("unused") - public static int ever_ne_tfloat_float(Pointer temp, double d) { - return MeosLibrary.meos.ever_ne_tfloat_float(temp, d); + public static int touches_cbuffer_cbuffer(Pointer cb1, Pointer cb2) { + return MeosLibrary.meos.touches_cbuffer_cbuffer(cb1, cb2); } @SuppressWarnings("unused") - public static int ever_ne_tint_int(Pointer temp, int i) { - return MeosLibrary.meos.ever_ne_tint_int(temp, i); + public static Pointer cbuffer_tstzspan_to_stbox(Pointer cb, Pointer s) { + return MeosLibrary.meos.cbuffer_tstzspan_to_stbox(cb, s); } @SuppressWarnings("unused") - public static int ever_ne_tpoint_point(Pointer temp, Pointer gs) { - return MeosLibrary.meos.ever_ne_tpoint_point(temp, gs); + public static Pointer cbuffer_timestamptz_to_stbox(Pointer cb, OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.cbuffer_timestamptz_to_stbox(cb, t_new); } @SuppressWarnings("unused") - public static int ever_ne_tpoint_tpoint(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.ever_ne_tpoint_tpoint(temp1, temp2); + public static double distance_cbuffer_cbuffer(Pointer cb1, Pointer cb2) { + return MeosLibrary.meos.distance_cbuffer_cbuffer(cb1, cb2); } @SuppressWarnings("unused") - public static int ever_ne_ttext_text(Pointer temp, Pointer txt) { - return MeosLibrary.meos.ever_ne_ttext_text(temp, txt); + public static double distance_cbuffer_geo(Pointer cb, Pointer gs) { + return MeosLibrary.meos.distance_cbuffer_geo(cb, gs); } @SuppressWarnings("unused") - public static Pointer teq_bool_tbool(boolean b, Pointer temp) { - return MeosLibrary.meos.teq_bool_tbool(b, temp); + public static double distance_cbuffer_stbox(Pointer cb, Pointer box) { + return MeosLibrary.meos.distance_cbuffer_stbox(cb, box); } @SuppressWarnings("unused") - public static Pointer teq_float_tfloat(double d, Pointer temp) { - return MeosLibrary.meos.teq_float_tfloat(d, temp); + public static double nad_cbuffer_stbox(Pointer cb, Pointer box) { + return MeosLibrary.meos.nad_cbuffer_stbox(cb, box); } @SuppressWarnings("unused") - public static Pointer teq_int_tint(int i, Pointer temp) { - return MeosLibrary.meos.teq_int_tint(i, temp); + public static int cbuffer_cmp(Pointer cb1, Pointer cb2) { + return MeosLibrary.meos.cbuffer_cmp(cb1, cb2); } @SuppressWarnings("unused") - public static Pointer teq_point_tpoint(Pointer gs, Pointer temp) { - return MeosLibrary.meos.teq_point_tpoint(gs, temp); + public static boolean cbuffer_eq(Pointer cb1, Pointer cb2) { + return MeosLibrary.meos.cbuffer_eq(cb1, cb2); } @SuppressWarnings("unused") - public static Pointer teq_tbool_bool(Pointer temp, boolean b) { - return MeosLibrary.meos.teq_tbool_bool(temp, b); + public static boolean cbuffer_ge(Pointer cb1, Pointer cb2) { + return MeosLibrary.meos.cbuffer_ge(cb1, cb2); } @SuppressWarnings("unused") - public static Pointer teq_temporal_temporal(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.teq_temporal_temporal(temp1, temp2); + public static boolean cbuffer_gt(Pointer cb1, Pointer cb2) { + return MeosLibrary.meos.cbuffer_gt(cb1, cb2); } @SuppressWarnings("unused") - public static Pointer teq_text_ttext(Pointer txt, Pointer temp) { - return MeosLibrary.meos.teq_text_ttext(txt, temp); + public static boolean cbuffer_le(Pointer cb1, Pointer cb2) { + return MeosLibrary.meos.cbuffer_le(cb1, cb2); } @SuppressWarnings("unused") - public static Pointer teq_tfloat_float(Pointer temp, double d) { - return MeosLibrary.meos.teq_tfloat_float(temp, d); + public static boolean cbuffer_lt(Pointer cb1, Pointer cb2) { + return MeosLibrary.meos.cbuffer_lt(cb1, cb2); } @SuppressWarnings("unused") - public static Pointer teq_tpoint_point(Pointer temp, Pointer gs) { - return MeosLibrary.meos.teq_tpoint_point(temp, gs); + public static boolean cbuffer_ne(Pointer cb1, Pointer cb2) { + return MeosLibrary.meos.cbuffer_ne(cb1, cb2); } @SuppressWarnings("unused") - public static Pointer teq_tint_int(Pointer temp, int i) { - return MeosLibrary.meos.teq_tint_int(temp, i); + public static boolean cbuffer_nsame(Pointer cb1, Pointer cb2) { + return MeosLibrary.meos.cbuffer_nsame(cb1, cb2); } @SuppressWarnings("unused") - public static Pointer teq_ttext_text(Pointer temp, Pointer txt) { - return MeosLibrary.meos.teq_ttext_text(temp, txt); + public static boolean cbuffer_same(Pointer cb1, Pointer cb2) { + return MeosLibrary.meos.cbuffer_same(cb1, cb2); } @SuppressWarnings("unused") - public static Pointer tge_float_tfloat(double d, Pointer temp) { - return MeosLibrary.meos.tge_float_tfloat(d, temp); + public static Pointer cbufferset_in(String str) { + return MeosLibrary.meos.cbufferset_in(str); } @SuppressWarnings("unused") - public static Pointer tge_int_tint(int i, Pointer temp) { - return MeosLibrary.meos.tge_int_tint(i, temp); + public static String cbufferset_out(Pointer s, int maxdd) { + return MeosLibrary.meos.cbufferset_out(s, maxdd); } @SuppressWarnings("unused") - public static Pointer tge_temporal_temporal(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.tge_temporal_temporal(temp1, temp2); + public static Pointer cbufferset_make(Pointer values, int count) { + return MeosLibrary.meos.cbufferset_make(values, count); } @SuppressWarnings("unused") - public static Pointer tge_text_ttext(Pointer txt, Pointer temp) { - return MeosLibrary.meos.tge_text_ttext(txt, temp); + public static Pointer cbuffer_to_set(Pointer cb) { + return MeosLibrary.meos.cbuffer_to_set(cb); } @SuppressWarnings("unused") - public static Pointer tge_tfloat_float(Pointer temp, double d) { - return MeosLibrary.meos.tge_tfloat_float(temp, d); + public static Pointer cbufferset_end_value(Pointer s) { + return MeosLibrary.meos.cbufferset_end_value(s); } @SuppressWarnings("unused") - public static Pointer tge_tint_int(Pointer temp, int i) { - return MeosLibrary.meos.tge_tint_int(temp, i); + public static Pointer cbufferset_start_value(Pointer s) { + return MeosLibrary.meos.cbufferset_start_value(s); } @SuppressWarnings("unused") - public static Pointer tge_ttext_text(Pointer temp, Pointer txt) { - return MeosLibrary.meos.tge_ttext_text(temp, txt); + public static Pointer cbufferset_value_n(Pointer s, int n) { + boolean out; + Runtime runtime = Runtime.getSystemRuntime(); + Pointer result = Memory.allocateDirect(runtime, Long.BYTES); + out = MeosLibrary.meos.cbufferset_value_n(s, n, result); + Pointer new_result = result.getPointer(0); + return out ? new_result : null ; } @SuppressWarnings("unused") - public static Pointer tgt_float_tfloat(double d, Pointer temp) { - return MeosLibrary.meos.tgt_float_tfloat(d, temp); + public static Pointer cbufferset_values(Pointer s) { + return MeosLibrary.meos.cbufferset_values(s); } @SuppressWarnings("unused") - public static Pointer tgt_int_tint(int i, Pointer temp) { - return MeosLibrary.meos.tgt_int_tint(i, temp); + public static Pointer cbuffer_union_transfn(Pointer state, Pointer cb) { + return MeosLibrary.meos.cbuffer_union_transfn(state, cb); } @SuppressWarnings("unused") - public static Pointer tgt_temporal_temporal(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.tgt_temporal_temporal(temp1, temp2); + public static boolean contained_cbuffer_set(Pointer cb, Pointer s) { + return MeosLibrary.meos.contained_cbuffer_set(cb, s); } @SuppressWarnings("unused") - public static Pointer tgt_text_ttext(Pointer txt, Pointer temp) { - return MeosLibrary.meos.tgt_text_ttext(txt, temp); + public static boolean contains_set_cbuffer(Pointer s, Pointer cb) { + return MeosLibrary.meos.contains_set_cbuffer(s, cb); } @SuppressWarnings("unused") - public static Pointer tgt_tfloat_float(Pointer temp, double d) { - return MeosLibrary.meos.tgt_tfloat_float(temp, d); + public static Pointer intersection_cbuffer_set(Pointer cb, Pointer s) { + return MeosLibrary.meos.intersection_cbuffer_set(cb, s); } @SuppressWarnings("unused") - public static Pointer tgt_tint_int(Pointer temp, int i) { - return MeosLibrary.meos.tgt_tint_int(temp, i); + public static Pointer intersection_set_cbuffer(Pointer s, Pointer cb) { + return MeosLibrary.meos.intersection_set_cbuffer(s, cb); } @SuppressWarnings("unused") - public static Pointer tgt_ttext_text(Pointer temp, Pointer txt) { - return MeosLibrary.meos.tgt_ttext_text(temp, txt); + public static Pointer minus_cbuffer_set(Pointer cb, Pointer s) { + return MeosLibrary.meos.minus_cbuffer_set(cb, s); } @SuppressWarnings("unused") - public static Pointer tle_float_tfloat(double d, Pointer temp) { - return MeosLibrary.meos.tle_float_tfloat(d, temp); + public static Pointer minus_set_cbuffer(Pointer s, Pointer cb) { + return MeosLibrary.meos.minus_set_cbuffer(s, cb); } @SuppressWarnings("unused") - public static Pointer tle_int_tint(int i, Pointer temp) { - return MeosLibrary.meos.tle_int_tint(i, temp); + public static Pointer union_cbuffer_set(Pointer cb, Pointer s) { + return MeosLibrary.meos.union_cbuffer_set(cb, s); } @SuppressWarnings("unused") - public static Pointer tle_temporal_temporal(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.tle_temporal_temporal(temp1, temp2); + public static Pointer union_set_cbuffer(Pointer s, Pointer cb) { + return MeosLibrary.meos.union_set_cbuffer(s, cb); } @SuppressWarnings("unused") - public static Pointer tle_text_ttext(Pointer txt, Pointer temp) { - return MeosLibrary.meos.tle_text_ttext(txt, temp); + public static Pointer tcbuffer_in(String str) { + return MeosLibrary.meos.tcbuffer_in(str); } @SuppressWarnings("unused") - public static Pointer tle_tfloat_float(Pointer temp, double d) { - return MeosLibrary.meos.tle_tfloat_float(temp, d); + public static Pointer tcbuffer_make(Pointer tpoint, Pointer tfloat) { + return MeosLibrary.meos.tcbuffer_make(tpoint, tfloat); } @SuppressWarnings("unused") - public static Pointer tle_tint_int(Pointer temp, int i) { - return MeosLibrary.meos.tle_tint_int(temp, i); + public static Pointer tcbuffer_points(Pointer temp) { + return MeosLibrary.meos.tcbuffer_points(temp); } @SuppressWarnings("unused") - public static Pointer tle_ttext_text(Pointer temp, Pointer txt) { - return MeosLibrary.meos.tle_ttext_text(temp, txt); + public static Pointer tcbuffer_radius(Pointer temp) { + return MeosLibrary.meos.tcbuffer_radius(temp); } @SuppressWarnings("unused") - public static Pointer tlt_float_tfloat(double d, Pointer temp) { - return MeosLibrary.meos.tlt_float_tfloat(d, temp); + public static Pointer tcbuffer_trav_area(Pointer temp, boolean merge_union) { + return MeosLibrary.meos.tcbuffer_trav_area(temp, merge_union); } @SuppressWarnings("unused") - public static Pointer tlt_int_tint(int i, Pointer temp) { - return MeosLibrary.meos.tlt_int_tint(i, temp); + public static Pointer tcbuffer_to_tfloat(Pointer temp) { + return MeosLibrary.meos.tcbuffer_to_tfloat(temp); } @SuppressWarnings("unused") - public static Pointer tlt_temporal_temporal(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.tlt_temporal_temporal(temp1, temp2); + public static Pointer tcbuffer_to_tgeompoint(Pointer temp) { + return MeosLibrary.meos.tcbuffer_to_tgeompoint(temp); } @SuppressWarnings("unused") - public static Pointer tlt_text_ttext(Pointer txt, Pointer temp) { - return MeosLibrary.meos.tlt_text_ttext(txt, temp); + public static Pointer tgeometry_to_tcbuffer(Pointer temp) { + return MeosLibrary.meos.tgeometry_to_tcbuffer(temp); } @SuppressWarnings("unused") - public static Pointer tlt_tfloat_float(Pointer temp, double d) { - return MeosLibrary.meos.tlt_tfloat_float(temp, d); + public static Pointer tcbuffer_expand(Pointer temp, double dist) { + return MeosLibrary.meos.tcbuffer_expand(temp, dist); } @SuppressWarnings("unused") - public static Pointer tlt_tint_int(Pointer temp, int i) { - return MeosLibrary.meos.tlt_tint_int(temp, i); + public static Pointer tcbuffer_at_cbuffer(Pointer temp, Pointer cb) { + return MeosLibrary.meos.tcbuffer_at_cbuffer(temp, cb); } @SuppressWarnings("unused") - public static Pointer tlt_ttext_text(Pointer temp, Pointer txt) { - return MeosLibrary.meos.tlt_ttext_text(temp, txt); + public static Pointer tcbuffer_at_geom(Pointer temp, Pointer gs) { + return MeosLibrary.meos.tcbuffer_at_geom(temp, gs); } @SuppressWarnings("unused") - public static Pointer tne_bool_tbool(boolean b, Pointer temp) { - return MeosLibrary.meos.tne_bool_tbool(b, temp); + public static Pointer tcbuffer_at_stbox(Pointer temp, Pointer box, boolean border_inc) { + return MeosLibrary.meos.tcbuffer_at_stbox(temp, box, border_inc); } @SuppressWarnings("unused") - public static Pointer tne_float_tfloat(double d, Pointer temp) { - return MeosLibrary.meos.tne_float_tfloat(d, temp); + public static Pointer tcbuffer_minus_cbuffer(Pointer temp, Pointer cb) { + return MeosLibrary.meos.tcbuffer_minus_cbuffer(temp, cb); } @SuppressWarnings("unused") - public static Pointer tne_int_tint(int i, Pointer temp) { - return MeosLibrary.meos.tne_int_tint(i, temp); + public static Pointer tcbuffer_minus_geom(Pointer temp, Pointer gs) { + return MeosLibrary.meos.tcbuffer_minus_geom(temp, gs); } @SuppressWarnings("unused") - public static Pointer tne_point_tpoint(Pointer gs, Pointer temp) { - return MeosLibrary.meos.tne_point_tpoint(gs, temp); + public static Pointer tcbuffer_minus_stbox(Pointer temp, Pointer box, boolean border_inc) { + return MeosLibrary.meos.tcbuffer_minus_stbox(temp, box, border_inc); } @SuppressWarnings("unused") - public static Pointer tne_tbool_bool(Pointer temp, boolean b) { - return MeosLibrary.meos.tne_tbool_bool(temp, b); + public static Pointer tdistance_tcbuffer_cbuffer(Pointer temp, Pointer cb) { + return MeosLibrary.meos.tdistance_tcbuffer_cbuffer(temp, cb); } @SuppressWarnings("unused") - public static Pointer tne_temporal_temporal(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.tne_temporal_temporal(temp1, temp2); + public static Pointer tdistance_tcbuffer_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.tdistance_tcbuffer_geo(temp, gs); } @SuppressWarnings("unused") - public static Pointer tne_text_ttext(Pointer txt, Pointer temp) { - return MeosLibrary.meos.tne_text_ttext(txt, temp); + public static Pointer tdistance_tcbuffer_tcbuffer(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.tdistance_tcbuffer_tcbuffer(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer tne_tfloat_float(Pointer temp, double d) { - return MeosLibrary.meos.tne_tfloat_float(temp, d); + public static double nad_tcbuffer_cbuffer(Pointer temp, Pointer cb) { + return MeosLibrary.meos.nad_tcbuffer_cbuffer(temp, cb); } @SuppressWarnings("unused") - public static Pointer tne_tpoint_point(Pointer temp, Pointer gs) { - return MeosLibrary.meos.tne_tpoint_point(temp, gs); + public static double nad_tcbuffer_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.nad_tcbuffer_geo(temp, gs); } @SuppressWarnings("unused") - public static Pointer tne_tint_int(Pointer temp, int i) { - return MeosLibrary.meos.tne_tint_int(temp, i); + public static double nad_tcbuffer_stbox(Pointer temp, Pointer box) { + return MeosLibrary.meos.nad_tcbuffer_stbox(temp, box); } @SuppressWarnings("unused") - public static Pointer tne_ttext_text(Pointer temp, Pointer txt) { - return MeosLibrary.meos.tne_ttext_text(temp, txt); + public static double nad_tcbuffer_tcbuffer(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.nad_tcbuffer_tcbuffer(temp1, temp2); } @SuppressWarnings("unused") - public static boolean adjacent_numspan_tnumber(Pointer s, Pointer temp) { - return MeosLibrary.meos.adjacent_numspan_tnumber(s, temp); + public static Pointer nai_tcbuffer_cbuffer(Pointer temp, Pointer cb) { + return MeosLibrary.meos.nai_tcbuffer_cbuffer(temp, cb); } @SuppressWarnings("unused") - public static boolean adjacent_stbox_tpoint(Pointer box, Pointer temp) { - return MeosLibrary.meos.adjacent_stbox_tpoint(box, temp); + public static Pointer nai_tcbuffer_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.nai_tcbuffer_geo(temp, gs); } @SuppressWarnings("unused") - public static boolean adjacent_tbox_tnumber(Pointer box, Pointer temp) { - return MeosLibrary.meos.adjacent_tbox_tnumber(box, temp); + public static Pointer nai_tcbuffer_tcbuffer(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.nai_tcbuffer_tcbuffer(temp1, temp2); } @SuppressWarnings("unused") - public static boolean adjacent_temporal_temporal(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.adjacent_temporal_temporal(temp1, temp2); + public static Pointer shortestline_tcbuffer_cbuffer(Pointer temp, Pointer cb) { + return MeosLibrary.meos.shortestline_tcbuffer_cbuffer(temp, cb); } @SuppressWarnings("unused") - public static boolean adjacent_temporal_tstzspan(Pointer temp, Pointer s) { - return MeosLibrary.meos.adjacent_temporal_tstzspan(temp, s); + public static Pointer shortestline_tcbuffer_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.shortestline_tcbuffer_geo(temp, gs); } @SuppressWarnings("unused") - public static boolean adjacent_tnumber_numspan(Pointer temp, Pointer s) { - return MeosLibrary.meos.adjacent_tnumber_numspan(temp, s); + public static Pointer shortestline_tcbuffer_tcbuffer(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.shortestline_tcbuffer_tcbuffer(temp1, temp2); } @SuppressWarnings("unused") - public static boolean adjacent_tnumber_tbox(Pointer temp, Pointer box) { - return MeosLibrary.meos.adjacent_tnumber_tbox(temp, box); + public static int always_eq_cbuffer_tcbuffer(Pointer cb, Pointer temp) { + return MeosLibrary.meos.always_eq_cbuffer_tcbuffer(cb, temp); } @SuppressWarnings("unused") - public static boolean adjacent_tnumber_tnumber(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.adjacent_tnumber_tnumber(temp1, temp2); + public static int always_eq_tcbuffer_cbuffer(Pointer temp, Pointer cb) { + return MeosLibrary.meos.always_eq_tcbuffer_cbuffer(temp, cb); } @SuppressWarnings("unused") - public static boolean adjacent_tpoint_stbox(Pointer temp, Pointer box) { - return MeosLibrary.meos.adjacent_tpoint_stbox(temp, box); + public static int always_eq_tcbuffer_tcbuffer(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.always_eq_tcbuffer_tcbuffer(temp1, temp2); } @SuppressWarnings("unused") - public static boolean adjacent_tpoint_tpoint(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.adjacent_tpoint_tpoint(temp1, temp2); + public static int always_ne_cbuffer_tcbuffer(Pointer cb, Pointer temp) { + return MeosLibrary.meos.always_ne_cbuffer_tcbuffer(cb, temp); } @SuppressWarnings("unused") - public static boolean adjacent_tstzspan_temporal(Pointer s, Pointer temp) { - return MeosLibrary.meos.adjacent_tstzspan_temporal(s, temp); + public static int always_ne_tcbuffer_cbuffer(Pointer temp, Pointer cb) { + return MeosLibrary.meos.always_ne_tcbuffer_cbuffer(temp, cb); } @SuppressWarnings("unused") - public static boolean contained_numspan_tnumber(Pointer s, Pointer temp) { - return MeosLibrary.meos.contained_numspan_tnumber(s, temp); + public static int always_ne_tcbuffer_tcbuffer(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.always_ne_tcbuffer_tcbuffer(temp1, temp2); } @SuppressWarnings("unused") - public static boolean contained_stbox_tpoint(Pointer box, Pointer temp) { - return MeosLibrary.meos.contained_stbox_tpoint(box, temp); + public static int ever_eq_cbuffer_tcbuffer(Pointer cb, Pointer temp) { + return MeosLibrary.meos.ever_eq_cbuffer_tcbuffer(cb, temp); } @SuppressWarnings("unused") - public static boolean contained_tbox_tnumber(Pointer box, Pointer temp) { - return MeosLibrary.meos.contained_tbox_tnumber(box, temp); + public static int ever_eq_tcbuffer_cbuffer(Pointer temp, Pointer cb) { + return MeosLibrary.meos.ever_eq_tcbuffer_cbuffer(temp, cb); } @SuppressWarnings("unused") - public static boolean contained_temporal_temporal(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.contained_temporal_temporal(temp1, temp2); + public static int ever_eq_tcbuffer_tcbuffer(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.ever_eq_tcbuffer_tcbuffer(temp1, temp2); } @SuppressWarnings("unused") - public static boolean contained_temporal_tstzspan(Pointer temp, Pointer s) { - return MeosLibrary.meos.contained_temporal_tstzspan(temp, s); + public static int ever_ne_cbuffer_tcbuffer(Pointer cb, Pointer temp) { + return MeosLibrary.meos.ever_ne_cbuffer_tcbuffer(cb, temp); } @SuppressWarnings("unused") - public static boolean contained_tnumber_numspan(Pointer temp, Pointer s) { - return MeosLibrary.meos.contained_tnumber_numspan(temp, s); + public static int ever_ne_tcbuffer_cbuffer(Pointer temp, Pointer cb) { + return MeosLibrary.meos.ever_ne_tcbuffer_cbuffer(temp, cb); } @SuppressWarnings("unused") - public static boolean contained_tnumber_tbox(Pointer temp, Pointer box) { - return MeosLibrary.meos.contained_tnumber_tbox(temp, box); + public static int ever_ne_tcbuffer_tcbuffer(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.ever_ne_tcbuffer_tcbuffer(temp1, temp2); } @SuppressWarnings("unused") - public static boolean contained_tnumber_tnumber(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.contained_tnumber_tnumber(temp1, temp2); + public static Pointer teq_cbuffer_tcbuffer(Pointer cb, Pointer temp) { + return MeosLibrary.meos.teq_cbuffer_tcbuffer(cb, temp); } @SuppressWarnings("unused") - public static boolean contained_tpoint_stbox(Pointer temp, Pointer box) { - return MeosLibrary.meos.contained_tpoint_stbox(temp, box); + public static Pointer teq_tcbuffer_cbuffer(Pointer temp, Pointer cb) { + return MeosLibrary.meos.teq_tcbuffer_cbuffer(temp, cb); } @SuppressWarnings("unused") - public static boolean contained_tpoint_tpoint(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.contained_tpoint_tpoint(temp1, temp2); + public static Pointer tne_cbuffer_tcbuffer(Pointer cb, Pointer temp) { + return MeosLibrary.meos.tne_cbuffer_tcbuffer(cb, temp); } @SuppressWarnings("unused") - public static boolean contained_tstzspan_temporal(Pointer s, Pointer temp) { - return MeosLibrary.meos.contained_tstzspan_temporal(s, temp); + public static Pointer tne_tcbuffer_cbuffer(Pointer temp, Pointer cb) { + return MeosLibrary.meos.tne_tcbuffer_cbuffer(temp, cb); } @SuppressWarnings("unused") - public static boolean contains_numspan_tnumber(Pointer s, Pointer temp) { - return MeosLibrary.meos.contains_numspan_tnumber(s, temp); + public static int acontains_cbuffer_tcbuffer(Pointer cb, Pointer temp) { + return MeosLibrary.meos.acontains_cbuffer_tcbuffer(cb, temp); } @SuppressWarnings("unused") - public static boolean contains_stbox_tpoint(Pointer box, Pointer temp) { - return MeosLibrary.meos.contains_stbox_tpoint(box, temp); + public static int acontains_geo_tcbuffer(Pointer gs, Pointer temp) { + return MeosLibrary.meos.acontains_geo_tcbuffer(gs, temp); } @SuppressWarnings("unused") - public static boolean contains_tbox_tnumber(Pointer box, Pointer temp) { - return MeosLibrary.meos.contains_tbox_tnumber(box, temp); + public static int acontains_tcbuffer_cbuffer(Pointer temp, Pointer cb) { + return MeosLibrary.meos.acontains_tcbuffer_cbuffer(temp, cb); } @SuppressWarnings("unused") - public static boolean contains_temporal_tstzspan(Pointer temp, Pointer s) { - return MeosLibrary.meos.contains_temporal_tstzspan(temp, s); + public static int acontains_tcbuffer_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.acontains_tcbuffer_geo(temp, gs); } @SuppressWarnings("unused") - public static boolean contains_temporal_temporal(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.contains_temporal_temporal(temp1, temp2); + public static int acovers_cbuffer_tcbuffer(Pointer cb, Pointer temp) { + return MeosLibrary.meos.acovers_cbuffer_tcbuffer(cb, temp); } @SuppressWarnings("unused") - public static boolean contains_tnumber_numspan(Pointer temp, Pointer s) { - return MeosLibrary.meos.contains_tnumber_numspan(temp, s); + public static int acovers_geo_tcbuffer(Pointer gs, Pointer temp) { + return MeosLibrary.meos.acovers_geo_tcbuffer(gs, temp); } @SuppressWarnings("unused") - public static boolean contains_tnumber_tbox(Pointer temp, Pointer box) { - return MeosLibrary.meos.contains_tnumber_tbox(temp, box); + public static int acovers_tcbuffer_cbuffer(Pointer temp, Pointer cb) { + return MeosLibrary.meos.acovers_tcbuffer_cbuffer(temp, cb); } @SuppressWarnings("unused") - public static boolean contains_tnumber_tnumber(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.contains_tnumber_tnumber(temp1, temp2); + public static int acovers_tcbuffer_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.acovers_tcbuffer_geo(temp, gs); } @SuppressWarnings("unused") - public static boolean contains_tpoint_stbox(Pointer temp, Pointer box) { - return MeosLibrary.meos.contains_tpoint_stbox(temp, box); + public static int adisjoint_tcbuffer_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.adisjoint_tcbuffer_geo(temp, gs); } @SuppressWarnings("unused") - public static boolean contains_tpoint_tpoint(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.contains_tpoint_tpoint(temp1, temp2); + public static int adisjoint_tcbuffer_cbuffer(Pointer temp, Pointer cb) { + return MeosLibrary.meos.adisjoint_tcbuffer_cbuffer(temp, cb); } @SuppressWarnings("unused") - public static boolean contains_tstzspan_temporal(Pointer s, Pointer temp) { - return MeosLibrary.meos.contains_tstzspan_temporal(s, temp); + public static int adisjoint_tcbuffer_tcbuffer(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.adisjoint_tcbuffer_tcbuffer(temp1, temp2); } @SuppressWarnings("unused") - public static boolean overlaps_numspan_tnumber(Pointer s, Pointer temp) { - return MeosLibrary.meos.overlaps_numspan_tnumber(s, temp); + public static int adwithin_tcbuffer_geo(Pointer temp, Pointer gs, double dist) { + return MeosLibrary.meos.adwithin_tcbuffer_geo(temp, gs, dist); } @SuppressWarnings("unused") - public static boolean overlaps_stbox_tpoint(Pointer box, Pointer temp) { - return MeosLibrary.meos.overlaps_stbox_tpoint(box, temp); + public static int adwithin_tcbuffer_cbuffer(Pointer temp, Pointer cb, double dist) { + return MeosLibrary.meos.adwithin_tcbuffer_cbuffer(temp, cb, dist); } @SuppressWarnings("unused") - public static boolean overlaps_tbox_tnumber(Pointer box, Pointer temp) { - return MeosLibrary.meos.overlaps_tbox_tnumber(box, temp); + public static int adwithin_tcbuffer_tcbuffer(Pointer temp1, Pointer temp2, double dist) { + return MeosLibrary.meos.adwithin_tcbuffer_tcbuffer(temp1, temp2, dist); } @SuppressWarnings("unused") - public static boolean overlaps_temporal_temporal(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.overlaps_temporal_temporal(temp1, temp2); + public static int aintersects_tcbuffer_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.aintersects_tcbuffer_geo(temp, gs); } @SuppressWarnings("unused") - public static boolean overlaps_temporal_tstzspan(Pointer temp, Pointer s) { - return MeosLibrary.meos.overlaps_temporal_tstzspan(temp, s); + public static int aintersects_tcbuffer_cbuffer(Pointer temp, Pointer cb) { + return MeosLibrary.meos.aintersects_tcbuffer_cbuffer(temp, cb); } @SuppressWarnings("unused") - public static boolean overlaps_tnumber_numspan(Pointer temp, Pointer s) { - return MeosLibrary.meos.overlaps_tnumber_numspan(temp, s); + public static int aintersects_tcbuffer_tcbuffer(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.aintersects_tcbuffer_tcbuffer(temp1, temp2); } @SuppressWarnings("unused") - public static boolean overlaps_tnumber_tbox(Pointer temp, Pointer box) { - return MeosLibrary.meos.overlaps_tnumber_tbox(temp, box); + public static int atouches_tcbuffer_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.atouches_tcbuffer_geo(temp, gs); } @SuppressWarnings("unused") - public static boolean overlaps_tnumber_tnumber(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.overlaps_tnumber_tnumber(temp1, temp2); + public static int atouches_tcbuffer_cbuffer(Pointer temp, Pointer cb) { + return MeosLibrary.meos.atouches_tcbuffer_cbuffer(temp, cb); } @SuppressWarnings("unused") - public static boolean overlaps_tpoint_stbox(Pointer temp, Pointer box) { - return MeosLibrary.meos.overlaps_tpoint_stbox(temp, box); + public static int atouches_tcbuffer_tcbuffer(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.atouches_tcbuffer_tcbuffer(temp1, temp2); } @SuppressWarnings("unused") - public static boolean overlaps_tpoint_tpoint(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.overlaps_tpoint_tpoint(temp1, temp2); + public static int econtains_cbuffer_tcbuffer(Pointer cb, Pointer temp) { + return MeosLibrary.meos.econtains_cbuffer_tcbuffer(cb, temp); } @SuppressWarnings("unused") - public static boolean overlaps_tstzspan_temporal(Pointer s, Pointer temp) { - return MeosLibrary.meos.overlaps_tstzspan_temporal(s, temp); + public static int econtains_tcbuffer_cbuffer(Pointer temp, Pointer cb) { + return MeosLibrary.meos.econtains_tcbuffer_cbuffer(temp, cb); } @SuppressWarnings("unused") - public static boolean same_numspan_tnumber(Pointer s, Pointer temp) { - return MeosLibrary.meos.same_numspan_tnumber(s, temp); + public static int econtains_tcbuffer_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.econtains_tcbuffer_geo(temp, gs); } @SuppressWarnings("unused") - public static boolean same_stbox_tpoint(Pointer box, Pointer temp) { - return MeosLibrary.meos.same_stbox_tpoint(box, temp); + public static int ecovers_cbuffer_tcbuffer(Pointer cb, Pointer temp) { + return MeosLibrary.meos.ecovers_cbuffer_tcbuffer(cb, temp); } @SuppressWarnings("unused") - public static boolean same_tbox_tnumber(Pointer box, Pointer temp) { - return MeosLibrary.meos.same_tbox_tnumber(box, temp); + public static int ecovers_tcbuffer_cbuffer(Pointer temp, Pointer cb) { + return MeosLibrary.meos.ecovers_tcbuffer_cbuffer(temp, cb); } @SuppressWarnings("unused") - public static boolean same_temporal_temporal(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.same_temporal_temporal(temp1, temp2); + public static int ecovers_tcbuffer_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.ecovers_tcbuffer_geo(temp, gs); } @SuppressWarnings("unused") - public static boolean same_temporal_tstzspan(Pointer temp, Pointer s) { - return MeosLibrary.meos.same_temporal_tstzspan(temp, s); + public static int ecovers_tcbuffer_tcbuffer(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.ecovers_tcbuffer_tcbuffer(temp1, temp2); } @SuppressWarnings("unused") - public static boolean same_tnumber_numspan(Pointer temp, Pointer s) { - return MeosLibrary.meos.same_tnumber_numspan(temp, s); + public static int edisjoint_tcbuffer_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.edisjoint_tcbuffer_geo(temp, gs); } @SuppressWarnings("unused") - public static boolean same_tnumber_tbox(Pointer temp, Pointer box) { - return MeosLibrary.meos.same_tnumber_tbox(temp, box); + public static int edisjoint_tcbuffer_cbuffer(Pointer temp, Pointer cb) { + return MeosLibrary.meos.edisjoint_tcbuffer_cbuffer(temp, cb); } @SuppressWarnings("unused") - public static boolean same_tnumber_tnumber(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.same_tnumber_tnumber(temp1, temp2); + public static int edwithin_tcbuffer_geo(Pointer temp, Pointer gs, double dist) { + return MeosLibrary.meos.edwithin_tcbuffer_geo(temp, gs, dist); } @SuppressWarnings("unused") - public static boolean same_tpoint_stbox(Pointer temp, Pointer box) { - return MeosLibrary.meos.same_tpoint_stbox(temp, box); + public static int edwithin_tcbuffer_cbuffer(Pointer temp, Pointer cb, double dist) { + return MeosLibrary.meos.edwithin_tcbuffer_cbuffer(temp, cb, dist); } @SuppressWarnings("unused") - public static boolean same_tpoint_tpoint(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.same_tpoint_tpoint(temp1, temp2); + public static int edwithin_tcbuffer_tcbuffer(Pointer temp1, Pointer temp2, double dist) { + return MeosLibrary.meos.edwithin_tcbuffer_tcbuffer(temp1, temp2, dist); } @SuppressWarnings("unused") - public static boolean same_tstzspan_temporal(Pointer s, Pointer temp) { - return MeosLibrary.meos.same_tstzspan_temporal(s, temp); + public static int eintersects_tcbuffer_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.eintersects_tcbuffer_geo(temp, gs); } @SuppressWarnings("unused") - public static boolean above_stbox_tpoint(Pointer box, Pointer temp) { - return MeosLibrary.meos.above_stbox_tpoint(box, temp); + public static int eintersects_tcbuffer_cbuffer(Pointer temp, Pointer cb) { + return MeosLibrary.meos.eintersects_tcbuffer_cbuffer(temp, cb); } @SuppressWarnings("unused") - public static boolean above_tpoint_stbox(Pointer temp, Pointer box) { - return MeosLibrary.meos.above_tpoint_stbox(temp, box); + public static int eintersects_tcbuffer_tcbuffer(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.eintersects_tcbuffer_tcbuffer(temp1, temp2); } @SuppressWarnings("unused") - public static boolean above_tpoint_tpoint(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.above_tpoint_tpoint(temp1, temp2); + public static int etouches_tcbuffer_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.etouches_tcbuffer_geo(temp, gs); } @SuppressWarnings("unused") - public static boolean after_stbox_tpoint(Pointer box, Pointer temp) { - return MeosLibrary.meos.after_stbox_tpoint(box, temp); + public static int etouches_tcbuffer_cbuffer(Pointer temp, Pointer cb) { + return MeosLibrary.meos.etouches_tcbuffer_cbuffer(temp, cb); } @SuppressWarnings("unused") - public static boolean after_tbox_tnumber(Pointer box, Pointer temp) { - return MeosLibrary.meos.after_tbox_tnumber(box, temp); + public static int etouches_tcbuffer_tcbuffer(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.etouches_tcbuffer_tcbuffer(temp1, temp2); } @SuppressWarnings("unused") - public static boolean after_temporal_tstzspan(Pointer temp, Pointer s) { - return MeosLibrary.meos.after_temporal_tstzspan(temp, s); + public static Pointer tcontains_cbuffer_tcbuffer(Pointer cb, Pointer temp) { + return MeosLibrary.meos.tcontains_cbuffer_tcbuffer(cb, temp); } @SuppressWarnings("unused") - public static boolean after_temporal_temporal(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.after_temporal_temporal(temp1, temp2); + public static Pointer tcontains_geo_tcbuffer(Pointer gs, Pointer temp) { + return MeosLibrary.meos.tcontains_geo_tcbuffer(gs, temp); } @SuppressWarnings("unused") - public static boolean after_tnumber_tbox(Pointer temp, Pointer box) { - return MeosLibrary.meos.after_tnumber_tbox(temp, box); + public static Pointer tcontains_tcbuffer_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.tcontains_tcbuffer_geo(temp, gs); } @SuppressWarnings("unused") - public static boolean after_tnumber_tnumber(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.after_tnumber_tnumber(temp1, temp2); + public static Pointer tcontains_tcbuffer_cbuffer(Pointer temp, Pointer cb) { + return MeosLibrary.meos.tcontains_tcbuffer_cbuffer(temp, cb); } @SuppressWarnings("unused") - public static boolean after_tpoint_stbox(Pointer temp, Pointer box) { - return MeosLibrary.meos.after_tpoint_stbox(temp, box); + public static Pointer tcontains_tcbuffer_tcbuffer(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.tcontains_tcbuffer_tcbuffer(temp1, temp2); } @SuppressWarnings("unused") - public static boolean after_tpoint_tpoint(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.after_tpoint_tpoint(temp1, temp2); + public static Pointer tcovers_cbuffer_tcbuffer(Pointer cb, Pointer temp) { + return MeosLibrary.meos.tcovers_cbuffer_tcbuffer(cb, temp); } @SuppressWarnings("unused") - public static boolean after_tstzspan_temporal(Pointer s, Pointer temp) { - return MeosLibrary.meos.after_tstzspan_temporal(s, temp); + public static Pointer tcovers_geo_tcbuffer(Pointer gs, Pointer temp) { + return MeosLibrary.meos.tcovers_geo_tcbuffer(gs, temp); } @SuppressWarnings("unused") - public static boolean back_stbox_tpoint(Pointer box, Pointer temp) { - return MeosLibrary.meos.back_stbox_tpoint(box, temp); + public static Pointer tcovers_tcbuffer_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.tcovers_tcbuffer_geo(temp, gs); } @SuppressWarnings("unused") - public static boolean back_tpoint_stbox(Pointer temp, Pointer box) { - return MeosLibrary.meos.back_tpoint_stbox(temp, box); + public static Pointer tcovers_tcbuffer_cbuffer(Pointer temp, Pointer cb) { + return MeosLibrary.meos.tcovers_tcbuffer_cbuffer(temp, cb); } @SuppressWarnings("unused") - public static boolean back_tpoint_tpoint(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.back_tpoint_tpoint(temp1, temp2); + public static Pointer tcovers_tcbuffer_tcbuffer(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.tcovers_tcbuffer_tcbuffer(temp1, temp2); } @SuppressWarnings("unused") - public static boolean before_stbox_tpoint(Pointer box, Pointer temp) { - return MeosLibrary.meos.before_stbox_tpoint(box, temp); + public static Pointer tdwithin_geo_tcbuffer(Pointer gs, Pointer temp, double dist) { + return MeosLibrary.meos.tdwithin_geo_tcbuffer(gs, temp, dist); } @SuppressWarnings("unused") - public static boolean before_tbox_tnumber(Pointer box, Pointer temp) { - return MeosLibrary.meos.before_tbox_tnumber(box, temp); + public static Pointer tdwithin_tcbuffer_geo(Pointer temp, Pointer gs, double dist) { + return MeosLibrary.meos.tdwithin_tcbuffer_geo(temp, gs, dist); } @SuppressWarnings("unused") - public static boolean before_temporal_tstzspan(Pointer temp, Pointer s) { - return MeosLibrary.meos.before_temporal_tstzspan(temp, s); + public static Pointer tdwithin_tcbuffer_cbuffer(Pointer temp, Pointer cb, double dist) { + return MeosLibrary.meos.tdwithin_tcbuffer_cbuffer(temp, cb, dist); } @SuppressWarnings("unused") - public static boolean before_temporal_temporal(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.before_temporal_temporal(temp1, temp2); + public static Pointer tdwithin_tcbuffer_tcbuffer(Pointer temp1, Pointer temp2, double dist) { + return MeosLibrary.meos.tdwithin_tcbuffer_tcbuffer(temp1, temp2, dist); } @SuppressWarnings("unused") - public static boolean before_tnumber_tbox(Pointer temp, Pointer box) { - return MeosLibrary.meos.before_tnumber_tbox(temp, box); + public static Pointer tdisjoint_cbuffer_tcbuffer(Pointer cb, Pointer temp) { + return MeosLibrary.meos.tdisjoint_cbuffer_tcbuffer(cb, temp); } @SuppressWarnings("unused") - public static boolean before_tnumber_tnumber(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.before_tnumber_tnumber(temp1, temp2); + public static Pointer tdisjoint_geo_tcbuffer(Pointer gs, Pointer temp) { + return MeosLibrary.meos.tdisjoint_geo_tcbuffer(gs, temp); } @SuppressWarnings("unused") - public static boolean before_tpoint_stbox(Pointer temp, Pointer box) { - return MeosLibrary.meos.before_tpoint_stbox(temp, box); + public static Pointer tdisjoint_tcbuffer_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.tdisjoint_tcbuffer_geo(temp, gs); } @SuppressWarnings("unused") - public static boolean before_tpoint_tpoint(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.before_tpoint_tpoint(temp1, temp2); + public static Pointer tdisjoint_tcbuffer_cbuffer(Pointer temp, Pointer cb) { + return MeosLibrary.meos.tdisjoint_tcbuffer_cbuffer(temp, cb); } @SuppressWarnings("unused") - public static boolean before_tstzspan_temporal(Pointer s, Pointer temp) { - return MeosLibrary.meos.before_tstzspan_temporal(s, temp); + public static Pointer tdisjoint_tcbuffer_tcbuffer(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.tdisjoint_tcbuffer_tcbuffer(temp1, temp2); } @SuppressWarnings("unused") - public static boolean below_stbox_tpoint(Pointer box, Pointer temp) { - return MeosLibrary.meos.below_stbox_tpoint(box, temp); + public static Pointer tintersects_cbuffer_tcbuffer(Pointer cb, Pointer temp) { + return MeosLibrary.meos.tintersects_cbuffer_tcbuffer(cb, temp); } @SuppressWarnings("unused") - public static boolean below_tpoint_stbox(Pointer temp, Pointer box) { - return MeosLibrary.meos.below_tpoint_stbox(temp, box); + public static Pointer tintersects_geo_tcbuffer(Pointer gs, Pointer temp) { + return MeosLibrary.meos.tintersects_geo_tcbuffer(gs, temp); } @SuppressWarnings("unused") - public static boolean below_tpoint_tpoint(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.below_tpoint_tpoint(temp1, temp2); + public static Pointer tintersects_tcbuffer_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.tintersects_tcbuffer_geo(temp, gs); } @SuppressWarnings("unused") - public static boolean front_stbox_tpoint(Pointer box, Pointer temp) { - return MeosLibrary.meos.front_stbox_tpoint(box, temp); + public static Pointer tintersects_tcbuffer_cbuffer(Pointer temp, Pointer cb) { + return MeosLibrary.meos.tintersects_tcbuffer_cbuffer(temp, cb); } @SuppressWarnings("unused") - public static boolean front_tpoint_stbox(Pointer temp, Pointer box) { - return MeosLibrary.meos.front_tpoint_stbox(temp, box); + public static Pointer tintersects_tcbuffer_tcbuffer(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.tintersects_tcbuffer_tcbuffer(temp1, temp2); } @SuppressWarnings("unused") - public static boolean front_tpoint_tpoint(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.front_tpoint_tpoint(temp1, temp2); + public static Pointer ttouches_geo_tcbuffer(Pointer gs, Pointer temp) { + return MeosLibrary.meos.ttouches_geo_tcbuffer(gs, temp); } @SuppressWarnings("unused") - public static boolean left_stbox_tpoint(Pointer box, Pointer temp) { - return MeosLibrary.meos.left_stbox_tpoint(box, temp); + public static Pointer ttouches_tcbuffer_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.ttouches_tcbuffer_geo(temp, gs); } @SuppressWarnings("unused") - public static boolean left_tbox_tnumber(Pointer box, Pointer temp) { - return MeosLibrary.meos.left_tbox_tnumber(box, temp); + public static Pointer ttouches_cbuffer_tcbuffer(Pointer cb, Pointer temp) { + return MeosLibrary.meos.ttouches_cbuffer_tcbuffer(cb, temp); } @SuppressWarnings("unused") - public static boolean left_numspan_tnumber(Pointer s, Pointer temp) { - return MeosLibrary.meos.left_numspan_tnumber(s, temp); + public static Pointer ttouches_tcbuffer_cbuffer(Pointer temp, Pointer cb) { + return MeosLibrary.meos.ttouches_tcbuffer_cbuffer(temp, cb); } @SuppressWarnings("unused") - public static boolean left_tnumber_numspan(Pointer temp, Pointer s) { - return MeosLibrary.meos.left_tnumber_numspan(temp, s); + public static Pointer ttouches_tcbuffer_tcbuffer(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.ttouches_tcbuffer_tcbuffer(temp1, temp2); } @SuppressWarnings("unused") - public static boolean left_tnumber_tbox(Pointer temp, Pointer box) { - return MeosLibrary.meos.left_tnumber_tbox(temp, box); + public static String npoint_as_ewkt(Pointer np, int maxdd) { + return MeosLibrary.meos.npoint_as_ewkt(np, maxdd); } @SuppressWarnings("unused") - public static boolean left_tnumber_tnumber(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.left_tnumber_tnumber(temp1, temp2); + public static String npoint_as_hexwkb(Pointer np, byte variant) { + Runtime runtime = Runtime.getSystemRuntime(); + Pointer size_out = Memory.allocateDirect(runtime, Long.BYTES); + return MeosLibrary.meos.npoint_as_hexwkb(np, variant, size_out); } @SuppressWarnings("unused") - public static boolean left_tpoint_stbox(Pointer temp, Pointer box) { - return MeosLibrary.meos.left_tpoint_stbox(temp, box); + public static String npoint_as_text(Pointer np, int maxdd) { + return MeosLibrary.meos.npoint_as_text(np, maxdd); } @SuppressWarnings("unused") - public static boolean left_tpoint_tpoint(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.left_tpoint_tpoint(temp1, temp2); + public static Pointer npoint_as_wkb(Pointer np, byte variant) { + Runtime runtime = Runtime.getSystemRuntime(); + Pointer size_out = Memory.allocateDirect(runtime, Long.BYTES); + return MeosLibrary.meos.npoint_as_wkb(np, variant, size_out); } @SuppressWarnings("unused") - public static boolean overabove_stbox_tpoint(Pointer box, Pointer temp) { - return MeosLibrary.meos.overabove_stbox_tpoint(box, temp); + public static Pointer npoint_from_hexwkb(String hexwkb) { + return MeosLibrary.meos.npoint_from_hexwkb(hexwkb); } @SuppressWarnings("unused") - public static boolean overabove_tpoint_stbox(Pointer temp, Pointer box) { - return MeosLibrary.meos.overabove_tpoint_stbox(temp, box); + public static Pointer npoint_from_wkb(Pointer wkb, long size) { + return MeosLibrary.meos.npoint_from_wkb(wkb, size); } @SuppressWarnings("unused") - public static boolean overabove_tpoint_tpoint(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.overabove_tpoint_tpoint(temp1, temp2); + public static Pointer npoint_in(String str) { + return MeosLibrary.meos.npoint_in(str); } @SuppressWarnings("unused") - public static boolean overafter_stbox_tpoint(Pointer box, Pointer temp) { - return MeosLibrary.meos.overafter_stbox_tpoint(box, temp); + public static String npoint_out(Pointer np, int maxdd) { + return MeosLibrary.meos.npoint_out(np, maxdd); } @SuppressWarnings("unused") - public static boolean overafter_tbox_tnumber(Pointer box, Pointer temp) { - return MeosLibrary.meos.overafter_tbox_tnumber(box, temp); + public static Pointer nsegment_in(String str) { + return MeosLibrary.meos.nsegment_in(str); } @SuppressWarnings("unused") - public static boolean overafter_temporal_tstzspan(Pointer temp, Pointer s) { - return MeosLibrary.meos.overafter_temporal_tstzspan(temp, s); + public static String nsegment_out(Pointer ns, int maxdd) { + return MeosLibrary.meos.nsegment_out(ns, maxdd); } @SuppressWarnings("unused") - public static boolean overafter_temporal_temporal(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.overafter_temporal_temporal(temp1, temp2); + public static Pointer npoint_make(long rid, double pos) { + return MeosLibrary.meos.npoint_make(rid, pos); } @SuppressWarnings("unused") - public static boolean overafter_tnumber_tbox(Pointer temp, Pointer box) { - return MeosLibrary.meos.overafter_tnumber_tbox(temp, box); + public static Pointer nsegment_make(long rid, double pos1, double pos2) { + return MeosLibrary.meos.nsegment_make(rid, pos1, pos2); } @SuppressWarnings("unused") - public static boolean overafter_tnumber_tnumber(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.overafter_tnumber_tnumber(temp1, temp2); + public static Pointer geompoint_to_npoint(Pointer gs) { + return MeosLibrary.meos.geompoint_to_npoint(gs); } @SuppressWarnings("unused") - public static boolean overafter_tpoint_stbox(Pointer temp, Pointer box) { - return MeosLibrary.meos.overafter_tpoint_stbox(temp, box); + public static Pointer geom_to_nsegment(Pointer gs) { + return MeosLibrary.meos.geom_to_nsegment(gs); } @SuppressWarnings("unused") - public static boolean overafter_tpoint_tpoint(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.overafter_tpoint_tpoint(temp1, temp2); + public static Pointer npoint_to_geompoint(Pointer np) { + return MeosLibrary.meos.npoint_to_geompoint(np); } @SuppressWarnings("unused") - public static boolean overafter_tstzspan_temporal(Pointer s, Pointer temp) { - return MeosLibrary.meos.overafter_tstzspan_temporal(s, temp); + public static Pointer npoint_to_nsegment(Pointer np) { + return MeosLibrary.meos.npoint_to_nsegment(np); } @SuppressWarnings("unused") - public static boolean overback_stbox_tpoint(Pointer box, Pointer temp) { - return MeosLibrary.meos.overback_stbox_tpoint(box, temp); + public static Pointer npoint_to_stbox(Pointer np) { + return MeosLibrary.meos.npoint_to_stbox(np); } @SuppressWarnings("unused") - public static boolean overback_tpoint_stbox(Pointer temp, Pointer box) { - return MeosLibrary.meos.overback_tpoint_stbox(temp, box); + public static Pointer nsegment_to_geom(Pointer ns) { + return MeosLibrary.meos.nsegment_to_geom(ns); } @SuppressWarnings("unused") - public static boolean overback_tpoint_tpoint(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.overback_tpoint_tpoint(temp1, temp2); + public static Pointer nsegment_to_stbox(Pointer np) { + return MeosLibrary.meos.nsegment_to_stbox(np); } @SuppressWarnings("unused") - public static boolean overbefore_stbox_tpoint(Pointer box, Pointer temp) { - return MeosLibrary.meos.overbefore_stbox_tpoint(box, temp); + public static int npoint_hash(Pointer np) { + return MeosLibrary.meos.npoint_hash(np); } @SuppressWarnings("unused") - public static boolean overbefore_tbox_tnumber(Pointer box, Pointer temp) { - return MeosLibrary.meos.overbefore_tbox_tnumber(box, temp); + public static long npoint_hash_extended(Pointer np, long seed) { + return MeosLibrary.meos.npoint_hash_extended(np, seed); } @SuppressWarnings("unused") - public static boolean overbefore_temporal_tstzspan(Pointer temp, Pointer s) { - return MeosLibrary.meos.overbefore_temporal_tstzspan(temp, s); + public static double npoint_position(Pointer np) { + return MeosLibrary.meos.npoint_position(np); } @SuppressWarnings("unused") - public static boolean overbefore_temporal_temporal(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.overbefore_temporal_temporal(temp1, temp2); + public static long npoint_route(Pointer np) { + return MeosLibrary.meos.npoint_route(np); } @SuppressWarnings("unused") - public static boolean overbefore_tnumber_tbox(Pointer temp, Pointer box) { - return MeosLibrary.meos.overbefore_tnumber_tbox(temp, box); + public static double nsegment_end_position(Pointer ns) { + return MeosLibrary.meos.nsegment_end_position(ns); } @SuppressWarnings("unused") - public static boolean overbefore_tnumber_tnumber(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.overbefore_tnumber_tnumber(temp1, temp2); + public static long nsegment_route(Pointer ns) { + return MeosLibrary.meos.nsegment_route(ns); } @SuppressWarnings("unused") - public static boolean overbefore_tpoint_stbox(Pointer temp, Pointer box) { - return MeosLibrary.meos.overbefore_tpoint_stbox(temp, box); + public static double nsegment_start_position(Pointer ns) { + return MeosLibrary.meos.nsegment_start_position(ns); } @SuppressWarnings("unused") - public static boolean overbefore_tpoint_tpoint(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.overbefore_tpoint_tpoint(temp1, temp2); + public static boolean route_exists(long rid) { + return MeosLibrary.meos.route_exists(rid); } @SuppressWarnings("unused") - public static boolean overbefore_tstzspan_temporal(Pointer s, Pointer temp) { - return MeosLibrary.meos.overbefore_tstzspan_temporal(s, temp); + public static Pointer route_geom(long rid) { + return MeosLibrary.meos.route_geom(rid); } @SuppressWarnings("unused") - public static boolean overbelow_stbox_tpoint(Pointer box, Pointer temp) { - return MeosLibrary.meos.overbelow_stbox_tpoint(box, temp); + public static double route_length(long rid) { + return MeosLibrary.meos.route_length(rid); } @SuppressWarnings("unused") - public static boolean overbelow_tpoint_stbox(Pointer temp, Pointer box) { - return MeosLibrary.meos.overbelow_tpoint_stbox(temp, box); + public static Pointer npoint_round(Pointer np, int maxdd) { + return MeosLibrary.meos.npoint_round(np, maxdd); } @SuppressWarnings("unused") - public static boolean overbelow_tpoint_tpoint(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.overbelow_tpoint_tpoint(temp1, temp2); + public static Pointer nsegment_round(Pointer ns, int maxdd) { + return MeosLibrary.meos.nsegment_round(ns, maxdd); } @SuppressWarnings("unused") - public static boolean overfront_stbox_tpoint(Pointer box, Pointer temp) { - return MeosLibrary.meos.overfront_stbox_tpoint(box, temp); + public static int get_srid_ways() { + return MeosLibrary.meos.get_srid_ways(); } @SuppressWarnings("unused") - public static boolean overfront_tpoint_stbox(Pointer temp, Pointer box) { - return MeosLibrary.meos.overfront_tpoint_stbox(temp, box); + public static int npoint_srid(Pointer np) { + return MeosLibrary.meos.npoint_srid(np); } @SuppressWarnings("unused") - public static boolean overfront_tpoint_tpoint(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.overfront_tpoint_tpoint(temp1, temp2); + public static int nsegment_srid(Pointer ns) { + return MeosLibrary.meos.nsegment_srid(ns); } @SuppressWarnings("unused") - public static boolean overleft_numspan_tnumber(Pointer s, Pointer temp) { - return MeosLibrary.meos.overleft_numspan_tnumber(s, temp); + public static Pointer npoint_timestamptz_to_stbox(Pointer np, OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.npoint_timestamptz_to_stbox(np, t_new); } @SuppressWarnings("unused") - public static boolean overleft_stbox_tpoint(Pointer box, Pointer temp) { - return MeosLibrary.meos.overleft_stbox_tpoint(box, temp); + public static Pointer npoint_tstzspan_to_stbox(Pointer np, Pointer s) { + return MeosLibrary.meos.npoint_tstzspan_to_stbox(np, s); } @SuppressWarnings("unused") - public static boolean overleft_tbox_tnumber(Pointer box, Pointer temp) { - return MeosLibrary.meos.overleft_tbox_tnumber(box, temp); + public static int npoint_cmp(Pointer np1, Pointer np2) { + return MeosLibrary.meos.npoint_cmp(np1, np2); } @SuppressWarnings("unused") - public static boolean overleft_tnumber_numspan(Pointer temp, Pointer s) { - return MeosLibrary.meos.overleft_tnumber_numspan(temp, s); + public static boolean npoint_eq(Pointer np1, Pointer np2) { + return MeosLibrary.meos.npoint_eq(np1, np2); } @SuppressWarnings("unused") - public static boolean overleft_tnumber_tbox(Pointer temp, Pointer box) { - return MeosLibrary.meos.overleft_tnumber_tbox(temp, box); + public static boolean npoint_ge(Pointer np1, Pointer np2) { + return MeosLibrary.meos.npoint_ge(np1, np2); } @SuppressWarnings("unused") - public static boolean overleft_tnumber_tnumber(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.overleft_tnumber_tnumber(temp1, temp2); + public static boolean npoint_gt(Pointer np1, Pointer np2) { + return MeosLibrary.meos.npoint_gt(np1, np2); } @SuppressWarnings("unused") - public static boolean overleft_tpoint_stbox(Pointer temp, Pointer box) { - return MeosLibrary.meos.overleft_tpoint_stbox(temp, box); + public static boolean npoint_le(Pointer np1, Pointer np2) { + return MeosLibrary.meos.npoint_le(np1, np2); } @SuppressWarnings("unused") - public static boolean overleft_tpoint_tpoint(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.overleft_tpoint_tpoint(temp1, temp2); + public static boolean npoint_lt(Pointer np1, Pointer np2) { + return MeosLibrary.meos.npoint_lt(np1, np2); } @SuppressWarnings("unused") - public static boolean overright_numspan_tnumber(Pointer s, Pointer temp) { - return MeosLibrary.meos.overright_numspan_tnumber(s, temp); + public static boolean npoint_ne(Pointer np1, Pointer np2) { + return MeosLibrary.meos.npoint_ne(np1, np2); } @SuppressWarnings("unused") - public static boolean overright_stbox_tpoint(Pointer box, Pointer temp) { - return MeosLibrary.meos.overright_stbox_tpoint(box, temp); + public static boolean npoint_same(Pointer np1, Pointer np2) { + return MeosLibrary.meos.npoint_same(np1, np2); } @SuppressWarnings("unused") - public static boolean overright_tbox_tnumber(Pointer box, Pointer temp) { - return MeosLibrary.meos.overright_tbox_tnumber(box, temp); + public static int nsegment_cmp(Pointer ns1, Pointer ns2) { + return MeosLibrary.meos.nsegment_cmp(ns1, ns2); } @SuppressWarnings("unused") - public static boolean overright_tnumber_numspan(Pointer temp, Pointer s) { - return MeosLibrary.meos.overright_tnumber_numspan(temp, s); + public static boolean nsegment_eq(Pointer ns1, Pointer ns2) { + return MeosLibrary.meos.nsegment_eq(ns1, ns2); } @SuppressWarnings("unused") - public static boolean overright_tnumber_tbox(Pointer temp, Pointer box) { - return MeosLibrary.meos.overright_tnumber_tbox(temp, box); + public static boolean nsegment_ge(Pointer ns1, Pointer ns2) { + return MeosLibrary.meos.nsegment_ge(ns1, ns2); } @SuppressWarnings("unused") - public static boolean overright_tnumber_tnumber(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.overright_tnumber_tnumber(temp1, temp2); + public static boolean nsegment_gt(Pointer ns1, Pointer ns2) { + return MeosLibrary.meos.nsegment_gt(ns1, ns2); } @SuppressWarnings("unused") - public static boolean overright_tpoint_stbox(Pointer temp, Pointer box) { - return MeosLibrary.meos.overright_tpoint_stbox(temp, box); + public static boolean nsegment_le(Pointer ns1, Pointer ns2) { + return MeosLibrary.meos.nsegment_le(ns1, ns2); } @SuppressWarnings("unused") - public static boolean overright_tpoint_tpoint(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.overright_tpoint_tpoint(temp1, temp2); + public static boolean nsegment_lt(Pointer ns1, Pointer ns2) { + return MeosLibrary.meos.nsegment_lt(ns1, ns2); } @SuppressWarnings("unused") - public static boolean right_numspan_tnumber(Pointer s, Pointer temp) { - return MeosLibrary.meos.right_numspan_tnumber(s, temp); + public static boolean nsegment_ne(Pointer ns1, Pointer ns2) { + return MeosLibrary.meos.nsegment_ne(ns1, ns2); } @SuppressWarnings("unused") - public static boolean right_stbox_tpoint(Pointer box, Pointer temp) { - return MeosLibrary.meos.right_stbox_tpoint(box, temp); + public static Pointer npointset_in(String str) { + return MeosLibrary.meos.npointset_in(str); } @SuppressWarnings("unused") - public static boolean right_tbox_tnumber(Pointer box, Pointer temp) { - return MeosLibrary.meos.right_tbox_tnumber(box, temp); + public static String npointset_out(Pointer s, int maxdd) { + return MeosLibrary.meos.npointset_out(s, maxdd); } @SuppressWarnings("unused") - public static boolean right_tnumber_numspan(Pointer temp, Pointer s) { - return MeosLibrary.meos.right_tnumber_numspan(temp, s); + public static Pointer npointset_make(Pointer values, int count) { + return MeosLibrary.meos.npointset_make(values, count); } @SuppressWarnings("unused") - public static boolean right_tnumber_tbox(Pointer temp, Pointer box) { - return MeosLibrary.meos.right_tnumber_tbox(temp, box); + public static Pointer npoint_to_set(Pointer np) { + return MeosLibrary.meos.npoint_to_set(np); } @SuppressWarnings("unused") - public static boolean right_tnumber_tnumber(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.right_tnumber_tnumber(temp1, temp2); + public static Pointer npointset_end_value(Pointer s) { + return MeosLibrary.meos.npointset_end_value(s); } @SuppressWarnings("unused") - public static boolean right_tpoint_stbox(Pointer temp, Pointer box) { - return MeosLibrary.meos.right_tpoint_stbox(temp, box); + public static Pointer npointset_routes(Pointer s) { + return MeosLibrary.meos.npointset_routes(s); } @SuppressWarnings("unused") - public static boolean right_tpoint_tpoint(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.right_tpoint_tpoint(temp1, temp2); + public static Pointer npointset_start_value(Pointer s) { + return MeosLibrary.meos.npointset_start_value(s); } - + @SuppressWarnings("unused") - public static boolean above_tspatial_tspatial(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.above_tspatial_tspatial(temp1, temp2); + public static Pointer npointset_value_n(Pointer s, int n) { + boolean out; + Runtime runtime = Runtime.getSystemRuntime(); + Pointer result = Memory.allocateDirect(runtime, Long.BYTES); + out = MeosLibrary.meos.npointset_value_n(s, n, result); + Pointer new_result = result.getPointer(0); + return out ? new_result : null ; } + @SuppressWarnings("unused") - public static boolean back_tspatial_tspatial(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.back_tspatial_tspatial(temp1, temp2); + public static Pointer npointset_values(Pointer s) { + return MeosLibrary.meos.npointset_values(s); } + @SuppressWarnings("unused") - public static boolean before_tspatial_tspatial(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.before_tspatial_tspatial(temp1, temp2); + public static boolean contained_npoint_set(Pointer np, Pointer s) { + return MeosLibrary.meos.contained_npoint_set(np, s); } + @SuppressWarnings("unused") - public static boolean below_tspatial_tspatial(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.below_tspatial_tspatial(temp1, temp2); + public static boolean contains_set_npoint(Pointer s, Pointer np) { + return MeosLibrary.meos.contains_set_npoint(s, np); } + @SuppressWarnings("unused") - public static boolean front_tspatial_tspatial(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.front_tspatial_tspatial(temp1, temp2); + public static Pointer intersection_npoint_set(Pointer np, Pointer s) { + return MeosLibrary.meos.intersection_npoint_set(np, s); } + @SuppressWarnings("unused") - public static boolean left_tspatial_tspatial(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.left_tspatial_tspatial(temp1, temp2); + public static Pointer intersection_set_npoint(Pointer s, Pointer np) { + return MeosLibrary.meos.intersection_set_npoint(s, np); } + @SuppressWarnings("unused") - public static boolean overabove_tspatial_tspatial(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.overabove_tspatial_tspatial(temp1, temp2); + public static Pointer minus_npoint_set(Pointer np, Pointer s) { + return MeosLibrary.meos.minus_npoint_set(np, s); } + @SuppressWarnings("unused") - public static boolean overafter_tspatial_tspatial(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.overafter_tspatial_tspatial(temp1, temp2); + public static Pointer minus_set_npoint(Pointer s, Pointer np) { + return MeosLibrary.meos.minus_set_npoint(s, np); } + @SuppressWarnings("unused") - public static boolean overback_tspatial_tspatial(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.overback_tspatial_tspatial(temp1, temp2); + public static Pointer npoint_union_transfn(Pointer state, Pointer np) { + return MeosLibrary.meos.npoint_union_transfn(state, np); } + @SuppressWarnings("unused") - public static boolean overbefore_tspatial_tspatial(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.overbefore_tspatial_tspatial(temp1, temp2); + public static Pointer union_npoint_set(Pointer np, Pointer s) { + return MeosLibrary.meos.union_npoint_set(np, s); } + @SuppressWarnings("unused") - public static boolean overbelow_tspatial_tspatial(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.overbelow_tspatial_tspatial(temp1, temp2); + public static Pointer union_set_npoint(Pointer s, Pointer np) { + return MeosLibrary.meos.union_set_npoint(s, np); } + @SuppressWarnings("unused") - public static boolean overfront_tspatial_tspatial(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.overfront_tspatial_tspatial(temp1, temp2); + public static Pointer tnpoint_in(String str) { + return MeosLibrary.meos.tnpoint_in(str); } + @SuppressWarnings("unused") - public static boolean overleft_tspatial_tspatial(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.overleft_tspatial_tspatial(temp1, temp2); + public static String tnpoint_out(Pointer temp, int maxdd) { + return MeosLibrary.meos.tnpoint_out(temp, maxdd); } + @SuppressWarnings("unused") - public static boolean overright_tspatial_tspatial(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.overright_tspatial_tspatial(temp1, temp2); + public static Pointer tnpointinst_make(Pointer np, OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.tnpointinst_make(np, t_new); } + @SuppressWarnings("unused") - public static boolean right_tspatial_tspatial(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.right_tspatial_tspatial(temp1, temp2); + public static Pointer tgeompoint_to_tnpoint(Pointer temp) { + return MeosLibrary.meos.tgeompoint_to_tnpoint(temp); } - + @SuppressWarnings("unused") - public static Pointer tand_bool_tbool(boolean b, Pointer temp) { - return MeosLibrary.meos.tand_bool_tbool(b, temp); + public static Pointer tnpoint_to_tgeompoint(Pointer temp) { + return MeosLibrary.meos.tnpoint_to_tgeompoint(temp); } @SuppressWarnings("unused") - public static Pointer tand_tbool_bool(Pointer temp, boolean b) { - return MeosLibrary.meos.tand_tbool_bool(temp, b); + public static Pointer tnpoint_cumulative_length(Pointer temp) { + return MeosLibrary.meos.tnpoint_cumulative_length(temp); } @SuppressWarnings("unused") - public static Pointer tand_tbool_tbool(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.tand_tbool_tbool(temp1, temp2); + public static double tnpoint_length(Pointer temp) { + return MeosLibrary.meos.tnpoint_length(temp); } @SuppressWarnings("unused") - public static Pointer tbool_when_true(Pointer temp) { - return MeosLibrary.meos.tbool_when_true(temp); + public static Pointer tnpoint_positions(Pointer temp, Pointer count) { + return MeosLibrary.meos.tnpoint_positions(temp, count); } @SuppressWarnings("unused") - public static Pointer tnot_tbool(Pointer temp) { - return MeosLibrary.meos.tnot_tbool(temp); + public static long tnpoint_route(Pointer temp) { + return MeosLibrary.meos.tnpoint_route(temp); } @SuppressWarnings("unused") - public static Pointer tor_bool_tbool(boolean b, Pointer temp) { - return MeosLibrary.meos.tor_bool_tbool(b, temp); + public static Pointer tnpoint_routes(Pointer temp) { + return MeosLibrary.meos.tnpoint_routes(temp); } @SuppressWarnings("unused") - public static Pointer tor_tbool_bool(Pointer temp, boolean b) { - return MeosLibrary.meos.tor_tbool_bool(temp, b); + public static Pointer tnpoint_speed(Pointer temp) { + return MeosLibrary.meos.tnpoint_speed(temp); } @SuppressWarnings("unused") - public static Pointer tor_tbool_tbool(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.tor_tbool_tbool(temp1, temp2); + public static Pointer tnpoint_trajectory(Pointer temp) { + return MeosLibrary.meos.tnpoint_trajectory(temp); } @SuppressWarnings("unused") - public static Pointer add_float_tfloat(double d, Pointer tnumber) { - return MeosLibrary.meos.add_float_tfloat(d, tnumber); + public static Pointer tnpoint_twcentroid(Pointer temp) { + return MeosLibrary.meos.tnpoint_twcentroid(temp); } @SuppressWarnings("unused") - public static Pointer add_int_tint(int i, Pointer tnumber) { - return MeosLibrary.meos.add_int_tint(i, tnumber); + public static Pointer tnpoint_at_geom(Pointer temp, Pointer gs) { + return MeosLibrary.meos.tnpoint_at_geom(temp, gs); } @SuppressWarnings("unused") - public static Pointer add_tfloat_float(Pointer tnumber, double d) { - return MeosLibrary.meos.add_tfloat_float(tnumber, d); + public static Pointer tnpoint_at_npoint(Pointer temp, Pointer np) { + return MeosLibrary.meos.tnpoint_at_npoint(temp, np); } @SuppressWarnings("unused") - public static Pointer add_tint_int(Pointer tnumber, int i) { - return MeosLibrary.meos.add_tint_int(tnumber, i); + public static Pointer tnpoint_at_npointset(Pointer temp, Pointer s) { + return MeosLibrary.meos.tnpoint_at_npointset(temp, s); } @SuppressWarnings("unused") - public static Pointer add_tnumber_tnumber(Pointer tnumber1, Pointer tnumber2) { - return MeosLibrary.meos.add_tnumber_tnumber(tnumber1, tnumber2); + public static Pointer tnpoint_at_stbox(Pointer temp, Pointer box, boolean border_inc) { + return MeosLibrary.meos.tnpoint_at_stbox(temp, box, border_inc); } @SuppressWarnings("unused") - public static Pointer div_float_tfloat(double d, Pointer tnumber) { - return MeosLibrary.meos.div_float_tfloat(d, tnumber); + public static Pointer tnpoint_minus_geom(Pointer temp, Pointer gs) { + return MeosLibrary.meos.tnpoint_minus_geom(temp, gs); } @SuppressWarnings("unused") - public static Pointer div_int_tint(int i, Pointer tnumber) { - return MeosLibrary.meos.div_int_tint(i, tnumber); + public static Pointer tnpoint_minus_npoint(Pointer temp, Pointer np) { + return MeosLibrary.meos.tnpoint_minus_npoint(temp, np); } @SuppressWarnings("unused") - public static Pointer div_tfloat_float(Pointer tnumber, double d) { - return MeosLibrary.meos.div_tfloat_float(tnumber, d); + public static Pointer tnpoint_minus_npointset(Pointer temp, Pointer s) { + return MeosLibrary.meos.tnpoint_minus_npointset(temp, s); } @SuppressWarnings("unused") - public static Pointer div_tint_int(Pointer tnumber, int i) { - return MeosLibrary.meos.div_tint_int(tnumber, i); + public static Pointer tnpoint_minus_stbox(Pointer temp, Pointer box, boolean border_inc) { + return MeosLibrary.meos.tnpoint_minus_stbox(temp, box, border_inc); } @SuppressWarnings("unused") - public static Pointer div_tnumber_tnumber(Pointer tnumber1, Pointer tnumber2) { - return MeosLibrary.meos.div_tnumber_tnumber(tnumber1, tnumber2); + public static Pointer tdistance_tnpoint_npoint(Pointer temp, Pointer np) { + return MeosLibrary.meos.tdistance_tnpoint_npoint(temp, np); } @SuppressWarnings("unused") - public static Pointer mult_float_tfloat(double d, Pointer tnumber) { - return MeosLibrary.meos.mult_float_tfloat(d, tnumber); + public static Pointer tdistance_tnpoint_point(Pointer temp, Pointer gs) { + return MeosLibrary.meos.tdistance_tnpoint_point(temp, gs); } @SuppressWarnings("unused") - public static Pointer mult_int_tint(int i, Pointer tnumber) { - return MeosLibrary.meos.mult_int_tint(i, tnumber); + public static Pointer tdistance_tnpoint_tnpoint(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.tdistance_tnpoint_tnpoint(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer mult_tfloat_float(Pointer tnumber, double d) { - return MeosLibrary.meos.mult_tfloat_float(tnumber, d); + public static double nad_tnpoint_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.nad_tnpoint_geo(temp, gs); } @SuppressWarnings("unused") - public static Pointer mult_tint_int(Pointer tnumber, int i) { - return MeosLibrary.meos.mult_tint_int(tnumber, i); + public static double nad_tnpoint_npoint(Pointer temp, Pointer np) { + return MeosLibrary.meos.nad_tnpoint_npoint(temp, np); } @SuppressWarnings("unused") - public static Pointer mult_tnumber_tnumber(Pointer tnumber1, Pointer tnumber2) { - return MeosLibrary.meos.mult_tnumber_tnumber(tnumber1, tnumber2); + public static double nad_tnpoint_stbox(Pointer temp, Pointer box) { + return MeosLibrary.meos.nad_tnpoint_stbox(temp, box); } @SuppressWarnings("unused") - public static Pointer sub_float_tfloat(double d, Pointer tnumber) { - return MeosLibrary.meos.sub_float_tfloat(d, tnumber); + public static double nad_tnpoint_tnpoint(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.nad_tnpoint_tnpoint(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer sub_int_tint(int i, Pointer tnumber) { - return MeosLibrary.meos.sub_int_tint(i, tnumber); + public static Pointer nai_tnpoint_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.nai_tnpoint_geo(temp, gs); } @SuppressWarnings("unused") - public static Pointer sub_tfloat_float(Pointer tnumber, double d) { - return MeosLibrary.meos.sub_tfloat_float(tnumber, d); + public static Pointer nai_tnpoint_npoint(Pointer temp, Pointer np) { + return MeosLibrary.meos.nai_tnpoint_npoint(temp, np); } @SuppressWarnings("unused") - public static Pointer sub_tint_int(Pointer tnumber, int i) { - return MeosLibrary.meos.sub_tint_int(tnumber, i); + public static Pointer nai_tnpoint_tnpoint(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.nai_tnpoint_tnpoint(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer sub_tnumber_tnumber(Pointer tnumber1, Pointer tnumber2) { - return MeosLibrary.meos.sub_tnumber_tnumber(tnumber1, tnumber2); + public static Pointer shortestline_tnpoint_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.shortestline_tnpoint_geo(temp, gs); } @SuppressWarnings("unused") - public static Pointer temporal_derivative(Pointer temp) { - return MeosLibrary.meos.temporal_derivative(temp); + public static Pointer shortestline_tnpoint_npoint(Pointer temp, Pointer np) { + return MeosLibrary.meos.shortestline_tnpoint_npoint(temp, np); } @SuppressWarnings("unused") - public static Pointer tnumber_abs(Pointer temp) { - return MeosLibrary.meos.tnumber_abs(temp); + public static Pointer shortestline_tnpoint_tnpoint(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.shortestline_tnpoint_tnpoint(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer tnumber_angular_difference(Pointer temp) { - return MeosLibrary.meos.tnumber_angular_difference(temp); + public static Pointer tnpoint_tcentroid_transfn(Pointer state, Pointer temp) { + return MeosLibrary.meos.tnpoint_tcentroid_transfn(state, temp); } @SuppressWarnings("unused") - public static Pointer tnumber_delta_value(Pointer temp) { - return MeosLibrary.meos.tnumber_delta_value(temp); + public static int always_eq_npoint_tnpoint(Pointer np, Pointer temp) { + return MeosLibrary.meos.always_eq_npoint_tnpoint(np, temp); } @SuppressWarnings("unused") - public static Pointer textcat_text_ttext(Pointer txt, Pointer temp) { - return MeosLibrary.meos.textcat_text_ttext(txt, temp); + public static int always_eq_tnpoint_npoint(Pointer temp, Pointer np) { + return MeosLibrary.meos.always_eq_tnpoint_npoint(temp, np); } @SuppressWarnings("unused") - public static Pointer textcat_ttext_text(Pointer temp, Pointer txt) { - return MeosLibrary.meos.textcat_ttext_text(temp, txt); + public static int always_eq_tnpoint_tnpoint(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.always_eq_tnpoint_tnpoint(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer textcat_ttext_ttext(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.textcat_ttext_ttext(temp1, temp2); + public static int always_ne_npoint_tnpoint(Pointer np, Pointer temp) { + return MeosLibrary.meos.always_ne_npoint_tnpoint(np, temp); } @SuppressWarnings("unused") - public static Pointer ttext_upper(Pointer temp) { - return MeosLibrary.meos.ttext_upper(temp); + public static int always_ne_tnpoint_npoint(Pointer temp, Pointer np) { + return MeosLibrary.meos.always_ne_tnpoint_npoint(temp, np); } @SuppressWarnings("unused") - public static Pointer ttext_lower(Pointer temp) { - return MeosLibrary.meos.ttext_lower(temp); + public static int always_ne_tnpoint_tnpoint(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.always_ne_tnpoint_tnpoint(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer ttext_initcap(Pointer temp) { - return MeosLibrary.meos.ttext_initcap(temp); + public static int ever_eq_npoint_tnpoint(Pointer np, Pointer temp) { + return MeosLibrary.meos.ever_eq_npoint_tnpoint(np, temp); } @SuppressWarnings("unused") - public static Pointer distance_tfloat_float(Pointer temp, double d) { - return MeosLibrary.meos.distance_tfloat_float(temp, d); + public static int ever_eq_tnpoint_npoint(Pointer temp, Pointer np) { + return MeosLibrary.meos.ever_eq_tnpoint_npoint(temp, np); } @SuppressWarnings("unused") - public static Pointer distance_tint_int(Pointer temp, int i) { - return MeosLibrary.meos.distance_tint_int(temp, i); + public static int ever_eq_tnpoint_tnpoint(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.ever_eq_tnpoint_tnpoint(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer distance_tnumber_tnumber(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.distance_tnumber_tnumber(temp1, temp2); + public static int ever_ne_npoint_tnpoint(Pointer np, Pointer temp) { + return MeosLibrary.meos.ever_ne_npoint_tnpoint(np, temp); } @SuppressWarnings("unused") - public static Pointer distance_tpoint_point(Pointer temp, Pointer gs) { - return MeosLibrary.meos.distance_tpoint_point(temp, gs); + public static int ever_ne_tnpoint_npoint(Pointer temp, Pointer np) { + return MeosLibrary.meos.ever_ne_tnpoint_npoint(temp, np); } @SuppressWarnings("unused") - public static Pointer distance_tpoint_tpoint(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.distance_tpoint_tpoint(temp1, temp2); + public static int ever_ne_tnpoint_tnpoint(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.ever_ne_tnpoint_tnpoint(temp1, temp2); } @SuppressWarnings("unused") - public static double nad_stbox_geo(Pointer box, Pointer gs) { - return MeosLibrary.meos.nad_stbox_geo(box, gs); + public static Pointer teq_tnpoint_npoint(Pointer temp, Pointer np) { + return MeosLibrary.meos.teq_tnpoint_npoint(temp, np); } @SuppressWarnings("unused") - public static double nad_stbox_stbox(Pointer box1, Pointer box2) { - return MeosLibrary.meos.nad_stbox_stbox(box1, box2); + public static Pointer tne_tnpoint_npoint(Pointer temp, Pointer np) { + return MeosLibrary.meos.tne_tnpoint_npoint(temp, np); } @SuppressWarnings("unused") - public static int nad_tint_int(Pointer temp, int i) { - return MeosLibrary.meos.nad_tint_int(temp, i); + public static String pose_as_ewkt(Pointer pose, int maxdd) { + return MeosLibrary.meos.pose_as_ewkt(pose, maxdd); } @SuppressWarnings("unused") - public static int nad_tint_tbox(Pointer temp, Pointer box) { - return MeosLibrary.meos.nad_tint_tbox(temp, box); + public static String pose_as_hexwkb(Pointer pose, byte variant, Pointer size) { + return MeosLibrary.meos.pose_as_hexwkb(pose, variant, size); } @SuppressWarnings("unused") - public static int nad_tint_tint(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.nad_tint_tint(temp1, temp2); + public static String pose_as_text(Pointer pose, int maxdd) { + return MeosLibrary.meos.pose_as_text(pose, maxdd); } @SuppressWarnings("unused") - public static int nad_tboxint_tboxint(Pointer box1, Pointer box2) { - return MeosLibrary.meos.nad_tboxint_tboxint(box1, box2); + public static Pointer pose_as_wkb(Pointer pose, byte variant) { + Runtime runtime = Runtime.getSystemRuntime(); + Pointer size_out = Memory.allocateDirect(runtime, Long.BYTES); + return MeosLibrary.meos.pose_as_wkb(pose, variant, size_out); } @SuppressWarnings("unused") - public static double nad_tfloat_float(Pointer temp, double d) { - return MeosLibrary.meos.nad_tfloat_float(temp, d); + public static Pointer pose_from_wkb(Pointer wkb, long size) { + return MeosLibrary.meos.pose_from_wkb(wkb, size); } @SuppressWarnings("unused") - public static double nad_tfloat_tfloat(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.nad_tfloat_tfloat(temp1, temp2); + public static Pointer pose_from_hexwkb(String hexwkb) { + return MeosLibrary.meos.pose_from_hexwkb(hexwkb); } @SuppressWarnings("unused") - public static double nad_tfloat_tbox(Pointer temp, Pointer box) { - return MeosLibrary.meos.nad_tfloat_tbox(temp, box); + public static Pointer pose_in(String str) { + return MeosLibrary.meos.pose_in(str); } @SuppressWarnings("unused") - public static double nad_tboxfloat_tboxfloat(Pointer box1, Pointer box2) { - return MeosLibrary.meos.nad_tboxfloat_tboxfloat(box1, box2); + public static String pose_out(Pointer pose, int maxdd) { + return MeosLibrary.meos.pose_out(pose, maxdd); } @SuppressWarnings("unused") - public static double nad_tpoint_geo(Pointer temp, Pointer gs) { - return MeosLibrary.meos.nad_tpoint_geo(temp, gs); + public static Pointer pose_copy(Pointer pose) { + return MeosLibrary.meos.pose_copy(pose); } @SuppressWarnings("unused") - public static double nad_tpoint_stbox(Pointer temp, Pointer box) { - return MeosLibrary.meos.nad_tpoint_stbox(temp, box); + public static Pointer pose_make_2d(double x, double y, double theta, int srid) { + return MeosLibrary.meos.pose_make_2d(x, y, theta, srid); } @SuppressWarnings("unused") - public static double nad_tpoint_tpoint(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.nad_tpoint_tpoint(temp1, temp2); + public static Pointer pose_make_3d(double x, double y, double z, double W, double X, double Y, double Z, int srid) { + return MeosLibrary.meos.pose_make_3d(x, y, z, W, X, Y, Z, srid); } - + @SuppressWarnings("unused") - public static double nad_tgeo_tgeo(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.nad_tgeo_tgeo(temp1, temp2); + public static Pointer pose_make_point2d(Pointer gs, double theta) { + return MeosLibrary.meos.pose_make_point2d(gs, theta); } - + @SuppressWarnings("unused") - public static Pointer nai_tpoint_geo(Pointer temp, Pointer gs) { - return MeosLibrary.meos.nai_tpoint_geo(temp, gs); + public static Pointer pose_make_point3d(Pointer gs, double W, double X, double Y, double Z) { + return MeosLibrary.meos.pose_make_point3d(gs, W, X, Y, Z); } @SuppressWarnings("unused") - public static Pointer nai_tpoint_tpoint(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.nai_tpoint_tpoint(temp1, temp2); + public static Pointer pose_to_point(Pointer pose) { + return MeosLibrary.meos.pose_to_point(pose); } @SuppressWarnings("unused") - public static Pointer shortestline_tpoint_geo(Pointer temp, Pointer gs) { - return MeosLibrary.meos.shortestline_tpoint_geo(temp, gs); + public static Pointer pose_to_stbox(Pointer pose) { + return MeosLibrary.meos.pose_to_stbox(pose); } @SuppressWarnings("unused") - public static Pointer shortestline_tgeo_tgeo(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.shortestline_tgeo_tgeo(temp1, temp2); + public static int pose_hash(Pointer pose) { + return MeosLibrary.meos.pose_hash(pose); } @SuppressWarnings("unused") - public static Pointer bearing_point_point(Pointer gs1, Pointer gs2) { - boolean out; - Runtime runtime = Runtime.getSystemRuntime(); - Pointer result = Memory.allocateDirect(runtime, Long.BYTES); - out = MeosLibrary.meos.bearing_point_point(gs1, gs2, result); - return out ? result : null ; + public static long pose_hash_extended(Pointer pose, long seed) { + return MeosLibrary.meos.pose_hash_extended(pose, seed); } @SuppressWarnings("unused") - public static Pointer bearing_tpoint_point(Pointer temp, Pointer gs, boolean invert) { - return MeosLibrary.meos.bearing_tpoint_point(temp, gs, invert); + public static Pointer pose_orientation(Pointer pose) { + return MeosLibrary.meos.pose_orientation(pose); } @SuppressWarnings("unused") - public static Pointer bearing_tpoint_tpoint(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.bearing_tpoint_tpoint(temp1, temp2); + public static double pose_rotation(Pointer pose) { + return MeosLibrary.meos.pose_rotation(pose); } @SuppressWarnings("unused") - public static Pointer tpoint_angular_difference(Pointer temp) { - return MeosLibrary.meos.tpoint_angular_difference(temp); + public static Pointer pose_round(Pointer pose, int maxdd) { + return MeosLibrary.meos.pose_round(pose, maxdd); } @SuppressWarnings("unused") - public static Pointer tpoint_azimuth(Pointer temp) { - return MeosLibrary.meos.tpoint_azimuth(temp); + public static Pointer posearr_round(Pointer posearr, int count, int maxdd) { + return MeosLibrary.meos.posearr_round(posearr, count, maxdd); } @SuppressWarnings("unused") - public static Pointer tgeo_convex_hull(Pointer temp) { - return MeosLibrary.meos.tgeo_convex_hull(temp); + public static void pose_set_srid(Pointer pose, int srid) { + MeosLibrary.meos.pose_set_srid(pose, srid); } - + @SuppressWarnings("unused") - public static Pointer tpoint_convex_hull(Pointer temp) { - return MeosLibrary.meos.tpoint_convex_hull(temp); + public static int pose_srid(Pointer pose) { + return MeosLibrary.meos.pose_srid(pose); } @SuppressWarnings("unused") - public static Pointer tgeo_traversed_area(Pointer temp, boolean unary_union) { - return MeosLibrary.meos.tgeo_traversed_area(temp, unary_union); + public static Pointer pose_transform(Pointer pose, int srid) { + return MeosLibrary.meos.pose_transform(pose, srid); } - + @SuppressWarnings("unused") - public static Pointer tpoint_cumulative_length(Pointer temp) { - return MeosLibrary.meos.tpoint_cumulative_length(temp); + public static Pointer pose_transform_pipeline(Pointer pose, String pipelinestr, int srid, boolean is_forward) { + return MeosLibrary.meos.pose_transform_pipeline(pose, pipelinestr, srid, is_forward); } - + @SuppressWarnings("unused") - public static Pointer tpoint_direction(Pointer temp) { - boolean out; - Runtime runtime = Runtime.getSystemRuntime(); - Pointer result = Memory.allocateDirect(runtime, Long.BYTES); - out = MeosLibrary.meos.tpoint_direction(temp, result); - return out ? result : null ; + public static Pointer pose_tstzspan_to_stbox(Pointer pose, Pointer s) { + return MeosLibrary.meos.pose_tstzspan_to_stbox(pose, s); } @SuppressWarnings("unused") - public static Pointer tpoint_get_x(Pointer temp) { - return MeosLibrary.meos.tpoint_get_x(temp); + public static Pointer pose_timestamptz_to_stbox(Pointer pose, OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.pose_timestamptz_to_stbox(pose, t_new); } @SuppressWarnings("unused") - public static Pointer tpoint_get_y(Pointer temp) { - return MeosLibrary.meos.tpoint_get_y(temp); + public static double distance_pose_geo(Pointer pose, Pointer gs) { + return MeosLibrary.meos.distance_pose_geo(pose, gs); } @SuppressWarnings("unused") - public static Pointer tpoint_get_z(Pointer temp) { - return MeosLibrary.meos.tpoint_get_z(temp); + public static double distance_pose_pose(Pointer pose1, Pointer pose2) { + return MeosLibrary.meos.distance_pose_pose(pose1, pose2); } @SuppressWarnings("unused") - public static boolean tpoint_is_simple(Pointer temp) { - return MeosLibrary.meos.tpoint_is_simple(temp); + public static double distance_pose_stbox(Pointer pose, Pointer box) { + return MeosLibrary.meos.distance_pose_stbox(pose, box); } @SuppressWarnings("unused") - public static double tpoint_length(Pointer temp) { - return MeosLibrary.meos.tpoint_length(temp); + public static int pose_cmp(Pointer pose1, Pointer pose2) { + return MeosLibrary.meos.pose_cmp(pose1, pose2); } @SuppressWarnings("unused") - public static Pointer tpoint_speed(Pointer temp) { - return MeosLibrary.meos.tpoint_speed(temp); + public static boolean pose_eq(Pointer pose1, Pointer pose2) { + return MeosLibrary.meos.pose_eq(pose1, pose2); } @SuppressWarnings("unused") - public static int tspatial_srid(Pointer temp) { - return MeosLibrary.meos.tspatial_srid(temp); + public static boolean pose_ge(Pointer pose1, Pointer pose2) { + return MeosLibrary.meos.pose_ge(pose1, pose2); } - + @SuppressWarnings("unused") - public static int tpoint_srid(Pointer temp) { - return MeosLibrary.meos.tpoint_srid(temp); + public static boolean pose_gt(Pointer pose1, Pointer pose2) { + return MeosLibrary.meos.pose_gt(pose1, pose2); } @SuppressWarnings("unused") - public static Pointer tpoint_stboxes(Pointer temp, Pointer count) { - return MeosLibrary.meos.tpoint_stboxes(temp, count); + public static boolean pose_le(Pointer pose1, Pointer pose2) { + return MeosLibrary.meos.pose_le(pose1, pose2); } @SuppressWarnings("unused") - public static Pointer tpoint_trajectory(Pointer temp, boolean unary_union) { - return MeosLibrary.meos.tpoint_trajectory(temp, unary_union); + public static boolean pose_lt(Pointer pose1, Pointer pose2) { + return MeosLibrary.meos.pose_lt(pose1, pose2); } @SuppressWarnings("unused") - public static Pointer tpoint_twcentroid(Pointer temp) { - return MeosLibrary.meos.tpoint_twcentroid(temp); + public static boolean pose_ne(Pointer pose1, Pointer pose2) { + return MeosLibrary.meos.pose_ne(pose1, pose2); } @SuppressWarnings("unused") - public static Pointer geo_expand_space(Pointer gs, double d) { - return MeosLibrary.meos.geo_expand_space(gs, d); + public static boolean pose_nsame(Pointer pose1, Pointer pose2) { + return MeosLibrary.meos.pose_nsame(pose1, pose2); } @SuppressWarnings("unused") - public static Pointer geomeas_to_tpoint(Pointer gs) { - return MeosLibrary.meos.geomeas_to_tpoint(gs); + public static boolean pose_same(Pointer pose1, Pointer pose2) { + return MeosLibrary.meos.pose_same(pose1, pose2); } @SuppressWarnings("unused") - public static Pointer tgeogpoint_to_tgeompoint(Pointer temp) { - return MeosLibrary.meos.tgeogpoint_to_tgeompoint(temp); + public static Pointer poseset_in(String str) { + return MeosLibrary.meos.poseset_in(str); } @SuppressWarnings("unused") - public static Pointer tgeompoint_to_tgeogpoint(Pointer temp) { - return MeosLibrary.meos.tgeompoint_to_tgeogpoint(temp); + public static String poseset_out(Pointer s, int maxdd) { + return MeosLibrary.meos.poseset_out(s, maxdd); } @SuppressWarnings("unused") - public static boolean tpoint_AsMVTGeom(Pointer temp, Pointer bounds, int extent, int buffer, boolean clip_geom, Pointer gsarr, Pointer timesarr, Pointer count) { - return MeosLibrary.meos.tpoint_AsMVTGeom(temp, bounds, extent, buffer, clip_geom, gsarr, timesarr, count); + public static Pointer poseset_make(Pointer values, int count) { + return MeosLibrary.meos.poseset_make(values, count); } @SuppressWarnings("unused") - public static Pointer tpoint_expand_space(Pointer temp, double d) { - return MeosLibrary.meos.tpoint_expand_space(temp, d); + public static Pointer pose_to_set(Pointer pose) { + return MeosLibrary.meos.pose_to_set(pose); } @SuppressWarnings("unused") - public static Pointer tpoint_make_simple(Pointer temp, Pointer count) { - return MeosLibrary.meos.tpoint_make_simple(temp, count); + public static Pointer poseset_end_value(Pointer s) { + return MeosLibrary.meos.poseset_end_value(s); } @SuppressWarnings("unused") - public static Pointer tpoint_set_srid(Pointer temp, int srid) { - return MeosLibrary.meos.tpoint_set_srid(temp, srid); + public static Pointer poseset_start_value(Pointer s) { + return MeosLibrary.meos.poseset_start_value(s); } @SuppressWarnings("unused") - public static Pointer tpoint_tfloat_to_geomeas(Pointer tpoint, Pointer measure, boolean segmentize) { + public static Pointer poseset_value_n(Pointer s, int n) { boolean out; Runtime runtime = Runtime.getSystemRuntime(); Pointer result = Memory.allocateDirect(runtime, Long.BYTES); - out = MeosLibrary.meos.tpoint_tfloat_to_geomeas(tpoint, measure, segmentize, result); + out = MeosLibrary.meos.poseset_value_n(s, n, result); Pointer new_result = result.getPointer(0); return out ? new_result : null ; } @SuppressWarnings("unused") - public static int acontains_geo_tpoint(Pointer gs, Pointer temp) { - return MeosLibrary.meos.acontains_geo_tpoint(gs, temp); + public static Pointer poseset_values(Pointer s) { + return MeosLibrary.meos.poseset_values(s); } @SuppressWarnings("unused") - public static int adisjoint_tpoint_geo(Pointer temp, Pointer gs) { - return MeosLibrary.meos.adisjoint_tpoint_geo(temp, gs); + public static boolean contained_pose_set(Pointer pose, Pointer s) { + return MeosLibrary.meos.contained_pose_set(pose, s); } @SuppressWarnings("unused") - public static int adisjoint_tpoint_tpoint(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.adisjoint_tpoint_tpoint(temp1, temp2); + public static boolean contains_set_pose(Pointer s, Pointer pose) { + return MeosLibrary.meos.contains_set_pose(s, pose); } @SuppressWarnings("unused") - public static int adwithin_tpoint_geo(Pointer temp, Pointer gs, double dist) { - return MeosLibrary.meos.adwithin_tpoint_geo(temp, gs, dist); + public static Pointer intersection_pose_set(Pointer pose, Pointer s) { + return MeosLibrary.meos.intersection_pose_set(pose, s); } @SuppressWarnings("unused") - public static int adwithin_tpoint_tpoint(Pointer temp1, Pointer temp2, double dist) { - return MeosLibrary.meos.adwithin_tpoint_tpoint(temp1, temp2, dist); + public static Pointer intersection_set_pose(Pointer s, Pointer pose) { + return MeosLibrary.meos.intersection_set_pose(s, pose); } @SuppressWarnings("unused") - public static int aintersects_tpoint_geo(Pointer temp, Pointer gs) { - return MeosLibrary.meos.aintersects_tpoint_geo(temp, gs); + public static Pointer minus_pose_set(Pointer pose, Pointer s) { + return MeosLibrary.meos.minus_pose_set(pose, s); } @SuppressWarnings("unused") - public static int aintersects_tpoint_tpoint(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.aintersects_tpoint_tpoint(temp1, temp2); + public static Pointer minus_set_pose(Pointer s, Pointer pose) { + return MeosLibrary.meos.minus_set_pose(s, pose); } @SuppressWarnings("unused") - public static int atouches_tpoint_geo(Pointer temp, Pointer gs) { - return MeosLibrary.meos.atouches_tpoint_geo(temp, gs); + public static Pointer pose_union_transfn(Pointer state, Pointer pose) { + return MeosLibrary.meos.pose_union_transfn(state, pose); } @SuppressWarnings("unused") - public static int econtains_geo_tpoint(Pointer gs, Pointer temp) { - return MeosLibrary.meos.econtains_geo_tpoint(gs, temp); + public static Pointer union_pose_set(Pointer pose, Pointer s) { + return MeosLibrary.meos.union_pose_set(pose, s); } - + @SuppressWarnings("unused") - public static int econtains_geo_tgeo(Pointer gs, Pointer temp) { - return MeosLibrary.meos.econtains_geo_tgeo(gs, temp); + public static Pointer union_set_pose(Pointer s, Pointer pose) { + return MeosLibrary.meos.union_set_pose(s, pose); } - + @SuppressWarnings("unused") - public static int edisjoint_tpoint_geo(Pointer temp, Pointer gs) { - return MeosLibrary.meos.edisjoint_tpoint_geo(temp, gs); + public static Pointer tpose_in(String str) { + return MeosLibrary.meos.tpose_in(str); } @SuppressWarnings("unused") - public static int edisjoint_tpoint_tpoint(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.edisjoint_tpoint_tpoint(temp1, temp2); + public static Pointer tpose_make(Pointer tpoint, Pointer tradius) { + return MeosLibrary.meos.tpose_make(tpoint, tradius); } @SuppressWarnings("unused") - public static int edwithin_tpoint_geo(Pointer temp, Pointer gs, double dist) { - return MeosLibrary.meos.edwithin_tpoint_geo(temp, gs, dist); + public static Pointer tpose_to_tpoint(Pointer temp) { + return MeosLibrary.meos.tpose_to_tpoint(temp); } @SuppressWarnings("unused") - public static int edwithin_tpoint_tpoint(Pointer temp1, Pointer temp2, double dist) { - return MeosLibrary.meos.edwithin_tpoint_tpoint(temp1, temp2, dist); + public static Pointer tpose_end_value(Pointer temp) { + return MeosLibrary.meos.tpose_end_value(temp); } - + @SuppressWarnings("unused") - public static int edwithin_tgeo_tgeo(Pointer temp1, Pointer temp2, double dist) { - return MeosLibrary.meos.edwithin_tgeo_tgeo(temp1, temp2, dist); + public static Pointer tpose_points(Pointer temp) { + return MeosLibrary.meos.tpose_points(temp); } - + @SuppressWarnings("unused") - public static int eintersects_tpoint_geo(Pointer temp, Pointer gs) { - return MeosLibrary.meos.eintersects_tpoint_geo(temp, gs); + public static Pointer tpose_orientation(Pointer temp) { + return MeosLibrary.meos.tpose_orientation(temp); } - + @SuppressWarnings("unused") - public static int eintersects_tgeo_geo(Pointer temp, Pointer gs) { - return MeosLibrary.meos.eintersects_tgeo_geo(temp, gs); + public static Pointer tpose_rotation(Pointer temp) { + return MeosLibrary.meos.tpose_rotation(temp); } @SuppressWarnings("unused") - public static int eintersects_tpoint_tpoint(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.eintersects_tpoint_tpoint(temp1, temp2); + public static Pointer tpose_start_value(Pointer temp) { + return MeosLibrary.meos.tpose_start_value(temp); } @SuppressWarnings("unused") - public static int etouches_tpoint_geo(Pointer temp, Pointer gs) { - return MeosLibrary.meos.etouches_tpoint_geo(temp, gs); + public static Pointer tpose_trajectory(Pointer temp) { + return MeosLibrary.meos.tpose_trajectory(temp); } - + @SuppressWarnings("unused") - public static int edisjoint_tgeo_geo(Pointer temp, Pointer gs) { - return MeosLibrary.meos.edisjoint_tgeo_geo(temp, gs); + public static boolean tpose_value_at_timestamptz(Pointer temp, OffsetDateTime t, boolean strict, Pointer value) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.tpose_value_at_timestamptz(temp, t_new, strict, value); } - + @SuppressWarnings("unused") - public static int edisjoint_tgeo_tgeo(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.edisjoint_tgeo_tgeo(temp1, temp2); + public static Pointer tpose_value_n(Pointer temp, int n) { + boolean out; + Runtime runtime = Runtime.getSystemRuntime(); + Pointer result = Memory.allocateDirect(runtime, Long.BYTES); + out = MeosLibrary.meos.tpose_value_n(temp, n, result); + Pointer new_result = result.getPointer(0); + return out ? new_result : null ; } - + @SuppressWarnings("unused") - public static int adisjoint_tgeo_geo(Pointer temp, Pointer gs) { - return MeosLibrary.meos.adisjoint_tgeo_geo(temp, gs); + public static Pointer tpose_values(Pointer temp, Pointer count) { + return MeosLibrary.meos.tpose_values(temp, count); } - + @SuppressWarnings("unused") - public static int adisjoint_tgeo_tgeo(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.adisjoint_tgeo_tgeo(temp1, temp2); + public static Pointer tpose_at_geom(Pointer temp, Pointer gs) { + return MeosLibrary.meos.tpose_at_geom(temp, gs); } - + @SuppressWarnings("unused") - public static int eintersects_tgeo_tgeo(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.eintersects_tgeo_tgeo(temp1, temp2); + public static Pointer tpose_at_stbox(Pointer temp, Pointer box, boolean border_inc) { + return MeosLibrary.meos.tpose_at_stbox(temp, box, border_inc); } - + @SuppressWarnings("unused") - public static int aintersects_tgeo_geo(Pointer temp, Pointer gs) { - return MeosLibrary.meos.aintersects_tgeo_geo(temp, gs); + public static Pointer tpose_at_pose(Pointer temp, Pointer pose) { + return MeosLibrary.meos.tpose_at_pose(temp, pose); } - + @SuppressWarnings("unused") - public static int aintersects_tgeo_tgeo(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.aintersects_tgeo_tgeo(temp1, temp2); + public static Pointer tpose_minus_geom(Pointer temp, Pointer gs) { + return MeosLibrary.meos.tpose_minus_geom(temp, gs); + } + + @SuppressWarnings("unused") + public static Pointer tpose_minus_pose(Pointer temp, Pointer pose) { + return MeosLibrary.meos.tpose_minus_pose(temp, pose); + } + + @SuppressWarnings("unused") + public static Pointer tpose_minus_stbox(Pointer temp, Pointer box, boolean border_inc) { + return MeosLibrary.meos.tpose_minus_stbox(temp, box, border_inc); + } + + @SuppressWarnings("unused") + public static Pointer tdistance_tpose_pose(Pointer temp, Pointer pose) { + return MeosLibrary.meos.tdistance_tpose_pose(temp, pose); + } + + @SuppressWarnings("unused") + public static Pointer tdistance_tpose_point(Pointer temp, Pointer gs) { + return MeosLibrary.meos.tdistance_tpose_point(temp, gs); + } + + @SuppressWarnings("unused") + public static Pointer tdistance_tpose_tpose(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.tdistance_tpose_tpose(temp1, temp2); + } + + @SuppressWarnings("unused") + public static double nad_tpose_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.nad_tpose_geo(temp, gs); } - + @SuppressWarnings("unused") - public static int etouches_tgeo_geo(Pointer temp, Pointer gs) { - return MeosLibrary.meos.etouches_tgeo_geo(temp, gs); + public static double nad_tpose_pose(Pointer temp, Pointer pose) { + return MeosLibrary.meos.nad_tpose_pose(temp, pose); } - + @SuppressWarnings("unused") - public static int etouches_tgeo_tgeo(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.etouches_tgeo_tgeo(temp1, temp2); + public static double nad_tpose_stbox(Pointer temp, Pointer box) { + return MeosLibrary.meos.nad_tpose_stbox(temp, box); } - + @SuppressWarnings("unused") - public static int atouches_tgeo_geo(Pointer temp, Pointer gs) { - return MeosLibrary.meos.atouches_tgeo_geo(temp, gs); + public static double nad_tpose_tpose(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.nad_tpose_tpose(temp1, temp2); } - + @SuppressWarnings("unused") - public static int atouches_tgeo_tgeo(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.atouches_tgeo_tgeo(temp1, temp2); + public static Pointer nai_tpose_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.nai_tpose_geo(temp, gs); } - + @SuppressWarnings("unused") - public static int ecovers_tgeo_geo(Pointer temp, Pointer gs) { - return MeosLibrary.meos.ecovers_tgeo_geo(temp, gs); + public static Pointer nai_tpose_pose(Pointer temp, Pointer pose) { + return MeosLibrary.meos.nai_tpose_pose(temp, pose); } - + @SuppressWarnings("unused") - public static int ecovers_tgeo_tgeo(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.ecovers_tgeo_tgeo(temp1, temp2); + public static Pointer nai_tpose_tpose(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.nai_tpose_tpose(temp1, temp2); } - + @SuppressWarnings("unused") - public static int acovers_tgeo_geo(Pointer temp, Pointer gs) { - return MeosLibrary.meos.acovers_tgeo_geo(temp, gs); + public static Pointer shortestline_tpose_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.shortestline_tpose_geo(temp, gs); } - + @SuppressWarnings("unused") - public static int econtains_tgeo_geo(Pointer temp, Pointer gs) { - return MeosLibrary.meos.econtains_tgeo_geo(temp, gs); + public static Pointer shortestline_tpose_pose(Pointer temp, Pointer pose) { + return MeosLibrary.meos.shortestline_tpose_pose(temp, pose); } - + @SuppressWarnings("unused") - public static int econtains_tgeo_tgeo(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.econtains_tgeo_tgeo(temp1, temp2); + public static Pointer shortestline_tpose_tpose(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.shortestline_tpose_tpose(temp1, temp2); } - + @SuppressWarnings("unused") - public static int acontains_tgeo_geo(Pointer temp, Pointer gs) { - return MeosLibrary.meos.acontains_tgeo_geo(temp, gs); + public static int always_eq_pose_tpose(Pointer pose, Pointer temp) { + return MeosLibrary.meos.always_eq_pose_tpose(pose, temp); } - + @SuppressWarnings("unused") - public static int acontains_tgeo_tgeo(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.acontains_tgeo_tgeo(temp1, temp2); + public static int always_eq_tpose_pose(Pointer temp, Pointer pose) { + return MeosLibrary.meos.always_eq_tpose_pose(temp, pose); } - + @SuppressWarnings("unused") - public static int adwithin_tgeo_tgeo(Pointer temp1, Pointer temp2, double dist) { - return MeosLibrary.meos.adwithin_tgeo_tgeo(temp1, temp2, dist); + public static int always_eq_tpose_tpose(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.always_eq_tpose_tpose(temp1, temp2); } - + @SuppressWarnings("unused") - public static int adwithin_tgeo_geo(Pointer temp, Pointer gs, double dist) { - return MeosLibrary.meos.adwithin_tgeo_geo(temp, gs, dist); + public static int always_ne_pose_tpose(Pointer pose, Pointer temp) { + return MeosLibrary.meos.always_ne_pose_tpose(pose, temp); } - + @SuppressWarnings("unused") - public static int edwithin_tgeo_geo(Pointer temp, Pointer gs, double dist) { - return MeosLibrary.meos.edwithin_tgeo_geo(temp, gs, dist); + public static int always_ne_tpose_pose(Pointer temp, Pointer pose) { + return MeosLibrary.meos.always_ne_tpose_pose(temp, pose); } - + @SuppressWarnings("unused") - public static Pointer tcontains_geo_tgeo(Pointer gs, Pointer temp) { - return MeosLibrary.meos.tcontains_geo_tgeo(gs, temp); + public static int always_ne_tpose_tpose(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.always_ne_tpose_tpose(temp1, temp2); } - + @SuppressWarnings("unused") - public static Pointer tcontains_geo_tpoint(Pointer gs, Pointer temp, boolean restr, boolean atvalue) { - return MeosLibrary.meos.tcontains_geo_tpoint(gs, temp, restr, atvalue); + public static int ever_eq_pose_tpose(Pointer pose, Pointer temp) { + return MeosLibrary.meos.ever_eq_pose_tpose(pose, temp); } - + @SuppressWarnings("unused") - public static Pointer tcovers_tgeo_tgeo(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.tcovers_tgeo_tgeo(temp1, temp2); + public static int ever_eq_tpose_pose(Pointer temp, Pointer pose) { + return MeosLibrary.meos.ever_eq_tpose_pose(temp, pose); } - + @SuppressWarnings("unused") - public static Pointer tdisjoint_tpoint_geo(Pointer temp, Pointer gs, boolean restr, boolean atvalue) { - return MeosLibrary.meos.tdisjoint_tpoint_geo(temp, gs, restr, atvalue); + public static int ever_eq_tpose_tpose(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.ever_eq_tpose_tpose(temp1, temp2); } - + @SuppressWarnings("unused") - public static Pointer tdisjoint_tgeo_geo(Pointer temp, Pointer gs) { - return MeosLibrary.meos.tdisjoint_tgeo_geo(temp, gs); + public static int ever_ne_pose_tpose(Pointer pose, Pointer temp) { + return MeosLibrary.meos.ever_ne_pose_tpose(pose, temp); } - + @SuppressWarnings("unused") - public static Pointer tdisjoint_tpoint_tpoint (Pointer temp1, Pointer temp2, boolean restr, boolean atvalue) { - return MeosLibrary.meos.tdisjoint_tpoint_tpoint(temp1, temp2, restr, atvalue); + public static int ever_ne_tpose_pose(Pointer temp, Pointer pose) { + return MeosLibrary.meos.ever_ne_tpose_pose(temp, pose); } @SuppressWarnings("unused") - public static Pointer tdistance_tgeo_geo(Pointer temp, Pointer gs) { - return MeosLibrary.meos.tdistance_tgeo_geo(temp, gs); + public static int ever_ne_tpose_tpose(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.ever_ne_tpose_tpose(temp1, temp2); } - + @SuppressWarnings("unused") - public static Pointer tdistance_tgeo_tgeo(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.tdistance_tgeo_tgeo(temp1, temp2); + public static Pointer teq_pose_tpose(Pointer pose, Pointer temp) { + return MeosLibrary.meos.teq_pose_tpose(pose, temp); } - + @SuppressWarnings("unused") - public static Pointer tdistance_tfloat_float(Pointer temp, double d) { - return MeosLibrary.meos.tdistance_tfloat_float(temp, d); + public static Pointer teq_tpose_pose(Pointer temp, Pointer pose) { + return MeosLibrary.meos.teq_tpose_pose(temp, pose); } - + @SuppressWarnings("unused") - public static Pointer tdistance_tint_int(Pointer temp, int i) { - return MeosLibrary.meos.tdistance_tint_int(temp, i); + public static Pointer tne_pose_tpose(Pointer pose, Pointer temp) { + return MeosLibrary.meos.tne_pose_tpose(pose, temp); } - + @SuppressWarnings("unused") - public static Pointer tdistance_tnumber_tnumber(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.tdistance_tnumber_tnumber(temp1, temp2); + public static Pointer tne_tpose_pose(Pointer temp, Pointer pose) { + return MeosLibrary.meos.tne_tpose_pose(temp, pose); } - + @SuppressWarnings("unused") - public static Pointer tdwithin_tpoint_geo(Pointer temp, Pointer gs, double dist, boolean restr, boolean atvalue) { - return MeosLibrary.meos.tdwithin_tpoint_geo(temp, gs, dist, restr, atvalue); + public static String trgeo_out(Pointer temp) { + return MeosLibrary.meos.trgeo_out(temp); } @SuppressWarnings("unused") - public static Pointer tdwithin_tgeo_tgeo(Pointer temp1, Pointer temp2, double dist) { - return MeosLibrary.meos.tdwithin_tgeo_tgeo(temp1, temp2, dist); + public static Pointer trgeoinst_make(Pointer geom, Pointer pose, OffsetDateTime t) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.trgeoinst_make(geom, pose, t_new); } - + @SuppressWarnings("unused") - public static Pointer tdwithin_tpoint_tpoint(Pointer temp1, Pointer temp2, double dist, boolean restr, boolean atvalue) { - return MeosLibrary.meos.tdwithin_tpoint_tpoint(temp1, temp2, dist, restr, atvalue); + public static Pointer geo_tpose_to_trgeo(Pointer gs, Pointer temp) { + return MeosLibrary.meos.geo_tpose_to_trgeo(gs, temp); } - + @SuppressWarnings("unused") - public static Pointer tintersects_tpoint_geo(Pointer temp, Pointer gs, boolean restr, boolean atvalue) { - return MeosLibrary.meos.tintersects_tpoint_geo(temp, gs, restr, atvalue); + public static Pointer trgeo_to_tpose(Pointer temp) { + return MeosLibrary.meos.trgeo_to_tpose(temp); } - + @SuppressWarnings("unused") - public static Pointer tintersects_tgeo_geo(Pointer temp, Pointer gs) { - return MeosLibrary.meos.tintersects_tgeo_geo(temp, gs); + public static Pointer trgeo_to_tpoint(Pointer temp) { + return MeosLibrary.meos.trgeo_to_tpoint(temp); } - + @SuppressWarnings("unused") - public static Pointer tintersects_tpoint_tpoint (Pointer temp1, Pointer temp2, boolean restr, boolean atvalue) { - return MeosLibrary.meos.tintersects_tpoint_tpoint(temp1, temp2, restr, atvalue); + public static Pointer trgeo_end_instant(Pointer temp) { + return MeosLibrary.meos.trgeo_end_instant(temp); } - + @SuppressWarnings("unused") - public static Pointer ttouches_tpoint_geo(Pointer temp, Pointer gs, boolean restr, boolean atvalue) { - return MeosLibrary.meos.ttouches_tpoint_geo(temp, gs, restr, atvalue); + public static Pointer trgeo_end_sequence(Pointer temp) { + return MeosLibrary.meos.trgeo_end_sequence(temp); } - + @SuppressWarnings("unused") - public static Pointer ttouches_tgeo_geo(Pointer temp, Pointer gs) { - return MeosLibrary.meos.ttouches_tgeo_geo(temp, gs); + public static Pointer trgeo_end_value(Pointer temp) { + return MeosLibrary.meos.trgeo_end_value(temp); } - + @SuppressWarnings("unused") - public static Pointer tdisjoint_tgeo_tgeo(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.tdisjoint_tgeo_tgeo(temp1, temp2); + public static Pointer trgeo_geom(Pointer temp) { + return MeosLibrary.meos.trgeo_geom(temp); } - + @SuppressWarnings("unused") - public static Pointer tintersects_tgeo_tgeo(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.tintersects_tgeo_tgeo(temp1, temp2); + public static Pointer trgeo_instant_n(Pointer temp, int n) { + return MeosLibrary.meos.trgeo_instant_n(temp, n); } - + @SuppressWarnings("unused") - public static Pointer ttouches_tgeo_tgeo(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.ttouches_tgeo_tgeo(temp1, temp2); + public static Pointer trgeo_instants(Pointer temp, Pointer count) { + return MeosLibrary.meos.trgeo_instants(temp, count); } - + @SuppressWarnings("unused") - public static Pointer tcontains_tgeo_geo(Pointer temp, Pointer gs) { - return MeosLibrary.meos.tcontains_tgeo_geo(temp, gs); + public static Pointer trgeo_points(Pointer temp) { + return MeosLibrary.meos.trgeo_points(temp); } - + @SuppressWarnings("unused") - public static Pointer tcontains_tgeo_tgeo(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.tcontains_tgeo_tgeo(temp1, temp2); + public static Pointer trgeo_rotation(Pointer temp) { + return MeosLibrary.meos.trgeo_rotation(temp); } - + @SuppressWarnings("unused") - public static Pointer tcovers_tgeo_geo(Pointer temp, Pointer gs) { - return MeosLibrary.meos.tcovers_tgeo_geo(temp, gs); + public static Pointer trgeo_segments(Pointer temp, Pointer count) { + return MeosLibrary.meos.trgeo_segments(temp, count); } - + @SuppressWarnings("unused") - public static Pointer tdwithin_tgeo_geo(Pointer temp, Pointer gs, double dist) { - return MeosLibrary.meos.tdwithin_tgeo_geo(temp, gs, dist); + public static Pointer trgeo_sequence_n(Pointer temp, int i) { + return MeosLibrary.meos.trgeo_sequence_n(temp, i); } - + @SuppressWarnings("unused") - public static Pointer tbool_tand_transfn(Pointer state, Pointer temp) { - return MeosLibrary.meos.tbool_tand_transfn(state, temp); + public static Pointer trgeo_sequences(Pointer temp, Pointer count) { + return MeosLibrary.meos.trgeo_sequences(temp, count); } @SuppressWarnings("unused") - public static Pointer tbool_tor_transfn(Pointer state, Pointer temp) { - return MeosLibrary.meos.tbool_tor_transfn(state, temp); + public static Pointer trgeo_start_instant(Pointer temp) { + return MeosLibrary.meos.trgeo_start_instant(temp); } @SuppressWarnings("unused") - public static Pointer temporal_extent_transfn(Pointer s, Pointer temp) { - return MeosLibrary.meos.temporal_extent_transfn(s, temp); + public static Pointer trgeo_start_sequence(Pointer temp) { + return MeosLibrary.meos.trgeo_start_sequence(temp); } @SuppressWarnings("unused") - public static Pointer temporal_tagg_finalfn(Pointer state) { - return MeosLibrary.meos.temporal_tagg_finalfn(state); + public static Pointer trgeo_start_value(Pointer temp) { + return MeosLibrary.meos.trgeo_start_value(temp); } @SuppressWarnings("unused") - public static Pointer temporal_tcount_transfn(Pointer state, Pointer temp) { - return MeosLibrary.meos.temporal_tcount_transfn(state, temp); + public static Pointer trgeo_value_n(Pointer temp, int n) { + boolean out; + Runtime runtime = Runtime.getSystemRuntime(); + Pointer result = Memory.allocateDirect(runtime, Long.BYTES); + out = MeosLibrary.meos.trgeo_value_n(temp, n, result); + Pointer new_result = result.getPointer(0); + return out ? new_result : null ; } @SuppressWarnings("unused") - public static Pointer tfloat_tmax_transfn(Pointer state, Pointer temp) { - return MeosLibrary.meos.tfloat_tmax_transfn(state, temp); + public static Pointer trgeo_traversed_area(Pointer temp, boolean unary_union) { + return MeosLibrary.meos.trgeo_traversed_area(temp, unary_union); } @SuppressWarnings("unused") - public static Pointer tfloat_tmin_transfn(Pointer state, Pointer temp) { - return MeosLibrary.meos.tfloat_tmin_transfn(state, temp); + public static Pointer trgeo_append_tinstant(Pointer temp, Pointer inst, int interp, double maxdist, Pointer maxt, boolean expand) { + return MeosLibrary.meos.trgeo_append_tinstant(temp, inst, interp, maxdist, maxt, expand); } @SuppressWarnings("unused") - public static Pointer tfloat_tsum_transfn(Pointer state, Pointer temp) { - return MeosLibrary.meos.tfloat_tsum_transfn(state, temp); + public static Pointer trgeo_append_tsequence(Pointer temp, Pointer seq, boolean expand) { + return MeosLibrary.meos.trgeo_append_tsequence(temp, seq, expand); } @SuppressWarnings("unused") - public static Pointer tfloat_wmax_transfn(Pointer state, Pointer temp, Pointer interv) { - return MeosLibrary.meos.tfloat_wmax_transfn(state, temp, interv); + public static Pointer trgeo_delete_timestamptz(Pointer temp, OffsetDateTime t, boolean connect) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.trgeo_delete_timestamptz(temp, t_new, connect); } @SuppressWarnings("unused") - public static Pointer tfloat_wmin_transfn(Pointer state, Pointer temp, Pointer interv) { - return MeosLibrary.meos.tfloat_wmin_transfn(state, temp, interv); + public static Pointer trgeo_delete_tstzset(Pointer temp, Pointer s, boolean connect) { + return MeosLibrary.meos.trgeo_delete_tstzset(temp, s, connect); } @SuppressWarnings("unused") - public static Pointer tfloat_wsum_transfn(Pointer state, Pointer temp, Pointer interv) { - return MeosLibrary.meos.tfloat_wsum_transfn(state, temp, interv); + public static Pointer trgeo_delete_tstzspan(Pointer temp, Pointer s, boolean connect) { + return MeosLibrary.meos.trgeo_delete_tstzspan(temp, s, connect); } @SuppressWarnings("unused") - public static Pointer timestamptz_tcount_transfn(Pointer state, OffsetDateTime t) { - var t_new = t.toEpochSecond(); - return MeosLibrary.meos.timestamptz_tcount_transfn(state, t_new); + public static Pointer trgeo_delete_tstzspanset(Pointer temp, Pointer ss, boolean connect) { + return MeosLibrary.meos.trgeo_delete_tstzspanset(temp, ss, connect); } @SuppressWarnings("unused") - public static Pointer tint_tmax_transfn(Pointer state, Pointer temp) { - return MeosLibrary.meos.tint_tmax_transfn(state, temp); + public static Pointer trgeo_round(Pointer temp, int maxdd) { + return MeosLibrary.meos.trgeo_round(temp, maxdd); } @SuppressWarnings("unused") - public static Pointer tint_tmin_transfn(Pointer state, Pointer temp) { - return MeosLibrary.meos.tint_tmin_transfn(state, temp); + public static Pointer trgeo_set_interp(Pointer temp, int interp) { + return MeosLibrary.meos.trgeo_set_interp(temp, interp); } @SuppressWarnings("unused") - public static Pointer tint_tsum_transfn(Pointer state, Pointer temp) { - return MeosLibrary.meos.tint_tsum_transfn(state, temp); + public static Pointer trgeo_to_tinstant(Pointer temp) { + return MeosLibrary.meos.trgeo_to_tinstant(temp); } @SuppressWarnings("unused") - public static Pointer tint_wmax_transfn(Pointer state, Pointer temp, Pointer interv) { - return MeosLibrary.meos.tint_wmax_transfn(state, temp, interv); + public static Pointer trgeo_after_timestamptz(Pointer temp, OffsetDateTime t, boolean strict) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.trgeo_after_timestamptz(temp, t_new, strict); } @SuppressWarnings("unused") - public static Pointer tint_wmin_transfn(Pointer state, Pointer temp, Pointer interv) { - return MeosLibrary.meos.tint_wmin_transfn(state, temp, interv); + public static Pointer trgeo_before_timestamptz(Pointer temp, OffsetDateTime t, boolean strict) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.trgeo_before_timestamptz(temp, t_new, strict); } @SuppressWarnings("unused") - public static Pointer tint_wsum_transfn(Pointer state, Pointer temp, Pointer interv) { - return MeosLibrary.meos.tint_wsum_transfn(state, temp, interv); + public static Pointer trgeo_restrict_value(Pointer temp, long value, boolean atfunc) { + return MeosLibrary.meos.trgeo_restrict_value(temp, value, atfunc); } @SuppressWarnings("unused") - public static Pointer tnumber_extent_transfn(Pointer box, Pointer temp) { - return MeosLibrary.meos.tnumber_extent_transfn(box, temp); + public static Pointer trgeo_restrict_values(Pointer temp, Pointer s, boolean atfunc) { + return MeosLibrary.meos.trgeo_restrict_values(temp, s, atfunc); } @SuppressWarnings("unused") - public static Pointer tnumber_tavg_finalfn(Pointer state) { - return MeosLibrary.meos.tnumber_tavg_finalfn(state); + public static Pointer trgeo_restrict_timestamptz(Pointer temp, OffsetDateTime t, boolean atfunc) { + var t_new = t.toEpochSecond(); + return MeosLibrary.meos.trgeo_restrict_timestamptz(temp, t_new, atfunc); } @SuppressWarnings("unused") - public static Pointer tnumber_tavg_transfn(Pointer state, Pointer temp) { - return MeosLibrary.meos.tnumber_tavg_transfn(state, temp); + public static Pointer trgeo_restrict_tstzset(Pointer temp, Pointer s, boolean atfunc) { + return MeosLibrary.meos.trgeo_restrict_tstzset(temp, s, atfunc); } @SuppressWarnings("unused") - public static Pointer tnumber_wavg_transfn(Pointer state, Pointer temp, Pointer interv) { - return MeosLibrary.meos.tnumber_wavg_transfn(state, temp, interv); + public static Pointer trgeo_restrict_tstzspan(Pointer temp, Pointer s, boolean atfunc) { + return MeosLibrary.meos.trgeo_restrict_tstzspan(temp, s, atfunc); } @SuppressWarnings("unused") - public static Pointer tpoint_extent_transfn(Pointer box, Pointer temp) { - return MeosLibrary.meos.tpoint_extent_transfn(box, temp); + public static Pointer trgeo_restrict_tstzspanset(Pointer temp, Pointer ss, boolean atfunc) { + return MeosLibrary.meos.trgeo_restrict_tstzspanset(temp, ss, atfunc); } - + @SuppressWarnings("unused") - public static Pointer tspatial_extent_transfn(Pointer box, Pointer temp) { - return MeosLibrary.meos.tspatial_extent_transfn(box, temp); + public static Pointer trgeo_at_geom(Pointer temp, Pointer gs) { + return MeosLibrary.meos.trgeo_at_geom(temp, gs); } - + @SuppressWarnings("unused") - public static Pointer tpoint_tcentroid_finalfn(Pointer state) { - return MeosLibrary.meos.tpoint_tcentroid_finalfn(state); + public static Pointer trgeo_at_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.trgeo_at_geo(temp, gs); } @SuppressWarnings("unused") - public static Pointer tpoint_tcentroid_transfn(Pointer state, Pointer temp) { - return MeosLibrary.meos.tpoint_tcentroid_transfn(state, temp); + public static Pointer trgeo_at_stbox(Pointer temp, Pointer box, boolean border_inc) { + return MeosLibrary.meos.trgeo_at_stbox(temp, box, border_inc); } @SuppressWarnings("unused") - public static Pointer tstzset_tcount_transfn(Pointer state, Pointer s) { - return MeosLibrary.meos.tstzset_tcount_transfn(state, s); + public static Pointer trgeo_at_elevation(Pointer temp, Pointer s) { + return MeosLibrary.meos.trgeo_at_elevation(temp, s); } @SuppressWarnings("unused") - public static Pointer tstzspan_tcount_transfn(Pointer state, Pointer s) { - return MeosLibrary.meos.tstzspan_tcount_transfn(state, s); + public static Pointer trgeo_minus_geom(Pointer temp, Pointer gs) { + return MeosLibrary.meos.trgeo_minus_geom(temp, gs); } @SuppressWarnings("unused") - public static Pointer tstzspanset_tcount_transfn(Pointer state, Pointer ss) { - return MeosLibrary.meos.tstzspanset_tcount_transfn(state, ss); + public static Pointer trgeo_minus_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.trgeo_minus_geo(temp, gs); } @SuppressWarnings("unused") - public static Pointer ttext_tmax_transfn(Pointer state, Pointer temp) { - return MeosLibrary.meos.ttext_tmax_transfn(state, temp); + public static Pointer trgeo_minus_stbox(Pointer temp, Pointer box, boolean border_inc) { + return MeosLibrary.meos.trgeo_minus_stbox(temp, box, border_inc); } @SuppressWarnings("unused") - public static Pointer ttext_tmin_transfn(Pointer state, Pointer temp) { - return MeosLibrary.meos.ttext_tmin_transfn(state, temp); + public static Pointer trgeo_minus_elevation(Pointer temp, Pointer s) { + return MeosLibrary.meos.trgeo_minus_elevation(temp, s); } @SuppressWarnings("unused") - public static Pointer temporal_simplify_dp(Pointer temp, double eps_dist, boolean synchronize) { - return MeosLibrary.meos.temporal_simplify_dp(temp, eps_dist, synchronize); + public static Pointer tdistance_trgeo_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.tdistance_trgeo_geo(temp, gs); } @SuppressWarnings("unused") - public static Pointer temporal_simplify_max_dist(Pointer temp, double eps_dist, boolean synchronize) { - return MeosLibrary.meos.temporal_simplify_max_dist(temp, eps_dist, synchronize); + public static Pointer tdistance_trgeo_tpoint(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.tdistance_trgeo_tpoint(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer temporal_simplify_min_dist(Pointer temp, double dist) { - return MeosLibrary.meos.temporal_simplify_min_dist(temp, dist); + public static Pointer tdistance_trgeo_trgeo(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.tdistance_trgeo_trgeo(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer temporal_simplify_min_tdelta(Pointer temp, Pointer mint) { - return MeosLibrary.meos.temporal_simplify_min_tdelta(temp, mint); + public static double nad_stbox_trgeo(Pointer box, Pointer temp) { + return MeosLibrary.meos.nad_stbox_trgeo(box, temp); } @SuppressWarnings("unused") - public static Pointer temporal_tprecision(Pointer temp, Pointer duration, OffsetDateTime origin) { - var origin_new = origin.toEpochSecond(); - return MeosLibrary.meos.temporal_tprecision(temp, duration, origin_new); + public static double nad_trgeo_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.nad_trgeo_geo(temp, gs); } @SuppressWarnings("unused") - public static Pointer temporal_tsample(Pointer temp, Pointer duration, OffsetDateTime origin, int interp) { - var origin_new = origin.toEpochSecond(); - return MeosLibrary.meos.temporal_tsample(temp, duration, origin_new, interp); + public static double nad_trgeo_stbox(Pointer temp, Pointer box) { + return MeosLibrary.meos.nad_trgeo_stbox(temp, box); } @SuppressWarnings("unused") - public static double temporal_dyntimewarp_distance(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.temporal_dyntimewarp_distance(temp1, temp2); + public static double nad_trgeo_tpoint(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.nad_trgeo_tpoint(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer temporal_dyntimewarp_path(Pointer temp1, Pointer temp2, Pointer count) { - return MeosLibrary.meos.temporal_dyntimewarp_path(temp1, temp2, count); + public static double nad_trgeo_trgeo(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.nad_trgeo_trgeo(temp1, temp2); } @SuppressWarnings("unused") - public static double temporal_frechet_distance(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.temporal_frechet_distance(temp1, temp2); + public static Pointer nai_trgeo_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.nai_trgeo_geo(temp, gs); } @SuppressWarnings("unused") - public static Pointer temporal_frechet_path(Pointer temp1, Pointer temp2, Pointer count) { - return MeosLibrary.meos.temporal_frechet_path(temp1, temp2, count); + public static Pointer nai_trgeo_tpoint(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.nai_trgeo_tpoint(temp1, temp2); } @SuppressWarnings("unused") - public static double temporal_hausdorff_distance(Pointer temp1, Pointer temp2) { - return MeosLibrary.meos.temporal_hausdorff_distance(temp1, temp2); + public static Pointer nai_trgeo_trgeo(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.nai_trgeo_trgeo(temp1, temp2); } @SuppressWarnings("unused") - public static double float_bucket(double value, double size, double origin) { - return MeosLibrary.meos.float_bucket(value, size, origin); + public static Pointer shortestline_trgeo_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.shortestline_trgeo_geo(temp, gs); } @SuppressWarnings("unused") - public static Pointer floatspan_bucket_list(Pointer bounds, double size, double origin, Pointer count) { - return MeosLibrary.meos.floatspan_bucket_list(bounds, size, origin, count); + public static Pointer shortestline_trgeo_tpoint(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.shortestline_trgeo_tpoint(temp1, temp2); } @SuppressWarnings("unused") - public static int int_bucket(int value, int size, int origin) { - return MeosLibrary.meos.int_bucket(value, size, origin); + public static Pointer shortestline_trgeo_trgeo(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.shortestline_trgeo_trgeo(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer intspan_bucket_list(Pointer bounds, int size, int origin, Pointer count) { - return MeosLibrary.meos.intspan_bucket_list(bounds, size, origin, count); + public static int always_eq_geo_trgeo(Pointer gs, Pointer temp) { + return MeosLibrary.meos.always_eq_geo_trgeo(gs, temp); } @SuppressWarnings("unused") - public static Pointer stbox_tile(Pointer point, OffsetDateTime t, double xsize, double ysize, double zsize, Pointer duration, Pointer sorigin, OffsetDateTime torigin, boolean hast) { - var t_new = t.toEpochSecond(); - var torigin_new = torigin.toEpochSecond(); - return MeosLibrary.meos.stbox_tile(point, t_new, xsize, ysize, zsize, duration, sorigin, torigin_new, hast); + public static int always_eq_trgeo_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.always_eq_trgeo_geo(temp, gs); } @SuppressWarnings("unused") - public static Pointer stbox_tile_list(Pointer bounds, double xsize, double ysize, double zsize, Pointer duration, Pointer sorigin, OffsetDateTime torigin, boolean border_inc, Pointer count) { - var torigin_new = torigin.toEpochSecond(); - return MeosLibrary.meos.stbox_tile_list(bounds, xsize, ysize, zsize, duration, sorigin, torigin_new, border_inc, count); + public static int always_eq_trgeo_trgeo(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.always_eq_trgeo_trgeo(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer temporal_time_split(Pointer temp, Pointer duration, OffsetDateTime torigin, Pointer time_buckets, Pointer count) { - var torigin_new = torigin.toEpochSecond(); - return MeosLibrary.meos.temporal_time_split(temp, duration, torigin_new, time_buckets, count); + public static int always_ne_geo_trgeo(Pointer gs, Pointer temp) { + return MeosLibrary.meos.always_ne_geo_trgeo(gs, temp); } @SuppressWarnings("unused") - public static Pointer tfloat_value_split(Pointer temp, double size, double origin, Pointer value_buckets, Pointer count) { - return MeosLibrary.meos.tfloat_value_split(temp, size, origin, value_buckets, count); + public static int always_ne_trgeo_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.always_ne_trgeo_geo(temp, gs); } @SuppressWarnings("unused") - public static Pointer tfloat_value_time_split(Pointer temp, double size, Pointer duration, double vorigin, OffsetDateTime torigin, Pointer value_buckets, Pointer time_buckets, Pointer count) { - var torigin_new = torigin.toEpochSecond(); - return MeosLibrary.meos.tfloat_value_time_split(temp, size, duration, vorigin, torigin_new, value_buckets, time_buckets, count); + public static int always_ne_trgeo_trgeo(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.always_ne_trgeo_trgeo(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer tfloatbox_tile(double value, OffsetDateTime t, double vsize, Pointer duration, double vorigin, OffsetDateTime torigin) { - var t_new = t.toEpochSecond(); - var torigin_new = torigin.toEpochSecond(); - return MeosLibrary.meos.tfloatbox_tile(value, t_new, vsize, duration, vorigin, torigin_new); + public static int ever_eq_geo_trgeo(Pointer gs, Pointer temp) { + return MeosLibrary.meos.ever_eq_geo_trgeo(gs, temp); } @SuppressWarnings("unused") - public static Pointer tfloatbox_tile_list(Pointer box, double xsize, Pointer duration, double xorigin, OffsetDateTime torigin, Pointer count) { - var torigin_new = torigin.toEpochSecond(); - return MeosLibrary.meos.tfloatbox_tile_list(box, xsize, duration, xorigin, torigin_new, count); + public static int ever_eq_trgeo_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.ever_eq_trgeo_geo(temp, gs); } @SuppressWarnings("unused") - public static OffsetDateTime timestamptz_bucket(OffsetDateTime timestamp, Pointer duration, OffsetDateTime origin) { - var timestamp_new = timestamp.toEpochSecond(); - var origin_new = origin.toEpochSecond(); - var result = MeosLibrary.meos.timestamptz_bucket(timestamp_new, duration, origin_new); - Instant instant = Instant.ofEpochSecond(result); - return OffsetDateTime.ofInstant(instant, ZoneOffset.UTC); + public static int ever_eq_trgeo_trgeo(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.ever_eq_trgeo_trgeo(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer tint_value_split(Pointer temp, int size, int origin, Pointer value_buckets, Pointer count) { - return MeosLibrary.meos.tint_value_split(temp, size, origin, value_buckets, count); + public static int ever_ne_geo_trgeo(Pointer gs, Pointer temp) { + return MeosLibrary.meos.ever_ne_geo_trgeo(gs, temp); } @SuppressWarnings("unused") - public static Pointer tint_value_time_split(Pointer temp, int size, Pointer duration, int vorigin, OffsetDateTime torigin, Pointer value_buckets, Pointer time_buckets, Pointer count) { - var torigin_new = torigin.toEpochSecond(); - return MeosLibrary.meos.tint_value_time_split(temp, size, duration, vorigin, torigin_new, value_buckets, time_buckets, count); + public static int ever_ne_trgeo_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.ever_ne_trgeo_geo(temp, gs); } @SuppressWarnings("unused") - public static Pointer tintbox_tile(int value, OffsetDateTime t, int vsize, Pointer duration, int vorigin, OffsetDateTime torigin) { - var t_new = t.toEpochSecond(); - var torigin_new = torigin.toEpochSecond(); - return MeosLibrary.meos.tintbox_tile(value, t_new, vsize, duration, vorigin, torigin_new); + public static int ever_ne_trgeo_trgeo(Pointer temp1, Pointer temp2) { + return MeosLibrary.meos.ever_ne_trgeo_trgeo(temp1, temp2); } @SuppressWarnings("unused") - public static Pointer tintbox_tile_list(Pointer box, int xsize, Pointer duration, int xorigin, OffsetDateTime torigin, Pointer count) { - var torigin_new = torigin.toEpochSecond(); - return MeosLibrary.meos.tintbox_tile_list(box, xsize, duration, xorigin, torigin_new, count); + public static Pointer teq_geo_trgeo(Pointer gs, Pointer temp) { + return MeosLibrary.meos.teq_geo_trgeo(gs, temp); } @SuppressWarnings("unused") - public static Pointer tpoint_space_split(Pointer temp, float xsize, float ysize, float zsize, Pointer sorigin, boolean bitmatrix, boolean border_inc, Pointer space_buckets, Pointer count) { - return MeosLibrary.meos.tpoint_space_split(temp, xsize, ysize, zsize, sorigin, bitmatrix, border_inc, space_buckets, count); + public static Pointer teq_trgeo_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.teq_trgeo_geo(temp, gs); } @SuppressWarnings("unused") - public static Pointer tpoint_space_time_split(Pointer temp, float xsize, float ysize, float zsize, Pointer duration, Pointer sorigin, OffsetDateTime torigin, boolean bitmatrix, boolean border_inc, Pointer space_buckets, Pointer time_buckets, Pointer count) { - var torigin_new = torigin.toEpochSecond(); - return MeosLibrary.meos.tpoint_space_time_split(temp, xsize, ysize, zsize, duration, sorigin, torigin_new, bitmatrix, border_inc, space_buckets, time_buckets, count); + public static Pointer tne_geo_trgeo(Pointer gs, Pointer temp) { + return MeosLibrary.meos.tne_geo_trgeo(gs, temp); } @SuppressWarnings("unused") - public static Pointer tstzspan_bucket_list(Pointer bounds, Pointer duration, OffsetDateTime origin, Pointer count) { - var origin_new = origin.toEpochSecond(); - return MeosLibrary.meos.tstzspan_bucket_list(bounds, duration, origin_new, count); + public static Pointer tne_trgeo_geo(Pointer temp, Pointer gs) { + return MeosLibrary.meos.tne_trgeo_geo(temp, gs); } } \ No newline at end of file From 06719171920e4efdd9fc1117148f7e5ade9992fa Mon Sep 17 00:00:00 2001 From: Esteban Zimanyi Date: Sun, 10 May 2026 18:40:34 +0200 Subject: [PATCH 2/8] feat(library): uplift utils/types/test callsites to MEOS 1.4 API MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mechanical 1:1 renames across utils/, types/, and test/ for the removed-or-renamed symbols listed in PR description: pg_*, pgis_*, geoset_*, tpoint_* (most → tspatial_*/tgeo_*), distance_* (→ tdistance_*), ever_/always_eq_tpoint_point (→ ever_/always_eq_tgeo_geo), the 5 spatial- predicate callsites that dropped trailing (false,false) atvalue/restr args, TInterpolation.toString() → .getValue() for temporal_to_tsequence{,set}, and the 2-arg meos_initialize → 0-arg + (deferred) error-handler split. Stub methods (UnsupportedOperationException) for symbols with no MEOS 1.4 equivalent: - TGeomPoint.to_geographic / TGeogPoint.to_geometric (no tgeompoint_to_tgeogpoint / tgeogpoint_to_tgeompoint; callers must convert per-instant via geom_to_geog / geog_to_geom) Replaced symbols where a newer MEOS API supersedes: - TPoint.expand: tpoint_expand_space → tspatial_to_stbox + stbox_expand_space - TPoint.transform: lwproj_transform + tpoint_transform_pj → tspatial_transform - TPoint.is_spatially_contained_in / disjoint / intersects / touches: drop trailing (false,false) restr/atvalue args - Temporal.append: insert leading interp arg (LINEAR) for the new temporal_append_tinstant signature Build artefacts: jar/JMEOS.jar refreshed (476 KB, libmeos.so + functions.class with 256 KB of bindings — the regenerated MEOS 1.4 surface) mvn package -Dmaven.test.skip=false -DskipTests: BUILD SUCCESS --- jar/JMEOS.jar | Bin 402152 -> 476829 bytes src/main/java/builder/resources/meos.h | 4 + src/main/java/functions/functions.java | 318 ++++++++---------- .../java/types/basic/tnumber/TNumber.java | 16 +- src/main/java/types/basic/tpoint/TPoint.java | 174 +++++----- .../types/basic/tpoint/tgeog/TGeogPoint.java | 22 +- .../types/basic/tpoint/tgeom/TGeomPoint.java | 22 +- src/main/java/types/boxes/STBox.java | 22 +- src/main/java/types/boxes/TBox.java | 6 +- .../java/types/collections/geo/GeoSet.java | 30 +- .../java/types/collections/time/tstzspan.java | 14 +- src/main/java/types/temporal/Temporal.java | 26 +- src/main/java/utils/ConversionUtils.java | 16 +- src/test/java/basic/TBoolTest.java | 134 ++++---- src/test/java/basic/TFloatTest.java | 144 ++++---- src/test/java/basic/TGeogPointTest.java | 146 ++++---- src/test/java/basic/TGeomPointTest.java | 146 ++++---- src/test/java/basic/TIntTest.java | 144 ++++---- src/test/java/basic/TTextTest.java | 104 +++--- src/test/java/boxes/STBoxTest.java | 8 +- src/test/java/boxes/TBoxTest.java | 40 +-- .../java/collections/number/FloatSetTest.java | 4 +- .../collections/number/FloatSpanSetTest.java | 6 +- .../collections/number/FloatSpanTest.java | 6 +- .../java/collections/number/IntSetTest.java | 4 +- .../collections/number/IntSpanSetTest.java | 6 +- .../java/collections/number/IntSpanTest.java | 6 +- .../java/collections/time/datesetTest.java | 2 +- .../java/collections/time/datespanTest.java | 2 +- .../collections/time/datespansetTest.java | 2 +- .../java/collections/time/tstzsetTest.java | 46 +-- .../java/collections/time/tstzspanTest.java | 106 +++--- .../collections/time/tstzspansetTest.java | 80 ++--- src/test/java/temporal/InterpolationTest.java | 4 +- 34 files changed, 881 insertions(+), 929 deletions(-) diff --git a/jar/JMEOS.jar b/jar/JMEOS.jar index 4392864a3ea70d92e155823134c53e3d0006e488..764c62395914dd2cf31142db952eb448e87b2291 100644 GIT binary patch delta 192794 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

{Hb`$O&fmuJirdjz~*x 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 - *

  • distance_tfloat_float
  • - *
  • distance_tnumber_tnumber
  • + *
  • tdistance_tfloat_float
  • + *
  • tdistance_tnumber_tnumber
  • * * @param other A {@link Integer}, {@link Float} or {@link TNumber} to * * compare to "this". @@ -737,11 +737,11 @@ default TNumber delta_value(){ */ default TFloat distance(Object other) throws OperationNotSupportedException { if ( (other instanceof Integer)){ - return (TFloat) Factory.create_temporal(functions.distance_tfloat_float(getNumberInner(),(float)((Integer) other).intValue()),getCustomType(),getTemporalType()); + return (TFloat) Factory.create_temporal(functions.tdistance_tfloat_float(getNumberInner(),(float)((Integer) other).intValue()),getCustomType(),getTemporalType()); } else if ((other instanceof Float)) { - return (TFloat) Factory.create_temporal(functions.distance_tfloat_float(getNumberInner(),((Float) other).floatValue()),getCustomType(),getTemporalType()); + return (TFloat) Factory.create_temporal(functions.tdistance_tfloat_float(getNumberInner(),((Float) other).floatValue()),getCustomType(),getTemporalType()); } else if (other instanceof TNumber) { - return (TFloat) Factory.create_temporal(functions.distance_tnumber_tnumber(getNumberInner(),((TNumber) other).getNumberInner()),getCustomType(),getTemporalType()); + return (TFloat) Factory.create_temporal(functions.tdistance_tnumber_tnumber(getNumberInner(),((TNumber) other).getNumberInner()),getCustomType(),getTemporalType()); } else{ throw new OperationNotSupportedException("Operand not supported"); @@ -844,21 +844,21 @@ default List value_time_split(Object duration, int value_size, int valu OffsetDateTime st= null; Pointer dt= null; if(time_start != null){ - st= functions.pg_timestamptz_in("2000-01-03", -1); + st= functions.timestamptz_in("2000-01-03", -1); } else{ if(time_start instanceof LocalDateTime){ st= ConversionUtils.datetimeToTimestampTz((LocalDateTime) time_start); } else{ - st= functions.pg_timestamptz_in(time_start.toString(), -1); + st= functions.timestamptz_in(time_start.toString(), -1); } if(duration instanceof Duration){ dt= ConversionUtils.timedelta_to_interval((Duration) duration); } else{ - dt= functions.pg_interval_in(duration.toString(), -1); + dt= functions.interval_in(duration.toString(), -1); } } // Create a JNR-FFI runtime instance diff --git a/src/main/java/types/basic/tpoint/TPoint.java b/src/main/java/types/basic/tpoint/TPoint.java index ff1cc17d4..1cad61160 100644 --- a/src/main/java/types/basic/tpoint/TPoint.java +++ b/src/main/java/types/basic/tpoint/TPoint.java @@ -56,7 +56,7 @@ public interface TPoint extends Serializable { * @return A new {@link String} representing the temporal point. */ default String to_string(){ - return functions.tpoint_as_text(getPointInner(),15); + return functions.tspatial_as_text(getPointInner(),15); } @@ -72,7 +72,7 @@ default String to_string(){ * @return A new {@link String} representing the temporal point. */ default String as_wkt(int decimals){ - return functions.tpoint_as_text(getPointInner(),decimals); + return functions.tspatial_as_text(getPointInner(),decimals); } @@ -82,13 +82,13 @@ default String as_wkt(int decimals){ *

    * * MEOS Functions: - *

  • tpoint_as_ewkt
  • + *
  • tspatial_as_ewkt
  • * * @param decimals The precision of the returned geometry. * @return A new {@link String} representing the temporal point. */ default String as_ewkt(int decimals){ - return functions.tpoint_as_ewkt(getPointInner(),decimals); + return functions.tspatial_as_ewkt(getPointInner(),decimals); } @@ -135,11 +135,11 @@ default Geometry to_shapely_geometry(int precision) throws ParseException { * *

    * MEOS Functions: - *

  • tpoint_to_stbox
  • + *
  • tspatial_to_stbox
  • * @return An {@link STBox} representing the bounding box. */ default STBox bounding_box_point(){ - return new STBox(functions.tpoint_to_stbox(getPointInner())); + return new STBox(functions.tspatial_to_stbox(getPointInner())); } /** @@ -203,14 +203,14 @@ default Point end_value(int precision) throws ParseException { A :class:`set` of :class:`~shapely.geometry.Point` with the values. MEOS Functions: - tpoint_values + tgeo_values */ // default Set value_set(int precision) throws ParseException { // // Create a JNR-FFI runtime instance // Runtime runtime = Runtime.getSystemRuntime(); // // Allocate memory for an integer (4 bytes) but do not set a value // Pointer intPointer = Memory.allocate(Runtime.getRuntime(runtime), 4); -// Pointer resPointer= functions.tpoint_values(this.getPointInner(), intPointer); +// Pointer resPointer= functions.tgeo_values(this.getPointInner(), intPointer); // List pointList= new ArrayList<>(); // int count= intPointer.getInt(Integer.BYTES); // StringBuilder sb = null; @@ -270,7 +270,7 @@ default Point value_at_timestamp(LocalDateTime ts, int precision) throws ParseEx Runtime runtime = Runtime.getSystemRuntime(); // Allocate memory for an integer (4 bytes) but do not set a value Pointer geomPointer = Memory.allocate(Runtime.getRuntime(runtime), 8); - boolean b= functions.tpoint_value_at_timestamptz(this.getPointInner(), ConversionUtils.datetimeToTimestampTz(ts), true, geomPointer); + boolean b= functions.tgeo_value_at_timestamptz(this.getPointInner(), ConversionUtils.datetimeToTimestampTz(ts), true, geomPointer); Pointer geom= geomPointer.getPointer(Long.BYTES); return ConversionUtils.gserialized_to_shapely_point(geom, precision); } @@ -378,14 +378,14 @@ default boolean has_z(){ A :class:`list` of :class:`STBox`es. MEOS Functions: - tpoint_stboxes + tgeo_stboxes */ default List stboxes(){ // Create a JNR-FFI runtime instance Runtime runtime = Runtime.getSystemRuntime(); // Allocate memory for an integer (4 bytes) but do not set a value Pointer intPointer = Memory.allocate(Runtime.getRuntime(runtime), 4); - Pointer resPointer= functions.tpoint_stboxes(this.getPointInner(), intPointer); + Pointer resPointer= functions.tgeo_stboxes(this.getPointInner(), intPointer); List stBoxList= new ArrayList<>(); int length= intPointer.getInt(Integer.BYTES); for(int i=0; i * MEOS Functions: - *
  • tpoint_srid
  • + *
  • tspatial_srid
  • * @return An {@link Integer} representing the SRID. */ default int srid(){ - return functions.tpoint_srid(getPointInner()); + return functions.tspatial_srid(getPointInner()); } @@ -506,12 +506,12 @@ default int srid(){ * Returns a new TPoint with the given SRID. *

    * MEOS Functions: - *

  • tpoint_set_srid
  • + *
  • tspatial_set_srid
  • * @param srid int value * @return Returns a new TPoint with the given SRID. */ default TPoint set_srid(int srid){ - return (TPoint) Factory.create_temporal(functions.tpoint_set_srid(getPointInner(),srid),getCustomType(),getTemporalType()); + return (TPoint) Factory.create_temporal(functions.tspatial_set_srid(getPointInner(),srid),getCustomType(),getTemporalType()); } @@ -525,12 +525,12 @@ default TPoint set_srid(int srid){ *

    * * MEOS Functions: - *

  • tpoint_round
  • + *
  • temporal_round
  • * @param max_decimals number of decimals * @return A new {@link TPoint} object. */ default TPoint round(int max_decimals){ - return (TPoint) Factory.create_temporal(functions.tpoint_round(getPointInner(),max_decimals),getCustomType(),getTemporalType()); + return (TPoint) Factory.create_temporal(functions.temporal_round(getPointInner(),max_decimals),getCustomType(),getTemporalType()); } /** @@ -573,7 +573,9 @@ default List make_simple(){ * @return A new {@link STBox} instance. */ default STBox expand(float other){ - return new STBox(functions.tpoint_expand_space(getPointInner(),other)); + // MEOS 1.4: tpoint_expand_space replaced by stbox_expand_space (operates on the bbox). + Pointer box = functions.tspatial_to_stbox(getPointInner()); + return new STBox(functions.stbox_expand_space(box, other)); } /** Returns a new :class:`TPoint` of the same subclass of ``self`` transformed to another SRID @@ -587,17 +589,9 @@ default STBox expand(float other){ MEOS Functions: tpoint_transform */ - Map, Pointer> projectionCache = new HashMap<>(); default TPoint transform(int srid){ - AbstractMap.SimpleEntry srids = new AbstractMap.SimpleEntry<>(this.srid(), srid); - // Check and cache the projection if not already cached - if (!projectionCache.containsKey(srids)) { - projectionCache.put(srids, functions.lwproj_transform(srids.getKey(), srids.getValue())); - } - // Perform the transformation using the cached projection - Pointer result = functions.tpoint_transform_pj(this.getPointInner(), srid, projectionCache.get(srids)); - - // Create and return a new TPoint instance + // MEOS 1.4: lwproj_transform / tpoint_transform_pj replaced by tspatial_transform. + Pointer result = functions.tspatial_transform(this.getPointInner(), srid); return (TPoint) Factory.create_temporal(result, getCustomType(), getTemporalType()); } @@ -881,16 +875,16 @@ default boolean is_over_or_behind(TemporalObject other){ * *

    * MEOS Functions: - *

  • econtains_geo_tpoint
  • + *
  • econtains_geo_tgeo
  • * @param other An object to check for containing "this". * @return A {@link Boolean} indicating whether the temporal point is ever contained by "other". * @throws OperationNotSupportedException */ default boolean is_ever_contained_in(Object other) throws OperationNotSupportedException { if (other instanceof Geometry){ - return 1 == functions.econtains_geo_tpoint(ConversionUtils.geo_to_gserialized((Geometry) other, this instanceof TGeogPoint), getPointInner()); + return 1 == functions.econtains_geo_tgeo(ConversionUtils.geo_to_gserialized((Geometry) other, this instanceof TGeogPoint), getPointInner()); } else if (other instanceof STBox) { - return 1 == functions.econtains_geo_tpoint(functions.stbox_to_geo(((STBox) other).get_inner()),getPointInner()); + return 1 == functions.econtains_geo_tgeo(functions.stbox_to_geo(((STBox) other).get_inner()),getPointInner()); } else{ throw new OperationNotSupportedException("Operand not supported"); @@ -903,19 +897,19 @@ default boolean is_ever_contained_in(Object other) throws OperationNotSupportedE * *

    * MEOS Functions: - *

  • edisjoint_tpoint_geo
  • - *
  • edisjoint_tpoint_tpoint
  • + *
  • edisjoint_tgeo_geo
  • + *
  • edisjoint_tgeo_tgeo
  • * @param other An object to check for disjointness with. * @return A {@link Boolean} indicating whether the temporal point is ever disjoint from "other". * @throws OperationNotSupportedException */ default boolean is_ever_disjoint(Object other) throws OperationNotSupportedException { if (other instanceof Geometry){ - return 1 == functions.edisjoint_tpoint_geo(getPointInner(), ConversionUtils.geo_to_gserialized((Geometry) other, this instanceof TGeogPoint)); + return 1 == functions.edisjoint_tgeo_geo(getPointInner(), ConversionUtils.geo_to_gserialized((Geometry) other, this instanceof TGeogPoint)); } else if (other instanceof STBox) { - return 1 == functions.edisjoint_tpoint_geo(getPointInner(), functions.stbox_to_geo(((STBox) other).get_inner())); + return 1 == functions.edisjoint_tgeo_geo(getPointInner(), functions.stbox_to_geo(((STBox) other).get_inner())); } else if (other instanceof TPoint) { - return 1 == functions.edisjoint_tpoint_tpoint(getPointInner(), ((TPoint) other).getPointInner()); + return 1 == functions.edisjoint_tgeo_tgeo(getPointInner(), ((TPoint) other).getPointInner()); } else{ throw new OperationNotSupportedException("Operand not supported"); } @@ -928,8 +922,8 @@ default boolean is_ever_disjoint(Object other) throws OperationNotSupportedExcep *

    * * MEOS Functions: - *

  • edwithin_tpoint_geo
  • - *
  • edwithin_tpoint_tpoint
  • + *
  • edwithin_tgeo_geo
  • + *
  • edwithin_tgeo_tgeo
  • * @param other An object to check the distance to. * @param distance The distance to check in units of the spatial reference system. * @return A {@link Boolean} indicating whether the temporal point is ever within "distance" of "other". @@ -937,11 +931,11 @@ default boolean is_ever_disjoint(Object other) throws OperationNotSupportedExcep */ default boolean is_ever_within_distance(Object other, float distance) throws OperationNotSupportedException { if (other instanceof Geometry){ - return 1 == functions.edwithin_tpoint_geo( getPointInner(), ConversionUtils.geo_to_gserialized((Geometry) other, this instanceof TGeogPoint), distance); + return 1 == functions.edwithin_tgeo_geo( getPointInner(), ConversionUtils.geo_to_gserialized((Geometry) other, this instanceof TGeogPoint), distance); } else if (other instanceof STBox) { - return 1 == functions.edwithin_tpoint_geo(getPointInner(), functions.stbox_to_geo(((STBox) other).get_inner()), distance); + return 1 == functions.edwithin_tgeo_geo(getPointInner(), functions.stbox_to_geo(((STBox) other).get_inner()), distance); } else if (other instanceof TPoint) { - return 1 == functions.edwithin_tpoint_tpoint(getPointInner(), ((TPoint) other).getPointInner(), distance); + return 1 == functions.edwithin_tgeo_tgeo(getPointInner(), ((TPoint) other).getPointInner(), distance); } else{ throw new OperationNotSupportedException("Operand not supported"); } @@ -954,19 +948,19 @@ default boolean is_ever_within_distance(Object other, float distance) throws Ope *

    * * MEOS Functions: - *

  • eintersects_tpoint_geo
  • - *
  • eintersects_tpoint_tpoint
  • + *
  • eintersects_tgeo_geo
  • + *
  • eintersects_tgeo_tgeo
  • * @param other An object to check for intersection with. * @return A {@link Boolean} indicating whether the temporal point ever intersects "other". * @throws OperationNotSupportedException */ default boolean ever_intersects(Object other) throws OperationNotSupportedException { if (other instanceof Geometry){ - return 1 == functions.eintersects_tpoint_geo( getPointInner(), ConversionUtils.geo_to_gserialized((Geometry) other, this instanceof TGeogPoint)); + return 1 == functions.eintersects_tgeo_geo( getPointInner(), ConversionUtils.geo_to_gserialized((Geometry) other, this instanceof TGeogPoint)); } else if (other instanceof STBox) { - return 1 == functions.eintersects_tpoint_geo(getPointInner(), functions.stbox_to_geo(((STBox) other).get_inner())); + return 1 == functions.eintersects_tgeo_geo(getPointInner(), functions.stbox_to_geo(((STBox) other).get_inner())); } else if (other instanceof TPoint) { - return 1 == functions.eintersects_tpoint_tpoint(getPointInner(), ((TPoint) other).getPointInner()); + return 1 == functions.eintersects_tgeo_tgeo(getPointInner(), ((TPoint) other).getPointInner()); } else{ throw new OperationNotSupportedException("Operand not supported"); } @@ -1004,16 +998,16 @@ default boolean ever_touches(Object other) throws OperationNotSupportedException *

    * * MEOS Functions: - *

  • tcontains_geo_tpoint
  • + *
  • tcontains_geo_tgeo
  • * @param other An object to check for containing "this". * @return A {@link TBool} indicating whether the temporal point is contained by "other". * @throws OperationNotSupportedException */ default TBool is_spatially_contained_in(Object other) throws OperationNotSupportedException { if (other instanceof Geometry){ - return (TBool) Factory.create_temporal(functions.tcontains_geo_tpoint(ConversionUtils.geo_to_gserialized((Geometry) other, this instanceof TGeogPoint), getPointInner(),false,false), "Boolean", getTemporalType() ) ; + return (TBool) Factory.create_temporal(functions.tcontains_geo_tgeo(ConversionUtils.geo_to_gserialized((Geometry) other, this instanceof TGeogPoint), getPointInner()), "Boolean", getTemporalType() ) ; } else if (other instanceof STBox) { - return (TBool) Factory.create_temporal(functions.tcontains_geo_tpoint(functions.stbox_to_geo(((STBox) other).get_inner()), getPointInner(), false,false), "Boolean", getTemporalType() ); + return (TBool) Factory.create_temporal(functions.tcontains_geo_tgeo(functions.stbox_to_geo(((STBox) other).get_inner()), getPointInner()), "Boolean", getTemporalType() ); } else{ throw new OperationNotSupportedException("Operand not supported"); } @@ -1026,16 +1020,16 @@ default TBool is_spatially_contained_in(Object other) throws OperationNotSupport *

    * * MEOS Functions: - *

  • tdisjoint_tpoint_geo
  • + *
  • tdisjoint_tgeo_geo
  • * @param other An object to check for intersection with. * @return A {@link TBool} indicating whether the temporal point intersects "other". * @throws OperationNotSupportedException */ default TBool disjoint(Object other) throws OperationNotSupportedException { if (other instanceof Geometry){ - return (TBool) Factory.create_temporal(functions.tdisjoint_tpoint_geo(getPointInner(),ConversionUtils.geo_to_gserialized((Geometry) other, this instanceof TGeogPoint),false,false), "Boolean", getTemporalType() ) ; + return (TBool) Factory.create_temporal(functions.tdisjoint_tgeo_geo(getPointInner(),ConversionUtils.geo_to_gserialized((Geometry) other, this instanceof TGeogPoint)), "Boolean", getTemporalType() ) ; } else if (other instanceof STBox) { - return (TBool) Factory.create_temporal(functions.tdisjoint_tpoint_geo(getPointInner(),functions.stbox_to_geo(((STBox) other).get_inner()), false,false), "Boolean", getTemporalType() ); + return (TBool) Factory.create_temporal(functions.tdisjoint_tgeo_geo(getPointInner(),functions.stbox_to_geo(((STBox) other).get_inner())), "Boolean", getTemporalType() ); } else{ throw new OperationNotSupportedException("Operand not supported"); } @@ -1047,8 +1041,8 @@ default TBool disjoint(Object other) throws OperationNotSupportedException { * *

    * MEOS Functions: - *

  • tdwithin_tpoint_geo
  • - *
  • tdwithin_tpoint_tpoint
  • + *
  • tdwithin_tgeo_geo
  • + *
  • tdwithin_tgeo_tgeo
  • * @param other An object to check the distance to. * @param distance The distance to check in units of the spatial reference system. * @return A {@link TBool} indicating whether the temporal point is within "distance" of "other". @@ -1056,11 +1050,11 @@ default TBool disjoint(Object other) throws OperationNotSupportedException { */ default TBool within_distance(Object other, float distance) throws OperationNotSupportedException { if (other instanceof Geometry){ - return (TBool) Factory.create_temporal(functions.tdwithin_tpoint_geo(getPointInner(),ConversionUtils.geo_to_gserialized((Geometry) other, this instanceof TGeogPoint), distance, false,false), "Boolean", getTemporalType() ) ; + return (TBool) Factory.create_temporal(functions.tdwithin_tgeo_geo(getPointInner(),ConversionUtils.geo_to_gserialized((Geometry) other, this instanceof TGeogPoint), distance), "Boolean", getTemporalType() ) ; } else if (other instanceof STBox) { - return (TBool) Factory.create_temporal(functions.tdwithin_tpoint_geo(getPointInner(),functions.stbox_to_geo(((STBox) other).get_inner()), distance,false,false), "Boolean", getTemporalType() ); + return (TBool) Factory.create_temporal(functions.tdwithin_tgeo_geo(getPointInner(),functions.stbox_to_geo(((STBox) other).get_inner()), distance), "Boolean", getTemporalType() ); } else if(other instanceof TPoint){ - return (TBool) Factory.create_temporal(functions.tdwithin_tpoint_tpoint(getPointInner(),((TPoint) other).getPointInner(), distance,false,false), "Boolean", getTemporalType() ); + return (TBool) Factory.create_temporal(functions.tdwithin_tgeo_tgeo(getPointInner(),((TPoint) other).getPointInner(), distance), "Boolean", getTemporalType() ); }else{ throw new OperationNotSupportedException("Operand not supported"); } @@ -1073,16 +1067,16 @@ default TBool within_distance(Object other, float distance) throws OperationNotS *

    * * MEOS Functions: - *

  • tintersects_tpoint_geo
  • + *
  • tintersects_tgeo_geo
  • * @param other An object to check for intersection with. * @return A {@link TBool} indicating whether the temporal point intersects "other". * @throws OperationNotSupportedException */ default TBool intersects(Object other) throws OperationNotSupportedException { if (other instanceof Geometry){ - return (TBool) Factory.create_temporal(functions.tintersects_tpoint_geo(getPointInner(),ConversionUtils.geo_to_gserialized((Geometry) other, this instanceof TGeogPoint),false,false), "Boolean", getTemporalType() ) ; + return (TBool) Factory.create_temporal(functions.tintersects_tgeo_geo(getPointInner(),ConversionUtils.geo_to_gserialized((Geometry) other, this instanceof TGeogPoint)), "Boolean", getTemporalType() ) ; } else if (other instanceof STBox) { - return (TBool) Factory.create_temporal(functions.tintersects_tpoint_geo(getPointInner(),functions.stbox_to_geo(((STBox) other).get_inner()), false,false), "Boolean", getTemporalType() ); + return (TBool) Factory.create_temporal(functions.tintersects_tgeo_geo(getPointInner(),functions.stbox_to_geo(((STBox) other).get_inner())), "Boolean", getTemporalType() ); } else{ throw new OperationNotSupportedException("Operand not supported"); } @@ -1095,16 +1089,16 @@ default TBool intersects(Object other) throws OperationNotSupportedException { *

    * * MEOS Functions: - *

  • ttouches_tpoint_geo
  • + *
  • ttouches_tgeo_geo
  • * @param other An object to check for touching with. * @return A {@link TBool} indicating whether the temporal point touches "other". * @throws OperationNotSupportedException */ default TBool touches(Object other) throws OperationNotSupportedException { if (other instanceof Geometry){ - return (TBool) Factory.create_temporal(functions.ttouches_tpoint_geo(getPointInner(),ConversionUtils.geo_to_gserialized((Geometry) other, this instanceof TGeogPoint),false,false), "Boolean", getTemporalType() ) ; + return (TBool) Factory.create_temporal(functions.ttouches_tgeo_geo(getPointInner(),ConversionUtils.geo_to_gserialized((Geometry) other, this instanceof TGeogPoint)), "Boolean", getTemporalType() ) ; } else if (other instanceof STBox) { - return (TBool) Factory.create_temporal(functions.ttouches_tpoint_geo(getPointInner(),functions.stbox_to_geo(((STBox) other).get_inner()), false,false), "Boolean", getTemporalType() ); + return (TBool) Factory.create_temporal(functions.ttouches_tgeo_geo(getPointInner(),functions.stbox_to_geo(((STBox) other).get_inner())), "Boolean", getTemporalType() ); } else{ throw new OperationNotSupportedException("Operand not supported"); } @@ -1118,19 +1112,19 @@ default TBool touches(Object other) throws OperationNotSupportedException { * *

    * MEOS Functions: - *

  • distance_tpoint_point
  • - *
  • distance_tpoint_tpoint
  • + *
  • distance_tgeo_geo
  • + *
  • distance_tgeo_tgeo
  • * @param other An object to check the distance to. * @return A new {@link TFloat} indicating the temporal distance between the temporal point and "other". * @throws OperationNotSupportedException */ default TFloat distance(Object other) throws OperationNotSupportedException { if (other instanceof Geometry){ - return (TFloat) Factory.create_temporal(functions.distance_tpoint_point(getPointInner(),ConversionUtils.geo_to_gserialized((Geometry) other, this instanceof TGeogPoint)), "Float", getTemporalType() ) ; + return (TFloat) Factory.create_temporal(functions.tdistance_tgeo_geo(getPointInner(),ConversionUtils.geo_to_gserialized((Geometry) other, this instanceof TGeogPoint)), "Float", getTemporalType() ) ; } else if (other instanceof STBox) { - return (TFloat) Factory.create_temporal(functions.distance_tpoint_point(getPointInner(),functions.stbox_to_geo(((STBox) other).get_inner())), "Float", getTemporalType() ); + return (TFloat) Factory.create_temporal(functions.tdistance_tgeo_geo(getPointInner(),functions.stbox_to_geo(((STBox) other).get_inner())), "Float", getTemporalType() ); } else if(other instanceof TPoint){ - return (TFloat) Factory.create_temporal(functions.distance_tpoint_tpoint(getPointInner(),((TPoint) other).getPointInner()), "Float", getTemporalType() ); + return (TFloat) Factory.create_temporal(functions.tdistance_tgeo_tgeo(getPointInner(),((TPoint) other).getPointInner()), "Float", getTemporalType() ); }else{ throw new OperationNotSupportedException("Operand not supported"); } @@ -1142,20 +1136,20 @@ default TFloat distance(Object other) throws OperationNotSupportedException { * *

    * MEOS Functions: - *

  • nad_tpoint_geo
  • - *
  • nad_tpoint_stbox
  • - *
  • nad_tpoint_tpoint
  • + *
  • nad_tgeo_geo
  • + *
  • nad_tgeo_stbox
  • + *
  • nad_tgeo_tgeo
  • * @param other An object to check the nearest approach distance to. * @return A {@link Float} indicating the nearest approach distance between the temporal point and "other". * @throws OperationNotSupportedException */ default float nearest_approach_distance(Object other) throws OperationNotSupportedException { if (other instanceof Geometry){ - return (float) functions.nad_tpoint_geo( getPointInner(), ConversionUtils.geo_to_gserialized((Geometry) other, this instanceof TGeogPoint)); + return (float) functions.nad_tgeo_geo( getPointInner(), ConversionUtils.geo_to_gserialized((Geometry) other, this instanceof TGeogPoint)); } else if (other instanceof STBox) { - return (float) functions.nad_tpoint_stbox(getPointInner(), functions.stbox_to_geo(((STBox) other).get_inner())); + return (float) functions.nad_tgeo_stbox(getPointInner(), functions.stbox_to_geo(((STBox) other).get_inner())); } else if (other instanceof TPoint) { - return (float) functions.nad_tpoint_tpoint(getPointInner(), ((TPoint) other).getPointInner()); + return (float) functions.nad_tgeo_tgeo(getPointInner(), ((TPoint) other).getPointInner()); } else{ throw new OperationNotSupportedException("Operand not supported"); } @@ -1167,17 +1161,17 @@ default float nearest_approach_distance(Object other) throws OperationNotSupport * *

    * MEOS Functions: - *

  • nai_tpoint_geo
  • - *
  • nai_tpoint_tpoint
  • + *
  • nai_tgeo_geo
  • + *
  • nai_tgeo_tgeo
  • * @param other An object to check the nearest approach instant to. * @return A new temporal instant indicating the nearest approach instant between the temporal point and "other". * @throws OperationNotSupportedException */ default TInstant nearest_approach_instant(Object other) throws OperationNotSupportedException { if (other instanceof Geometry){ - return (TInstant) Factory.create_temporal(functions.nai_tpoint_geo(getPointInner(),ConversionUtils.geo_to_gserialized((Geometry) other, this instanceof TGeogPoint)), getCustomType(), getTemporalType() ) ; + return (TInstant) Factory.create_temporal(functions.nai_tgeo_geo(getPointInner(),ConversionUtils.geo_to_gserialized((Geometry) other, this instanceof TGeogPoint)), getCustomType(), getTemporalType() ) ; } else if(other instanceof TPoint){ - return (TInstant) Factory.create_temporal(functions.nai_tpoint_tpoint(getPointInner(),((TPoint) other).getPointInner()), getCustomType(), getTemporalType() ); + return (TInstant) Factory.create_temporal(functions.nai_tgeo_tgeo(getPointInner(),((TPoint) other).getPointInner()), getCustomType(), getTemporalType() ); }else{ throw new OperationNotSupportedException("Operand not supported"); } @@ -1194,7 +1188,7 @@ default TInstant nearest_approach_instant(Object other) throws OperationNotSuppo and `other`. MEOS Functions: - shortestline_tpoint_geo, shortestline_tpoint_tpoint + shortestline_tgeo_geo, shortestline_tpoint_tpoint */ default Geometry shortest_line(Object other) throws OperationNotSupportedException, ParseException { @@ -1202,9 +1196,9 @@ default Geometry shortest_line(Object other) throws OperationNotSupportedExcepti if (other instanceof Geometry){ boolean b= this instanceof TGeogPoint; Pointer gs= ConversionUtils.geo_to_gserialized((Geometry) other, b); - res= functions.shortestline_tpoint_geo(this.getPointInner(), gs); + res= functions.shortestline_tgeo_geo(this.getPointInner(), gs); } else if(other instanceof TPoint){ - res= functions.shortestline_tpoint_geo(this.getPointInner(), ((TPoint) other).getPointInner()); + res= functions.shortestline_tgeo_geo(this.getPointInner(), ((TPoint) other).getPointInner()); }else{ throw new OperationNotSupportedException("Operand not supported"); } @@ -1279,10 +1273,10 @@ default List space_split(Float xsize, Float ysize, Float zsize, Geomet } else{ if(isTGeogPoint){ - gs= functions.pgis_geography_in("Point (0 0 0)", -1); + gs= functions.geog_in("Point (0 0 0)", -1); } else{ - gs= functions.pgis_geometry_in("Point (0 0 0)", -1); + gs= functions.geom_in("Point (0 0 0)", -1); } } // Create a JNR-FFI runtime instance @@ -1291,7 +1285,7 @@ default List space_split(Float xsize, Float ysize, Float zsize, Geomet Pointer intPointer = Memory.allocate(Runtime.getRuntime(runtime), 4); int length= runtime.longSize(); Pointer space_buckets = createEmptyPointerArray(runtime, length); - Pointer resPointer= functions.tpoint_space_split(this.getPointInner(), xsize, ysz, zsz, gs, bitmatrix, include_border, space_buckets, intPointer); + Pointer resPointer= functions.tgeo_space_split(this.getPointInner(), xsize, ysz, zsz, gs, bitmatrix, include_border, space_buckets, intPointer); int count= intPointer.getInt(Integer.BYTES); List tempList= new ArrayList<>(); for(int i=0;i space_time_split(Float xsize, Object duration, Float ysiz dt= ConversionUtils.timedelta_to_interval((Duration) duration); } else{ - dt= functions.pg_interval_in(duration.toString(), -1); + dt= functions.interval_in(duration.toString(), -1); } Pointer gs= null; @@ -1340,23 +1334,23 @@ default List space_time_split(Float xsize, Object duration, Float ysiz } else{ if(isTGeogPoint){ - gs= functions.pgis_geography_in("Point (0 0 0)", -1); + gs= functions.geog_in("Point (0 0 0)", -1); } else{ - gs= functions.pgis_geometry_in("Point (0 0 0)", -1); + gs= functions.geom_in("Point (0 0 0)", -1); } } OffsetDateTime st= null; if(time_start!=null){ - st= functions.pg_timestamptz_in("2000-01-03", -1); + st= functions.timestamptz_in("2000-01-03", -1); } else{ if(time_start instanceof LocalDateTime){ st= ConversionUtils.datetimeToTimestampTz((LocalDateTime) time_start); } else{ - st= functions.pg_timestamptz_in(time_start.toString(), -1); + st= functions.timestamptz_in(time_start.toString(), -1); } } @@ -1367,7 +1361,7 @@ default List space_time_split(Float xsize, Object duration, Float ysiz int length= runtime.longSize(); Pointer space_buckets = createEmptyPointerArray(runtime, length); Pointer time_buckets = createEmptyPointerArray(runtime, length); - Pointer resPointer= functions.tpoint_space_time_split(this.getPointInner(), xsize, ysz, zsz, dt, gs, st, bitmatrix, include_border, space_buckets, time_buckets, intPointer); + Pointer resPointer= functions.tgeo_space_time_split(this.getPointInner(), xsize, ysz, zsz, dt, gs, st, bitmatrix, include_border, space_buckets, time_buckets, intPointer); int count= intPointer.getInt(Integer.BYTES); List tempList= new ArrayList<>(); for(int i=0;i pointList= new ArrayList<>(); int count= intPointer.getInt(Integer.BYTES); StringBuilder sb = null; @@ -125,8 +125,8 @@ default GeographySet value_set(int precision) throws ParseException { * @return A new {@link TGeomPoint} object. */ default TGeomPoint to_geometric(){ - return (TGeomPoint) Factory.create_temporal(functions.tgeogpoint_to_tgeompoint(getPointInner()),"Geom",getTemporalType()); - + throw new UnsupportedOperationException( + "tgeogpoint_to_tgeompoint has no MEOS 1.4 equivalent; convert per-instant via geog_to_geom and rebuild the temporal value"); } @@ -145,7 +145,7 @@ default TGeomPoint to_geometric(){ * @return True if "this" is always equal to "value", False otherwise. */ default boolean always_equal(Geometry value){ - return functions.always_eq_tpoint_point(getPointInner(),ConversionUtils.geography_to_gserialized(value)) > 0; + return functions.always_eq_tgeo_geo(getPointInner(),ConversionUtils.geography_to_gserialized(value)) > 0; } @@ -160,7 +160,7 @@ default boolean always_equal(Geometry value){ * @return True if "this" is always different to "value", False otherwise. */ default boolean always_not_equal(Geometry value){ - return functions.always_ne_tpoint_point(getPointInner(),ConversionUtils.geography_to_gserialized(value)) > 0; + return functions.always_ne_tgeo_geo(getPointInner(),ConversionUtils.geography_to_gserialized(value)) > 0; } @@ -175,7 +175,7 @@ default boolean always_not_equal(Geometry value){ * @return True if "this" is ever equal to "value", False otherwise. */ default boolean ever_equal(Geometry value){ - return functions.ever_eq_tpoint_point(getPointInner(),ConversionUtils.geography_to_gserialized(value)) > 0; + return functions.ever_eq_tgeo_geo(getPointInner(),ConversionUtils.geography_to_gserialized(value)) > 0; } @@ -190,7 +190,7 @@ default boolean ever_equal(Geometry value){ * @return True if "this" is ever different to "value", False otherwise. */ default boolean ever_not_equal(Geometry value){ - return functions.ever_ne_tpoint_point(getPointInner(),ConversionUtils.geography_to_gserialized(value)) > 0; + return functions.ever_ne_tgeo_geo(getPointInner(),ConversionUtils.geography_to_gserialized(value)) > 0; } @@ -235,13 +235,13 @@ default boolean never_not_equal(Geometry value){ *

    * * MEOS Functions: - *

  • teq_tpoint_point
  • + *
  • teq_tgeo_geo
  • *
  • teq_temporal_temporal
  • * @param other A temporal object to compare to "this". * @return A {@link TBool} with the result of the temporal equality relation. */ default TBool temporal_equal(Point other){ - return (TBool) Factory.create_temporal(functions.teq_tpoint_point(getPointInner(), ConversionUtils.geography_to_gserialized(other)),getCustomType(),getTemporalType()); + return (TBool) Factory.create_temporal(functions.teq_tgeo_geo(getPointInner(), ConversionUtils.geography_to_gserialized(other)),getCustomType(),getTemporalType()); } @@ -253,13 +253,13 @@ default TBool temporal_equal(Point other){ *

    * * MEOS Functions: - *

  • tne_tpoint_point
  • + *
  • tne_tgeo_geo
  • *
  • tne_temporal_temporal
  • * @param other A temporal object to compare to "this". * @return A {@link TBool} with the result of the temporal inequality relation. */ default TBool temporal_not_equal(Point other){ - return (TBool) Factory.create_temporal(functions.tne_tpoint_point(getPointInner(), ConversionUtils.geography_to_gserialized(other)),getCustomType(),getTemporalType()); + return (TBool) Factory.create_temporal(functions.tne_tgeo_geo(getPointInner(), ConversionUtils.geography_to_gserialized(other)),getCustomType(),getTemporalType()); } diff --git a/src/main/java/types/basic/tpoint/tgeom/TGeomPoint.java b/src/main/java/types/basic/tpoint/tgeom/TGeomPoint.java index 308ea9c56..f398d5159 100644 --- a/src/main/java/types/basic/tpoint/tgeom/TGeomPoint.java +++ b/src/main/java/types/basic/tpoint/tgeom/TGeomPoint.java @@ -103,8 +103,8 @@ static TGeomPoint from_base_time(Geometry value, Time base, TInterpolation inter * @return A new {@link TGeogPoint} object. */ default TGeogPoint to_geographic(){ - return (TGeogPoint) Factory.create_temporal(functions.tgeompoint_to_tgeogpoint(getPointInner()),getCustomType(),getTemporalType()); - + throw new UnsupportedOperationException( + "tgeompoint_to_tgeogpoint has no MEOS 1.4 equivalent; convert per-instant via geom_to_geog and rebuild the temporal value"); } /* ------------------------- Ever and Always Comparisons ------------------- */ @@ -121,7 +121,7 @@ default TGeogPoint to_geographic(){ * @return True if "this" is always equal to "value", False otherwise. */ default boolean always_equal(Geometry value){ - return functions.always_eq_tpoint_point(getPointInner(),ConversionUtils.geometry_to_gserialized(value)) > 0; + return functions.always_eq_tgeo_geo(getPointInner(),ConversionUtils.geometry_to_gserialized(value)) > 0; } @@ -136,7 +136,7 @@ default boolean always_equal(Geometry value){ * @return True if "this" is always different to "value", False otherwise. */ default boolean always_not_equal(Geometry value){ - return (functions.always_ne_tpoint_point(getPointInner(),ConversionUtils.geometry_to_gserialized(value)) > 0); + return (functions.always_ne_tgeo_geo(getPointInner(),ConversionUtils.geometry_to_gserialized(value)) > 0); } @@ -151,7 +151,7 @@ default boolean always_not_equal(Geometry value){ * @return True if "this" is ever equal to "value", False otherwise. */ default boolean ever_equal(Geometry value){ - return functions.ever_eq_tpoint_point(getPointInner(),ConversionUtils.geometry_to_gserialized(value)) > 0; + return functions.ever_eq_tgeo_geo(getPointInner(),ConversionUtils.geometry_to_gserialized(value)) > 0; } @@ -166,7 +166,7 @@ default boolean ever_equal(Geometry value){ * @return True if "this" is ever different to "value", False otherwise. */ default boolean ever_not_equal(Geometry value){ - return functions.ever_ne_tpoint_point(getPointInner(),ConversionUtils.geometry_to_gserialized(value)) > 0; + return functions.ever_ne_tgeo_geo(getPointInner(),ConversionUtils.geometry_to_gserialized(value)) > 0; } @@ -210,13 +210,13 @@ default boolean never_not_equal(Geometry value){ *

    * * MEOS Functions: - *

  • teq_tpoint_point
  • + *
  • teq_tgeo_geo
  • *
  • teq_temporal_temporal
  • * @param other A temporal object to compare to "this". * @return A {@link TBool} with the result of the temporal equality relation. */ default TBool temporal_equal(Point other){ - return (TBool) Factory.create_temporal(functions.teq_tpoint_point(getPointInner(), ConversionUtils.geometry_to_gserialized(other)),getCustomType(),getTemporalType()); + return (TBool) Factory.create_temporal(functions.teq_tgeo_geo(getPointInner(), ConversionUtils.geometry_to_gserialized(other)),getCustomType(),getTemporalType()); } @@ -228,13 +228,13 @@ default TBool temporal_equal(Point other){ *

    * * MEOS Functions: - *

  • tne_tpoint_point
  • + *
  • tne_tgeo_geo
  • *
  • tne_temporal_temporal
  • * @param other A temporal object to compare to "this". * @return A {@link TBool} with the result of the temporal inequality relation. */ default TBool temporal_not_equal(Point other){ - return (TBool) Factory.create_temporal(functions.tne_tpoint_point(getPointInner(), ConversionUtils.geometry_to_gserialized(other)),getCustomType(),getTemporalType()); + return (TBool) Factory.create_temporal(functions.tne_tgeo_geo(getPointInner(), ConversionUtils.geometry_to_gserialized(other)),getCustomType(),getTemporalType()); } default GeometrySet value_set(int precision) throws ParseException { @@ -242,7 +242,7 @@ default GeometrySet value_set(int precision) throws ParseException { Runtime runtime = Runtime.getSystemRuntime(); // Allocate memory for an integer (4 bytes) but do not set a value Pointer intPointer = Memory.allocate(Runtime.getRuntime(runtime), 4); - Pointer resPointer= functions.tpoint_values(this.getPointInner(), intPointer); + Pointer resPointer= functions.tgeo_values(this.getPointInner(), intPointer); List pointList= new ArrayList<>(); int count= intPointer.getInt(Integer.BYTES); StringBuilder sb = null; diff --git a/src/main/java/types/boxes/STBox.java b/src/main/java/types/boxes/STBox.java index c80256e3d..6250ce157 100644 --- a/src/main/java/types/boxes/STBox.java +++ b/src/main/java/types/boxes/STBox.java @@ -75,7 +75,7 @@ public STBox _get_box(Object other, boolean allow_space_only, boolean allow_time if(allow_space_only && other instanceof Geometry){ other_box = new STBox(functions.geo_to_stbox(ConversionUtils.geo_to_gserialized((Geometry) other, this.geodetic()))); } else if (other instanceof TPoint) { - other_box = new STBox(functions.tpoint_to_stbox(((TPoint)other).getPointInner())); + other_box = new STBox(functions.tspatial_to_stbox(((TPoint)other).getPointInner())); } else if (allow_time_only) { switch (other) { case STBox st -> other_box = new STBox(st.get_inner()); @@ -334,12 +334,12 @@ public static STBox from_geometry_tstzspan(Geometry geometry, tstzset tstzset, b *

    . * * MEOS Functions: - *

  • tpoint_to_stbox
  • + *
  • tspatial_to_stbox
  • * @param temporal A {@link TPoint} instance. * @return A new {@link STBox} instance. */ public static STBox from_tpoint(TPoint temporal){ - return new STBox(functions.tpoint_to_stbox(temporal.getPointInner())); + return new STBox(functions.tspatial_to_stbox(temporal.getPointInner())); } @@ -829,7 +829,7 @@ public boolean is_left(TemporalObject other) { * to the right of "other. Checks the X dimension. *

    * MEOS Functions: - *

  • overleft_stbox_stbox, tpoint_to_stbox
  • + *
  • overleft_stbox_stbox, tspatial_to_stbox
  • * @param other The spatiotemporal object to compare with "this". * @return "true" if "this" is to the left of "other", "false" otherwise. */ @@ -1094,7 +1094,7 @@ public float nearest_approach_distance_stbox(STBox other) { * @return a Float instance with the distance between the nearest points of "this" and "``other``". */ public float nearest_approach_distance_tpoint(TPoint other) { - return (float) functions.nad_tpoint_stbox(this._inner, other.getPointInner()); + return (float) functions.nad_tgeo_stbox(this._inner, other.getPointInner()); } @@ -1213,7 +1213,7 @@ public boolean greaterThanOrEqual(Box other) throws OperationNotSupportedExcepti @Override public tstzspan to_period(){ error_handler_fn errorHandler = new error_handler(); - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return new tstzspan(functions.stbox_to_tstzspan(this._inner)); } @@ -1354,7 +1354,7 @@ origin will be (0, 0, 0). // } // else{ // if(duration instanceof String){ -// dt= functions.pg_interval_in(duration.toString(), -1); +// dt= functions.interval_in(duration.toString(), -1); // } // else dt = null; // } @@ -1365,11 +1365,11 @@ origin will be (0, 0, 0). // } // else{ // if(start instanceof String){ -// st= functions.pg_timestamptz_in(start.toString(), -1); +// st= functions.timestamptz_in(start.toString(), -1); // } // else{ // if(this.has_t()){ -// st= functions.pg_timestamptz_in("2000-01-03", -1); +// st= functions.timestamptz_in("2000-01-03", -1); // } // else{ // st= null; @@ -1383,10 +1383,10 @@ origin will be (0, 0, 0). // } // else{ // if(this.geodetic()){ -// gs= functions.pgis_geography_in("Point(0 0 0)", -1); +// gs= functions.geog_in("Point(0 0 0)", -1); // } // else{ -// gs= functions.pgis_geometry_in("Point (0 0 0)", -1); +// gs= functions.geom_in("Point (0 0 0)", -1); // } // } // diff --git a/src/main/java/types/boxes/TBox.java b/src/main/java/types/boxes/TBox.java index c58873c94..d4e1c6d81 100644 --- a/src/main/java/types/boxes/TBox.java +++ b/src/main/java/types/boxes/TBox.java @@ -354,7 +354,7 @@ public FloatSpan to_floatspan(){ */ public tstzspan to_period(){ error_handler_fn errorHandler = new error_handler(); - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return new tstzspan(functions.tbox_to_tstzspan(this._inner)); } @@ -410,10 +410,10 @@ public TBox expand(Object obj) { result= functions.tbox_expand_time(this._inner, ConversionUtils.timedelta_to_interval((Duration) obj)); } else if(obj instanceof Integer){ - result = functions.tbox_expand_int(this._inner,(int)obj); + result = functions.tintbox_expand(this._inner,(int)obj); } else if(obj instanceof Float){ - result = functions.tbox_expand_float(this._inner,(float)obj); + result = functions.tfloatbox_expand(this._inner,(float)obj); } return new TBox(result); } diff --git a/src/main/java/types/collections/geo/GeoSet.java b/src/main/java/types/collections/geo/GeoSet.java index eaa93072b..ca9bd2b49 100644 --- a/src/main/java/types/collections/geo/GeoSet.java +++ b/src/main/java/types/collections/geo/GeoSet.java @@ -62,12 +62,12 @@ public static GeoSet factory(String type, Pointer inner){ * Return the string representation of the content of "this". *

    * MEOS Functions: - *

  • geoset_out
  • + *
  • set_out
  • * @return A new {@link String} instance */ public String toString(){ int max_decimals = 15; - return functions.geoset_out(this._inner,max_decimals); + return functions.spatialset_as_text(this._inner,max_decimals); } @@ -77,12 +77,12 @@ public String toString(){ * * * MEOS Functions: - *
  • geoset_as_ewkt
  • + *
  • spatialset_as_ewkt
  • * @return A {@link String} instance. */ protected String as_ewkt(){ int max_decimals = 15; - return functions.geoset_as_ewkt(this._inner,max_decimals); + return functions.spatialset_as_ewkt(this._inner,max_decimals); } /** @@ -90,25 +90,25 @@ protected String as_ewkt(){ * * * MEOS Functions: - *
  • geoset_as_text
  • + *
  • spatialset_as_text
  • * @return A {@link String} instance. */ protected String as_wkt(){ int max_decimals = 15; - return functions.geoset_as_text(this._inner,max_decimals); + return functions.spatialset_as_text(this._inner,max_decimals); } /** * Returns the WKT representation of "this". * * MEOS Functions: - *
  • geoset_as_text
  • + *
  • spatialset_as_text
  • * * @return A {@link String} instance. */ protected String as_text(){ int max_decimals = 15; - return functions.geoset_as_text(this._inner,max_decimals); + return functions.spatialset_as_text(this._inner,max_decimals); } /* ------------------------- Accessors ------------------------------------- */ @@ -148,12 +148,12 @@ public Geometry end_element() throws ParseException { * Returns the SRID of "this". * * MEOS Functions: - *
  • geoset_srid
  • + *
  • spatialset_srid
  • * * @return An integer */ protected int srid(){ - return functions.geoset_srid(this._inner); + return functions.spatialset_srid(this._inner); } @@ -171,7 +171,7 @@ public boolean contains(GeoSet other) throws Exception { * *

    * MEOS Functions: - *

  • intersection_geoset_geo
  • + *
  • intersection_set_geo
  • *
  • intersection_set_set
  • * @param geom A {@link GeoSet} or {@link Geometry} instance * @return An object of the same type as "other" or "None" if the intersection is empty. @@ -187,7 +187,7 @@ public Geometry intersection_geom(Geometry geom) throws ParseException { * *

    * MEOS Functions: - *

  • intersection_geoset_geo
  • + *
  • intersection_set_geo
  • *
  • intersection_set_set
  • * @param geo A {@link GeoSet} or {@link Geometry} instance * @param type the type of GeoSet @@ -204,7 +204,7 @@ public GeoSet intersection_geoset(GeoSet geo, String type){ * *

    * MEOS Functions: - *

  • minus_geoset_geo
  • + *
  • minus_set_geo
  • *
  • minus_set_set
  • * @@ -252,7 +252,7 @@ public Geometry subtract_from(Object geo, String type) throws ParseException { * *

    * MEOS Functions: - *

  • union_geoset_geo
  • + *
  • union_set_geo
  • *
  • union_set_set
  • * @param geo A {@link GeoSet} or {@link Geometry} instance * @param type the type of GeoSet @@ -284,7 +284,7 @@ public GeoSet union(Object geo, String type){ * @return A new {@link GeoSet} object of the same subtype of "this". */ public GeoSet round(int decimals, String type){ - return factory(type, functions.geoset_round(this._inner,decimals)); + return factory(type, functions.set_round(this._inner,decimals)); } diff --git a/src/main/java/types/collections/time/tstzspan.java b/src/main/java/types/collections/time/tstzspan.java index 1cd72b46a..7cf4e2641 100644 --- a/src/main/java/types/collections/time/tstzspan.java +++ b/src/main/java/types/collections/time/tstzspan.java @@ -98,8 +98,8 @@ public tstzspan(String lower, String upper) { super(lower,upper,true,false); this.lowerInclusive = true; this.upperInclusive = false; - OffsetDateTime lower_ts = functions.pg_timestamptz_in(lower, -1); - OffsetDateTime upper_ts = functions.pg_timestamptz_in(upper, -1); + OffsetDateTime lower_ts = functions.timestamptz_in(lower, -1); + OffsetDateTime upper_ts = functions.timestamptz_in(upper, -1); this._inner = functions.tstzspan_make(lower_ts, upper_ts, this.lowerInclusive, this.upperInclusive); } @@ -113,8 +113,8 @@ public tstzspan(String lower, String upper) { */ public tstzspan(String lower, String upper, boolean lowerInclusive, boolean upperInclusive) { super(lower,upper,lowerInclusive,upperInclusive); - OffsetDateTime lower_ts = functions.pg_timestamptz_in(lower, -1); - OffsetDateTime upper_ts = functions.pg_timestamptz_in(upper, -1); + OffsetDateTime lower_ts = functions.timestamptz_in(lower, -1); + OffsetDateTime upper_ts = functions.timestamptz_in(upper, -1); this._inner = functions.tstzspan_make(lower_ts, upper_ts, lowerInclusive, upperInclusive); } @@ -161,7 +161,7 @@ public tstzspan(String lower, LocalDateTime upper) { super(lower,upper.toString(),true,false); this.lowerInclusive = true; this.upperInclusive = false; - OffsetDateTime lower_ts = functions.pg_timestamptz_in(lower,-1); + OffsetDateTime lower_ts = functions.timestamptz_in(lower,-1); OffsetDateTime upper_ts = ConversionUtils.datetimeToTimestampTz(upper); this._inner = functions.tstzspan_make(lower_ts, upper_ts, this.lowerInclusive, this.upperInclusive); } @@ -177,7 +177,7 @@ public tstzspan(LocalDateTime lower, String upper){ this.lowerInclusive = true; this.upperInclusive = false; OffsetDateTime lower_ts = ConversionUtils.datetimeToTimestampTz(lower); - OffsetDateTime upper_ts = functions.pg_timestamptz_in(upper,-1); + OffsetDateTime upper_ts = functions.timestamptz_in(upper,-1); this._inner = functions.tstzspan_make(lower_ts, upper_ts, this.lowerInclusive, this.upperInclusive); } @@ -203,7 +203,7 @@ public Pointer createIntStr(java.lang.Number lower, String upper, boolean lower_ } @Override public Pointer createStrStr(String lower, String upper, boolean lower_inc, boolean upper_inc){ - return functions.tstzspan_make(functions.pg_timestamptz_in(lower,-1),functions.pg_timestamptz_in(upper,-1),lower_inc,upper_inc); + return functions.tstzspan_make(functions.timestamptz_in(lower,-1),functions.timestamptz_in(upper,-1),lower_inc,upper_inc); } @Override public Pointer createStrInt(String lower, java.lang.Number upper, boolean lower_inc, boolean upper_inc){ diff --git a/src/main/java/types/temporal/Temporal.java b/src/main/java/types/temporal/Temporal.java index 444612cc0..6560e8a08 100644 --- a/src/main/java/types/temporal/Temporal.java +++ b/src/main/java/types/temporal/Temporal.java @@ -620,20 +620,20 @@ public Temporal temporal_sample(Object duration, Object start, TInterpolation in Pointer dt= null; TInterpolation intrp= null; if (start == null){ - st= functions.pg_timestamptz_in("2000-01-03", -1); + st= functions.timestamptz_in("2000-01-03", -1); } else if (start instanceof LocalDateTime){ st= ConversionUtils.datetimeToTimestampTz((LocalDateTime)start); } else{ - st= functions.pg_timestamptz_in(start.toString(), -1); + st= functions.timestamptz_in(start.toString(), -1); } if(duration instanceof Duration){ dt= ConversionUtils.timedelta_to_interval((Duration) duration); } else{ - dt= functions.pg_interval_in(duration.toString(), -1); + dt= functions.interval_in(duration.toString(), -1); } if(interpolation == null){ @@ -664,20 +664,20 @@ public Temporal temporal_precision(Object duration, Object start){ OffsetDateTime st= null; Pointer dt= null; if (start == null){ - st= functions.pg_timestamptz_in("2000-01-03", -1); + st= functions.timestamptz_in("2000-01-03", -1); } else if (start instanceof LocalDateTime){ st= ConversionUtils.datetimeToTimestampTz((LocalDateTime)start); } else{ - st= functions.pg_timestamptz_in(start.toString(), -1); + st= functions.timestamptz_in(start.toString(), -1); } if(duration instanceof Duration){ dt= ConversionUtils.timedelta_to_interval((Duration) duration); } else{ - dt= functions.pg_interval_in(duration.toString(), -1); + dt= functions.interval_in(duration.toString(), -1); } Pointer result= functions.temporal_tprecision(this.inner, dt, st); return Factory.create_temporal(result, this.getCustomType(), this.getTemporalType()); @@ -706,8 +706,7 @@ public Temporal to_instant(){ * @return a new {@link TSequence}. */ public Temporal to_sequence(TInterpolation interpolation){ - System.out.println(interpolation.toString()); - return Factory.create_temporal(functions.temporal_to_tsequence(this.inner, interpolation.toString()),this.getCustomType(),TEMPORAL_SEQUENCE); + return Factory.create_temporal(functions.temporal_to_tsequence(this.inner, interpolation.getValue()),this.getCustomType(),TEMPORAL_SEQUENCE); } /** @@ -719,8 +718,7 @@ public Temporal to_sequence(TInterpolation interpolation){ * @return a new {@link TSequenceSet} */ public Temporal to_sequenceset(TInterpolation interpolation){ - return Factory.create_temporal(functions.temporal_to_tsequenceset(this.inner, interpolation.toString()),this.getCustomType(),TEMPORAL_SEQUENCE_SET); - + return Factory.create_temporal(functions.temporal_to_tsequenceset(this.inner, interpolation.getValue()),this.getCustomType(),TEMPORAL_SEQUENCE_SET); } /* @@ -764,7 +762,7 @@ public Temporal append_instant(TInstant instant, float max_dist, Duration max_ti else{ interv= ConversionUtils.timedelta_to_interval(max_time); } - Pointer resultPointer= functions.temporal_append_tinstant(this.inner, instant.getInner(), (double) max_dist, interv, false); + Pointer resultPointer= functions.temporal_append_tinstant(this.inner, instant.getInner(), TInterpolation.LINEAR.getValue(), (double) max_dist, interv, false); return Factory.create_temporal(resultPointer, this.getCustomType(), this.getTemporalType()); } @@ -1370,21 +1368,21 @@ public List time_split(Object duration, Object start){ OffsetDateTime st= null; Pointer dt= null; if(start == null){ - st= functions.pg_timestamptz_in("2000-01-03", -1); + st= functions.timestamptz_in("2000-01-03", -1); } else{ if(start instanceof LocalDateTime){ st= ConversionUtils.datetimeToTimestampTz((LocalDateTime) start); } else{ - st= functions.pg_timestamptz_in(start.toString(), -1); + st= functions.timestamptz_in(start.toString(), -1); } if(duration instanceof Duration){ dt= ConversionUtils.timedelta_to_interval((Duration) duration); } else{ - dt= functions.pg_interval_in(duration.toString(), -1); + dt= functions.interval_in(duration.toString(), -1); } } // Create a JNR-FFI runtime instance diff --git a/src/main/java/utils/ConversionUtils.java b/src/main/java/utils/ConversionUtils.java index e7ff1c038..fee6eef01 100644 --- a/src/main/java/utils/ConversionUtils.java +++ b/src/main/java/utils/ConversionUtils.java @@ -40,9 +40,9 @@ public class ConversionUtils { */ public static OffsetDateTime datetimeToTimestampTz(LocalDateTime dt) { error_handler handler= new error_handler(); - functions.meos_initialize("UTC", handler); + functions.meos_initialize(); String formattedDt = dt.atZone(ZoneOffset.UTC).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); - return functions.pg_timestamptz_in(formattedDt, -1); + return functions.timestamptz_in(formattedDt, -1); } @@ -55,7 +55,7 @@ public static OffsetDateTime datetimeToTimestampTz(LocalDateTime dt) { public static LocalDateTime timestamptz_to_datetime(OffsetDateTime ts) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ssX"); // Parse the string to LocalDateTime - return LocalDateTime.parse(functions.pg_timestamptz_out(ts), formatter); + return LocalDateTime.parse(functions.timestamptz_out(ts), formatter); } @@ -67,11 +67,11 @@ public static Pointer timedelta_to_interval(Duration td){ int hours = (int)td.toHours(); int minutes = (int)td.toMinutes(); double seconds = (double)td.toSeconds(); - return functions.pg_interval_make(years,month,weeks,days,hours,minutes,seconds); + return functions.interval_make(years,month,weeks,days,hours,minutes,seconds); } public static Duration interval_to_timedelta(Pointer p){ - String res= functions.pg_interval_out(p); + String res= functions.interval_out(p); System.out.println(res); Pattern pattern = Pattern.compile("(\\d+)\\s+days(?:\\s+(\\d{2}):(\\d{2}):(\\d{2}))?"); Matcher matcher = pattern.matcher(res); @@ -158,7 +158,7 @@ public static Pointer geometry_to_gserialized(Geometry geom){ if (geom.getSRID() > 0){ text = "SRID="+geom.getSRID()+";"+text; } - Pointer ptr = functions.pgis_geometry_in(text,-1); + Pointer ptr = functions.geom_in(text,-1); return ptr; } @@ -169,7 +169,7 @@ public static Pointer geography_to_gserialized(Geometry geom){ if (geom.getSRID() > 0){ text = "SRID="+geom.getSRID()+";"+text; } - Pointer ptr = functions.pgis_geography_in(text,-1); + Pointer ptr = functions.geog_in(text,-1); return ptr; } @@ -182,7 +182,7 @@ public static Geometry gserialized_to_shapely_geometry(Pointer geom, int precisi String text = functions.geo_as_text(geom,precision); WKTReader wktReader = new WKTReader(); Geometry geometry = wktReader.read(text); - int srid = functions.geo_get_srid(geom); + int srid = functions.geo_srid(geom); if (srid > 0){ geometry.setSRID(srid); } diff --git a/src/test/java/basic/TBoolTest.java b/src/test/java/basic/TBoolTest.java index 6f7309264..7c80d8fa0 100644 --- a/src/test/java/basic/TBoolTest.java +++ b/src/test/java/basic/TBoolTest.java @@ -33,7 +33,7 @@ public class TBoolTest { static error_handler_fn errorHandler = new error_handler(); static Stream TBool_copy_constructor() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TBoolInst("True@2019-09-01"), "TBoolInst"), Arguments.of(new TBoolSeq("{True@2019-09-01, False@2019-09-02}"), "TBoolSeq"), @@ -44,7 +44,7 @@ static Stream TBool_copy_constructor() throws SQLException { static Stream TBool_string_constructor() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of("True@2019-09-01", "TBoolInst", TInterpolation.NONE, "t@2019-09-01 00:00:00+00"), Arguments.of("{True@2019-09-01, False@2019-09-02}", "TBoolSeq", TInterpolation.DISCRETE, "{t@2019-09-01 00:00:00+00, f@2019-09-02 00:00:00+00}"), @@ -55,7 +55,7 @@ static Stream TBool_string_constructor() throws SQLException { static Stream TBool_base_time_constructor() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new tstzset("{2019-09-01, 2019-09-02}"), "TBoolSeq", TInterpolation.DISCRETE), Arguments.of(new tstzspan("[2019-09-01, 2019-09-02]"), "TBoolSeqSet", TInterpolation.STEPWISE), @@ -65,7 +65,7 @@ static Stream TBool_base_time_constructor() throws SQLException { static Stream TBool_string() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TBoolInst("True@2019-09-01"), "TBoolInst", "t@2019-09-01 00:00:00+00"), Arguments.of(new TBoolSeq("{True@2019-09-01, False@2019-09-02}"), "TBoolSeq", "{t@2019-09-01 00:00:00+00, f@2019-09-02 00:00:00+00}"), @@ -75,7 +75,7 @@ static Stream TBool_string() throws SQLException { } static Stream TBool_bounding() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TBoolInst("True@2019-09-01"), "TBoolInst", new tstzspan("[2019-09-01, 2019-09-01]")), Arguments.of(new TBoolSeq("{True@2019-09-01, False@2019-09-02}"), "TBoolSeq", new tstzspan("[2019-09-01, 2019-09-02]")), @@ -86,7 +86,7 @@ static Stream TBool_bounding() throws SQLException { static Stream TBool_interp() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TBoolInst("True@2019-09-01"), "TBoolInst", TInterpolation.NONE), Arguments.of(new TBoolSeq("{True@2019-09-01, False@2019-09-02}"), "TBoolSeq", TInterpolation.DISCRETE), @@ -96,7 +96,7 @@ static Stream TBool_interp() throws SQLException { } static Stream TBool_start() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TBoolInst("True@2019-09-01"), "TBoolInst", true), Arguments.of(new TBoolSeq("{True@2019-09-01, False@2019-09-02}"), "TBoolSeq", true), @@ -107,7 +107,7 @@ static Stream TBool_start() throws SQLException { static Stream TBool_end() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TBoolInst("True@2019-09-01"), "TBoolInst", true), Arguments.of(new TBoolSeq("{True@2019-09-01, False@2019-09-02}"), "TBoolSeq", false), @@ -118,7 +118,7 @@ static Stream TBool_end() throws SQLException { static Stream TBool_time() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TBoolInst("True@2019-09-01"), "TBoolInst", new tstzspanset("{[2019-09-01, 2019-09-01]}")), Arguments.of(new TBoolSeq("{True@2019-09-01, False@2019-09-02}"), "TBoolSeq", new tstzspanset("{[2019-09-01, 2019-09-01], [2019-09-02, 2019-09-02]}")), @@ -129,7 +129,7 @@ static Stream TBool_time() throws SQLException { static Stream TBool_numinst() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TBoolInst("True@2019-09-01"), "TBoolInst", 1), Arguments.of(new TBoolSeq("{True@2019-09-01, False@2019-09-02}"), "TBoolSeq",2), @@ -140,7 +140,7 @@ static Stream TBool_numinst() throws SQLException { static Stream TBool_startinst() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TBoolInst("True@2019-09-01"), "TBoolInst", new TBoolInst("True@2019-09-01")), Arguments.of(new TBoolSeq("{True@2019-09-01, False@2019-09-02}"), "TBoolSeq", new TBoolInst("True@2019-09-01")), @@ -151,7 +151,7 @@ static Stream TBool_startinst() throws SQLException { static Stream TBool_endinst() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TBoolInst("True@2019-09-01"), "TBoolInst", new TBoolInst("True@2019-09-01")), Arguments.of(new TBoolSeq("{True@2019-09-01, False@2019-09-02}"), "TBoolSeq", new TBoolInst("False@2019-09-02")), @@ -162,7 +162,7 @@ static Stream TBool_endinst() throws SQLException { static Stream TBool_mininst() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TBoolInst("True@2019-09-01"), "TBoolInst", new TBoolInst("True@2019-09-01")), Arguments.of(new TBoolSeq("{True@2019-09-01, False@2019-09-02}"), "TBoolSeq", new TBoolInst("False@2019-09-02")), @@ -173,7 +173,7 @@ static Stream TBool_mininst() throws SQLException { static Stream TBool_maxinst() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TBoolInst("True@2019-09-01"), "TBoolInst", new TBoolInst("True@2019-09-01")), Arguments.of(new TBoolSeq("{True@2019-09-01, False@2019-09-02}"), "TBoolSeq", new TBoolInst("True@2019-09-01")), @@ -185,7 +185,7 @@ static Stream TBool_maxinst() throws SQLException { static Stream TBool_instn() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TBoolInst("True@2019-09-01"), "TBoolInst", 0, new TBoolInst("True@2019-09-01")), Arguments.of(new TBoolSeq("{True@2019-09-01, False@2019-09-02}"), "TBoolSeq",1, new TBoolInst("False@2019-09-02")), @@ -196,7 +196,7 @@ static Stream TBool_instn() throws SQLException { static Stream TBool_startmstp() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TBoolInst("True@2019-09-01"), "TBoolInst", LocalDateTime.of(2019, 9, 1, 0, 0,0)), Arguments.of(new TBoolSeq("{True@2019-09-01, False@2019-09-02}"), "TBoolSeq",LocalDateTime.of(2019, 9, 1, 0, 0,0)), @@ -207,7 +207,7 @@ static Stream TBool_startmstp() throws SQLException { static Stream TBool_endtmstp() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TBoolInst("True@2019-09-01"), "TBoolInst", LocalDateTime.of(2019, 9, 1, 0, 0,0)), Arguments.of(new TBoolSeq("{True@2019-09-01, False@2019-09-02}"), "TBoolSeq",LocalDateTime.of(2019, 9, 2, 0, 0,0)), @@ -218,7 +218,7 @@ static Stream TBool_endtmstp() throws SQLException { static Stream TBool_hash() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TBoolInst("True@2019-09-01"), "TBoolInst", 440045287), // Arguments.of(new TBoolSeq("{True@2019-09-01, False@2019-09-02}"), "TBoolSeq",2385901957l), @@ -229,7 +229,7 @@ static Stream TBool_hash() throws SQLException { static Stream TBool_instant() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TBoolInst("True@2019-09-01"), new TBoolInst("True@2019-09-01")), Arguments.of(new TBoolSeq("{True@2019-09-01}"), new TBoolInst("True@2019-09-01")), @@ -240,7 +240,7 @@ static Stream TBool_instant() throws SQLException { static Stream TBool_tosequence() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TBoolInst("True@2019-09-01"), TInterpolation.NONE, new TBoolSeq("[True@2019-09-01]")), Arguments.of(new TBoolSeq("{True@2019-09-01, False@2019-09-02}"), TInterpolation.DISCRETE , new TBoolSeq("{True@2019-09-01, False@2019-09-02}")), @@ -251,7 +251,7 @@ static Stream TBool_tosequence() throws SQLException { static Stream TBool_tosequenceset() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TBoolInst("True@2019-09-01"), TInterpolation.NONE, new TBoolSeqSet("{[True@2019-09-01]}")), Arguments.of(new TBoolSeq("{True@2019-09-01, False@2019-09-02}"), TInterpolation.NONE , new TBoolSeqSet("{[True@2019-09-01], [False@2019-09-02]}")) @@ -261,7 +261,7 @@ static Stream TBool_tosequenceset() throws SQLException { } static Stream TBool_insert() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TBoolInst("True@2019-09-01"), new TBoolSeq("{True@2019-09-03}"), new TBoolSeq("{True@2019-09-01, True@2019-09-03}"), "TBoolInst"), Arguments.of(new TBoolSeq("{True@2019-09-01, False@2019-09-02}"), new TBoolSeq("{True@2019-09-03}") , new TBoolSeq("{True@2019-09-01, False@2019-09-02, True@2019-09-03}"), "TBoolSeq"), @@ -271,7 +271,7 @@ static Stream TBool_insert() throws SQLException { static Stream TBool_update() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TBoolInst("True@2019-09-01"), new TBoolInst("False@2019-09-01"), new TBoolInst("False@2019-09-01"), "TBoolInst"), Arguments.of(new TBoolSeq("{True@2019-09-01, False@2019-09-02}"), new TBoolInst("False@2019-09-01") , new TBoolSeq("{False@2019-09-01, False@2019-09-02}"), "TBoolSeq"), @@ -280,7 +280,7 @@ static Stream TBool_update() throws SQLException { } static Stream TBool_appendseq() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TBoolSeq("{True@2019-09-01, False@2019-09-02}"), new TBoolSeq("{True@2019-09-03}") , new TBoolSeq("{True@2019-09-01, False@2019-09-02, True@2019-09-03}"), "TBoolSeq"), Arguments.of(new TBoolSeqSet("{[True@2019-09-01, False@2019-09-02],[True@2019-09-03, True@2019-09-05]}"), new TBoolSeq("[True@2019-09-06]"), new TBoolSeqSet("{[True@2019-09-01, False@2019-09-02],[True@2019-09-03, True@2019-09-05],[True@2019-09-06]}"), "TBoolSeqSet") @@ -290,7 +290,7 @@ static Stream TBool_appendseq() throws SQLException { static Stream TBool_whentrue() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TBoolInst("True@2019-09-01"), "TBoolInst", new tstzspanset("{[2019-09-01, 2019-09-01]}")), Arguments.of(new TBoolSeq("{True@2019-09-01, False@2019-09-02}"), "TBoolSeq" , new tstzspanset("{[2019-09-01, 2019-09-01]}")), @@ -300,7 +300,7 @@ static Stream TBool_whentrue() throws SQLException { } static Stream TBool_whenfalse() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TBoolSeq("{True@2019-09-01, False@2019-09-02}"), "TBoolSeq" , new tstzspanset("{[2019-09-02, 2019-09-02]}")), Arguments.of(new TBoolSeq("[True@2019-09-01, False@2019-09-02]"), "TBoolSeq", new tstzspanset("{[2019-09-02, 2019-09-02]}")), @@ -310,7 +310,7 @@ static Stream TBool_whenfalse() throws SQLException { static Stream TBool_alwaystrue() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TBoolInst("True@2019-09-01"), "TBoolInst", true), Arguments.of(new TBoolSeq("{True@2019-09-01, False@2019-09-02}"), "TBoolSeq",false), @@ -321,7 +321,7 @@ static Stream TBool_alwaystrue() throws SQLException { static Stream TBool_alwaysfalse() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TBoolInst("True@2019-09-01"), "TBoolInst", false), Arguments.of(new TBoolSeq("{True@2019-09-01, False@2019-09-02}"), "TBoolSeq",false), @@ -332,7 +332,7 @@ static Stream TBool_alwaysfalse() throws SQLException { static Stream TBool_evertrue() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TBoolInst("True@2019-09-01"), "TBoolInst", true), Arguments.of(new TBoolSeq("{True@2019-09-01, False@2019-09-02}"), "TBoolSeq",true), @@ -343,7 +343,7 @@ static Stream TBool_evertrue() throws SQLException { static Stream TBool_everfalse() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TBoolInst("True@2019-09-01"), "TBoolInst", false), Arguments.of(new TBoolSeq("{True@2019-09-01, False@2019-09-02}"), "TBoolSeq",true), @@ -354,7 +354,7 @@ static Stream TBool_everfalse() throws SQLException { static Stream TBool_nevertrue() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TBoolInst("True@2019-09-01"), "TBoolInst", false), Arguments.of(new TBoolSeq("{True@2019-09-01, False@2019-09-02}"), "TBoolSeq",false), @@ -365,7 +365,7 @@ static Stream TBool_nevertrue() throws SQLException { static Stream TBool_neverfalse() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TBoolInst("True@2019-09-01"), "TBoolInst", true), Arguments.of(new TBoolSeq("{True@2019-09-01, False@2019-09-02}"), "TBoolSeq",false), @@ -387,7 +387,7 @@ static Stream TBool_neverfalse() throws SQLException { @ParameterizedTest(name = "Test from string constructor.") @MethodSource("TBool_string_constructor") public void testFromStringConstructor(String value, String type, TInterpolation interp, String repr) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if (type == "TBoolInst") { TBoolInst tb = new TBoolInst(value); System.out.println(tb.to_string()); @@ -413,7 +413,7 @@ public void testFromStringConstructor(String value, String type, TInterpolation @ParameterizedTest(name = "Test from base time constructor.") @MethodSource("TBool_base_time_constructor") public void testFromBaseTimeConstructor(Time base, String type, TInterpolation interp) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if (type == "TBoolInst") { TBoolInst tb = (TBoolInst) TBool.from_base_time(true, base); System.out.println(tb.to_string()); @@ -435,7 +435,7 @@ public void testFromBaseTimeConstructor(Time base, String type, TInterpolation i @ParameterizedTest(name = "Test from copy constructor.") @MethodSource("TBool_copy_constructor") public void testCopyConstructor(Temporal base, String type) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if (type == "TBoolInst") { TBoolInst tb = (TBoolInst) base.copy(); assertEquals(tb.to_string(),(((TBoolInst) base).to_string())); @@ -453,7 +453,7 @@ public void testCopyConstructor(Temporal base, String type) { @ParameterizedTest(name = "Test string method.") @MethodSource("TBool_string") public void testString(Temporal base, String type, String expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if (type == "TBoolInst") { assertEquals(expected,(((TBoolInst) base).to_string())); } else if (type == "TBoolSeq") { @@ -467,7 +467,7 @@ public void testString(Temporal base, String type, String expected) { @ParameterizedTest(name = "Test bounding box method.") @MethodSource("TBool_bounding") public void testBoundingBox(Temporal base, String type, tstzspan expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(base.bounding_box().toString(),expected.toString()); } @@ -476,7 +476,7 @@ public void testBoundingBox(Temporal base, String type, tstzspan expected) { @ParameterizedTest(name = "Test interpolation method.") @MethodSource("TBool_interp") public void testInterpolation(Temporal base, String type, TInterpolation expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(base.interpolation(),expected); } @@ -484,7 +484,7 @@ public void testInterpolation(Temporal base, String type, TInterpolation expecte @ParameterizedTest(name = "Test start values method.") @MethodSource("TBool_start") public void testStartValues(Temporal base, String type, boolean expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(((TBool) base).start_value() ,expected); } @@ -492,7 +492,7 @@ public void testStartValues(Temporal base, String type, boolean expected) { @ParameterizedTest(name = "Test end values method.") @MethodSource("TBool_end") public void testEndValues(Temporal base, String type, boolean expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(((TBool) base).end_value() ,expected); } @@ -500,7 +500,7 @@ public void testEndValues(Temporal base, String type, boolean expected) { @ParameterizedTest(name = "Test time method.") @MethodSource("TBool_time") public void testTime(Temporal base, String type, tstzspanset expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(base.time().toString() ,expected.toString()); } @@ -508,7 +508,7 @@ public void testTime(Temporal base, String type, tstzspanset expected) { @ParameterizedTest(name = "Test period method.") @MethodSource("TBool_bounding") public void testtstzspan(Temporal base, String type, tstzspan expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(base.period().toString() ,expected.toString()); } @@ -516,7 +516,7 @@ public void testtstzspan(Temporal base, String type, tstzspan expected) { @ParameterizedTest(name = "Test span method.") @MethodSource("TBool_bounding") public void testSpan(Temporal base, String type, tstzspan expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(base.timespan().toString(),expected.toString()); } @@ -524,7 +524,7 @@ public void testSpan(Temporal base, String type, tstzspan expected) { @ParameterizedTest(name = "Test numinst method.") @MethodSource("TBool_numinst") public void testNumInst(Temporal base, String type, int expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(base.num_instants(),expected); } @@ -532,7 +532,7 @@ public void testNumInst(Temporal base, String type, int expected) { @ParameterizedTest(name = "Test startinst method.") @MethodSource("TBool_startinst") public void testStartInst(Temporal base, String type, TBoolInst expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(((TBoolInst)base.start_instant()).to_string(),expected.to_string()); } @@ -540,7 +540,7 @@ public void testStartInst(Temporal base, String type, TBoolInst expected) { @ParameterizedTest(name = "Test endinst method.") @MethodSource("TBool_endinst") public void testEndInst(Temporal base, String type, TBoolInst expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(((TBoolInst)base.end_instant()).to_string(),expected.to_string()); } @@ -548,7 +548,7 @@ public void testEndInst(Temporal base, String type, TBoolInst expected) { @ParameterizedTest(name = "Test mininst method.") @MethodSource("TBool_mininst") public void testMinInst(Temporal base, String type, TBoolInst expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(((TBoolInst)base.min_instant()).to_string(),expected.to_string()); } @@ -556,14 +556,14 @@ public void testMinInst(Temporal base, String type, TBoolInst expected) { @ParameterizedTest(name = "Test maxinst method.") @MethodSource("TBool_maxinst") public void testMaxInst(Temporal base, String type, TBoolInst expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(((TBoolInst)base.max_instant()).to_string(),expected.to_string()); } @ParameterizedTest(name = "Test instn method.") @MethodSource("TBool_instn") public void testInstN(Temporal base, String type, int n, TBoolInst expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(((TBoolInst)base.instant_n(n)).to_string(),expected.to_string()); } @@ -571,7 +571,7 @@ public void testInstN(Temporal base, String type, int n, TBoolInst expected) { @ParameterizedTest(name = "Test num timestamp method.") @MethodSource("TBool_numinst") public void testNumtmstmp(Temporal base, String type, int expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(base.num_timestamps(),expected); } @@ -579,7 +579,7 @@ public void testNumtmstmp(Temporal base, String type, int expected) { @ParameterizedTest(name = "Test start timestamp method.") @MethodSource("TBool_startmstp") public void testStarttmstmp(Temporal base, String type, LocalDateTime expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(base.start_timestamp(),expected); } @@ -587,7 +587,7 @@ public void testStarttmstmp(Temporal base, String type, LocalDateTime expected) @ParameterizedTest(name = "Test end timestamp method.") @MethodSource("TBool_endtmstp") public void testEndtmstmp(Temporal base, String type, LocalDateTime expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(base.end_timestamp(),expected); } @@ -595,7 +595,7 @@ public void testEndtmstmp(Temporal base, String type, LocalDateTime expected) { @ParameterizedTest(name = "Test Hash method.") @MethodSource("TBool_hash") public void testHash(Temporal base, String type, long expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(base.hash(),expected); } @@ -603,7 +603,7 @@ public void testHash(Temporal base, String type, long expected) { @ParameterizedTest(name = "Test to instant method.") @MethodSource("TBool_instant") public void testInstant(Temporal base, TBoolInst type) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); Temporal tmp = base.to_instant(); assertTrue(tmp instanceof TBoolInst); assertEquals(((TBoolInst) tmp).to_string(), type.to_string()); @@ -613,7 +613,7 @@ public void testInstant(Temporal base, TBoolInst type) { @ParameterizedTest(name = "Test to sequence method.") @MethodSource("TBool_tosequence") public void testSequence(Temporal base, TInterpolation type, TBoolSeq tseq) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); Temporal tmp = base.to_sequence(type); assertTrue(tmp instanceof TBoolSeq); assertEquals(((TBoolSeq) tmp).to_string(), tseq.to_string()); @@ -623,7 +623,7 @@ public void testSequence(Temporal base, TInterpolation type, TBoolSeq tseq) { @ParameterizedTest(name = "Test to sequenceset method.") @MethodSource("TBool_tosequenceset") public void testSequenceSet(Temporal base, TInterpolation type, TBoolSeqSet tseqset) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); Temporal tmp = base.to_sequenceset(type); assertTrue(tmp instanceof TBoolSeqSet); assertEquals(((TBoolSeqSet) tmp).to_string(), tseqset.to_string()); @@ -633,7 +633,7 @@ public void testSequenceSet(Temporal base, TInterpolation type, TBoolSeqSet tseq @ParameterizedTest(name = "Test insert method.") @MethodSource("TBool_insert") public void testInsert(Temporal base, Temporal base2, Temporal tseq, String type) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if (type == "TBoolInst") { assertEquals(((TBoolInst)base.insert(base2)).to_string(), ((TBoolSeq) tseq).to_string()); } else if (type == "TBoolSeq") { @@ -647,7 +647,7 @@ public void testInsert(Temporal base, Temporal base2, Temporal tseq, String type @ParameterizedTest(name = "Test update method.") @MethodSource("TBool_update") public void testUpdate(Temporal base, Temporal base2, Temporal tseq, String type) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if (type == "TBoolInst") { assertEquals(((TBoolInst)base.update(base2)).to_string(), ((TBoolInst) tseq).to_string()); } else if (type == "TBoolSeq") { @@ -661,7 +661,7 @@ public void testUpdate(Temporal base, Temporal base2, Temporal tseq, String type @ParameterizedTest(name = "Test append sequence method.") @MethodSource("TBool_appendseq") public void testAppendSeq(Temporal base, TSequence base2, Temporal tseq, String type) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if (type == "TBoolSeq") { assertEquals(((TBoolSeq)base.append_sequence(base2)).to_string(), ((TBoolSeq) tseq).to_string()); } else if (type == "TBoolSeqSet") { @@ -674,7 +674,7 @@ public void testAppendSeq(Temporal base, TSequence base2, Temporal tseq, String @ParameterizedTest(name = "Test when true method.") @MethodSource("TBool_whentrue") public void testWhentrue(Temporal base, String type, tstzspanset pset) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if (type == "TBoolInst") { assertEquals( ((TBoolInst) base).when_true().toString(), pset.toString()); } else if (type == "TBoolSeq") { @@ -688,7 +688,7 @@ public void testWhentrue(Temporal base, String type, tstzspanset pset) { @ParameterizedTest(name = "Test when false method.") @MethodSource("TBool_whenfalse") public void testWhenfalse(Temporal base, String type, tstzspanset pset) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if (type == "TBoolSeq") { System.out.println(((TBoolSeq) base).when_false().toString()); System.out.println(pset.toString()); @@ -704,7 +704,7 @@ public void testWhenfalse(Temporal base, String type, tstzspanset pset) { @ParameterizedTest(name = "Test to always true method.") @MethodSource("TBool_alwaystrue") public void testAlwaystrue(Temporal base, String type, boolean expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if (type == "TBoolInst") { assertEquals( ((TBoolInst) base).always_eq(true), expected); } else if (type == "TBoolSeq") { @@ -718,7 +718,7 @@ public void testAlwaystrue(Temporal base, String type, boolean expected) { @ParameterizedTest(name = "Test to always false method.") @MethodSource("TBool_alwaysfalse") public void testAlwaysfalse(Temporal base, String type, boolean expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if (type == "TBoolInst") { assertEquals( ((TBoolInst) base).always_eq(false), expected); } else if (type == "TBoolSeq") { @@ -733,7 +733,7 @@ public void testAlwaysfalse(Temporal base, String type, boolean expected) { @ParameterizedTest(name = "Test to ever true method.") @MethodSource("TBool_evertrue") public void testEvertrue(Temporal base, String type, boolean expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if (type == "TBoolInst") { assertEquals( ((TBoolInst) base).ever_eq(true), expected); } else if (type == "TBoolSeq") { @@ -748,7 +748,7 @@ public void testEvertrue(Temporal base, String type, boolean expected) { @ParameterizedTest(name = "Test to ever false method.") @MethodSource("TBool_everfalse") public void testEverfalse(Temporal base, String type, boolean expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if (type == "TBoolInst") { assertEquals( ((TBoolInst) base).ever_eq(false), expected); } else if (type == "TBoolSeq") { @@ -762,7 +762,7 @@ public void testEverfalse(Temporal base, String type, boolean expected) { @ParameterizedTest(name = "Test to never true method.") @MethodSource("TBool_nevertrue") public void testNevertrue(Temporal base, String type, boolean expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if (type == "TBoolInst") { assertEquals( ((TBoolInst) base).never_eq(true), expected); } else if (type == "TBoolSeq") { @@ -777,7 +777,7 @@ public void testNevertrue(Temporal base, String type, boolean expected) { @ParameterizedTest(name = "Test to never false method.") @MethodSource("TBool_neverfalse") public void testNeverfalse(Temporal base, String type, boolean expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if (type == "TBoolInst") { assertEquals( ((TBoolInst) base).never_eq(false), expected); } else if (type == "TBoolSeq") { diff --git a/src/test/java/basic/TFloatTest.java b/src/test/java/basic/TFloatTest.java index 7561fe7bf..6f2cf8cae 100644 --- a/src/test/java/basic/TFloatTest.java +++ b/src/test/java/basic/TFloatTest.java @@ -37,7 +37,7 @@ public class TFloatTest { static error_handler_fn errorHandler = new error_handler(); private static Stream frombasetemporal() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TIntInst("1@2019-09-01"), "TFloatInst", TInterpolation.NONE), Arguments.of(new TIntSeq("[1@2019-09-01, 2@2019-09-02]"), "TFloatSeq", TInterpolation.LINEAR), @@ -47,7 +47,7 @@ private static Stream frombasetemporal() { private static Stream frombasetime() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new tstzset("{2019-09-01, 2019-09-02}"), "TFloatSeq", TInterpolation.DISCRETE), Arguments.of(new tstzspan("[2019-09-01, 2019-09-02]"), "TFloatSeqSet", TInterpolation.LINEAR), @@ -67,7 +67,7 @@ private static Stream fromstring() { private static Stream fromcopy() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TFloatInst("1.5@2019-09-01"), "TFloatInst"), Arguments.of(new TFloatSeq("[1.5@2019-09-01, 2.5@2019-09-02]"), "TFloatSeq"), @@ -77,7 +77,7 @@ private static Stream fromcopy() { } private static Stream totint() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TFloatInst("1.5@2019-09-01"), "TFloatInst", "1@2019-09-01 00:00:00+00") //Arguments.of(new TFloatSeq("{1.5@2019-09-01, 2.5@2019-09-02}"), "TFloatSeq", "[1@2019-09-01 00:00:00+00, 2@2019-09-02 00:00:00+00]"), @@ -88,7 +88,7 @@ private static Stream totint() { private static Stream bounding() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TFloatInst("1.5@2019-09-01"), "TFloatInst", new TBox("TBOXFLOAT XT([1.5,1.5],[2019-09-01, 2019-09-01])")), Arguments.of(new TFloatSeq("[1.5@2019-09-01, 2.5@2019-09-02]"), "TFloatSeq", new TBox("TBOXFLOAT XT([1.5,2.5],[2019-09-01, 2019-09-02])")), @@ -99,7 +99,7 @@ private static Stream bounding() throws SQLException { private static Stream interp() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TFloatInst("1.5@2019-09-01"), "TFloatInst", TInterpolation.NONE), Arguments.of(new TFloatSeq("[1.5@2019-09-01, 2.5@2019-09-02]"), "TFloatSeq", TInterpolation.LINEAR), @@ -109,7 +109,7 @@ private static Stream interp() throws SQLException { private static Stream value_span() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TFloatInst("1.5@2019-09-01"), "TFloatInst", new FloatSpan(1.5f, 1.5f, true, true)), Arguments.of(new TFloatSeq("[1.5@2019-09-01, 2.5@2019-09-02]"), "TFloatSeq", new FloatSpan(1.5f, 2.5f, true, true)), @@ -119,7 +119,7 @@ private static Stream value_span() throws SQLException { private static Stream value_spans() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TIntInst("1@2019-09-01"), "TIntInst", new IntSpanSet("{[1,1]}")), Arguments.of(new TIntSeq("[1@2019-09-01, 2@2019-09-02]"), "TIntSeq", new IntSpanSet("{[1,2]}")), @@ -129,7 +129,7 @@ private static Stream value_spans() throws SQLException { private static Stream start_value() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TFloatInst("1.5@2019-09-01"), "TFloatInst", 1.5f), Arguments.of(new TFloatSeq("[1.5@2019-09-01, 2.5@2019-09-02]"), "TFloatSeq", 1.5f), @@ -139,7 +139,7 @@ private static Stream start_value() throws SQLException { private static Stream end_value() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TFloatInst("1.5@2019-09-01"), "TFloatInst", 1.5f), Arguments.of(new TFloatSeq("[1.5@2019-09-01, 2.5@2019-09-02]"), "TFloatSeq", 2.5f), @@ -149,7 +149,7 @@ private static Stream end_value() throws SQLException { private static Stream min_value() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TFloatInst("1.5@2019-09-01"), "TFloatInst", 1.5f), Arguments.of(new TFloatSeq("[1.5@2019-09-01, 2.5@2019-09-02]"), "TFloatSeq", 1.5f), @@ -159,7 +159,7 @@ private static Stream min_value() throws SQLException { private static Stream max_value() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TFloatInst("1.5@2019-09-01"), "TIntInst", 1.5f), Arguments.of(new TFloatSeq("[1.5@2019-09-01, 2.5@2019-09-02]"), "TIntSeq", 2.5f), @@ -169,7 +169,7 @@ private static Stream max_value() throws SQLException { private static Stream time() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TFloatInst("1.5@2019-09-01"), "TFloatInst", new tstzspanset("{[2019-09-01, 2019-09-01]}")), Arguments.of(new TFloatSeq("[1.5@2019-09-01, 2.5@2019-09-02]"), "TFloatSeq", new tstzspanset("{[2019-09-01, 2019-09-02]}")), @@ -179,7 +179,7 @@ private static Stream time() throws SQLException { private static Stream period() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TFloatInst("1.5@2019-09-01"), "TFloatInst", new tstzspan("[2019-09-01, 2019-09-01]")), Arguments.of(new TFloatSeq("[1.5@2019-09-01, 2.5@2019-09-02]"), "TFloatSeq", new tstzspan("[2019-09-01, 2019-09-02]")), @@ -188,7 +188,7 @@ private static Stream period() throws SQLException { } private static Stream num_instant() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TFloatInst("1.5@2019-09-01"), "TFloatInst", 1), Arguments.of(new TFloatSeq("[1.5@2019-09-01, 2.5@2019-09-02]"), "TFloatSeq",2), @@ -199,7 +199,7 @@ private static Stream num_instant() throws SQLException { private static Stream start_instant() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TFloatInst("1.5@2019-09-01"), "TIntInst", new TFloatInst("1.5@2019-09-01")), Arguments.of(new TFloatSeq("[1.5@2019-09-01, 2.5@2019-09-02]"), "TIntSeq",new TFloatInst("1.5@2019-09-01")), @@ -210,7 +210,7 @@ private static Stream start_instant() throws SQLException { private static Stream end_instant() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TFloatInst("1.5@2019-09-01"), "TFloatInst", new TFloatInst("1.5@2019-09-01")), Arguments.of(new TFloatSeq("[1.5@2019-09-01, 2.5@2019-09-02]"), "TFloatSeq",new TFloatInst("2.5@2019-09-02")), @@ -220,7 +220,7 @@ private static Stream end_instant() throws SQLException { private static Stream max_instant() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TFloatInst("1.5@2019-09-01"), "TFloatInst", new TFloatInst("1.5@2019-09-01")), Arguments.of(new TFloatSeq("[1.5@2019-09-01, 2.5@2019-09-02]"), "TFloatSeq",new TFloatInst("2.5@2019-09-02")), @@ -230,7 +230,7 @@ private static Stream max_instant() throws SQLException { private static Stream instant_n() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TFloatInst("1.5@2019-09-01"), 0, new TFloatInst("1.5@2019-09-01")), Arguments.of(new TFloatSeq("[1.5@2019-09-01, 2.5@2019-09-02]"), 1,new TFloatInst("2.5@2019-09-02")), @@ -241,7 +241,7 @@ private static Stream instant_n() throws SQLException { private static Stream num_timestamps() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TFloatInst("1.5@2019-09-01"), 1, new TIntInst("1@2019-09-01")), Arguments.of(new TFloatSeq("[1.5@2019-09-01, 2.5@2019-09-02]"), 2,new TIntInst("2@2019-09-02")), @@ -252,7 +252,7 @@ private static Stream num_timestamps() throws SQLException { private static Stream start_timestamps() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TFloatInst("1.5@2019-09-01"), 1, LocalDateTime.of(2019, 9, 1, 0, 0,0)), Arguments.of(new TFloatSeq("[1.5@2019-09-01, 2.5@2019-09-02]"), 2, LocalDateTime.of(2019, 9, 1, 0, 0,0)), @@ -262,7 +262,7 @@ private static Stream start_timestamps() throws SQLException { private static Stream end_timestamps() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TFloatInst("1.5@2019-09-01"), 1, LocalDateTime.of(2019, 9, 1, 0, 0,0)), Arguments.of(new TFloatSeq("[1.5@2019-09-01, 2.5@2019-09-02]"), 2, LocalDateTime.of(2019, 9, 2, 0, 0,0)), @@ -272,7 +272,7 @@ private static Stream end_timestamps() throws SQLException { private static Stream hash() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TFloatInst("1.5@2019-09-01"), 1307112078, LocalDateTime.of(2019, 9, 1, 0, 0,0)), Arguments.of(new TFloatSeq("[1.5@2019-09-01, 2.5@2019-09-02]"), 1935376725, LocalDateTime.of(2019, 9, 2, 0, 0,0)) @@ -282,7 +282,7 @@ private static Stream hash() throws SQLException { private static Stream toinstant() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TFloatInst("1.5@2019-09-01"), "TFloatInst", new TFloatInst("1.5@2019-09-01")), Arguments.of(new TFloatSeq("[1.5@2019-09-01]"), "TFloatSeq", new TFloatInst("1.5@2019-09-01")), @@ -292,7 +292,7 @@ private static Stream toinstant() throws SQLException { private static Stream tosequence() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TFloatInst("1.5@2019-09-01"), "TFloatInst", TInterpolation.LINEAR, new TFloatSeq("[1.5@2019-09-01]")), Arguments.of(new TFloatSeq("[1.5@2019-09-01, 2.5@2019-09-02]"), "TFloatSeq", TInterpolation.LINEAR, new TFloatSeq("[1.5@2019-09-01, 2.5@2019-09-02]")), @@ -302,7 +302,7 @@ private static Stream tosequence() throws SQLException { private static Stream tosequenceset() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TFloatInst("1.5@2019-09-01"), "TFloatInst", TInterpolation.LINEAR, new TFloatSeqSet("{[1.5@2019-09-01]}")), Arguments.of(new TFloatSeq("[1.5@2019-09-01, 2.5@2019-09-02]"), "TFloatSeq", TInterpolation.LINEAR, new TFloatSeqSet("{[1.5@2019-09-01, 2.5@2019-09-02]}")), @@ -312,7 +312,7 @@ private static Stream tosequenceset() throws SQLException { private static Stream insert() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( //Arguments.of(new TFloatInst("1.5@2019-09-01"), "TFloatInst", new TFloatSeq("{1.5@2019-09-03}"), new TFloatSeq("{1.5@2019-09-01, 1.5@2019-09-03}")) Arguments.of(new TFloatSeq("[1.5@2019-09-01, 2.5@2019-09-02]"), "TFloatSeq", new TFloatSeq("[1.5@2019-09-03]"), new TFloatSeqSet("[1.5@2019-09-01, 2.5@2019-09-02, 1.5@2019-09-03]")), @@ -322,7 +322,7 @@ private static Stream insert() throws SQLException { private static Stream update() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TFloatInst("1.5@2019-09-01"), "TFloatInst", new TFloatInst("2.5@2019-09-01"), new TFloatInst("2.5@2019-09-01")), Arguments.of(new TFloatSeq("[1.5@2019-09-01, 2.5@2019-09-02]"), "TFloatSeq", new TFloatInst("2.5@2019-09-01"), new TFloatSeqSet("{[2.5@2019-09-01], (1.5@2019-09-01, 2.5@2019-09-02]}")), @@ -332,7 +332,7 @@ private static Stream update() throws SQLException { private static Stream append_sequence() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TFloatSeq("[1.5@2019-09-01, 2.5@2019-09-02]"), "TFloatSeq", new TFloatSeq("[1.5@2019-09-03]"), new TFloatSeqSet("{[1.5@2019-09-01, 2.5@2019-09-02], [1.5@2019-09-03]}")), Arguments.of(new TFloatSeqSet("{[1.5@2019-09-01, 2.5@2019-09-02],[1.5@2019-09-03, 1.5@2019-09-05]}"), "TFloatSeqSet", new TFloatSeq("[1.5@2019-09-06]"), new TFloatSeqSet("{[1.5@2019-09-01, 2.5@2019-09-02],[1.5@2019-09-03, 1.5@2019-09-05],[1.5@2019-09-06]}")) @@ -341,7 +341,7 @@ private static Stream append_sequence() throws SQLException { private static Stream abs() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TFloatInst("1.5@2019-09-01"), "TFloatInst", new TFloatInst("2.5@2019-09-01"), new TFloatInst("2.5@2019-09-01")), Arguments.of(new TFloatSeq("[1.5@2019-09-01, 2.5@2019-09-02]"), "TFloatSeq", new TFloatInst("2.5@2019-09-01"), new TFloatSeqSet("{[2.5@2019-09-01], (1.5@2019-09-01, 2.5@2019-09-02]}")), @@ -351,7 +351,7 @@ private static Stream abs() throws SQLException { /* private static Stream delta_value() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TFloatSeq("[1.5@2019-09-01, 2.5@2019-09-02]"), "TFloatSeq", new TFloatSeq("Interp=Step;[1@2019-09-01, 1@2019-09-02)")), Arguments.of(new TFloatSeqSet("{[1.5@2019-09-01, 2.5@2019-09-02],[1.5@2019-09-03, 1.5@2019-09-05]}"), "TFloatSeqSet", new TFloatSeqSet("Interp=Step;{[1@2019-09-01, 1@2019-09-02),[0@2019-09-03, 0@2019-09-05)}")) @@ -363,7 +363,7 @@ private static Stream delta_value() throws SQLException { private static Stream always_equal() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TFloatInst("1.5@2019-09-01"), "TFloatInst", 1.5f, true ), Arguments.of(new TFloatInst("1.5@2019-09-01"), "TFloatInst", 2.5f, false ), @@ -377,7 +377,7 @@ private static Stream always_equal() throws SQLException { private static Stream ever_equal() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TFloatInst("1.5@2019-09-01"), "TFloatInst", 1.5f, true ), Arguments.of(new TFloatInst("1.5@2019-09-01"), "TFloatInst", 2.5f, false ), @@ -391,7 +391,7 @@ private static Stream ever_equal() throws SQLException { private static Stream ever_greater() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TFloatInst("1.5@2019-09-01"), "TFloatInst", 1.5f, false ), Arguments.of(new TFloatInst("1.5@2019-09-01"), "TFloatInst", 2.5f, true ), @@ -424,7 +424,7 @@ private static Stream ever_greater() throws SQLException { @ParameterizedTest(name="Test from base time constructor") @MethodSource("frombasetime") void testFromBaseTimeConstructor(Time source, String type, TInterpolation interpolation) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if (type == "TFloatSeq") { TFloatSeq ti = (TFloatSeq) TFloat.from_base_time(1.5f, source, interpolation); assertTrue(ti instanceof TFloatSeq); @@ -443,7 +443,7 @@ void testFromBaseTimeConstructor(Time source, String type, TInterpolation interp @ParameterizedTest(name ="Test from base temporal constructor") @MethodSource("frombasetemporal") void testFromBaseTemporalConstructor(Temporal source, String type, TInterpolation interpolation) { - //functions.meos_initialize("UTC", errorHandler); + //functions.meos_initialize(); if(type == "TFloatInst"){ TFloatInst ti = new TFloatInst(); TFloatInst new_ti = (TFloatInst) ti.from_base_temporal(1.5f,source,interpolation); @@ -470,7 +470,7 @@ else if (type == "TFloatSeq") { @ParameterizedTest(name ="Test from string constructor") @MethodSource("fromstring") void testStringConstructor(String source, String type, TInterpolation interpolation, String expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if(type == "TFloatInst"){ TFloatInst tinst = new TFloatInst(source); assertTrue(tinst instanceof TFloatInst); @@ -497,7 +497,7 @@ else if (type == "TFloatSeq") { @ParameterizedTest(name ="Test from copy constructor") @MethodSource("fromcopy") void testCopyConstructor(Temporal source, String type) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if(type == "TFloatInst"){ TFloatInst tb = (TFloatInst)source.copy(); assertEquals(tb.to_string(15),(((TFloatInst) source).to_string(15))); @@ -517,7 +517,7 @@ else if (type == "TFloatSeq") { @ParameterizedTest(name ="Test string ") @MethodSource("fromstring") void testString(String source, String type, TInterpolation interpolation, String expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if(type == "TFloatInst"){ TFloatInst tinst = new TFloatInst(source); assertEquals(tinst.to_string(15),expected); @@ -536,7 +536,7 @@ else if (type == "TFloatSeq") { @ParameterizedTest(name ="Test to tint ") @MethodSource("totint") void testToTInt(TFloat source, String type, String expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if(type == "TFloatInst"){ TInt tinst = ((TFloatInst) source).to_tint(); assertEquals(tinst.to_string(),expected); @@ -558,7 +558,7 @@ else if (type == "TFloatSeq") { @ParameterizedTest(name ="Test bounding box ") @MethodSource("bounding") void testBoundingBox(Temporal source, String type, Box expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.bounding_box().toString(),expected.to_period().toString()); } @@ -568,7 +568,7 @@ void testBoundingBox(Temporal source, String type, Box expected) { @ParameterizedTest(name ="Test interpolation ") @MethodSource("interp") void testInterpolation(Temporal source, String type, TInterpolation expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.interpolation(),expected); } @@ -576,7 +576,7 @@ void testInterpolation(Temporal source, String type, TInterpolation expected) { @ParameterizedTest(name ="Test value span ") @MethodSource("value_span") void testValueSpan(TFloat source, String type, FloatSpan expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.value_span().toString(15),expected.toString(15)); } @@ -584,7 +584,7 @@ void testValueSpan(TFloat source, String type, FloatSpan expected) { @ParameterizedTest(name ="Test values span ") @MethodSource("value_spans") void testValuesSpan(TInt source, String type, IntSpanSet expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.value_spans().toString(),expected.toString()); } @@ -594,7 +594,7 @@ void testValuesSpan(TInt source, String type, IntSpanSet expected) { @ParameterizedTest(name ="Test start value") @MethodSource("start_value") void testStart_value(TFloat source, String type, float expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.start_value(),expected); } @@ -602,7 +602,7 @@ void testStart_value(TFloat source, String type, float expected) { @ParameterizedTest(name ="Test end value") @MethodSource("end_value") void testEnd_value(TFloat source, String type, float expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.end_value(),expected); } @@ -610,7 +610,7 @@ void testEnd_value(TFloat source, String type, float expected) { @ParameterizedTest(name ="Test min value") @MethodSource("min_value") void testMin_value(TFloat source, String type, float expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.min_value(),expected); } @@ -618,7 +618,7 @@ void testMin_value(TFloat source, String type, float expected) { @ParameterizedTest(name ="Test max value") @MethodSource("max_value") void testMax_value(TFloat source, String type, float expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.max_value(),expected); } @@ -626,7 +626,7 @@ void testMax_value(TFloat source, String type, float expected) { @ParameterizedTest(name ="Test time method") @MethodSource("time") void testTime(Temporal source, String type, tstzspanset expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.time().toString(),expected.toString()); } @@ -635,7 +635,7 @@ void testTime(Temporal source, String type, tstzspanset expected) { @ParameterizedTest(name ="Test period method") @MethodSource("period") void testtstzspan(Temporal source, String type, tstzspan expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.period().toString(),expected.toString()); } @@ -643,7 +643,7 @@ void testtstzspan(Temporal source, String type, tstzspan expected) { @ParameterizedTest(name ="Test timespan method") @MethodSource("period") void testTimespan(Temporal source, String type, tstzspan expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.timespan().toString(),expected.toString()); } @@ -651,7 +651,7 @@ void testTimespan(Temporal source, String type, tstzspan expected) { @ParameterizedTest(name ="Test num instant method") @MethodSource("num_instant") void testNumInstant(Temporal source, String type, int expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.num_instants(),expected); } @@ -659,7 +659,7 @@ void testNumInstant(Temporal source, String type, int expected) { @ParameterizedTest(name ="Test start instant method") @MethodSource("start_instant") void testStartInstant(Temporal source, String type, Temporal expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(((TFloatInst)source.start_instant()).to_string(15),((TFloatInst)expected.start_instant()).to_string(15)); } @@ -667,7 +667,7 @@ void testStartInstant(Temporal source, String type, Temporal expected) { @ParameterizedTest(name ="Test end instant method") @MethodSource("end_instant") void testEndInstant(Temporal source, String type, Temporal expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(((TFloatInst)source.end_instant()).to_string(15),((TFloatInst)expected.end_instant()).to_string(15)); } @@ -676,7 +676,7 @@ void testEndInstant(Temporal source, String type, Temporal expected) { @ParameterizedTest(name ="Test min instant method") @MethodSource("start_instant") void testMinInstant(Temporal source, String type, Temporal expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(((TFloatInst)source.min_instant()).to_string(15),((TFloatInst)expected.min_instant()).to_string(15)); } @@ -684,7 +684,7 @@ void testMinInstant(Temporal source, String type, Temporal expected) { @ParameterizedTest(name ="Test max instant method") @MethodSource("max_instant") void testMaxInstant(Temporal source, String type, Temporal expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(((TFloatInst)source.max_instant()).to_string(15),((TFloatInst)expected.max_instant()).to_string(15)); } @@ -693,7 +693,7 @@ void testMaxInstant(Temporal source, String type, Temporal expected) { @ParameterizedTest(name ="Test instant n method") @MethodSource("instant_n") void testInstant_n(Temporal source, int n, Temporal expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(((TFloatInst)source.instant_n(n)).to_string(15),((TFloatInst)expected).to_string(15)); } @@ -701,7 +701,7 @@ void testInstant_n(Temporal source, int n, Temporal expected) { @ParameterizedTest(name ="Test num timestamps method") @MethodSource("num_timestamps") void testNumTimestamps(Temporal source, int n, Temporal expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.num_timestamps(),n); } @@ -709,7 +709,7 @@ void testNumTimestamps(Temporal source, int n, Temporal expected) { @ParameterizedTest(name ="Test start timestamps method") @MethodSource("start_timestamps") void testStartTimestamps(Temporal source, int n, LocalDateTime expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.start_timestamp(),expected); } @@ -717,7 +717,7 @@ void testStartTimestamps(Temporal source, int n, LocalDateTime expected) { @ParameterizedTest(name ="Test end timestamps method") @MethodSource("end_timestamps") void testEndTimestamps(Temporal source, int n, LocalDateTime expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.end_timestamp(),expected); } @@ -725,7 +725,7 @@ void testEndTimestamps(Temporal source, int n, LocalDateTime expected) { @ParameterizedTest(name ="Test hash method") @MethodSource("hash") void testHash(Temporal source, long n, LocalDateTime expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.hash(),n); } @@ -733,7 +733,7 @@ void testHash(Temporal source, long n, LocalDateTime expected) { @ParameterizedTest(name ="Test to instant method") @MethodSource("toinstant") void testToinstant(Temporal source, String type, TFloatInst expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); TFloatInst tmp = (TFloatInst) source.to_instant(); assertTrue(tmp instanceof TFloatInst); assertEquals(tmp.to_string(15),expected.to_string(15)); @@ -745,7 +745,7 @@ void testToinstant(Temporal source, String type, TFloatInst expected) { @ParameterizedTest(name ="Test to sequence method") @MethodSource("tosequence") void testTosequence(Temporal source, String type, TInterpolation interp, TFloatSeq expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); TFloatSeq tmp = (TFloatSeq) source.to_sequence(interp); assertTrue(tmp instanceof TFloatSeq); assertEquals(tmp.to_string(15),expected.to_string(15)); @@ -756,7 +756,7 @@ void testTosequence(Temporal source, String type, TInterpolation interp, TFloatS @ParameterizedTest(name ="Test to sequenceset method") @MethodSource("tosequenceset") void testTosequenceset(Temporal source, String type, TInterpolation interp, TFloatSeqSet expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); TFloatSeqSet tmp = (TFloatSeqSet) source.to_sequenceset(interp); assertTrue(tmp instanceof TFloatSeqSet); assertEquals(tmp.to_string(15),expected.to_string(15)); @@ -768,7 +768,7 @@ void testTosequenceset(Temporal source, String type, TInterpolation interp, TFlo @ParameterizedTest(name ="Test insert method") @MethodSource("insert") void testInsert(Temporal source, String type, TFloatSeq tseq, Temporal expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if(type == "TFloatInst"){ TFloatInst tmp = (TFloatInst) source.insert(tseq); assertEquals(tmp.to_string(15), ((TFloatSeq)expected).to_string(15)); @@ -787,7 +787,7 @@ void testInsert(Temporal source, String type, TFloatSeq tseq, Temporal expected) @ParameterizedTest(name ="Test update method") @MethodSource("update") void testUpdate(Temporal source, String type, TFloatInst tseq, Temporal expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if(type == "TFloatInst"){ TFloatInst tmp = (TFloatInst) source.update(tseq); assertEquals(tmp.to_string(15), ((TFloatInst)expected).to_string(15)); @@ -804,7 +804,7 @@ void testUpdate(Temporal source, String type, TFloatInst tseq, Temporal expected @ParameterizedTest(name ="Test append sequence method") @MethodSource("append_sequence") void testAppendSequence(Temporal source, String type, TFloatSeq tseq, Temporal expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if (type == "TFloatSeq") { TFloatSeq tmp = (TFloatSeq) source.append_sequence(tseq); assertEquals(tmp.to_string(15), ((TFloatSeqSet)expected).to_string(15)); @@ -821,7 +821,7 @@ void testAppendSequence(Temporal source, String type, TFloatSeq tseq, Temporal e @ParameterizedTest(name ="Test abs method") @MethodSource("abs") void testAbs(Temporal source, String type, TFloatInst tseq, Temporal expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if(type == "TFloatInst"){ TNumber tmp = ((TNumber) source).abs(); assertEquals(((TFloatInst)tmp).to_string(15), ((TFloatInst)source).to_string(15)); @@ -838,7 +838,7 @@ void testAbs(Temporal source, String type, TFloatInst tseq, Temporal expected) { @ParameterizedTest(name ="Test delta value method") @MethodSource("delta_value") void testDeltaValue(Temporal source, String type, Temporal expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if(type == "TFloatInst"){ TNumber tmp = ((TNumber) source).delta_value(); assertEquals(((TFloatInst)tmp).tostring(15), ((TFloatInst)expected).tostring(15)); @@ -858,7 +858,7 @@ void testDeltaValue(Temporal source, String type, Temporal expected) { @ParameterizedTest(name ="Test always equal method") @MethodSource("always_equal") void testAlwaysEqual(Temporal source, String type, float arg, boolean expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(((TFloat)source).always_equal(arg),expected); assertEquals(((TFloat)source).never_not_equal(arg),expected); assertEquals(((TFloat)source).ever_not_equal(arg),! expected); @@ -870,7 +870,7 @@ void testAlwaysEqual(Temporal source, String type, float arg, boolean expected) @ParameterizedTest(name ="Test ever equal method") @MethodSource("ever_equal") void testEverEqual(Temporal source, String type, float arg, boolean expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(((TFloat)source).ever_equal(arg),expected); assertEquals(((TFloat)source).always_not_equal(arg),!expected); assertEquals(((TFloat)source).never_equal(arg),! expected); @@ -880,7 +880,7 @@ void testEverEqual(Temporal source, String type, float arg, boolean expected) { @ParameterizedTest(name ="Test ever greater method") @MethodSource("ever_greater") void testEverGreater(Temporal source, String type, float arg, boolean expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(((TFloat)source).always_less(arg),expected); assertEquals(((TFloat)source).never_greater_or_equal(arg),expected); assertEquals(((TFloat)source).ever_greater_or_equal(arg),! expected); diff --git a/src/test/java/basic/TGeogPointTest.java b/src/test/java/basic/TGeogPointTest.java index 5967ee0da..85ec227dc 100644 --- a/src/test/java/basic/TGeogPointTest.java +++ b/src/test/java/basic/TGeogPointTest.java @@ -51,7 +51,7 @@ public class TGeogPointTest { static error_handler_fn errorHandler = new error_handler(); private static Stream fromtemporal() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeogPointInst("Point(1.5 1.5)@2019-09-01"), "TGeogPointInst",TInterpolation.NONE, "POINT(1 1)@2019-09-01 00:00:00+00"), Arguments.of(new TGeogPointSeq("{Point(1.5 1.5)@2019-09-01, Point(2.5 2.5)@2019-09-02}"), "TGeogPointSeq",TInterpolation.DISCRETE, "{POINT(1 1)@2019-09-01 00:00:00+00, POINT(2 2)@2019-09-02 00:00:00+00}"), @@ -63,7 +63,7 @@ private static Stream fromtemporal() { static Stream from_time() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new tstzset("{2019-09-01, 2019-09-02}"), "TGeogPointSeq", TInterpolation.DISCRETE), Arguments.of(new tstzspan("[2019-09-01, 2019-09-02]"), "TGeogPointSeqSet", TInterpolation.STEPWISE), @@ -74,7 +74,7 @@ static Stream from_time() throws SQLException { private static Stream fromstring() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeogPointInst("Point(1 1)@2019-09-01"), "TGeogPointInst",TInterpolation.NONE, "POINT(1 1)@2019-09-01 00:00:00+00"), Arguments.of(new TGeogPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}"), "TGeogPointSeq",TInterpolation.DISCRETE, "{POINT(1 1)@2019-09-01 00:00:00+00, POINT(2 2)@2019-09-02 00:00:00+00}"), @@ -85,7 +85,7 @@ private static Stream fromstring() { private static Stream bounding() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeogPointInst("Point(1 1)@2019-09-01"), "TGeogPointInst", new STBox("GEODSTBOX XT(((1, 1),(1, 1)),[2019-09-01, 2019-09-01])") ), Arguments.of(new TGeogPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}"), "TGeogPointSeq", new STBox("GEODSTBOX XT(((1, 1),(2, 2)),[2019-09-01, 2019-09-02])") ), @@ -96,7 +96,7 @@ private static Stream bounding() { private static Stream fromstart() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeogPointInst("Point(1 1)@2019-09-01"), "TGeogPointInst", "POINT (1 1)" ), Arguments.of(new TGeogPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}"), "TGeogPointSeq", "POINT (1 1)" ), @@ -107,7 +107,7 @@ private static Stream fromstart() { private static Stream endstart() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeogPointInst("Point(1 1)@2019-09-01"), "TGeogPointInst", "POINT (1 1)" ), Arguments.of(new TGeogPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}"), "TGeogPointSeq", "POINT (2 2)" ), @@ -118,7 +118,7 @@ private static Stream endstart() { private static Stream test_time() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeogPointInst("Point(1 1)@2019-09-01"), "TGeogPointInst", new tstzspanset("{[2019-09-01, 2019-09-01]}") ), Arguments.of(new TGeogPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}"), "TGeogPointSeq", new tstzspanset("{[2019-09-01, 2019-09-01], [2019-09-02, 2019-09-02]}") ), @@ -129,7 +129,7 @@ private static Stream test_time() { private static Stream period() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeogPointInst("Point(1 1)@2019-09-01"), "TGeogPointInst", new tstzspan("[2019-09-01, 2019-09-01]") ), Arguments.of(new TGeogPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}"), "TGeogPointSeq", new tstzspan("[2019-09-01, 2019-09-02]") ), @@ -139,7 +139,7 @@ private static Stream period() { } private static Stream num_instant() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeogPointInst("Point(1 1)@2019-09-01"), "TGeogPointInst", 1 ), Arguments.of(new TGeogPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}"), "TGeogPointSeq", 2 ), @@ -150,7 +150,7 @@ private static Stream num_instant() { private static Stream start_instant() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of("Point(1 1)@2019-09-01", "TGeogPointInst", new TGeogPointInst("Point(1 1)@2019-09-01") ), Arguments.of("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}", "TGeogPointSeq", new TGeogPointInst("Point(1 1)@2019-09-01") ), @@ -163,7 +163,7 @@ private static Stream start_instant() { private static Stream end_instant() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of("Point(1 1)@2019-09-01", "TGeogPointInst", new TGeogPointInst("Point(1 1)@2019-09-01") ), Arguments.of("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}", "TGeogPointSeq", new TGeogPointInst("Point(2 2)@2019-09-02") ), @@ -174,7 +174,7 @@ private static Stream end_instant() { private static Stream asmfjson() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); String jsonString1 = "{\n" + " \"type\": \"MovingGeomPoint\",\n" + " \"bbox\": [\n" + @@ -353,7 +353,7 @@ private static Stream asmfjson() { private static Stream min_instant() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeogPointInst("Point(1 1)@2019-09-01"), "TGeogPointInst", new TGeogPointInst("Point(1 1)@2019-09-01") ), Arguments.of(new TGeogPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}"), "TGeogPointSeq", new TGeogPointInst("Point(1 1)@2019-09-01") ), @@ -364,7 +364,7 @@ private static Stream min_instant() { private static Stream max_instant() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeogPointInst("Point(1 1)@2019-09-01"), "TGeogPointInst", new TGeogPointInst("Point(1 1)@2019-09-01") ), Arguments.of(new TGeogPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}"), "TGeogPointSeq", new TGeogPointInst("Point(2 2)@2019-09-02") ), @@ -375,7 +375,7 @@ private static Stream max_instant() { private static Stream instantn() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeogPointInst("Point(1 1)@2019-09-01"), 0, new TGeogPointInst("Point(1 1)@2019-09-01") ), Arguments.of(new TGeogPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}"), 1, new TGeogPointInst("Point(2 2)@2019-09-02") ), @@ -386,7 +386,7 @@ private static Stream instantn() { private static Stream num_timestamps() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeogPointInst("Point(1 1)@2019-09-01"), 1), Arguments.of(new TGeogPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}"), 2), @@ -398,7 +398,7 @@ private static Stream num_timestamps() { private static Stream start_timestamps() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeogPointInst("Point(1 1)@2019-09-01"), LocalDateTime.of(2019, 9, 1, 0, 0,0)), Arguments.of(new TGeogPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}"), LocalDateTime.of(2019, 9, 1, 0, 0,0)), @@ -409,7 +409,7 @@ private static Stream start_timestamps() { private static Stream end_timestamps() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeogPointInst("Point(1 1)@2019-09-01"), LocalDateTime.of(2019, 9, 1, 0, 0,0)), Arguments.of(new TGeogPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}"), LocalDateTime.of(2019, 9, 2, 0, 0,0)), @@ -421,7 +421,7 @@ private static Stream end_timestamps() { private static Stream hash() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( // Arguments.of(new TGeogPointInst("Point(1 1)@2019-09-01"), 382694564), Arguments.of(new TGeogPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}"), 1545137628), @@ -432,7 +432,7 @@ private static Stream hash() { private static Stream lower_inc() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeogPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}"), true), Arguments.of(new TGeogPointSeq("[Point(1 1)@2019-09-01, Point(2 2)@2019-09-02]"), true) @@ -442,7 +442,7 @@ private static Stream lower_inc() { private static Stream length() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeogPointInst("Point(1 1)@2019-09-01"), 0), Arguments.of(new TGeogPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}"), 0), @@ -453,7 +453,7 @@ private static Stream length() { private static Stream cumullength() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeogPointInst("Point(1 1)@2019-09-01"), new TFloatInst("0@2019-09-01")), Arguments.of(new TGeogPointSeq("[Point(1 1)@2019-09-01, Point(2 2)@2019-09-02]"), new TFloatSeq("[0@2019-09-01, 156876.14940188668@2019-09-02]")), @@ -463,7 +463,7 @@ private static Stream cumullength() { private static Stream speed() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeogPointInst("Point(1 1)@2019-09-01"), null), Arguments.of(new TGeogPointSeq("[Point(1 1)@2019-09-01, Point(2 2)@2019-09-02]"), new TFloatSeq("[1.8157@2019-09-01, 1.8157@2019-09-02]")), @@ -473,7 +473,7 @@ private static Stream speed() { private static Stream xy() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeogPointInst("Point(1 1)@2019-09-01"), new TFloatInst("1@2019-09-01")), Arguments.of(new TGeogPointSeq("[Point(1 1)@2019-09-01, Point(2 2)@2019-09-02]"), new TFloatSeq("[1@2019-09-01, 2@2019-09-02]")), @@ -483,7 +483,7 @@ private static Stream xy() { private static Stream xyz() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeogPointInst("Point(1 1 1)@2019-09-01"), new TFloatInst("1@2019-09-01")), Arguments.of(new TGeogPointSeq("[Point(1 1 1)@2019-09-01, Point(2 2 2)@2019-09-02]"), new TFloatSeq("[1@2019-09-01, 2@2019-09-02]")), @@ -493,7 +493,7 @@ private static Stream xyz() { private static Stream hasz() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeogPointInst("Point(1 1)@2019-09-01"), false), Arguments.of(new TGeogPointSeq("[Point(1 1 1)@2019-09-01, Point(2 2 2)@2019-09-02]"), true), @@ -503,7 +503,7 @@ private static Stream hasz() { private static Stream is_simple() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeogPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}"), true), Arguments.of(new TGeogPointSeq("[Point(1 1)@2019-09-01, Point(2 2)@2019-09-02]"), true), @@ -513,7 +513,7 @@ private static Stream is_simple() { private static Stream angular_difference() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeogPointSeqSet("{[Point(1 1)@2019-09-01, Point(2 2)@2019-09-02], [Point(1 1)@2019-09-03, Point(1 1)@2019-09-05]}"), "TGeogPointSeqSet", new TFloatSeqSet("{0@2019-09-01,0@2019-09-02}")) ); @@ -522,7 +522,7 @@ private static Stream angular_difference() { private static Stream togeom() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeogPointInst("Point(1 1)@2019-09-01"), new TGeomPointInst("Point(1 1)@2019-09-01")) //Arguments.of(new TGeogPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}"), new TGeomPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}")), @@ -533,7 +533,7 @@ private static Stream togeom() { private static Stream to_instant() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeogPointInst("Point(1 1)@2019-09-01"), new TGeogPointInst("Point(1 1)@2019-09-01")), Arguments.of(new TGeogPointSeq("{Point(1 1)@2019-09-01}"), new TGeogPointInst("Point(1 1)@2019-09-01")), @@ -545,7 +545,7 @@ private static Stream to_instant() { private static Stream to_sequence() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeogPointInst("Point(1 1)@2019-09-01"), TInterpolation.LINEAR, new TGeogPointSeq("[Point(1 1)@2019-09-01]")), Arguments.of(new TGeogPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}"), TInterpolation.DISCRETE, new TGeogPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}")), @@ -556,7 +556,7 @@ private static Stream to_sequence() { private static Stream to_sequenceset() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeogPointInst("Point(1 1)@2019-09-01"), TInterpolation.LINEAR, new TGeogPointSeqSet("{[Point(1 1)@2019-09-01]}")), Arguments.of(new TGeogPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}"), TInterpolation.LINEAR, new TGeogPointSeqSet("{[Point(1 1)@2019-09-01], [Point(2 2)@2019-09-02]}")), @@ -568,7 +568,7 @@ private static Stream to_sequenceset() { private static Stream set_interp() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeogPointInst("Point(1 1)@2019-09-01"), "TGeogPointInst", TInterpolation.DISCRETE, new TGeogPointSeq("{Point(1 1)@2019-09-01}")), Arguments.of(new TGeogPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}"),"TGeogPointSeq", TInterpolation.DISCRETE, new TGeogPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}")), @@ -579,7 +579,7 @@ private static Stream set_interp() { private static Stream round() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeogPointInst("Point(1.123456789 1.123456789)@2019-09-01"), "TGeogPointInst", new TGeogPointInst("Point(1.12 1.12)@2019-09-01")), Arguments.of(new TGeogPointSeq("{Point(1.123456789 1.123456789)@2019-09-01, Point(2.123456789 2.123456789)@2019-09-02}"),"TGeogPointSeq", new TGeogPointSeq("{Point(1.12 1.12)@2019-09-01,Point(2.12 2.12)@2019-09-02}")), @@ -590,7 +590,7 @@ private static Stream round() { private static Stream insert() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeogPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}"), "TGeogPointSeq",new TGeogPointSeq("{Point(1 1)@2019-09-03}"), new TGeogPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02, Point(1 1)@2019-09-03}") ), Arguments.of(new TGeogPointSeqSet("{[Point(1 1)@2019-09-01, Point(2 2)@2019-09-02], [Point(1 1)@2019-09-03, Point(1 1)@2019-09-05]}"), "TGeogPointSeqSet", new TGeogPointSeq("[Point(1 1)@2019-09-06]"), new TGeogPointSeqSet("{[Point(1 1)@2019-09-01, Point(2 2)@2019-09-02],[Point(1 1)@2019-09-03, Point(1 1)@2019-09-05],[Point(1 1)@2019-09-06]}")) @@ -600,7 +600,7 @@ private static Stream insert() { private static Stream append_sequence() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeogPointSeq("[Point(1 1)@2019-09-01, Point(2 2)@2019-09-02]"),"TGeogPointSeq", new TGeogPointSeq("[Point(1 1)@2019-09-03]"), new TGeogPointSeqSet("{[Point(1 1)@2019-09-01, Point(2 2)@2019-09-02], [Point(1 1)@2019-09-03]}")), Arguments.of(new TGeogPointSeqSet("{[Point(1 1)@2019-09-01, Point(2 2)@2019-09-02],[Point(1 1)@2019-09-03, Point(1 1)@2019-09-05]}"), "TGeogPointSeqSet", new TGeogPointSeq("[Point(1 1)@2019-09-06]"), new TGeogPointSeqSet("{[Point(1 1)@2019-09-01, Point(2 2)@2019-09-02],[Point(1 1)@2019-09-03, Point(1 1)@2019-09-05],[Point(1 1)@2019-09-06]}")) @@ -633,7 +633,7 @@ private static Stream append_sequence() { @ParameterizedTest(name="Test from temporal constructor") @MethodSource("fromtemporal") void testFromTemporalConstructor(TGeogPoint source, String type, TInterpolation interpolation, String expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if (type == "TGeogPointInst") { GeometryFactory factory4326 = new GeometryFactory(new PrecisionModel(PrecisionModel.FLOATING), 4326); Point point = factory4326.createPoint(new Coordinate(1, 1)); @@ -659,7 +659,7 @@ void testFromTemporalConstructor(TGeogPoint source, String type, TInterpolation @ParameterizedTest(name="Test string constructor") @MethodSource("from_time") void testFromBaseTimeConstructor(Time source, String type, TInterpolation interpolation) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if (type == "TGeogPointInst") { GeometryFactory factory4326 = new GeometryFactory(new PrecisionModel(PrecisionModel.FLOATING), 4326); Point p = factory4326.createPoint(new Coordinate(1, 1)); @@ -681,7 +681,7 @@ void testFromBaseTimeConstructor(Time source, String type, TInterpolation interp @ParameterizedTest(name="Test string constructor") @MethodSource("fromstring") void testFromStringConstructor(TGeogPoint source, String type, TInterpolation interpolation, String expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if (type == "TGeogPointInst") { TGeogPointInst ti = new TGeogPointInst(expected); assertTrue(ti instanceof TGeogPointInst); @@ -704,7 +704,7 @@ void testFromStringConstructor(TGeogPoint source, String type, TInterpolation in @ParameterizedTest(name="Test copy constructor") @MethodSource("fromstring") void testCopyConstructor(Temporal source, String type, TInterpolation interpolation, String expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if (type == "TGeogPointInst") { TGeogPointInst ti = (TGeogPointInst) source.copy(); assertTrue(ti instanceof TGeogPointInst); @@ -727,7 +727,7 @@ void testCopyConstructor(Temporal source, String type, TInterpolation interpolat @ParameterizedTest(name="Test bounding method") @MethodSource("bounding") void testBounding(TGeogPoint source, String type, STBox expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if (type == "TGeogPointInst") { //assertEquals(source.bounding_box_point().toString(15), expected.toString(15)); } else if (type == "TGeogPointSeq") { @@ -742,7 +742,7 @@ void testBounding(TGeogPoint source, String type, STBox expected) { @ParameterizedTest(name="Test interpolation method") @MethodSource("fromstring") void testInterpolation(Temporal source, String type, TInterpolation interpolation, String expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if (type == "TGeogPointInst") { assertEquals(source.interpolation(),interpolation); } else if (type == "TGeogPointSeq") { @@ -757,7 +757,7 @@ void testInterpolation(Temporal source, String type, TInterpolation interpolatio @ParameterizedTest(name="Test as mfjson method") @MethodSource("asmfjson") void testAsmfjson(Temporal source, String type, String expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); System.out.println(source.as_mfjson()); // assertEquals(source.as_mfjson(), expected); } @@ -766,7 +766,7 @@ void testAsmfjson(Temporal source, String type, String expected) { @ParameterizedTest(name="Test start value method") @MethodSource("fromstart") void testStartvalue(TGeogPoint source, String type, String expected) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.start_value(15).toString(), expected); } @@ -774,7 +774,7 @@ void testStartvalue(TGeogPoint source, String type, String expected) throws Par @ParameterizedTest(name="Test end value method") @MethodSource("endstart") void testEndvalue(TGeogPoint source, String type, String expected) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.end_value(15).toString(), expected); } @@ -782,7 +782,7 @@ void testEndvalue(TGeogPoint source, String type, String expected) throws Parse @ParameterizedTest(name="Test time method") @MethodSource("test_time") void testTime(TGeogPoint source, String type, tstzspanset expected) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(((Temporal)source).time().toString(), expected.toString()); } @@ -791,7 +791,7 @@ void testTime(TGeogPoint source, String type, tstzspanset expected) throws Pars @ParameterizedTest(name="Test period method") @MethodSource("period") void testtstzspan(TGeogPoint source, String type, tstzspan expected) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(((Temporal)source).period().toString(), expected.toString()); } @@ -799,14 +799,14 @@ void testtstzspan(TGeogPoint source, String type, tstzspan expected) throws Par @ParameterizedTest(name="Test timespan method") @MethodSource("period") void testTimeSpan(TGeogPoint source, String type, tstzspan expected) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(((Temporal)source).period().toString(), expected.toString()); } @ParameterizedTest(name="Test num instant method") @MethodSource("num_instant") void testNumInst(TGeogPoint source, String type, int expected) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(((Temporal)source).num_instants(), expected); } @@ -814,7 +814,7 @@ void testNumInst(TGeogPoint source, String type, int expected) throws ParseExce @ParameterizedTest(name="Test start instant method") @MethodSource("start_instant") void testStartInstant(String source, String type, TGeogPoint expected) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if (type == "TGeogPointInst") { TGeogPointInst tg = new TGeogPointInst(source); TGeogPointInst new_tg = (TGeogPointInst) tg.start_instant(); @@ -835,7 +835,7 @@ void testStartInstant(String source, String type, TGeogPoint expected) throws P @ParameterizedTest(name="Test end instant method") @MethodSource("end_instant") void testEndInstant(String source, String type, TGeogPoint expected) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if (type == "TGeogPointInst") { TGeogPointInst tg = new TGeogPointInst(source); TGeogPointInst new_tg = (TGeogPointInst) tg.end_instant(); @@ -855,7 +855,7 @@ void testEndInstant(String source, String type, TGeogPoint expected) throws Par @ParameterizedTest(name="Test min instant method") @MethodSource("min_instant") void testMinInst(Temporal source, String type, TGeogPointInst expected) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(((TGeogPointInst)source.min_instant()).to_string(), expected.to_string()); } @@ -864,7 +864,7 @@ void testMinInst(Temporal source, String type, TGeogPointInst expected) throws @ParameterizedTest(name="Test max instant method") @MethodSource("max_instant") void testMaxInst(Temporal source, String type, TGeogPointInst expected) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(((TGeogPointInst)source.max_instant()).to_string(), expected.to_string()); } @@ -872,7 +872,7 @@ void testMaxInst(Temporal source, String type, TGeogPointInst expected) throws @ParameterizedTest(name="Test instant n method") @MethodSource("instantn") void testInstN(Temporal source, int n, TGeogPointInst expected) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(((TGeogPointInst)source.instant_n(n)).to_string(), expected.to_string()); } @@ -880,7 +880,7 @@ void testInstN(Temporal source, int n, TGeogPointInst expected) throws ParseExc @ParameterizedTest(name="Test num timestamps method") @MethodSource("num_timestamps") void testNumTimestamps(Temporal source, int n) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.num_timestamps(), n); } @@ -888,7 +888,7 @@ void testNumTimestamps(Temporal source, int n) throws ParseException { @ParameterizedTest(name="Test start timestamps method") @MethodSource("start_timestamps") void testStartTimestamps(Temporal source, LocalDateTime local) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.start_timestamp(), local); } @@ -896,7 +896,7 @@ void testStartTimestamps(Temporal source, LocalDateTime local) throws ParseExcep @ParameterizedTest(name="Test end timestamps method") @MethodSource("end_timestamps") void testEndTimestamps(Temporal source, LocalDateTime local) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.end_timestamp(), local); } @@ -904,7 +904,7 @@ void testEndTimestamps(Temporal source, LocalDateTime local) throws ParseExcepti @ParameterizedTest(name="Test Hash method") @MethodSource("hash") void testHash(Temporal source, long hash) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.hash(), hash); } @@ -912,7 +912,7 @@ void testHash(Temporal source, long hash) throws ParseException { @ParameterizedTest(name="Test length method") @MethodSource("length") void testLength(TGeogPoint source, double hash) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(((TPoint)source).length(), hash); } @@ -920,7 +920,7 @@ void testLength(TGeogPoint source, double hash) throws ParseException { @ParameterizedTest(name="Test cumulative length method") @MethodSource("cumullength") void testCumulLength(TGeogPoint source, TFloat tfloat) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals((source).cumulative_length().to_string(15), tfloat.to_string(15)); } @@ -928,7 +928,7 @@ void testCumulLength(TGeogPoint source, TFloat tfloat) throws ParseException { @ParameterizedTest(name="Test x y method") @MethodSource("xy") void testXY(TGeogPoint source, TFloat tfloat) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.x().to_string(15), tfloat.to_string(15)); assertEquals(source.y().to_string(15), tfloat.to_string(15)); } @@ -937,7 +937,7 @@ void testXY(TGeogPoint source, TFloat tfloat) throws ParseException { @ParameterizedTest(name="Test x y z method") @MethodSource("xyz") void testXYZ(TGeogPoint source, TFloat tfloat) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.x().to_string(15), tfloat.to_string(15)); assertEquals(source.y().to_string(15), tfloat.to_string(15)); assertEquals(source.z().to_string(15), tfloat.to_string(15)); @@ -947,7 +947,7 @@ void testXYZ(TGeogPoint source, TFloat tfloat) throws ParseException { @ParameterizedTest(name="Test hasz method") @MethodSource("hasz") void testHasz(TGeogPoint source, boolean val) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.has_z(), val); } @@ -955,7 +955,7 @@ void testHasz(TGeogPoint source, boolean val) throws ParseException { @ParameterizedTest(name="Test is simple method") @MethodSource("is_simple") void testIsSimple(TGeogPoint source, boolean val) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.is_simple(), val); } @@ -963,7 +963,7 @@ void testIsSimple(TGeogPoint source, boolean val) throws ParseException { @ParameterizedTest(name="Test srid method") @MethodSource("is_simple") void testSRID(TGeogPoint source, boolean val) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.srid(), 4326); } @@ -972,7 +972,7 @@ void testSRID(TGeogPoint source, boolean val) throws ParseException { @ParameterizedTest(name="Test angular difference method") @MethodSource("angular_difference") void testAngula(TGeogPoint source, String type, TFloat val) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if (type == "TGeogPointSeq"){ TFloatSeqSet tf = (TFloatSeqSet) source.angular_difference().to_degrees(true); assertEquals(tf.to_string(15), val.to_string(15)); @@ -987,7 +987,7 @@ void testAngula(TGeogPoint source, String type, TFloat val) throws ParseExceptio @ParameterizedTest(name="Test to instant method") @MethodSource("to_instant") void testToInstant(Temporal source, TGeogPointInst tgeog) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); TGeogPointInst tmp = (TGeogPointInst) source.to_instant(); assertTrue(tmp instanceof TGeogPointInst); assertEquals(tmp.to_string(),tgeog.to_string()); @@ -997,7 +997,7 @@ void testToInstant(Temporal source, TGeogPointInst tgeog) throws ParseException @ParameterizedTest(name="Test to sequence method") @MethodSource("to_sequence") void testToSequence(Temporal source, TInterpolation interpolation, TGeogPointSeq tgeog) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); TGeogPointSeq tmp = (TGeogPointSeq) source.to_sequence(interpolation); assertTrue(tmp instanceof TGeogPointSeq); assertEquals(tmp.to_string(),tgeog.to_string()); @@ -1007,7 +1007,7 @@ void testToSequence(Temporal source, TInterpolation interpolation, TGeogPointSeq @ParameterizedTest(name="Test to sequenceset method") @MethodSource("to_sequenceset") void testToSequenceSet(Temporal source, TInterpolation interpolation, TGeogPointSeqSet tgeog) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); TGeogPointSeqSet tmp = (TGeogPointSeqSet) source.to_sequenceset(interpolation); assertTrue(tmp instanceof TGeogPointSeqSet); assertEquals(tmp.to_string(),tgeog.to_string()); @@ -1017,7 +1017,7 @@ void testToSequenceSet(Temporal source, TInterpolation interpolation, TGeogPoint @ParameterizedTest(name="Test set interpolation method") @MethodSource("set_interp") void testSetInterp(Temporal source, String type, TInterpolation interpolation, TGeogPointSeq tgeog) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if (type == "TGeogPointInst"){ TGeogPointInst tmp = (TGeogPointInst) source.set_interpolation(interpolation); assertTrue(tmp instanceof TGeogPointInst); @@ -1039,7 +1039,7 @@ void testSetInterp(Temporal source, String type, TInterpolation interpolation, T @ParameterizedTest(name="Test round method") @MethodSource("round") void testRound(TPoint source, String type, TPoint tgeog) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if(type == "TGeogPointInst" ){ assertTrue(source instanceof TGeogPointInst); assertEquals(source.round(2).to_string(),tgeog.to_string()); @@ -1056,7 +1056,7 @@ void testRound(TPoint source, String type, TPoint tgeog) throws ParseException { @ParameterizedTest(name="Test insert method") @MethodSource("insert") void testInsert(Temporal source, String type, Temporal add, Temporal expected) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if (type == "TGeogPointSeq"){ TGeogPointSeq tgeog = (TGeogPointSeq) source.insert(add); assertEquals(tgeog.to_string(), ((TGeogPointSeq) expected).to_string()); @@ -1070,7 +1070,7 @@ void testInsert(Temporal source, String type, Temporal add, Temporal expected) t @ParameterizedTest(name="Test append sequence method") @MethodSource("append_sequence") void testAppendSequence(Temporal source, String type, TGeogPointSeq tgeoseq, Temporal expected) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if (type == "TGeogPointSeq"){ TGeogPointSeq tseq = (TGeogPointSeq) source.append_sequence(tgeoseq); diff --git a/src/test/java/basic/TGeomPointTest.java b/src/test/java/basic/TGeomPointTest.java index 93c38707f..84c5fbe79 100644 --- a/src/test/java/basic/TGeomPointTest.java +++ b/src/test/java/basic/TGeomPointTest.java @@ -49,7 +49,7 @@ public class TGeomPointTest { static error_handler_fn errorHandler = new error_handler(); private static Stream fromtemporal() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeomPointInst("Point(1.5 1.5)@2019-09-01"), "TGeomPointInst",TInterpolation.NONE, "POINT(1 1)@2019-09-01 00:00:00+00"), Arguments.of(new TGeomPointSeq("{Point(1.5 1.5)@2019-09-01, Point(2.5 2.5)@2019-09-02}"), "TGeomPointSeq",TInterpolation.DISCRETE, "{POINT(1 1)@2019-09-01 00:00:00+00, POINT(2 2)@2019-09-02 00:00:00+00}"), @@ -61,7 +61,7 @@ private static Stream fromtemporal() { static Stream from_time() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new tstzset("{2019-09-01, 2019-09-02}"), "TGeomPointSeq", TInterpolation.DISCRETE), Arguments.of(new tstzspan("[2019-09-01, 2019-09-02]"), "TGeomPointSeqSet", TInterpolation.LINEAR), @@ -72,7 +72,7 @@ static Stream from_time() throws SQLException { private static Stream fromstring() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeomPointInst("Point(1 1)@2019-09-01"), "TGeomPointInst",TInterpolation.NONE, "POINT(1 1)@2019-09-01 00:00:00+00"), Arguments.of(new TGeomPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}"), "TGeomPointSeq",TInterpolation.DISCRETE, "{POINT(1 1)@2019-09-01 00:00:00+00, POINT(2 2)@2019-09-02 00:00:00+00}"), @@ -83,7 +83,7 @@ private static Stream fromstring() { private static Stream bounding() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeomPointInst("Point(1 1)@2019-09-01"), "TGeomPointInst", new STBox("STBOX XT(((1, 1),(1, 1)),[2019-09-01, 2019-09-01])") ), Arguments.of(new TGeomPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}"), "TGeomPointSeq", new STBox("STBOX XT(((1, 1),(2, 2)),[2019-09-01, 2019-09-02])") ), @@ -94,7 +94,7 @@ private static Stream bounding() { private static Stream fromstart() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeomPointInst("Point(1 1)@2019-09-01"), "TGeomPointInst", "POINT (1 1)" ), Arguments.of(new TGeomPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}"), "TGeomPointSeq", "POINT (1 1)" ), @@ -105,7 +105,7 @@ private static Stream fromstart() { private static Stream endstart() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeomPointInst("Point(1 1)@2019-09-01"), "TGeomPointInst", "POINT (1 1)" ), Arguments.of(new TGeomPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}"), "TGeomPointSeq", "POINT (2 2)" ), @@ -116,7 +116,7 @@ private static Stream endstart() { private static Stream test_time() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeomPointInst("Point(1 1)@2019-09-01"), "TGeomPointInst", new tstzspanset("{[2019-09-01, 2019-09-01]}") ), Arguments.of(new TGeomPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}"), "TGeomPointSeq", new tstzspanset("{[2019-09-01, 2019-09-01], [2019-09-02, 2019-09-02]}") ), @@ -127,7 +127,7 @@ private static Stream test_time() { private static Stream period() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeomPointInst("Point(1 1)@2019-09-01"), "TGeomPointInst", new tstzspan("[2019-09-01, 2019-09-01]") ), Arguments.of(new TGeomPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}"), "TGeomPointSeq", new tstzspan("[2019-09-01, 2019-09-02]") ), @@ -137,7 +137,7 @@ private static Stream period() { } private static Stream num_instant() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeomPointInst("Point(1 1)@2019-09-01"), "TGeomPointInst", 1 ), Arguments.of(new TGeomPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}"), "TGeomPointSeq", 2 ), @@ -148,7 +148,7 @@ private static Stream num_instant() { private static Stream start_instant() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of("Point(1 1)@2019-09-01", "TGeomPointInst", new TGeomPointInst("Point(1 1)@2019-09-01") ), Arguments.of("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}", "TGeomPointSeq", new TGeomPointInst("Point(1 1)@2019-09-01") ), @@ -161,7 +161,7 @@ private static Stream start_instant() { private static Stream end_instant() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of("Point(1 1)@2019-09-01", "TGeomPointInst", new TGeomPointInst("Point(1 1)@2019-09-01") ), Arguments.of("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}", "TGeomPointSeq", new TGeomPointInst("Point(2 2)@2019-09-02") ), @@ -172,7 +172,7 @@ private static Stream end_instant() { private static Stream asmfjson() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); String jsonString1 = "{\n" + " \"type\": \"MovingGeomPoint\",\n" + " \"bbox\": [\n" + @@ -351,7 +351,7 @@ private static Stream asmfjson() { private static Stream min_instant() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeomPointInst("Point(1 1)@2019-09-01"), "TGeomPointInst", new TGeomPointInst("Point(1 1)@2019-09-01") ), Arguments.of(new TGeomPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}"), "TGeomPointSeq", new TGeomPointInst("Point(1 1)@2019-09-01") ), @@ -362,7 +362,7 @@ private static Stream min_instant() { private static Stream max_instant() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeomPointInst("Point(1 1)@2019-09-01"), "TGeomPointInst", new TGeomPointInst("Point(1 1)@2019-09-01") ), Arguments.of(new TGeomPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}"), "TGeomPointSeq", new TGeomPointInst("Point(2 2)@2019-09-02") ), @@ -373,7 +373,7 @@ private static Stream max_instant() { private static Stream instantn() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeomPointInst("Point(1 1)@2019-09-01"), 0, new TGeomPointInst("Point(1 1)@2019-09-01") ), Arguments.of(new TGeomPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}"), 1, new TGeomPointInst("Point(2 2)@2019-09-02") ), @@ -384,7 +384,7 @@ private static Stream instantn() { private static Stream num_timestamps() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeomPointInst("Point(1 1)@2019-09-01"), 1), Arguments.of(new TGeomPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}"), 2), @@ -396,7 +396,7 @@ private static Stream num_timestamps() { private static Stream start_timestamps() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeomPointInst("Point(1 1)@2019-09-01"), LocalDateTime.of(2019, 9, 1, 0, 0,0)), Arguments.of(new TGeomPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}"), LocalDateTime.of(2019, 9, 1, 0, 0,0)), @@ -407,7 +407,7 @@ private static Stream start_timestamps() { private static Stream end_timestamps() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeomPointInst("Point(1 1)@2019-09-01"), LocalDateTime.of(2019, 9, 1, 0, 0,0)), Arguments.of(new TGeomPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}"), LocalDateTime.of(2019, 9, 2, 0, 0,0)), @@ -419,7 +419,7 @@ private static Stream end_timestamps() { private static Stream hash() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeomPointInst("Point(1 1)@2019-09-01"), 382694564), Arguments.of(new TGeomPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}"), 1664033448), @@ -430,7 +430,7 @@ private static Stream hash() { private static Stream lower_inc() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeomPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}"), true), Arguments.of(new TGeomPointSeq("[Point(1 1)@2019-09-01, Point(2 2)@2019-09-02]"), true) @@ -440,7 +440,7 @@ private static Stream lower_inc() { private static Stream length() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeomPointInst("Point(1 1)@2019-09-01"), 0), Arguments.of(new TGeomPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}"), 0), @@ -451,7 +451,7 @@ private static Stream length() { private static Stream cumullength() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeomPointInst("Point(1 1)@2019-09-01"), new TFloatInst("0@2019-09-01")), Arguments.of(new TGeomPointSeq("[Point(1 1)@2019-09-01, Point(2 2)@2019-09-02]"), new TFloatSeq("[0@2019-09-01, 1.4142135623730951@2019-09-02]")), @@ -461,7 +461,7 @@ private static Stream cumullength() { private static Stream speed() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeomPointInst("Point(1 1)@2019-09-01"), null), Arguments.of(new TGeomPointSeq("[Point(1 1)@2019-09-01, Point(2 2)@2019-09-02]"), new TFloatSeq("[1.8157@2019-09-01, 1.8157@2019-09-02]")), @@ -471,7 +471,7 @@ private static Stream speed() { private static Stream xy() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeomPointInst("Point(1 1)@2019-09-01"), new TFloatInst("1@2019-09-01")), Arguments.of(new TGeomPointSeq("[Point(1 1)@2019-09-01, Point(2 2)@2019-09-02]"), new TFloatSeq("[1@2019-09-01, 2@2019-09-02]")), @@ -481,7 +481,7 @@ private static Stream xy() { private static Stream xyz() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeomPointInst("Point(1 1 1)@2019-09-01"), new TFloatInst("1@2019-09-01")), Arguments.of(new TGeomPointSeq("[Point(1 1 1)@2019-09-01, Point(2 2 2)@2019-09-02]"), new TFloatSeq("[1@2019-09-01, 2@2019-09-02]")), @@ -491,7 +491,7 @@ private static Stream xyz() { private static Stream hasz() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeomPointInst("Point(1 1)@2019-09-01"), false), Arguments.of(new TGeomPointSeq("[Point(1 1 1)@2019-09-01, Point(2 2 2)@2019-09-02]"), true), @@ -501,7 +501,7 @@ private static Stream hasz() { private static Stream is_simple() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeomPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}"), true), Arguments.of(new TGeomPointSeq("[Point(1 1)@2019-09-01, Point(2 2)@2019-09-02]"), true), @@ -511,7 +511,7 @@ private static Stream is_simple() { private static Stream angular_difference() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeomPointSeqSet("{[Point(1 1)@2019-09-01, Point(2 2)@2019-09-02], [Point(1 1)@2019-09-03, Point(1 1)@2019-09-05]}"), "TGeomPointSeqSet", new TFloatSeqSet("{0@2019-09-01,0@2019-09-02}")) ); @@ -520,7 +520,7 @@ private static Stream angular_difference() { private static Stream togeom() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeomPointInst("Point(1 1)@2019-09-01"), new TGeomPointInst("Point(1 1)@2019-09-01")) //Arguments.of(new TGeomPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}"), new TGeomPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}")), @@ -531,7 +531,7 @@ private static Stream togeom() { private static Stream to_instant() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeomPointInst("Point(1 1)@2019-09-01"), new TGeomPointInst("Point(1 1)@2019-09-01")), Arguments.of(new TGeomPointSeq("{Point(1 1)@2019-09-01}"), new TGeomPointInst("Point(1 1)@2019-09-01")), @@ -543,7 +543,7 @@ private static Stream to_instant() { private static Stream to_sequence() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeomPointInst("Point(1 1)@2019-09-01"), TInterpolation.LINEAR, new TGeomPointSeq("[Point(1 1)@2019-09-01]")), Arguments.of(new TGeomPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}"), TInterpolation.DISCRETE, new TGeomPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}")), @@ -554,7 +554,7 @@ private static Stream to_sequence() { private static Stream to_sequenceset() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeomPointInst("Point(1 1)@2019-09-01"), TInterpolation.LINEAR, new TGeomPointSeqSet("{[Point(1 1)@2019-09-01]}")), Arguments.of(new TGeomPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}"), TInterpolation.LINEAR, new TGeomPointSeqSet("{[Point(1 1)@2019-09-01], [Point(2 2)@2019-09-02]}")), @@ -566,7 +566,7 @@ private static Stream to_sequenceset() { private static Stream set_interp() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeomPointInst("Point(1 1)@2019-09-01"), "TGeomPointInst", TInterpolation.DISCRETE, new TGeomPointSeq("{Point(1 1)@2019-09-01}")), Arguments.of(new TGeomPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}"),"TGeomPointSeq", TInterpolation.DISCRETE, new TGeomPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}")), @@ -577,7 +577,7 @@ private static Stream set_interp() { private static Stream round() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeomPointInst("Point(1.123456789 1.123456789)@2019-09-01"), "TGeomPointInst", new TGeomPointInst("Point(1.12 1.12)@2019-09-01")), Arguments.of(new TGeomPointSeq("{Point(1.123456789 1.123456789)@2019-09-01, Point(2.123456789 2.123456789)@2019-09-02}"),"TGeomPointSeq", new TGeomPointSeq("{Point(1.12 1.12)@2019-09-01,Point(2.12 2.12)@2019-09-02}")), @@ -588,7 +588,7 @@ private static Stream round() { private static Stream insert() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeomPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02}"), "TGeomPointSeq",new TGeomPointSeq("{Point(1 1)@2019-09-03}"), new TGeomPointSeq("{Point(1 1)@2019-09-01, Point(2 2)@2019-09-02, Point(1 1)@2019-09-03}") ), Arguments.of(new TGeomPointSeqSet("{[Point(1 1)@2019-09-01, Point(2 2)@2019-09-02], [Point(1 1)@2019-09-03, Point(1 1)@2019-09-05]}"), "TGeomPointSeqSet", new TGeomPointSeq("[Point(1 1)@2019-09-06]"), new TGeomPointSeqSet("{[Point(1 1)@2019-09-01, Point(2 2)@2019-09-02],[Point(1 1)@2019-09-03, Point(1 1)@2019-09-05],[Point(1 1)@2019-09-06]}")) @@ -598,7 +598,7 @@ private static Stream insert() { private static Stream append_sequence() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TGeomPointSeq("[Point(1 1)@2019-09-01, Point(2 2)@2019-09-02]"),"TGeomPointSeq", new TGeomPointSeq("[Point(1 1)@2019-09-03]"), new TGeomPointSeqSet("{[Point(1 1)@2019-09-01, Point(2 2)@2019-09-02], [Point(1 1)@2019-09-03]}")), Arguments.of(new TGeomPointSeqSet("{[Point(1 1)@2019-09-01, Point(2 2)@2019-09-02],[Point(1 1)@2019-09-03, Point(1 1)@2019-09-05]}"), "TGeomPointSeqSet", new TGeomPointSeq("[Point(1 1)@2019-09-06]"), new TGeomPointSeqSet("{[Point(1 1)@2019-09-01, Point(2 2)@2019-09-02],[Point(1 1)@2019-09-03, Point(1 1)@2019-09-05],[Point(1 1)@2019-09-06]}")) @@ -631,7 +631,7 @@ private static Stream append_sequence() { @ParameterizedTest(name="Test from temporal constructor") @MethodSource("fromtemporal") void testFromTemporalConstructor(TGeomPoint source, String type, TInterpolation interpolation, String expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if (type == "TGeomPointInst") { GeometryFactory factory4326 = new GeometryFactory(new PrecisionModel(PrecisionModel.FLOATING), 4326); Point point = factory4326.createPoint(new Coordinate(1, 1)); @@ -657,7 +657,7 @@ void testFromTemporalConstructor(TGeomPoint source, String type, TInterpolation @ParameterizedTest(name="Test from time constructor") @MethodSource("from_time") void testFromBaseTimeConstructor(Time source, String type, TInterpolation interpolation) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if (type == "TGeomPointInst") { GeometryFactory factory4326 = new GeometryFactory(new PrecisionModel(PrecisionModel.FLOATING)); Point p = factory4326.createPoint(new Coordinate(1, 1)); @@ -679,7 +679,7 @@ void testFromBaseTimeConstructor(Time source, String type, TInterpolation interp @ParameterizedTest(name="Test string constructor") @MethodSource("fromstring") void testFromStringConstructor(TGeomPoint source, String type, TInterpolation interpolation, String expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if (type == "TGeomPointInst") { TGeomPointInst ti = new TGeomPointInst(expected); assertTrue(ti instanceof TGeomPointInst); @@ -702,7 +702,7 @@ void testFromStringConstructor(TGeomPoint source, String type, TInterpolation in @ParameterizedTest(name="Test copy constructor") @MethodSource("fromstring") void testCopyConstructor(Temporal source, String type, TInterpolation interpolation, String expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if (type == "TGeomPointInst") { TGeomPointInst ti = (TGeomPointInst) source.copy(); assertTrue(ti instanceof TGeomPointInst); @@ -725,7 +725,7 @@ void testCopyConstructor(Temporal source, String type, TInterpolation interpolat @ParameterizedTest(name="Test bounding method") @MethodSource("bounding") void testBounding(TGeomPoint source, String type, STBox expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if (type == "TGeomPointInst") { //assertEquals(source.bounding_box_point().toString(15), expected.toString(15)); } else if (type == "TGeomPointSeq") { @@ -740,7 +740,7 @@ void testBounding(TGeomPoint source, String type, STBox expected) { @ParameterizedTest(name="Test interpolation method") @MethodSource("fromstring") void testInterpolation(Temporal source, String type, TInterpolation interpolation, String expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if (type == "TGeomPointInst") { assertEquals(source.interpolation(),interpolation); } else if (type == "TGeomPointSeq") { @@ -755,7 +755,7 @@ void testInterpolation(Temporal source, String type, TInterpolation interpolatio @ParameterizedTest(name="Test as mfjson method") @MethodSource("asmfjson") void testAsmfjson(Temporal source, String type, String expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); System.out.println(source.as_mfjson()); } @@ -763,7 +763,7 @@ void testAsmfjson(Temporal source, String type, String expected) { @ParameterizedTest(name="Test start value method") @MethodSource("fromstart") void testStartvalue(TGeomPoint source, String type, String expected) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.start_value(15).toString(), expected); } @@ -771,7 +771,7 @@ void testStartvalue(TGeomPoint source, String type, String expected) throws Par @ParameterizedTest(name="Test end value method") @MethodSource("endstart") void testEndvalue(TGeomPoint source, String type, String expected) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.end_value(15).toString(), expected); } @@ -779,7 +779,7 @@ void testEndvalue(TGeomPoint source, String type, String expected) throws Parse @ParameterizedTest(name="Test time method") @MethodSource("test_time") void testTime(TGeomPoint source, String type, tstzspanset expected) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(((Temporal)source).time().toString(), expected.toString()); } @@ -788,7 +788,7 @@ void testTime(TGeomPoint source, String type, tstzspanset expected) throws Pars @ParameterizedTest(name="Test period method") @MethodSource("period") void testtstzspan(TGeomPoint source, String type, tstzspan expected) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(((Temporal)source).period().toString(), expected.toString()); } @@ -796,14 +796,14 @@ void testtstzspan(TGeomPoint source, String type, tstzspan expected) throws Par @ParameterizedTest(name="Test timespan method") @MethodSource("period") void testTimeSpan(TGeomPoint source, String type, tstzspan expected) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(((Temporal)source).period().toString(), expected.toString()); } @ParameterizedTest(name="Test num instant method") @MethodSource("num_instant") void testNumInst(TGeomPoint source, String type, int expected) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(((Temporal)source).num_instants(), expected); } @@ -811,7 +811,7 @@ void testNumInst(TGeomPoint source, String type, int expected) throws ParseExce @ParameterizedTest(name="Test start instant method") @MethodSource("start_instant") void testStartInstant(String source, String type, TGeomPoint expected) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if (type == "TGeomPointInst") { TGeomPointInst tg = new TGeomPointInst(source); TGeomPointInst new_tg = (TGeomPointInst) tg.start_instant(); @@ -832,7 +832,7 @@ void testStartInstant(String source, String type, TGeomPoint expected) throws P @ParameterizedTest(name="Test end instant method") @MethodSource("end_instant") void testEndInstant(String source, String type, TGeomPoint expected) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if (type == "TGeomPointInst") { TGeomPointInst tg = new TGeomPointInst(source); TGeomPointInst new_tg = (TGeomPointInst) tg.end_instant(); @@ -852,7 +852,7 @@ void testEndInstant(String source, String type, TGeomPoint expected) throws Par @ParameterizedTest(name="Test min instant method") @MethodSource("min_instant") void testMinInst(Temporal source, String type, TGeomPointInst expected) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(((TGeomPointInst)source.min_instant()).to_string(), expected.to_string()); } @@ -861,7 +861,7 @@ void testMinInst(Temporal source, String type, TGeomPointInst expected) throws @ParameterizedTest(name="Test max instant method") @MethodSource("max_instant") void testMaxInst(Temporal source, String type, TGeomPointInst expected) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(((TGeomPointInst)source.max_instant()).to_string(), expected.to_string()); } @@ -869,7 +869,7 @@ void testMaxInst(Temporal source, String type, TGeomPointInst expected) throws @ParameterizedTest(name="Test instant n method") @MethodSource("instantn") void testInstN(Temporal source, int n, TGeomPointInst expected) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(((TGeomPointInst)source.instant_n(n)).to_string(), expected.to_string()); } @@ -877,7 +877,7 @@ void testInstN(Temporal source, int n, TGeomPointInst expected) throws ParseExc @ParameterizedTest(name="Test num timestamps method") @MethodSource("num_timestamps") void testNumTimestamps(Temporal source, int n) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.num_timestamps(), n); } @@ -885,7 +885,7 @@ void testNumTimestamps(Temporal source, int n) throws ParseException { @ParameterizedTest(name="Test start timestamps method") @MethodSource("start_timestamps") void testStartTimestamps(Temporal source, LocalDateTime local) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.start_timestamp(), local); } @@ -893,7 +893,7 @@ void testStartTimestamps(Temporal source, LocalDateTime local) throws ParseExcep @ParameterizedTest(name="Test end timestamps method") @MethodSource("end_timestamps") void testEndTimestamps(Temporal source, LocalDateTime local) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.end_timestamp(), local); } @@ -901,7 +901,7 @@ void testEndTimestamps(Temporal source, LocalDateTime local) throws ParseExcepti @ParameterizedTest(name="Test Hash method") @MethodSource("hash") void testHash(Temporal source, long hash) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.hash(), hash); } @@ -909,7 +909,7 @@ void testHash(Temporal source, long hash) throws ParseException { @ParameterizedTest(name="Test length method") @MethodSource("length") void testLength(TGeomPoint source, double hash) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(((TPoint)source).length(), hash); } @@ -917,7 +917,7 @@ void testLength(TGeomPoint source, double hash) throws ParseException { @ParameterizedTest(name="Test cumulative length method") @MethodSource("cumullength") void testCumulLength(TGeomPoint source, TFloat tfloat) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals((source).cumulative_length().to_string(15), tfloat.to_string(15)); } @@ -925,7 +925,7 @@ void testCumulLength(TGeomPoint source, TFloat tfloat) throws ParseException { @ParameterizedTest(name="Test x y method") @MethodSource("xy") void testXY(TGeomPoint source, TFloat tfloat) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.x().to_string(15), tfloat.to_string(15)); assertEquals(source.y().to_string(15), tfloat.to_string(15)); } @@ -934,7 +934,7 @@ void testXY(TGeomPoint source, TFloat tfloat) throws ParseException { @ParameterizedTest(name="Test x y z method") @MethodSource("xyz") void testXYZ(TGeomPoint source, TFloat tfloat) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.x().to_string(15), tfloat.to_string(15)); assertEquals(source.y().to_string(15), tfloat.to_string(15)); assertEquals(source.z().to_string(15), tfloat.to_string(15)); @@ -944,7 +944,7 @@ void testXYZ(TGeomPoint source, TFloat tfloat) throws ParseException { @ParameterizedTest(name="Test hasz method") @MethodSource("hasz") void testHasz(TGeomPoint source, boolean val) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.has_z(), val); } @@ -952,7 +952,7 @@ void testHasz(TGeomPoint source, boolean val) throws ParseException { @ParameterizedTest(name="Test is simple method") @MethodSource("is_simple") void testIsSimple(TGeomPoint source, boolean val) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.is_simple(), val); } @@ -960,7 +960,7 @@ void testIsSimple(TGeomPoint source, boolean val) throws ParseException { @ParameterizedTest(name="Test srid method") @MethodSource("is_simple") void testSRID(TGeomPoint source, boolean val) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.srid(), 0); } @@ -969,7 +969,7 @@ void testSRID(TGeomPoint source, boolean val) throws ParseException { @ParameterizedTest(name="Test angular difference method") @MethodSource("angular_difference") void testAngula(TGeomPoint source, String type, TFloat val) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if (type == "TGeomPointSeq"){ TFloatSeqSet tf = (TFloatSeqSet) source.angular_difference().to_degrees(true); assertEquals(tf.to_string(15), val.to_string(15)); @@ -984,7 +984,7 @@ void testAngula(TGeomPoint source, String type, TFloat val) throws ParseExceptio @ParameterizedTest(name="Test to instant method") @MethodSource("to_instant") void testToInstant(Temporal source, TGeomPointInst TGeom) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); TGeomPointInst tmp = (TGeomPointInst) source.to_instant(); assertTrue(tmp instanceof TGeomPointInst); assertEquals(tmp.to_string(),TGeom.to_string()); @@ -994,7 +994,7 @@ void testToInstant(Temporal source, TGeomPointInst TGeom) throws ParseException @ParameterizedTest(name="Test to sequence method") @MethodSource("to_sequence") void testToSequence(Temporal source, TInterpolation interpolation, TGeomPointSeq TGeom) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); TGeomPointSeq tmp = (TGeomPointSeq) source.to_sequence(interpolation); assertTrue(tmp instanceof TGeomPointSeq); assertEquals(tmp.to_string(),TGeom.to_string()); @@ -1004,7 +1004,7 @@ void testToSequence(Temporal source, TInterpolation interpolation, TGeomPointSeq @ParameterizedTest(name="Test to sequenceset method") @MethodSource("to_sequenceset") void testToSequenceSet(Temporal source, TInterpolation interpolation, TGeomPointSeqSet TGeom) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); TGeomPointSeqSet tmp = (TGeomPointSeqSet) source.to_sequenceset(interpolation); assertTrue(tmp instanceof TGeomPointSeqSet); assertEquals(tmp.to_string(),TGeom.to_string()); @@ -1014,7 +1014,7 @@ void testToSequenceSet(Temporal source, TInterpolation interpolation, TGeomPoint @ParameterizedTest(name="Test set interpolation method") @MethodSource("set_interp") void testSetInterp(Temporal source, String type, TInterpolation interpolation, TGeomPointSeq TGeom) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if (type == "TGeomPointInst"){ TGeomPointInst tmp = (TGeomPointInst) source.set_interpolation(interpolation); assertTrue(tmp instanceof TGeomPointInst); @@ -1036,7 +1036,7 @@ void testSetInterp(Temporal source, String type, TInterpolation interpolation, T @ParameterizedTest(name="Test round method") @MethodSource("round") void testRound(TPoint source, String type, TPoint TGeom) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if(type == "TGeomPointInst" ){ assertTrue(source instanceof TGeomPointInst); assertEquals(source.round(2).to_string(),TGeom.to_string()); @@ -1053,7 +1053,7 @@ void testRound(TPoint source, String type, TPoint TGeom) throws ParseException { @ParameterizedTest(name="Test insert method") @MethodSource("insert") void testInsert(Temporal source, String type, Temporal add, Temporal expected) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if (type == "TGeomPointSeq"){ TGeomPointSeq TGeom = (TGeomPointSeq) source.insert(add); assertEquals(TGeom.to_string(), ((TGeomPointSeq) expected).to_string()); @@ -1067,7 +1067,7 @@ void testInsert(Temporal source, String type, Temporal add, Temporal expected) t @ParameterizedTest(name="Test append sequence method") @MethodSource("append_sequence") void testAppendSequence(Temporal source, String type, TGeomPointSeq tgeoseq, Temporal expected) throws ParseException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if (type == "TGeomPointSeq"){ TGeomPointSeq tseq = (TGeomPointSeq) source.append_sequence(tgeoseq); diff --git a/src/test/java/basic/TIntTest.java b/src/test/java/basic/TIntTest.java index 732c67782..c0b9b9cff 100644 --- a/src/test/java/basic/TIntTest.java +++ b/src/test/java/basic/TIntTest.java @@ -33,7 +33,7 @@ public class TIntTest { static error_handler_fn errorHandler = new error_handler(); private static Stream frombasetemporal() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TFloatInst("1.5@2019-09-01"), "TIntInst", TInterpolation.NONE), Arguments.of(new TFloatSeq("[1.5@2019-09-01, 0.5@2019-09-02]"), "TIntSeq", TInterpolation.STEPWISE), @@ -43,7 +43,7 @@ private static Stream frombasetemporal() { private static Stream frombasetime() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new tstzset("{2019-09-01, 2019-09-02}"), "TIntSeq", TInterpolation.DISCRETE), Arguments.of(new tstzspan("[2019-09-01, 2019-09-02]"), "TIntSeq", TInterpolation.STEPWISE), @@ -63,7 +63,7 @@ private static Stream fromstring() { private static Stream fromcopy() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TIntInst("1@2019-09-01"), "TIntInst"), Arguments.of(new TIntSeq("[1@2019-09-01, 2@2019-09-02]"), "TIntSeq"), @@ -72,7 +72,7 @@ private static Stream fromcopy() { } private static Stream totfloat() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TIntInst("1@2019-09-01"), "TIntInst", "1@2019-09-01 00:00:00+00"), Arguments.of(new TIntSeq("[1@2019-09-01, 2@2019-09-02]"), "TIntSeq", "Interp=Step;[1@2019-09-01 00:00:00+00, 2@2019-09-02 00:00:00+00]"), @@ -83,7 +83,7 @@ private static Stream totfloat() { private static Stream bounding() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TIntInst("1@2019-09-01"), "TIntInst", new TBox("TBOXINT XT([1,1],[2019-09-01, 2019-09-01])")), Arguments.of(new TIntSeq("[1@2019-09-01, 2@2019-09-02]"), "TIntSeq", new TBox("TBOXINT XT([1,2],[2019-09-01, 2019-09-02])")), @@ -92,7 +92,7 @@ private static Stream bounding() throws SQLException { } private static Stream interp() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TIntInst("1@2019-09-01"), "TIntInst", TInterpolation.NONE), Arguments.of(new TIntSeq("[1@2019-09-01, 2@2019-09-02]"), "TIntSeq", TInterpolation.STEPWISE), @@ -102,7 +102,7 @@ private static Stream interp() throws SQLException { private static Stream value_span() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TIntInst("1@2019-09-01"), "TIntInst", new IntSpan(1, 1, true, true)), Arguments.of(new TIntSeq("[1@2019-09-01, 2@2019-09-02]"), "TIntSeq", new IntSpan(1, 2, true, true)), @@ -112,7 +112,7 @@ private static Stream value_span() throws SQLException { private static Stream value_spans() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TIntInst("1@2019-09-01"), "TIntInst", new IntSpanSet("{[1,1]}")), Arguments.of(new TIntSeq("[1@2019-09-01, 2@2019-09-02]"), "TIntSeq", new IntSpanSet("{[1,2]}")), @@ -122,7 +122,7 @@ private static Stream value_spans() throws SQLException { private static Stream start_value() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TIntInst("1@2019-09-01"), "TIntInst", 1), Arguments.of(new TIntSeq("[1@2019-09-01, 2@2019-09-02]"), "TIntSeq", 1), @@ -132,7 +132,7 @@ private static Stream start_value() throws SQLException { private static Stream end_value() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TIntInst("1@2019-09-01"), "TIntInst", 1), Arguments.of(new TIntSeq("[1@2019-09-01, 2@2019-09-02]"), "TIntSeq", 2), @@ -142,7 +142,7 @@ private static Stream end_value() throws SQLException { private static Stream min_value() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TIntInst("1@2019-09-01"), "TIntInst", 1), Arguments.of(new TIntSeq("[1@2019-09-01, 2@2019-09-02]"), "TIntSeq", 1), @@ -152,7 +152,7 @@ private static Stream min_value() throws SQLException { private static Stream max_value() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TIntInst("1@2019-09-01"), "TIntInst", 1), Arguments.of(new TIntSeq("[1@2019-09-01, 2@2019-09-02]"), "TIntSeq", 2), @@ -162,7 +162,7 @@ private static Stream max_value() throws SQLException { private static Stream time() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TIntInst("1@2019-09-01"), "TIntInst", new tstzspanset("{[2019-09-01, 2019-09-01]}")), Arguments.of(new TIntSeq("[1@2019-09-01, 2@2019-09-02]"), "TIntSeq", new tstzspanset("{[2019-09-01, 2019-09-02]}")), @@ -172,7 +172,7 @@ private static Stream time() throws SQLException { private static Stream period() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TIntInst("1@2019-09-01"), "TIntInst", new tstzspan("[2019-09-01, 2019-09-01]")), Arguments.of(new TIntSeq("[1@2019-09-01, 2@2019-09-02]"), "TIntSeq", new tstzspan("[2019-09-01, 2019-09-02]")), @@ -181,7 +181,7 @@ private static Stream period() throws SQLException { } private static Stream num_instant() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TIntInst("1@2019-09-01"), "TIntInst", 1), Arguments.of(new TIntSeq("[1@2019-09-01, 2@2019-09-02]"), "TIntSeq",2), @@ -192,7 +192,7 @@ private static Stream num_instant() throws SQLException { private static Stream start_instant() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TIntInst("1@2019-09-01"), "TIntInst", new TIntInst("1@2019-09-01")), Arguments.of(new TIntSeq("[1@2019-09-01, 2@2019-09-02]"), "TIntSeq",new TIntInst("1@2019-09-01")), @@ -203,7 +203,7 @@ private static Stream start_instant() throws SQLException { private static Stream end_instant() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TIntInst("1@2019-09-01"), "TIntInst", new TIntInst("1@2019-09-01")), Arguments.of(new TIntSeq("[1@2019-09-01, 2@2019-09-02]"), "TIntSeq",new TIntInst("2@2019-09-02")), @@ -213,7 +213,7 @@ private static Stream end_instant() throws SQLException { private static Stream max_instant() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TIntInst("1@2019-09-01"), "TIntInst", new TIntInst("1@2019-09-01")), Arguments.of(new TIntSeq("[1@2019-09-01, 2@2019-09-02]"), "TIntSeq",new TIntInst("2@2019-09-02")), @@ -223,7 +223,7 @@ private static Stream max_instant() throws SQLException { private static Stream instant_n() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TIntInst("1@2019-09-01"), 0, new TIntInst("1@2019-09-01")), Arguments.of(new TIntSeq("[1@2019-09-01, 2@2019-09-02]"), 1,new TIntInst("2@2019-09-02")), @@ -234,7 +234,7 @@ private static Stream instant_n() throws SQLException { private static Stream num_timestamps() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TIntInst("1@2019-09-01"), 1, new TIntInst("1@2019-09-01")), Arguments.of(new TIntSeq("[1@2019-09-01, 2@2019-09-02]"), 2,new TIntInst("2@2019-09-02")), @@ -245,7 +245,7 @@ private static Stream num_timestamps() throws SQLException { private static Stream start_timestamps() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TIntInst("1@2019-09-01"), 1, LocalDateTime.of(2019, 9, 1, 0, 0,0)), Arguments.of(new TIntSeq("[1@2019-09-01, 2@2019-09-02]"), 2, LocalDateTime.of(2019, 9, 1, 0, 0,0)), @@ -255,7 +255,7 @@ private static Stream start_timestamps() throws SQLException { private static Stream end_timestamps() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TIntInst("1@2019-09-01"), 1, LocalDateTime.of(2019, 9, 1, 0, 0,0)), Arguments.of(new TIntSeq("[1@2019-09-01, 2@2019-09-02]"), 2, LocalDateTime.of(2019, 9, 2, 0, 0,0)), @@ -265,7 +265,7 @@ private static Stream end_timestamps() throws SQLException { private static Stream hash() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TIntInst("1@2019-09-01"), 440045287, LocalDateTime.of(2019, 9, 1, 0, 0,0)), // Arguments.of(new TIntSeq("[1@2019-09-01, 2@2019-09-02]"), 3589664982l, LocalDateTime.of(2019, 9, 2, 0, 0,0)), @@ -275,7 +275,7 @@ private static Stream hash() throws SQLException { private static Stream toinstant() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TIntInst("1@2019-09-01"), "TIntInst", new TIntInst("1@2019-09-01")), Arguments.of(new TIntSeq("[1@2019-09-01]"), "TIntSeq", new TIntInst("1@2019-09-01")), @@ -285,7 +285,7 @@ private static Stream toinstant() throws SQLException { private static Stream tosequence() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TIntInst("1@2019-09-01"), "TIntInst", TInterpolation.NONE, new TIntSeq("[1@2019-09-01]")), // Arguments.of(new TIntSeq("[1@2019-09-01, 2@2019-09-02]"), "TIntSeq", TInterpolation.DISCRETE, new TIntSeq("[1@2019-09-01, 2@2019-09-02]")) @@ -295,7 +295,7 @@ private static Stream tosequence() throws SQLException { private static Stream tosequenceset() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TIntInst("1@2019-09-01"), "TIntInst", TInterpolation.NONE, new TIntSeqSet("{[1@2019-09-01]}")) // Arguments.of(new TIntSeq("[1@2019-09-01, 2@2019-09-02]"), "TIntSeq", TInterpolation.STEPWISE, new TIntSeqSet("{[1@2019-09-01, 2@2019-09-02]}")) @@ -305,7 +305,7 @@ private static Stream tosequenceset() throws SQLException { private static Stream insert() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TIntInst("1@2019-09-01"), "TIntInst", new TIntSeq("{1@2019-09-03}"), new TIntSeq("{1@2019-09-01, 1@2019-09-03}")), Arguments.of(new TIntSeq("{[1@2019-09-01, 2@2019-09-02]}"), "TIntSeq", new TIntSeq("[1@2019-09-03]"), new TIntSeqSet("{[1@2019-09-01, 2@2019-09-02], [1@2019-09-03]}")), @@ -315,7 +315,7 @@ private static Stream insert() throws SQLException { private static Stream update() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TIntInst("1@2019-09-01"), "TIntInst", new TIntInst("2@2019-09-01"), new TIntInst("2@2019-09-01")), Arguments.of(new TIntSeq("[1@2019-09-01, 2@2019-09-02]"), "TIntSeq", new TIntInst("2@2019-09-01"), new TIntSeqSet("{[2@2019-09-01], (1@2019-09-01, 2@2019-09-02]}")), @@ -325,7 +325,7 @@ private static Stream update() throws SQLException { private static Stream append_sequence() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TIntSeq("[1@2019-09-01, 2@2019-09-02]"), "TIntSeq", new TIntSeq("[1@2019-09-03]"), new TIntSeqSet("{[1@2019-09-01, 2@2019-09-02], [1@2019-09-03]}")), Arguments.of(new TIntSeqSet("{[1@2019-09-01, 2@2019-09-02],[1@2019-09-03, 1@2019-09-05]}"), "TIntSeqSet", new TIntSeq("[1@2019-09-06]"), new TIntSeqSet("{[1@2019-09-01, 2@2019-09-02],[1@2019-09-03, 1@2019-09-05],[1@2019-09-06]}")) @@ -334,7 +334,7 @@ private static Stream append_sequence() throws SQLException { private static Stream abs() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TIntInst("1@2019-09-01"), "TIntInst", new TIntInst("2@2019-09-01"), new TIntInst("2@2019-09-01")), Arguments.of(new TIntSeq("[1@2019-09-01, 2@2019-09-02]"), "TIntSeq", new TIntInst("2@2019-09-01"), new TIntSeqSet("{[2@2019-09-01], (1@2019-09-01, 2@2019-09-02]}")), @@ -344,7 +344,7 @@ private static Stream abs() throws SQLException { private static Stream delta_value() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TIntSeq("[1@2019-09-01, 2@2019-09-02]"), "TIntSeq", new TIntInst("2@2019-09-01"), new TIntSeq("[1@2019-09-01, 1@2019-09-02)")), Arguments.of(new TIntSeqSet("{[1@2019-09-01, 2@2019-09-02],[1@2019-09-03, 1@2019-09-05]}"), "TIntSeqSet", new TIntInst("2@2019-09-01"), new TIntSeqSet("{[1@2019-09-01, 1@2019-09-02),[0@2019-09-03, 0@2019-09-05)}")) @@ -354,7 +354,7 @@ private static Stream delta_value() throws SQLException { private static Stream always_equal() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TIntInst("1@2019-09-01"), "TIntInst", 1, true ), Arguments.of(new TIntInst("1@2019-09-01"), "TIntInst", 2, false ), @@ -368,7 +368,7 @@ private static Stream always_equal() throws SQLException { private static Stream ever_equal() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TIntInst("1@2019-09-01"), "TIntInst", 1, true ), Arguments.of(new TIntInst("1@2019-09-01"), "TIntInst", 2, false ), @@ -382,7 +382,7 @@ private static Stream ever_equal() throws SQLException { private static Stream ever_greater() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TIntInst("1@2019-09-01"), "TIntInst", 1, false ), Arguments.of(new TIntInst("1@2019-09-01"), "TIntInst", 2, true ), @@ -415,7 +415,7 @@ private static Stream ever_greater() throws SQLException { @ParameterizedTest(name="Test from base time constructor") @MethodSource("frombasetime") void testFromBaseTimeConstructor(Time source, String type, TInterpolation interpolation) throws InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if (type == "TIntSeq") { System.out.println(source.toString()); TIntSeq ti = (TIntSeq)TInt.from_base_time(1, source, interpolation); @@ -436,7 +436,7 @@ void testFromBaseTimeConstructor(Time source, String type, TInterpolation interp @ParameterizedTest(name ="Test from base temporal constructor") @MethodSource("frombasetemporal") void testFromBaseTemporalConstructor(Temporal source, String type, TInterpolation interpolation) { - //functions.meos_initialize("UTC", errorHandler); + //functions.meos_initialize(); if(type == "TIntInst"){ TIntInst ti = new TIntInst(); TIntInst new_ti = (TIntInst) ti.from_base_temporal(1,source,interpolation); @@ -463,7 +463,7 @@ else if (type == "TIntSeq") { @ParameterizedTest(name ="Test from string constructor") @MethodSource("fromstring") void testStringConstructor(String source, String type, TInterpolation interpolation, String expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if(type == "TIntInst"){ TIntInst tinst = new TIntInst(source); assertTrue(tinst instanceof TIntInst); @@ -490,7 +490,7 @@ else if (type == "TIntSeq") { @ParameterizedTest(name ="Test from copy constructor") @MethodSource("fromcopy") void testCopyConstructor(Temporal source, String type) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if(type == "TIntInst"){ TIntInst tb = (TIntInst)source.copy(); assertEquals(tb.to_string(),(((TIntInst) source).to_string())); @@ -510,7 +510,7 @@ else if (type == "TIntSeq") { @ParameterizedTest(name ="Test string ") @MethodSource("fromstring") void testString(String source, String type, TInterpolation interpolation, String expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if(type == "TIntInst"){ TIntInst tinst = new TIntInst(source); assertEquals(tinst.to_string(),expected); @@ -529,7 +529,7 @@ else if (type == "TIntSeq") { @ParameterizedTest(name ="Test to tfloat ") @MethodSource("totfloat") void testToTfloat(TInt source, String type, String expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if(type == "TIntInst"){ TFloatInst tinst = (TFloatInst) source.to_tfloat(); assertEquals(tinst.to_string(2),expected); @@ -549,7 +549,7 @@ else if (type == "TIntSeq") { @ParameterizedTest(name ="Test bounding box ") @MethodSource("bounding") void testBoundingBox(Temporal source, String type, Box expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.bounding_box().toString(),expected.to_period().toString()); } @@ -557,7 +557,7 @@ void testBoundingBox(Temporal source, String type, Box expected) { @ParameterizedTest(name ="Test interpolation ") @MethodSource("interp") void testInterpolation(Temporal source, String type, TInterpolation expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.interpolation(),expected); } @@ -565,7 +565,7 @@ void testInterpolation(Temporal source, String type, TInterpolation expected) { @ParameterizedTest(name ="Test value span ") @MethodSource("value_span") void testValueSpan(TInt source, String type, IntSpan expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.value_span().toString(),expected.toString()); } @@ -573,7 +573,7 @@ void testValueSpan(TInt source, String type, IntSpan expected) { @ParameterizedTest(name ="Test values span ") @MethodSource("value_spans") void testValuesSpan(TInt source, String type, IntSpanSet expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.value_spans().toString(),expected.toString()); } @@ -581,7 +581,7 @@ void testValuesSpan(TInt source, String type, IntSpanSet expected) { @ParameterizedTest(name ="Test start value") @MethodSource("start_value") void testStart_value(TInt source, String type, int expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.start_value(),expected); } @@ -589,7 +589,7 @@ void testStart_value(TInt source, String type, int expected) { @ParameterizedTest(name ="Test end value") @MethodSource("end_value") void testEnd_value(TInt source, String type, int expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.end_value(),expected); } @@ -597,7 +597,7 @@ void testEnd_value(TInt source, String type, int expected) { @ParameterizedTest(name ="Test min value") @MethodSource("min_value") void testMin_value(TInt source, String type, int expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.min_value(),expected); } @@ -605,7 +605,7 @@ void testMin_value(TInt source, String type, int expected) { @ParameterizedTest(name ="Test max value") @MethodSource("max_value") void testMax_value(TInt source, String type, int expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.max_value(),expected); } @@ -613,7 +613,7 @@ void testMax_value(TInt source, String type, int expected) { @ParameterizedTest(name ="Test time method") @MethodSource("time") void testTime(Temporal source, String type, tstzspanset expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.time().toString(),expected.toString()); } @@ -622,7 +622,7 @@ void testTime(Temporal source, String type, tstzspanset expected) { @ParameterizedTest(name ="Test period method") @MethodSource("period") void testtstzspan(Temporal source, String type, tstzspan expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.period().toString(),expected.toString()); } @@ -630,7 +630,7 @@ void testtstzspan(Temporal source, String type, tstzspan expected) { @ParameterizedTest(name ="Test period method") @MethodSource("period") void testTimespan(Temporal source, String type, tstzspan expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.timespan().toString(),expected.toString()); } @@ -638,7 +638,7 @@ void testTimespan(Temporal source, String type, tstzspan expected) { @ParameterizedTest(name ="Test num instant method") @MethodSource("num_instant") void testNumInstant(Temporal source, String type, int expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.num_instants(),expected); } @@ -646,7 +646,7 @@ void testNumInstant(Temporal source, String type, int expected) { @ParameterizedTest(name ="Test start instant method") @MethodSource("start_instant") void testStartInstant(Temporal source, String type, Temporal expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(((TIntInst)source.start_instant()).to_string(),((TIntInst)expected.start_instant()).to_string()); } @@ -654,7 +654,7 @@ void testStartInstant(Temporal source, String type, Temporal expected) { @ParameterizedTest(name ="Test end instant method") @MethodSource("end_instant") void testEndInstant(Temporal source, String type, Temporal expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(((TIntInst)source.end_instant()).to_string(),((TIntInst)expected.end_instant()).to_string()); } @@ -663,7 +663,7 @@ void testEndInstant(Temporal source, String type, Temporal expected) { @ParameterizedTest(name ="Test min instant method") @MethodSource("start_instant") void testMinInstant(Temporal source, String type, Temporal expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(((TIntInst)source.min_instant()).to_string(),((TIntInst)expected.min_instant()).to_string()); } @@ -671,7 +671,7 @@ void testMinInstant(Temporal source, String type, Temporal expected) { @ParameterizedTest(name ="Test max instant method") @MethodSource("max_instant") void testMaxInstant(Temporal source, String type, Temporal expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(((TIntInst)source.max_instant()).to_string(),((TIntInst)expected.max_instant()).to_string()); } @@ -680,7 +680,7 @@ void testMaxInstant(Temporal source, String type, Temporal expected) { @ParameterizedTest(name ="Test instant n method") @MethodSource("instant_n") void testInstant_n(Temporal source, int n, Temporal expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(((TIntInst)source.instant_n(n)).to_string(),((TIntInst)expected).to_string()); } @@ -688,7 +688,7 @@ void testInstant_n(Temporal source, int n, Temporal expected) { @ParameterizedTest(name ="Test num timestamps method") @MethodSource("num_timestamps") void testNumTimestamps(Temporal source, int n, Temporal expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.num_timestamps(),n); } @@ -696,7 +696,7 @@ void testNumTimestamps(Temporal source, int n, Temporal expected) { @ParameterizedTest(name ="Test start timestamps method") @MethodSource("start_timestamps") void testStartTimestamps(Temporal source, int n, LocalDateTime expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.start_timestamp(),expected); } @@ -704,7 +704,7 @@ void testStartTimestamps(Temporal source, int n, LocalDateTime expected) { @ParameterizedTest(name ="Test end timestamps method") @MethodSource("end_timestamps") void testEndTimestamps(Temporal source, int n, LocalDateTime expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.end_timestamp(),expected); } @@ -712,7 +712,7 @@ void testEndTimestamps(Temporal source, int n, LocalDateTime expected) { @ParameterizedTest(name ="Test hash method") @MethodSource("hash") void testHash(Temporal source, long n, LocalDateTime expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(source.hash(),n); } @@ -720,7 +720,7 @@ void testHash(Temporal source, long n, LocalDateTime expected) { @ParameterizedTest(name ="Test to instant method") @MethodSource("toinstant") void testToinstant(Temporal source, String type, TIntInst expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); TIntInst tmp = (TIntInst) source.to_instant(); assertTrue(tmp instanceof TIntInst); assertEquals(tmp.to_string(),expected.to_string()); @@ -732,7 +732,7 @@ void testToinstant(Temporal source, String type, TIntInst expected) { @ParameterizedTest(name ="Test to sequence method") @MethodSource("tosequence") void testTosequence(Temporal source, String type, TInterpolation interp, TIntSeq expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); System.out.println(source.to_sequence(interp).start_timestamp()); // System.out.println(source.to_sequenceset(interp)); TIntSeq tmp = (TIntSeq) source.to_sequence(interp); @@ -744,7 +744,7 @@ void testTosequence(Temporal source, String type, TInterpolation interp, TIntSeq @ParameterizedTest(name ="Test to sequenceset method") @MethodSource("tosequenceset") void testTosequenceset(Temporal source, String type, TInterpolation interp, TIntSeqSet expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); System.out.println(source.to_sequenceset(interp).start_timestamp()); TIntSeqSet tmp = (TIntSeqSet) source.to_sequenceset(interp); assertTrue(tmp instanceof TIntSeqSet); @@ -757,7 +757,7 @@ void testTosequenceset(Temporal source, String type, TInterpolation interp, TInt @ParameterizedTest(name ="Test insert method") @MethodSource("insert") void testInsert(Temporal source, String type, TIntSeq tseq, Temporal expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if(type == "TIntInst"){ TIntInst tmp = (TIntInst) source.insert(tseq); assertEquals(tmp.to_string(), ((TIntSeq)expected).to_string()); @@ -776,7 +776,7 @@ void testInsert(Temporal source, String type, TIntSeq tseq, Temporal expected) { @ParameterizedTest(name ="Test update method") @MethodSource("update") void testUpdate(Temporal source, String type, TIntInst tseq, Temporal expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if(type == "TIntInst"){ TIntInst tmp = (TIntInst) source.update(tseq); assertEquals(tmp.to_string(), ((TIntInst)expected).to_string()); @@ -792,7 +792,7 @@ void testUpdate(Temporal source, String type, TIntInst tseq, Temporal expected) @ParameterizedTest(name ="Test append sequence method") @MethodSource("append_sequence") void testAppendSequence(Temporal source, String type, TIntSeq tseq, Temporal expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if (type == "TIntSeq") { TIntSeq tmp = (TIntSeq) source.append_sequence(tseq); assertEquals(tmp.to_string(), ((TIntSeqSet)expected).to_string()); @@ -805,7 +805,7 @@ void testAppendSequence(Temporal source, String type, TIntSeq tseq, Temporal exp @ParameterizedTest(name ="Test abs method") @MethodSource("abs") void testAbs(Temporal source, String type, TIntInst tseq, Temporal expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if(type == "TIntInst"){ TNumber tmp = ((TNumber) source).abs(); assertEquals(((TIntInst)tmp).to_string(), ((TIntInst)source).to_string()); @@ -822,7 +822,7 @@ void testAbs(Temporal source, String type, TIntInst tseq, Temporal expected) { @ParameterizedTest(name ="Test delta value method") @MethodSource("delta_value") void testDeltaValue(Temporal source, String type, TIntInst tseq, Temporal expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if(type == "TIntInst"){ TNumber tmp = ((TNumber) source).delta_value(); assertEquals(((TIntInst)tmp).to_string(), ((TIntInst)expected).to_string()); @@ -840,7 +840,7 @@ void testDeltaValue(Temporal source, String type, TIntInst tseq, Temporal expect @ParameterizedTest(name ="Test always equal method") @MethodSource("always_equal") void testAlwaysEqual(Temporal source, String type, int arg, boolean expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); System.out.println(((TInt)source).never_not_equal(arg)); System.out.println(expected); assertEquals(((TInt)source).always_equal(arg),expected); @@ -854,7 +854,7 @@ void testAlwaysEqual(Temporal source, String type, int arg, boolean expected) { @ParameterizedTest(name ="Test ever equal method") @MethodSource("ever_equal") void testEverEqual(Temporal source, String type, int arg, boolean expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); // assertEquals(((TInt)source).ever_equal(arg),expected); assertEquals(((TInt)source).always_not_equal(arg),!expected); // assertEquals(((TInt)source).never_equal(arg),! expected); @@ -864,7 +864,7 @@ void testEverEqual(Temporal source, String type, int arg, boolean expected) { @ParameterizedTest(name ="Test ever greater method") @MethodSource("ever_greater") void testEverGreater(Temporal source, String type, int arg, boolean expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(((TInt)source).always_less(arg),expected); assertEquals(((TInt)source).never_greater_or_equal(arg),expected); assertEquals(((TInt)source).ever_greater_or_equal(arg),! expected); diff --git a/src/test/java/basic/TTextTest.java b/src/test/java/basic/TTextTest.java index 8dfb51e37..4e9cbd82d 100644 --- a/src/test/java/basic/TTextTest.java +++ b/src/test/java/basic/TTextTest.java @@ -28,7 +28,7 @@ public class TTextTest { static error_handler_fn errorHandler = new error_handler(); static Stream TText_string_constructor() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of("AAA@2019-09-01", "TTextInst", TInterpolation.NONE, "\"AAA\"@2019-09-01 00:00:00+00"), Arguments.of("{AAA@2019-09-01, BBB@2019-09-02}", "TTextSeq", TInterpolation.DISCRETE, "{\"AAA\"@2019-09-01 00:00:00+00, \"BBB\"@2019-09-02 00:00:00+00}"), @@ -38,7 +38,7 @@ static Stream TText_string_constructor() throws SQLException { } static Stream TText_base_time_constructor() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new tstzset("{2019-09-01, 2019-09-02}"), "TTextSeq", TInterpolation.DISCRETE), Arguments.of(new tstzspan("[2019-09-01, 2019-09-02]"), "TTextSeqSet", TInterpolation.STEPWISE), @@ -48,7 +48,7 @@ static Stream TText_base_time_constructor() throws SQLException { static Stream TText_copy_constructor() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TTextInst("AAA@2019-09-01"), "TTextInst", TInterpolation.NONE), Arguments.of(new TTextSeq("{AAA@2019-09-01, BBB@2019-09-02}"), "TTextSeq", TInterpolation.DISCRETE), @@ -59,7 +59,7 @@ static Stream TText_copy_constructor() throws SQLException { static Stream TText_string() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TTextInst("AAA@2019-09-01"), "TTextInst", "\"AAA\"@2019-09-01 00:00:00+00"), Arguments.of(new TTextSeq("{AAA@2019-09-01, BBB@2019-09-02}"), "TTextSeq","{\"AAA\"@2019-09-01 00:00:00+00, \"BBB\"@2019-09-02 00:00:00+00}"), @@ -70,7 +70,7 @@ static Stream TText_string() throws SQLException { static Stream TText_bounding() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TTextInst("AAA@2019-09-01"), "TTextInst",new tstzspan("[2019-09-01, 2019-09-01]")), Arguments.of(new TTextSeq("{AAA@2019-09-01, BBB@2019-09-02}"), "TTextSeq", new tstzspan("[2019-09-01, 2019-09-02]")), @@ -81,7 +81,7 @@ static Stream TText_bounding() throws SQLException { static Stream TText_interp() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TTextInst("AAA@2019-09-01"), "TTextInst", TInterpolation.NONE), Arguments.of(new TTextSeq("{AAA@2019-09-01, BBB@2019-09-02}"), "TTextSeq", TInterpolation.DISCRETE), @@ -91,7 +91,7 @@ static Stream TText_interp() throws SQLException { } static Stream TText_start() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TTextInst("AAA@2019-09-01"), "TTextInst", "AAA"), Arguments.of(new TTextSeq("{AAA@2019-09-01, BBB@2019-09-02}"), "TTextSeq", "AAA"), @@ -102,7 +102,7 @@ static Stream TText_start() throws SQLException { static Stream TText_end() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TTextInst("AAA@2019-09-01"), "TTextInst", "AAA"), Arguments.of(new TTextSeq("{AAA@2019-09-01, BBB@2019-09-02}"), "TTextSeq", "BBB"), @@ -113,7 +113,7 @@ static Stream TText_end() throws SQLException { static Stream TText_time() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TTextInst("AAA@2019-09-01"), "TTextInst", new tstzspanset("{[2019-09-01, 2019-09-01]}")), Arguments.of(new TTextSeq("{AAA@2019-09-01, BBB@2019-09-02}"), "TTextSeq", new tstzspanset("{[2019-09-01, 2019-09-01], [2019-09-02, 2019-09-02]}")), @@ -124,7 +124,7 @@ static Stream TText_time() throws SQLException { static Stream TText_numinst() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TTextInst("AAA@2019-09-01"), "TTextInst", 1), Arguments.of(new TTextSeq("{AAA@2019-09-01, BBB@2019-09-02}"), "TTextSeq", 2), @@ -136,7 +136,7 @@ static Stream TText_numinst() throws SQLException { static Stream TText_startinst() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TTextInst("AAA@2019-09-01"), "TTextInst", new TTextInst("AAA@2019-09-01")), Arguments.of(new TTextSeq("{AAA@2019-09-01, BBB@2019-09-02}"), "TTextSeq", new TTextInst("AAA@2019-09-01")), @@ -147,7 +147,7 @@ static Stream TText_startinst() throws SQLException { static Stream TText_endinst() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TTextInst("AAA@2019-09-01"), "TTextInst", new TTextInst("AAA@2019-09-01")), Arguments.of(new TTextSeq("{AAA@2019-09-01, BBB@2019-09-02}"), "TTextSeq", new TTextInst("BBB@2019-09-02")), @@ -159,7 +159,7 @@ static Stream TText_endinst() throws SQLException { static Stream TText_mininst() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TTextInst("AAA@2019-09-01"), "TTextInst", new TTextInst("AAA@2019-09-01")), Arguments.of(new TTextSeq("{AAA@2019-09-01, BBB@2019-09-02}"), "TTextSeq", new TTextInst("AAA@2019-09-01")), @@ -170,7 +170,7 @@ static Stream TText_mininst() throws SQLException { static Stream TText_maxinst() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TTextInst("AAA@2019-09-01"), "TTextInst", new TTextInst("AAA@2019-09-01")), Arguments.of(new TTextSeq("{AAA@2019-09-01, BBB@2019-09-02}"), "TTextSeq", new TTextInst("BBB@2019-09-02")), @@ -180,7 +180,7 @@ static Stream TText_maxinst() throws SQLException { } static Stream TText_instn() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TTextInst("AAA@2019-09-01"), "TTextInst", 0, new TTextInst("AAA@2019-09-01")), Arguments.of(new TTextSeq("{AAA@2019-09-01, BBB@2019-09-02}"), "TTextSeq",1, new TTextInst("BBB@2019-09-02")), @@ -191,7 +191,7 @@ static Stream TText_instn() throws SQLException { static Stream TText_numtmstp() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TTextInst("AAA@2019-09-01"), "TTextInst", 1), Arguments.of(new TTextSeq("{AAA@2019-09-01, BBB@2019-09-02}"), "TTextSeq",2), @@ -202,7 +202,7 @@ static Stream TText_numtmstp() throws SQLException { static Stream TText_starttmstp() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TTextInst("AAA@2019-09-01"), "TTextInst", LocalDateTime.of(2019, 9, 1, 0, 0,0)), Arguments.of(new TTextSeq("{AAA@2019-09-01, BBB@2019-09-02}"), "TTextSeq",LocalDateTime.of(2019, 9, 1, 0, 0,0)), @@ -212,7 +212,7 @@ static Stream TText_starttmstp() throws SQLException { } static Stream TText_endtmstp() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TTextInst("AAA@2019-09-01"), "TTextInst", LocalDateTime.of(2019, 9, 1, 0, 0,0)), Arguments.of(new TTextSeq("{AAA@2019-09-01, BBB@2019-09-02}"), "TTextSeq",LocalDateTime.of(2019, 9, 2, 0, 0,0)), @@ -223,7 +223,7 @@ static Stream TText_endtmstp() throws SQLException { static Stream TText_hash() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TTextInst("AAA@2019-09-01"), "TTextInst", 1893808825), Arguments.of(new TTextSeq("{AAA@2019-09-01, BBB@2019-09-02}"), "TTextSeq",1223816819), @@ -234,7 +234,7 @@ static Stream TText_hash() throws SQLException { static Stream TText_toinstant() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TTextInst("AAA@2019-09-01"),new TTextInst("AAA@2019-09-01")), Arguments.of(new TTextSeq("{AAA@2019-09-01}"), new TTextInst("AAA@2019-09-01")), @@ -245,7 +245,7 @@ static Stream TText_toinstant() throws SQLException { static Stream TText_tosequence() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TTextInst("AAA@2019-09-01"), TInterpolation.STEPWISE, new TTextSeq("[AAA@2019-09-01]")), Arguments.of(new TTextSeq("{AAA@2019-09-01, BBB@2019-09-02}"), TInterpolation.DISCRETE, new TTextSeq("{AAA@2019-09-01, BBB@2019-09-02}")), @@ -256,7 +256,7 @@ static Stream TText_tosequence() throws SQLException { static Stream TText_tosequenceset() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TTextInst("AAA@2019-09-01"), TInterpolation.STEPWISE, new TTextSeqSet("{[AAA@2019-09-01]}")), Arguments.of(new TTextSeq("{AAA@2019-09-01, BBB@2019-09-02}"), TInterpolation.STEPWISE, new TTextSeqSet("{[AAA@2019-09-01], [BBB@2019-09-02]}")) @@ -268,7 +268,7 @@ static Stream TText_tosequenceset() throws SQLException { static Stream TText_insert() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TTextInst("AAA@2019-09-01"), new TTextSeq("{AAA@2019-09-03}"), new TTextSeq("{AAA@2019-09-01, AAA@2019-09-03}"), "TTextInst"), Arguments.of(new TTextSeq("{AAA@2019-09-01, BBB@2019-09-02}"), new TTextSeq("{AAA@2019-09-03}"), new TTextSeq("{AAA@2019-09-01, BBB@2019-09-02, AAA@2019-09-03}"), "TTextSeq"), @@ -279,7 +279,7 @@ static Stream TText_insert() throws SQLException { static Stream TText_update() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TTextInst("AAA@2019-09-01"), new TTextInst("BBB@2019-09-01"), new TTextInst("BBB@2019-09-01"), "TTextInst" ), Arguments.of(new TTextSeq("[AAA@2019-09-01, BBB@2019-09-02]"), new TTextInst("BBB@2019-09-01"), new TTextSeqSet("{[BBB@2019-09-01], (AAA@2019-09-01, BBB@2019-09-02]}"), "TTextSeq"), @@ -290,7 +290,7 @@ static Stream TText_update() throws SQLException { static Stream TText_appendseq() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TTextSeq("{AAA@2019-09-01, BBB@2019-09-02}"), new TTextSeq("{AAA@2019-09-03}"), new TTextSeq("{AAA@2019-09-01, BBB@2019-09-02, AAA@2019-09-03}"), "TTextSeq"), Arguments.of(new TTextSeqSet("{[AAA@2019-09-01, BBB@2019-09-02],[AAA@2019-09-03, AAA@2019-09-05]}"), new TTextSeq("[AAA@2019-09-06]"), new TTextSeqSet("{[AAA@2019-09-01, BBB@2019-09-02],[AAA@2019-09-03, AAA@2019-09-05],[AAA@2019-09-06]}"), "TTextSeqSet") @@ -316,7 +316,7 @@ static Stream TText_appendseq() throws SQLException { @ParameterizedTest(name = "Test from string constructor.") @MethodSource("TText_string_constructor") public void testFromStringConstructor(String value, String type, TInterpolation interp, String repr) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if (type == "TTextInst") { TTextInst tb = new TTextInst(value); assertTrue(tb instanceof TTextInst); @@ -339,7 +339,7 @@ public void testFromStringConstructor(String value, String type, TInterpolation @ParameterizedTest(name = "Test from time constructor.") @MethodSource("TText_base_time_constructor") public void testFromBaseTimeConstructor(Time base, String type, TInterpolation interp) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if (type == "TTextInst") { TTextInst tb = (TTextInst) TText.from_base_time("AAA", base); assertTrue(tb instanceof TTextInst); @@ -361,7 +361,7 @@ public void testFromBaseTimeConstructor(Time base, String type, TInterpolation i @ParameterizedTest(name = "Test copy constructor.") @MethodSource("TText_copy_constructor") public void testCopyConstructor(Temporal base, String type, TInterpolation interp) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if (type == "TTextInst") { TTextInst tb = (TTextInst) base.copy(); assertEquals(tb.to_string(),(((TTextInst) base).to_string())); @@ -379,7 +379,7 @@ public void testCopyConstructor(Temporal base, String type, TInterpolation inter @ParameterizedTest(name = "Test string.") @MethodSource("TText_string") public void testString(Temporal base, String type, String expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if (type == "TTextInst") { TTextInst tb = (TTextInst) base.copy(); assertEquals(tb.to_string(),expected); @@ -396,7 +396,7 @@ public void testString(Temporal base, String type, String expected) { @ParameterizedTest(name = "Test bounding box method.") @MethodSource("TText_bounding") public void testBoundingBox(Temporal base, String type, tstzspan expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(base.bounding_box().toString(),expected.toString()); } @@ -405,7 +405,7 @@ public void testBoundingBox(Temporal base, String type, tstzspan expected) { @ParameterizedTest(name = "Test interpolation method.") @MethodSource("TText_interp") public void testInterpolation(Temporal base, String type, TInterpolation expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(base.interpolation(),expected); } @@ -413,7 +413,7 @@ public void testInterpolation(Temporal base, String type, TInterpolation expecte @ParameterizedTest(name = "Test start values method.") @MethodSource("TText_start") public void testStartValues(Temporal base, String type, String expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(((TText) base).start_value() ,expected); } @@ -421,7 +421,7 @@ public void testStartValues(Temporal base, String type, String expected) { @ParameterizedTest(name = "Test end values method.") @MethodSource("TText_end") public void testEndValues(Temporal base, String type, String expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(((TText) base).end_value() ,expected); } @@ -429,7 +429,7 @@ public void testEndValues(Temporal base, String type, String expected) { @ParameterizedTest(name = "Test time method.") @MethodSource("TText_time") public void testTime(Temporal base, String type, tstzspanset expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(base.time().toString() ,expected.toString()); } @@ -437,7 +437,7 @@ public void testTime(Temporal base, String type, tstzspanset expected) { @ParameterizedTest(name = "Test period method.") @MethodSource("TText_bounding") public void testtstzspan(Temporal base, String type, tstzspan expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(base.period().toString() ,expected.toString()); } @@ -445,14 +445,14 @@ public void testtstzspan(Temporal base, String type, tstzspan expected) { @ParameterizedTest(name = "Test span method.") @MethodSource("TText_bounding") public void testSpan(Temporal base, String type, tstzspan expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(base.timespan().toString(),expected.toString()); } @ParameterizedTest(name = "Test numinst method.") @MethodSource("TText_numinst") public void testNumInst(Temporal base, String type, int expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(base.num_instants(),expected); } @@ -460,7 +460,7 @@ public void testNumInst(Temporal base, String type, int expected) { @ParameterizedTest(name = "Test startinst method.") @MethodSource("TText_startinst") public void testStartInst(Temporal base, String type, TTextInst expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(((TTextInst)base.start_instant()).to_string(),expected.to_string()); } @@ -468,7 +468,7 @@ public void testStartInst(Temporal base, String type, TTextInst expected) { @ParameterizedTest(name = "Test endinst method.") @MethodSource("TText_endinst") public void testEndInst(Temporal base, String type, TTextInst expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(((TTextInst)base.end_instant()).to_string(),expected.to_string()); } @@ -476,7 +476,7 @@ public void testEndInst(Temporal base, String type, TTextInst expected) { @ParameterizedTest(name = "Test mininst method.") @MethodSource("TText_mininst") public void testMinInst(Temporal base, String type, TTextInst expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(((TTextInst)base.min_instant()).to_string(),expected.to_string()); } @@ -484,7 +484,7 @@ public void testMinInst(Temporal base, String type, TTextInst expected) { @ParameterizedTest(name = "Test maxinst method.") @MethodSource("TText_maxinst") public void testMaxInst(Temporal base, String type, TTextInst expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(((TTextInst)base.max_instant()).to_string(),expected.to_string()); } @@ -492,7 +492,7 @@ public void testMaxInst(Temporal base, String type, TTextInst expected) { @ParameterizedTest(name = "Test instn method.") @MethodSource("TText_instn") public void testInstN(Temporal base, String type, int n, TTextInst expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(((TTextInst)base.instant_n(n)).to_string(),expected.to_string()); } @@ -500,7 +500,7 @@ public void testInstN(Temporal base, String type, int n, TTextInst expected) { @ParameterizedTest(name = "Test num timestamp method.") @MethodSource("TText_numtmstp") public void testNumtmstmp(Temporal base, String type, int expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(base.num_timestamps(),expected); } @@ -508,7 +508,7 @@ public void testNumtmstmp(Temporal base, String type, int expected) { @ParameterizedTest(name = "Test start timestamp method.") @MethodSource("TText_starttmstp") public void testStarttmstmp(Temporal base, String type, LocalDateTime expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(base.start_timestamp(),expected); } @@ -516,7 +516,7 @@ public void testStarttmstmp(Temporal base, String type, LocalDateTime expected) @ParameterizedTest(name = "Test end timestamp method.") @MethodSource("TText_endtmstp") public void testEndtmstmp(Temporal base, String type, LocalDateTime expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(base.end_timestamp(),expected); } @@ -524,7 +524,7 @@ public void testEndtmstmp(Temporal base, String type, LocalDateTime expected) { @ParameterizedTest(name = "Test Hash method.") @MethodSource("TText_hash") public void testHash(Temporal base, String type, long expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(base.hash(),expected); } @@ -532,7 +532,7 @@ public void testHash(Temporal base, String type, long expected) { @ParameterizedTest(name = "Test to instant method.") @MethodSource("TText_toinstant") public void testToInstant(Temporal base, TTextInst type) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); Temporal tmp = base.to_instant(); assertTrue(tmp instanceof TTextInst); assertEquals(((TTextInst) tmp).to_string(), type.to_string()); @@ -542,7 +542,7 @@ public void testToInstant(Temporal base, TTextInst type) { @ParameterizedTest(name = "Test to sequence method.") @MethodSource("TText_tosequence") public void testToSequence(Temporal base, TInterpolation interp, TTextSeq type) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); Temporal tmp = base.to_sequence(interp); assertTrue(tmp instanceof TTextSeq); assertEquals(((TTextSeq) tmp).to_string(), type.to_string()); @@ -553,7 +553,7 @@ public void testToSequence(Temporal base, TInterpolation interp, TTextSeq type) @ParameterizedTest(name = "Test to sequence method.") @MethodSource("TText_tosequenceset") public void testToSequenceSet(Temporal base, TInterpolation interp, TTextSeqSet type) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); Temporal tmp = base.to_sequenceset(interp); assertTrue(tmp instanceof TTextSeqSet); assertEquals(((TTextSeqSet) tmp).to_string(), type.to_string()); @@ -564,7 +564,7 @@ public void testToSequenceSet(Temporal base, TInterpolation interp, TTextSeqSet @ParameterizedTest(name = "Test insert method.") @MethodSource("TText_insert") public void testInsert(Temporal base, Temporal base2, Temporal tseq, String type) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if (type == "TTextInst") { assertEquals(((TTextInst)base.insert(base2)).to_string(), ((TTextSeq) tseq).to_string()); } else if (type == "TTextSeq") { @@ -578,7 +578,7 @@ public void testInsert(Temporal base, Temporal base2, Temporal tseq, String type @ParameterizedTest(name = "Test update method.") @MethodSource("TText_update") public void testUpdate(Temporal base, Temporal base2, Temporal tseq, String type) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if (type == "TTextInst") { assertEquals(((TTextInst)base.update(base2)).to_string(), ((TTextInst) tseq).to_string()); } else if (type == "TTextSeq") { @@ -593,7 +593,7 @@ public void testUpdate(Temporal base, Temporal base2, Temporal tseq, String type @ParameterizedTest(name = "Test append sequence method.") @MethodSource("TText_appendseq") public void testAppendSeq(Temporal base, TSequence base2, Temporal tseq, String type) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); if (type == "TTextSeq") { assertEquals(((TTextSeq)base.append_sequence(base2)).to_string(), ((TTextSeq) tseq).to_string()); } else if (type == "TTextSeqSet") { diff --git a/src/test/java/boxes/STBoxTest.java b/src/test/java/boxes/STBoxTest.java index fde8a7dfb..8dc82565a 100644 --- a/src/test/java/boxes/STBoxTest.java +++ b/src/test/java/boxes/STBoxTest.java @@ -29,7 +29,7 @@ public class STBoxTest { static error_handler_fn errorHandler = new error_handler(); public STBoxTest() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); stbx = new STBox("STBOX X((1, 1),(2, 2))"); stbz = new STBox("STBOX Z((1, 1, 1),(2, 2, 2))"); stbt = new STBox("STBOX T([2019-09-01,2019-09-02])"); @@ -38,7 +38,7 @@ public STBoxTest() throws SQLException { } static Stream STBox_sources() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new STBox("STBOX X((1, 1),(2, 2))"), "STBOX X((1, 1),(2, 2))" ), Arguments.of(new STBox("STBOX Z((1, 1, 1),(2, 2, 2))"), "STBOX Z((1, 1, 1),(2, 2, 2))" ), @@ -106,7 +106,7 @@ public void testFromTimeConstructor(String type, String source, String expected) @ParameterizedTest(name = "Test from as constructor.") @MethodSource("STBox_sources") public void testFromAsConstructor(STBox box, String str) throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); STBox stb = new STBox(str); assertTrue(stb.eq(box)); } @@ -115,7 +115,7 @@ public void testFromAsConstructor(STBox box, String str) throws SQLException { @ParameterizedTest(name = "Test copy constructor.") @MethodSource("STBox_sources") public void testCopyConstructor(STBox box, String str) throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); STBox stb = box.copy(); assertTrue(stb.eq(box)); assertFalse(stb.get_inner() == box.get_inner()); diff --git a/src/test/java/boxes/TBoxTest.java b/src/test/java/boxes/TBoxTest.java index 8e79fe6b9..8a2808e65 100644 --- a/src/test/java/boxes/TBoxTest.java +++ b/src/test/java/boxes/TBoxTest.java @@ -27,7 +27,7 @@ class TBoxTest { static error_handler_fn errorHandler = new error_handler(); static Stream TBox_sources() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TBox("TBOXFLOAT X([1, 2])"),"TBox", "TBOXFLOAT X([1, 2])" ), Arguments.of(new TBox("TBOX T([2019-09-01, 2019-09-02])"), "TBox", "TBOX T([2019-09-01 00:00:00+00, 2019-09-02 00:00:00+00])" ), @@ -36,7 +36,7 @@ static Stream TBox_sources() throws SQLException { } static Stream TBox_number() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(1, "TBOXINT X([1, 2))","TBox"), Arguments.of(1.5f, "TBOXFLOAT X([1.5, 1.5])", "TBox") @@ -44,7 +44,7 @@ static Stream TBox_number() throws SQLException { } static Stream TBox_span() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new IntSpan(1, 2, true, true),"TBox", "TBOXINT X([1, 3))" ), Arguments.of(new FloatSpan(1.5f, 2.5f, true, true),"TBox", "TBOXFLOAT X([1.5, 2.5])" ) @@ -53,7 +53,7 @@ static Stream TBox_span() throws SQLException { static Stream TBox_time() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new tstzset("{2019-09-01, 2019-09-02}"),"TBox", "TBOX T([2019-09-01 00:00:00+00, 2019-09-02 00:00:00+00])" ), Arguments.of(new tstzspan("[2019-09-01, 2019-09-02]"),"TBox", "TBOX T([2019-09-01 00:00:00+00, 2019-09-02 00:00:00+00])" ), @@ -63,7 +63,7 @@ static Stream TBox_time() throws SQLException { static Stream TBox_basic() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TBox("TBOXFLOAT X([1,2])"),"TBox", "TBOXFLOAT X([1, 2])" ), Arguments.of(new TBox("TBOX T([2019-09-01,2019-09-02])"),"TBox", "TBOX T([2019-09-01 00:00:00+00, 2019-09-02 00:00:00+00])" ), @@ -73,7 +73,7 @@ static Stream TBox_basic() throws SQLException { static Stream TBox_tofloatspan() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TBox("TBOXFLOAT X([1,2])"),"TBox", new FloatSpan(1.0f, 2.0f, true, true) ), Arguments.of(new TBox("TBOXFLOAT XT([1,2],[2019-09-01,2019-09-02])"), "TBox",new FloatSpan(1.0f, 2.0f, true, true)) @@ -81,7 +81,7 @@ static Stream TBox_tofloatspan() throws SQLException { } static Stream TBox_toperiod() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TBox("TBOXFLOAT X([1,2])"),"TBox", new tstzspan("[2019-09-08 02:03:00+0, 2019-09-10 02:03:00+0]")), Arguments.of(new TBox("TBOXFLOAT XT([1,2],[2019-09-01,2019-09-02])"), "TBox", new tstzspan("[2019-09-08 02:03:00+0, 2019-09-10 02:03:00+0]")) @@ -89,7 +89,7 @@ static Stream TBox_toperiod() throws SQLException { } static Stream TBox_expandfloat() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TBox("TBOXFLOAT X([1,2])"),"TBox", new TBox("TBOXFLOAT X([1, 2])")), Arguments.of(new TBox("TBOXFLOAT XT([1,2],[2019-09-01,2019-09-02])"), "TBox", new TBox("TBOXFLOAT XT([1,2],[2019-09-01, 2019-09-02])")) @@ -97,7 +97,7 @@ static Stream TBox_expandfloat() throws SQLException { } static Stream TBox_expandtime() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TBox("TBOXFLOAT X([1,2])"),"TBox", new tstzspan("[2019-09-08 02:03:00+0, 2019-09-10 02:03:00+0]")), Arguments.of(new TBox("TBOXFLOAT XT([1,2],[2019-09-01,2019-09-02])"), "TBox", new tstzspan("[2019-09-08 02:03:00+0, 2019-09-10 02:03:00+0]")) @@ -107,7 +107,7 @@ static Stream TBox_expandtime() throws SQLException { static Stream TBox_round() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new TBox("TBOXFLOAT X([1.123456789,2.123456789])"),"TBox", new TBox("TBOXFLOAT X([1.12,2.12])")), Arguments.of(new TBox("TBOXFLOAT XT([1.123456789,2.123456789],[2019-09-01, 2019-09-03])"), "TBox", new TBox("TBOXFLOAT XT([1.12,2.12],[2019-09-01, 2019-09-03])")) @@ -128,7 +128,7 @@ static Stream TBox_round() throws SQLException { @ParameterizedTest(name = "Test from as constructor.") @MethodSource("TBox_sources") public void testStringConstructor(TBox box, String type, String expected) throws ParseException, SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertTrue(box instanceof TBox); assertEquals(box.toString(),expected); } @@ -137,7 +137,7 @@ public void testStringConstructor(TBox box, String type, String expected) throws @ParameterizedTest(name = "Test from value number constructor.") @MethodSource("TBox_number") public void testFromValueNConstructor(Number val, String box, String type) throws ParseException, SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); TBox new_tb = TBox.from_value_number(val); assertTrue(new_tb instanceof TBox); assertEquals(new_tb.toString(),box); @@ -147,7 +147,7 @@ public void testFromValueNConstructor(Number val, String box, String type) throw @ParameterizedTest(name = "Test from span constructor.") @MethodSource("TBox_span") public void testFromSpanConstructor(Span sp, String type, String expected) throws ParseException, SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); TBox new_tb = TBox.from_value_span(sp); assertTrue(new_tb instanceof TBox); assertEquals(new_tb.toString(),expected); @@ -157,7 +157,7 @@ public void testFromSpanConstructor(Span sp, String type, String expected) throw @ParameterizedTest(name = "Test from time constructor.") @MethodSource("TBox_time") public void testFromTimeConstructor(Time t, String type, String expected) throws Exception { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); TBox new_tb = TBox.from_time(t); assertTrue(new_tb instanceof TBox); assertEquals(new_tb.toString(),expected); @@ -168,7 +168,7 @@ public void testFromTimeConstructor(Time t, String type, String expected) throws @ParameterizedTest(name = "Test from time constructor.") @MethodSource("TBox_time") public void testCopyConstructor(Time t, String type, String expected) throws Exception { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); TBox new_tb = TBox.from_time(t); assertTrue(new_tb instanceof TBox); assertEquals(new_tb.toString(),expected); @@ -178,7 +178,7 @@ public void testCopyConstructor(Time t, String type, String expected) throws Exc @ParameterizedTest(name = "Test copy constructor.") @MethodSource("TBox_basic") public void testCopyConstructor(TBox t, String type, String expected) throws Exception { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); TBox new_tb = t.copy(); assertTrue(new_tb instanceof TBox); assertEquals(new_tb.toString(), t.toString()); @@ -188,7 +188,7 @@ public void testCopyConstructor(TBox t, String type, String expected) throws Exc @ParameterizedTest(name = "Test copy constructor.") @MethodSource("TBox_basic") public void testStrConstructor(TBox t, String type, String expected) throws Exception { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertTrue(t instanceof TBox); assertEquals(t.toString(), expected); } @@ -196,7 +196,7 @@ public void testStrConstructor(TBox t, String type, String expected) throws Exce @ParameterizedTest(name = "Test floatspan method.") @MethodSource("TBox_tofloatspan") public void testStrConstructor(TBox t, String type, Span expected) throws Exception { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); FloatSpan z = t.to_floatspan(); assertTrue(z instanceof FloatSpan); assertEquals(z.toString(15), ((FloatSpan)expected).toString(15)); @@ -208,7 +208,7 @@ public void testStrConstructor(TBox t, String type, Span expected) throws Except @ParameterizedTest(name = "Test expand float method.") @MethodSource("TBox_expandfloat") public void testExpandFloat(TBox t, String type, TBox expected) throws Exception { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); TBox tb = t.expand(1.0f); assertTrue(tb instanceof TBox); assertEquals(t.toString(15),expected.toString(15)); @@ -219,7 +219,7 @@ public void testExpandFloat(TBox t, String type, TBox expected) throws Exception @ParameterizedTest(name = "Test round float method.") @MethodSource("TBox_round") public void testRound(TBox t, String type, TBox expected) throws Exception { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); TBox new_tb = t.round(2); System.out.println(t.toString()); System.out.println(new_tb.toString()); diff --git a/src/test/java/collections/number/FloatSetTest.java b/src/test/java/collections/number/FloatSetTest.java index e7f58c553..b2ab3d60d 100644 --- a/src/test/java/collections/number/FloatSetTest.java +++ b/src/test/java/collections/number/FloatSetTest.java @@ -32,7 +32,7 @@ static Stream FloatSet_sources() throws SQLException { // } // }; error_handler_fn errorHandler = new error_handler(); - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(5.0f, false ), Arguments.of(new FloatSet("{5, 10}"), false ) @@ -41,7 +41,7 @@ static Stream FloatSet_sources() throws SQLException { static Stream FloatSet_distances() throws SQLException { error_handler_fn errorHandler = new error_handler(); - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(5.0f, 2.0f ), Arguments.of(new FloatSet("{5, 10}"), 2.0f ) diff --git a/src/test/java/collections/number/FloatSpanSetTest.java b/src/test/java/collections/number/FloatSpanSetTest.java index e750048b3..9846e812c 100644 --- a/src/test/java/collections/number/FloatSpanSetTest.java +++ b/src/test/java/collections/number/FloatSpanSetTest.java @@ -20,7 +20,7 @@ public class FloatSpanSetTest { static Stream IntSpan_sources() throws SQLException { error_handler_fn errorHandler = new error_handler(); - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of("(7, 10)", 8, 10, true, false), Arguments.of("[7, 10]", 7, 11, true, false) @@ -29,7 +29,7 @@ static Stream IntSpan_sources() throws SQLException { static Stream IntSpan_mulsources() throws SQLException { error_handler_fn errorHandler = new error_handler(); - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of("7", "10", 7, 10), Arguments.of(7, 10, 7, 10), @@ -39,7 +39,7 @@ static Stream IntSpan_mulsources() throws SQLException { static Stream Bound_sources() throws SQLException { error_handler_fn errorHandler = new error_handler(); - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(true,true), Arguments.of(true,false), diff --git a/src/test/java/collections/number/FloatSpanTest.java b/src/test/java/collections/number/FloatSpanTest.java index 39067e615..ee6b140b7 100644 --- a/src/test/java/collections/number/FloatSpanTest.java +++ b/src/test/java/collections/number/FloatSpanTest.java @@ -20,7 +20,7 @@ public class FloatSpanTest { static Stream IntSpan_sources() throws SQLException { error_handler_fn errorHandler = new error_handler(); - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of("(2.5, 5.21)", 2.5f, 5.21f, false, false), Arguments.of("[2.5, 5.21]", 2.5f, 5.21f, true, true) @@ -29,7 +29,7 @@ static Stream IntSpan_sources() throws SQLException { static Stream IntSpan_mulsources() throws SQLException { error_handler_fn errorHandler = new error_handler(); - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of("2.5", "5.21", 2.5f, 5.21f), Arguments.of(2.5f, 5.21f, 2.5f, 5.21f), @@ -39,7 +39,7 @@ static Stream IntSpan_mulsources() throws SQLException { static Stream Bound_sources() throws SQLException { error_handler_fn errorHandler = new error_handler(); - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(true,true), Arguments.of(true,false), diff --git a/src/test/java/collections/number/IntSetTest.java b/src/test/java/collections/number/IntSetTest.java index fa041cb47..b6624ffa1 100644 --- a/src/test/java/collections/number/IntSetTest.java +++ b/src/test/java/collections/number/IntSetTest.java @@ -23,7 +23,7 @@ public class IntSetTest { static Stream IntSet_sources() throws SQLException { error_handler_fn errorHandler = new error_handler(); - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(5, false ), Arguments.of(new IntSet("{5, 10}"), false ) @@ -32,7 +32,7 @@ static Stream IntSet_sources() throws SQLException { static Stream IntSet_distances() throws SQLException { error_handler_fn errorHandler = new error_handler(); - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(5, 2 ), Arguments.of(new IntSet("{5, 10}"), 2 ) diff --git a/src/test/java/collections/number/IntSpanSetTest.java b/src/test/java/collections/number/IntSpanSetTest.java index 04b84a601..478e76044 100644 --- a/src/test/java/collections/number/IntSpanSetTest.java +++ b/src/test/java/collections/number/IntSpanSetTest.java @@ -22,7 +22,7 @@ public class IntSpanSetTest { static Stream IntSpan_sources() throws SQLException { error_handler_fn errorHandler = new error_handler(); - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of("(7, 10)", 8, 10, true, false), Arguments.of("[7, 10]", 7, 11, true, false) @@ -31,7 +31,7 @@ static Stream IntSpan_sources() throws SQLException { static Stream IntSpan_mulsources() throws SQLException { error_handler_fn errorHandler = new error_handler(); - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of("7", "10", 7, 10), Arguments.of(7, 10, 7, 10), @@ -41,7 +41,7 @@ static Stream IntSpan_mulsources() throws SQLException { static Stream Bound_sources() throws SQLException { error_handler_fn errorHandler = new error_handler(); - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(true,true), Arguments.of(true,false), diff --git a/src/test/java/collections/number/IntSpanTest.java b/src/test/java/collections/number/IntSpanTest.java index dd25bf184..5cafeecee 100644 --- a/src/test/java/collections/number/IntSpanTest.java +++ b/src/test/java/collections/number/IntSpanTest.java @@ -20,7 +20,7 @@ public class IntSpanTest { static Stream IntSpan_sources() throws SQLException { error_handler_fn errorHandler = new error_handler(); - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of("(7, 10)", 8, 10, true, false), Arguments.of("[7, 10]", 7, 11, true, false) @@ -29,7 +29,7 @@ static Stream IntSpan_sources() throws SQLException { static Stream IntSpan_mulsources() throws SQLException { error_handler_fn errorHandler = new error_handler(); - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of("7", "10", 7, 10), Arguments.of(7, 10, 7, 10), @@ -39,7 +39,7 @@ static Stream IntSpan_mulsources() throws SQLException { static Stream Bound_sources() throws SQLException { error_handler_fn errorHandler = new error_handler(); - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(true,true), Arguments.of(true,false), diff --git a/src/test/java/collections/time/datesetTest.java b/src/test/java/collections/time/datesetTest.java index d3b9c8c8d..532970b04 100644 --- a/src/test/java/collections/time/datesetTest.java +++ b/src/test/java/collections/time/datesetTest.java @@ -30,7 +30,7 @@ class datesetTest { private final dateset dset2; datesetTest() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); dset = new dateset("{2019-09-25, 2019-09-26, 2019-09-27}"); dset2 = new dateset("{2019-09-08, 2019-09-10}"); } diff --git a/src/test/java/collections/time/datespanTest.java b/src/test/java/collections/time/datespanTest.java index 3040cf175..6c8df5d08 100644 --- a/src/test/java/collections/time/datespanTest.java +++ b/src/test/java/collections/time/datespanTest.java @@ -28,7 +28,7 @@ class datespanTest { private final datespan dspan2; datespanTest() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); dspan = new datespan("[2019-09-25, 2019-09-27]"); dspan2 = new datespan("[2019-09-08, 2019-09-10)"); } diff --git a/src/test/java/collections/time/datespansetTest.java b/src/test/java/collections/time/datespansetTest.java index 9b8584fd2..401cd3523 100644 --- a/src/test/java/collections/time/datespansetTest.java +++ b/src/test/java/collections/time/datespansetTest.java @@ -29,7 +29,7 @@ class datespansetTest { private final datespanset dsset2; datespansetTest() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); dsset = new datespanset("{[2019-09-08, 2019-09-10], [2019-09-11, 2019-09-12]}"); dsset2 = new datespanset("{[2020-09-08, 2020-09-10], [2020-09-11, 2020-09-12]}"); } diff --git a/src/test/java/collections/time/tstzsetTest.java b/src/test/java/collections/time/tstzsetTest.java index c9b080e90..410498542 100644 --- a/src/test/java/collections/time/tstzsetTest.java +++ b/src/test/java/collections/time/tstzsetTest.java @@ -28,7 +28,7 @@ class tstzsetTest { private static Stream times() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new tstzspan("(2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0)"), true), Arguments.of(new tstzspanset("{(2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0), (2021-01-01 00:00:00+0, 2021-01-31 00:00:00+0)}"), true), @@ -40,7 +40,7 @@ private static Stream times() { public void assert_tstzset_equality(tstzset vset, List timestamps){ - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(vset.num_elements(), timestamps.size()); } @@ -48,7 +48,7 @@ public void assert_tstzset_equality(tstzset vset, List timestamps @Test public void testStringConstructor(){ - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); List list = new ArrayList<>(); list.add(LocalDateTime.of(2019, 9, 1, 0, 0,0)); list.add(LocalDateTime.of(2019, 9, 2, 0, 0,0)); @@ -58,7 +58,7 @@ public void testStringConstructor(){ @Test public void testHexwkbConstructor() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); // tstzset tsett = types.collections.time.tstzset.from_hexwkb("012100000040021FFE3402000000B15A26350200"); String hexwkb_string= tset.as_hexwkb(); System.out.println(hexwkb_string); @@ -75,7 +75,7 @@ public void testHexwkbConstructor() throws SQLException { @Test public void testFromAsConstructor() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); tstzset newtset = new tstzset("{2019-09-01 00:00:00+0, 2019-09-02 00:00:00+0, 2019-09-03 00:00:00+0}"); assertEquals(tset.toString(), newtset.toString()); } @@ -83,7 +83,7 @@ public void testFromAsConstructor() throws SQLException { @Test public void testCopyConstructor() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); tstzset tsett = tset; assertEquals(tset.toString(),tsett.toString()); } @@ -91,14 +91,14 @@ public void testCopyConstructor() throws SQLException { @Test public void testStrOutput() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(tset.toString(),"{\"2019-09-01 00:00:00+00\", \"2019-09-02 00:00:00+00\", \"2019-09-03 00:00:00+00\"}"); } @Test public void testTimestampConversion() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); tstzspanset pset = new tstzspanset("{[2019-09-01 00:00:00+00, 2019-09-01 00:00:00+00], [2019-09-02 00:00:00+00, 2019-09-02 00:00:00+00], [2019-09-03 00:00:00+00, 2019-09-03 00:00:00+00]}"); tstzspanset converted = tset.to_spanset(); System.out.println(converted.toString()); @@ -108,7 +108,7 @@ public void testTimestampConversion() throws SQLException { @Test public void testtstzsetConversion() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); tstzspan p = new tstzspan("[2019-09-01 00:00:00+00, 2019-09-03 00:00:00+00]"); tstzspan converted = tset.to_span(); System.out.println(converted.toString()); @@ -118,33 +118,33 @@ public void testtstzsetConversion() throws SQLException { @Test public void testNumTimestamps() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(tset.num_elements(),3); } @Test public void testStartTimestamps() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(tset.start_element(),LocalDateTime.of(2019, 9, 1, 0, 0,0)); } @Test public void testEndTimestamps() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(tset.end_element(),LocalDateTime.of(2019, 9, 3, 0, 0,0)); } @Test public void testHash() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(tset.hash(),527267058); } @Test public void testIsContainedInFunction() throws Exception { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); tstzset tmp_set = new tstzset("{2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0}"); assertFalse(tset.is_contained_in(tmp_set)); } @@ -152,7 +152,7 @@ public void testIsContainedInFunction() throws Exception { @Test public void testOverlapsFunction() throws Exception { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); tstzset tmp_set = new tstzset("{2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0}"); assertFalse(tset.overlaps(tmp_set)); } @@ -160,14 +160,14 @@ public void testOverlapsFunction() throws Exception { @Test public void testIsBeforeFunction() throws Exception { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); tstzset tmp_set = new tstzset("{2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0}"); assertTrue(tset.is_before(tmp_set)); } @Test public void testIsOverOrBeforeFunction() throws Exception { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); tstzset tmp_set = new tstzset("{2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0}"); assertTrue(tset.is_over_or_before(tmp_set)); } @@ -175,21 +175,21 @@ public void testIsOverOrBeforeFunction() throws Exception { @Test public void testIsAfterFunction() throws Exception { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); tstzset tmp_set = new tstzset("{2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0}"); assertFalse(tset.is_after(tmp_set)); } @Test public void testIsOverOrAfterFunction() throws Exception { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); tstzset tmp_set = new tstzset("{2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0}"); assertFalse(tset.is_over_or_after(tmp_set)); } @Test public void testDistanceFunction() throws Exception { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); tstzset tmp_set = new tstzset("{2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0}"); System.out.println(Duration.ofSeconds((long) functions.distance_tstzset_tstzset(tset.get_inner(), tmp_set.get_inner()))); tset.distance(tmp_set); @@ -199,14 +199,14 @@ public void testDistanceFunction() throws Exception { @ParameterizedTest(name="Test intersection method") @MethodSource("times") public void testIntersection(Time other, boolean expected) throws Exception { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); this.tset.intersection(other); } @ParameterizedTest(name="Test union method") @MethodSource("times") public void testUnion(Time other, boolean expected) throws Exception { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); this.tset.union(other); } @@ -214,7 +214,7 @@ public void testUnion(Time other, boolean expected) throws Exception { @ParameterizedTest(name="Test minus method") @MethodSource("times") public void testMinus(Time other, boolean expected) throws Exception { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); this.tset.minus(other); } diff --git a/src/test/java/collections/time/tstzspanTest.java b/src/test/java/collections/time/tstzspanTest.java index 130fe4536..77df3585b 100644 --- a/src/test/java/collections/time/tstzspanTest.java +++ b/src/test/java/collections/time/tstzspanTest.java @@ -44,7 +44,7 @@ class tstzspanTest { static Stream tstzspan_constructor() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of("(2019-09-08 00:00:00+0, 2019-09-10 00:00:00+0)",LocalDateTime.of(2019, 9, 8, 0, 0), LocalDateTime.of(2019, 9, 10, 0, 0), false,false), Arguments.of("[2019-09-08 00:00:00+0, 2019-09-10 00:00:00+0]", LocalDateTime.of(2019, 9, 8, 0, 0), LocalDateTime.of(2019, 9, 10, 0, 0), true,true) @@ -52,21 +52,21 @@ static Stream tstzspan_constructor() throws SQLException { } static Stream tstzspan_constructor2() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of("2019-09-08 00:00:00+0", "2019-09-10 00:00:00+0",LocalDateTime.of(2019, 9, 8, 0, 0), LocalDateTime.of(2019, 9, 10, 0, 0)) ); } static Stream tstzspan_constructor3() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(LocalDateTime.of(2019, 9, 8, 0, 0), LocalDateTime.of(2019, 9, 10, 0, 0), LocalDateTime.of(2019, 9, 8, 0, 0), LocalDateTime.of(2019, 9, 10, 0, 0)) ); } static Stream tstzspan_constructor4() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of("2019-09-08 00:00:00+0", LocalDateTime.of(2019, 9, 10, 0, 0),LocalDateTime.of(2019, 9, 8, 0, 0), LocalDateTime.of(2019, 9, 10, 0, 0)) ); @@ -74,7 +74,7 @@ static Stream tstzspan_constructor4() throws SQLException { static Stream tstzspan_constructor5() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(true,true), Arguments.of(true,false), @@ -84,7 +84,7 @@ static Stream tstzspan_constructor5() throws SQLException { } private static Stream temporals_adjacent() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new tstzspan("(2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0)"), true), Arguments.of(new tstzspanset("{(2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0), (2021-01-01 00:00:00+0, 2021-01-31 00:00:00+0)}"), false), @@ -98,7 +98,7 @@ private static Stream temporals_adjacent() { private static Stream temporals_iscontained() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new tstzspan("(2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0)"), true), Arguments.of(new tstzspanset("{(2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0), (2021-01-01 00:00:00+0, 2021-01-31 00:00:00+0)}"), true), @@ -112,7 +112,7 @@ private static Stream temporals_iscontained() { private static Stream temporals_contains() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new tstzspan("(2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0)"), true), Arguments.of(new tstzspanset("{(2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0), (2021-01-01 00:00:00+0, 2021-01-31 00:00:00+0)}"), false), @@ -126,7 +126,7 @@ private static Stream temporals_contains() { private static Stream temporals_overlaps() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new tstzspan("(2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0)"), true), Arguments.of(new tstzspanset("{(2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0), (2021-01-01 00:00:00+0, 2021-01-31 00:00:00+0)}"), true), @@ -140,7 +140,7 @@ private static Stream temporals_overlaps() { private static Stream temporals_same() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new tstzspan("(2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0)"), true), Arguments.of(new tstzspanset("{(2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0), (2021-01-01 00:00:00+0, 2021-01-31 00:00:00+0)}"), false), @@ -154,7 +154,7 @@ private static Stream temporals_same() { private static Stream temporals_before() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new tstzspan("(2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0)"), false), Arguments.of(new tstzspanset("{(2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0), (2021-01-01 00:00:00+0, 2021-01-31 00:00:00+0)}"), false), @@ -168,7 +168,7 @@ private static Stream temporals_before() { private static Stream temporals_after() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new tstzspan("(2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0)"), false), Arguments.of(new tstzspanset("{(2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0), (2021-01-01 00:00:00+0, 2021-01-31 00:00:00+0)}"), false), @@ -182,7 +182,7 @@ private static Stream temporals_after() { private static Stream temporals_overbefore() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new tstzspan("(2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0)"), true), Arguments.of(new tstzspanset("{(2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0), (2021-01-01 00:00:00+0, 2021-01-31 00:00:00+0)}"), true), @@ -196,7 +196,7 @@ private static Stream temporals_overbefore() { private static Stream temporals_overafter() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new tstzspan("(2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0)"), true), Arguments.of(new tstzspanset("{(2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0), (2021-01-01 00:00:00+0, 2021-01-31 00:00:00+0)}"), true), @@ -210,7 +210,7 @@ private static Stream temporals_overafter() { private static Stream temporals_distance() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new tstzspan("(2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0)"), 0.0), Arguments.of(new tstzspanset("{(2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0), (2021-01-01 00:00:00+0, 2021-01-31 00:00:00+0)}"), 0.0), @@ -221,7 +221,7 @@ private static Stream temporals_distance() { private static Stream intersection() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new tstzspan("(2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0)"), true), Arguments.of(new tstzspanset("{(2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0), (2021-01-01 00:00:00+0, 2021-01-31 00:00:00+0)}"), true) @@ -230,7 +230,7 @@ private static Stream intersection() { private static Stream other() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new tstzspan("(2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0)"), true) ); @@ -261,7 +261,7 @@ public void assert_tstzspan_equality(tstzspan intsp, LocalDateTime lower, LocalD @ParameterizedTest(name = "Test Constructor method") @MethodSource("tstzspan_constructor") public void testtstzspanConstructor(String source, LocalDateTime lower, LocalDateTime upper, boolean lower_inc, boolean upper_inc) throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); tstzspan p = new tstzspan(source); assert_tstzspan_equality(p,lower,upper,lower_inc,upper_inc); } @@ -269,7 +269,7 @@ public void testtstzspanConstructor(String source, LocalDateTime lower, LocalDat @ParameterizedTest(name = "Test Constructor method") @MethodSource("tstzspan_constructor2") public void testtstzspanConstructor2(String lower, String upper, LocalDateTime lowerv, LocalDateTime upperv) throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); tstzspan p = new tstzspan(lower,upper); assert_tstzspan_equality(p,lowerv,upperv,true,false); } @@ -278,7 +278,7 @@ public void testtstzspanConstructor2(String lower, String upper, LocalDateTime l @ParameterizedTest(name = "Test Constructor method") @MethodSource("tstzspan_constructor3") public void testtstzspanConstructor3(LocalDateTime lower, LocalDateTime upper, LocalDateTime lowerv, LocalDateTime upperv) throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); tstzspan p = new tstzspan(lower,upper); assert_tstzspan_equality(p,lowerv,upperv,true,false); } @@ -287,14 +287,14 @@ public void testtstzspanConstructor3(LocalDateTime lower, LocalDateTime upper, L @ParameterizedTest(name = "Test Constructor method") @MethodSource("tstzspan_constructor4") public void testtstzspanConstructor4(String lower, LocalDateTime upper, LocalDateTime lowerv, LocalDateTime upperv) throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); tstzspan p = new tstzspan(lower,upper); assert_tstzspan_equality(p,lowerv,upperv,true,false); } @Test public void testtstzspanBounds() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); tstzspan p = new tstzspan("2019-09-08 00:00:00+0", "2019-09-10 00:00:00+0"); assert_tstzspan_equality(p, LocalDateTime.of(2019, 9, 8, 0, 0), LocalDateTime.of(2019, 9, 10, 0, 0),true,false); } @@ -303,7 +303,7 @@ public void testtstzspanBounds() throws SQLException { @ParameterizedTest(name="Test Bound Inclusivity") @MethodSource("tstzspan_constructor5") public void testtstzspanIncluBounds(boolean lower,boolean upper) throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); tstzspan p = new tstzspan("2019-09-08 00:00:00+0", "2019-09-10 00:00:00+0",lower,upper); assert_tstzspan_equality(p, LocalDateTime.of(2019, 9, 8, 0, 0), LocalDateTime.of(2019, 9, 10, 0, 0),lower,upper); } @@ -311,7 +311,7 @@ public void testtstzspanIncluBounds(boolean lower,boolean upper) throws SQLExcep @Test public void testHexwkbConstructor() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); // tstzspan p = types.collections.time.tstzspan.from_hexwkb("012100000040021FFE3402000000B15A26350200"); String hexwkb_string= tstzspan.as_hexwkb(); // System.out.println(hexwkb_string); @@ -322,13 +322,13 @@ public void testHexwkbConstructor() throws SQLException { @Test public void testFromAsConstructor() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertNotEquals(this.tstzspan,new tstzspan("(2019-09-08 00:00:00+00, 2019-09-10 00:00:00+00)")); } @Test public void testCopyConstructor() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); tstzspan other = this.tstzspan.copy(); assertNotEquals(this.tstzspan, other); assertEquals(other.toString(), this.tstzspan.toString()); @@ -336,14 +336,14 @@ public void testCopyConstructor() throws SQLException { @Test public void testtstzspanOut() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(this.tstzspan.toString(), "(2019-09-08 00:00:00+00, 2019-09-10 00:00:00+00)"); } @Test public void testTotstzspanSet() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); tstzspanset pset = tstzspan.to_spanset(); System.out.println(pset.toString()); String spanset_string= pset.toString(); @@ -355,7 +355,7 @@ public void testTotstzspanSet() throws SQLException { @Test public void testUpperAccessors() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(this.tstzspan.lower(), LocalDateTime.of(2019, 9, 8, 0, 0)); assertEquals(this.tstzspan2.lower(), LocalDateTime.of(2019, 9, 8, 2, 3)); } @@ -363,21 +363,21 @@ public void testUpperAccessors() throws SQLException { @Test public void testLowerAccessors() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(this.tstzspan.upper(), LocalDateTime.of(2019, 9, 10, 0, 0)); assertEquals(this.tstzspan2.upper(), LocalDateTime.of(2019, 9, 10, 2, 3)); } @Test public void testLowerIncAccessors() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertFalse(this.tstzspan.lower_inc()); assertTrue(this.tstzspan2.lower_inc()); } @Test public void testUpperIncAccessors() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertFalse(this.tstzspan.upper_inc()); assertTrue(this.tstzspan2.upper_inc()); } @@ -385,7 +385,7 @@ public void testUpperIncAccessors() throws SQLException { @Test public void testDurationInSeconds() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); // System.out.println(tstzspan.toString()); types.collections.time.tstzspan tst= new tstzspan("(2019-09-08 00:00:00+00, 2022-10-25 00:05:00+00)"); // System.out.println(tst.duration()); @@ -399,7 +399,7 @@ public void testDurationInSeconds() throws SQLException { // @Test // public void testHash() throws SQLException { -// functions.meos_initialize("UTC", errorHandler); +// functions.meos_initialize(); // assertEquals(this.tstzspan.hash(), 1164402929); // } @@ -407,7 +407,7 @@ public void testDurationInSeconds() throws SQLException { @ParameterizedTest(name="Test Adjacency method") @MethodSource("temporals_adjacent") public void testAdjacency(TemporalObject other, boolean expected) throws Exception { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); STBox st= new STBox(functions.tstzspan_to_stbox(p.get_inner())); System.out.println(st.toString(15)); assertEquals(this.p.is_adjacent(other), expected); @@ -416,7 +416,7 @@ public void testAdjacency(TemporalObject other, boolean expected) throws Excepti @ParameterizedTest(name="Test is contained in method") @MethodSource("temporals_iscontained") public void testIsContainedIn(TemporalObject other, boolean expected) throws Exception { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(this.p.is_contained_in(other), expected); } @@ -425,7 +425,7 @@ public void testIsContainedIn(TemporalObject other, boolean expected) throws Exc @ParameterizedTest(name="Test contains method") @MethodSource("temporals_contains") public void testContains(TemporalObject other, boolean expected) throws Exception { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(this.p.contains(other), expected); } @@ -434,7 +434,7 @@ public void testContains(TemporalObject other, boolean expected) throws Exceptio @ParameterizedTest(name="Test overlaps method") @MethodSource("temporals_overlaps") public void testOverlaps(TemporalObject other, boolean expected) throws Exception { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(this.p.overlaps(other), expected); } @@ -442,7 +442,7 @@ public void testOverlaps(TemporalObject other, boolean expected) throws Exceptio @ParameterizedTest(name="Test is same method") @MethodSource("temporals_same") public void testIsSame(TemporalObject other, boolean expected) throws Exception { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(this.p.is_same(other), expected); } @@ -451,7 +451,7 @@ public void testIsSame(TemporalObject other, boolean expected) throws Exception @ParameterizedTest(name="Test is before method") @MethodSource("temporals_before") public void testIsBefore(TemporalObject other, boolean expected) throws Exception { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(this.p.is_before(other), expected); } @@ -460,7 +460,7 @@ public void testIsBefore(TemporalObject other, boolean expected) throws Exceptio @ParameterizedTest(name="Test is after method") @MethodSource("temporals_after") public void testIsAfter(TemporalObject other, boolean expected) throws Exception { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(this.p.is_after(other), expected); } @@ -468,7 +468,7 @@ public void testIsAfter(TemporalObject other, boolean expected) throws Exception @ParameterizedTest(name="Test is over or before method") @MethodSource("temporals_overbefore") public void testIsOverOrBefore(TemporalObject other, boolean expected) throws Exception { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(this.p.is_over_or_before(other), expected); } @@ -477,7 +477,7 @@ public void testIsOverOrBefore(TemporalObject other, boolean expected) throws Ex @ParameterizedTest(name="Test is over or after method") @MethodSource("temporals_overafter") public void testIsOverOrAfter(TemporalObject other, boolean expected) throws Exception { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); STBox st= new STBox(functions.tstzspan_to_stbox(p.get_inner())); System.out.println(st.toString(15)); assertEquals(this.p.is_over_or_after(other), expected); @@ -489,7 +489,7 @@ public void testIsOverOrAfter(TemporalObject other, boolean expected) throws Exc @ParameterizedTest(name="Test distance method") @MethodSource("temporals_distance") public void testDistance(TemporalObject other, double expected) throws Exception { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); STBox st= new STBox("STBOX ZT(((1.0, 2.0, 3.0),(4.0, 5.0, 6.0)),[2001-01-01, 2001-01-02])"); double dist= p.distance(st); System.out.println(dist); @@ -502,21 +502,21 @@ public void testDistance(TemporalObject other, double expected) throws Exception @ParameterizedTest(name="Test intersection method") @MethodSource("intersection") public void testIntersection(Time other, boolean expected) throws Exception { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); this.p.intersection(other); } @ParameterizedTest(name="Test minus method") @MethodSource("intersection") public void testMinus(Time other, boolean expected) throws Exception { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); this.p.minus(other); } @ParameterizedTest(name="Test union method") @MethodSource("intersection") public void testUnion(Time other, boolean expected) throws Exception { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); this.p.union(other); } @@ -525,7 +525,7 @@ public void testUnion(Time other, boolean expected) throws Exception { @ParameterizedTest(name="Test equal method") @MethodSource("other") public void testEqual(Time t) throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertFalse(this.tstzspan.equals(t)); } @@ -533,35 +533,35 @@ public void testEqual(Time t) throws SQLException { @ParameterizedTest(name="Test ne method") @MethodSource("other") public void testNotEqual(Time t) throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertTrue(this.tstzspan.notEquals(t)); } @ParameterizedTest(name="Test lt method") @MethodSource("other") public void testLessThan(Time t) throws SQLException, OperationNotSupportedException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertTrue(this.tstzspan.lessThan(t)); } @ParameterizedTest(name="Test le method") @MethodSource("other") public void testLessThanOrEqual(Time t) throws SQLException, OperationNotSupportedException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertTrue(this.tstzspan.lessThanOrEqual(t)); } @ParameterizedTest(name="Test gt method") @MethodSource("other") public void testGreaterThan(Time t) throws SQLException, OperationNotSupportedException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertTrue(this.tstzspan.greaterThan(t)); } @ParameterizedTest(name="Test ge method") @MethodSource("other") public void testGreaterThanOrEqual(Time t) throws SQLException, OperationNotSupportedException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertFalse(this.tstzspan.greaterThanOrEqual(t)); } diff --git a/src/test/java/collections/time/tstzspansetTest.java b/src/test/java/collections/time/tstzspansetTest.java index 12e4d8819..88ce16bd2 100644 --- a/src/test/java/collections/time/tstzspansetTest.java +++ b/src/test/java/collections/time/tstzspansetTest.java @@ -37,7 +37,7 @@ class tstzspansetTest { static error_handler_fn errorHandler= new error_handler(); private static Stream temporals_adjacent() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new tstzspan("(2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0)"), false), Arguments.of(new tstzspanset("{(2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0), (2021-01-01 00:00:00+0, 2021-01-31 00:00:00+0)}"), false), @@ -51,7 +51,7 @@ private static Stream temporals_adjacent() { private static Stream temporals_iscontained() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new tstzspan("(2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0)"), false), Arguments.of(new tstzspanset("{(2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0), (2021-01-01 00:00:00+0, 2021-01-31 00:00:00+0)}"), false), @@ -65,7 +65,7 @@ private static Stream temporals_iscontained() { private static Stream temporals_contains() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new tstzspan("(2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0)"), false), Arguments.of(new tstzspanset("{(2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0), (2021-01-01 00:00:00+0, 2021-01-31 00:00:00+0)}"), false), @@ -79,7 +79,7 @@ private static Stream temporals_contains() { private static Stream temporals_overlaps() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new tstzspan("(2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0)"), false), Arguments.of(new tstzspanset("{(2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0), (2021-01-01 00:00:00+0, 2021-01-31 00:00:00+0)}"), false), @@ -93,7 +93,7 @@ private static Stream temporals_overlaps() { private static Stream temporals_same() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new tstzspan("(2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0)"), false), Arguments.of(new tstzspanset("{(2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0), (2021-01-01 00:00:00+0, 2021-01-31 00:00:00+0)}"), false), @@ -107,7 +107,7 @@ private static Stream temporals_same() { private static Stream temporals_before() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new tstzspan("(2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0)"), true), Arguments.of(new tstzspanset("{(2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0), (2021-01-01 00:00:00+0, 2021-01-31 00:00:00+0)}"), true), @@ -121,7 +121,7 @@ private static Stream temporals_before() { private static Stream temporals_after() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new tstzspan("(2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0)"), false), Arguments.of(new tstzspanset("{(2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0), (2021-01-01 00:00:00+0, 2021-01-31 00:00:00+0)}"), false), @@ -135,7 +135,7 @@ private static Stream temporals_after() { private static Stream temporals_overbefore() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new tstzspan("(2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0)"), true), Arguments.of(new tstzspanset("{(2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0), (2021-01-01 00:00:00+0, 2021-01-31 00:00:00+0)}"), true), @@ -149,7 +149,7 @@ private static Stream temporals_overbefore() { private static Stream temporals_overafter() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new tstzspan("(2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0)"), false), Arguments.of(new tstzspanset("{(2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0), (2021-01-01 00:00:00+0, 2021-01-31 00:00:00+0)}"), false), @@ -163,7 +163,7 @@ private static Stream temporals_overafter() { private static Stream intersection() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new tstzspan("(2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0)"), true), Arguments.of(new tstzspanset("{(2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0), (2021-01-01 00:00:00+0, 2021-01-31 00:00:00+0)}"), true) @@ -171,7 +171,7 @@ private static Stream intersection() { } private static Stream other() { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of(new tstzspanset("{(2020-01-01 00:00:00+0, 2020-01-31 00:00:00+0), (2021-01-01 00:00:00+0, 2021-01-31 00:00:00+0)}"), true) ); @@ -186,14 +186,14 @@ public void assert_tstzspanset_equality(tstzspanset pset, List plist){ @Test public void testStringConstructor(){ - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); System.out.println(pset.toString()); assert_tstzspanset_equality(this.pset,null); } @Test public void testtstzspansetListConstructor(){ - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); List lst = new ArrayList(); lst.add(new tstzspan("[2019-09-01, 2019-09-02]")); lst.add(new tstzspan("[2019-09-03, 2019-09-04]")); @@ -205,7 +205,7 @@ public void testtstzspansetListConstructor(){ @Test public void testCopyConstructor(){ - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); tstzspanset new_pset = new tstzspanset(pset.copy()); assertEquals(this.pset.toString(),new_pset.toString()); } @@ -213,21 +213,21 @@ public void testCopyConstructor(){ @Test public void testTotstzset(){ - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(this.pset.to_period().toString(), new tstzspan("[2019-09-01, 2019-09-04]").toString()); } @Test public void testNumTimestamps(){ - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(this.pset.num_timestamps(),4); assertEquals(this.pset2.num_timestamps(),3); } @Test public void testStartTimestamps(){ - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(this.pset.start_timestamp(), LocalDateTime.of(2019,9,1,0,0,0)); assertEquals(this.pset2.start_timestamp(),LocalDateTime.of(2019,9,1,0,0,0)); } @@ -235,7 +235,7 @@ public void testStartTimestamps(){ @Test public void testEndTimestamps(){ - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(this.pset.end_timestamp(),LocalDateTime.of(2019,9,4,0,0,0)); assertEquals(this.pset2.end_timestamp(),LocalDateTime.of(2019,9,4,0,0,0)); } @@ -243,7 +243,7 @@ public void testEndTimestamps(){ @Test public void testNumtstzsets(){ - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(this.pset.num_periods(),2); assertEquals(this.pset2.num_periods(),2); } @@ -251,14 +251,14 @@ public void testNumtstzsets(){ @Test public void testStarttstzset(){ - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(this.pset.start_period().toString(),new tstzspan("[2019-09-01 00:00:00+00, 2019-09-02 00:00:00+00]").toString()); } @Test public void testEndtstzset(){ - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(this.pset.end_period().toString(),new tstzspan("[2019-09-03 00:00:00+00, 2019-09-04 00:00:00+00]").toString()); } @@ -266,7 +266,7 @@ public void testEndtstzset(){ // @Test // public void testHash(){ -// functions.meos_initialize("UTC", errorHandler); +// functions.meos_initialize(); // assertEquals(this.pset.hash(),552347465); // } @@ -274,14 +274,14 @@ public void testEndtstzset(){ @ParameterizedTest(name="Test Adjacency method") @MethodSource("temporals_adjacent") public void testAdjacency(TemporalObject other, boolean expected) throws Exception { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(this.pset.is_adjacent(other), expected); } @ParameterizedTest(name="Test is contained in method") @MethodSource("temporals_iscontained") public void testIsContainedIn(TemporalObject other, boolean expected) throws Exception { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(this.pset.is_contained_in(other), expected); } @@ -290,7 +290,7 @@ public void testIsContainedIn(TemporalObject other, boolean expected) throws Exc @ParameterizedTest(name="Test contains method") @MethodSource("temporals_contains") public void testContains(TemporalObject other, boolean expected) throws Exception { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(this.pset.contains(other), expected); } @@ -299,7 +299,7 @@ public void testContains(TemporalObject other, boolean expected) throws Exceptio @ParameterizedTest(name="Test overlaps method") @MethodSource("temporals_overlaps") public void testOverlaps(TemporalObject other, boolean expected) throws Exception { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(this.pset.overlaps(other), expected); } @@ -307,7 +307,7 @@ public void testOverlaps(TemporalObject other, boolean expected) throws Exceptio @ParameterizedTest(name="Test is same method") @MethodSource("temporals_same") public void testIsSame(TemporalObject other, boolean expected) throws Exception { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(this.pset.is_same(other), expected); } @@ -316,7 +316,7 @@ public void testIsSame(TemporalObject other, boolean expected) throws Exception @ParameterizedTest(name="Test is before method") @MethodSource("temporals_before") public void testIsBefore(TemporalObject other, boolean expected) throws Exception { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(this.pset.is_before(other), expected); } @@ -325,7 +325,7 @@ public void testIsBefore(TemporalObject other, boolean expected) throws Exceptio @ParameterizedTest(name="Test is after method") @MethodSource("temporals_after") public void testIsAfter(TemporalObject other, boolean expected) throws Exception { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(this.pset.is_after(other), expected); } @@ -333,7 +333,7 @@ public void testIsAfter(TemporalObject other, boolean expected) throws Exception @ParameterizedTest(name="Test is over or before method") @MethodSource("temporals_overbefore") public void testIsOverOrBefore(TemporalObject other, boolean expected) throws Exception { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(this.pset.is_over_or_before(other), expected); } @@ -342,7 +342,7 @@ public void testIsOverOrBefore(TemporalObject other, boolean expected) throws Ex @ParameterizedTest(name="Test is over or after method") @MethodSource("temporals_overafter") public void testIsOverOrAfter(TemporalObject other, boolean expected) throws Exception { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(this.pset.is_over_or_after(other), expected); } @@ -352,21 +352,21 @@ public void testIsOverOrAfter(TemporalObject other, boolean expected) throws Exc @ParameterizedTest(name="Test intersection method") @MethodSource("intersection") public void testIntersection(Time other, boolean expected) throws Exception { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); this.pset.intersection(other); } @ParameterizedTest(name="Test minus method") @MethodSource("intersection") public void testMinus(Time other, boolean expected) throws Exception { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); this.pset.minus(other); } @ParameterizedTest(name="Test union method") @MethodSource("intersection") public void testUnion(Time other, boolean expected) throws Exception { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); this.pset.union(other); } @@ -374,7 +374,7 @@ public void testUnion(Time other, boolean expected) throws Exception { @ParameterizedTest(name="Test equal method") @MethodSource("other") public void testEqual(Time t) throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertNotEquals(this.pset, t); } @@ -382,35 +382,35 @@ public void testEqual(Time t) throws SQLException { @ParameterizedTest(name="Test ne method") @MethodSource("other") public void testNotEqual(Time t) throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertTrue(this.pset.notEquals(t)); } @ParameterizedTest(name="Test lt method") @MethodSource("other") public void testLessThan(Time t) throws SQLException, OperationNotSupportedException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertTrue(this.pset.lessThan(t)); } @ParameterizedTest(name="Test le method") @MethodSource("other") public void testLessThanOrEqual(Time t) throws SQLException, OperationNotSupportedException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertTrue(this.pset.lessThanOrEqual(t)); } @ParameterizedTest(name="Test gt method") @MethodSource("other") public void testGreaterThan(Time t) throws SQLException, OperationNotSupportedException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertTrue(this.pset.greaterThan(t)); } @ParameterizedTest(name="Test ge method") @MethodSource("other") public void testGreaterThanOrEqual(Time t) throws SQLException, OperationNotSupportedException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertFalse(this.pset.greaterThanOrEqual(t)); } diff --git a/src/test/java/temporal/InterpolationTest.java b/src/test/java/temporal/InterpolationTest.java index a102aabbb..3a704326c 100644 --- a/src/test/java/temporal/InterpolationTest.java +++ b/src/test/java/temporal/InterpolationTest.java @@ -24,7 +24,7 @@ public class InterpolationTest { error_handler_fn errorHandler = new error_handler(); Stream TInterp() throws SQLException { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); return Stream.of( Arguments.of("discrete", TInterpolation.DISCRETE), Arguments.of("linear", TInterpolation.LINEAR), @@ -37,7 +37,7 @@ Stream TInterp() throws SQLException { @ParameterizedTest(name = "Test TInterpolation class.") @MethodSource("TInterp") public void testFromString(String base, TInterpolation expected) { - functions.meos_initialize("UTC", errorHandler); + functions.meos_initialize(); assertEquals(TInterpolation.fromString(base),expected); } } From 2f7efa1c1086cd5193a2f749cae56501f6fabbe6 Mon Sep 17 00:00:00 2001 From: Esteban Zimanyi Date: Mon, 11 May 2026 07:08:41 +0200 Subject: [PATCH 3/8] feat(generator): lower Datum + MeosType + 10 private-header residuals MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two small changes that, combined, eliminate the entire MobilitySpark MeosNative.java supplement (was 81 lines / 10 declarations after the prior trim). 1. FunctionsGenerator equivalentTypes additions: Datum -> long (= uint64; opaque payload — callers pack via Double.doubleToLongBits / .longValue()) MeosType -> int (enum) Effect on the existing public surface: one additional binding (trgeo_restrict_value, the lone Datum-using extern in current meos.h that was previously skipped). No other changes. 2. Append 10 extern declarations to the amalgamated meos.h. These functions are exported from libmeos.so but live in MEOS private headers (meos_internal.h / meos_internal_geo.h / temporal/temporal.h / temporal/meos_catalog.h) — they are well-known to MobilitySpark and other JVM consumers but JMEOS could not pick them up without either lowering the private-header types or asking the consumer to re-bind them via JNR-FFI. The 10 added decls: mobilitydb_version mobilitydb_full_version temporal_mem_size temptype_basetype temporal_values_p set_make_free tnumber_value_split tnumber_value_time_split tnumber_value_time_boxes tbox_get_value_time_tile 3. Rebuilt jar/JMEOS.jar (478 KB). The post-regen wrapper-fix script is also extended to cover all 28 broken bool-out-param wrappers (was 18 stbox/tbox accessors only). The classification keeps the 10 'T **result' wrappers as INDIR (still does getPointer(0)) and rewrites the 18 'T *result' wrappers to return the value buffer directly: bearing_point_point bigintset_value_n dateset_value_n datespanset_date_n floatset_value_n geom_azimuth intset_value_n tbool_value_n temporal_timestamptz_n tfloat_value_n tint_value_n tpoint_direction tstzset_value_n tstzspanset_timestamptz_n tboxfloat_xmax/_xmin tboxint_xmax/_xmin The 18 stbox/tbox accessors fixed in the prior commit are unchanged (same patch criterion). MobilitySpark consumer test (under estebanzimanyi/MobilitySpark): 907 / 907 green; MeosNative.java deleted. --- jar/JMEOS.jar | Bin 476829 -> 478412 bytes src/main/java/builder/FunctionsGenerator.java | 2 + src/main/java/builder/resources/meos.h | 10 +++ src/main/java/functions/functions.java | 74 ++++++++++++++++++ 4 files changed, 86 insertions(+) diff --git a/jar/JMEOS.jar b/jar/JMEOS.jar index 764c62395914dd2cf31142db952eb448e87b2291..d126a29c865f46a62ef7c64d6f5bbfc0a50c7ee2 100644 GIT binary patch delta 108214 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 z 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%0Dd_Va1L>gmw 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 diff --git a/src/main/java/builder/FunctionsGenerator.java b/src/main/java/builder/FunctionsGenerator.java index 5249ffd7f..554160312 100644 --- a/src/main/java/builder/FunctionsGenerator.java +++ b/src/main/java/builder/FunctionsGenerator.java @@ -184,6 +184,8 @@ private static HashMap buildEquivalentTypes() { types.put("size_t", "long"); types.put("interpType", "int"); // enum in C types.put("RTreeSearchOp", "int"); // enum in C + types.put("MeosType", "int"); // enum in C (raw int; callers do the lowering) + types.put("Datum", "long"); // = uint64; opaque payload; callers pack via Double.doubleToLongBits / .longValue types.put("error_handler_fn", "Pointer"); // function pointer in C //types.put("\\char **","Pointer"); diff --git a/src/main/java/builder/resources/meos.h b/src/main/java/builder/resources/meos.h index 24d18d6e2..825da0adb 100644 --- a/src/main/java/builder/resources/meos.h +++ b/src/main/java/builder/resources/meos.h @@ -4067,3 +4067,13 @@ extern int acovers_geo_tgeo(const GSERIALIZED *gs, const Temporal *temp); extern int acovers_tgeo_geo(const Temporal *temp, const GSERIALIZED *gs); extern int acovers_tgeo_tgeo(const Temporal *temp1, const Temporal *temp2); extern void meos_initialize_noexit_error_handler(void); +extern char *mobilitydb_version(void); +extern char *mobilitydb_full_version(void); +extern int temporal_mem_size(const Temporal *temp); +extern MeosType temptype_basetype(MeosType type); +extern Datum *temporal_values_p(const Temporal *temp, int *count); +extern Set *set_make_free(Datum *values, int count, MeosType basetype, bool order); +extern Temporal **tnumber_value_split(const Temporal *temp, Datum vsize, Datum vorigin, Datum **bins, int *count); +extern Temporal **tnumber_value_time_split(const Temporal *temp, Datum size, const Interval *duration, Datum vorigin, TimestampTz torigin, Datum **value_bins, TimestampTz **time_bins, int *count); +extern TBox *tnumber_value_time_boxes(const Temporal *temp, Datum vsize, const Interval *duration, Datum vorigin, TimestampTz torigin, int *count); +extern TBox *tbox_get_value_time_tile(Datum value, TimestampTz t, Datum vsize, const Interval *duration, Datum vorigin, TimestampTz torigin, MeosType basetype, MeosType spantype); diff --git a/src/main/java/functions/functions.java b/src/main/java/functions/functions.java index efa110770..2c06830fb 100644 --- a/src/main/java/functions/functions.java +++ b/src/main/java/functions/functions.java @@ -4380,6 +4380,26 @@ public interface MeosLibrary { void meos_initialize_noexit_error_handler(); + String mobilitydb_version(); + + String mobilitydb_full_version(); + + int temporal_mem_size(Pointer temp); + + int temptype_basetype(int type); + + Pointer temporal_values_p(Pointer temp, Pointer count); + + Pointer set_make_free(Pointer values, int count, int basetype, boolean order); + + Pointer tnumber_value_split(Pointer temp, long vsize, long vorigin, Pointer bins, Pointer count); + + Pointer tnumber_value_time_split(Pointer temp, long size, Pointer duration, long vorigin, long torigin, Pointer value_bins, Pointer time_bins, Pointer count); + + Pointer tnumber_value_time_boxes(Pointer temp, long vsize, Pointer duration, long vorigin, long torigin, Pointer count); + + Pointer tbox_get_value_time_tile(long value, long t, long vsize, Pointer duration, long vorigin, long torigin, int basetype, int spantype); + } @SuppressWarnings("unused") @@ -15639,4 +15659,58 @@ public static int acovers_tgeo_tgeo(Pointer temp1, Pointer temp2) { public static void meos_initialize_noexit_error_handler() { MeosLibrary.meos.meos_initialize_noexit_error_handler(); } + + @SuppressWarnings("unused") + public static String mobilitydb_version() { + return MeosLibrary.meos.mobilitydb_version(); + } + + @SuppressWarnings("unused") + public static String mobilitydb_full_version() { + return MeosLibrary.meos.mobilitydb_full_version(); + } + + @SuppressWarnings("unused") + public static int temporal_mem_size(Pointer temp) { + return MeosLibrary.meos.temporal_mem_size(temp); + } + + @SuppressWarnings("unused") + public static int temptype_basetype(int type) { + return MeosLibrary.meos.temptype_basetype(type); + } + + @SuppressWarnings("unused") + public static Pointer temporal_values_p(Pointer temp, Pointer count) { + return MeosLibrary.meos.temporal_values_p(temp, count); + } + + @SuppressWarnings("unused") + public static Pointer set_make_free(Pointer values, int count, int basetype, boolean order) { + return MeosLibrary.meos.set_make_free(values, count, basetype, order); + } + + @SuppressWarnings("unused") + public static Pointer tnumber_value_split(Pointer temp, long vsize, long vorigin, Pointer bins, Pointer count) { + return MeosLibrary.meos.tnumber_value_split(temp, vsize, vorigin, bins, count); + } + + @SuppressWarnings("unused") + public static Pointer tnumber_value_time_split(Pointer temp, long size, Pointer duration, long vorigin, OffsetDateTime torigin, Pointer value_bins, Pointer time_bins, Pointer count) { + var torigin_new = torigin.toEpochSecond(); + return MeosLibrary.meos.tnumber_value_time_split(temp, size, duration, vorigin, torigin_new, value_bins, time_bins, count); + } + + @SuppressWarnings("unused") + public static Pointer tnumber_value_time_boxes(Pointer temp, long vsize, Pointer duration, long vorigin, OffsetDateTime torigin, Pointer count) { + var torigin_new = torigin.toEpochSecond(); + return MeosLibrary.meos.tnumber_value_time_boxes(temp, vsize, duration, vorigin, torigin_new, count); + } + + @SuppressWarnings("unused") + public static Pointer tbox_get_value_time_tile(long value, OffsetDateTime t, long vsize, Pointer duration, long vorigin, OffsetDateTime torigin, int basetype, int spantype) { + var t_new = t.toEpochSecond(); + var torigin_new = torigin.toEpochSecond(); + return MeosLibrary.meos.tbox_get_value_time_tile(value, t_new, vsize, duration, vorigin, torigin_new, basetype, spantype); + } } \ No newline at end of file From abcb28f7581f9360b587eb658c29a95e98a7a503 Mon Sep 17 00:00:00 2001 From: Esteban Zimanyi Date: Mon, 11 May 2026 07:44:23 +0200 Subject: [PATCH 4/8] feat(regen): commit pipeline scripts + smoke test; drop 2 missing externs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit promotes the regen pipeline from tribal knowledge in a session memory note to checked-in scripts, and adds a JUnit test that would have caught yesterday's getPointer(0) wrapper bug. scripts/amalgamate_meos_h.sh Builds src/main/java/builder/resources/meos.h by concatenating the 8 current MEOS public headers and appending extern decls for symbols that exist in libmeos.so but live in private headers (meos_internal.h, temporal/temporal.h, temporal/meos_catalog.h) the amalgam excludes on purpose. Two previous decls dropped because the symbols are not in current libmeos.so: - acovers_tgeo_tgeo: declared 'inline int' in tgeo_spatialrels.c so the compiler does not emit it as an exported symbol - meos_initialize_noexit_error_handler: removed from MEOS source in ae43d2f4a (the JSONB integration commit); MobilitySpark uses a reflective fallback to call it when present scripts/post_regen_patch.py Idempotent post-process for the auto-generated functions.java: 1. rtree_search / rtree_search_temporal — the generator emits a malformed wrapper for these (the C signature is int-return with MeosArray *result, not bool-return with a value out-param); rewrite both to a straight delegation taking a caller-supplied Pointer for the result. 2. bool foo(args, T *result) vs bool foo(args, T **result) — the generator emits the same wrapper shape for both, with a spurious getPointer(0) indirection at the end. For DIRECT (T *result, 18 cases) the indirection turns the value buffer into garbage (caller's getDouble(0) reads the address as IEEE bits and crashes Unsafe_GetDouble with SIGSEGV). For INDIR (T **result, 10 cases) the indirection is correct. Classify by name and flip the DIRECT cases to return the buffer directly. scripts/regenerate.sh End-to-end orchestrator: amalgamate -> mvn compile -> extractor -> generator -> patcher. Run as scripts/regenerate.sh /path/to/MobilityDB Intentionally NOT wired into the default mvn lifecycle — most users consume JMEOS without regenerating; folding the pipeline into 'mvn package' would force every consumer to clone MobilityDB plus run a python script. src/test/java/regen/RegenWrapperSanityTest.java Two end-to-end smoke tests, one DIRECT (stbox_xmin returns 1.5 for STBOX X((1.5,2.5),(3.5,4.5))) and one INDIR (ttext_value_n returns the text* the caller can pass to text_out). If a future MEOS bump adds a new bool-out function and the patcher classifies it wrongly (or misses it), one of these two cases will fail. Runs only with -DskipTests=false (matches existing test suite convention which keeps surefire skipped by default for libmeos.so reasons). Verified manually with a standalone main against the rebuilt jar: DIRECT stbox_xmin → 1.500: OK INDIR ttext_value_n → "hello": OK Refreshed jar/JMEOS.jar with the new amalgam + post-regen patches. --- jar/JMEOS.jar | Bin 478412 -> 478305 bytes scripts/amalgamate_meos_h.sh | 66 ++++++++ scripts/post_regen_patch.py | 151 ++++++++++++++++++ scripts/regenerate.sh | 51 ++++++ src/main/java/builder/resources/meos.h | 2 +- src/main/java/functions/functions.java | 14 +- .../java/regen/RegenWrapperSanityTest.java | 98 ++++++++++++ 7 files changed, 374 insertions(+), 8 deletions(-) create mode 100755 scripts/amalgamate_meos_h.sh create mode 100755 scripts/post_regen_patch.py create mode 100755 scripts/regenerate.sh create mode 100644 src/test/java/regen/RegenWrapperSanityTest.java diff --git a/jar/JMEOS.jar b/jar/JMEOS.jar index d126a29c865f46a62ef7c64d6f5bbfc0a50c7ee2..2d751db4eda187ea7fdebb6271c2fd0750db065b 100644 GIT binary patch delta 121470 zcmY(pWmI3!4?c*yyXyzn;!bgQcX#(ffr}J(cXxO90>$0ENTIm9ZNLBD?w;K@d2TY9 z+V=G-Kc8N|Ek#7N3=kWdI8kobx}>hXAGZbHPF;D@m3+n$wYJy_= zZ^Itc|6vOQ&HSIn1ASPE`;=XiFvoCt87m-|+|gUN=qFzFka$oKqS*{rDK` zCU)C>m)Hb0+dt#0gNiG&VMbw+f?WxdjmV!fk(7>+9)X)UQ7@5bzwCZeN$fBp ze6eyP{I{KGJ4*klZBzGGFMM zqG{L=u}|06;@$v%lCrb9mD@M~3By`!5c3UJ#qhnWx<&5MHK^T^D?M-CCI$0p0e2Vt zMyb+dX8ZE<84!-x2_evixW3H3f@RsNn^*5)``%qnRJZU_{qeE<*vH&jG1iw`=arNi zL!U>QJR}FWBOkMF;jURLty}QDm$&x@94E%;C5uptb1UqdNI17SNQaW9bT0P;y_*h3 ze53O)2II7WQ#$GIZNptTsDvNAis0>UXJs&TI}&NUph0Ge)7PdS+A~|h0n=Ssg{uJS zSMr93n+%cX!s;lxrI)>Ssx;O(2nxb=1%k3~h9Lu>#|>l(mjxpJ3yR*+Px}*!Ot&o z7ARx7W&ulDomF5J-DuLOyS}PXmBKMCFdo7NMG$%=UVdQzM8DS_fjB7bDITH~(&*b# zT0;VaG=!Oa+iLTXqrzH#p?;bw%59GQWMI}ix1jxKrlq1Z=LxqMSxy@gD zdTdjOrOeXEr&Wz5a0m26Bec&tb^BTW`MD#!jD6daGsKG?f7KiuR|MIX^c{iCf4e^oj|Wq*uZguX5TGti*CYim;0?|?AoYy z#PN-0`RwzjHHrM4xg4qyKQR#D_k_uqSOBkHII(N-Hh6zL({_6OY~?R}aGYfR@pd&b zgZk-`^8)z!m|Fe~`@BvA>=!GNBTngQTbZzg6+U88Y~D?JIw^)-%^8LcL2z~lsU5=_ zP5v~ML^4>KGr|+U4}uX?*KBm}4VbcCq=g;jLKdMbL`KMM8djNDfk%9sn~RdhJm81r6ymQ>6r`SJTd&| zOD!74$Bmx6lxuF6me=vE8Nf^k+)K;q{xXkbkz1H`=Fibeh)hLq{6*#1=*vSI1A`NH ztUX`T!zah&dxA#zkgug$_3_)F@Y}1=$6HfClYYT-fEJDh40B)n>uvDUP_A@H$>qD4tJY(fupNzMW&UMF22N*V-Vh+S>H3Vy3}KZ@FA{UM zM3n;zFr+zd2i>@HB#(lu9%?>nmHF~UhSg;F3|`YrklE;yQGRjBJaEX1^cl}KOb5MYYZ-pmOB{!ZVP2t zCRihg0QZexwAHMEa3X$VbSCn;}S{HQGZJH96nWGj_-M;-II z7DL4l@g)%EljO8pq%Z1+USAjg*LW(k-*NQvw?jwT;w%?$Jypa+IEzx!fiE65{X~53H;m5Wc3EEU-z{0x z@r7+xJDkCJtuVaR&(B*Rk#aoKMa;U+WdCqQU>ZP^xv{|UCukZf7 zF6zGRz-VTrONN1qq*7P^Wj|Ev@TlqrSbVPNHW#8t9b*Z%E8^V~7?)v@kjZ)}qMr|S z!!hN(Q2!GRotSU12Db5g5@s+K^zlwKDE~n^#mS*3T1e3`=vuC^T>P`HmnZXGrRrfM z*>Q!1Zwz-bx1c+jZD%I3TZYh!zm8X03|&4W`u*Fpp(@W&=={a z4?BOjVpsUnq0jN=WG*fNPomZ719^?svR)S~t;@B~?yE@C`4ZKzBNR%*@_36vA|A_J z>1zCO&RNv`(E4{f`(*s33+=Rak6`=Bd-BIonBi5EEXH^-55JR`p7)6ti4eXsoy@cv zrYq*ivRaPa?2)Fe=m|l_hek(jz(I^G5MtK2oGRzLlXn6=s8|)%a67y~udI%!J=i|% zeswFpWSKTHC~n2+BB@K_Sx(;KLh<$SGM|22*Ih8klpU*c6+|^AN*UE8xLRG$=n#G;Wi@+0Ouv(HP6^2 z=)l0GEaeq*gv+O|yiX8SaO22!$!#Bnx<9tz(Z7Qg-)5=9yD1kH338Rj34&xnVd(Y8 ziYyM|Nz)P=#t26!oD(r%Z~02EAU@TiO;|e2Wg~ue-GBTuu$eSHcHAh{%S~>!jBpm3 z<`_N{Ue7(zFh9fgB&QM~hv52}Gw5^Ui;olMpgtMqt7jpF
      t7gci9xR!iH!EF`Ls?y~dAxU5dacntgTR9#C$Ux()nQgj$qt z&@w+;=ZTl2znr=aNN~$`FxW}6tOPc9v}eL`?zoD?U^06E!j)$@^V*&gKNz|o3u*aX zEssp$WaF|oywgj^a&84g6|Rp@`b_2}*O@>Jk=o0u3 znvB+W{fDI%_|`Vs4I1)=R%9kbL+o;`7v;RsWD@h%x@Gw2ab}$1(}VAvm)y-DeX(tr z{+PMJVkZJl@nhvRg0F79E)j?~t;5t~J9f)^6MLHHDzw&aRm;pSa$dJQqc2&W+F2ks zUTZ4$9*$L@yoAr;ifR4pRg589%H|o>hoZwpl6HpjTg*ECVal(A=e5T94U%K_>lo`d z9O~UTWGcf{NhI-%TRUpl>k|u`LkN+yuHFtrs;^Bjclho(-^Ui9>Ae?Ds>$blSf5F7S3Io+eaW&7e#<(!fa28~Q+V`u$RSmSeixZ9@04P5 zJg8@Y!-AN6H|Gy}CviP^<@2Ub1at^(Jt(8>?L^5D-d7E0B85QRnWASJ7oPoIE59F; zHBx?}iraWzI9XN=VVh3*E-7+dcl7=RiuUB4NC6<7N46hukT9lWn!7}*(IGR+i#p%X zhwCSF-rW(l8(8>{_C@HROm?R2YG|3$ty`1(8SEPB3m(83F`jl20e*am^1&mDsDc}EdUEtmvOBCZ`-k`<}2xYg~j(Y8mJ zo4G+Hjvy%Uw<_2a?!Dk!J>1P)OjKkBs>>dA5O^!oT{a&GVguYR9A#RRQm zOC!T&2y8{Y;O)LYr+!OTWvrBC&xNv76Ox69qTpTsDaZuqecin#fUIsa${csf40)b7 zTw4}mZ-rQq1P>NjRGiZO!<{S&Q1MQ+bfmUZVE{!X_0pO9+8XCA1vR42kl+t73dP{M z`Q^pOhpw=oA@pPM$0SShr%eP~#prsYr_7|T{+!EZQ6 z1~EKJMtC1RW@jCks(8a~p5gA(=a7hYm{!6F5B-jGf14FD@a1u4RWjzeThX2za%8M0 zOW*93;?t=rZB9lsjcYIcNIxBK1cwzqHwZ zKq8Q$l=z8K?hsMwQK=;U4mtU%@B+gv@-%ItEdGe2;(?kL)e1NtMxvOSh-X%wP%y{K zqL7dygvl%xxg`bycWWIxb*H`8(ii8J4_z#lX{~2J-P`=2iJ>SXPeAUC;?yMrrQZgb zI}E_3grYCxS4tNQXL}e(71a&0-)zQ`Z(pe2-)j6;eXUJMf%o$w1VZwV_sHj8sa<5r z^>#Wto%fkbtxxAlQdIA6Ezammyg)^ga`Y6ZBsBk=y(;AP%-O|9hoqEC`j%f1@+>?N4REjZD z59wd935;1CX;WV!_v^1T{;;Mvu>0)tcBc6EOba~ee0$E3CPU}TcuSVe)`<;>svqAt ztm#(tB(-h`k;) zvpye-rqgrHxUDq|jd8By#+w#b{J>UAY=KUHvnN%y+-v_D zNi^|=(IEuNa$k7o`A)9|4M~=Au%j+DP$a@!`_w|)D#9G^^qy7q*ra-8P`V_n!Vpz0 ziUh{*Z&Rn8Eo&gj&|Pz*8$DwJR?C)}NkwtFeL8|1NWuYELz|wCz+GfPZrG$7#vuM~ z!5Zs+h&Ev`x$cY2+H7Cz; z#*0XMrZvw zZZL%|Sdyg9C|^f3=RxtG;@weP2K2iNK~_0?-wb#6>=?>L)##-WN6|ixZkY(9rm{D z6m>v>&j8l3j;6eWx(wOY30jKbdo;qO^lN_UyK)zZI^7*EXO7_{Sf5v05kfZ1x}yK9 zHc&izFfe?PdqtYrwa@ey73h-I;ssY=<(&EIw~h12Hn4bR^t1aO#WFK)c@S$O(C!fn zlH;B~5_~OtD;4qT$pvI}|3;frw!YpW72(*gwg`0L9xp5Kr`Z&hJ}{)|8DLrHp(vY| zGqOUdG{c|@Oh`=me~V7pwF(GUXY{?|4NB6~FVbtA{Z5t0=Isngp32)KLbH?w zm6fEUD*lVn`#ln8RAhybL8}=IqO*3Rz7RTL7Gc>`yZ+ksOvU;0#H+7Vbz~CMeXsfi_U_r^1T2HM$4wzBg8!euP-Asfi(BEM+JS@3pMOq{$o3Y0LcYwTAtdxT{5oKt53fiN-%F z@m%&|DA!m%wrjpb=(7mwZGZ46$SZ*M0^6bn)Dq=c<+dK4epOl3h6_45ioQ1p!oU$&&sb4$kwJfD6* zaX551TE)ecs43jrntv5pDkRh*H%mOkmKIy9-+|t<-p1NZSiYbFm(H}BAh805NfP0d zsw&s957LXh?|BNVjd)=yXfEve1M-(VpOc+1RTPe7S{N!FrU*^R7H>B~YS}a9?K-&va*SIsv}hC55it8VrW$V86-0I(CRBiRcU4p{Fa@9 zSO^9iGO|+ti*!I{Nxf^CGyyGV!QSvTPG^1PoyqEbU3gSPD+T#G7#T(=HX7d$@L(4*x$tT9FA!jb!T zxPRB*D;$#df?-g4h^6p=Kz5!U%@8_lNYZJNrecKIzw56m2P;?{6x(j@n2jR^GVip@ z!5d-Z57!jtgvt0@+2Zd?^m{CMnN<)4e$=8en+y`<&bi7Z5z7P6hJKe@XElS9p%nm4 z=y01|T{lCM>ab&5+$K&TJO8_nv&bU-(wyI1ZW#5s2#?K zHKU@*XM$5F>NNdv$maS-B1t%}!(tEVOTuKf-`;qIn|x#Ni!SvH80Od+@1aAM(4epS zt<~7JKp=|sx)m^6(`0p%;dWb{;r~mXO>f((bW=dCG?%<>CU(r~7e~{cf#ncWlgWC9 z^8#b~H<(R<*DaI74Zc&Vylbu*&kCzfrY8M$e8<`L+)<|j2D(<>4uRUb17<|h@sGBUVkWW9j&g!xIy$Mgu*Y0<~5K#WPD zG0R*&;p?3e;o3nD+w_1^Yug-UmpgaL55n^~?cy{+A8D0l}ir*!(#e|N4ur*zHjNVECU!YCAWi-v8sdg)l@QK}6u zfVz)$*cJ7Un7~ncB~6Hqh#iVVSwtnxf)2i2*(-jdA5=~H8;$ov#l^bv*UV}@ih4RL zKVvevH4M_x@i)n%NA6okz5&$KdO9=+cJvW3VEZC9(7u(4=B6beEs)9@?n?Y=`D=iZ zcEcbUH5qP&Wf-`$YR}bilqNnHVt-8mRhnX*>I(cqV;vbeaxrnXxPl&nZw0~6AawAE zOkK|(Lr6muOXqOlI@Xm=#P_oma^IwOgly8`NwF_0VcupC zh1A;ktH^WW22JG2gkR7i)g7423tLePJleSq$eQqDz;y#kc-c;!dn=AtDRJy72!ra$ zWZZbBt!m)AAdsd^12>9{c)CP@jn*!>gc^X%2?BJ%mgo?xV6-5n{|wYoJ~sJn)KS+a=GHAfD9p^CQgFTuAk6q1V9RWex&4iB06X z#OU$rnV5ExN|KZ?nVEJmn!$`5OIo-!DD|LwP5c^^f#ODW@hb5DPA^VV>RYBrF`F)N zfQ^r~STi3e9}|w$|E9rxNu99f0e_uRDYcGIm-t_8tBUw1H$3mav&!TLmYZKQA2pe6 zP|Dm1n!+L{Vc`-wWP$Y3ArM5bdp@fnRV9YPmNkc01EZZ;w1je$l^H8oxRlySu8W+= z0n6vNoN3M3KTCx1z-w2ugofB)jXigg9?*{QPXm*4Yvwzwj?)~}$C|UvdyXkwI+m9y zTuSVv`yUJJ-7JZ!-8Wi_Zm`?lxfAiw*A$B*YY)DKQtK8xKw1g%m4o;@r}X-6qi1O< zRkhd8uO{bj`RfXs`Ng=aD$;*en-p{fu~Og-gc-3_+M-o|!Y*Vuf6BhOnGAvbO~9cwYQwPEvT%U=+;voDs$X&!koKfV7E7|%{pHW!J=#-(9Ruj zDKE&|7B*+gPW(+9Otdy2|dUA)Vt6`BAbHa30 zuw26cgYOi74?-RlS)ij&vj>A{beyYqgiM%qkM2y#0`QcUIkz2oDRO8Wj;ys4q_5RS znu^Bj43Yw5D$PEX*{yZbrO`AdU{7jHZ6FTHYp0Tzw`qHGr`qU-NO0^8mMDlnW7N8NIqZk<0V2(Y%bGF%-STy>p| z1z6^Vm|v=dqkr7-ZC><3Q+_BKcs1?dL`v>hbudlY)i_&&hhvE>m@<}W@Xv=;5Q<&5 zTHFj^h*Kzab@s2@FW@{1TUTNlQzXTU2Yx|M0er)SRLIOr&ElnXclf^sJ&^3pVbGz~ z{-u78@Dq>_b#%mpEyt4B_jK_RmhP3nP{LuyKTT|L9Cd9P)f|kK2tKW*OE2y|ZG!tO zCxq7mORZYe(g<{mw+T77>0%U%p# zPeIc-dHkIbCm#&TVPxwDy@lwd@mow-qk!!LRhd@l{GYUO>%U5kV<$>fOk-A5Z6cm} z(yQsN6h(KW<_%%kH?8{O3K6}a*EMpleqc9GBP2@LLTGO$F}3M*HHDzvSVTp4+i!9l zS=;^QazRowZPKN}-JtAIR<8)R)MaC#6rjP7{-H=MT!PV5xHXbeGST@%*T3bQuW@#r z_g|k;Nq}+cHS+CI3H2n4v{uRSgH3OR>ON{Jk>NLu#QpQGaIG4P+WVF8$4#7qA<$}= zvPx1Cygu5@TdSaSYcovKhijwDz?pFy*NB`I*B1r z9k-Gu)<%^3n eL?BV`BrGh@Te~Tj4mzn2jfp=ydZjG}>%Z-|dMu#>u1^P%0#Y0=BC3Y+6AXz-9 zCKTVfB-0`XQ5^5-3~)Txul9To9f!UAH;S^Zjq$}8JTc&~guqK#uMRdB2y-Jua#5yA zq7o^WZpeauDCY?IvX70WA^UK};CR+p#2DcG@plOG8 zpyL(xe_-Jg$JkutI@U4%1tR&pPYbOU!`oK46>jYeS%)kyJZvL}tEB^edN5FmZ>VBB z^+(&nDTXI|2*XOx!Q&hFHdkt6AW|h#t)pl$MvAn`LTGOiuT;C^EFJ2L*LR@gcKyMx z-~z8$OiRbW!|AC0cB0ff!gz%2XSDa_l>>q~9=lP{u+D5pL9!dW4oGX!WHH%hdFnQ@ z_QA~Z9`d%kUVS^bB(PjpyhCQ6S$1=)M|Ja-XyO0DwI6=JgF>zJ44bC>{&pPa2<&IP z^+Y}C9gf88LxzZEoD2GMlptj6w3)*8|L(IYL0Rb1`a5D*A$#~(y_$wPj4u88?dMQ}1LVqT% zx}WXa>^uf(V!naJU`AaW)j{vVr^&EHx|&!0xV;z3IZ4x_%C;QPKx3X6T=3D3-CDI; zq*fi~S3-b_eX{76yTQ**RfQ9?t(s){x@IZ`43Rf*nDP>USuAwM=k+3&-9I-))Czh< zy=*;87Sk~$Wc5^iPf3{SN8^T0DKpo=Vtj{khA)bz(Sg;c)$sqINqGpg_gd-U!=^Ar zx+p|_-QaDT7V>Kt)>-!E!Retk@utcMY^` z)E60PzDiK;U-Q*$vEI`_kdrg3(&6%v z4b|sRRh5xu*vjW-CSqx`O+W&VDJ@O|-u1G0kd$brI-HUYHfCBYj-{GgJiE!Kv`WzWx&At}}I|u?n|vI5|C0e$0J%&{JjWT^&H#+rX8g4Rqnj* z(eM|g=A>Gi%xku2ho@d?$&Ri3xK)L5Iis;|tt5tRXor*@we!(9OGeGFbl6*Qetk=5 zr9}Q1xD}0K1d;!ZIV0VW2sKc=hxLx%tmCD6nF`>W&D*s(2UyuJDM1tn6a@GSf@I0f z@{34Dw`3E4F9iXX0e)tn?jlun%V?9zd|!S4UQhVeZ|8v_weDkl9r5+nJ%?qhomk>3 zq(PJxJUjXwNy3r~6T#0p=an1oFX`7DV>#=;#JUn4O1vmX7p(`UD>b}1SMxoq3a$e7 ztc-dqgoC_NDHU#syw^9GU!99toUMKe0-}_)Awied@9!gqN<|*<{EQi*#Otyx0 zI+E`c=G~nyT+V3@AReW#0ht(0+m$dfr%DnGcw9L}BjSkey_&t(EHCRLutnC>Fs5Qj z8NgQErh0Q_X=RwS`%Lz<9{Z7+x|*l4DP7)yl5pJN-K&MMH;d02q}^XznthDtVZAU2 z;Ygn8s2m9qM|j1`Y&fz-H64?Z7mV0px}4ei0+LRSWoncG7$XJ^>ni=5azJnK8}|E{p@9<$OU+pxmFo`T#NH9zZKF5d#lu39VXR;bK9~BU zViA0$Skdb8m~nu3po~S4O8!QRG$(CoGxG8rP5!A_Q0s63GG4iXu8h*&;xBd5p&Dr0 zb05TwuD<>~#y%vq-4axxE^|(IX5>JtwoTHN6+HtWSWUT8x$e6+4E3)Gmts{gGv^#~ z#85L?xkE$bw_OMsXYy?mak|Wa^re%`RNH};DGeRmmcm&-!F{nV@?^>6%5X2Z67&!y zV|s}OWeSzmw^~gs$P)AtS8_5K?wLPSe_r(vMn_u~bOW;X!qa z?dr<|@6WFGDO-1e3cIk18WttK#$8C9k{hsG6UsIeV%AN82R|-n1gJ~a$9UG?gtBei zC4iaGxzROK9O6XDqHh-4c1Ps%_Wad9z=26ZXPju+5|EjzT;_2NLSQxPRmQsX7avh=1#^z$K^GJOn_EaAIdM&{gTbxHmH(F z(E}|lWG%=4;m_w>pX#oh13p$up}Kl3J`WD*J6rM*?7vtSZFhsv{nB~z`{6@iuLyb#1P>c(@Ijz zG)o#m|iQ>;`XaebC;bm$X_N!V6 z&EukfQCBrFuaSAIMIjEj2mZF$pY#Q%(h)GS22d#q8Vb(9_mp*}P|>W^HRx5VOSmfT zgcdk^Ungx|H*lYz1S;2nw(ZURCa%?l^zb2nZQaWZ5hI=lxd!*c3$AMf{1E%bfq3;= zF$ulC)b^f8Kjv{=O*1qR34VDF4<@b^s_2~OJJn_hmU?fZB}Sd~GxCtA8lw{5;O`a@ zuS8a2pwxxtUnWIvozn~1$c0~UT*s_`u0S=MYB#=ReyuQP=rN}RBBp;4yK^P}wcix6 z!i<)|7^P`p-Qj#;BqqJ^H8hnCTlyiNyoxY3D``-Zi7Qz zm0}}9p|3a?4=InVOhJv8`GO{0M%eUGRA6?XZNndl*FJppK8AmOYP-2>+xa3CKWk5U zCVJUq50jN|n?4K!K%neJe09#UYcS6&GFirxrm`EX(#}?cb>)2Zh`irS(isSkEdKLl z*^=R}i?U2ha1OW*{CV_mnnrdZ+?1T%YH?5M;=%^@?3ShJb|MbXP1y}? z7Hqs30&{f6&L=ygassvK&L?H9t(FbWCS|Su2gZPvrYnCF#(IVaDnI-DGdnuA%mg9) zTSmfW9=_ML)mKeXes+u(_I>7$N$I1RAL<;QmY^#uNmsxUbZ7O;;Gg4kUPQUIE=iy; zd*bVVen_LTHdb)&87{bhW$~?*C_M$g*zcL>gMR`3&O~=Tv8yRzi=n1VXKslfIYJVId0}-1WrqSYG-18!+Lxs-w5QD0JaQRT&L6;f$4n$1jB2`%1---W5R6OYYE&dl# zvANgyvn7vClb1ZVmAVW+tA<@(oKnBXA{O5oWZN=2DH(^gu}pSG~rKmm&**rh#h6 zE-o}_C>5=apJ19xPqh8e`pMcJ{@SPLp!nt=1p-d1Dkky=xo|D~g>3iMACoNPhDIFO z9IfWCeZ@8wUrfmwsLcK0uQLmOgS1tCe1prxAGW3V??8%DDD|ZleL>f@^PJ*?(hh)^ zo^bOS=ppUf`K)u|s?nZ@7%;eI3Ba!)A(O_uQ|Yrbn>N?sh7#Q?Or}(>J^TW31TAfB zrC7(zrj#xn)|#IN=c@mBz&W&QY3XgQY4xPi$GrpDwKSp21jpP%Rkb!S%=zTgC^Y#Q zz^_0klw#Qhet{R6u+@dtk5~pXu#r9=Wo5fIfa!n zJ->^zZ(C7OhF1-Pu$Zc-N?S2%Zad~@*P{eYZF-x}AA*=;4`r4eS^k<@=NcnF1X24R z%7_{NQ?01gA~}1~f8<+m)*RJ{+j-Y=6hD}zc?cM-TmB0gdL*-K&jPn{DKKzy4n4P? zL!;2uL#E%>lnAIi;r_7mtTkqO2wLqUGpq}K{(A-;0f@9K{@dfo;(5iAx%^kN@SazR z0OET?Fd$OTh3ksO!4T=uk^V!n9)>}(ndC@zfryY=FY30qu(_tIdhmIkYeVxVCy!F2 z<%Vqg$059?lU~H~wt&sL!zuHrW93|=TpebjNv>Uz0Dz(ND7)cG7lRI z2K-3^0FS}P3*VE8WK(6Al+bk?ScsI@7{D=K=~$qvUsVmhL6X=iAPAm>UnId`H9M@U z>+n@($5LY<@>MtI-%JS{Sty;YXcf4rq;1CX; zF+)tr#C^fNYjoYz6Vo2#iTm4;tJ`Lp7+7bHIi5nFUuz0ky!&OJoQOfNZ6Vy%g+|B{ z9yd+G_#FuYjm||_Pg=ooQnJ#7FSzT>$_dxUjZkgA4MNon@fuyb{&dBkq>C`2Mxjwf zR@TJMgbhQ_t^&SBD>S)s3qpq@1|44r0?~4f&fX!>0aZrNo=INP)Xwb0QZK8x7;tLh zXyqD|G9F01m|s}ciI0#KMR+B^Ojy;Fk+asq{Goo%p6}FH2G0zENR>f%Mms9bWD@lr z9U*OBrnF(tEyB0XC1b{dsgK1V{jZH$aQLSvJ;L%_`exq!0tHtv1Fqx4#sj6Tt@F2bhMFEJ*6M{4t&SXf48 zN!0@e%7C$Q2xkFdBX+JE+W44$hoowlMcn-UbcHupNkyG*9hGW#Y76Lo;_@ z*yDrdak*A@ga_Vvyy&kXE-mUTpR2~T6NDB|%bK8X2g197`4Jyktq6V8c9gqT_q+{= zs+$Mc*A5?dLinuneYN{K^=x$X@Qc_Pt@-?PbGz9OB{J0kFN+ZH>=$3E?OL$8{lK#! zX;VZE705%bSLr7Ah?1|+5B{Ej6eEA-K$+O})NvI*vX?bX_>*6X<6iknyIsyWaEh%& z(&_nmq}-Gnbrpi98!2tqI{t;jm+F}C3#ttNL9>G2APrekM4^+o0EeI0Z0j9zTtKN4 zoa|mNxXb)Q%tR0H`(-Fm5)Lh)S$tq)Q4j)#uY#6OT3&oX4CEw-dyQ}X5`F->0Flu- zu;^UGfpS2HcuYl>>Y}T%qB0H;(D)%rm51qfUkwH zpTtxpxce=UDp%UapHTFnpzs?~8sCR~@zmG*w|!CuC^Vq{VKvm=WothO!BHD41?qHD zsSE)hRI7<#v0g0Ob?i&p_3TWLo9iR_{cP%LF7K$<$iKN&*}q|~Y@s<-2~$PgG+RX? z=NCv_!}nyQh2QsFQlAI)E4SQYU-d}r!Qn}I#NT_SVY#bj^&t>`W*yr7H%jz|y6Rzj z^8)h$UU>j=0-SUHTl*mawmlLKV{!5*nF$vU6qtJdjp)txU?4LJ$OOwH! zl?ye`x^xD$T<``St)98z#RVHft~CwD?Ogb7Dy@LThO@2KmRM#fmDj>eWlT(%BP)9@ zXzJw)$bDT$>|ULNVNk3~nQ3L<$Wb@<%s#Q~Ol8}AvVV zbNF`^F&URwUisyEc>2WK`I$H3UzQ<1eHV38&PGoExTL=*8T%w%2o1gR&{VIXv@ zT=)V)0?2CIp`y6sf6=AMBJ}r!+<%^+!d09YA*-idgnZQuh}NApp-5gJr%ZM0F#3Do zK4$&rO;h{wA?fLIg`%U6YJI>;L6jWO`Cgt(>PVV=gWHaBcTUPrvoBmdqOCM*b43sz#A~dMAY4}IB8X=ZZ5=sGv z80L}1C$mvBWjwLs)U^GQbabLsA@i2%8`KT@oJB6yrp%SSrRg&Indwn{hK)#R8$1F% zB#LchXqAOy?+(0IOPJrcO}ukrXKprjgcD0kF zabrJ&n1e0V<+FqI4>Zo4q{TONg6M$?>=dftfR2$wna6jJn$$KFhTtn1$EZUb>Px2AeG^*4+ z6{RssU^^6^t3H2XW8%vy zeagzGupTw^xoxIMRuu2BqY`#hZpWmG*pPy9i{X7{UbfZ!o9`1(6A54pt7?BgUuEra za$<^ivNDP}O1)eB<}A4s_0&{a1%-e1XNqSHY)Mu>-r$`r3zehaF$L-}A>?`BPa#2< zz2lhBU#u?|v4#aeTJQ7sSCc@b3Q5tz{+)?;h>5?7SpM8QQSZ0Yf_2(I{oa{VjOI`G zkS~UHtJ7pR5PkF_A47n}7spp!#f0A|4>#X+%bVlwF+6kA{OlJy`bawe%mT0XbF>$e zojd=!UT`EY#~kjl7^zbh>S^(qHlZc14eIcwHd;!Gh9Q>VHR_ET(v~JurVW6#1?fUp7=iSOPzx0W&(NY*Fp4@M_oR5z#SuM0Hw(K=Be<8|^f4 zJGtM`^_o(O{9W5yT&+ytN`T|~!;toLBiZDR$)+ZDT-eA;%OzLH)h><{Me@a1Ymn@p zIcXFdYzx+N4?t%rM&|VN+;z*55`y6?!YuW8i7o@KZH+!bvn%;*bfmRnE+S_{ZZojK?>r?Leks8&S%My0+>fF(#tDjx- ze*tCe{O~Vq7W>0L{QF=2{Ih?6vs?uRGRj(hAvcrvv&zKF zcj~_#Oy2SjE~)zY(;wY18PDwRUBur$O!skoXlf0YsIhLFI)kaRb8hB9Q!L5fX?0a1 zaI-oNQ_o-j5##w%oPPjoo9PNN=}=7Gpf5f2jTnT7mZ;|V!`y%E=cPxDd>Yd{>p#rb zyK`Hpj%a_COjHb*gGeSS{7@J7?jmu@0x<^8VYOixo}D1`|Sc?Rn`Ux3ER zvtV9dfoEb!Bv=EfWINo3ThIFf6rt6>c{1D4jyY|N;#)Tt)F_al2%MT647W3Lk#Qw$S zEq85a`sU{fSDx zpXlVf^HtSo%ra(~?<6P?&SlXX5Sr)G;?IBEb?jC(Glm2-S7SfT-BIotF%RVSx4zpL za1$Ac3}R-*SRW@5*~w^BR3wZohQuE`!5u1DJ%;3#Wf$ z?cCk^6+@fhXlcrUR6Lf|CX-+wlZe@rU$_9RzLa61lT5brj9_u6DiPJt+LmYWL_(*= z)kdLz+DB;H8;LyDg|Z!3){ItB()~mz-Q3GTx?36hl&N(ykz7k=+ySkvb%AdcdcEF{ z&wY~}(iB9l{$W}DV=fi38%;qLx)FazDh_>jd_GK|fINoMk3F}_EIYiw5Wm>L>u?g5 zBwYx;5v!#PzW5GX>%A$`;|Xs{@qMcjpGh-Fr>S*aQPVXKnwq7h7eRuxSxSecMKB$o z?ti;?V}r5L1VlFbu<(5>_0kA9k=Z-*bv$oZ>2_mQ5T3Sis*TV5(w4c-i4A{Z1FKQS z6&^ES-xaUQ0yF~Nx~J9W^$xz&izjH>#B-{Slk(*(BbYeLv|yt8hC)M02AWkYO`}#j z6r?#a%nQ^{r{Jl`Z2^27g%s@Dd99MeMN&v2kGOe{;W#UE?{#;RD>;*RdQW?sAO$bT zT2`Q{3f6U|ViW!8ptgg6p7Vc(JTZw_w<3^h5j#{EtK0NStwO}H@UgblG>KU7)*Zqn z2FoW>1a0!UizqD>3i4FfDJWe-y@EW=b$c0Df)=Iu1kKu#bPa0q37YjIn`?u9e1c~E zNV*37_yo=Ras0GsQ(p0&Jcy)mXP!&x$y6?hkb+1z@n*dmKCCOIwkl z5Kx-7g9uO!`p33rgCl9t`~4uFgIuGKnB?_Z@Ku(c|o-9E|oWAD#8^+DPaAH-vk=yqpBk&2q~B=dGeeMQJ8sPr--hc?T2<{Lah-IYjWfh3OG zZ};vLJg|S_sj6T%azrEun)f41TL03oNAyar#6Oa(6eb*&T~+;>Mh-{znxP_?9;}v zB#=y!2yla(c8fTLpfDS$qzk2>%MNn#1N>umqmdINqmh%Jb0d*4BBGJ6dt`;D={^w? zk%Uhye;NrRCK?GJyW_7U0!Bnc^7YKr(o`})MJ3~S{YE5W$V4OI(|jcwXksQB3CI44 zM!`;P^QdTN^1hdgeN@tf~HbQ@m%07W) zbaKwa`I%18n2knKIw`3o)H$moWYsBUX2rH#V$|o)2N#Vyb|!nt8g4v#9=cZMIpl6-JV||y~s}m;=~LJN+TLp zI|fCdolC#YpmK^tiP2;tA(di46auvMBmhn)6jm**JxOJ@sxws4%}r~6xfL%*MJ#_3 z-FmT3U{{uDx%j$SHbfj+?H3 znp}7d9*)=Re6m-%y~xj2{@3t}@8K8X=xekM#^0V`&&8WHkn6X8<|hT5TlH@@{gqXj z{dv01mu}p=n*%PNDVHgaDTk6@$u8x#@;Y+*@(J0jOcXV;qs`pTg3f9_@?(GW@d@3> ztsOrB?y+sx4?jm=A%qWWm4VNIxZ`>~$Qr<0(GVcp?rCu5@0`-iS3TdiI0WERQ23N; z_NQP9gKrnF6>Nd^kZANkF2`a@@w8Z4 zBrT33hRWV%+q~mh39~+p*KSq!mT;r_$xmPl$bY=g&RaxFf4(qzjZg6|PdFrtsf%Zd zWsCD3&q0`gNi--Ibh`-KY6>3vjt7F&li%Us4Be9dE*l3_4Eub_`)hv$THY1XyKm~` z+Zt+n^Ypc!H*6C~Eh**0AA*8T_B9s%M?WC2xd9I1Q#=yi8cU4cQ7w!d8XU!l3%;dV zDu@FmktMz}zfckjB#~nQZp|;0#D$W`vd$fUX01Q@w;Ac7UCqwz6O#op29%P@rD*Y$ zcn0#ud_ExBo3{eV!`OdUxOK&LRzXG(u!g0Q(g@Q3zq)hjja*5t@L%a=F9gFgcW1*e zVAwl*<1t{*YzmY_NxWUfsxGqB55WK3%qQ~^$w!`3ZQad`)VlfQVMJsyUyOY4RhueN z&!smW%sUt#`O@LZ#|fG4uyBrmLYQhF@;$J-==@P9h-k^aJBQEo}|d&EJq)j zpWW#;zEw!F1xY%dZl~!9$L_s79NYf2Mp2F+X?xbqC%pQ1*7Px3ZmQcv^apIZMyUGw zch@{4EJkv&g6&#j2#XOl{H)XPleMK!_vQ>a;!3|ZhfOO2oXic|E}`i_+j zPfNe%pGW%ZU$5sB>re0l_IXt<`?kJH-i*1IzWf_|QxkvpBm1R#O?~ta?cqCozDTp*nDc54#hU&SFUZLO zg{8r;he`G~{s0pKhnDfRmkQWoo`C}Q#iwpidauLgo4c>gR$RkDuZ(dpC z5#xeAzg(g+qk=ilEb?ek!JKavd9)O}~({Ii7P?K|`4p(Pw|-k1?d0!p1ZT#6M^xM501b@3XpUVQj-OE7+0DQX_Bhhd71RBM= z&)x95k^x&V2f-GMk*Ea)8pnd)y78^+*A3`DkC>FKoK(-D&X^CTG)3&HMXMEO)&*s2 zP3oFiyroMhI8sw68ml6Y60PI;_Vm``X3RK$uni+3YQP-EwcbVdBnrE|y z;4gPsZ)yR=vm536-8;RhC$7p6P4I1uA$V2;alghGf>&oC?$d-t@hEHTC4gY-QO8~q zjbp((jJmZC}oVrG7QPfjPY28A$gcKCd*kg@A}aS>fanh z@i1%LD1azlrj8vY8qd>q;I!)K9iy=v>YQFb5X%HJ2fR5HAMnb8nS)+|%o+50LBT)} z?Fb|kr7PeK&P5cZJ0K6xWge|daDzjC)a4n6;&0LvBIi&%&74LEFy;$>Z2BiWrCJVR zy+8vj;RTw~P)pigx^G+#noweN9AM3aF+vxuGhQYsyU08++w|Lt)l!ZrughWLz>td& zNU)`npu-Xg#gwi*CXosQ!$0P*x{$um%i*klf_ENuE8(EiZnN>sYjgCODuZjGw4H!drz=q{Rc)(W%3R8Q+>`vw`8~G3AZ2Ng ze01qHTuOG*vL&nq?A^H)nMyf-4w?n!zQ`^7kqkO3w>F$*Qmr&Mn<401ZvFGXNl#pt zi#XTjG_9l~W~Q`_MVxq6Ledcbf}F#J=U(){YT9AGV-{SpwQ2u<*j2Eo*tGALP+KP+ zP6oWcE)%)Y@Ywakt{x%NZ**5>Cl4jiGnI3!d;d)3k{?Wp@sexqlF)pA)tQwE&BMnF z9t(E2lK*tP4b#tuFQ>`4bMG_#=`@(M;C=A(m*v0~fVQxMd|~N*ejJ{feo3#pZFvft zt6Hfue?4`*9?$J-u|mzsg9X(DRZv~zm*}UWOAlW8ToFEbI_h(nEv9|0t9&L~RoPe7 z4`wfGeR{mTyi64}!=e3u_GRuXpB`_Jm%1Z2v&eh*zTq*3;tQ#h$N+1394KYgzCj>q%U^kV$i?mD%}&ldQ9@af;r{p;WT%U}QN z-~O`rZc0>Vj#8B|tnzX_pIkIpN1ETZc`7V!%dtd-&YFIH_;j2swI0N?o`^; z8(A|A<8_;mPA$Y;2`y`KInt_BacYZtI$wSSg0`v9g`Oy3qHb$1tnFQ!=kB($U>;#? zaa)ccZal}Aoo=;%k1NM9(U|UG?T}##Qgk#|$sp6enjqdVDiA;xz!=+{6x3D`oNZVg zs6^%Jj~Y9pzcs_#Zcph#bzagvYREB5^3Uya)X$iXw{17}Gcia3bXh_)>qffUK&Dik zg=}}?P^Np>t-u!JH0i5asX^WY2Ecq1s8*TEiW~P{kux!WY~_IB_jC8`O*p7sf@_ys zQT?OQSG1lls{>p8_h6$>glzMnRX}+~=w^)1J`XDs#u_-xAtM#=d#;>r1RaSOB6%cE=<+LQ6D6 zW!BdXPHYPM7hgEH&K{*tliA`bbi}s=l#y?>T5z z`XDH+-;i-gu#}{Rr?A2>S(~|tAO(OKRczBUR54wa<}jpCf9YBbU4r0~&w*%kQ=n zWd&Zb!bSLD@3Mvi47{}$g^U)$-<#vD9riA)dWF^1MFNMmyytM!DXS&B66(5JC&kDU5st+(+Xfo;-B-R-!4lhkdjmM!Ac zt5X6GwwkEsX_9d8wVNN5R{MYF&wn3ILR5AC9G3WpPyOw9{6sYLP~ml3kTQ+C_1(E& z`|@CGQ;lI3QrB?vE6js+*QzP82&$eA=NFZ?V>V+Pc9>A&47JvCwfdD6RgXAzROfp;jeC22~gm+t$axwcJm z%GR`}X(~>b34&A{hdyk8j5K4AkEAV+n?ner$%W zq&tv4;@GY@$$}7mBEflqg<~u<0Ad(51`L`J1_6m033gO?w_phQ{CJo%yOehHcE&^* zNQsLaPszO#!pQk|{F_fQY;_){l5ln-_^1FW|4Nr#?lV~Y%h!H9C zs3~$-!6={@JyHY)Q~9uap$JOxw#2(ndLNG4mzfOz%QdhP6R{&grV~PA1&qds+FWUl z-JAsp)@OeUKz&xKavB(GB?a;V5Q*Y~Rzg55QHjyex8!J$fTU>Pb!!Vi zQZ$gehb1Z_8rlJOmr@o3dI5Zw%@zY0PV+S_1cfr}4jMskmw~Xqb2MWnw?L)L>;0uH zTY{kKdTA*jSeIgNjS5J38X;`)o5BQo0x@KWH+&O1kP;5=LL@NQi7X-EZbX7JI+8_~ zG#3LP2m%mZ7Gh6s7MENX12BIUfN+G~YvLe-ITMGRO`JHC;hc#>&Sy^?7HZ&49HQ&m z2~F`{69*9tHphET97H&yTfY0mp(RcnWELC?2S>p@CJqZw+D;;S@~{A;?1nLS za0)Qe|Tf7zVM zG$E*x=yiuPGP&(g!9VaNeVJ~hmvT*CW|-(o#VT)U0_3f^ddK`j`iknP#3q&3DGH_W z+Z01+?PZE7gL0Rmh3-grH!MO1%pYi;`$UjMn#AG%Ck&ALkqF!|-5>MghN z@=uYY%Gcig>C!tH?$k?mD!21q^Z0VOiLTRouH9R|DO6Xvvw#aUbqhgmhpp`;DqYuT zj5QoEvBy>&)*?_&GRGS9JqYzSNy^uWa%m9tgH5sD4ddX43(G>HBH*Q&hNZj2J(Yj! z0+m&}yS6px*!HjE+pfB85%9t1mexN5qk2=GJFZVORgA5zDr9u6s(iJV)*e*On$K$^ zvFN|WUTM+gwj29QT?TlW`qmxQy}3`&wNnP4OIIbTKqFt3xKypGuKK3L^tp;xRrbN^ z?6%oj&eCHBFzUif^!jiKwqMN$I0Jul!M<*>)x8reF1SLkO3qZCsOGiB)V#J-H6y5I zWU4uWwmDL5a|CU3q}rwjZPQb26J1bOrAHGGMbX

      T`xr&gP{d-Rr2Lech6fw~!z6 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%0A()>uYzu)WzFtF_i|1c{F3d9$hZ4 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 diff --git a/scripts/amalgamate_meos_h.sh b/scripts/amalgamate_meos_h.sh new file mode 100755 index 000000000..2fc4a8873 --- /dev/null +++ b/scripts/amalgamate_meos_h.sh @@ -0,0 +1,66 @@ +#!/usr/bin/env bash +# Build the single-file MEOS header that the JMEOS FunctionsExtractor +# expects at src/main/java/builder/resources/meos.h. +# +# JMEOS's extractor reads exactly one file. MEOS 1.4 split its public +# surface across many headers, so we concatenate them into one. We also +# append a few extern declarations for symbols that MEOS exports from +# libmeos.so but does not declare in any public header (or declares only +# in private headers that we deliberately do not include because their +# Datum / MeosType density would balloon the binding surface and pull in +# half-stable internals). +# +# Usage: +# scripts/amalgamate_meos_h.sh /path/to/MobilityDB +# (writes src/main/java/builder/resources/meos.h) + +set -euo pipefail + +if [[ $# -lt 1 || ! -d "$1/meos/include" ]]; then + echo "usage: $0 " >&2 + echo " expected: /meos/include/meos.h to exist" >&2 + exit 2 +fi + +MEOS_INCLUDE="$1/meos/include" +OUT="$(dirname "$0")/../src/main/java/builder/resources/meos.h" +mkdir -p "$(dirname "$OUT")" + +# Order matters: postgres_ext_defs.in.h carries the typedefs (Datum, +# TimestampTz, int64, …) that the rest reference; the per-type headers +# follow, and meos.h itself ends up after the postgres preamble so the +# public surface is parseable. +cat \ + "$MEOS_INCLUDE/postgres_ext_defs.in.h" \ + "$MEOS_INCLUDE/postgres_int_defs.h" \ + "$MEOS_INCLUDE/meos.h" \ + "$MEOS_INCLUDE/meos_geo.h" \ + "$MEOS_INCLUDE/meos_cbuffer.h" \ + "$MEOS_INCLUDE/meos_npoint.h" \ + "$MEOS_INCLUDE/meos_pose.h" \ + "$MEOS_INCLUDE/meos_rgeo.h" \ + > "$OUT" + +# Appended decls — these symbols are exported from libmeos.so but live +# either with no prototype at all (acovers_tgeo_*) or in MEOS private +# headers we exclude on purpose (meos_internal*.h, temporal/temporal.h, +# temporal/meos_catalog.h). Without these lines the JMEOS regen would +# omit them and downstream consumers would have to re-bind via JNR-FFI. +cat >> "$OUT" <<'EOF' +extern int acovers_geo_tgeo(const GSERIALIZED *gs, const Temporal *temp); +extern int acovers_tgeo_geo(const Temporal *temp, const GSERIALIZED *gs); +extern int acovers_tgeo_tgeo(const Temporal *temp1, const Temporal *temp2); +extern char *mobilitydb_version(void); +extern char *mobilitydb_full_version(void); +extern int temporal_mem_size(const Temporal *temp); +extern MeosType temptype_basetype(MeosType type); +extern Datum *temporal_values_p(const Temporal *temp, int *count); +extern Set *set_make_free(Datum *values, int count, MeosType basetype, bool order); +extern Temporal **tnumber_value_split(const Temporal *temp, Datum vsize, Datum vorigin, Datum **bins, int *count); +extern Temporal **tnumber_value_time_split(const Temporal *temp, Datum size, const Interval *duration, Datum vorigin, TimestampTz torigin, Datum **value_bins, TimestampTz **time_bins, int *count); +extern TBox *tnumber_value_time_boxes(const Temporal *temp, Datum vsize, const Interval *duration, Datum vorigin, TimestampTz torigin, int *count); +extern TBox *tbox_get_value_time_tile(Datum value, TimestampTz t, Datum vsize, const Interval *duration, Datum vorigin, TimestampTz torigin, MeosType basetype, MeosType spantype); +EOF + +extern_count=$(grep -c '^extern' "$OUT") +echo "wrote $OUT ($(wc -l < "$OUT") lines, ${extern_count} extern decls)" diff --git a/scripts/post_regen_patch.py b/scripts/post_regen_patch.py new file mode 100755 index 000000000..8cf249d17 --- /dev/null +++ b/scripts/post_regen_patch.py @@ -0,0 +1,151 @@ +#!/usr/bin/env python3 +"""Post-process JMEOS's auto-generated functions.java. + +The FunctionsGenerator emits two patterns that are wrong for some +specific signatures and we patch them here. The script is idempotent: +running it twice is a no-op. + +1. rtree_search / rtree_search_temporal — the C signature is + int foo(in, in, void *query, MeosArray *result) + but the generator's heuristic miscompiles this as if it were a + bool-out-param wrapper, producing a malformed Java method that does + not compile. We rewrite both wrappers to a straight delegation that + takes a caller-supplied Pointer for the result. + +2. bool foo(in, ..., T *result) versus bool foo(in, ..., T **result) + The generator emits the same wrapper for both: + Pointer result = Memory.allocateDirect(runtime, Long.BYTES); + bool out = MeosLibrary.meos.foo(args, result); + Pointer new_result = result.getPointer(0); + return out ? new_result : null; + For pointer-out (T **result, INDIR) this is correct: the native + call writes the pointer value into the buffer and getPointer(0) + reads it back. For value-out (T *result, DIRECT — e.g. + double *result, int *result, TimestampTz *result, bool *result) it + is wrong: getPointer(0) reads the value as if it were an address. + Callers that did r.getDouble(0) on the returned pointer would crash + in Unsafe_GetDouble with SIGSEGV. + + We rewrite the DIRECT cases to return the buffer directly. The + classification below is hand-derived from MEOS C signatures (see + the table in scripts/README.md) — there is no reliable way to + recover it from the Java signature alone. + +Run after FunctionsGenerator: + python3 scripts/post_regen_patch.py src/main/java/functions/functions.java +""" + +import re +import sys +from pathlib import Path + +# Out-param signatures of shape bool foo(args, T *result) — the wrapper +# must return the buffer directly so the caller can read the value with +# r.getDouble(0) / getInt(0) / getLong(0) / getByte(0). +DIRECT = { + "bearing_point_point", # double *result + "bigintset_value_n", # int64 * + "dateset_value_n", # DateADT * + "datespanset_date_n", # DateADT * + "floatset_value_n", # double * + "geom_azimuth", # double * + "intset_value_n", # int * + "tbool_value_n", # bool * + "temporal_timestamptz_n", # TimestampTz * + "tfloat_value_n", # double * + "tint_value_n", # int * + "tpoint_direction", # double * + "tstzset_value_n", # TimestampTz * + "tstzspanset_timestamptz_n", # TimestampTz * + # bbox accessors — also single-value out-params + "stbox_xmin", "stbox_xmax", "stbox_ymin", "stbox_ymax", + "stbox_zmin", "stbox_zmax", "stbox_tmin", "stbox_tmax", + "stbox_tmin_inc", "stbox_tmax_inc", + "tbox_xmin", "tbox_xmax", "tbox_tmin", "tbox_tmax", + "tbox_tmin_inc", "tbox_tmax_inc", + "tbox_xmin_inc", "tbox_xmax_inc", + "tboxfloat_xmin", "tboxfloat_xmax", + "tboxint_xmin", "tboxint_xmax", +} +# Everything else matching the broken pattern is INDIR (T **result — +# Pose **, GSERIALIZED **, text **, …) and is left untouched. + +RTREE_PATTERN = re.compile( + r'@SuppressWarnings\("unused"\)\s*' + r'public static int (rtree_search(?:_temporal)?)\(Pointer (\w+), int op, Pointer (\w+)\)\s*\{' + r'[^\}]*\}', + re.DOTALL, +) + +OUT_PARAM_PATTERN = re.compile( + r'public static Pointer (\w+)\(([^)]*)\) \{\s*' + r'boolean out;\s*' + r'Runtime runtime = Runtime\.getSystemRuntime\(\);\s*' + r'Pointer result = Memory\.allocateDirect\(runtime, Long\.BYTES\);\s*' + r'out = MeosLibrary\.meos\.\w+\(([^)]*)\);\s*' + r'Pointer new_result = result\.getPointer\(0\);\s*' + r'return out \? new_result : null ;\s*\}', + re.DOTALL, +) + + +def patch_rtree(content: str) -> tuple[str, int]: + def repl(m): + name = m.group(1) + first_param = m.group(2) + third_param = m.group(3) + return ( + f'@SuppressWarnings("unused")\n' + f'\tpublic static int {name}(Pointer {first_param}, int op, ' + f'Pointer {third_param}, Pointer result) {{\n' + f'\t\treturn MeosLibrary.meos.{name}({first_param}, op, ' + f'{third_param}, result);\n' + f'\t}}' + ) + new, n = RTREE_PATTERN.subn(repl, content) + return new, n + + +def patch_out_params(content: str) -> tuple[str, int, int]: + direct_count = 0 + indirect_count = 0 + + def repl(m): + nonlocal direct_count, indirect_count + name = m.group(1) + params = m.group(2) + call_args = m.group(3) + if name in DIRECT: + direct_count += 1 + return ( + f'public static Pointer {name}({params}) {{\n' + f'\t\tRuntime runtime = Runtime.getSystemRuntime();\n' + f'\t\tPointer result = Memory.allocateDirect(runtime, 8);\n' + f'\t\tboolean out = MeosLibrary.meos.{name}({call_args});\n' + f'\t\treturn out ? result : null;\n' + f'\t}}' + ) + indirect_count += 1 + return m.group(0) + + new = OUT_PARAM_PATTERN.sub(repl, content) + return new, direct_count, indirect_count + + +def main() -> int: + if len(sys.argv) != 2: + print(f"usage: {sys.argv[0]} ", file=sys.stderr) + return 2 + path = Path(sys.argv[1]) + content = path.read_text() + content, rtree_n = patch_rtree(content) + content, direct, indirect = patch_out_params(content) + path.write_text(content) + print(f"rtree wrappers patched: {rtree_n}") + print(f"out-param wrappers DIRECT: {direct}") + print(f"out-param wrappers INDIR kept: {indirect}") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/regenerate.sh b/scripts/regenerate.sh new file mode 100755 index 000000000..4623669a3 --- /dev/null +++ b/scripts/regenerate.sh @@ -0,0 +1,51 @@ +#!/usr/bin/env bash +# Regenerate JMEOS bindings end-to-end. +# +# Pipeline: +# 1. Build the amalgamated meos.h from a MobilityDB checkout +# (scripts/amalgamate_meos_h.sh). +# 2. Compile the builder classes so the extractor + generator can run. +# 3. Run FunctionsExtractor (writes target/classes/builder/meos_*.h). +# 4. Run FunctionsGenerator (writes src/main/java/functions/functions.java). +# 5. Apply post-regen patches (scripts/post_regen_patch.py). +# +# After this script finishes, "mvn package -Dmaven.test.skip=true" produces +# a usable jar/JMEOS.jar. The pipeline is intentionally NOT wired into the +# default mvn lifecycle — most users consume JMEOS without regenerating, so +# folding the pipeline into "mvn package" would force every consumer to +# clone MobilityDB and run a perl/python script. Maintainers run this +# manually when bumping the MEOS API surface. +# +# Usage: +# scripts/regenerate.sh /path/to/MobilityDB + +set -euo pipefail + +if [[ $# -lt 1 || ! -d "$1/meos/include" ]]; then + echo "usage: $0 " >&2 + exit 2 +fi + +MOBILITYDB="$1" +HERE="$(cd "$(dirname "$0")" && pwd)" +ROOT="$(cd "$HERE/.." && pwd)" + +cd "$ROOT" + +echo "==> 1/5 Build amalgamated meos.h" +"$HERE/amalgamate_meos_h.sh" "$MOBILITYDB" + +echo "==> 2/5 Compile builder classes" +mvn compile -q + +echo "==> 3/5 Run FunctionsExtractor" +( cd src/main/java && java -cp "$ROOT/target/classes" builder.FunctionsExtractor ) + +echo "==> 4/5 Run FunctionsGenerator" +java -cp "$ROOT/target/classes" builder.FunctionsGenerator + +echo "==> 5/5 Apply post-regen patches" +python3 "$HERE/post_regen_patch.py" src/main/java/functions/functions.java + +echo +echo "JMEOS bindings regenerated. Run 'mvn package -Dmaven.test.skip=true' to build the jar." diff --git a/src/main/java/builder/resources/meos.h b/src/main/java/builder/resources/meos.h index 825da0adb..13efd8b21 100644 --- a/src/main/java/builder/resources/meos.h +++ b/src/main/java/builder/resources/meos.h @@ -439,6 +439,7 @@ typedef void (*error_handler_fn)(int, int, const char *); extern void meos_initialize_timezone(const char *name); extern void meos_initialize_error_handler(error_handler_fn err_handler); +extern void meos_initialize_noexit_error_handler(void); extern void meos_finalize_timezone(void); extern void meos_finalize_projsrs(void); extern void meos_finalize_ways(void); @@ -4066,7 +4067,6 @@ extern Temporal *tne_trgeo_geo(const Temporal *temp, const GSERIALIZED *gs); extern int acovers_geo_tgeo(const GSERIALIZED *gs, const Temporal *temp); extern int acovers_tgeo_geo(const Temporal *temp, const GSERIALIZED *gs); extern int acovers_tgeo_tgeo(const Temporal *temp1, const Temporal *temp2); -extern void meos_initialize_noexit_error_handler(void); extern char *mobilitydb_version(void); extern char *mobilitydb_full_version(void); extern int temporal_mem_size(const Temporal *temp); diff --git a/src/main/java/functions/functions.java b/src/main/java/functions/functions.java index 2c06830fb..059621805 100644 --- a/src/main/java/functions/functions.java +++ b/src/main/java/functions/functions.java @@ -96,6 +96,8 @@ public interface MeosLibrary { void meos_initialize_error_handler(Pointer err_handler); + void meos_initialize_noexit_error_handler(); + void meos_finalize_timezone(); void meos_finalize_projsrs(); @@ -4378,8 +4380,6 @@ public interface MeosLibrary { int acovers_tgeo_tgeo(Pointer temp1, Pointer temp2); - void meos_initialize_noexit_error_handler(); - String mobilitydb_version(); String mobilitydb_full_version(); @@ -4597,6 +4597,11 @@ public static void meos_initialize_error_handler(Pointer err_handler) { MeosLibrary.meos.meos_initialize_error_handler(err_handler); } + @SuppressWarnings("unused") + public static void meos_initialize_noexit_error_handler() { + MeosLibrary.meos.meos_initialize_noexit_error_handler(); + } + @SuppressWarnings("unused") public static void meos_finalize_timezone() { MeosLibrary.meos.meos_finalize_timezone(); @@ -15655,11 +15660,6 @@ public static int acovers_tgeo_tgeo(Pointer temp1, Pointer temp2) { return MeosLibrary.meos.acovers_tgeo_tgeo(temp1, temp2); } - @SuppressWarnings("unused") - public static void meos_initialize_noexit_error_handler() { - MeosLibrary.meos.meos_initialize_noexit_error_handler(); - } - @SuppressWarnings("unused") public static String mobilitydb_version() { return MeosLibrary.meos.mobilitydb_version(); diff --git a/src/test/java/regen/RegenWrapperSanityTest.java b/src/test/java/regen/RegenWrapperSanityTest.java new file mode 100644 index 000000000..6f6ed67d9 --- /dev/null +++ b/src/test/java/regen/RegenWrapperSanityTest.java @@ -0,0 +1,98 @@ +/***************************************************************************** + * + * This MobilityDB code is provided under The PostgreSQL License. + * Copyright (c) 2020-2026, Université libre de Bruxelles and MobilityDB + * contributors + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose, without fee, and without a written + * agreement is hereby granted, provided that the above copyright notice and + * this paragraph and the following two paragraphs appear in all copies. + * + * IN NO EVENT SHALL UNIVERSITE LIBRE DE BRUXELLES BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING + * LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, + * EVEN IF UNIVERSITE LIBRE DE BRUXELLES HAS BEEN ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * UNIVERSITE LIBRE DE BRUXELLES SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON + * AN "AS IS" BASIS, AND UNIVERSITE LIBRE DE BRUXELLES HAS NO OBLIGATIONS TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + * + *****************************************************************************/ + +package regen; + +import functions.functions; +import jnr.ffi.Pointer; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +/** + * Regen-correctness sanity check. Exercises one DIRECT-classified and + * one INDIR-classified bool-out wrapper end-to-end so any regression in + * the post_regen_patch.py classification fails the build instead of + * silently producing JVM-crashing wrappers. + * + * Background: FunctionsGenerator emits the same wrapper for two + * different C signatures — + * + * bool foo(args, T *result) // DIRECT — value out-param + * bool foo(args, T **result) // INDIR — pointer out-param + * + * For DIRECT wrappers the buffer must be returned to the caller so they + * can read the value with r.getDouble(0) / getInt(0) / getByte(0) etc. + * For INDIR wrappers the buffer holds a pointer that must be + * dereferenced via getPointer(0). The generator's default emission is + * INDIR-shaped, which is why the post-regen patch flips the DIRECT + * cases and leaves INDIR alone. + * + * If a future MEOS bump adds a new bool-out function and the patcher + * misclassifies it (or misses it entirely), one of these two test + * cases will fail with a wrong value or a JVM crash. + */ +class RegenWrapperSanityTest { + + @BeforeAll + static void initMeos() { + functions.meos_initialize(); + functions.meos_initialize_timezone("UTC"); + } + + /** + * DIRECT case — stbox_xmin reads a double via the out-param. + * If the patcher mis-classifies this as INDIR, getDouble(0) would + * read the IEEE bits of the buffer's address (random double). + */ + @Test + void stbox_xmin_returns_value_buffer_directly() { + Pointer box = functions.stbox_in("STBOX X((1.5,2.5),(3.5,4.5))"); + assertNotNull(box, "stbox_in should round-trip a literal"); + Pointer xmin = functions.stbox_xmin(box); + assertNotNull(xmin, "stbox_xmin should return a usable buffer"); + assertEquals(1.5, xmin.getDouble(0), 1e-9, + "stbox_xmin DIRECT-wrapper must let caller getDouble(0) the value"); + } + + /** + * INDIR case — ttext_value_n returns a text* via the out-param; + * the wrapper must dereference once with getPointer(0) so that the + * caller can pass the result straight to text_out(). + */ + @Test + void ttext_value_n_returns_text_pointer_via_indirection() { + Pointer t = functions.ttext_in("{\"hello\"@2020-01-01 00:00:00+00}"); + assertNotNull(t, "ttext_in should parse a single-instant set"); + Pointer txt = functions.ttext_value_n(t, 1); + assertNotNull(txt, "ttext_value_n should return text*"); + // MEOS text_out wraps the value in double quotes. + String value = functions.text_out(txt); + assertEquals("\"hello\"", value, + "ttext_value_n INDIR-wrapper must hand text_out a real text*"); + } +} From ae7147d63eb19b4410c8f6065be8d82c0c1798f0 Mon Sep 17 00:00:00 2001 From: Esteban Zimanyi Date: Mon, 11 May 2026 08:10:09 +0200 Subject: [PATCH 5/8] =?UTF-8?q?doc(regen):=20add=20scripts/README.md=20?= =?UTF-8?q?=E2=80=94=20single-page=20entry=20for=20maintainers?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Pulls together the per-script docstrings into one document covering: the one-liner workflow, what each script does, why the pipeline is not wired into 'mvn package' by default, how to run the smoke test, and a checklist for adding a new MEOS function (including the inline-export gotcha that MobilityDB PR #939 fixes systematically). --- scripts/README.md | 134 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 scripts/README.md diff --git a/scripts/README.md b/scripts/README.md new file mode 100644 index 000000000..e11f0eda8 --- /dev/null +++ b/scripts/README.md @@ -0,0 +1,134 @@ +# JMEOS regeneration pipeline + +These scripts let a maintainer rebuild `src/main/java/functions/functions.java` +from scratch against a MobilityDB checkout. Most JMEOS users never run them; +they consume the pre-built `jar/JMEOS.jar`. Run this when: + +- Bumping JMEOS to a newer MEOS release. +- Adding a new public MEOS function and wanting it bound automatically. +- Investigating a wrapper bug surfaced in a downstream consumer + (MobilitySpark, future Java consumers). + +## One-liner + +```bash +scripts/regenerate.sh /path/to/MobilityDB +mvn package -Dmaven.test.skip=true +``` + +That re-derives the bindings end-to-end and writes a fresh `jar/JMEOS.jar`. + +## What each script does + +### `amalgamate_meos_h.sh` + +The JMEOS extractor reads exactly **one** file at +`src/main/java/builder/resources/meos.h`. MEOS 1.4 split its public surface +across many headers, so the script concatenates them into one in this order: + +``` +postgres_ext_defs.in.h (typedefs: Datum, TimestampTz, int64, …) +postgres_int_defs.h +meos.h (core temporal API) +meos_geo.h (spatial + tspatial) +meos_cbuffer.h +meos_npoint.h +meos_pose.h +meos_rgeo.h +``` + +Then it appends extern decls for symbols that are exported from libmeos.so but +live only in private headers the amalgam excludes on purpose +(`meos_internal*.h`, `temporal/temporal.h`, `temporal/meos_catalog.h`): + +| Symbol | Why it's appended | +|---|---| +| `acovers_geo_tgeo`, `acovers_tgeo_geo`, `acovers_tgeo_tgeo` | `acovers_*` family lives only in `meos/src/geo/tgeo_spatialrels.c` | +| `mobilitydb_version`, `mobilitydb_full_version` | `temporal/temporal.h` (private) | +| `temporal_mem_size`, `temptype_basetype` | `temporal/temporal.h`, `temporal/meos_catalog.h` | +| `temporal_values_p`, `set_make_free` | `meos_internal.h` — Datum-typed | +| `tnumber_value_split`, `tnumber_value_time_split`, `tnumber_value_time_boxes`, `tbox_get_value_time_tile` | `meos_internal.h` — Datum + MeosType-typed | + +The `Datum → long` and `MeosType → int` lowering live in +`builder/FunctionsGenerator.java` (the `equivalentTypes` map). + +### `post_regen_patch.py` + +Idempotent post-process for the auto-generated `functions.java`. Fixes two +things the generator gets wrong: + +1. **`rtree_search` / `rtree_search_temporal`** — the C signature is + `int foo(in, in, void *query, MeosArray *result)` but the generator's + bool-out heuristic mis-compiles them. Rewritten to a straight delegation + that takes a caller-supplied `Pointer result`. + +2. **`bool foo(args, T *result)` vs `bool foo(args, T **result)`** — + the generator emits the same wrapper for both, with a spurious + `getPointer(0)` indirection. For `T **result` (pointer-out, INDIR, 10 + cases) this is correct. For `T *result` (value-out, DIRECT, 18 cases) + it turns the value buffer into garbage — a caller's `getDouble(0)` + reads the buffer's address as IEEE bits and crashes + `Unsafe_GetDouble` with SIGSEGV. + + The DIRECT/INDIR classification is hand-derived from MEOS C signatures + (see the `DIRECT = {…}` set near the top of the script). Names that + match the broken pattern but are not in `DIRECT` are left untouched + (i.e. correctly INDIR-shaped). The script reports the count of each + class on every run; if a future MEOS bump adds a new bool-out function, + it'll show up in the INDIR count — review it and add to `DIRECT` if + the C signature is `T *result`. + +### `regenerate.sh` + +End-to-end orchestrator. Invokes, in order: + +1. `amalgamate_meos_h.sh ` +2. `mvn compile -q` (so the extractor + generator can run from `target/classes`) +3. `java -cp target/classes builder.FunctionsExtractor` +4. `java -cp target/classes builder.FunctionsGenerator` +5. `python3 scripts/post_regen_patch.py src/main/java/functions/functions.java` + +After it finishes, run `mvn package -Dmaven.test.skip=true` to produce the jar. + +## Why not wire this into `mvn package` directly + +Most JMEOS consumers don't have a MobilityDB source checkout sitting next to +JMEOS — they grab the published artefact and use it. Folding the regen +pipeline into the default Maven lifecycle would force every consumer to +clone MobilityDB, install Python 3, and run a sed-style patcher just to +build a jar that already exists in `jar/JMEOS.jar`. Maintainers who actually +need to regen run `regenerate.sh` explicitly; everyone else's `mvn package` +stays pure-Maven. + +## Smoke test + +`src/test/java/regen/RegenWrapperSanityTest.java` exercises one DIRECT +(`stbox_xmin → 1.5`) and one INDIR (`ttext_value_n → text_out → "hello"`) +wrapper end-to-end. If the post-regen classifier ever misclassifies a future +MEOS function, one of these two cases fails immediately instead of silently +shipping a wrapper that crashes the JVM at the call site. + +The test is skipped by default (matches the existing JMEOS test-suite +convention which keeps surefire skipped because the tests need a runtime +libmeos.so). To run after a regen: + +```bash +# Temporarily flip true in pom.xml's surefire config +mvn test -Dtest='regen.RegenWrapperSanityTest' +``` + +## Adding a new MEOS function — checklist + +1. The function exists in a public MEOS header (`meos.h`, `meos_geo.h`, …) + and is exported from libmeos.so. Verify the second part with + `nm -D /usr/local/lib/libmeos.so | grep ' T $'`. + - If the symbol is missing because the C definition uses `inline TYPE` + (without `static`), the C99 linker may have skipped emission. The + fix is on the MEOS side: drop `inline`. See MobilityDB PR #939. +2. Run `scripts/regenerate.sh `. +3. If the new function has a `T *result` out-param wrapper that the + patcher classified as INDIR, add it to `DIRECT` in + `post_regen_patch.py` and re-run the patcher. +4. `mvn package -Dmaven.test.skip=true`. +5. Add a smoke-test case to `RegenWrapperSanityTest.java` if the function + is consumer-critical. From 2fa317fc747835dab0c08cd9ffa66af898d3f831 Mon Sep 17 00:00:00 2001 From: Esteban Zimanyi Date: Thu, 14 May 2026 07:59:41 +0200 Subject: [PATCH 6/8] Refresh apt index before installing system deps in CI The Install PROJ step has been failing for the last two runs because apt-get install pulls from a stale package list that points at the prior libcurl4-gnutls-dev .deb, which the mirror has since rotated out (404). Adding apt-get update first re-fetches the index against the live mirror state, mirroring the fix that closed PR #14, and the -y flag on the dependent installs keeps them non-interactive. --- .github/workflows/maven.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 7d41c0109..8711dc34e 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -45,17 +45,20 @@ jobs: - name: Print current working directory run: pwd + - name: Refresh apt package index + run: sudo apt-get update + # Install GEOS library - name: Install GEOS run: sudo apt-get install -y libgeos-dev # Install PROJ library - name: Install PROJ - run: sudo apt-get install proj-bin libproj-dev proj-data + run: sudo apt-get install -y proj-bin libproj-dev proj-data # Install JSON-C library - name: Install JSON-C - run: sudo apt install libjson-c-dev + run: sudo apt-get install -y libjson-c-dev # Fetch and install MEOS library - name: Fetch MEOS sources From 39ad9a7187ab81608dae9df80ef78a0e3f5d4127 Mon Sep 17 00:00:00 2001 From: Esteban Zimanyi Date: Thu, 14 May 2026 08:03:17 +0200 Subject: [PATCH 7/8] Install libgsl-dev so MobilityDB CMake's find_package(GSL) succeeds MobilityDB's top-level CMakeLists.txt calls find_package(GSL) at line 274 and the CI runner's stock package set ships none of GSL_INCLUDE_DIR / GSL_LIBRARY / GSL_CBLAS_LIBRARY. Adding libgsl-dev to the apt steps mirrors the closed PR #14 fix that addressed the same gap and lets the Install MobilityDB step proceed to the build phase. --- .github/workflows/maven.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 8711dc34e..8b926515b 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -60,6 +60,10 @@ jobs: - name: Install JSON-C run: sudo apt-get install -y libjson-c-dev + # Install GSL (required by MobilityDB CMake's find_package(GSL)) + - name: Install GSL + run: sudo apt-get install -y libgsl-dev + # Fetch and install MEOS library - name: Fetch MEOS sources run: git clone https://github.com/MobilityDB/MobilityDB.git From a53bd914615a4a08f26084536a75d7f85d3a215b Mon Sep 17 00:00:00 2001 From: Esteban Zimanyi Date: Fri, 15 May 2026 08:05:26 +0200 Subject: [PATCH 8/8] Expose minDistance bindings Adds mindistance_tgeo_tgeo and tgeoarr_tgeoarr_mindist to the JNR-FFI MeosLibrary interface and the public static wrapper layer in functions.java, plus the matching extern declarations in the generator input header, following the nad_tgeo_tgeo pattern. These are the MEOS spatial-min kernels from MobilityDB #1007. --- src/main/java/builder/resources/meos.h | 2 ++ src/main/java/functions/functions.java | 14 ++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/src/main/java/builder/resources/meos.h b/src/main/java/builder/resources/meos.h index 13efd8b21..9616c673e 100644 --- a/src/main/java/builder/resources/meos.h +++ b/src/main/java/builder/resources/meos.h @@ -2806,6 +2806,8 @@ extern double nad_stbox_stbox(const STBox *box1, const STBox *box2); extern double nad_tgeo_geo(const Temporal *temp, const GSERIALIZED *gs); extern double nad_tgeo_stbox(const Temporal *temp, const STBox *box); extern double nad_tgeo_tgeo(const Temporal *temp1, const Temporal *temp2); +extern double mindistance_tgeo_tgeo(const Temporal *temp1, const Temporal *temp2, double threshold); +extern double tgeoarr_tgeoarr_mindist(const Temporal **arr1, int count1, const Temporal **arr2, int count2); extern TInstant *nai_tgeo_geo(const Temporal *temp, const GSERIALIZED *gs); extern TInstant *nai_tgeo_tgeo(const Temporal *temp1, const Temporal *temp2); extern GSERIALIZED *shortestline_tgeo_geo(const Temporal *temp, const GSERIALIZED *gs); diff --git a/src/main/java/functions/functions.java b/src/main/java/functions/functions.java index 059621805..a4f3bd6c7 100644 --- a/src/main/java/functions/functions.java +++ b/src/main/java/functions/functions.java @@ -3396,6 +3396,10 @@ public interface MeosLibrary { double nad_tgeo_tgeo(Pointer temp1, Pointer temp2); + double mindistance_tgeo_tgeo(Pointer temp1, Pointer temp2, double threshold); + + double tgeoarr_tgeoarr_mindist(Pointer arr1, int count1, Pointer arr2, int count2); + Pointer nai_tgeo_geo(Pointer temp, Pointer gs); Pointer nai_tgeo_tgeo(Pointer temp1, Pointer temp2); @@ -13150,6 +13154,16 @@ public static double nad_tgeo_tgeo(Pointer temp1, Pointer temp2) { return MeosLibrary.meos.nad_tgeo_tgeo(temp1, temp2); } + @SuppressWarnings("unused") + public static double mindistance_tgeo_tgeo(Pointer temp1, Pointer temp2, double threshold) { + return MeosLibrary.meos.mindistance_tgeo_tgeo(temp1, temp2, threshold); + } + + @SuppressWarnings("unused") + public static double tgeoarr_tgeoarr_mindist(Pointer arr1, int count1, Pointer arr2, int count2) { + return MeosLibrary.meos.tgeoarr_tgeoarr_mindist(arr1, count1, arr2, count2); + } + @SuppressWarnings("unused") public static Pointer nai_tgeo_geo(Pointer temp, Pointer gs) { return MeosLibrary.meos.nai_tgeo_geo(temp, gs);