// ============================================================ // // ln3impl.h // // Copyright 2002, Dennis Meilicke and Rene Peralta // // ============================================================ // // Description: // // Prototypes for public implementation functions. // // These functions will not normally be called by the users. // Rather, the user methods are defined in terms of these // functions. // // To do: // // The implementation functions should reside in their own // namespace. // // ============================================================ #ifndef __ln3_ln3impl__ #define __ln3_ln3impl__ // // mpCC under AIX does not have type bool // #ifdef _AIX #include #endif #include // // divide.cpp // void Divide( const Base *N, const Base *D, Base *Q, Base *R ); void Divide( const Base *N, long d, Base *Q, long *r ); void Divide( const Base *N, unsigned long d, Base *Q, unsigned long *r ); // // add.cpp // void add( const Base *A, const Base *B, Base *Sum ); void add( Base *A, long b ); void add( Base *A, unsigned long b ); void Subtract( const Base *A, const Base *B, Base *Diff ); void Subtract( Base *A, long b ); void Subtract( Base *A, unsigned long b ); // // multiply.cpp // void Multiply( Base *A, long b ); void Multiply( Base *A, unsigned long b ); void multiply( const Base *A, const Base *B, Base *Prod ); // // shift.cpp // void ShiftRightEqual( Base *Operand, size_t distance ); void ShiftLeftEqual( Base *Operand, size_t distance ); // // assign.cpp // void Assign( Base *A, long a ); void Assign( Base *A, unsigned long a ); void Assign( Base *A, char *a ); // // compare.cpp // compare_t Compare( const Base * const A, const Base * const B ); compare_t AbsCompare( const Base * const A, const Base * const B ); compare_t Compare( const Base * const A, long b ); compare_t CompareAbs( const Base * const A, long b ); compare_t Compare( const Base * const A, unsigned long b ); compare_t CompareAbs( const Base * const A, unsigned long b ); // // io.cpp // void Read( Base *A, istream &stream ); void Print( const Base * const A, ostream &stream, short base=10 ); // // bits.cpp // size_t NumBits( digit_t x ); size_t NumBits( const Base * const A ); void And( Base *A, const Base * const B ); void Or( Base *A, const Base * const B ); void Xor( Base *A, const Base * const B ); void Not( Base *A ); short GetBit( const Base * const A, size_t bit ); void SetBit( Base *A, size_t bit, short value ); // // Explicit inline conversions. // These prevent certain abiguity errors. // inline void Assign( Base *A, int a ) { Assign( A, (long)a ); } inline void Assign( Base *A, unsigned int a ) { Assign( A, (unsigned long) a ); } #endif