-
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #9 from franziska-wegner/franziska-wegner/2023/dec…
…ember/datastructures/add-priority-queue Add Priority Queue abstract class to Datastructures
- Loading branch information
Showing
1 changed file
with
85 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,85 @@ | ||
/* | ||
* PriorityQueue.hpp | ||
* | ||
* Created on: Jan 28, 2019 | ||
* Author: Franziska Wegner | ||
*/ | ||
|
||
#ifndef EGOA__DATA_STRUCTURES__CONTAINER__PRIORITY_QUEUE_HPP | ||
#define EGOA__DATA_STRUCTURES__CONTAINER__PRIORITY_QUEUE_HPP | ||
|
||
#include <queue> | ||
#include "Queue.hpp" | ||
#include "Auxiliary/Auxiliary.hpp" | ||
|
||
namespace egoa { | ||
|
||
template<typename Type> | ||
class PriorityQueue : public Queue<Type> { | ||
// Type aliasing | ||
using TElement = Type; | ||
|
||
public: | ||
#pragma mark CONSTRUCTORS_AND_DESTRUCTORS | ||
PriorityQueue(){} | ||
|
||
template<typename Compare, class Container> | ||
PriorityQueue ( Compare const & compare ) {} | ||
|
||
template<class Container> | ||
PriorityQueue ( Container const & container ) {} | ||
|
||
template<typename Compare, class Container> | ||
PriorityQueue ( Compare const & compare | ||
, Container const & container ) {} | ||
|
||
virtual ~PriorityQueue() override {} | ||
|
||
#pragma mark LOOPS | ||
template<bool IsParallel, typename FUNCTION> | ||
inline void for_all_elements ( FUNCTION function ) {} | ||
|
||
template<bool IsParallel, typename FUNCTION> | ||
inline void for_all_elements ( FUNCTION function ) const {} | ||
|
||
template<typename FUNCTION> | ||
inline void breakable_for_all_elements ( FUNCTION function ) {} | ||
|
||
template<typename FUNCTION> | ||
inline void breakable_for_all_elements ( FUNCTION function ) const {} | ||
|
||
#pragma mark ELEMENT_ACCESS | ||
///@Name Element Access | ||
///@{ | ||
virtual inline TElement const & Top () const override = 0; | ||
///@} | ||
|
||
///@Name Modifiers | ||
///@{ | ||
virtual inline void BuildWith( std::vector<TElement> const & elements ) = 0; | ||
|
||
#pragma mark ADD_ELEMENTS | ||
virtual inline void Push ( TElement const & value ) override = 0; | ||
virtual inline void Push ( TElement && value ) override = 0; | ||
#pragma mark MODIFIERS | ||
virtual inline void Pop () override = 0; | ||
virtual inline TElement DeleteMin () override = 0; | ||
virtual inline void Clear () override = 0; | ||
|
||
virtual inline void ChangeKey ( Types::index index | ||
, TElement const & element ) = 0; | ||
virtual inline void DecreaseKey ( Types::index index | ||
, TElement const & element ) = 0; | ||
///@} | ||
|
||
#pragma mark CAPACITY | ||
///@Name Capacity | ||
///@{ | ||
virtual inline bool Empty () const override = 0; | ||
virtual inline Types::count Size () const override = 0; | ||
///@} | ||
}; | ||
|
||
} // namespace egoa | ||
|
||
#endif // EGOA__DATA_STRUCTURES__CONTAINER__PRIORITY_QUEUE_HPP |