#ifndef DIE_H
#define DIE_H

#include <iostream>
#include <fstream>

using namespace std;

extern ofstream TRACE_FILE;

void die_init (const string& TraceFile);

#define DIE_PRINT(T, a) { TRACE_FILE << T << ' ' << a << endl; cout << T << ' ' << a << endl; }

#define TRACE(a)    { DIE_PRINT ('-', a); }
#define WARN(a)     { DIE_PRINT ('!', a); }
#define SDIE(a)     { DIE_PRINT ('*', a); return ""; }
#define DIE(a)      { DIE_PRINT ('*', a); return -1; }
#define VDIE(a)     { DIE_PRINT ('*', a); return; }
#define PDIE(a)     { DIE_PRINT ('*', a); return 0; }
#define RDIE(a)     { DIE_PRINT ('*', a); return NullRef; }
#define CONTINUE(a) { DIE_PRINT ('!', a); continue; }
#define BREAK(a)    { DIE_PRINT ('!', a); break; }

#endif // DIE_H
