GT_INLINE void gt_sam_header_add_sequence_record(gt_sam_headers* const sam_headers,gt_sam_header_record* const header_record) { GT_SAM_HEADERS_CHECK(sam_headers); gt_string *sn_tag=gt_sam_header_record_get_tag(header_record,"SN"); gt_cond_error(!sn_tag,PARSE_SAM_HEADER_MISSING_TAG,"SQ","SN"); gt_cond_error(!gt_sam_header_record_get_tag(header_record,"LN"),PARSE_SAM_HEADER_MISSING_TAG,"SQ","LN"); if(sn_tag) { if(!sam_headers->sequence_dictionary_sn_hash) sam_headers->sequence_dictionary_sn_hash=gt_shash_new(); char *sn_str=gt_string_get_string(sn_tag); size_t* ix=gt_shash_get_element(sam_headers->sequence_dictionary_sn_hash,sn_str); // If SN Tag already exists, overwrite. if(ix) { gt_sam_header_record_delete(*(gt_sam_header_record **)gt_vector_get_elm(sam_headers->sequence_dictionary,*ix,gt_sam_header_record*)); gt_vector_set_elm(sam_headers->sequence_dictionary,*ix,gt_sam_header_record*,header_record); gt_error(PARSE_SAM_HEADER_DUPLICATE_TAG,"SQ","SN",sn_str); } else { ix=gt_alloc(size_t); *ix=gt_vector_get_used(sam_headers->sequence_dictionary); gt_shash_insert(sam_headers->sequence_dictionary_sn_hash,sn_str,ix,size_t*); gt_vector_insert(sam_headers->sequence_dictionary,header_record,gt_sam_header_record*); } }
GT_INLINE gt_sam_attribute* gt_sam_attributes_get_attribute(gt_sam_attributes* const sam_attributes,char* const tag) { GT_SAM_ATTRIBUTES_CHECK(sam_attributes); return gt_shash_get_element(sam_attributes,tag); }