//+------------------------------------------------------------------+ //| Tree | //| 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" #include "Node.mqh" //------------------------------------------------------------------ class CTreeBase class CTreeBase { public: CNode *m_root; // первый узел дерева int m_maxid; // счетчик ID //--- базовые функции public: CTreeBase(); // конструктор ~CTreeBase(); // деструктор void Clear(CNode *root=NULL); // удаления всех узлов после указанного CNode* FindNode(int id, CNode *root=NULL); // поиск узла по ID, начиная с заданного узла CNode* FindNode(string txt, CNode *root=NULL); // поиск узла по txt, начиная с заданного узла int GetID(string txt, CNode *root=NULL); // получение ID для указанного Text, поиск с заданного узла int GetMaxID(CNode *root=NULL); // получение максимального ID в дереве int AddNode(int id, string text, CNode *root=NULL); // добавление в список с поиском по ID узла, начиная с заданного узла int AddNode(string txt, string text, CNode *root=NULL); // добавление в список с поиском по тексту узла, начиная с заданного узла int AddNode(CNode *root, string text); // добавление под root }; //------------------------------------------------------------------ CTreeBase void CTreeBase::CTreeBase() { m_maxid=0; m_root=new CNode; m_root.m_id=m_maxid; m_root.m_text="__base__"; } //------------------------------------------------------------------ ~CTreeBase void CTreeBase::~CTreeBase() { delete m_root; m_maxid=0; // сбросили счетчик } //------------------------------------------------------------------ Reset void CTreeBase::Clear(CNode *root=NULL) { if (root==NULL) root=m_root; // если только начали, то задаем первый if (NIL(root)) return; // правильность указателя root.m_uses=0; root.m_tick=0; // обнулили в текущем узле int n=ArraySize(root.m_next); for (int i=0; i1) { b=false;string st1="", st2=""; for (int i=1; i=st2) || (!ascend && st1