Esempio n. 1
0
        public override string PrefixForByteCount(string s, int maxbytecount)
        {
            byte[] inputbytes = BplusTree.StringToBytes(s);
            System.Security.Cryptography.MD5 D = System.Security.Cryptography.MD5.Create();
            byte[] digest      = D.ComputeHash(inputbytes);
            byte[] resultbytes = new byte[maxbytecount];
            // copy digest translating to printable ascii
            for (int i = 0; i < maxbytecount; i++)
            {
                int r = digest[i % digest.Length];
                if (r > 127)
                {
                    r = 256 - r;
                }
                if (r < 0)
                {
                    r = -r;
                }
                //Console.WriteLine(" before "+i+" "+r);
                r = r % 79 + 40; // printable ascii
                //Console.WriteLine(" "+i+" "+r);
                resultbytes[i] = (byte)r;
            }
            string result = BplusTree.BytesToString(resultbytes);

            return(result);
        }
Esempio n. 2
0
        public byte[] Dump()
        {
            ArrayList allbytes  = new ArrayList();
            int       byteCount = 0;

            for (int index = 0; index < this.keys.Count; index++)
            {
                string thisKey   = (string)this.keys[index];
                byte[] thisValue = (byte[])this.values[index];
                byte[] keyprefix = new byte[BufferFile.INTSTORAGE];
                byte[] keybytes  = BplusTree.StringToBytes(thisKey);
                BufferFile.Store(keybytes.Length, keyprefix, 0);
                allbytes.Add(keyprefix);
                allbytes.Add(keybytes);
                byte[] valueprefix = new byte[BufferFile.INTSTORAGE];
                BufferFile.Store(thisValue.Length, valueprefix, 0);
                allbytes.Add(valueprefix);
                allbytes.Add(thisValue);
            }
            foreach (object thing in allbytes)
            {
                byte[] thebytes = (byte[])thing;
                byteCount += thebytes.Length;
            }
            int outindex = 0;

            byte[] result = new byte[byteCount];
            foreach (object thing in allbytes)
            {
                byte[] thebytes  = (byte[])thing;
                int    thelength = thebytes.Length;
                Array.Copy(thebytes, 0, result, outindex, thelength);
                outindex += thelength;
            }
            if (outindex != byteCount)
            {
                throw new BplusTreeException("error counting bytes in dump " + outindex + "!=" + byteCount);
            }
            return(result);
        }