#define _CRT_SECURE_NO_WARNINGS
#include <string.h>
#include <stdlib.h>
#include "Dict.h"

#ifdef DICT_SORTED_ARRAY_C

#define MAX_WORDS 10000

// Слова 
char words[MAX_WORDS][MAX_LEN_WORD];
// Количество слов в словаре
int numWords = 0;

/* CREATE - создает словарь.
Вызывается перед началом использования словаря. */
void Create() {
	numWords = 0;
}

/* DESTROY - уничтожает словарь.
Вызывается после окончания использования словаря. */
void Destroy() {
	numWords = 0;
}

/*
INSERT – добавляет элемент в множество.
Множество – содержит только уникальные элементы.
При повторном добавлении элемента в множество, множество не изменяется.
*/
void Insert(char* word) {

	// Начиная с конца массива ищется место куда нужно вставить слово
	// Вставка делается в отсортированный массив
	// Вставка делается так, чтобы после вставки массив был отсортирован
	int i = numWords;
	while ((i > 0) && (strcmp(word, words[i - 1]) < 0)) {
		strcpy(words[i], words[i - 1]);
		i--;
	}
	strcpy(words[i], word);
	++numWords;
}

/*
MEMBER – сообщает, является ли указанный элемент членом данного множества или нет.
Если является - возвращает 1, иначе - возвращает 0
*/
int  Member(char* word) {
	// Используется алгоритм бинарного поиска слова в отсортированном массиве
	
	if (bsearch(word, words, numWords, sizeof(char), strcmp)) {
		return 1;
	}
	else {
		return 0;
	}

	/*
	int left = 0;
	int right = numWords - 1;

	while (left <= right) {
		int middle = (left + right) / 2;

		int dif = strcmp(words[middle], word);
		if (dif == 0) {
			return 1;
		}
		else if (dif < 0) {
			left = middle + 1;
		}
		else if (dif > 0) {
			right = middle - 1;
		}
	}
	return 0;*/
}

#endif