#include "field.h"

#include <memory>
#include <assert.h>
#include <gmp.h>

#include "printer.h"



Field *Field::list;
Field *Field::currentField;


Field::Field()
{
}


Field *Field::find(const char *name)
{
   Field *l=list;
   while(l)
      {
         if(std::string(l->name())==std::string(name))break;
         l=l->next;
      }
   return l;
}


void Field::printList(FILE *f)
{
   fprintf(f,"List of linked field classes:\n");
   Field *l=list;
   while(l)
      {
         fprintf(f," %s\n",l->name());
         l=l->next;
      }
}


void Field::checkInitialized()
{
  if(!currentField)
    {
      setField(find("GmpRationals"));
    }
}


void Field::setField(Field *field)
{
  assert(field);
  currentField=field;
  fprintf(Stderr,"Field class being used: \"%s\".\n",currentField->name());
}


FieldElement Field::staticZHomomorphism(int n)
{
  checkInitialized();
  return currentField->zHomomorphism(n); 
}








