struct item_bin_sink * file_reader_new(FILE *in, int limit, int offset) { struct item_bin_sink *ret; if (!in) return NULL; ret=item_bin_sink_new(); ret->priv_data[0]=in; ret->priv_data[1]=(void *)(long)limit; ret->priv_data[2]=(void *)(long)offset; fseek(in, 0, SEEK_SET); return ret; }
void process_coastlines(FILE *in, FILE *out) { struct item_bin_sink *reader=file_reader_new(in,1000000,0); struct item_bin_sink_func *file_writer=file_writer_new(out); struct item_bin_sink *result=item_bin_sink_new(); struct item_bin_sink_func *coastline_processor=coastline_processor_new(result); item_bin_sink_add_func(reader, coastline_processor); item_bin_sink_add_func(result, file_writer); file_reader_finish(reader); coastline_processor_finish(coastline_processor); file_writer_finish(file_writer); item_bin_sink_destroy(result); }
static struct item_bin_sink_func * coastline_processor_new(struct item_bin_sink *out) { struct item_bin_sink_func *coastline_processor=item_bin_sink_func_new(coastline_processor_process); struct item_bin_sink *tiles=item_bin_sink_new(); struct item_bin_sink_func *tile_collector=tile_collector_new(out); struct tile_parameter *param=g_new0(struct tile_parameter, 1); fprintf(stderr,"new:out=%p\n",out); param->min=14; param->max=14; param->overlap=0; item_bin_sink_add_func(tiles, tile_collector); coastline_processor->priv_data[0]=param; coastline_processor->priv_data[1]=tiles; coastline_processor->priv_data[2]=tile_collector; return coastline_processor; }