#ifndef _UTIL_H
#define _UTIL_H
#define MAX_LINE_LENGTH 255
#include <stdlib.h>

#ifdef NDEBUG
#define dbg_print(x) 
#else
#define dbg_print(x) fprintf(stderr, x)
#endif

#ifdef NDEBUG
#define dbg_print2(x, y) 
#else
#define dbg_print2(x, y) fprintf(stderr, x, y)
#endif

#ifdef NDEBUG
#define dbg_print3(x, y, z) 
#else
#define dbg_print3(x, y, z) fprintf(stderr, x, y, z)
#endif

typedef struct linkedlist* LinkedList;

LinkedList emptyList();

void list_add(LinkedList list, void* item);

void* getFirst(LinkedList list);

int linkedListSize(LinkedList list);

void deleteList(LinkedList list);

void* removeItem(LinkedList list, void* item, int (*eq)(void* i1, void* i2));

void* replaceItem(LinkedList list, void* remove, void* replace, int (*eq)(void* i1, void* i2));

int identity(void* i1, void* i2);

char *copyString(char *s);

int nonwhitespace(char*s);

void* doubleAndCopy(void* area, size_t size);

void printList(LinkedList list, void (*print)(void* item));

#endif