leveldb-ruby 0.14 → 0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. data/LICENSE +24 -0
  2. data/README +60 -16
  3. data/ext/leveldb/extconf.rb +1 -1
  4. data/ext/leveldb/leveldb.cc +187 -18
  5. data/leveldb/Makefile +82 -96
  6. data/leveldb/build_detect_platform +137 -51
  7. data/leveldb/db/c.cc +110 -0
  8. data/leveldb/db/db_bench.cc +105 -4
  9. data/leveldb/db/db_impl.cc +135 -45
  10. data/leveldb/db/db_impl.h +12 -10
  11. data/leveldb/db/db_test.cc +666 -431
  12. data/leveldb/db/dbformat.cc +20 -0
  13. data/leveldb/db/dbformat.h +12 -0
  14. data/leveldb/db/repair.cc +3 -1
  15. data/leveldb/db/skiplist.h +2 -1
  16. data/leveldb/db/table_cache.cc +42 -16
  17. data/leveldb/db/table_cache.h +11 -0
  18. data/leveldb/db/version_set.cc +46 -41
  19. data/leveldb/db/version_set.h +9 -0
  20. data/leveldb/db/write_batch.cc +13 -4
  21. data/leveldb/db/write_batch_internal.h +2 -0
  22. data/leveldb/db/write_batch_test.cc +31 -0
  23. data/leveldb/include/leveldb/c.h +29 -0
  24. data/leveldb/include/leveldb/db.h +2 -1
  25. data/leveldb/include/leveldb/filter_policy.h +70 -0
  26. data/leveldb/include/leveldb/options.h +8 -0
  27. data/leveldb/include/leveldb/status.h +6 -0
  28. data/leveldb/include/leveldb/table.h +15 -0
  29. data/leveldb/include/leveldb/table_builder.h +1 -0
  30. data/leveldb/port/atomic_pointer.h +13 -5
  31. data/leveldb/port/port.h +0 -2
  32. data/leveldb/port/port_example.h +10 -0
  33. data/leveldb/port/port_posix.cc +4 -0
  34. data/leveldb/port/port_posix.h +24 -9
  35. data/leveldb/table/block.cc +8 -4
  36. data/leveldb/table/block.h +3 -2
  37. data/leveldb/table/filter_block.cc +111 -0
  38. data/leveldb/table/filter_block.h +68 -0
  39. data/leveldb/table/filter_block_test.cc +128 -0
  40. data/leveldb/table/format.cc +17 -7
  41. data/leveldb/table/format.h +9 -4
  42. data/leveldb/table/table.cc +107 -6
  43. data/leveldb/table/table_builder.cc +49 -6
  44. data/leveldb/table/table_test.cc +8 -24
  45. data/leveldb/util/bloom.cc +95 -0
  46. data/leveldb/util/bloom_test.cc +159 -0
  47. data/leveldb/util/coding_test.cc +23 -0
  48. data/leveldb/util/comparator.cc +8 -3
  49. data/leveldb/util/env_posix.cc +46 -4
  50. data/leveldb/util/filter_policy.cc +11 -0
  51. data/leveldb/util/options.cc +2 -1
  52. data/lib/leveldb.rb +31 -5
  53. metadata +227 -109
  54. data/leveldb/port/port_android.cc +0 -64
  55. data/leveldb/port/port_android.h +0 -156
@@ -51,6 +51,29 @@ TEST(Coding, Fixed64) {
51
51
  }
52
52
  }
53
53
 
