Пример #1
0
        public void Enumerator()
        {
            var writeOptions = LevelDBInterop.leveldb_writeoptions_create();

            this.InnerPut(writeOptions, "key1", "value1");
            this.InnerPut(writeOptions, "key2", "value2");
            this.InnerPut(writeOptions, "key3", "value3");

            var    entries     = new List <KeyValuePair <string, string> >();
            var    readOptions = LevelDBInterop.leveldb_readoptions_create();
            IntPtr iter        = LevelDBInterop.leveldb_create_iterator(Database, readOptions);

            for (LevelDBInterop.leveldb_iter_seek_to_first(iter);
                 LevelDBInterop.leveldb_iter_valid(iter) == 1;
                 LevelDBInterop.leveldb_iter_next(iter))
            {
                IntPtr len;
                string key   = GetValue(LevelDBInterop.leveldb_iter_key(iter, out len), len);
                string value = GetValue(LevelDBInterop.leveldb_iter_value(iter, out len), len);
                var    entry = new KeyValuePair <string, string>(key, value);
                entries.Add(entry);
            }
            LevelDBInterop.leveldb_iter_destroy(iter);
            LevelDBInterop.leveldb_readoptions_destroy(readOptions);

            Assert.Equal(3, entries.Count);
            Assert.Equal("key1", entries[0].Key);
            Assert.Equal("value1", entries[0].Value);
            Assert.Equal("key2", entries[1].Key);
            Assert.Equal("value2", entries[1].Value);
            Assert.Equal("key3", entries[2].Key);
            Assert.Equal("value3", entries[2].Value);

            LevelDBInterop.leveldb_writeoptions_destroy(writeOptions);
        }
Пример #2
0
        private unsafe byte[] InnerGetValue()
        {
            IntPtr length;
            var    value = LevelDBInterop.leveldb_iter_value(this._handle, out length);

            CheckLastError();
            if (value == IntPtr.Zero)
            {
                return(null);
            }
            var bytes       = new byte[(long)length];
            var valueNative = (byte *)value.ToPointer();

            for (long i = 0; i < (long)length; ++i)
            {
                bytes[i] = valueNative[i];
            }

            GC.KeepAlive(this);
            return(bytes);
        }