#include "funky.hpp"

//integer
  fint::fint(int _arg)
  {
    arg = _arg;
  }

  int fint::operator () ()
  {
    return arg;
  }
  
  funkyOneOp::funkyOneOp (funkyInt * _arg)
  {
    arg = _arg;
  }

  funkyTwoOp::funkyTwoOp (funkyInt * _arg1, funkyInt * _arg2)
  {
    arg1 = _arg1;
    arg2 = _arg2;
  }
  
  int finc::operator() ()
  {
    return (*arg)()+1;
  }
  
  int fdec::operator() ()
  {
    return (*arg)()-1;
  }

  int fadd::operator() ()
  {
    return (*arg1)() + (*arg2)();
  }

  int fsub::operator() ()
  {
    return (*arg1)() - (*arg2)();
  }

  int fmul::operator() ()
  {
    return (*arg1)() * (*arg2)();
  }

  int fdiv::operator() ()
  {
    return (*arg1)() / (*arg2)();
  }
  
  int fmod::operator() ()
  {
    return (*arg1)() % (*arg2)();
  }

  int fpow::operator() ()
  {
    int a = 1,
        b = (*arg1)(),
        n = (*arg2)();
    for (int i=0; i < n; i++)
      a *= b;
    return a;
  }

  int fiand::operator() ()
  {
    return (*arg1)() & (*arg2)();
  }
  
  int fior::operator() ()
  {
    return (*arg1)() | (*arg2)();
  }
  
  int fixor::operator() ()
  {
    return (*arg1)() ^ (*arg2)();
  }

  int fishl::operator() ()
  {
    return (*arg1)() << (*arg2)();
  }
  
  int fishr::operator() ()
  {
    return (*arg1)() >> (*arg2)();
  }
  
  //stack
  
  