Program Listing for File SubsequenceProblems.h

↰ Return to documentation for file (ADS/string/SubsequenceProblems.h)

/*--------------------------------------------------------------------------*/
/*----------------------- File SubsequenceProblems.h -----------------------*/
/*--------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------*/
/*----------------------------- DEFINITIONS --------------------------------*/
/*--------------------------------------------------------------------------*/

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

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

#include "ADS/Contract.h"
#include "ADS/string/LongestCommonSubsequence.h"

#include <algorithm>
#include <cstddef>
#include <cstdint>
#include <string>
#include <type_traits>
#include <vector>

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

namespace ADS {

template< class S > requires std::is_class_v< S >
[[nodiscard]] bool isInterleaving( const S & X , const S & Y , const S & Z );

[[nodiscard]] inline bool isInterleaving( const std::string & X ,
                                          const std::string & Y ,
                                          const std::string & Z );

template< class S > requires std::is_class_v< S >
[[nodiscard]] std::size_t scsLength( const S & X , const S & Y );

[[nodiscard]] inline std::size_t scsLength( const std::string & X ,
                                            const std::string & Y );

template< class S > requires std::is_class_v< S >
[[nodiscard]] S shortestCommonSupersequence( const S & X , const S & Y );

[[nodiscard]] inline std::string shortestCommonSupersequence(
                               const std::string & X , const std::string & Y );

template< class S > requires std::is_class_v< S >
[[nodiscard]] std::uint64_t subsequenceOccurrences( const S & P ,
                                                    const S & T );

[[nodiscard]] inline std::uint64_t subsequenceOccurrences(
                               const std::string & P , const std::string & T );

template< class S > requires std::is_class_v< S >
[[nodiscard]] S lcs3( const S & X , const S & Y , const S & Z );

[[nodiscard]] inline std::string lcs3( const std::string & X ,
                                       const std::string & Y ,
                                       const std::string & Z );

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

}  // end( namespace ADS )

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

#include "ADS/string/impl/SubsequenceProblems.tpp"

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

#endif  /* SubsequenceProblems.h included */

/*--------------------------------------------------------------------------*/
/*--------------------- End File SubsequenceProblems.h ---------------------*/
/*--------------------------------------------------------------------------*/