/// <summary>Returns true if <code>o</code> is equal to this. </summary>
        public override bool Equals(System.Object o)
        {
            if (!(o is MultiPhraseQuery))
            {
                return(false);
            }
            MultiPhraseQuery other = (MultiPhraseQuery)o;

            if (this.GetBoost() == other.GetBoost() && this.slop == other.slop)
            {
                System.Collections.IEnumerator iter1 = this.termArrays.GetEnumerator();
                System.Collections.IEnumerator iter2 = other.termArrays.GetEnumerator();
                while (iter1.MoveNext() && iter2.MoveNext())
                {
                    Term item1 = (Term)iter1.Current;
                    Term item2 = (Term)iter2.Current;
                    if (!item1.Equals(item2))
                    {
                        return(false);
                    }
                }
                iter1 = this.positions.GetEnumerator();
                iter2 = other.positions.GetEnumerator();
                while (iter1.MoveNext() && iter2.MoveNext())
                {
                    System.Int32 item1 = (System.Int32)iter1.Current;
                    System.Int32 item2 = (System.Int32)iter2.Current;
                    if (!item1.Equals(item2))
                    {
                        return(false);
                    }
                }
            }
            return(true);
        }
        /// <summary>Returns true if <code>o</code> is equal to this. </summary>
        public override bool Equals(System.Object o)
        {
            if (!(o is MultiPhraseQuery))
            {
                return(false);
            }
            MultiPhraseQuery other = (MultiPhraseQuery)o;
            bool             eq    = this.GetBoost() == other.GetBoost() && this.slop == other.slop;

            if (!eq)
            {
                return(false);
            }
            eq = this.termArrays.Count.Equals(other.termArrays.Count);
            if (!eq)
            {
                return(false);
            }

            for (int i = 0; i < this.termArrays.Count; i++)
            {
                if (!Support.Compare.CompareTermArrays((Term[])this.termArrays[i], (Term[])other.termArrays[i]))
                {
                    return(false);
                }
            }
            if (!eq)
            {
                return(false);
            }
            eq = this.positions.Count.Equals(other.positions.Count);
            if (!eq)
            {
                return(false);
            }
            for (int i = 0; i < this.positions.Count; i++)
            {
                if (!(this.positions[i] == other.positions[i]))
                {
                    return(false);
                }
            }
            return(true);
        }