51 lines
1.1 KiB
C
51 lines
1.1 KiB
C
|
/* vim: set sw=4 ts=4 si et: */
|
||
|
|
||
|
#include "filter.h"
|
||
|
|
||
|
Filter_t * filter_create(Config_io_t * io, nodeindex_t size, nodeindex_t offset)
|
||
|
{
|
||
|
Filter_t * filter = (Filter_t*) malloc (sizeof(Filter_t));
|
||
|
|
||
|
filter->_io = io;
|
||
|
filter->_size = size;
|
||
|
filter->_offset = offset;
|
||
|
|
||
|
return filter;
|
||
|
}
|
||
|
|
||
|
void filter_destroy(Filter_t * filter){
|
||
|
free(filter);
|
||
|
filter = NULL;
|
||
|
}
|
||
|
|
||
|
void filter_run(Filter_t * filter){
|
||
|
|
||
|
printf("filter_run -- Filtering between [ %d .. %d ]...\n",
|
||
|
filter->_offset,
|
||
|
filter->_size + filter->_offset);
|
||
|
|
||
|
char * buf = (char *) malloc (sizeof(char) * 100);
|
||
|
char * buf2;
|
||
|
for (;;){
|
||
|
if (gzeof(filter->_io->input)){ break; }
|
||
|
|
||
|
buf2 = gzgets (filter->_io->input, buf, 100);
|
||
|
if (buf2 == Z_NULL){
|
||
|
printf ("filter_run -- READ OFF\n");
|
||
|
break;
|
||
|
} else {
|
||
|
nodeindex_t one, two;
|
||
|
sscanf(buf,"%ld %ld",&one,&two);
|
||
|
if ((one >= filter->_offset)
|
||
|
&& (one < (filter->_offset + filter->_size))
|
||
|
&& (two >= filter->_offset)
|
||
|
&& (two < (filter->_offset + filter->_size))
|
||
|
){
|
||
|
fwrite (buf2, sizeof(char), strlen(buf2), filter->_io->output);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
printf("filter_run -- done\n");
|
||
|
}
|
||
|
|