#include <astl_binary.h>
#include <debug.h>

// symmetrical difference

template <class DFA>
void sym_diff(const DFA &A1, const DFA &A2)
{
  DFA_stream output(cout);
  clone(output, dfirstmarkc(tracec(sym_diffc(debugc(A1), debugc(A2)))));
  exit(0);
}

int main(int argc, char **argv)
{
  usage use(argv[0]);
  use.push_back("dfa_file1 [dfa_file2]");
  use.push_back("send symmetrical difference of dfa1 and dfa2 to standard output");
  use.check(argc, argv, 1, 1);
  if (use[0] == "matrix") {
    DFA_matrix<plain> A[2];
    load_dfa(A[0], use[1]);
    load_dfa(A[1], use[2]);
    sym_diff(A[0], A[1]);
  }

  if (use[0] == "map") {
    DFA_map<plain> A[2];
    load_dfa(A[0], use[1]);
    load_dfa(A[1], use[2]);
    sym_diff(A[0], A[1]);
  }

  if (use[0] == "bin") {
    DFA_bin<plain> A[2];
    load_dfa(A[0], use[1]);
    load_dfa(A[1], use[2]);
    sym_diff(A[0], A[1]);
  }
    
  cerr << argv[0] << ": " << use[0] 
       << " type unauthorized (sorted transitions needed)" << endl;
  exit(3);
}
  
  

