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; }
int size(Stack* stack) { if (!stack) { return -1; } return d_list_length(stack->list); }