LCOV - code coverage report
Current view: top level - libs/bsw/asyncImpl/include/async - Queue.h (source / functions) Coverage Total Hit
Test: coverage.info Lines: 100.0 % 36 36
Test Date: 2026-06-18 08:29:03 Functions: 100.0 % 8 8

            Line data    Source code
       1              : /********************************************************************************
       2              :  * Copyright (c) 2024 Accenture
       3              :  *
       4              :  * This program and the accompanying materials are made available under the
       5              :  * terms of the Apache License Version 2.0 which is available at
       6              :  * https://www.apache.org/licenses/LICENSE-2.0
       7              :  *
       8              :  * SPDX-License-Identifier: Apache-2.0
       9              :  ********************************************************************************/
      10              : 
      11              : /**
      12              :  * \ingroup async
      13              :  */
      14              : #pragma once
      15              : 
      16              : namespace async
      17              : {
      18              : template<typename Node>
      19              : class Queue
      20              : {
      21              : public:
      22              :     Queue();
      23              : 
      24              :     void enqueue(Node& node);
      25              :     Node* dequeue();
      26              : 
      27              :     void clear();
      28              :     void remove(Node& node);
      29              : 
      30              : private:
      31              :     Node* _first;
      32              :     Node* _last;
      33              : };
      34              : 
      35              : /**
      36              :  * Inline implementations.
      37              :  */
      38              : template<typename Node>
      39          183 : Queue<Node>::Queue() : _first(nullptr), _last(nullptr)
      40          183 : {}
      41              : 
      42              : template<typename Node>
      43           21 : void Queue<Node>::enqueue(Node& node)
      44              : {
      45           21 :     node.enqueue();
      46           21 :     if (_last != nullptr)
      47              :     {
      48            9 :         _last->setNext(&node);
      49              :     }
      50              :     else
      51              :     {
      52           12 :         _first = &node;
      53              :     }
      54           21 :     _last = &node;
      55           21 : }
      56              : 
      57              : template<typename Node>
      58           26 : Node* Queue<Node>::dequeue()
      59              : {
      60           26 :     if (_first != nullptr)
      61              :     {
      62           14 :         Node* const node = _first;
      63           14 :         if (_last == node)
      64              :         {
      65            9 :             _last = nullptr;
      66              :         }
      67           14 :         _first = node->dequeue();
      68           14 :         return node;
      69              :     }
      70           12 :     return nullptr;
      71              : }
      72              : 
      73              : template<typename Node>
      74            1 : void Queue<Node>::clear()
      75              : {
      76            3 :     while (_first != nullptr)
      77              :     {
      78            2 :         _first = _first->dequeue();
      79              :     }
      80            1 :     _last = nullptr;
      81            1 : }
      82              : 
      83              : template<typename Node>
      84            4 : void Queue<Node>::remove(Node& node)
      85              : {
      86            4 :     Node* prevNode    = nullptr;
      87            4 :     Node* currentNode = _first;
      88            6 :     while (currentNode != nullptr)
      89              :     {
      90            5 :         if (currentNode == &node)
      91              :         {
      92            3 :             if (prevNode != nullptr)
      93              :             {
      94            2 :                 prevNode->setNext(node.dequeue());
      95              :             }
      96              :             else
      97              :             {
      98            1 :                 _first = node.dequeue();
      99              :             }
     100            3 :             if (_last == &node)
     101              :             {
     102            1 :                 _last = prevNode;
     103              :             }
     104            3 :             break;
     105              :         }
     106            2 :         prevNode    = currentNode;
     107            2 :         currentNode = currentNode->getNext();
     108              :     }
     109            4 : }
     110              : 
     111              : } // namespace async
        

Generated by: LCOV version 2.0-1