LCOV - code coverage report
Current view: top level - app/include/Alg - PriorityQueue.hpp (source / functions) Hit Total Coverage
Test: coverage.info Lines: 3 3 100.0 %
Date: 2023-08-17 16:45:52 Functions: 0 0 -

          Line data    Source code
       1             : #pragma once
       2             : 
       3             : #include <cstddef>
       4             : 
       5             : namespace Alg {
       6             : /**
       7             :  * @brief Minimum priority queue.
       8             :  *
       9             :  * Unlike std::priority_queue, PriorityQueue exposes a decreaseKey operation.
      10             :  * You can use it by storing the Element& objects returned when calling push(T),
      11             :  * and then calling Element::decreaseKey(T).
      12             :  *
      13             :  * @tparam T Type of elements being stored in queue
      14             :  */
      15             : template<class T>
      16          19 : class PriorityQueue {
      17             :    public:
      18             :     /**
      19             :      * @brief Priority queue element. Allows to decrease key
      20             :      */
      21             :     class Element {
      22             :        public:
      23             :         /// @brief Get element value
      24             :         virtual T getValue() = 0;
      25             :         /// @brief Decrease value of element
      26             :         virtual void decreaseKey(T t) = 0;
      27             :         virtual ~Element(){};
      28             :     };
      29             : 
      30             :     /// @brief Get top element
      31             :     virtual T top() = 0;
      32             :     /// @brief Get queue size
      33             :     virtual size_t size() = 0;
      34             :     /// @brief Test if queue is empty
      35       14730 :     bool empty() { return size() == 0; }
      36             :     /// @brief Push new element into queue
      37             :     virtual Element& push(T t) = 0;
      38             :     /// @brief Pop smallest element of the queue
      39             :     virtual T pop() = 0;
      40             : 
      41          19 :     virtual ~PriorityQueue(){};
      42             : };
      43             : }  // namespace Alg

Generated by: LCOV version 1.14