/** 将当前结点移动至指定位置 */ LCUI_API int LinkedList_MoveTo( LinkedList *list, int pos ) { LinkedListNode *src_node, *des_node; des_node = LinkedList_GetNode( list, pos ); if( !des_node ) { return -1; } src_node = list->current_node; src_node->prev->next = src_node->next; if( src_node->next ) { src_node->next->prev = src_node->prev; } if( list->current_node_pos < pos ) { src_node->prev = des_node; src_node->next = des_node->next; des_node->next->prev = src_node; des_node->next = src_node; } else if( list->current_node_pos > pos ) { if( des_node->prev ) { des_node->prev->next = src_node; } else { list->used_head_node = src_node; } src_node->prev = des_node->prev; des_node->prev = src_node; src_node->next = des_node; } return 0; }
void LinkedList_InsertNode( LinkedList *list, size_t pos, LinkedListNode *node ) { LinkedListNode *target; target = LinkedList_GetNode( list, pos ); if( target ) { LinkedList_Link( list, target->prev, node ); } else { LinkedList_AppendNode( list, node ); } }
LCUI_BOOL LCUIWorker_RunTask( LCUI_Worker worker ) { LCUI_Task task; LinkedListNode *node; LCUIMutex_Lock( &worker->mutex ); node = LinkedList_GetNode( &worker->tasks, 0 ); if( node ) { task = node->data; LinkedList_Unlink( &worker->tasks, node ); LCUIMutex_Unlock( &worker->mutex ); LCUITask_Run( task ); LCUITask_Destroy( task ); free( task ); free( node ); return TRUE; } LCUIMutex_Unlock( &worker->mutex ); return FALSE; }
void *LinkedList_Get( LinkedList *list, size_t pos ) { LinkedListNode *node = LinkedList_GetNode( list, pos ); return node ? node->data:NULL; }
void LinkedList_Delete( LinkedList *list, size_t pos ) { LinkedListNode *node = LinkedList_GetNode( list, pos ); LinkedList_DeleteNode( list, node ); }