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); }
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); }