@@ -747,7 +747,7 @@ int bcf_remove_allele_set(const bcf_hdr_t *header, bcf1_t *line, const struct kb
747747 nnew = nR_new ;
748748 }
749749
750- #define BRANCH (type_t ,is_vector_end ) \
750+ #define BRANCH (type_t ,is_vector_end , set_missing ) \
751751 { \
752752 for (j=0; j<line->n_sample; j++) \
753753 { \
@@ -757,7 +757,12 @@ int bcf_remove_allele_set(const bcf_hdr_t *header, bcf1_t *line, const struct kb
757757 int k_src, k_dst = 0; \
758758 for (k_src=0; k_src<nori; k_src++) \
759759 { \
760- if ( is_vector_end ) { memcpy(ptr_dst+k_dst, ptr_src+k_src, size); break; } \
760+ if ( is_vector_end ) \
761+ { \
762+ if ( k_dst ) memcpy(ptr_dst+k_dst, ptr_src+k_src, size); \
763+ else set_missing; \
764+ break; \
765+ } \
761766 if ( kbs_exists(rm_set, k_src+inc) ) continue; \
762767 memcpy(ptr_dst+k_dst, ptr_src+k_src, size); \
763768 k_dst++; \
@@ -766,8 +771,8 @@ int bcf_remove_allele_set(const bcf_hdr_t *header, bcf1_t *line, const struct kb
766771 }
767772 switch (type )
768773 {
769- case BCF_HT_INT : BRANCH (int32_t ,ptr_src [k_src ]== bcf_int32_vector_end ); break ;
770- case BCF_HT_REAL : BRANCH (float ,bcf_float_is_vector_end (ptr_src [k_src ])); break ;
774+ case BCF_HT_INT : BRANCH (int32_t ,ptr_src [k_src ]== bcf_int32_vector_end , ptr_dst [ k_dst ] = bcf_int32_missing ); break ;
775+ case BCF_HT_REAL : BRANCH (float ,bcf_float_is_vector_end (ptr_src [k_src ]), bcf_float_set_missing ( ptr_dst [ k_dst ]) ); break ;
771776 }
772777 #undef BRANCH
773778 }
0 commit comments