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

/*-------------------------  ovlap_a()---------------------------------

	ovlap_a(hp1, hp2)

	return TRUE if hp1 and hp2 "overlap" on either the 1st or 2nd sequence
	(or both);
	otherwise return FALSE.
*/
Boolean
ovlap_a(hp1, hp2)
	HSPPtr	hp1;
	register HSPPtr	hp2;
{
	register Coord_t	q_pos, s_pos, len, len2;

	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) ||
			/* hp2 contains hp1? */
			(q_pos >= hp2->q_pos && q_pos + len <= hp2->q_pos + len2) ||
			/* hp1 contains hp2? */
			(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_a2()---------------------------------

	ovlap_a2(hp1, hp2)

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

	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;
}
