Beispiel #1
0
int main(void) {
    Trie *trie = NULL;
    Trie_init(&trie);

    /* find on empty trie. */
    assert(!Trie_find(trie, (ts){0}, 1));

    /* Add and find length 1. */
    assert(!Trie_add(trie, (ts){0}, 1));
    assert(Trie_find(trie, (ts){0}, 1));
    assert(!Trie_find(trie, (ts){1}, 1));

    /* Add previously added. */
    assert(Trie_add(trie, (ts){0}, 1));

    /* Add and find length 3 */
    {
        assert(Trie_find(trie, (ts){0}, 1));
        assert(!Trie_find(trie, (ts){0, 1}, 2));
        assert(!Trie_find(trie, (ts){0, 1, 2}, 3));

        assert(!Trie_add(trie, (ts){0, 1, 2}, 3));

        assert(Trie_find(trie, (ts){0}, 1));
        assert(!Trie_find(trie, (ts){0, 1}, 2));
        assert(Trie_find(trie, (ts){0, 1, 2}, 3));
    }

    return EXIT_SUCCESS;
}
Beispiel #2
0
int main(int argc, char** argv)
{
	if (!strcmp(argv[1], "load")) {
		FILE* file = fopen("trie-data", "r");
		Trie_typ* loaded = Trie_load(file);

		struct termios oldT, newT;
		ioctl(0, TCGETS, &oldT);
		newT = oldT;
		newT.c_lflag &= ~(ECHO | ICANON);
		ioctl(0, TCSETS, &newT);	

		char word[1024];
		int pos = 0;
		while (1) {
			char c;
			read(0, &c, 1);
			if (c == '/') {
				pos = 0;
				memset(word, 0, 1024);
			} else if (c == '?') {
				Trie_destroy(loaded);
				fclose(file);
				return 0;
			} else {
				word[pos++] = c;
				word[pos] = '\0';
				find_and_print(loaded, word);
			}
		}
		return 0;
	}	

	Trie_typ* trie = Trie_init();

	char word[1024];

	while (fgets(word, 1024-1, stdin)) {
		word[strlen(word)-1] = '\0';  // replace the newline
		Trie_add(trie, word);
	}

	if (!strcmp(argv[1], "build")) {
		FILE* stream = fopen("trie-data", "w");
		if (stream) {
			Trie_save(trie, stream);
			fclose(stream);	
		} else {
			printf("Error occurred\n");
		}	
	}

	find_and_print(trie, argv[1]);

	Trie_destroy(trie);

	trie = NULL;

	return 0;
}
Beispiel #3
0
int Trie_add(Trie *trie, t *word, size_t size) {
    size_t i;
    int present;
    Trie **next;
    for (i = 0; i < size; ++i) {
        next = &trie->children[word[i]];
        if (*next == NULL)
            Trie_init(next);
        trie = *next;
    }
    present = trie->is_word;
    trie->is_word = 1;
    return present;
}