Jump to main content

# 1.2.12.4.6 SRV_QUEUE_Read_Or_Remove Function

## C

    SRV_QUEUE_ELEMENT *SRV_QUEUE_Read_Or_Remove(
        SRV_QUEUE *queue,
        SRV_QUEUE_MODE accessMode,
        SRV_QUEUE_POSITION position
    );

## Summary

Reads or removes an element from a queue.

## Description

This function reads or removes an element from a queue.

## Precondition

The queue must have been initialized previously with function SRV_QUEUE_Init.

## Parameters

Param | Description
--- | ---
queue | Pointer to the queue from which the element must be read or removed.
accessMode | Access mode (read or remove).
position | Position in the queue to read or remove (head or tail)

## Returns

- In case of remove, the element will be removed from queue and returned
- In case of read, the element will be returned without removing it from the queue
- If the queue is empty, NULL is returned

## Example

    #define NUM_MAX_NODES    750
    typedef struct _node_info_tag
    {
        struct _node_info_tag *prev;
        struct _node_info_tag *next;
        uint8_t macAddress[8]
    } NODE_INFO;

    static SRV_QUEUE nodeQueue;
    static NODE_INFO nodeInfo;
    NODE_INFO *removedNode;

    SRV_QUEUE_Init(&nodeQueue, NUM_MAX_NODES, SRV_QUEUE_TYPE_SINGLE);
    memset(nodeInfo.macAddress, 0xFF, 8);
    SRV_QUEUE_Append(&nodeQueue, (SRV_QUEUE_ELEMENT *)&nodeInfo);
    removedNode = SRV_QUEUE_Read_Or_Remove(&nodeQueue, SRV_QUEUE_MODE_REMOVE,
                                            SRV_QUEUE_POSITION_HEAD);

## Remarks

None.

Rev: G