static int md5_to_seqid(GtGenomeNode *gn, GtRegionMapping *region_mapping, GtError *err) { GtStr *seqid; int had_err = 0; gt_error_check(err); gt_assert(gn && region_mapping); seqid = gt_genome_node_get_seqid(gn); if (gt_md5_seqid_has_prefix(gt_str_get(seqid))) { /* seqid is a MD5 seqid -> change id */ GtStr *desc = gt_str_new(); had_err = gt_region_mapping_get_description(region_mapping, desc, seqid, err); if (!had_err) { GtStr *new_seqid = gt_str_new(); gt_regular_seqid_save(new_seqid, desc); if (gt_feature_node_try_cast(gn)) { M2IChangeSeqidInfo info; info.new_seqid = new_seqid; info.region_mapping = region_mapping; had_err = gt_feature_node_traverse_children((GtFeatureNode*) gn, &info, m2i_change_seqid, true, err); } else gt_genome_node_change_seqid(gn, new_seqid); gt_str_delete(new_seqid); } gt_str_delete(desc); } return had_err; }
static int gff3_visitor_feature_node(GtNodeVisitor *nv, GtFeatureNode *fn, GtError *err) { GtGFF3Visitor *gff3_visitor; int had_err; gt_error_check(err); gff3_visitor = gff3_visitor_cast(nv); gff3_version_string(nv); had_err = gt_feature_node_traverse_children(fn, gff3_visitor, store_ids, true, err); if (!had_err) { if (gt_feature_node_is_tree(fn)) { had_err = gt_feature_node_traverse_children(fn, gff3_visitor, gff3_show_feature_node, true, err); } else { /* got a DAG -> traverse in topologically sorted depth first fashion to make sure that the 'Parent' attributes are shown in correct order */ had_err = gt_feature_node_traverse_children_top(fn, gff3_visitor, gff3_show_feature_node, err); } } /* reset hashmaps */ gt_hashmap_reset(gff3_visitor->feature_node_to_id_array); gt_hashmap_reset(gff3_visitor->feature_node_to_unique_id_str); /* show terminator, if the feature has children (otherwise it is clear that the feature is complete, because no ID attribute has been shown) */ if (gt_feature_node_has_children(fn) || (gff3_visitor->retain_ids && gt_feature_node_get_attribute(fn, "ID"))) { if (!gff3_visitor->outstr) gt_file_xprintf(gff3_visitor->outfp, "%s\n", GT_GFF_TERMINATOR); else { gt_str_append_cstr(gff3_visitor->outstr, GT_GFF_TERMINATOR); gt_str_append_char(gff3_visitor->outstr, '\n'); } } return had_err; }
static int inter_feature_visitor_feature_node(GtNodeVisitor *nv, GtFeatureNode *fn, GtError *err) { GtInterFeatureVisitor *v; gt_error_check(err); v = gt_inter_feature_visitor_cast(nv); return gt_feature_node_traverse_children(fn, v, inter_feature_if_necessary, false, err); }
static int stat_visitor_feature_node(GtNodeVisitor *nv, GtFeatureNode *fn, GtError *err) { GtStatVisitor *sv; gt_error_check(err); sv = stat_visitor_cast(nv); return gt_feature_node_traverse_children(fn, sv, compute_statistics, false, err); }
static int gtf_visitor_feature_node(GtNodeVisitor *nv, GtFeatureNode *fn, GtError *err) { GtGTFVisitor *gtf_visitor; int had_err; gt_error_check(err); gtf_visitor = gtf_visitor_cast(nv); had_err = gt_feature_node_traverse_children(fn, gtf_visitor, gtf_show_feature_node, false, err); return had_err; }