#include <stdio.h>
#include "void.h"

#define size 2048

#define left 0
#define right 1

int array[512];

int end;

void_memory * memory;

void print_node(void_node * node)
{
	int name = *((int*)node->pack);
	int parent = *((int*)node->sentinel->pack);
	int last = 0;
	if (node->last != 0){
		last = *((int*)node->last->pack);
	}
	int next = 0;
	if (node->next != 0){
		next = *((int*)node->next->pack);
	}
	printf("%d : ",name);
	printf("%d->parent = %d; ",name,parent);
	printf("%d->left = %d; ",name,last);
	printf("%d->right = %d;\n",name,next);
}

void print_pack(void * node){
	printf("%d ",*((int*)node));	
}

int r = 0;
int u = 1;
int d = 2;
int t = 3;
int q = 4;
int c = 5;
int s = 6;

void_node * insert(void_node * root,void * pack,int direction){
	return void_leaf(root,pack,direction,void_alloc(memory,sizeof(void_node)));
}

void delete(void_node * nud){
	void_free(memory,void_cut(nud));
}

void traverse(void_node * nud){
	print_node(nud);
	if (nud->last != 0){
		traverse(nud->last);
	}
	if (nud->next != 0){
		traverse(nud->next);
	}
}

int main (void)
{
	printf ("binary tree ?\n");
//=====================================================================
	memory = void_seg ((void*)&array, 2048);

	void_node * root = insert(0,&r,0);
	void_node * deux = insert(root,&d,left);
	void_node * cinq = insert(root,&c,right);
	void_node * un = insert(deux,&u,left);
	void_node * trois = insert(deux,&t,right);
	void_node * quatre = insert(cinq,&q,left);
	void_node * six = insert(cinq,&s,right);

	//traverse(root);
	printf("len = %d\n",void_traverse(root,4,&print_pack));

	void_rotate(un,1);
	delete(deux);
	delete(quatre);
//===========================================

/*	int i;
	for (i=0;i<160;i+=1)
	{
		printf ("%9d ",array[i]);
	}
	printf ("\n");
*/

	return 0;
}
