-
-
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.
Add Queue Interface & Standard Queue Implementation (#10)
* Add queue interface to the container datastructures * Add standard queue implementation to the container datastructures
- Loading branch information
1 parent
f351521
commit 95c64b5
Showing
2 changed files
with
173 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,74 @@ | ||
/* | ||
* Queue.hpp | ||
* | ||
* Created on: Nov 18, 2018 | ||
* Author: Franziska Wegner | ||
*/ | ||
|
||
#ifndef EGOA__DATA_STRUCTURES__CONTAINER__QUEUE__QUEUE_HPP | ||
#define EGOA__DATA_STRUCTURES__CONTAINER__QUEUE__QUEUE_HPP | ||
|
||
#include "Auxiliary/Types.hpp" | ||
|
||
namespace egoa { | ||
|
||
template<typename Type> | ||
class Queue { | ||
using TElement = Type; | ||
public: | ||
//@todo is Compare necessary? For PQ okay but standard queue? | ||
#pragma mark CONSTRUCTORS_AND_DESTRUCTORS | ||
Queue(){} | ||
|
||
template<typename Compare, class Container> | ||
Queue ( Compare const & compare ){} | ||
|
||
template<class Container> | ||
Queue ( Container const & container ){} | ||
|
||
template<typename Compare, class Container> | ||
Queue ( Compare const & compare, Container const & container ){} | ||
|
||
virtual ~Queue() {} | ||
|
||
#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 = 0; | ||
///@} | ||
|
||
///@Name Modifiers | ||
///@{ | ||
#pragma mark ADD_ELEMENTS | ||
virtual inline void Push ( TElement const & element ) = 0; | ||
virtual inline void Push ( TElement && element ) = 0; | ||
#pragma mark MODIFIERS | ||
virtual inline void Pop () = 0; | ||
virtual inline void Clear () = 0; | ||
inline void Swap ( Queue & rhs) {}; | ||
///@} | ||
|
||
#pragma mark CAPACITY | ||
///@Name Capacity | ||
///@{ | ||
virtual inline bool Empty () const = 0; | ||
virtual inline Types::count Size () const = 0; | ||
///@} | ||
}; | ||
|
||
} // namespace egoa | ||
|
||
#endif // EGOA__DATA_STRUCTURES__CONTAINER__QUEUE__QUEUE_HPP |
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,99 @@ | ||
/* | ||
* StdQueue.hpp | ||
* | ||
* Created on: Feb 17, 2019 | ||
* Author: Franziska Wegner | ||
*/ | ||
|
||
#ifndef EGOA__DATA_STRUCTURES__CONTAINER__QUEUE__STD_FIFO_QUEUE_HPP | ||
#define EGOA__DATA_STRUCTURES__CONTAINER__QUEUE__STD_FIFO_QUEUE_HPP | ||
|
||
#include <queue> | ||
|
||
#include "Auxiliary/Types.hpp" | ||
#include "Exceptions/Assertions.hpp" | ||
|
||
namespace egoa { | ||
|
||
//@todo Emplace, Comments | ||
// this queue does not implement loops | ||
template<typename ElementType> | ||
class StdQueue { | ||
public: | ||
// Type aliasing | ||
using TElement = ElementType; | ||
public: | ||
#pragma mark CONSTRUCTORS_AND_DESTRUCTORS | ||
|
||
StdQueue () | ||
: queue_(){} | ||
|
||
virtual ~StdQueue() {} | ||
|
||
#pragma mark ELEMENT_ACCESS | ||
///@Name Element Access | ||
///@{ | ||
virtual inline TElement const & Top () const { | ||
USAGE_ASSERT ( Size() > 0 ); | ||
return queue_.front(); | ||
} | ||
///@} | ||
|
||
///@Name Modifiers | ||
///@{ | ||
#pragma mark ADD_ELEMENTS | ||
virtual inline void Push ( TElement const & element ) { | ||
queue_.push ( element ); | ||
} | ||
|
||
virtual inline void Push ( TElement && element ) { | ||
queue_.push ( element ); | ||
} | ||
|
||
//@todo | ||
virtual inline void Emplace ( TElement const & element ) { | ||
queue_.emplace ( element ); | ||
} | ||
#pragma mark MODIFIERS | ||
virtual inline void Pop () { | ||
USAGE_ASSERT ( Size() > 0 ); | ||
queue_.pop(); | ||
} | ||
|
||
virtual inline TElement DeleteTop() { | ||
USAGE_ASSERT ( Size() > 0 ); | ||
|
||
TElement top = std::move( Top() ); | ||
Pop(); | ||
return top; | ||
} | ||
|
||
virtual inline void Clear () { | ||
std::queue<TElement> empty; | ||
std::swap( queue_, empty ); | ||
} | ||
|
||
virtual inline void Swap ( StdQueue & rhs ) { | ||
queue_.swap( rhs.queue_ ); | ||
} | ||
///@} | ||
|
||
#pragma mark CAPACITY | ||
///@Name Capacity | ||
///@{ | ||
virtual inline bool Empty () const { | ||
return queue_.empty(); | ||
} | ||
|
||
virtual inline Types::count Size () const { | ||
return queue_.size(); | ||
} | ||
///@} | ||
#pragma mark MEMBERS | ||
private: | ||
std::queue<TElement> queue_; | ||
}; | ||
|
||
} // namespace egoa | ||
|
||
#endif // EGOA__DATA_STRUCTURES__CONTAINER__QUEUE__STD_FIFO_QUEUE_HPP |