Sophie

Sophie

distrib > Mandriva > 2011.0 > i586 > by-pkgid > e1c4a3050d44123471c4053e4926e965 > files > 232

gfan-debug-0.4plus-2mdv2011.0.i586.rpm

#ifndef TERMORDER_H_INCLUDED
#define TERMORDER_H_INCLUDED

class TermOrder;

#include "vektor.h"
class Printer;
//#include "printer.h"

// All term orders must be represented by a matrix. This is needed in the generic Groebner walk.

class TermOrder
{
 public:
  virtual int rowDot(int row, const IntegerVector &v)const=0;
  virtual bool operator()(const IntegerVector &a, const IntegerVector &b, int scaleA=1, int scaleB=1, int perturbationDegree=-1)const=0;
  //  virtual bool operator()(IntegerVector const &a, IntegerVector const &b)const=0;
  virtual void print(Printer &p)const;
  void printMatrix(Printer &p, int dim)const;
};


class LexicographicTermOrder : public TermOrder
{
  int largest;
 public:
  LexicographicTermOrder(int largest=0);
  int rowDot(int row, const IntegerVector &v)const;
  bool operator()(const IntegerVector &a, const IntegerVector &b, int scaleA=1, int scaleB=1, int perturbationDegree=-1)const;
  //  bool operator()(const IntegerVector &a, const IntegerVector &b)const;
  void print(Printer &p)const;
};


class ReverseLexicographicTermOrder : public TermOrder
{
  int largest;
  int index(int row, const IntegerVector &a)const;
 public:
  ReverseLexicographicTermOrder(int largest=0);
  virtual int rowDot(int row, const IntegerVector &v)const;
  virtual bool operator()(const IntegerVector &a, const IntegerVector &b, int scaleA=1, int scaleB=1, int perturbationDegree=-1)const;
  //  bool operator()(const IntegerVector &a, const IntegerVector &b)const;
  void print(Printer &p)const;
};

class StandardGradedLexicographicTermOrder : public TermOrder
{
  int largest;
 public:
  StandardGradedLexicographicTermOrder(int largest=0);
  //StandardGradedLexicographicTermOrder(const IntegerVector &order);
  virtual int rowDot(int row, const IntegerVector &v)const;
  virtual bool operator()(const IntegerVector &a, const IntegerVector &b, int scaleA=1, int scaleB=1, int perturbationDegree=-1)const;
  //  bool operator()(const IntegerVector &a, const IntegerVector &b)const;
  void print(Printer &p)const;
};

class WeightTermOrder : public TermOrder  // tie broken with lexicographic
{
  IntegerVector weight;
  //  TermOrder &tieBreaker;  // how do I implement tie breaking. pointer or ref... what happens when you copy a term order?
 public:
  WeightTermOrder(const IntegerVector weight_):weight(weight_){}
  // WeightTermOrder(const IntegerVector weight_, TermOrder ):weight(weight_),tieBreaker(0){}
  virtual int rowDot(int row, const IntegerVector &v)const;
  virtual bool operator()(const IntegerVector &a, const IntegerVector &b, int scaleA=1, int scaleB=1, int perturbationDegree=-1)const;
  //  bool operator()(const IntegerVector &a, const IntegerVector &b)const;
  void print(Printer &p)const;
};


class WeightReverseLexicographicTermOrder : public TermOrder  // tie broken with reverse lexicographic
{
  IntegerVector weight;
 public:
  IntegerVector getWeight()const;
  WeightReverseLexicographicTermOrder(const IntegerVector weight_):weight(weight_){}
  virtual int rowDot(int row, const IntegerVector &v)const;
  virtual bool operator()(const IntegerVector &a, const IntegerVector &b, int scaleA=1, int scaleB=1, int perturbationDegree=-1)const;
  //  bool operator()(const IntegerVector &a, const IntegerVector &b)const;
  void print(Printer &p)const;
};

/*class EliminationTermOrder
{
 public:
   };
*/

#endif