//------------------------------------------------------------
// Game Framework
// Copyright © 2013-2021 loyalsoft. All rights reserved.
// Homepage: http://www.game7000.com/
// Feedback: http://www.game7000.com/
//------------------------------------------------------------
using System.Collections.Generic;
namespace GameFramework.DataNode
{
///
/// 数据结点接口。
///
public interface IDataNode
{
///
/// 获取数据结点的名称。
///
string Name
{
get;
}
///
/// 获取数据结点的完整名称。
///
string FullName
{
get;
}
///
/// 获取父数据结点。
///
IDataNode Parent
{
get;
}
///
/// 获取子数据结点的数量。
///
int ChildCount
{
get;
}
///
/// 根据类型获取数据结点的数据。
///
/// 要获取的数据类型。
/// 指定类型的数据。
T GetData() where T : Variable;
///
/// 获取数据结点的数据。
///
/// 数据结点数据。
Variable GetData();
///
/// 设置数据结点的数据。
///
/// 要设置的数据类型。
/// 要设置的数据。
void SetData(T data) where T : Variable;
///
/// 设置数据结点的数据。
///
/// 要设置的数据。
void SetData(Variable data);
///
/// 根据索引检查是否存在子数据结点。
///
/// 子数据结点的索引。
/// 是否存在子数据结点。
bool HasChild(int index);
///
/// 根据名称检查是否存在子数据结点。
///
/// 子数据结点名称。
/// 是否存在子数据结点。
bool HasChild(string name);
///
/// 根据索引获取子数据结点。
///
/// 子数据结点的索引。
/// 指定索引的子数据结点,如果索引越界,则返回空。
IDataNode GetChild(int index);
///
/// 根据名称获取子数据结点。
///
/// 子数据结点名称。
/// 指定名称的子数据结点,如果没有找到,则返回空。
IDataNode GetChild(string name);
///
/// 根据名称获取或增加子数据结点。
///
/// 子数据结点名称。
/// 指定名称的子数据结点,如果对应名称的子数据结点已存在,则返回已存在的子数据结点,否则增加子数据结点。
IDataNode GetOrAddChild(string name);
///
/// 获取所有子数据结点。
///
/// 所有子数据结点。
IDataNode[] GetAllChild();
///
/// 获取所有子数据结点。
///
/// 所有子数据结点。
void GetAllChild(List results);
///
/// 根据索引移除子数据结点。
///
/// 子数据结点的索引。
void RemoveChild(int index);
///
/// 根据名称移除子数据结点。
///
/// 子数据结点名称。
void RemoveChild(string name);
///
/// 移除当前数据结点的数据和所有子数据结点。
///
void Clear();
///
/// 获取数据结点字符串。
///
/// 数据结点字符串。
string ToString();
///
/// 获取数据字符串。
///
/// 数据字符串。
string ToDataString();
}
}