数据模型

定义销毁数据模型节点回调函数原型

typedef void (* TwNodeValueDesktroy_Func)(TwDataNode *node, TTable *value);

功能:定义销毁数据模型节点回调函数原型

参数:

参数 说明
node 将要销毁的数据模型节点
value 将要销毁的数据模块节点的值

返回值:

节点排序回调函数原型

typedef int (*TwDMQuickSort_func)(TwDataNode *n1, TwDataNode *n2, void *arg);

功能:节点排序回调函数原型

参数:

参数 说明
n1 节点1
n2 节点2
arg 同函数TwDMQuickSort的参数arg

返回值:TRUE n1和n2互换顺序,FALSE n1和n2顺序保持不变

遍历DM节点回调函数原型

typedef int (*TwNodeVisit_Func)(TwDataNode *node, Tint depth, void *arg);

功能:遍历DM节点回调函数原型

参数:

参数 说明
node 当前遍历的节点
depth 当前节点深度
arg 执行函数传递的用户参数

返回值:

  • 0 表示继续遍历

  • 1 表示不遍历孩子,

  • 其他表示立即退出遍历

注解:

此回调函数中不能删除node节点

创建一个数据模型

TwDataModel *TwDMCreate(T_ID root_type);

功能:创建一个数据模型

参数:

参数 说明
root_type 数据模型根节点的类型

返回值:创建好的数据模型

注解:根节点的类型需要与 list_layout.ini 配置文件中配置的类型名称保持一致

示例:

TwDataModel *dm;
dm = TwDMCreate(TStringID("test_root"));

销毁一个数据模型

void TwDMDestroy(TwDataModel *dm);

功能:销毁一个数据模型

参数:

参数 说明
dm 将要销毁的数据模型

返回值:

示例:

TwDMDestroy(dm);

给数据模型加锁

void TwDMLock(TwDataModel *dm);

功能:当用户修改数据模型时(添加节点、删除节点、改变节点的值 Table),一定是先调用TwDMLock()先上锁,批量修改完后再调用 TwDMUnlock() 解锁

参数:

参数 说明
dm 数据模型

返回值:

示例:

TwDMLock(dm);

给数据模型解锁

void TwDMUnlock(TwDataModel *dm);

功能:给数据模型解锁

参数:

参数 说明
dm 数据模型

返回值:

示例:

TwDMUnlock(dm);

设置销毁数据模型节点时触发的回调函数

void TwDMSetNodeValueDestroyFunc(TwDataModel *dm, TwNodeValueDesktroy_Func func);

功能:当销毁 dm 的任意节点时,系统都会回调 TwNodeValueDesktroy_Func 函数。调用 TwDMSetNodeValue 设置新的 Table 时,也会调用该回调函数销毁旧的 Table。

参数:

参数 说明
dm 数据模型
func 回调函数

返回值:

示例:

TwDMSetNodeValueDestroyFunc(dm,DestroyFunc);

获取数据模型的根节点

TwDataNode *TwDMGetRootNode(TwDataModel *dm);

功能:获取数据模型的根节点

参数:

参数 说明
dm 数据模型

返回值:根节点

示例:

TwDataNode *root = TwDMGetRootNode(dm);

向数据模型中添加节点

TwDataNode *TwDMAddNode(TwDataNode *parent, T_ID type);

功能:向数据模型中添加节点

参数:

参数 说明
parent 新节点的父节点
type 节点的类型

返回值:成功添加的新节点,不成功则返回NULL

示例:

TwDMAddNode(root,TStringID("node"));

删除节点

void TwDMDeleteNode(TwDataNode *node);

功能:删除节点

参数:

参数 说明
node 将要删除的节点

返回值:

示例:

TwDMDeleteNode(node);

删除当前节点下的所有子节点

void TwDMDeleteNodeAllChild(TwDataNode *node);

功能:删除当前节点下的所有子节点

参数:

参数 说明
node 当前节点

返回值:

示例:

TwDMDeleteNodeAllChild(root);

交换两个节点位置

