#ifndef HELPER_H
#define HELPER_H

#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>

struct point
{
	int y;
	int x;
};

static inline bool pointeq(struct point p1, struct point p2)
{
	return p1.y == p2.y && p1.x == p2.x;
}

static inline unsigned int iabs(int i)
{
	return i < 0 ? -i : i;
}

static inline int sign(int m)
{
	return m < 0 ? -1:
	       m > 0 ?  1:
	       0;
}

static inline int ipow(int base, int exp)
{
    int result = 1;
    for (;;)
    {
        if (exp & 1)
            result *= base;
        exp >>= 1;
        if (!exp)
            break;
        base *= base;
    }

    return result;
}

static inline int randrange(int min, int max)
{
	return rand() % (max + 1 - min) + min;
}

static inline void *xmalloc(size_t n)
{
	void *ret = malloc(n);
	if(!ret)
	{
		fprintf(stderr, "malloc failed\n");
		abort();
	}

	return ret;
}

static inline void *xrealloc(void *ptr, size_t n)
{
	void *ret = realloc(ptr, n);
	if(!ret)
	{
		fprintf(stderr, "realloc failed\n");
		abort();
	}

	return ret;
}

#endif //HELPER_H