54
+ // Test that encoding routines generate little-endian encodings
55
+ TEST(Coding, EncodingOutput) {
56
+ std::string dst;
57
+ PutFixed32(&dst, 0x04030201);
58
+ ASSERT_EQ(4, dst.size());
59
+ ASSERT_EQ(0x01, static_cast<int>(dst[0]));
60
+ ASSERT_EQ(0x02, static_cast<int>(dst[1]));
61
+ ASSERT_EQ(0x03, static_cast<int>(dst[2]));
62
+ ASSERT_EQ(0x04, static_cast<int>(dst[3]));
63
+
64
+ dst.clear();
65
+ PutFixed64(&dst, 0x0807060504030201ull);
66
+ ASSERT_EQ(8, dst.size());
67
+ ASSERT_EQ(0x01, static_cast<int>(dst[0]));
68
+ ASSERT_EQ(0x02, static_cast<int>(dst[1]));
69
+ ASSERT_EQ(0x03, static_cast<int>(dst[2]));
70
+ ASSERT_EQ(0x04, static_cast<int>(dst[3]));
71
+ ASSERT_EQ(0x05, static_cast<int>(dst[4]));
72
+ ASSERT_EQ(0x06, static_cast<int>(dst[5]));
73
+ ASSERT_EQ(0x07, static_cast<int>(dst[6]));
74
+ ASSERT_EQ(0x08, static_cast<int>(dst[7]));
75
+ }
76
+
54
77
  TEST(Coding, Varint32) {
55
78
  std::string s;
56
79
  for (uint32_t i = 0; i < (32 * 32); i++) {
@@ -6,6 +6,7 @@
6
6
  #include <stdint.h>
7
7
  #include "leveldb/comparator.h"
8
8
  #include "leveldb/slice.h"
9
+ #include "port/port.h"
9
10
  #include "util/logging.h"
10
11
 
11
12
  namespace leveldb {
@@ -65,11 +66,15 @@ class BytewiseComparatorImpl : public Comparator {
65
66
  };
66
67
  } // namespace
67
68
 
68
- // Intentionally not destroyed to prevent destructor racing
69
- // with background threads.
70
- static const Comparator* bytewise = new BytewiseComparatorImpl;
69
+ static port::OnceType once = LEVELDB_ONCE_INIT;
70
+ static const Comparator* bytewise;
71
+
72
+ static void InitModule() {
73
+ bytewise = new BytewiseComparatorImpl;
74
+ }
71
75
 
72
76
  const Comparator* BytewiseComparator() {
77
+ port::InitOnce(&once, InitModule);
73
78
  return bytewise;
74
79
  }
75
80
 
@@ -66,6 +66,7 @@ class PosixSequentialFile: public SequentialFile {
66
66
  }
67
67
  };
68
68
 
69
+ // pread() based random-access
69
70
  class PosixRandomAccessFile: public RandomAccessFile {
70
71
  private:
71
72
  std::string filename_;
@@ -89,6 +90,32 @@ class PosixRandomAccessFile: public RandomAccessFile {
89
90
  }
90
91
  };
91
92
 
93
+ // mmap() based random-access
94
+ class PosixMmapReadableFile: public RandomAccessFile {
95
+ private:
96
+ std::string filename_;
97
+ void* mmapped_region_;
98
+ size_t length_;
99
+
100
+ public:
101
+ // base[0,length-1] contains the mmapped contents of the file.
102
+ PosixMmapReadableFile(const std::string& fname, void* base, size_t length)
103
+ : filename_(fname), mmapped_region_(base), length_(length) { }
104
+ virtual ~PosixMmapReadableFile() { munmap(mmapped_region_, length_); }
105
+
106
+ virtual Status Read(uint64_t offset, size_t n, Slice* result,
107
+ char* scratch) const {
108
+ Status s;
109
+ if (offset + n > length_) {
110
+ *result = Slice();
111
+ s = IOError(filename_, EINVAL);
112
+ } else {
113
+ *result = Slice(reinterpret_cast<char*>(mmapped_region_) + offset, n);
114
+ }
115
+ return s;
116
+ }
117
+ };
118
+
92
119
  // We preallocate up to an extra megabyte and use memcpy to append new
93
120
  // data to the file. This is safe since we either properly close the
94
121
  // file before reading from it, or for log files, the reading code
@@ -297,13 +324,28 @@ class PosixEnv : public Env {
297
324
 
298
325
  virtual Status NewRandomAccessFile(const std::string& fname,
299
326
  RandomAccessFile** result) {
327
+ *result = NULL;
328
+ Status s;
300
329
  int fd = open(fname.c_str(), O_RDONLY);
301
330
  if (fd < 0) {
302
- *result = NULL;
303
- return IOError(fname, errno);
331
+ s = IOError(fname, errno);
332
+ } else if (sizeof(void*) >= 8) {
333
+ // Use mmap when virtual address-space is plentiful.
334
+ uint64_t size;
335
+ s = GetFileSize(fname, &size);
336
+ if (s.ok()) {
337
+ void* base = mmap(NULL, size, PROT_READ, MAP_SHARED, fd, 0);
338
+ if (base != MAP_FAILED) {
339
+ *result = new PosixMmapReadableFile(fname, base, size);
340
+ } else {
341
+ s = IOError(fname, errno);
342
+ }
343
+ }
344
+ close(fd);
345
+ } else {
346
+ *result = new PosixRandomAccessFile(fname, fd);
304
347
  }
305
- *result = new PosixRandomAccessFile(fname, fd);
306
- return Status::OK();
348
+ return s;
307
349
  }
308
350
 
309
351
  virtual Status NewWritableFile(const std::string& fname,
@@ -0,0 +1,11 @@
1
+ // Copyright (c) 2012 The LevelDB Authors. All rights reserved.
2
+ // Use of this source code is governed by a BSD-style license that can be
3
+ // found in the LICENSE file. See the AUTHORS file for names of contributors.
4
+
5
+ #include "leveldb/filter_policy.h"
6
+
7
+ namespace leveldb {
8
+
9
+ FilterPolicy::~FilterPolicy() { }
10
+
11
+ } // namespace leveldb
@@ -21,7 +21,8 @@ Options::Options()
21
21
  block_cache(NULL),
22
22
  block_size(4096),
23
23
  block_restart_interval(16),
24
- compression(kSnappyCompression) {
24
+ compression(kSnappyCompression),
25
+ filter_policy(NULL) {
25
26
  }
26
27
 
27
28
 
@@ -6,20 +6,29 @@ class DB
6
6
  class << self
7
7
  ## Loads or creates a LevelDB database as necessary, stored on disk at
8
8
  ## +pathname+.
9
- def new pathname
10
- make path_string(pathname), true, false
9
+ ##
10
+ ## See #make for possible options.
11
+ def new pathname, options={}
12
+ make path_string(pathname),
13
+ options.merge(:create_if_missing => true,
14
+ :error_if_exists => false)
11
15
  end
12
16
 
13
17
  ## Creates a new LevelDB database stored on disk at +pathname+. Throws an
14
18
  ## exception if the database already exists.
15
- def create pathname
16
- make path_string(pathname), true, true
19
+ ##
20
+ ## See #make for possible options.
21
+ def create pathname, options={}
22
+ make path_string(pathname),
23
+ options.merge(:create_if_missing => true,
24
+ :error_if_exists => true)
17
25
  end
18
26
 
19
27
  ## Loads a LevelDB database stored on disk at +pathname+. Throws an
20
28
  ## exception unless the database already exists.
21
29
  def load pathname
22
- make path_string(pathname), false, false
30
+ make path_string(pathname),
31
+ { :create_if_missing => false, :error_if_exists => false }
23
32
  end
24
33
 
25
34
  private
@@ -31,12 +40,14 @@ class DB
31
40
  end
32
41
 
33
42
  attr_reader :pathname
43
+ attr_reader :options
34
44
 
35
45
  alias :includes? :exists?
36
46
  alias :contains? :exists?
37
47
  alias :member? :exists?
38
48
  alias :[] :get
39
49
  alias :[]= :put
50
+ alias :close! :close
40
51
 
41
52
  def each(*args, &block)
42
53
  i = iterator(*args)
@@ -73,4 +84,19 @@ class WriteBatch
73
84
  private :new
74
85
  end
75
86
  end
87
+
88
+ class Options
89
+ DEFAULT_MAX_OPEN_FILES = 1000
90
+ DEFAULT_WRITE_BUFFER_SIZE = 4 * 1024 * 1024
91
+ DEFAULT_BLOCK_SIZE = 4 * 1024
92
+ DEFAULT_BLOCK_RESTART_INTERVAL = 16
93
+ DEFAULT_COMPRESSION = LevelDB::CompressionType::SnappyCompression
94
+
95
+ attr_reader :create_if_missing, :error_if_exists,
96
+ :block_cache_size, :paranoid_checks,
97
+ :write_buffer_size, :max_open_files,
98
+ :block_size, :block_restart_interval,
99
+ :compression
100
+ end
101
+
76
102
  end # module LevelDB
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: leveldb-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.14'
4
+ version: '0.15'
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-03-12 00:00:00.000000000 Z
12
+ date: 2012-06-25 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: LevelDB-Ruby is a Ruby binding to LevelDB.
15
15
  email: wmorgan-leveldb-ruby-gemspec@masanjin.net
@@ -21,119 +21,237 @@ extra_rdoc_files:
21
21
  - ext/leveldb/leveldb.cc
22
22
  files:
23
23
  - README
24
+ - LICENSE
24
25
  - ext/leveldb/extconf.rb
25
26
  - ext/leveldb/platform.rb
26
27
  - lib/leveldb.rb
27
28
  - ext/leveldb/leveldb.cc
28
29
  - leveldb/Makefile
29
30
  - leveldb/build_detect_platform
30
- - leveldb/db/builder.cc
31
- - leveldb/db/builder.h
32
- - leveldb/db/c.cc
33
- - leveldb/db/corruption_test.cc
34
- - leveldb/db/db_bench.cc
35
- - leveldb/db/db_impl.cc
36
- - leveldb/db/db_impl.h
37
- - leveldb/db/db_iter.cc
38
- - leveldb/db/db_iter.h
39
- - leveldb/db/db_test.cc
40
- - leveldb/db/dbformat.cc
41
- - leveldb/db/dbformat.h
42
- - leveldb/db/dbformat_test.cc
43
- - leveldb/db/filename.cc
44
- - leveldb/db/filename.h
45
- - leveldb/db/filename_test.cc
46
- - leveldb/db/log_format.h
47
- - leveldb/db/log_reader.cc
48
- - leveldb/db/log_reader.h
49
- - leveldb/db/log_test.cc
50
- - leveldb/db/log_writer.cc
51
- - leveldb/db/log_writer.h
52
- - leveldb/db/memtable.cc
53
- - leveldb/db/memtable.h
54
- - leveldb/db/repair.cc
55
- - leveldb/db/skiplist.h
56
- - leveldb/db/skiplist_test.cc
57
- - leveldb/db/snapshot.h
58
- - leveldb/db/table_cache.cc
59
- - leveldb/db/table_cache.h
60
- - leveldb/db/version_edit.cc
61
- - leveldb/db/version_edit.h
62
- - leveldb/db/version_edit_test.cc
63
- - leveldb/db/version_set.cc
64
- - leveldb/db/version_set.h
65
- - leveldb/db/version_set_test.cc
66
- - leveldb/db/write_batch.cc
67
- - leveldb/db/write_batch_internal.h
68
- - leveldb/db/write_batch_test.cc
69
- - leveldb/helpers/memenv/memenv.cc
70
- - leveldb/helpers/memenv/memenv.h
71
- - leveldb/helpers/memenv/memenv_test.cc
72
- - leveldb/include/leveldb/c.h
73
- - leveldb/include/leveldb/cache.h
74
- - leveldb/include/leveldb/comparator.h
75
- - leveldb/include/leveldb/db.h
76
- - leveldb/include/leveldb/env.h
77
- - leveldb/include/leveldb/iterator.h
78
- - leveldb/include/leveldb/options.h
79
- - leveldb/include/leveldb/slice.h
80
- - leveldb/include/leveldb/status.h
81
- - leveldb/include/leveldb/table.h
82
- - leveldb/include/leveldb/table_builder.h
83
- - leveldb/include/leveldb/write_batch.h
84
- - leveldb/port/atomic_pointer.h
85
- - leveldb/port/port.h
86
- - leveldb/port/port_android.cc
87
- - leveldb/port/port_android.h
88
- - leveldb/port/port_example.h
89
- - leveldb/port/port_posix.cc
90
- - leveldb/port/port_posix.h
91
- - leveldb/port/win/stdint.h
92
- - leveldb/table/block.cc
93
- - leveldb/table/block.h
94
- - leveldb/table/block_builder.cc
95
- - leveldb/table/block_builder.h
96
- - leveldb/table/format.cc
97
- - leveldb/table/format.h
98
- - leveldb/table/iterator.cc
99
- - leveldb/table/iterator_wrapper.h
100
- - leveldb/table/merger.cc
101
- - leveldb/table/merger.h
102
- - leveldb/table/table.cc
103
- - leveldb/table/table_builder.cc
104
- - leveldb/table/table_test.cc
105
- - leveldb/table/two_level_iterator.cc
106
- - leveldb/table/two_level_iterator.h
107
- - leveldb/util/arena.cc
108
- - leveldb/util/arena.h
109
- - leveldb/util/arena_test.cc
110
- - leveldb/util/cache.cc
111
- - leveldb/util/cache_test.cc
112
- - leveldb/util/coding.cc
113
- - leveldb/util/coding.h
114
- - leveldb/util/coding_test.cc
115
- - leveldb/util/comparator.cc
116
- - leveldb/util/crc32c.cc
117
- - leveldb/util/crc32c.h
118
- - leveldb/util/crc32c_test.cc
119
- - leveldb/util/env.cc
120
- - leveldb/util/env_posix.cc
121
- - leveldb/util/env_test.cc
122
- - leveldb/util/hash.cc
123
- - leveldb/util/hash.h
124
- - leveldb/util/histogram.cc
125
- - leveldb/util/histogram.h
126
- - leveldb/util/logging.cc
127
- - leveldb/util/logging.h
128
- - leveldb/util/mutexlock.h
129
- - leveldb/util/options.cc
130
- - leveldb/util/posix_logger.h
131
- - leveldb/util/random.h
132
- - leveldb/util/status.cc
133
- - leveldb/util/testharness.cc
134
- - leveldb/util/testharness.h
135
- - leveldb/util/testutil.cc
136
- - leveldb/util/testutil.h
31
+ - !binary |-
32
+ bGV2ZWxkYi9kYi9idWlsZGVyLmNj
33
+ - !binary |-
34
+ bGV2ZWxkYi9kYi9idWlsZGVyLmg=
35
+ - !binary |-
36
+ bGV2ZWxkYi9kYi9jLmNj
37
+ - !binary |-
38
+ bGV2ZWxkYi9kYi9jb3JydXB0aW9uX3Rlc3QuY2M=
39
+ - !binary |-
40
+ bGV2ZWxkYi9kYi9kYl9iZW5jaC5jYw==
41
+ - !binary |-
42
+ bGV2ZWxkYi9kYi9kYl9pbXBsLmNj
43
+ - !binary |-
44
+ bGV2ZWxkYi9kYi9kYl9pbXBsLmg=
45
+ - !binary |-
46
+ bGV2ZWxkYi9kYi9kYl9pdGVyLmNj
47
+ - !binary |-
48
+ bGV2ZWxkYi9kYi9kYl9pdGVyLmg=
49
+ - !binary |-
50
+ bGV2ZWxkYi9kYi9kYl90ZXN0LmNj
51
+ - !binary |-
52
+ bGV2ZWxkYi9kYi9kYmZvcm1hdC5jYw==
53
+ - !binary |-
54
+ bGV2ZWxkYi9kYi9kYmZvcm1hdC5o
55
+ - !binary |-
56
+ bGV2ZWxkYi9kYi9kYmZvcm1hdF90ZXN0LmNj
57
+ - !binary |-
58
+ bGV2ZWxkYi9kYi9maWxlbmFtZS5jYw==
59
+ - !binary |-
60
+ bGV2ZWxkYi9kYi9maWxlbmFtZS5o
61
+ - !binary |-
62
+ bGV2ZWxkYi9kYi9maWxlbmFtZV90ZXN0LmNj
63
+ - !binary |-
64
+ bGV2ZWxkYi9kYi9sb2dfZm9ybWF0Lmg=
65
+ - !binary |-
66
+ bGV2ZWxkYi9kYi9sb2dfcmVhZGVyLmNj
67
+ - !binary |-
68
+ bGV2ZWxkYi9kYi9sb2dfcmVhZGVyLmg=
69
+ - !binary |-
70
+ bGV2ZWxkYi9kYi9sb2dfdGVzdC5jYw==
71
+ - !binary |-
72
+ bGV2ZWxkYi9kYi9sb2dfd3JpdGVyLmNj
73
+ - !binary |-
74
+ bGV2ZWxkYi9kYi9sb2dfd3JpdGVyLmg=
75
+ - !binary |-
76
+ bGV2ZWxkYi9kYi9tZW10YWJsZS5jYw==
77
+ - !binary |-
78
+ bGV2ZWxkYi9kYi9tZW10YWJsZS5o
79
+ - !binary |-
80
+ bGV2ZWxkYi9kYi9yZXBhaXIuY2M=
81
+ - !binary |-
82
+ bGV2ZWxkYi9kYi9za2lwbGlzdC5o
83
+ - !binary |-
84
+ bGV2ZWxkYi9kYi9za2lwbGlzdF90ZXN0LmNj
85
+ - !binary |-
86
+ bGV2ZWxkYi9kYi9zbmFwc2hvdC5o
87
+ - !binary |-
88
+ bGV2ZWxkYi9kYi90YWJsZV9jYWNoZS5jYw==
89
+ - !binary |-
90
+ bGV2ZWxkYi9kYi90YWJsZV9jYWNoZS5o
91
+ - !binary |-
92
+ bGV2ZWxkYi9kYi92ZXJzaW9uX2VkaXQuY2M=
93
+ - !binary |-
94
+ bGV2ZWxkYi9kYi92ZXJzaW9uX2VkaXQuaA==
95
+ - !binary |-
96
+ bGV2ZWxkYi9kYi92ZXJzaW9uX2VkaXRfdGVzdC5jYw==
97
+ - !binary |-
98
+ bGV2ZWxkYi9kYi92ZXJzaW9uX3NldC5jYw==
99
+ - !binary |-
100
+ bGV2ZWxkYi9kYi92ZXJzaW9uX3NldC5o
101
+ - !binary |-
102
+ bGV2ZWxkYi9kYi92ZXJzaW9uX3NldF90ZXN0LmNj
103
+ - !binary |-
104
+ bGV2ZWxkYi9kYi93cml0ZV9iYXRjaC5jYw==
105
+ - !binary |-
106
+ bGV2ZWxkYi9kYi93cml0ZV9iYXRjaF9pbnRlcm5hbC5o
107
+ - !binary |-
108
+ bGV2ZWxkYi9kYi93cml0ZV9iYXRjaF90ZXN0LmNj
109
+ - !binary |-
110
+ bGV2ZWxkYi9oZWxwZXJzL21lbWVudi9tZW1lbnYuY2M=
111
+ - !binary |-
112
+ bGV2ZWxkYi9oZWxwZXJzL21lbWVudi9tZW1lbnYuaA==
113
+ - !binary |-
114
+ bGV2ZWxkYi9oZWxwZXJzL21lbWVudi9tZW1lbnZfdGVzdC5jYw==
115
+ - !binary |-
116
+ bGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvYy5o
117
+ - !binary |-
118
+ bGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvY2FjaGUuaA==
119
+ - !binary |-
120
+ bGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvY29tcGFyYXRvci5o
121
+ - !binary |-
122
+ bGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvZGIuaA==
123
+ - !binary |-
124
+ bGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvZW52Lmg=
125
+ - !binary |-
126
+ bGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvZmlsdGVyX3BvbGljeS5o
127
+ - !binary |-
128
+ bGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvaXRlcmF0b3IuaA==
129
+ - !binary |-
130
+ bGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvb3B0aW9ucy5o
131
+ - !binary |-
132
+ bGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvc2xpY2UuaA==
133
+ - !binary |-
134
+ bGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvc3RhdHVzLmg=
135
+ - !binary |-
136
+ bGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvdGFibGUuaA==
137
+ - !binary |-
138
+ bGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvdGFibGVfYnVpbGRlci5o
139
+ - !binary |-
140
+ bGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvd3JpdGVfYmF0Y2guaA==
141
+ - !binary |-
142
+ bGV2ZWxkYi9wb3J0L2F0b21pY19wb2ludGVyLmg=
143
+ - !binary |-
144
+ bGV2ZWxkYi9wb3J0L3BvcnQuaA==
145
+ - !binary |-
146
+ bGV2ZWxkYi9wb3J0L3BvcnRfZXhhbXBsZS5o
147
+ - !binary |-
148
+ bGV2ZWxkYi9wb3J0L3BvcnRfcG9zaXguY2M=
149
+ - !binary |-
150
+ bGV2ZWxkYi9wb3J0L3BvcnRfcG9zaXguaA==
151
+ - !binary |-
152
+ bGV2ZWxkYi9wb3J0L3dpbi9zdGRpbnQuaA==
153
+ - !binary |-
154
+ bGV2ZWxkYi90YWJsZS9ibG9jay5jYw==
155
+ - !binary |-
156
+ bGV2ZWxkYi90YWJsZS9ibG9jay5o
157
+ - !binary |-
158
+ bGV2ZWxkYi90YWJsZS9ibG9ja19idWlsZGVyLmNj
159
+ - !binary |-
160
+ bGV2ZWxkYi90YWJsZS9ibG9ja19idWlsZGVyLmg=
161
+ - !binary |-
162
+ bGV2ZWxkYi90YWJsZS9maWx0ZXJfYmxvY2suY2M=
163
+ - !binary |-
164
+ bGV2ZWxkYi90YWJsZS9maWx0ZXJfYmxvY2suaA==
165
+ - !binary |-
166
+ bGV2ZWxkYi90YWJsZS9maWx0ZXJfYmxvY2tfdGVzdC5jYw==
167
+ - !binary |-
168
+ bGV2ZWxkYi90YWJsZS9mb3JtYXQuY2M=
169
+ - !binary |-
170
+ bGV2ZWxkYi90YWJsZS9mb3JtYXQuaA==
171
+ - !binary |-
172
+ bGV2ZWxkYi90YWJsZS9pdGVyYXRvci5jYw==
173
+ - !binary |-
174
+ bGV2ZWxkYi90YWJsZS9pdGVyYXRvcl93cmFwcGVyLmg=
175
+ - !binary |-
176
+ bGV2ZWxkYi90YWJsZS9tZXJnZXIuY2M=
177
+ - !binary |-
178
+ bGV2ZWxkYi90YWJsZS9tZXJnZXIuaA==
179
+ - !binary |-
180
+ bGV2ZWxkYi90YWJsZS90YWJsZS5jYw==
181
+ - !binary |-
182
+ bGV2ZWxkYi90YWJsZS90YWJsZV9idWlsZGVyLmNj
183
+ - !binary |-
184
+ bGV2ZWxkYi90YWJsZS90YWJsZV90ZXN0LmNj
185
+ - !binary |-
186
+ bGV2ZWxkYi90YWJsZS90d29fbGV2ZWxfaXRlcmF0b3IuY2M=
187
+ - !binary |-
188
+ bGV2ZWxkYi90YWJsZS90d29fbGV2ZWxfaXRlcmF0b3IuaA==
189
+ - !binary |-
190
+ bGV2ZWxkYi91dGlsL2FyZW5hLmNj
191
+ - !binary |-
192
+ bGV2ZWxkYi91dGlsL2FyZW5hLmg=
193
+ - !binary |-
194
+ bGV2ZWxkYi91dGlsL2FyZW5hX3Rlc3QuY2M=
195
+ - !binary |-
196
+ bGV2ZWxkYi91dGlsL2Jsb29tLmNj
197
+ - !binary |-
198
+ bGV2ZWxkYi91dGlsL2Jsb29tX3Rlc3QuY2M=
199
+ - !binary |-
200
+ bGV2ZWxkYi91dGlsL2NhY2hlLmNj
201
+ - !binary |-
202
+ bGV2ZWxkYi91dGlsL2NhY2hlX3Rlc3QuY2M=
203
+ - !binary |-
204
+ bGV2ZWxkYi91dGlsL2NvZGluZy5jYw==
205
+ - !binary |-
206
+ bGV2ZWxkYi91dGlsL2NvZGluZy5o
207
+ - !binary |-
208
+ bGV2ZWxkYi91dGlsL2NvZGluZ190ZXN0LmNj
209
+ - !binary |-
210
+ bGV2ZWxkYi91dGlsL2NvbXBhcmF0b3IuY2M=
211
+ - !binary |-
212
+ bGV2ZWxkYi91dGlsL2NyYzMyYy5jYw==
213
+ - !binary |-
214
+ bGV2ZWxkYi91dGlsL2NyYzMyYy5o
215
+ - !binary |-
216
+ bGV2ZWxkYi91dGlsL2NyYzMyY190ZXN0LmNj
217
+ - !binary |-
218
+ bGV2ZWxkYi91dGlsL2Vudi5jYw==
219
+ - !binary |-
220
+ bGV2ZWxkYi91dGlsL2Vudl9wb3NpeC5jYw==
221
+ - !binary |-
222
+ bGV2ZWxkYi91dGlsL2Vudl90ZXN0LmNj
223
+ - !binary |-
224
+ bGV2ZWxkYi91dGlsL2ZpbHRlcl9wb2xpY3kuY2M=
225
+ - !binary |-
226
+ bGV2ZWxkYi91dGlsL2hhc2guY2M=
227
+ - !binary |-
228
+ bGV2ZWxkYi91dGlsL2hhc2guaA==
229
+ - !binary |-
230
+ bGV2ZWxkYi91dGlsL2hpc3RvZ3JhbS5jYw==
231
+ - !binary |-
232
+ bGV2ZWxkYi91dGlsL2hpc3RvZ3JhbS5o
233
+ - !binary |-
234
+ bGV2ZWxkYi91dGlsL2xvZ2dpbmcuY2M=
235
+ - !binary |-
236
+ bGV2ZWxkYi91dGlsL2xvZ2dpbmcuaA==
237
+ - !binary |-
238
+ bGV2ZWxkYi91dGlsL211dGV4bG9jay5o
239
+ - !binary |-
240
+ bGV2ZWxkYi91dGlsL29wdGlvbnMuY2M=
241
+ - !binary |-
242
+ bGV2ZWxkYi91dGlsL3Bvc2l4X2xvZ2dlci5o
243
+ - !binary |-
244
+ bGV2ZWxkYi91dGlsL3JhbmRvbS5o
245
+ - !binary |-
246
+ bGV2ZWxkYi91dGlsL3N0YXR1cy5jYw==
247
+ - !binary |-
248
+ bGV2ZWxkYi91dGlsL3Rlc3RoYXJuZXNzLmNj
249
+ - !binary |-
250
+ bGV2ZWxkYi91dGlsL3Rlc3RoYXJuZXNzLmg=
251
+ - !binary |-
252
+ bGV2ZWxkYi91dGlsL3Rlc3R1dGlsLmNj
253
+ - !binary |-
254
+ bGV2ZWxkYi91dGlsL3Rlc3R1dGlsLmg=
137
255
  homepage: http://github.com/wmorgan/leveldb-ruby
138
256
  licenses: []
139
257
  post_install_message: