#include <stdio.h>
#include <stdlib.h>

#include "assert.h"
#include "graph.h"

VERTEX*
vertex_create(int id)
{
	VERTEX* vertex = (VERTEX*) malloc(sizeof(VERTEX));
	mem_assert(vertex);
	vertex->id = id;
	vertex->color = 1;
	vertex->n_start_edge = 0;
	vertex->n_end_edge = 0;
	return vertex;
}

void
vertex_add_start_edge(VERTEX* vertex, EDGE* start_edge)
{
	vertex->start_edge[vertex->n_start_edge] = start_edge;
	vertex->n_start_edge++;
}

void
vertex_add_end_edge(VERTEX* vertex, EDGE* end_edge)
{
	vertex->end_edge[vertex->n_end_edge] = end_edge;
	vertex->n_end_edge++;
}

void
vertex_set_color(VERTEX* vertex, int color)
{
	vertex->color = color;
}
void
vertex_free(VERTEX* vertex)
{
	free(vertex);
}


EDGE*
edge_create(int id)
{
	EDGE* edge = (EDGE*) malloc(sizeof(EDGE));
	mem_assert(edge);
	edge->id = id;
	edge->start_vertex = NULL;
	edge->end_vertex = NULL;
	edge->direct = 1;
	return edge;
}

void
edge_add_start_vertex(EDGE* edge, VERTEX* start_vertex)
{
	edge->start_vertex = start_vertex;
}

void
edge_add_end_vertex(EDGE* edge, VERTEX* end_vertex)
{
	edge->end_vertex = end_vertex;
}

void
edge_set_direct(EDGE* edge, int direct)
{
	edge->direct = direct;
}
void
edge_free(EDGE* edge)
{
	free(edge);
}
