static void coastline_processor_finish(struct item_bin_sink_func *coastline_processor) { struct tile_parameter *param=coastline_processor->priv_data[0]; struct item_bin_sink *tiles=coastline_processor->priv_data[1]; struct item_bin_sink_func *tile_collector=coastline_processor->priv_data[2]; g_free(param); tile_collector_finish(tile_collector); item_bin_sink_destroy(tiles); item_bin_sink_func_destroy(coastline_processor); }
int file_reader_finish(struct item_bin_sink *sink) { struct item_bin *ib; int ret =0; FILE *in=sink->priv_data[0]; int limit=(int)(long)sink->priv_data[1]; int offset=(int)(long)sink->priv_data[2]; while ((ib=read_item(in))) { if (offset > 0) { offset--; } else { ret=item_bin_write_to_sink(ib, sink, NULL); if (ret || (limit != -1 && !--limit)) { item_bin_sink_destroy(sink); return ret; } } } item_bin_sink_destroy(sink); return 0; }
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); }