src/misc/dbg_helpers.h
author KUDr
Fri, 29 Jun 2007 23:30:14 +0000
changeset 7118 78372bbb200b
child 7122 444ddcad8909
permissions -rw-r--r--
(svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
7118
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
     1
/* $Id:$ */
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
     2
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
     3
/** @file dbg_helpers.h */
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
     4
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
     5
#ifndef DBG_HELPERS
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
     6
#define DBG_HELPERS
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
     7
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
     8
#include <new>
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
     9
#include <map>
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    10
#include <stack>
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    11
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    12
#include "blob.hpp"
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    13
#include "str.hpp"
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    14
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    15
/** Helper template class that provides C array length and item type */
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    16
template <typename T> struct ArrayT;
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    17
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    18
/** Helper template class that provides C array length and item type */
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    19
template <typename T, size_t N> struct ArrayT<T[N]> {
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    20
	static const size_t length = N;
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    21
	typedef T item_t;
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    22
};
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    23
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    24
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    25
/**
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    26
* Helper template function that returns item of array at given index
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    27
* or t_unk when index is out of bounds.
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    28
*/
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    29
template <typename E, typename T>
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    30
inline typename ArrayT<T>::item_t ItemAtT(E idx, T &t, typename ArrayT<T>::item_t t_unk)
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    31
{
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    32
	if ((size_t)idx >= ArrayT<T>::length) {
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    33
		return t_unk;
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    34
	}
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    35
	return t[idx];
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    36
}
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    37
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    38
/**
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    39
* Helper template function that returns item of array at given index
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    40
* or t_inv when index == idx_inv
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    41
* or t_unk when index is out of bounds.
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    42
*/
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    43
template <typename E, typename T>
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    44
inline typename ArrayT<T>::item_t ItemAtT(E idx, T &t, typename ArrayT<T>::item_t t_unk, E idx_inv, typename ArrayT<T>::item_t t_inv)
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    45
{
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    46
	if ((size_t)idx < ArrayT<T>::length) {
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    47
		return t[idx];
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    48
	}
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    49
	if (idx == idx_inv) {
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    50
		return t_inv;
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    51
	}
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    52
	return t_unk;
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    53
}
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    54
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    55
/**
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    56
* Helper template function that returns compound bitfield name that is
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    57
* concatenation of names of each set bit in the given value
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    58
* or t_inv when index == idx_inv
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    59
* or t_unk when index is out of bounds.
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    60
*/
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    61
template <typename E, typename T>
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    62
inline CStrA ComposeNameT(E value, T &t, const char* t_unk, E val_inv, const char* name_inv)
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    63
{
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    64
	CStrA out;
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    65
	if (value == val_inv) {
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    66
		out = name_inv;
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    67
	} else if (value == 0) {
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    68
		out = "<none>";
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    69
	} else {
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    70
		for (int i = 0; i < ArrayT<T>::length; i++) {
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    71
			if ((value & (1 << i)) == 0) continue;
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    72
			out.AddFormat("%s%s", (out.Size() > 0 ? "+" : ""), t[i]);
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    73
			value &= ~(E)(1 << i);
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    74
		}
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    75
		if (value != 0) out.AddFormat("%s%s", (out.Size() > 0 ? "+" : ""), t_unk);
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    76
	}
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    77
	return out.Transfer();
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    78
}
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    79
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    80
CStrA ValueStr(Trackdir td);
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    81
CStrA ValueStr(TrackdirBits td_bits);
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    82
CStrA ValueStr(DiagDirection dd);
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    83
CStrA ValueStr(SignalType t);
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    84
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    85
/** Class that represents the dump-into-string target. */
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    86
struct DumpTarget {
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    87
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    88
	/** Used as a key into map of known object instances. */
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    89
	struct KnownStructKey {
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    90
		size_t      m_type_id;
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    91
		const void *m_ptr;
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    92
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    93
		KnownStructKey(size_t type_id, const void *ptr)
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    94
			: m_type_id(type_id)
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    95
			, m_ptr(ptr)
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    96
		{}
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    97
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    98
		KnownStructKey(const KnownStructKey &src)
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
    99
		{
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   100
			m_type_id = src.m_type_id;
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   101
			m_ptr = src.m_ptr;
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   102
		}
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   103
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   104
		bool operator < (const KnownStructKey &other) const
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   105
		{
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   106
			if ((size_t)m_ptr < (size_t)other.m_ptr) return true;
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   107
			if ((size_t)m_ptr > (size_t)other.m_ptr) return false;
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   108
			if (m_type_id < other.m_type_id) return true;
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   109
			return false;
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   110
		}
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   111
	};
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   112
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   113
	typedef std::map<KnownStructKey, CStrA> KNOWN_NAMES;
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   114
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   115
	CStrA              m_out;         ///< the output string
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   116
	int                m_indent;      ///< current indent/nesting level
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   117
	std::stack<CStrA>  m_cur_struct;  ///< here we will track the current structure name
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   118
	KNOWN_NAMES        m_known_names; ///< map of known object instances and their structured names
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   119
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   120
	DumpTarget()
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   121
		: m_indent(0)
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   122
	{}
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   123
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   124
	static size_t& LastTypeId();
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   125
	CStrA GetCurrentStructName();
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   126
	bool FindKnownName(size_t type_id, const void* ptr, CStrA &name);
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   127
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   128
	void WriteIndent();
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   129
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   130
	void WriteLine(const char *format, ...);
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   131
	void WriteValue(const char *name, const char *value_str);
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   132
	void WriteTile(const char *name, TileIndex t);
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   133
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   134
	/** Dump given enum value (as a number and as named value) */
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   135
	template <typename E> void WriteEnumT(const char *name, E e)
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   136
	{
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   137
		WriteValue(name, ValueStr(e).Data());
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   138
	}
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   139
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   140
	void BeginStruct(size_t type_id, const char *name, const void *ptr);
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   141
	void EndStruct();
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   142
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   143
	/** Dump nested object (or only its name if this instance is already known). */
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   144
	template <typename S> void WriteStructT(const char *name, const S *s)
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   145
	{
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   146
		static size_t type_id = ++LastTypeId();
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   147
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   148
		if (s == NULL) {
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   149
			/* No need to dump NULL struct. */
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   150
			WriteLine("%s = <null>", name);
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   151
			return;
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   152
		}
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   153
		CStrA known_as;
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   154
		if (FindKnownName(type_id, s, known_as)) {
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   155
			/* We already know this one, no need to dump it. */
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   156
			WriteLine("%s = known_as.%s", name, known_as.Data());
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   157
		} else {
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   158
			/* Still unknown, dump it */
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   159
			BeginStruct(type_id, name, s);
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   160
			s->Dump(*this);
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   161
			EndStruct();
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   162
		}
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   163
	}
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   164
};
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   165
78372bbb200b (svn r10391) -Add: debug support - structured dump of variables/classes/structures (with anti-recursion repository) into string
KUDr
parents:
diff changeset
   166
#endif /* DBG_HELPERS */