EA-Setka-2/Libs/MQL5Trace/Node.mqh
super.admin a4b861dd93 convert
2025-05-30 14:50:44 +02:00

95 lines
3.2 KiB
MQL5

//+------------------------------------------------------------------+
//| Node |
//| Copyright 2006-2011, www.FXmaster.de |
//| www.FXmaster.de |
//+------------------------------------------------------------------+
#property copyright "Copyright 2006-2011, www.FXmaster.de"
#property link "www.FXmaster.de"
#property version "1.00"
#define NIL(p) (CheckPointer(p)==POINTER_INVALID)
//------------------------------------------------------------------ struct tagWatch
struct tagWatch
{
string m_name; // имя значения
string m_val; // значение
};
class CNode; // forward declaration
//------------------------------------------------------------------ class CNodeBase
class CNodeBase
{
public:
CNode *m_next[]; // список узлов, на которые он указывает
CNode *m_prev; // узел родитель
int m_id; // уникальный номер
string m_text; // текст
public:
CNodeBase() { m_id=0; m_text=""; } // конструктор
~CNodeBase(); // деструктор
};
//------------------------------------------------------------------ ~CNodeInfo
void CNodeBase::~CNodeBase()
{
for (int i=0; i<ArraySize(m_next); i++) // удаление массива
if (CheckPointer(m_next[i])==POINTER_DYNAMIC) delete m_next[i];
m_prev=NULL; ArrayResize(m_next, 0);
}
//------------------------------------------------------------------ class CNode
class CNode : public CNodeBase
{
public:
bool m_expand; // раcкрытость
bool m_check; // отмеченный точкой
bool m_select; // подсвеченный
bool m_edit; // редактируемый
//--- run-time информация
int m_uses; // число обращений к узлу
long m_tick; // время проведенное в узле
long m_tick0; // время входа в узел
datetime m_last; // время входа в узел
tagWatch m_watch[]; // список параметров имя/значение
bool m_break; // дебаг-пауза
int m_brkuse; // остановка на функции при достижении m_uses значения m_brkuse
//--- параметры вызова
string m_path; // имя файла
string m_file; // имя файла
int m_line; // номер линии в файле
string m_class; // имя класса
string m_func; // имя функции
string m_desc; // дополнительное описание узла
public:
CNode(); // конструктор
~CNode(); // деструктор
void AddWatch(string watch, string val);
};
//------------------------------------------------------------------ CNode
void CNode::CNode()
{
m_id=0; m_text="";
m_expand=true; m_check=false; m_select=false; m_edit=false;
m_desc=""; m_uses=0; m_tick=0; m_tick0=0; m_last=0; m_brkuse=-2;
m_path=""; m_file=""; m_line=0; m_class=""; m_func="";
}
//------------------------------------------------------------------ ~CNode
void CNode::~CNode()
{
for (int i=0; i<ArraySize(m_next); i++) // удаление массива
if (CheckPointer(m_next[i])==POINTER_DYNAMIC) delete m_next[i];
m_prev=NULL; ArrayResize(m_next, 0);
}
//------------------------------------------------------------------ Watch
void CNode::AddWatch(string name, string val)
{
int n=ArraySize(m_watch); bool b=false;
for (int i=0; i<n; i++) if (m_watch[i].m_name==name) { m_watch[i].m_val=val; b=true; break; }
if (b) return;
ArrayResize(m_watch, n+1); m_watch[n].m_name=name; m_watch[n].m_val=val;
}