86 lines
2.4 KiB
C++
86 lines
2.4 KiB
C++
/*
|
|
* C++ class to implement a bivariate polynomial type and to allow
|
|
* arithmetic on polynomials whose coefficients are from
|
|
* the finite field of characteristic 2
|
|
*
|
|
* WARNING: This class has been cobbled together for a specific use with
|
|
* the MIRACL library. It is not complete, and may not work in other
|
|
* applications
|
|
*
|
|
* See Knuth The Art of Computer Programming Vol.2, Chapter 4.6
|
|
*/
|
|
|
|
#ifndef POLY2XY_H
|
|
#define POLY2XY_H
|
|
|
|
#include "gf2m.h"
|
|
#include "poly2.h"
|
|
|
|
class term2XY
|
|
{
|
|
public:
|
|
GF2m an;
|
|
int nx;
|
|
int ny;
|
|
term2XY *next;
|
|
};
|
|
|
|
class Poly2XY
|
|
{
|
|
public:
|
|
term2XY *start;
|
|
Poly2XY() {start=NULL;}
|
|
Poly2XY(const Poly2XY&);
|
|
Poly2XY(const Poly2&);
|
|
Poly2XY(const GF2m&,int,int);
|
|
Poly2XY(int);
|
|
|
|
void clear();
|
|
term2XY *addterm(const GF2m&,int,int,term2XY *pos=NULL);
|
|
GF2m F(const GF2m&,const GF2m&);
|
|
Poly2 F(const GF2m&);
|
|
GF2m coeff(int,int) const;
|
|
Poly2 convert_x() const;
|
|
Poly2 convert_x2() const;
|
|
Poly2 convert_x3() const;
|
|
Poly2XY& operator=(const Poly2XY&);
|
|
Poly2XY& operator=(int);
|
|
Poly2XY& operator+=(const Poly2XY&);
|
|
Poly2XY& operator-=(const Poly2XY&);
|
|
Poly2XY& operator%=(const Poly2XY&);
|
|
Poly2XY& operator*=(const GF2m&);
|
|
|
|
friend Poly2XY diff_dx(const Poly2XY&);
|
|
friend Poly2XY diff_dy(const Poly2XY&);
|
|
friend BOOL iszero(const Poly2XY&);
|
|
friend BOOL isone(const Poly2XY&);
|
|
|
|
friend Poly2XY operator*(const Poly2XY&,const Poly2XY&);
|
|
friend Poly2XY operator%(const Poly2XY&,const Poly2XY&);
|
|
friend Poly2XY operator/(const Poly2XY&,const Poly2XY&);
|
|
friend Poly2XY operator+(const Poly2XY&,const Poly2XY&);
|
|
friend Poly2XY operator+(const Poly2XY&,const GF2m&);
|
|
friend Poly2XY operator-(const Poly2XY&,const Poly2XY&);
|
|
friend Poly2XY operator*(const Poly2XY&,const GF2m&);
|
|
|
|
// friend Poly2XY operator*(const GF2m&,Variable);
|
|
friend Poly2XY operator*(Variable, Variable);
|
|
friend Poly2XY pow2X(Variable,int);
|
|
friend Poly2XY pow2Y(Variable,int);
|
|
friend Poly2XY pow(const Poly2XY&,int);
|
|
friend BOOL operator==(const Poly2XY&,const Poly2XY&);
|
|
friend int degreeX(const Poly2XY&);
|
|
friend int degreeY(const Poly2XY&);
|
|
friend Poly2XY compose(const Poly2XY&,const Poly2XY&, const Poly2XY&);
|
|
|
|
friend ostream& operator<<(ostream&,const Poly2XY&);
|
|
~Poly2XY();
|
|
};
|
|
|
|
extern Poly2XY operator*(Variable, Variable);
|
|
extern Poly2XY pow2X(Variable,int);
|
|
extern Poly2XY pow2Y(Variable,int);
|
|
|
|
#endif
|
|
|