#pragma once
#include <stdbool.h>
#include <stdint.h>
#include "../rute_base.h"
#ifdef __cplusplus
extern "C" {
#endif
#include "rect_ffi.h"
#include "region_ffi.h"
struct RURegionFuncs;
struct RURegion;
typedef struct RURegionFuncs {
void (*destroy)(struct RUBase* self);
void (*swap)(struct RUBase* self_c, struct RUBase* other);
bool (*is_empty)(struct RUBase* self_c);
bool (*is_null)(struct RUBase* self_c);
bool (*contains)(struct RUBase* self_c, struct RUBase* p);
bool (*contains_2)(struct RUBase* self_c, struct RUBase* r);
struct RURegion (*united)(struct RUBase* self_c, struct RUBase* r);
struct RURegion (*united_2)(struct RUBase* self_c, struct RUBase* r);
struct RURegion (*intersected)(struct RUBase* self_c, struct RUBase* r);
struct RURegion (*intersected_2)(struct RUBase* self_c, struct RUBase* r);
struct RURegion (*xored)(struct RUBase* self_c, struct RUBase* r);
bool (*intersects)(struct RUBase* self_c, struct RUBase* r);
bool (*intersects_2)(struct RUBase* self_c, struct RUBase* r);
struct RURect (*bounding_rect)(struct RUBase* self_c);
void (*set_rects)(struct RUBase* self_c, struct RUBase* rect, int num);
int (*rect_count)(struct RUBase* self_c);
} RURegionFuncs;
typedef struct RURegionAllFuncs {
struct RURegionFuncs* region_funcs;
} RURegionAllFuncs;
typedef struct RURegion {
RUBase* qt_data;
RUBase* host_data;
struct RURegionAllFuncs* all_funcs;
} RURegion;
extern RURegionFuncs s_region_funcs;
extern RURegionAllFuncs s_region_all_funcs;
#ifdef __cplusplus
}
#endif