public bool MoveNext()
            {
                int oid1 = 0, oid2;
                int n = iterators.Length;

                while (true)
                {
                    for (int i = 0, j = 0; i < n; j++, i++)
                    {
                        do
                        {
                            if (!iterators[j % n].MoveNext())
                            {
                                return(false);
                            }
                            oid2 = iterators[j % n].CurrentOid;
                        } while (oid2 < oid1);

                        if (oid2 > oid1)
                        {
                            oid1 = oid2;
                            i    = 0;
                        }
                    }
                    object obj  = index.Storage.GetObjectByOID(oid1);
                    string text = index.extractText(obj);
                    if (match(text, pattern))
                    {
                        currObj = obj;
                        currOid = oid1;
                        return(true);
                    }
                }
            }
            public bool MoveNext()
            {
                while (iterator.MoveNext())
                {
#if USE_GENERICS
                    T obj = iterator.Current;
#else
                    object obj = iterator.Current;
#endif
                    string text = index.extractText(obj);
                    if (match(text, pattern))
                    {
                        currObj = obj;
                        return(true);
                    }
                }
                return(false);
            }