//+------------------------------------------------------------------+
//| MyTreeNode.mq5 |
//| Copyright 2010, MetaQuotes Software Corp. |
//| https://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "2010, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
//---
#include <Arrays\TreeNode.mqh>
//+------------------------------------------------------------------+
//| 描述 自 CTreeNode 派生的类。 |
//+------------------------------------------------------------------+
//| 类 CMyTreeNode。 |
//| 目的: 二叉树元素类。 |
//| 类 CTreeNode 的子类。 |
//+------------------------------------------------------------------+
class CMyTreeNode : public CTreeNode
{
protected:
//--- 用户数据
long m_long; // 长整数型关键字段
double m_double; // 双精度型自定义变量
string m_string; // 字符串型自定义变量
datetime m_datetime; // 日期时间型自定义变量
public:
CMyTreeNode();
//--- 访问用户数据的方法
long GetLong(void) { return(m_long); }
void SetLong(long value) { m_long=value; }
double GetDouble(void) { return(m_double); }
void SetDouble(double value) { m_double=value; }
string GetString(void) { return(m_string); }
void SetString(string value) { m_string=value; }
datetime GetDateTime(void) { return(m_datetime); }
void SetDateTime(datetime value) { m_datetime=value; }
//--- 操作文件的方法
virtual bool Save(int file_handle);
virtual bool Load(int file_handle);
protected:
virtual int Compare(const CObject *node,int mode);
//--- 创建类实例的方法
virtual CTreeNode* CreateSample();
};
//+------------------------------------------------------------------+
//| CMyTreeNode 类构造器。 |
//| 输入: 无。 |
//| 输出: 无。 |
//| 备注: 无。 |
//+------------------------------------------------------------------+
void CMyTreeNode::CMyTreeNode()
{
//--- 初始化用户数据
m_long =0;
m_double =0.0;
m_string ="";
m_datetime =0;
}
//+------------------------------------------------------------------+
//| 按照指定算法比较其它三个节点。 |
//| 输入: 节点 - 比较的元素数组, |
//| mode - 比较算法标识符。 |
//| 输出: 比较结果 (>0,0,<0)。 |
//| 备注: 无。 |
//+------------------------------------------------------------------+
int CMyTreeNode::Compare(const CObject *node,int mode)
{
//--- 参数 mode 被忽略, 因为数构造算法只有一个
int res=0;
//--- 显式类型转换
CMyTreeNode *n=node;
res=(int)(m_long-n.m_long);
//---
return(res);
}
//+------------------------------------------------------------------+
//| 创建新的类实例。 |
//| 输入: 无。 |
//| 输出: 类 CMyTreeNode 的新实例指针。 |
//| 备注: 无。 |
//+------------------------------------------------------------------+
CTreeNode* CMyTreeNode::CreateSample()
{
CMyTreeNode *result=new CMyTreeNode;
//---
return(result);
}
//+------------------------------------------------------------------+
//| 写树节点数据至文件。 |
//| 输入: file_handle -以写模式打开的二进制文件句柄。 |
//| 输出: 如果成功 true, 否则 false。 |
//| 备注: 无。 |
//+------------------------------------------------------------------+
bool CMyTreeNode::Save(int file_handle)
{
uint i=0,len;
//--- 检查
if(file_handle<0) return(false);
//--- 写用户数据
//--- 写长整数型自定义变量
if(FileWriteLong(file_handle,m_long)!=sizeof(long)) return(false);
//--- writing custom variable of type double
if(FileWriteDouble(file_handle,m_double)!=sizeof(double)) return(false);
//--- 写字符串型自定义变量
len=StringLen(m_string);
//--- 写字符串长度
if(FileWriteInteger(file_handle,len,INT_VALUE)!=INT_VALUE) return(false);
//--- 写字符串
if(len!=0 && FileWriteString(file_handle,m_string,len)!=len) return(false);
//--- 写日期时间型自定义变量
if(FileWriteLong(file_handle,m_datetime)!=sizeof(long)) return(false);
//---
return(true);
}
//+------------------------------------------------------------------+
//| 从文件里读书节点数据。 |
//| 输入: file_handle -以读模式打开的二进制文件句柄。 |
//| 输出: 如果成功 true, 否则 false。 |
//| 备注: 无。 |
//+------------------------------------------------------------------+
bool CMyTreeNode::Load(int file_handle)
{
uint i=0,len;
//--- 检查
if(file_handle<0) return(false);
//--- reading
if(FileIsEnding(file_handle)) return(false);
//--- 读字符型自定义变量
//--- 读长整数型自定义变量
m_long=FileReadLong(file_handle);
//--- 读双精度型自定义变量
m_double=FileReadDouble(file_handle);
//--- 读字符串型自定义变量
//--- 读字符串长度
len=FileReadInteger(file_handle,INT_VALUE);
//--- 读字符串
if(len!=0) m_string=FileReadString(file_handle,len);
else m_string="";
//--- 读日期时间型自定义变量
m_datetime=FileReadLong(file_handle);
//---
return(true);
}
|