Example #1
0
d_list_ret_t d_list_insert(d_list_t* ptDlist, size_t hwIndex, void* pvData)
{
    d_list_node_t* ptNode = NULL;
    d_list_node_t* ptCursor = NULL;
    
    if(NULL == ptDlist) {
        return D_LIST_RET_INVALID_PARAMS;
    }
    
    ptNode = d_list_create_node(ptDlist,pvData);
    if(NULL == ptNode) {
        return D_LIST_RET_FAIL;
    }
    
    if(NULL == ptDlist->ptHead) {
        ptDlist->ptHead = ptNode;
        return D_LIST_RET_OK;
    }
    
    ptCursor = d_list_get_node(ptDlist,hwIndex,FAIL_RET_LAST);
    
    if(hwIndex < d_list_length(ptDlist)) {
        if(ptCursor == ptDlist->ptHead){
            ptDlist->ptHead = ptNode;
        } else {
            ptCursor->ptPrev->ptNext = ptNode;
            ptNode->ptPrev = ptCursor->ptPrev;
        }
        ptNode->ptNext = ptCursor;
        ptCursor->ptPrev = ptNode;
    } else {
        ptCursor->ptNext = ptNode;
        ptNode->ptPrev = ptCursor;
    }
    
    return D_LIST_RET_OK;
}
Example #2
0
int size(Stack* stack) {
    if (!stack) {
        return -1;
    }
	return d_list_length(stack->list);
}