#ifndef LOADER_H
#define LOADER_H

#include <map>

#define LINE_LEN 1024

template<typename Graph>
void LoadGraph(Graph &G, char *filename) {
  FILE *file;
  if ((file = fopen(filename, "r")) == NULL) {
    printf("Could not open %s\n", filename);
    return;
  }
  int i, n1, n2;
  std::map<int, typename Graph::NodeIt> nmap;
  char line[LINE_LEN];
  while (fgets(line, LINE_LEN, file)) {
    switch (line[0]) {
      case 'n':
        nmap[atoi(line + 1)] = G.addNode();
        break;
      case 'a':
        n1 = atoi(line + 1);
        i = 1;
        while (isspace(line[i])) i++;
        while (isdigit(line[i])) i++;
        n2 = atoi(line + i);
        if (nmap.find(n1) == nmap.end()) {
          nmap[n1] = G.addNode();
        }
        if (nmap.find(n2) == nmap.end()) {
          nmap[n2] = G.addNode();
        }
        G.addEdge(nmap[n1], nmap[n2]);
        break;
    }
  }
}

#endif
