Beispiel #1
0
        public override bool Find(ref KeyWalker key, CPEnumerator <T> e)
        {
            if (key.Left == 0)
            {
                MoveFirst(e);
                return(false);
            }
            byte k = key.Buffer[key.Offset];

            if (key.Left == 1 && IsPresent(k))
            {
                e.Stack.Add(new CPEnumerator <T> .Entry(this, k, e.Key.Offset));
                ExtractCurrent(e, k);
                return(true);
            }
            else
            {
                int nextK = FindNextInUse(k);
                if (nextK >= 0)
                {
                    e.Stack.Add(new CPEnumerator <T> .Entry(this, nextK, e.Key.Offset));
                    ExtractCurrent(e, (byte)nextK);
                }
                else
                {                       // code duplicated from CPSNode
                    if (!e.Stack.IsEmpty)
                    {
                        e.Key.Reset(e.Stack.Last.KeyOffset);
                        e.MoveNext();
                    }
                }
                return(false);
            }
        }
Beispiel #2
0
 public override bool Find(ref KeyWalker key, CPEnumerator <T> e)
 {
     if (key.Left == 0)
     {
         MoveFirst(e);
         return(_zlk != NoZLK);
     }
     else
     {
         int i = key[0] >> 5;
         e.Stack.Add(new CPEnumerator <T> .Entry(this, i, e.Key.Offset));
         if (_children[i] != null)
         {
             return(_children[i].Find(ref key, e));
         }
         else
         {
             e.MoveNext();
             return(false);
         }
     }
 }