Program Listing for File BinaryInteger.h

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

/*--------------------------------------------------------------------------*/
/*-------------------------- File BinaryInteger.h --------------------------*/
/*--------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------*/
/*----------------------------- DEFINITIONS --------------------------------*/
/*--------------------------------------------------------------------------*/

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

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

#include "ADS/Contract.h"
#include "ADS/numeric/Polynomial.h"

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

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

namespace ADS {

using Bits = std::vector< int >;

inline Bits toBits( std::uint64_t x , std::size_t n = 0 );

inline std::uint64_t fromBits( const Bits & b );

inline Bits carry( const std::vector< long > & c );

inline Bits binaryAdd( const Bits & X , const Bits & Y );

inline std::vector< long > widen( const Bits & X );

inline Bits multiplyBinarySchool( const Bits & X , const Bits & Y ,
                            long * mults = nullptr );

inline Bits multiplyBinaryFour( const Bits & X , const Bits & Y ,
                          long * mults = nullptr );

inline Bits multiplyBinaryKaratsuba( const Bits & X , const Bits & Y ,
                               long * mults = nullptr );

inline std::uint64_t ahmes( std::uint64_t a , std::uint64_t b ,
                            long * steps = nullptr );

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

}  // end( namespace ADS )

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

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

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

#endif  /* BinaryInteger.h included */

/*--------------------------------------------------------------------------*/
/*------------------------ End File BinaryInteger.h ------------------------*/
/*--------------------------------------------------------------------------*/