Пример #1
0
        public bool OnGetEnumerator(EntriesInput input, EntriesOutput output)
        {
            int count = input.entries.Count;
            if (i >= count)
            {
                i = 0;
                return false; // At end; stop.
            }
            List<byte[]> net = input.net;
            List<Entry> entries = input.entries;
            int KeyLength = input.KeyLength;

            Entry entry = input.entries[i++];

            byte[] keybuf = net[entry.NetIndex];
            int keyoffset = entry.NetEntryOffset;
            int keylength = KeyLength; // Direct from input.

            byte[] valuebuf = net[entry.NetIndex];
            int valueoffset = entry.NetEntryOffset + KeyLength + 4; // Internal storage layout.
            int valuelength = Entry.BytesToInt(valuebuf, entry.NetEntryOffset + KeyLength); // Internal storage layout.

            output.Add(keybuf, keyoffset, keylength, valuebuf, valueoffset, valuelength);
            return true; // Continue.
        }
Пример #2
0
 public bool OnGetEnumerator(EntriesInput input, EntriesOutput output)
 {
     if (null == raout)
     {
         raout = new RandomAccessOutput(output);
     }
     if (null == raentries)
     {
         raentries = new RandomAccessEntries();
     }
     raentries.SetInput(input);
     byte[] firstkeybuf, xkeybuf;
     int firstkeyoffset, xkeyoffset;
     int firstkeylen, xkeylen;
     for (; i < input.entries.Count; )
     {
         input.entries[i].LocateKey(input, out firstkeybuf, out firstkeyoffset, out firstkeylen);
         int len = 1;
         for (int j = i + 1; j < input.entries.Count; j++)
         {
             bool nomatch = false;
             input.entries[j].LocateKey(input, out xkeybuf, out xkeyoffset, out xkeylen);
             if (firstkeylen != xkeylen)
             {
                 break;
             }
             for (int ki = 0; ki != xkeylen; ki++)
             {
                 if (xkeybuf[xkeyoffset + ki] != firstkeybuf[firstkeyoffset + ki])
                 {
                     nomatch = true;
                     break;
                 }
             }
             if (nomatch)
             {
                 break;
             }
             len++;
         }
         raentries.set(i, len);
         Reduce(raentries[0].Key, raentries, raout);
         i += len;
         return true; // Continue.
     }
     i = 0;
     return false; // At end; stop.
 }
Пример #3
0
        public bool OnGetEnumerator(EntriesInput input, EntriesOutput output)
        {
            int count = input.entries.Count;
            if (i >= count)
            {
                i = 0;
                return false; // At end; stop.
            }

            Entry entry = input.entries[i++];

            byte[] keybuf;
            int keyoffset;
            int keylength;
            entry.LocateKey(input, out keybuf, out keyoffset, out keylength);

            byte[] valuebuf;
            int valueoffset;
            int valuelength;
            entry.LocateValue(input, out valuebuf, out valueoffset, out valuelength);

            output.Add(keybuf, keyoffset, keylength, valuebuf, valueoffset, valuelength);
            return true; // Continue.
        }
Пример #4
0
 public RandomAccessOutput(EntriesOutput eoutput)
 {
     this.eoutput = eoutput;
 }