#include <iostream.h>
#include <fstream.h>
#include "lexicon.h"
Lexicon::Lexicon(char *fileName) {
char buffer[1000];
ifstream inFile;
rootPtr = currPtr = NULL;
inFile.open(fileName);
if(!inFile) {
cout << "Lexicon file can not be opened." << endl;
return;
}
while(inFile) {
inFile.getline(buffer, 999);
if(strlen(buffer) < 2) continue;
insert(new genericNode(buffer));
}
}
void Lexicon::insert(genericNode *newWord) {
#ifdef DEBUG
cout << "insertLexicon: [" << *newWord << "]" << endl;
#endif
if(rootPtr == NULL) {
rootPtr = new lexicalNode;
rootPtr->node = newWord;
rootPtr->leftPtr = NULL;
rootPtr->rightPtr = NULL;
}
else
insert(newWord, rootPtr);
}
void Lexicon::insert(genericNode *newWord, lexicalNode *root) {
lexicalNode *tmp;
if(strcmp(root->node->word(), newWord->word()) > 0)
if(root->rightPtr) {
insert(newWord, root->rightPtr);
return;
}
else
tmp = root->rightPtr = new lexicalNode;
else
if(root->leftPtr) {
insert(newWord, root->leftPtr);
return;
}
else
tmp = root->leftPtr = new lexicalNode;
tmp->node = newWord;
tmp->leftPtr = NULL;
tmp->rightPtr = NULL;
}
Lexicon::~Lexicon() {
}
genericNode *Lexicon::currNode(void) {
if(currPtr)
return currPtr->node;
return NULL;
}
bool Lexicon::lookupNext(void) {
if(currPtr->leftPtr == NULL)
return false;
else
return lookupWord(currPtr->leftPtr, currPtr->node->word());
}
bool Lexicon::lookupWord(char *word) {
return lookupWord(rootPtr, word);
}
bool Lexicon::lookupWord(lexicalNode *root, char *word) {
int cmp;
if(root == NULL) return false;
cmp = strcmp(root->node->word(), word);
if(cmp == 0) {
currPtr = root;
return true;
}
if(cmp > 0)
return lookupWord(root->rightPtr, word);
else
return lookupWord(root->leftPtr, word);
}