bool CLocation_constraint :: x_DoesBioseqMatchSequenceType(CConstRef <CBioseq> bioseq, const ESeqtype_constraint& seq_type) const { if (seq_type == eSeqtype_constraint_any || (bioseq->IsNa() && seq_type == eSeqtype_constraint_nuc) || (bioseq->IsAa() && seq_type == eSeqtype_constraint_prot)) { return true; } else return false; };
bool CLocation_constraint :: Match(const CSeq_feat& feat, CConstRef <CSeq_feat> feat_to, CConstRef <CBioseq> feat_bioseq) const { if (x_IsLocationConstraintEmpty()) { return true; } const CSeq_loc& feat_loc = feat.GetLocation(); if (GetStrand() != eStrand_constraint_any) { if (feat_bioseq.Empty()) { return false; } else if (feat_bioseq->IsAa()) { if (feat_to.Empty()) { // when feat is product, feat_to points to cds return false; } else if (!x_DoesStrandMatchConstraint (feat_to->GetLocation())) { return false; } } else if (!x_DoesStrandMatchConstraint (feat_loc)) { return false; } } if (!x_DoesBioseqMatchSequenceType(feat_bioseq, GetSeq_type())) { return false; } if (!x_DoesLocationMatchPartialnessConstraint (feat_loc)) { return false; } if (!x_DoesLocationMatchTypeConstraint (feat_loc)) { return false; } if (!x_DoesLocationMatchDistanceConstraint(feat_bioseq, feat_loc)) { return false; } return true; };