Program Listing for File SequenceAlgorithms.h

↰ Return to documentation for file (ADS/sequence/SequenceAlgorithms.h)

/*--------------------------------------------------------------------------*/
/*----------------------- File SequenceAlgorithms.h ------------------------*/
/*--------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------*/
/*----------------------------- DEFINITIONS --------------------------------*/
/*--------------------------------------------------------------------------*/

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

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

#include "ADS/ADT.h"
#include "ADS/Contract.h"
#include "ADS/sort/Sorted.h"

#include <cstddef>
#include <utility>

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

namespace ADS {

/*--------------------------------------------------------------------------*/
/*------------------------------- SEARCH -----------------------------------*/
/*--------------------------------------------------------------------------*/

template< Sequence S >
long search( const S & s , const typename S::Item & v );

template< Sequence S >
long searchOrdered( const S & s , const typename S::Item & v );

template< Sequence S >
std::pair< typename S::Pos , bool > lowerBound( const S & s ,
                                                const typename S::Item & v );

template< Sequence S >
S sublist( const S & s , typename S::Pos p , typename S::Pos q );

/*--------------------------------------------------------------------------*/
/*------------------------------- ORDER ------------------------------------*/
/*--------------------------------------------------------------------------*/

enum class Order { EMPTY , CONSTANT , INCREASING , DECREASING ,
                   NONDECREASING , NONINCREASING , NONE };

template< Sequence S >
Order order( const S & s );

/*--------------------------------------------------------------------------*/
/*------------------------------- SORTING ----------------------------------*/
/*--------------------------------------------------------------------------*/

template< Sequence S >
void bubbleSort( S & s );

template< Sequence S >
S mergeSorted( const S & a , const S & b );

template< Sequence S >
void naturalMergeSort( S & s , long * passes = nullptr );

template< Sequence S >
void removeDuplicates( S & s );

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

}  // end( namespace ADS )

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

#include "ADS/sequence/impl/SequenceAlgorithms.tpp"

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

#endif  /* SequenceAlgorithms.h included */

/*--------------------------------------------------------------------------*/
/*--------------------- End File SequenceAlgorithms.h ----------------------*/
/*--------------------------------------------------------------------------*/