LCOV - code coverage report
Current view: top level - asyncImpl/include/async - Queue.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 32 32 100.0 %
Date: 2025-07-08 16:29:06 Functions: 1 1 100.0 %

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

Generated by: LCOV version 1.14