// ################################
// ##   Hlaseni chyb a vyjimek   ##
// ##jejich osetrovani a logovani##
// ################################

#pragma once
#ifndef ERROR_HANDLING_H
#define ERROR_HANDLING_H

#include "common.h"

#include <string>

using namespace std;

// ################################
// ################################

#if defined(_DEBUG) && defined(DEBUG_BREAK_ON_ERROR)
#define errExceptionError(desc, ...) { __exception_error(__FILE__, __FUNCTION__, __LINE__, desc, __VA_ARGS__);  _CrtDbgBreak();     }
#define errLogicalError(desc, ...)   { __logical_error(__FILE__, __FUNCTION__, __LINE__, desc, __VA_ARGS__);    _CrtDbgBreak();     }
#else
#define errExceptionError(desc, ...) __exception_error(__FILE__, __FUNCTION__, __LINE__, desc, __VA_ARGS__);
#define errLogicalError(desc, ...)   __logical_error(__FILE__, __FUNCTION__, __LINE__, desc, __VA_ARGS__);
#endif

void __exception_error(const std :: string& fname, const std :: string& func, int line, const std :: string desc, ...);
void __logical_error(const std :: string& fname, const std :: string& func, int line, const std :: string desc, ...);

// ################################
// ################################

#endif