T_Result TwDMSwapNode(TwDataNode *node1, TwDataNode *node2);

功能:交换两个节点位置

参数:

参数 说明
node1 将要交换位置的节点1
node2 将要交换位置的节点2

返回值:成功返回0,失败返回-1

示例:

T_Result result = TwDMSwapNode(node1,node2);

移动节点

T_Result TwDMMoveNode(TwDataNode *node, TwDataNode *parent, TwDataNode *prev);

功能:移动节点

参数:

参数 说明
node 将要移动的节点
parent 节点移动后的父节点
prev 节点移动后的下一节点

返回值:移动成功返回0,失败返回-1

示例:

T_Result result = TwDMMoveNode(node, TwDMGetParentNode(node), TwDMGetSiblingNode(sibling, TRUE));//将node向前移动一个节点

获取当前节点的子节点个数

Tint TwDMGetChildNodeCount(TwDataNode *node);

功能:获取当前节点的子节点个数

参数:

参数 说明
node 根节点

返回值:当前节点的子节点个数

示例:

Tint count = TwDMGetChildNodeCount(root);

获取当前节点的父节点

TwDataNode *TwDMGetParentNode(TwDataNode *node);

功能:获取当前节点的父节点

参数:

参数 说明
node 当前节点

返回值:当前节点的父节点

示例:

TwDataNode *parent = TwDMGetParentNode(node);

获取根节点的子节点

TwDataNode *TwDMGetChildNode(TwDataNode *parent, Tbool if_first);

功能:获取根节点的子节点

参数:

参数 说明
parent 根节点
if_first 为 TRUE 返回第一个子节点,为 FALSE 返回最后一个子节点

返回值:当前节点子节点

注解:循环调用此接口可以实现遍历根节点的所有子节点

示例:

TwDataNode *node = TwDMGetChildNode(parent,TRUE);//获取parent的第一个子节点

获取当前节点的兄弟节点

TwDataNode *TwDMGetSiblingNode(TwDataNode *node, Tbool if_next);

功能:获取当前节点的兄弟节点

参数:

参数 说明
node 当前节点
if_next 为 TRUE 返回当前节点的后一个节点,为 FALSE 返回当前节点的前一个节点

返回值:当前节点的兄弟节点

注解:配合函数TwDMGetChildNode可以实现遍历根节点的所有子节点

示例:

TwDataNode *pNode = NULL, *pNext = NULL,*pRoot = NULL;
int iNodeCount = 0,i = 0;

pRoot = TwDMGetRootNode(dm); //dm为一个数据模型
pNode =  TwDMGetChildNode(pRoot, TRUE);
iNodeCount = TwDMGetChildNodeCount(pRoot);
for(;i < iNodeCount;i++)
{
    TwDMLock(dm);
    //pNode即使dm的所有子节点
    TwDMUnlock(dm);
    pNext = TwDMGetSiblingNode(pNode, TRUE);
    pNode = pNext;
}

获取当前节点的数据模型

TwDataModel *TwDMGetNodeDM(TwDataNode *node);

功能:获取当前节点的数据模型

参数:

参数 说明
node 当前节点

返回值:当前节点的数据模型

示例:

TwDataModel *dm = TwDMGetNodeDM(node);

获取数据模型的根节点的类型

T_ID TwDMGetRootType(TwDataModel *dm);

功能:获取数据模型的根节点的类型

参数:

参数 说明
dm 数据模型

返回值:根节点类型

T_ID id = TwDMGetRootType(dm);

获取当前节点类型

T_ID TwDMGetNodeType(TwDataNode *node);

功能:获取当前节点类型

参数:

参数 说明
node 当前节点

返回值:当前节点类型

示例:

T_ID id = TwDMGetNodeType(node);

设置当前节点的值

void TwDMSetNodeValue(TwDataNode *node, TTable *value);

功能:设置当前节点的值

参数:

参数 说明
node 当前节点
value 封装了节点的值

返回值:

示例:

