1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
void STORAGE_BUFFER_flush
(int file_id)
{
FILE * f = ss[file_id];
char * word = (char *) malloc(N);
rewind(f);
while(fread(word, N, 1, f)) {
STORAGE_BUFFER_search(buffers[file_id].items, word);
}
STORAGE_BUFFER_insert(buffers[file_id].items, f);
buffers[file_id].size = 0;
buffers[file_id].items = NULL;
free(word);
}
void STORAGE_BUFFER_search
(storage_buffer_tree tree,
char * word)
{
if(tree) {
int cmp;
cmp_string(N, word, tree->word, cmp);
switch(cmp) {
case EQ :
tree->to_flush = FALSE;
break;
case INF:
STORAGE_BUFFER_search(tree->left, word);
break;
case SUP:
STORAGE_BUFFER_search(tree->right, word);
break;
}
}
}
void STORAGE_BUFFER_insert
(storage_buffer_tree tree,
FILE *ss)
{
if(tree) {
STORAGE_BUFFER_insert(tree->left, ss);
STORAGE_BUFFER_insert(tree->right, ss);
if(tree->to_flush) {
fwrite(tree->word, N, 1, ss);
}
free(tree);
}
} |
Partager