#include "graph.h"
#include <stdlib.h>

struct s_graph
{
  unsigned long color;
  void* name;
  list* con;
};

graph* graphCreate(const void* name)
{
  graph* res = (graph*)malloc(sizeof(graph));
  
  res->color = 0;
  res->name = (void*)name;
  res->con = listCreate();
  
  return res;
}

void graphConnect(graph* src, const graph* dest)
{
  /* check for double connections - could surely be optimized a bit */
  listStart(src->con);
  while (listNext(src->con))
  {
    if (listGet(src->con) == dest)
      return;
  }
  /* check passed, so add that new connection */
  listAdd(src->con, dest);
}

void graphColorNode(graph* src, unsigned long color)
{
  src->color = color;
}

void graphNameNode(graph* src, const void* name)
{
  src->name = (void*)name;
}

unsigned long graphGetColorNode(graph* src)
{
  return src->color;
}

void* graphGetNameNode(graph* src)
{
  return src->name;
}

list* graphGetConnections(graph* src)
{
  return src->con;
}