Sophie

Sophie

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

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

#ifndef POLYNOMIALRING_H_INCLUDED
#define POLYNOMIALRING_H_INCLUDED

#include <string>
#include <vector>
#include <set>

#include "field.h"

using namespace std;
class PolynomialRingImplementation
{
 public:
  int refCount;
  Field theField;
  int n;
  vector<string> variableNames;
  PolynomialRingImplementation(Field const &f, int numberOfVariables, vector<string> const &variableNames_):
    theField(f),
    n(numberOfVariables),
    refCount(0),
    variableNames(variableNames_)
    {
    }
};


class PolynomialRing
{
  PolynomialRingImplementation *implementingObject;
 public:
  inline int getNumberOfVariables()const{return implementingObject->n;}
  inline Field const&getField()const{return implementingObject->theField;}
  PolynomialRing withVariablesAppended(string variableNames)const;
  int variableIndex(string const &name)const;//returns -1 if no match
  string const &getVariableName(int i)const;

  class Polynomial one()const;
  class Polynomial zero()const;

  //construtors
  PolynomialRing(Field const &f, int numberOfVariables);
  PolynomialRing(Field const &f, vector<string> const &variables);
  ~PolynomialRing();
  PolynomialRing(PolynomialRing const &a);//copy constructor
  PolynomialRing& operator=(const PolynomialRing& a);//assignment
};


vector<string> matrixVariableNames(string base, int height, int width);
vector<string> vectorVariableNames(string base, int n);
vector<string> subsetVariableNames(string base, int n, int choose, bool M2Convention);
int subsetToVariableIndex(set<int> const &s, int n, int choose, bool M2Convention);

#endif