Ejemplo n.º 1
0
/** 将当前结点移动至指定位置 */
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;
}
Ejemplo n.º 2
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 );
	}
}
Ejemplo n.º 3
0
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;
}
Ejemplo n.º 4
0
void *LinkedList_Get( LinkedList *list, size_t pos )
{
	LinkedListNode *node = LinkedList_GetNode( list, pos );
	return node ? node->data:NULL;
}
Ejemplo n.º 5
0
void LinkedList_Delete( LinkedList *list, size_t pos )
{
	LinkedListNode *node = LinkedList_GetNode( list, pos );
	LinkedList_DeleteNode( list, node );
}