queue: add dq_rmafter support

Signed-off-by: ligd <liguiding1@xiaomi.com>
This commit is contained in:
ligd 2022-09-07 17:20:25 +08:00 committed by Petro Karashchenko
parent 213b954a90
commit 2cc3ec57ef
3 changed files with 57 additions and 6 deletions

View File

@ -312,11 +312,12 @@ void dq_addafter(FAR dq_entry_t *prev, FAR dq_entry_t *node,
/* Remove nodes from queues */
FAR sq_entry_t *sq_remafter(FAR sq_entry_t *node, FAR sq_queue_t *queue);
FAR sq_entry_t *sq_remlast(FAR sq_queue_t *queue);
FAR dq_entry_t *dq_remlast(FAR dq_queue_t *queue);
FAR sq_entry_t *sq_remfirst(FAR sq_queue_t *queue);
FAR dq_entry_t *dq_remfirst(FAR dq_queue_t *queue);
FAR sq_entry_t *sq_remafter(FAR sq_entry_t *node, FAR sq_queue_t *queue);
FAR dq_entry_t *dq_remafter(FAR dq_entry_t *node, FAR dq_queue_t *queue);
FAR sq_entry_t *sq_remlast(FAR sq_queue_t *queue);
FAR dq_entry_t *dq_remlast(FAR dq_queue_t *queue);
FAR sq_entry_t *sq_remfirst(FAR sq_queue_t *queue);
FAR dq_entry_t *dq_remfirst(FAR dq_queue_t *queue);
/* Count nodes in queues */

View File

@ -21,7 +21,7 @@
# Add the queue C files to the build
CSRCS += sq_addafter.c sq_remlast.c sq_remfirst.c sq_remafter.c sq_count.c
CSRCS += dq_addafter.c dq_remlast.c dq_remfirst.c dq_count.c
CSRCS += dq_addafter.c dq_remlast.c dq_remfirst.c dq_remafter.c dq_count.c
# Add the queue directory to the build

View File

@ -0,0 +1,50 @@
/****************************************************************************
* libs/libc/queue/dq_remafter.c
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership. The
* ASF licenses this file to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
****************************************************************************/
/****************************************************************************
* Included Files
****************************************************************************/
#include <queue.h>
/****************************************************************************
* Public Functions
****************************************************************************/
/****************************************************************************
* Name: dq_remafter
*
* Description:
* dq_remafter removes the entry following 'node' from the 'queue'.
* Returns a reference to the removed entry.
*
****************************************************************************/
FAR dq_entry_t *dq_remafter(FAR dq_entry_t *node, FAR dq_queue_t *queue)
{
FAR dq_entry_t *ret = node->flink;
if (queue->head != NULL && ret != NULL)
{
dq_rem(ret, queue);
}
return ret;
}