GtGenomeNode* gt_feature_node_new(GtStr *seqid, const char *type, GtUword start, GtUword end, GtStrand strand) { GtGenomeNode *gn; GtFeatureNode *fn; gt_assert(seqid && type); gt_assert(start <= end); gn = gt_genome_node_create(gt_feature_node_class()); fn = gt_feature_node_cast(gn); fn->seqid = gt_str_ref(seqid); fn->source = NULL; fn->type = gt_symbol(type); fn->score = GT_UNDEF_FLOAT; fn->range.start = start; fn->range.end = end; fn->representative = NULL; fn->attributes = NULL; fn->bit_field = 0; fn->bit_field |= strand << STRAND_OFFSET; fn->children = NULL; /* the children list is create on demand */ fn->observer = NULL; gt_feature_node_set_phase(fn, GT_PHASE_UNDEFINED); set_transcriptfeaturetype(fn, TRANSCRIPT_FEATURE_TYPE_UNDETERMINED); set_tree_status(&fn->bit_field, IS_TREE); /* the DFS status is set to DFS_WHITE already */ fn->representative = NULL; return gn; }
GtGenomeNode* gt_sequence_node_new(const char *description, GtStr *sequence) { GtGenomeNode *gn = gt_genome_node_create(gt_sequence_node_class()); GtSequenceNode *sn = gt_sequence_node_cast(gn); gt_assert(description && sequence); sn->description = gt_str_new_cstr(description); sn->sequence = gt_str_ref(sequence); return gn; }
GtGenomeNode* gt_region_node_new(GtStr *seqid, unsigned long start, unsigned long end) { GtGenomeNode *gn = gt_genome_node_create(gt_region_node_class()); GtRegionNode *rn = gt_region_node_cast(gn); gt_assert(seqid); gt_assert(start <= end); rn->seqid = gt_str_ref(seqid); rn->range.start = start; rn->range.end = end; return gn; }