TTable *t = TTableCreate();
TTableAddString(t, T_STRING_ID(name), "name", -1);
TwDMSetNodeValue(TwDMFindNode(dm, "test"), t);    
TTableDestroy(t);

获取节点的值

TTable *TwDMGetNodeValue(TwDataNode *node, Tbool create);

功能:获取节点的值

参数:

参数 说明
node 当前节点
create 如果此节点没有值,那么 create 为 TRUE 则返回一个空 TTable,为 FALSE 返回 NULL

返回值:节点的值

示例:

TTable *table = TwDMGetNodeValue(node,FALSE);

节点排序

T_Result TwDMQuickSort(TwDataNode *parent, TwDMQuickSort_func dm_qsort_func, void *arg);

功能:节点排序

参数:

参数 说明
parent 根节点
dm_qsort_func 回调函数,节点排序的规则在此回调中设定
arg 传递到回调函数中的参数

返回值:操作结果

示例:

static int _quicksort_func(TwDataNode *n1, TwDataNode *n2, void *arg)
{
    TTable *v1, *v2; 
    v1 = TwDMGetNodeValue(n1, FALSE);
    v2 = TwDMGetNodeValue(n2, FALSE);
     return TTableGetInt(v1, TStringID("num")) - TTableGetInt(v2, TStringID("num"));
}

TwDMQuickSort(TwDMGetRootNode(dm), quicksort_func, NULL);

遍历根节点的所有子节点

TwDataNode *TwDMVisitEach(TwDataNode *root, Tint flags, TwNodeVisit_Func func, void *arg);

功能:遍历根节点的所有子节点

参数:

参数 说明
root 根节点
flags 暂无作用,传0即可
func 遍历任意节点时都会调用此函数,不可在此函数中销毁此节点
arg 传递到回调函数中的用户参数

返回值:终止遍历时的TwDataNode;如果没有终止遍历的情况,返回 NULL

示例:

int visit_node(TwDataNode *node, Tint depth, void *arg)
{
    TLogI("visit_node %s, depth=%d\n", TwDMGetNodeName(node), depth);
    //TTableDump(TwDMGetNodeValue(node, FALSE));
    return 0;
}
TwDMVisitEach(TwDMGetRootNode(dm), 0, visit_node, NULL);

打印数据模型所有节点数据

void TwDMDump(TwDataModel *dm);

功能:打印数据模型所有的节点数据

参数:

参数 说明
dm 数据模型

返回值:

示例:

TwDMDump(dm);

设置当前节点名字

T_Result TwDMSetNodeName(TwDataNode *node, const char *name);

功能:设置当前节点名字

参数:

参数 说明
node 当前节点
name 节点名

返回值:设置结果

示例:

T_Result result = TwDMSetNodeName(node,name);

获取当前节点的名字

const char * TwDMGetNodeName(TwDataNode *node);

功能:获取当前节点的名字

参数:

参数 说明
node 当前节点

返回值:当前节点的名字

示例:

const char *name = TwDMGetNodeName(node);

在数据模型dm中查找名为name的节点

TwDataNode *TwDMFindNode(TwDataModel *dm, const char *name);

功能:在数据模型dm中查找名为name的节点

参数:

参数 说明
dm 数据模型
name 节点名

返回值:查找到的节点

示例:

TwDataNode *node = TwDMFindNode(dm,name);//在数据模型dm中查找name节点

设置当前节点的用户数据

void TwDMSetNodeUserValue(TwDataNode *node, void *value);

功能:设置当前节点的用户数据

参数:

参数 说明
node 当前节点
value 用户数据

返回值:

注解:value可以是任意值,dm内部只负责保存

示例:

TwDMSetNodeUserValue(node,value);

获取当前节点的用户数据

void *TwDMGetNodeUserValue(TwDataNode *node);

功能:获取当前节点的用户数据

参数:

参数 说明
node 当前节点

返回值:

注解:需配合函数TwDMSetNodeUserValue一起使用

示例:

TwDMGetNodeUserValue(node);

results matching ""

    No results matching ""