mirror of
https://github.com/zeldaret/tp
synced 2026-05-23 15:01:53 -04:00
937da3c59b
* SComponent c_list / c_node * SComponent: c_tree * SComponent: start c_phase * SComponent: c_tag * SComponent: c_counter * f_pc_line / f_pc_line_tag the beginnings of the framework process system * f_pc_method_tag * SComponent: c_node_iter / c_list_iter / c_tag_iter / c_tree_iter * f_pc_draw_priority * f_pc_method_iter * f_pc_profile Also add (untested) base header classes for f_pc_base * f_pc_searcher * f_pc_create_tag * f_pc_creator * f_pc_layer skeleton * f_pc_method * f_pc_line_iter * f_pc_leaf somewhat * f_pc_delete_tag * f_pc_create_req * Fix a few non-matchings * c_phase: slight additional notes * c_node: more matching * fix build * c_node: One more matching * f_pc_line_iter: Matching * f_pc_create_req: a bit more * f_pc_load, f_pc_deletor partial * f_pc_executor partial * f: minor cleanups * f_pc_executor Co-authored-by: Pheenoh <pheenoh@gmail.com>
126 lines
2.3 KiB
C++
126 lines
2.3 KiB
C++
|
|
#include "global.h"
|
|
#include "SComponent/c_node.h"
|
|
|
|
extern "C" {
|
|
|
|
#define NODE_GET_PREV(pNode) (pNode ? pNode->mpPrevNode : NULL)
|
|
#define NODE_GET_NEXT(pNode) (pNode ? pNode->mpNextNode : NULL)
|
|
|
|
void cNd_Join(node_class *pA, node_class *pB)
|
|
{
|
|
pA->mpNextNode = pB;
|
|
pB->mpPrevNode = pA;
|
|
}
|
|
|
|
int cNd_LengthOf(node_class *pNode)
|
|
{
|
|
int count = 0;
|
|
while (pNode) {
|
|
count++;
|
|
pNode = NODE_GET_NEXT(pNode);
|
|
}
|
|
return count;
|
|
}
|
|
|
|
node_class * cNd_First(node_class *pNode)
|
|
{
|
|
node_class *pRet = NULL;
|
|
while (pNode) {
|
|
pRet = pNode;
|
|
pNode = NODE_GET_PREV(pNode);
|
|
}
|
|
return pRet;
|
|
}
|
|
|
|
node_class * cNd_Last(node_class *pNode)
|
|
{
|
|
node_class *pRet = NULL;
|
|
while (pNode) {
|
|
pRet = pNode;
|
|
pNode = NODE_GET_NEXT(pNode);
|
|
}
|
|
return pRet;
|
|
}
|
|
|
|
node_class * cNd_Order(node_class *pNode, int idx)
|
|
{
|
|
node_class *pRet = NULL;
|
|
int i = 0;
|
|
while (i < idx && pNode) {
|
|
pRet = pNode;
|
|
i++;
|
|
pNode = NODE_GET_NEXT(pNode);
|
|
}
|
|
if (i < idx)
|
|
return pRet;
|
|
return NULL;
|
|
}
|
|
|
|
void cNd_SingleCut(node_class *pNode)
|
|
{
|
|
node_class *pPrev = pNode->mpPrevNode;
|
|
node_class *pNext = pNode->mpNextNode;
|
|
|
|
if (pPrev)
|
|
pPrev->mpNextNode = pNode->mpNextNode;
|
|
if (pNext)
|
|
pNext->mpPrevNode = pNode->mpPrevNode;
|
|
pNode->mpPrevNode = NULL;
|
|
pNode->mpNextNode = NULL;
|
|
}
|
|
|
|
void cNd_Cut(node_class *pNode)
|
|
{
|
|
if (pNode->mpPrevNode)
|
|
pNode->mpPrevNode->mpNextNode = NULL;
|
|
pNode->mpPrevNode = NULL;
|
|
}
|
|
|
|
void cNd_Addition(node_class *pA, node_class *pB)
|
|
{
|
|
node_class *pLast = cNd_Last(pA);
|
|
cNd_Join(pLast, pB);
|
|
}
|
|
|
|
void cNd_Insert(node_class *pA, node_class *pB)
|
|
{
|
|
node_class *pPrev = pA->mpPrevNode;
|
|
if (pPrev == NULL) {
|
|
cNd_Addition(pB, pA);
|
|
} else {
|
|
cNd_Cut(pA);
|
|
cNd_Addition(pPrev, pB);
|
|
cNd_Addition(pB, pA);
|
|
}
|
|
}
|
|
|
|
void cNd_SetObject(node_class *pNode, void *pData)
|
|
{
|
|
while (pNode) {
|
|
pNode->mpData = pData;
|
|
pNode = NODE_GET_NEXT(pNode);
|
|
}
|
|
}
|
|
|
|
void cNd_ClearObject(node_class *pNode)
|
|
{
|
|
cNd_SetObject(pNode, NULL);
|
|
}
|
|
|
|
void cNd_ForcedClear(node_class *pNode)
|
|
{
|
|
pNode->mpPrevNode = NULL;
|
|
pNode->mpNextNode = NULL;
|
|
pNode->mpData = NULL;
|
|
}
|
|
|
|
void cNd_Create(node_class *pNode, void *pData)
|
|
{
|
|
pNode->mpPrevNode = NULL;
|
|
pNode->mpNextNode = NULL;
|
|
pNode->mpData = pData;
|
|
}
|
|
|
|
};
|