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*);
  	}
  }
Example #2
0
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);
}