#include <exec/types.h>
#include <stdio.h>
#include "misc/array.h"
#include "misc/systemdefs.h"
#include "wordset.h"

WordSet::WordSet(){
	totalCount=0;
	tracks=1;
}

WordSet::~WordSet(){
	ClearSet();
}

void WordSet::ClearSet(){
	UINT size=refArray.GetSize();
	Reference *ref;
	
	for (UINT n=0;n<size;n++){
		ref=refArray.GetItem(0);
		delete[] ref->ref_Word;		// Delete the word
		delete ref;						// Delete the actual reference
		refArray.DeleteItem(0);
	}
	totalCount=0;
	tracks=1;
}	


BOOL WordSet::LoadSet(char *filename){
	FILE *file;
	UINT words=0;
	UINT count,len, total=0;
	char *buffer=new char[255];
	Reference *newRef;
	
	if(file=fopen(filename,"r")){
		while(!feof(file)){
			if(fscanf(file,"%s %d",buffer,&count)==2){
				newRef=new Reference;
				len=strlen(buffer);
				newRef->ref_Word=new char[len+1];
				strncpy(newRef->ref_Word,buffer,len);
				newRef->ref_Word[len]=NULL;
				newRef->ref_Count=count;
				total+=count;
//				printf("%s - %d\n",newRef->ref_Word,newRef->ref_Count);
				refArray.AddItem(newRef);
				if (++words==256){
					tracks++;
					words=0;
				}
			}
		}
		fclose(file);
		printf("Tracks: %d Total: %d\n",tracks, total);
	}
	else
		printf("Unable to open input file\n");
	return TRUE;
}

Reference *WordSet::GetRef(UINT index){
	if (index>=0 && index<refArray.GetSize())
		return refArray.GetItem(index);
	else
		return NULL;
}

// Decreases the word count
// If count=0 then we remove the word from the list
//
void WordSet::RemoveRef(UINT index){
	Reference *pRef=refArray.GetItem(index);
	pRef->ref_Count--;
	if (pRef->ref_Count==0)
		refArray.DeleteItem(index);
}