
#ifndef __AREAS_H__
#define __AREAS_H__

#define EMPTY_AREA  -123

typedef struct area_t {
  int x, y, w, h;
} area;

// set area to sepcified coords
static inline void set_area(area *a, int x, int y, int w, int h)
{
  a->x = x;
  a->y = y;
  a->w = w;
  a->h = h;
}

// copy an area
static inline void copy_area(area *dest, const area *src)
{
  *dest = *src;
}

// return the area shared by a1 and a2
void areas_intersection(const area *a1, const area* a2, area *out);

// return area covering both a1 and a2
void areas_union(const area *a1, const area* a2, area *out);

// return 1 if a1 and a2 intersects
int areas_intersect(const area *a1, const area* a2);

// return 1 if a1 covers a2
int area_encloses(const area *a1, const area* a2);

// return 1 if area is empty
static inline int area_is_empty(const area *a1)
{
  return (a1->w == EMPTY_AREA);
}

// set an area to 'empty'
static inline void reset_area(area *a1)
{
  a1->w = EMPTY_AREA;
}

#endif
