#ifndef DUMP_H
#define DUMP_H
#include <stdio.h>
class Dumpable
{
public:
virtual const char *className() const = 0;
virtual const char *dump() const = 0;
};
inline void dumpVariable(const char *name, const Dumpable &var)
{
printf("%s %s = %s;\n", var.className(), name, var.dump());
}
#define DUMP(x) \
dumpVariable(#x, x);
#define DEFINE_DUMP_VARIABLE_FUNCTION(type, pat) \
inline void dumpVariable(const char *name, type x) \
{ \
printf(#type " %s = " pat ";\n", name, x); \
}
DEFINE_DUMP_VARIABLE_FUNCTION(char, "'%c'")
DEFINE_DUMP_VARIABLE_FUNCTION(signed char, "'%c'")
DEFINE_DUMP_VARIABLE_FUNCTION(unsigned char, "'%c'")
DEFINE_DUMP_VARIABLE_FUNCTION(int, "%d")
DEFINE_DUMP_VARIABLE_FUNCTION(unsigned int, "%d")
DEFINE_DUMP_VARIABLE_FUNCTION(short, "%d")
DEFINE_DUMP_VARIABLE_FUNCTION(unsigned short, "%d")
DEFINE_DUMP_VARIABLE_FUNCTION(long, "%ld")
DEFINE_DUMP_VARIABLE_FUNCTION(unsigned long, "%ld")
DEFINE_DUMP_VARIABLE_FUNCTION(float, "%f")
DEFINE_DUMP_VARIABLE_FUNCTION(double, "%lf")
DEFINE_DUMP_VARIABLE_FUNCTION(const char*, "\"%s\"")
DEFINE_DUMP_VARIABLE_FUNCTION(const signed char*, "\"%s\"")
DEFINE_DUMP_VARIABLE_FUNCTION(const unsigned char*, "\"%s\"")
DEFINE_DUMP_VARIABLE_FUNCTION(char*, "\"%s\"")
DEFINE_DUMP_VARIABLE_FUNCTION(signed char*, "\"%s\"")
DEFINE_DUMP_VARIABLE_FUNCTION(unsigned char*, "\"%s\"")
DEFINE_DUMP_VARIABLE_FUNCTION(void*, "0x%08x")
#endif // DUMP_H