Program Listing for File Polynomial.h

↰ Return to documentation for file (ADS/numeric/Polynomial.h)

/*--------------------------------------------------------------------------*/
/*--------------------------- File Polynomial.h ----------------------------*/
/*--------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------*/
/*----------------------------- DEFINITIONS --------------------------------*/
/*--------------------------------------------------------------------------*/

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

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

#include "ADS/Contract.h"

#include <algorithm>
#include <cstddef>
#include <vector>

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

namespace ADS {

template< class T >
std::vector< T > multiplyNaive( const std::vector< T > & p ,
                                const std::vector< T > & q ,
                                long * mults = nullptr );

namespace detail {

template< class T >
void addShifted( std::vector< T > & r , const std::vector< T > & a ,
                 std::size_t s , T sign = T( 1 ) );

template< class T >
std::vector< T > multiplyRec( const std::vector< T > & p ,
                              const std::vector< T > & q , bool three ,
                              long * mults );

template< class T >
std::vector< T > multiplySame( std::vector< T > p , std::vector< T > q ,
                               bool three , long * mults );

}  // end( namespace detail )

template< class T >
std::vector< T > multiplyFour( const std::vector< T > & p ,
                               const std::vector< T > & q ,
                               long * mults = nullptr );

template< class T >
std::vector< T > multiplyKaratsuba( const std::vector< T > & p ,
                                    const std::vector< T > & q ,
                                    long * mults = nullptr );

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

}  // end( namespace ADS )

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

#include "ADS/numeric/impl/Polynomial.tpp"

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

#endif  /* Polynomial.h included */

/*--------------------------------------------------------------------------*/
/*------------------------- End File Polynomial.h --------------------------*/
/*--------------------------------------------------------------------------*/