#include <ncbi.h>
#include "blastapp.h"

/*-------------------------  ovlap_n()---------------------------------

	ovlap_n(hp1, hp2)

	return TRUE if hp1 and hp2 overlap on either sequence (or both);
	otherwise return FALSE
*/
Boolean
ovlap_n(hp1, hp2)
	register HSPPtr	hp1, hp2;
{
	register Coord_t	q_pos, s_pos, len, len2;

	if (hp1->frame != hp2->frame)
		return FALSE;

	q_pos = hp1->q_pos;
	len = hp1->len;
	len2 = hp2->len;

	/* hp1 contains hp2? */
	if ((q_pos <= hp2->q_pos && q_pos + len >= hp2->q_pos + len2) ||
			/* hp2 contains hp1? */
			(q_pos >= hp2->q_pos && q_pos + len <= hp2->q_pos + len2))
		return TRUE;

	s_pos = hp1->s_pos;
			/* hp1 contains hp2? */
	if ((s_pos <= hp2->s_pos && s_pos + len >= hp2->s_pos + len2) ||
			/* hp2 contains hp1? */
			(s_pos >= hp2->s_pos && s_pos + len <= hp2->s_pos + len2))
		return TRUE;
	return FALSE;
}


/*-------------------------  ovlap_n2()---------------------------------

	ovlap_n2(hp1, hp2)

	return TRUE iff hp1 and hp2 overlap on both 1st and 2nd sequences;
	otherwise return FALSE
*/
Boolean
ovlap_n2(hp1, hp2)
	register HSPPtr	hp1, hp2;
{
	register Coord_t	q_pos, s_pos, len, len2;

	if (hp1->frame != hp2->frame)
		return FALSE;

	q_pos = hp1->q_pos;
	s_pos = hp1->s_pos;
	len = hp1->len;
	len2 = hp2->len;

		/* hp1 contains hp2? */
	if ( (q_pos <= hp2->q_pos && q_pos + len >= hp2->q_pos + len2) &&
			(s_pos <= hp2->s_pos && s_pos + len >= hp2->s_pos + len2) )
		return TRUE;

		/* hp2 contains hp1? */
	if ( (q_pos >= hp2->q_pos && q_pos + len <= hp2->q_pos + len2) &&
			(s_pos >= hp2->s_pos && s_pos + len <= hp2->s_pos + len2))
		return TRUE;

	return FALSE;
}
