/**
 * Performs a relational operation to determine if one 2D geometry crosses another 2D geometry.
 *
 * ![Crosses operator](https://developers.arcgis.com/javascript/latest/assets/references/core/operators/crosses.avif "Crosses operator")
 *
 * @since 4.31
 */
import type { GeometryUnion } from "../types.js";

/**
 * Accelerate a geometry. This method prepares the geometry for faster crosses operations when the same geometry is tested multiple times (e.g. in a loop with hundreds of iterations). See the [Acceleration](https://developers.arcgis.com/javascript/latest/spatial-analysis/intro-geometry-operators/#acceleration) guide topic for more information.
 *
 * @param geometry - The geometry to accelerate.
 * @returns Returns `true` if the geometry was successfully accelerated.
 */
export function accelerateGeometry(geometry: GeometryUnion): boolean;

/**
 * Perform the crosses operation on two geometries.
 * This relation is true when geometries have some but not all interior points in common.
 * The interiors must intersect and produce a geometry of smaller dimension than the maximum dimension of the two geometries.
 * This relation may return true only between polygon and polyline, polygon and point, polyline and polyline, and polyline and point.
 *
 * @param geometry1 - The geometry to cross.
 * @param geometry2 - The geometry being crossed.
 * @returns Returns `true` if `geometry1` crosses `geometry2`.
 * @example
 * // Returns true if a geometry crosses another geometry
 * const isCrossed = crossesOperator.execute(polygon, polyline);
 */
export function execute(geometry1: GeometryUnion, geometry2: GeometryUnion): boolean;

/**
 * Indicates if the operator supports input geometries that contain curves.
 * The value will always be `true`.
 */
export const supportsCurves: boolean;