Program Listing for File Sorted.h

↰ Return to documentation for file (ADS/sort/Sorted.h)

/*--------------------------------------------------------------------------*/
/*----------------------------- File Sorted.h ------------------------------*/
/*--------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------*/
/*----------------------------- DEFINITIONS --------------------------------*/
/*--------------------------------------------------------------------------*/

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

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

#include "ADS/Contract.h"

#include <algorithm>
#include <cstddef>
#include <functional>
#include <type_traits>
#include <vector>

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

namespace ADS {

[[nodiscard]] bool checkingContract( void );

namespace detail {

template< class F >
bool contract( F && f );

template< class T >
std::vector< T > auditCopy( const std::vector< T > & A , std::size_t lo = 0 ,
                            std::size_t hi = std::size_t( -1 ) );

template< class T , class C >
bool sortedPermutation( const std::vector< T > & A ,
                        std::vector< T > before , C less ,
                        std::size_t lo = 0 ,
                        std::size_t hi = std::size_t( -1 ) );

template< class T , class C >
bool samePermutation( const std::vector< T > & A ,
                      std::vector< T > before , C less ,
                      std::size_t lo = 0 ,
                      std::size_t hi = std::size_t( -1 ) );

template< class S , class C >
bool sequenceSorted( const S & L , C less );

template< class T , class C >
inline constexpr bool naturalOrder =
 std::is_same_v< C , std::less<> > || std::is_same_v< C , std::less< T > >;

}  // end( namespace detail )

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

}  // end( namespace ADS )

/*--------------------------------------------------------------------------*/
/*-------------------------- IMPLEMENTATION --------------------------------*/
/*--------------------------------------------------------------------------*/

#include "ADS/sort/impl/Sorted.tpp"

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

#endif  /* Sorted.h included */

/*--------------------------------------------------------------------------*/
/*--------------------------- End File Sorted.h ----------------------------*/
/*--------------------------------------------------------------------------*/