Program Listing for File PriorityQueue.h

↰ Return to documentation for file (ADS/priority/PriorityQueue.h)

/*--------------------------------------------------------------------------*/
/*-------------------------- File PriorityQueue.h --------------------------*/
/*--------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------*/
/*----------------------------- DEFINITIONS --------------------------------*/
/*--------------------------------------------------------------------------*/

#ifndef __ADS_PriorityQueue
 #define __ADS_PriorityQueue
                      /* self-identification: #endif constant */

/*--------------------------------------------------------------------------*/
/*------------------------------ INCLUDES ----------------------------------*/
/*--------------------------------------------------------------------------*/

#include <concepts>
#include <cstddef>
#include <memory>
#include <stdexcept>
#include <utility>
#include <vector>

/*--------------------------------------------------------------------------*/
/*--------------------------- NAMESPACE ------------------------------------*/
/*--------------------------------------------------------------------------*/

namespace ADS {

/*--------------------------------------------------------------------------*/
/*-------------------------------- CONCEPT ---------------------------------*/
/*--------------------------------------------------------------------------*/

template< class Q >
concept PriorityQueue = requires( Q q , const Q cq ,
                                  const typename Q::Item & x ,
                                  const typename Q::Priority & p ,
                                  typename Q::Handle y ) {
 { cq.empty() } -> std::same_as< bool >;
 { cq.min() } -> std::convertible_to< typename Q::Item >;
 { q.deleteMin() } -> std::convertible_to< typename Q::Item >;
 { q.insert( x , p ) } -> std::same_as< typename Q::Handle >;
 q.decrease( y , p );
 };

}  // end( namespace ADS )

/*--------------------------------------------------------------------------*/

#endif  /* PriorityQueue.h included */

/*--------------------------------------------------------------------------*/
/*------------------------ End File PriorityQueue.h ------------------------*/
/*--------------------------------------------------------------------------*/