internal static IndexRowBookmark?New(IndexRowSet irs)
            {
                var k = irs._key;
                var b = (MTreeBookmark <Serialisable>?)((k.Length != 0) ? irs._ix.rows.PositionAt(k)
                    : irs._ix.rows.First());

                for (; b != null; b = b.Next() as MTreeBookmark <Serialisable> )
                {
                    var rc = irs._tr.Get(b.Value.Item2);
                    var rb = new IndexRowBookmark(irs, new SRow(irs._tr, rc), b, 0);
                    if (rc.Matches(rb, irs._wh))
                    {
                        return(rb);
                    }
                }
                return(null);
            }
 public override Bookmark <Serialisable>?Next()
 {
     if (_irs._unique)
     {
         return(null);
     }
     for (var b = _mbm.Next(); b != null; b = b.Next())
     {
         var rc = _irs._tr.Get(b.Value.Item2);
         var rb = new IndexRowBookmark(_irs, new SRow(_irs._tr, rc),
                                       (MTreeBookmark <Serialisable>)b, Position + 1);
         if (rc.Matches(rb, _irs._wh))
         {
             return(rb);
         }
     }
     return(null);
 }
 public override Bookmark <Serialisable>?First()
 {
     return(IndexRowBookmark.New(this));
 }