#include <cassert>
#include <algorithm>
using namespace std;

#include <virtualtriangle.h>

virtualtriangle::virtualtriangle()
{
  set(0,1,2);
}

void virtualtriangle::clockwise()
{
  uint k=v[2];
  v[2]=v[1];
  v[1]=v[0];
  v[0]=k;
}

void virtualtriangle::anticlockwise()
{
  // Left shift
  uint k=v[0];
  v[0]=v[1];
  v[1]=v[2];
  v[2]=k;
}

void virtualtriangle::set(uintc a, uintc b, uintc c)
{
  v[0]=a; 
  v[1]=b; 
  v[2]=c; 
}


void virtualtriangle::set(uintc base)
{
  switch(base)
  {
    case 0:  v[0]=1; v[1]=2; v[2]=0;
      break;

    case 1:  v[0]=2; v[1]=0; v[2]=1;
      break;

    case 2:  v[0]=0; v[1]=1; v[2]=2;
      break;

    default:
      assert(false);
  }
}

bool const virtualtriangle::validstate() const 
{
  uint v2[3];
  for (uint i=0; i<3; ++i)
    v2[i] = v[i];

  sort(v2,v2+3);
  for (uint i=0; i<3; ++i)
    if (v2[i]!=i)
      return false;

  return true;
}



