Ret dlist_insert(DList* thiz, size_t index, void* data) { Ret ret = RET_OK; DListNode* node = NULL; DListNode* cursor = NULL; return_val_if_fail(thiz != NULL, RET_INVALID_PARAMS); dlist_lock(thiz); do { if((node = dlist_create_node(thiz, data)) == NULL) { ret = RET_OOM; break; } if(thiz->first == NULL) { thiz->first = node; break; } cursor = dlist_get_node(thiz, index, 1); if(index < dlist_length(thiz)) { node->next = cursor; if(cursor->prev != NULL) { cursor->prev->next = node; } cursor->prev = node; if(thiz->first == cursor) { thiz->first = node; } } else { cursor->next = node; node->prev = cursor; } }while(0); dlist_unlock(thiz); return ret; }
DListRet dlist_insert(DList* thiz, size_t index, void* data) { DListNode* node = NULL; DListNode* cursor = NULL; if((node = dlist_create_node(thiz, data)) == NULL) { return DLIST_RET_OOM; } if(thiz->first == NULL) { thiz->first = node; return DLIST_RET_OK; } cursor = dlist_get_node(thiz, index, 1); if(index < dlist_length(thiz)) { if(thiz->first == cursor) { thiz->first = node; } else { cursor->prev->next = node; node->prev = cursor->prev; } node->next = cursor; cursor->prev = node; } else { cursor->next = node; node->prev = cursor; } return DLIST_RET_OK; }
void* htable_create_node(int size) { htable_node_t* node = (htable_node_t*)dlist_create_node(size); node->bucket = 0; return node; }