// error_handling.h - some useful error handling functions

#ifndef __callback_error_handling_h__
#define __callback_error_handling_h__

#define ERROR_OUT_OF_MEMORY        -1
#define ERROR_ILLEGAL_ARGUMENT     -2
#define ERROR_INDEX_OUT_OF_BOUNDS  -3
#define ERROR_RESOURCE_UNAVAILABLE -4

void exitOnFatalErrorOutOfMemory(char* func_name);
void exitOnFatalErrorIllegalArgument(char* func_name);
void exitOnFatalErrorResourceUnavailable(char* func_name);

#define HANDLE_OUT_OF_MEMORY(handler,func_name) \
{if (handler) \
  handler(ERROR_OUT_OF_MEMORY); \
else \
  exitOnFatalErrorOutOfMemory(func_name);}

#define HANDLE_ILLEGAL_ARGUMENT(handler,func_name) \
{if (handler) \
  handler(ERROR_ILLEGAL_ARGUMENT); \
else \
  exitOnFatalErrorIllegalArgument(func_name);}

#define HANDLE_INDEX_OUT_OF_BOUNDS(handler,func_name) \
{if (handler) \
  handler(ERROR_INDEX_OUT_OF_BOUNDS); \
else \
  exitOnFatalErrorIndexOutOfBounds(func_name);}

#define HANDLE_RESOURCE_UNAVAILABLE(handler,func_name) \
{if (handler) \
  handler(ERROR_RESOURCE_UNAVAILABLE); \
else \
  exitOnFatalErrorResourceUnavailable(func_name);}

#endif // __callback_error_handling_h__

