/*
	Solitaire solver
	(C) 2001 William Benfold
	wb199@soton.ac.uk
*/	



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


unsigned char **makeSparseTable(unsigned int entries)
{
	unsigned int i,count = entries/CHUNK_SIZE+1;
	unsigned char **tmp = malloc(count*sizeof(unsigned char *));
	fprintf(stderr,"Chunk size is %x\n",CHUNK_SIZE);
	fprintf(stderr,"%x entries in sparse table\n",entries);
	fprintf(stderr,"%x chunk pointers\n",entries>>16);
	
	if(tmp==0)
	{
		puts("Not enough mem for sparse table index");
		exit(-2);
	}
	for(i=0; i<count; i++)
		tmp[i] = 0;
	return tmp;
}
	

unsigned char *sparseLookup(unsigned char **table, INDEX_TYPE index)
{
	INDEX_TYPE chunk = index/CHUNK_SIZE, offset = index%CHUNK_SIZE;
		
	if(table[chunk]==0)
		table[chunk] = calloc(CHUNK_SIZE,1);
	
	if(table[chunk]==0)
	{
		exit(-2);
	}
		
	return (table[chunk])+offset;
}
	