//
// Generated by dtk
// Translation Unit: c_list.cpp
//

#include "SSystem/SComponent/c_list.h"
#include "SSystem/SComponent/c_node.h"
#include "dolphin/types.h"

/* 802449F4-80244A08       .text cLs_Init__FP15node_list_class */
void cLs_Init(node_list_class* pList) {
    pList->mpHead = NULL;
    pList->mpTail = NULL;
    pList->mSize = 0;
}

/* 80244A08-80244A8C       .text cLs_SingleCut__FP10node_class */
int cLs_SingleCut(node_class* pNode) {
    node_list_class* pList = (node_list_class*)pNode->mpData;
    if (pNode == pList->mpHead)
        pList->mpHead = pNode->mpNextNode;
    if (pNode == pList->mpTail)
        pList->mpTail = pNode->mpPrevNode;
    cNd_SingleCut(pNode);
    cNd_ClearObject(pNode);
    int newSize = pList->mSize - 1;
    pList->mSize = newSize;
    return newSize > 0;
}

/* 80244A8C-80244B00       .text cLs_Addition__FP15node_list_classP10node_class */
int cLs_Addition(node_list_class* pList, node_class* pNode) {
    if (pList->mpTail == NULL) {
        pList->mpHead = pNode;
    } else {
        cNd_Addition(pList->mpTail, pNode);
    }

    pList->mpTail = cNd_Last(pNode);
    cNd_SetObject(pNode, pList);
    pList->mSize = cNd_LengthOf(pList->mpHead);
    return pList->mSize;
}

/* 80244B00-80244B88       .text cLs_Insert__FP15node_list_classiP10node_class */
int cLs_Insert(node_list_class* pList, int idx, node_class* pNode) {
    node_class* pExisting = cNd_Order(pList->mpHead, idx);
    if (pExisting == NULL) {
        return cLs_Addition(pList, pNode);
    } else {
        cNd_SetObject(pNode, pList);
        cNd_Insert(pExisting, pNode);
        pList->mpHead = cNd_First(pNode);
        pList->mSize = cNd_LengthOf(pList->mpHead);
        return pList->mSize;
    }
}

/* 80244B88-80244BD0       .text cLs_GetFirst__FP15node_list_class */
node_class* cLs_GetFirst(node_list_class* pList) {
    if (pList->mSize != 0) {
        node_class* pHead = pList->mpHead;
        cLs_SingleCut(pHead);
        return pHead;
    } else {
        return NULL;
    }
}

/* 80244BD0-80244BF0       .text cLs_Create__FP15node_list_class */
void cLs_Create(node_list_class* pList) {
    cLs_Init(pList);
}
