leveldb 0.0.1

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 (128) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +22 -0
  3. data/README.md +95 -0
  4. data/ext/Rakefile +11 -0
  5. data/ext/leveldb/LICENSE +27 -0
  6. data/ext/leveldb/Makefile +206 -0
  7. data/ext/leveldb/build_config.mk +13 -0
  8. data/ext/leveldb/db/builder.cc +88 -0
  9. data/ext/leveldb/db/builder.h +34 -0
  10. data/ext/leveldb/db/c.cc +595 -0
  11. data/ext/leveldb/db/c_test.c +390 -0
  12. data/ext/leveldb/db/corruption_test.cc +359 -0
  13. data/ext/leveldb/db/db_bench.cc +979 -0
  14. data/ext/leveldb/db/db_impl.cc +1485 -0
  15. data/ext/leveldb/db/db_impl.h +203 -0
  16. data/ext/leveldb/db/db_iter.cc +299 -0
  17. data/ext/leveldb/db/db_iter.h +26 -0
  18. data/ext/leveldb/db/db_test.cc +2092 -0
  19. data/ext/leveldb/db/dbformat.cc +140 -0
  20. data/ext/leveldb/db/dbformat.h +227 -0
  21. data/ext/leveldb/db/dbformat_test.cc +112 -0
  22. data/ext/leveldb/db/filename.cc +139 -0
  23. data/ext/leveldb/db/filename.h +80 -0
  24. data/ext/leveldb/db/filename_test.cc +122 -0
  25. data/ext/leveldb/db/leveldb_main.cc +238 -0
  26. data/ext/leveldb/db/log_format.h +35 -0
  27. data/ext/leveldb/db/log_reader.cc +259 -0
  28. data/ext/leveldb/db/log_reader.h +108 -0
  29. data/ext/leveldb/db/log_test.cc +500 -0
  30. data/ext/leveldb/db/log_writer.cc +103 -0
  31. data/ext/leveldb/db/log_writer.h +48 -0
  32. data/ext/leveldb/db/memtable.cc +145 -0
  33. data/ext/leveldb/db/memtable.h +91 -0
  34. data/ext/leveldb/db/repair.cc +389 -0
  35. data/ext/leveldb/db/skiplist.h +379 -0
  36. data/ext/leveldb/db/skiplist_test.cc +378 -0
  37. data/ext/leveldb/db/snapshot.h +66 -0
  38. data/ext/leveldb/db/table_cache.cc +121 -0
  39. data/ext/leveldb/db/table_cache.h +61 -0
  40. data/ext/leveldb/db/version_edit.cc +266 -0
  41. data/ext/leveldb/db/version_edit.h +107 -0
  42. data/ext/leveldb/db/version_edit_test.cc +46 -0
  43. data/ext/leveldb/db/version_set.cc +1443 -0
  44. data/ext/leveldb/db/version_set.h +383 -0
  45. data/ext/leveldb/db/version_set_test.cc +179 -0
  46. data/ext/leveldb/db/write_batch.cc +147 -0
  47. data/ext/leveldb/db/write_batch_internal.h +49 -0
  48. data/ext/leveldb/db/write_batch_test.cc +120 -0
  49. data/ext/leveldb/doc/bench/db_bench_sqlite3.cc +718 -0
  50. data/ext/leveldb/doc/bench/db_bench_tree_db.cc +528 -0
  51. data/ext/leveldb/helpers/memenv/memenv.cc +384 -0
  52. data/ext/leveldb/helpers/memenv/memenv.h +20 -0
  53. data/ext/leveldb/helpers/memenv/memenv_test.cc +232 -0
  54. data/ext/leveldb/include/leveldb/c.h +291 -0
  55. data/ext/leveldb/include/leveldb/cache.h +99 -0
  56. data/ext/leveldb/include/leveldb/comparator.h +63 -0
  57. data/ext/leveldb/include/leveldb/db.h +161 -0
  58. data/ext/leveldb/include/leveldb/env.h +333 -0
  59. data/ext/leveldb/include/leveldb/filter_policy.h +70 -0
  60. data/ext/leveldb/include/leveldb/iterator.h +100 -0
  61. data/ext/leveldb/include/leveldb/options.h +195 -0
  62. data/ext/leveldb/include/leveldb/slice.h +109 -0
  63. data/ext/leveldb/include/leveldb/status.h +106 -0
  64. data/ext/leveldb/include/leveldb/table.h +85 -0
  65. data/ext/leveldb/include/leveldb/table_builder.h +92 -0
  66. data/ext/leveldb/include/leveldb/write_batch.h +64 -0
  67. data/ext/leveldb/issues/issue178_test.cc +92 -0
  68. data/ext/leveldb/port/atomic_pointer.h +224 -0
  69. data/ext/leveldb/port/port.h +19 -0
  70. data/ext/leveldb/port/port_example.h +135 -0
  71. data/ext/leveldb/port/port_posix.cc +54 -0
  72. data/ext/leveldb/port/port_posix.h +157 -0
  73. data/ext/leveldb/port/thread_annotations.h +59 -0
  74. data/ext/leveldb/port/win/stdint.h +24 -0
  75. data/ext/leveldb/table/block.cc +268 -0
  76. data/ext/leveldb/table/block.h +44 -0
  77. data/ext/leveldb/table/block_builder.cc +109 -0
  78. data/ext/leveldb/table/block_builder.h +57 -0
  79. data/ext/leveldb/table/filter_block.cc +111 -0
  80. data/ext/leveldb/table/filter_block.h +68 -0
  81. data/ext/leveldb/table/filter_block_test.cc +128 -0
  82. data/ext/leveldb/table/format.cc +145 -0
  83. data/ext/leveldb/table/format.h +108 -0
  84. data/ext/leveldb/table/iterator.cc +67 -0
  85. data/ext/leveldb/table/iterator_wrapper.h +63 -0
  86. data/ext/leveldb/table/merger.cc +197 -0
  87. data/ext/leveldb/table/merger.h +26 -0
  88. data/ext/leveldb/table/table.cc +275 -0
  89. data/ext/leveldb/table/table_builder.cc +270 -0
  90. data/ext/leveldb/table/table_test.cc +868 -0
  91. data/ext/leveldb/table/two_level_iterator.cc +182 -0
  92. data/ext/leveldb/table/two_level_iterator.h +34 -0
  93. data/ext/leveldb/util/arena.cc +68 -0
  94. data/ext/leveldb/util/arena.h +68 -0
  95. data/ext/leveldb/util/arena_test.cc +68 -0
  96. data/ext/leveldb/util/bloom.cc +95 -0
  97. data/ext/leveldb/util/bloom_test.cc +160 -0
  98. data/ext/leveldb/util/cache.cc +325 -0
  99. data/ext/leveldb/util/cache_test.cc +186 -0
  100. data/ext/leveldb/util/coding.cc +194 -0
  101. data/ext/leveldb/util/coding.h +104 -0
  102. data/ext/leveldb/util/coding_test.cc +196 -0
  103. data/ext/leveldb/util/comparator.cc +81 -0
  104. data/ext/leveldb/util/crc32c.cc +332 -0
  105. data/ext/leveldb/util/crc32c.h +45 -0
  106. data/ext/leveldb/util/crc32c_test.cc +72 -0
  107. data/ext/leveldb/util/env.cc +96 -0
  108. data/ext/leveldb/util/env_posix.cc +698 -0
  109. data/ext/leveldb/util/env_test.cc +104 -0
  110. data/ext/leveldb/util/filter_policy.cc +11 -0
  111. data/ext/leveldb/util/hash.cc +52 -0
  112. data/ext/leveldb/util/hash.h +19 -0
  113. data/ext/leveldb/util/histogram.cc +139 -0
  114. data/ext/leveldb/util/histogram.h +42 -0
  115. data/ext/leveldb/util/logging.cc +81 -0
  116. data/ext/leveldb/util/logging.h +47 -0
  117. data/ext/leveldb/util/mutexlock.h +41 -0
  118. data/ext/leveldb/util/options.cc +29 -0
  119. data/ext/leveldb/util/posix_logger.h +98 -0
  120. data/ext/leveldb/util/random.h +59 -0
  121. data/ext/leveldb/util/status.cc +75 -0
  122. data/ext/leveldb/util/testharness.cc +77 -0
  123. data/ext/leveldb/util/testharness.h +138 -0
  124. data/ext/leveldb/util/testutil.cc +51 -0
  125. data/ext/leveldb/util/testutil.h +53 -0
  126. data/lib/leveldb/version.rb +3 -0
  127. data/lib/leveldb.rb +1006 -0
  128. metadata +228 -0
@@ -0,0 +1,332 @@
1
+ // Copyright (c) 2011 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
+ // A portable implementation of crc32c, optimized to handle
6
+ // four bytes at a time.
7
+
8
+ #include "util/crc32c.h"
9
+
10
+ #include <stdint.h>
11
+ #include "util/coding.h"
12
+
13
+ namespace leveldb {
14
+ namespace crc32c {
15
+
16
+ static const uint32_t table0_[256] = {
17
+ 0x00000000, 0xf26b8303, 0xe13b70f7, 0x1350f3f4,
18
+ 0xc79a971f, 0x35f1141c, 0x26a1e7e8, 0xd4ca64eb,
19
+ 0x8ad958cf, 0x78b2dbcc, 0x6be22838, 0x9989ab3b,
20
+ 0x4d43cfd0, 0xbf284cd3, 0xac78bf27, 0x5e133c24,
21
+ 0x105ec76f, 0xe235446c, 0xf165b798, 0x030e349b,
22
+ 0xd7c45070, 0x25afd373, 0x36ff2087, 0xc494a384,
23
+ 0x9a879fa0, 0x68ec1ca3, 0x7bbcef57, 0x89d76c54,
24
+ 0x5d1d08bf, 0xaf768bbc, 0xbc267848, 0x4e4dfb4b,
25
+ 0x20bd8ede, 0xd2d60ddd, 0xc186fe29, 0x33ed7d2a,
26
+ 0xe72719c1, 0x154c9ac2, 0x061c6936, 0xf477ea35,
27
+ 0xaa64d611, 0x580f5512, 0x4b5fa6e6, 0xb93425e5,
28
+ 0x6dfe410e, 0x9f95c20d, 0x8cc531f9, 0x7eaeb2fa,
29
+ 0x30e349b1, 0xc288cab2, 0xd1d83946, 0x23b3ba45,
30
+ 0xf779deae, 0x05125dad, 0x1642ae59, 0xe4292d5a,
31
+ 0xba3a117e, 0x4851927d, 0x5b016189, 0xa96ae28a,
32
+ 0x7da08661, 0x8fcb0562, 0x9c9bf696, 0x6ef07595,
33
+ 0x417b1dbc, 0xb3109ebf, 0xa0406d4b, 0x522bee48,
34
+ 0x86e18aa3, 0x748a09a0, 0x67dafa54, 0x95b17957,
35
+ 0xcba24573, 0x39c9c670, 0x2a993584, 0xd8f2b687,
36
+ 0x0c38d26c, 0xfe53516f, 0xed03a29b, 0x1f682198,
37
+ 0x5125dad3, 0xa34e59d0, 0xb01eaa24, 0x42752927,
38
+ 0x96bf4dcc, 0x64d4cecf, 0x77843d3b, 0x85efbe38,
39
+ 0xdbfc821c, 0x2997011f, 0x3ac7f2eb, 0xc8ac71e8,
40
+ 0x1c661503, 0xee0d9600, 0xfd5d65f4, 0x0f36e6f7,
41
+ 0x61c69362, 0x93ad1061, 0x80fde395, 0x72966096,
42
+ 0xa65c047d, 0x5437877e, 0x4767748a, 0xb50cf789,
43
+ 0xeb1fcbad, 0x197448ae, 0x0a24bb5a, 0xf84f3859,
44
+ 0x2c855cb2, 0xdeeedfb1, 0xcdbe2c45, 0x3fd5af46,
45
+ 0x7198540d, 0x83f3d70e, 0x90a324fa, 0x62c8a7f9,
46
+ 0xb602c312, 0x44694011, 0x5739b3e5, 0xa55230e6,
47
+ 0xfb410cc2, 0x092a8fc1, 0x1a7a7c35, 0xe811ff36,
48
+ 0x3cdb9bdd, 0xceb018de, 0xdde0eb2a, 0x2f8b6829,
49
+ 0x82f63b78, 0x709db87b, 0x63cd4b8f, 0x91a6c88c,
50
+ 0x456cac67, 0xb7072f64, 0xa457dc90, 0x563c5f93,
51
+ 0x082f63b7, 0xfa44e0b4, 0xe9141340, 0x1b7f9043,
52
+ 0xcfb5f4a8, 0x3dde77ab, 0x2e8e845f, 0xdce5075c,
53
+ 0x92a8fc17, 0x60c37f14, 0x73938ce0, 0x81f80fe3,
54
+ 0x55326b08, 0xa759e80b, 0xb4091bff, 0x466298fc,
55
+ 0x1871a4d8, 0xea1a27db, 0xf94ad42f, 0x0b21572c,
56
+ 0xdfeb33c7, 0x2d80b0c4, 0x3ed04330, 0xccbbc033,
57
+ 0xa24bb5a6, 0x502036a5, 0x4370c551, 0xb11b4652,
58
+ 0x65d122b9, 0x97baa1ba, 0x84ea524e, 0x7681d14d,
59
+ 0x2892ed69, 0xdaf96e6a, 0xc9a99d9e, 0x3bc21e9d,
60
+ 0xef087a76, 0x1d63f975, 0x0e330a81, 0xfc588982,
61
+ 0xb21572c9, 0x407ef1ca, 0x532e023e, 0xa145813d,
62
+ 0x758fe5d6, 0x87e466d5, 0x94b49521, 0x66df1622,
63
+ 0x38cc2a06, 0xcaa7a905, 0xd9f75af1, 0x2b9cd9f2,
64
+ 0xff56bd19, 0x0d3d3e1a, 0x1e6dcdee, 0xec064eed,
65
+ 0xc38d26c4, 0x31e6a5c7, 0x22b65633, 0xd0ddd530,
66
+ 0x0417b1db, 0xf67c32d8, 0xe52cc12c, 0x1747422f,
67
+ 0x49547e0b, 0xbb3ffd08, 0xa86f0efc, 0x5a048dff,
68
+ 0x8ecee914, 0x7ca56a17, 0x6ff599e3, 0x9d9e1ae0,
69
+ 0xd3d3e1ab, 0x21b862a8, 0x32e8915c, 0xc083125f,
70
+ 0x144976b4, 0xe622f5b7, 0xf5720643, 0x07198540,
71
+ 0x590ab964, 0xab613a67, 0xb831c993, 0x4a5a4a90,
72
+ 0x9e902e7b, 0x6cfbad78, 0x7fab5e8c, 0x8dc0dd8f,
73
+ 0xe330a81a, 0x115b2b19, 0x020bd8ed, 0xf0605bee,
74
+ 0x24aa3f05, 0xd6c1bc06, 0xc5914ff2, 0x37faccf1,
75
+ 0x69e9f0d5, 0x9b8273d6, 0x88d28022, 0x7ab90321,
76
+ 0xae7367ca, 0x5c18e4c9, 0x4f48173d, 0xbd23943e,
77
+ 0xf36e6f75, 0x0105ec76, 0x12551f82, 0xe03e9c81,
78
+ 0x34f4f86a, 0xc69f7b69, 0xd5cf889d, 0x27a40b9e,
79
+ 0x79b737ba, 0x8bdcb4b9, 0x988c474d, 0x6ae7c44e,
80
+ 0xbe2da0a5, 0x4c4623a6, 0x5f16d052, 0xad7d5351
81
+ };
82
+ static const uint32_t table1_[256] = {
83
+ 0x00000000, 0x13a29877, 0x274530ee, 0x34e7a899,
84
+ 0x4e8a61dc, 0x5d28f9ab, 0x69cf5132, 0x7a6dc945,
85
+ 0x9d14c3b8, 0x8eb65bcf, 0xba51f356, 0xa9f36b21,
86
+ 0xd39ea264, 0xc03c3a13, 0xf4db928a, 0xe7790afd,
87
+ 0x3fc5f181, 0x2c6769f6, 0x1880c16f, 0x0b225918,
88
+ 0x714f905d, 0x62ed082a, 0x560aa0b3, 0x45a838c4,
89
+ 0xa2d13239, 0xb173aa4e, 0x859402d7, 0x96369aa0,
90
+ 0xec5b53e5, 0xfff9cb92, 0xcb1e630b, 0xd8bcfb7c,
91
+ 0x7f8be302, 0x6c297b75, 0x58ced3ec, 0x4b6c4b9b,
92
+ 0x310182de, 0x22a31aa9, 0x1644b230, 0x05e62a47,
93
+ 0xe29f20ba, 0xf13db8cd, 0xc5da1054, 0xd6788823,
94
+ 0xac154166, 0xbfb7d911, 0x8b507188, 0x98f2e9ff,
95
+ 0x404e1283, 0x53ec8af4, 0x670b226d, 0x74a9ba1a,
96
+ 0x0ec4735f, 0x1d66eb28, 0x298143b1, 0x3a23dbc6,
97
+ 0xdd5ad13b, 0xcef8494c, 0xfa1fe1d5, 0xe9bd79a2,
98
+ 0x93d0b0e7, 0x80722890, 0xb4958009, 0xa737187e,
99
+ 0xff17c604, 0xecb55e73, 0xd852f6ea, 0xcbf06e9d,
100
+ 0xb19da7d8, 0xa23f3faf, 0x96d89736, 0x857a0f41,
101
+ 0x620305bc, 0x71a19dcb, 0x45463552, 0x56e4ad25,
102
+ 0x2c896460, 0x3f2bfc17, 0x0bcc548e, 0x186eccf9,
103
+ 0xc0d23785, 0xd370aff2, 0xe797076b, 0xf4359f1c,
104
+ 0x8e585659, 0x9dface2e, 0xa91d66b7, 0xbabffec0,
105
+ 0x5dc6f43d, 0x4e646c4a, 0x7a83c4d3, 0x69215ca4,
106
+ 0x134c95e1, 0x00ee0d96, 0x3409a50f, 0x27ab3d78,
107
+ 0x809c2506, 0x933ebd71, 0xa7d915e8, 0xb47b8d9f,
108
+ 0xce1644da, 0xddb4dcad, 0xe9537434, 0xfaf1ec43,
109
+ 0x1d88e6be, 0x0e2a7ec9, 0x3acdd650, 0x296f4e27,
110
+ 0x53028762, 0x40a01f15, 0x7447b78c, 0x67e52ffb,
111
+ 0xbf59d487, 0xacfb4cf0, 0x981ce469, 0x8bbe7c1e,
112
+ 0xf1d3b55b, 0xe2712d2c, 0xd69685b5, 0xc5341dc2,
113
+ 0x224d173f, 0x31ef8f48, 0x050827d1, 0x16aabfa6,
114
+ 0x6cc776e3, 0x7f65ee94, 0x4b82460d, 0x5820de7a,
115
+ 0xfbc3faf9, 0xe861628e, 0xdc86ca17, 0xcf245260,
116
+ 0xb5499b25, 0xa6eb0352, 0x920cabcb, 0x81ae33bc,
117
+ 0x66d73941, 0x7575a136, 0x419209af, 0x523091d8,
118
+ 0x285d589d, 0x3bffc0ea, 0x0f186873, 0x1cbaf004,
119
+ 0xc4060b78, 0xd7a4930f, 0xe3433b96, 0xf0e1a3e1,
120
+ 0x8a8c6aa4, 0x992ef2d3, 0xadc95a4a, 0xbe6bc23d,
121
+ 0x5912c8c0, 0x4ab050b7, 0x7e57f82e, 0x6df56059,
122
+ 0x1798a91c, 0x043a316b, 0x30dd99f2, 0x237f0185,
123
+ 0x844819fb, 0x97ea818c, 0xa30d2915, 0xb0afb162,
124
+ 0xcac27827, 0xd960e050, 0xed8748c9, 0xfe25d0be,
125
+ 0x195cda43, 0x0afe4234, 0x3e19eaad, 0x2dbb72da,
126
+ 0x57d6bb9f, 0x447423e8, 0x70938b71, 0x63311306,
127
+ 0xbb8de87a, 0xa82f700d, 0x9cc8d894, 0x8f6a40e3,
128
+ 0xf50789a6, 0xe6a511d1, 0xd242b948, 0xc1e0213f,
129
+ 0x26992bc2, 0x353bb3b5, 0x01dc1b2c, 0x127e835b,
130
+ 0x68134a1e, 0x7bb1d269, 0x4f567af0, 0x5cf4e287,
131
+ 0x04d43cfd, 0x1776a48a, 0x23910c13, 0x30339464,
132
+ 0x4a5e5d21, 0x59fcc556, 0x6d1b6dcf, 0x7eb9f5b8,
133
+ 0x99c0ff45, 0x8a626732, 0xbe85cfab, 0xad2757dc,
134
+ 0xd74a9e99, 0xc4e806ee, 0xf00fae77, 0xe3ad3600,
135
+ 0x3b11cd7c, 0x28b3550b, 0x1c54fd92, 0x0ff665e5,
136
+ 0x759baca0, 0x663934d7, 0x52de9c4e, 0x417c0439,
137
+ 0xa6050ec4, 0xb5a796b3, 0x81403e2a, 0x92e2a65d,
138
+ 0xe88f6f18, 0xfb2df76f, 0xcfca5ff6, 0xdc68c781,
139
+ 0x7b5fdfff, 0x68fd4788, 0x5c1aef11, 0x4fb87766,
140
+ 0x35d5be23, 0x26772654, 0x12908ecd, 0x013216ba,
141
+ 0xe64b1c47, 0xf5e98430, 0xc10e2ca9, 0xd2acb4de,
142
+ 0xa8c17d9b, 0xbb63e5ec, 0x8f844d75, 0x9c26d502,
143
+ 0x449a2e7e, 0x5738b609, 0x63df1e90, 0x707d86e7,
144
+ 0x0a104fa2, 0x19b2d7d5, 0x2d557f4c, 0x3ef7e73b,
145
+ 0xd98eedc6, 0xca2c75b1, 0xfecbdd28, 0xed69455f,
146
+ 0x97048c1a, 0x84a6146d, 0xb041bcf4, 0xa3e32483
147
+ };
148
+ static const uint32_t table2_[256] = {
149
+ 0x00000000, 0xa541927e, 0x4f6f520d, 0xea2ec073,
150
+ 0x9edea41a, 0x3b9f3664, 0xd1b1f617, 0x74f06469,
151
+ 0x38513ec5, 0x9d10acbb, 0x773e6cc8, 0xd27ffeb6,
152
+ 0xa68f9adf, 0x03ce08a1, 0xe9e0c8d2, 0x4ca15aac,
153
+ 0x70a27d8a, 0xd5e3eff4, 0x3fcd2f87, 0x9a8cbdf9,
154
+ 0xee7cd990, 0x4b3d4bee, 0xa1138b9d, 0x045219e3,
155
+ 0x48f3434f, 0xedb2d131, 0x079c1142, 0xa2dd833c,
156
+ 0xd62de755, 0x736c752b, 0x9942b558, 0x3c032726,
157
+ 0xe144fb14, 0x4405696a, 0xae2ba919, 0x0b6a3b67,
158
+ 0x7f9a5f0e, 0xdadbcd70, 0x30f50d03, 0x95b49f7d,
159
+ 0xd915c5d1, 0x7c5457af, 0x967a97dc, 0x333b05a2,
160
+ 0x47cb61cb, 0xe28af3b5, 0x08a433c6, 0xade5a1b8,
161
+ 0x91e6869e, 0x34a714e0, 0xde89d493, 0x7bc846ed,
162
+ 0x0f382284, 0xaa79b0fa, 0x40577089, 0xe516e2f7,
163
+ 0xa9b7b85b, 0x0cf62a25, 0xe6d8ea56, 0x43997828,
164
+ 0x37691c41, 0x92288e3f, 0x78064e4c, 0xdd47dc32,
165
+ 0xc76580d9, 0x622412a7, 0x880ad2d4, 0x2d4b40aa,
166
+ 0x59bb24c3, 0xfcfab6bd, 0x16d476ce, 0xb395e4b0,
167
+ 0xff34be1c, 0x5a752c62, 0xb05bec11, 0x151a7e6f,
168
+ 0x61ea1a06, 0xc4ab8878, 0x2e85480b, 0x8bc4da75,
169
+ 0xb7c7fd53, 0x12866f2d, 0xf8a8af5e, 0x5de93d20,
170
+ 0x29195949, 0x8c58cb37, 0x66760b44, 0xc337993a,
171
+ 0x8f96c396, 0x2ad751e8, 0xc0f9919b, 0x65b803e5,
172
+ 0x1148678c, 0xb409f5f2, 0x5e273581, 0xfb66a7ff,
173
+ 0x26217bcd, 0x8360e9b3, 0x694e29c0, 0xcc0fbbbe,
174
+ 0xb8ffdfd7, 0x1dbe4da9, 0xf7908dda, 0x52d11fa4,
175
+ 0x1e704508, 0xbb31d776, 0x511f1705, 0xf45e857b,
176
+ 0x80aee112, 0x25ef736c, 0xcfc1b31f, 0x6a802161,
177
+ 0x56830647, 0xf3c29439, 0x19ec544a, 0xbcadc634,
178
+ 0xc85da25d, 0x6d1c3023, 0x8732f050, 0x2273622e,
179
+ 0x6ed23882, 0xcb93aafc, 0x21bd6a8f, 0x84fcf8f1,
180
+ 0xf00c9c98, 0x554d0ee6, 0xbf63ce95, 0x1a225ceb,
181
+ 0x8b277743, 0x2e66e53d, 0xc448254e, 0x6109b730,
182
+ 0x15f9d359, 0xb0b84127, 0x5a968154, 0xffd7132a,
183
+ 0xb3764986, 0x1637dbf8, 0xfc191b8b, 0x595889f5,
184
+ 0x2da8ed9c, 0x88e97fe2, 0x62c7bf91, 0xc7862def,
185
+ 0xfb850ac9, 0x5ec498b7, 0xb4ea58c4, 0x11abcaba,
186
+ 0x655baed3, 0xc01a3cad, 0x2a34fcde, 0x8f756ea0,
187
+ 0xc3d4340c, 0x6695a672, 0x8cbb6601, 0x29faf47f,
188
+ 0x5d0a9016, 0xf84b0268, 0x1265c21b, 0xb7245065,
189
+ 0x6a638c57, 0xcf221e29, 0x250cde5a, 0x804d4c24,
190
+ 0xf4bd284d, 0x51fcba33, 0xbbd27a40, 0x1e93e83e,
191
+ 0x5232b292, 0xf77320ec, 0x1d5de09f, 0xb81c72e1,
192
+ 0xccec1688, 0x69ad84f6, 0x83834485, 0x26c2d6fb,
193
+ 0x1ac1f1dd, 0xbf8063a3, 0x55aea3d0, 0xf0ef31ae,
194
+ 0x841f55c7, 0x215ec7b9, 0xcb7007ca, 0x6e3195b4,
195
+ 0x2290cf18, 0x87d15d66, 0x6dff9d15, 0xc8be0f6b,
196
+ 0xbc4e6b02, 0x190ff97c, 0xf321390f, 0x5660ab71,
197
+ 0x4c42f79a, 0xe90365e4, 0x032da597, 0xa66c37e9,
198
+ 0xd29c5380, 0x77ddc1fe, 0x9df3018d, 0x38b293f3,
199
+ 0x7413c95f, 0xd1525b21, 0x3b7c9b52, 0x9e3d092c,
200
+ 0xeacd6d45, 0x4f8cff3b, 0xa5a23f48, 0x00e3ad36,
201
+ 0x3ce08a10, 0x99a1186e, 0x738fd81d, 0xd6ce4a63,
202
+ 0xa23e2e0a, 0x077fbc74, 0xed517c07, 0x4810ee79,
203
+ 0x04b1b4d5, 0xa1f026ab, 0x4bdee6d8, 0xee9f74a6,
204
+ 0x9a6f10cf, 0x3f2e82b1, 0xd50042c2, 0x7041d0bc,
205
+ 0xad060c8e, 0x08479ef0, 0xe2695e83, 0x4728ccfd,
206
+ 0x33d8a894, 0x96993aea, 0x7cb7fa99, 0xd9f668e7,
207
+ 0x9557324b, 0x3016a035, 0xda386046, 0x7f79f238,
208
+ 0x0b899651, 0xaec8042f, 0x44e6c45c, 0xe1a75622,
209
+ 0xdda47104, 0x78e5e37a, 0x92cb2309, 0x378ab177,
210
+ 0x437ad51e, 0xe63b4760, 0x0c158713, 0xa954156d,
211
+ 0xe5f54fc1, 0x40b4ddbf, 0xaa9a1dcc, 0x0fdb8fb2,
212
+ 0x7b2bebdb, 0xde6a79a5, 0x3444b9d6, 0x91052ba8
213
+ };
214
+ static const uint32_t table3_[256] = {
215
+ 0x00000000, 0xdd45aab8, 0xbf672381, 0x62228939,
216
+ 0x7b2231f3, 0xa6679b4b, 0xc4451272, 0x1900b8ca,
217
+ 0xf64463e6, 0x2b01c95e, 0x49234067, 0x9466eadf,
218
+ 0x8d665215, 0x5023f8ad, 0x32017194, 0xef44db2c,
219
+ 0xe964b13d, 0x34211b85, 0x560392bc, 0x8b463804,
220
+ 0x924680ce, 0x4f032a76, 0x2d21a34f, 0xf06409f7,
221
+ 0x1f20d2db, 0xc2657863, 0xa047f15a, 0x7d025be2,
222
+ 0x6402e328, 0xb9474990, 0xdb65c0a9, 0x06206a11,
223
+ 0xd725148b, 0x0a60be33, 0x6842370a, 0xb5079db2,
224
+ 0xac072578, 0x71428fc0, 0x136006f9, 0xce25ac41,
225
+ 0x2161776d, 0xfc24ddd5, 0x9e0654ec, 0x4343fe54,
226
+ 0x5a43469e, 0x8706ec26, 0xe524651f, 0x3861cfa7,
227
+ 0x3e41a5b6, 0xe3040f0e, 0x81268637, 0x5c632c8f,
228
+ 0x45639445, 0x98263efd, 0xfa04b7c4, 0x27411d7c,
229
+ 0xc805c650, 0x15406ce8, 0x7762e5d1, 0xaa274f69,
230
+ 0xb327f7a3, 0x6e625d1b, 0x0c40d422, 0xd1057e9a,
231
+ 0xaba65fe7, 0x76e3f55f, 0x14c17c66, 0xc984d6de,
232
+ 0xd0846e14, 0x0dc1c4ac, 0x6fe34d95, 0xb2a6e72d,
233
+ 0x5de23c01, 0x80a796b9, 0xe2851f80, 0x3fc0b538,
234
+ 0x26c00df2, 0xfb85a74a, 0x99a72e73, 0x44e284cb,
235
+ 0x42c2eeda, 0x9f874462, 0xfda5cd5b, 0x20e067e3,
236
+ 0x39e0df29, 0xe4a57591, 0x8687fca8, 0x5bc25610,
237
+ 0xb4868d3c, 0x69c32784, 0x0be1aebd, 0xd6a40405,
238
+ 0xcfa4bccf, 0x12e11677, 0x70c39f4e, 0xad8635f6,
239
+ 0x7c834b6c, 0xa1c6e1d4, 0xc3e468ed, 0x1ea1c255,
240
+ 0x07a17a9f, 0xdae4d027, 0xb8c6591e, 0x6583f3a6,
241
+ 0x8ac7288a, 0x57828232, 0x35a00b0b, 0xe8e5a1b3,
242
+ 0xf1e51979, 0x2ca0b3c1, 0x4e823af8, 0x93c79040,
243
+ 0x95e7fa51, 0x48a250e9, 0x2a80d9d0, 0xf7c57368,
244
+ 0xeec5cba2, 0x3380611a, 0x51a2e823, 0x8ce7429b,
245
+ 0x63a399b7, 0xbee6330f, 0xdcc4ba36, 0x0181108e,
246
+ 0x1881a844, 0xc5c402fc, 0xa7e68bc5, 0x7aa3217d,
247
+ 0x52a0c93f, 0x8fe56387, 0xedc7eabe, 0x30824006,
248
+ 0x2982f8cc, 0xf4c75274, 0x96e5db4d, 0x4ba071f5,
249
+ 0xa4e4aad9, 0x79a10061, 0x1b838958, 0xc6c623e0,
250
+ 0xdfc69b2a, 0x02833192, 0x60a1b8ab, 0xbde41213,
251
+ 0xbbc47802, 0x6681d2ba, 0x04a35b83, 0xd9e6f13b,
252
+ 0xc0e649f1, 0x1da3e349, 0x7f816a70, 0xa2c4c0c8,
253
+ 0x4d801be4, 0x90c5b15c, 0xf2e73865, 0x2fa292dd,
254
+ 0x36a22a17, 0xebe780af, 0x89c50996, 0x5480a32e,
255
+ 0x8585ddb4, 0x58c0770c, 0x3ae2fe35, 0xe7a7548d,
256
+ 0xfea7ec47, 0x23e246ff, 0x41c0cfc6, 0x9c85657e,
257
+ 0x73c1be52, 0xae8414ea, 0xcca69dd3, 0x11e3376b,
258
+ 0x08e38fa1, 0xd5a62519, 0xb784ac20, 0x6ac10698,
259
+ 0x6ce16c89, 0xb1a4c631, 0xd3864f08, 0x0ec3e5b0,
260
+ 0x17c35d7a, 0xca86f7c2, 0xa8a47efb, 0x75e1d443,
261
+ 0x9aa50f6f, 0x47e0a5d7, 0x25c22cee, 0xf8878656,
262
+ 0xe1873e9c, 0x3cc29424, 0x5ee01d1d, 0x83a5b7a5,
263
+ 0xf90696d8, 0x24433c60, 0x4661b559, 0x9b241fe1,
264
+ 0x8224a72b, 0x5f610d93, 0x3d4384aa, 0xe0062e12,
265
+ 0x0f42f53e, 0xd2075f86, 0xb025d6bf, 0x6d607c07,
266
+ 0x7460c4cd, 0xa9256e75, 0xcb07e74c, 0x16424df4,
267
+ 0x106227e5, 0xcd278d5d, 0xaf050464, 0x7240aedc,
268
+ 0x6b401616, 0xb605bcae, 0xd4273597, 0x09629f2f,
269
+ 0xe6264403, 0x3b63eebb, 0x59416782, 0x8404cd3a,
270
+ 0x9d0475f0, 0x4041df48, 0x22635671, 0xff26fcc9,
271
+ 0x2e238253, 0xf36628eb, 0x9144a1d2, 0x4c010b6a,
272
+ 0x5501b3a0, 0x88441918, 0xea669021, 0x37233a99,
273
+ 0xd867e1b5, 0x05224b0d, 0x6700c234, 0xba45688c,
274
+ 0xa345d046, 0x7e007afe, 0x1c22f3c7, 0xc167597f,
275
+ 0xc747336e, 0x1a0299d6, 0x782010ef, 0xa565ba57,
276
+ 0xbc65029d, 0x6120a825, 0x0302211c, 0xde478ba4,
277
+ 0x31035088, 0xec46fa30, 0x8e647309, 0x5321d9b1,
278
+ 0x4a21617b, 0x9764cbc3, 0xf54642fa, 0x2803e842
279
+ };
280
+
281
+ // Used to fetch a naturally-aligned 32-bit word in little endian byte-order
282
+ static inline uint32_t LE_LOAD32(const uint8_t *p) {
283
+ return DecodeFixed32(reinterpret_cast<const char*>(p));
284
+ }
285
+
286
+ uint32_t Extend(uint32_t crc, const char* buf, size_t size) {
287
+ const uint8_t *p = reinterpret_cast<const uint8_t *>(buf);
288
+ const uint8_t *e = p + size;
289
+ uint32_t l = crc ^ 0xffffffffu;
290
+
291
+ #define STEP1 do { \
292
+ int c = (l & 0xff) ^ *p++; \
293
+ l = table0_[c] ^ (l >> 8); \
294
+ } while (0)
295
+ #define STEP4 do { \
296
+ uint32_t c = l ^ LE_LOAD32(p); \
297
+ p += 4; \
298
+ l = table3_[c & 0xff] ^ \
299
+ table2_[(c >> 8) & 0xff] ^ \
300
+ table1_[(c >> 16) & 0xff] ^ \
301
+ table0_[c >> 24]; \
302
+ } while (0)
303
+
304
+ // Point x at first 4-byte aligned byte in string. This might be
305
+ // just past the end of the string.
306
+ const uintptr_t pval = reinterpret_cast<uintptr_t>(p);
307
+ const uint8_t* x = reinterpret_cast<const uint8_t*>(((pval + 3) >> 2) << 2);
308
+ if (x <= e) {
309
+ // Process bytes until finished or p is 4-byte aligned
310
+ while (p != x) {
311
+ STEP1;
312
+ }
313
+ }
314
+ // Process bytes 16 at a time
315
+ while ((e-p) >= 16) {
316
+ STEP4; STEP4; STEP4; STEP4;
317
+ }
318
+ // Process bytes 4 at a time
319
+ while ((e-p) >= 4) {
320
+ STEP4;
321
+ }
322
+ // Process the last few bytes
323
+ while (p != e) {
324
+ STEP1;
325
+ }
326
+ #undef STEP4
327
+ #undef STEP1
328
+ return l ^ 0xffffffffu;
329
+ }
330
+
331
+ } // namespace crc32c
332
+ } // namespace leveldb
@@ -0,0 +1,45 @@
1
+ // Copyright (c) 2011 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
+ #ifndef STORAGE_LEVELDB_UTIL_CRC32C_H_
6
+ #define STORAGE_LEVELDB_UTIL_CRC32C_H_
7
+
8
+ #include <stddef.h>
9
+ #include <stdint.h>
10
+
11
+ namespace leveldb {
12
+ namespace crc32c {
13
+
14
+ // Return the crc32c of concat(A, data[0,n-1]) where init_crc is the
15
+ // crc32c of some string A. Extend() is often used to maintain the
16
+ // crc32c of a stream of data.
17
+ extern uint32_t Extend(uint32_t init_crc, const char* data, size_t n);
18
+
19
+ // Return the crc32c of data[0,n-1]
20
+ inline uint32_t Value(const char* data, size_t n) {
21
+ return Extend(0, data, n);
22
+ }
23
+
24
+ static const uint32_t kMaskDelta = 0xa282ead8ul;
25
+
26
+ // Return a masked representation of crc.
27
+ //
28
+ // Motivation: it is problematic to compute the CRC of a string that
29
+ // contains embedded CRCs. Therefore we recommend that CRCs stored
30
+ // somewhere (e.g., in files) should be masked before being stored.
31
+ inline uint32_t Mask(uint32_t crc) {
32
+ // Rotate right by 15 bits and add a constant.
33
+ return ((crc >> 15) | (crc << 17)) + kMaskDelta;
34
+ }
35
+
36
+ // Return the crc whose masked representation is masked_crc.
37
+ inline uint32_t Unmask(uint32_t masked_crc) {
38
+ uint32_t rot = masked_crc - kMaskDelta;
39
+ return ((rot >> 17) | (rot << 15));
40
+ }
41
+
42
+ } // namespace crc32c
43
+ } // namespace leveldb
44
+
45
+ #endif // STORAGE_LEVELDB_UTIL_CRC32C_H_
@@ -0,0 +1,72 @@
1
+ // Copyright (c) 2011 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 "util/crc32c.h"
6
+ #include "util/testharness.h"
7
+
8
+ namespace leveldb {
9
+ namespace crc32c {
10
+
11
+ class CRC { };
12
+
13
+ TEST(CRC, StandardResults) {
14
+ // From rfc3720 section B.4.
15
+ char buf[32];
16
+
17
+ memset(buf, 0, sizeof(buf));
18
+ ASSERT_EQ(0x8a9136aa, Value(buf, sizeof(buf)));
19
+
20
+ memset(buf, 0xff, sizeof(buf));
21
+ ASSERT_EQ(0x62a8ab43, Value(buf, sizeof(buf)));
22
+
23
+ for (int i = 0; i < 32; i++) {
24
+ buf[i] = i;
25
+ }
26
+ ASSERT_EQ(0x46dd794e, Value(buf, sizeof(buf)));
27
+
28
+ for (int i = 0; i < 32; i++) {
29
+ buf[i] = 31 - i;
30
+ }
31
+ ASSERT_EQ(0x113fdb5c, Value(buf, sizeof(buf)));
32
+
33
+ unsigned char data[48] = {
34
+ 0x01, 0xc0, 0x00, 0x00,
35
+ 0x00, 0x00, 0x00, 0x00,
36
+ 0x00, 0x00, 0x00, 0x00,
37
+ 0x00, 0x00, 0x00, 0x00,
38
+ 0x14, 0x00, 0x00, 0x00,
39
+ 0x00, 0x00, 0x04, 0x00,
40
+ 0x00, 0x00, 0x00, 0x14,
41
+ 0x00, 0x00, 0x00, 0x18,
42
+ 0x28, 0x00, 0x00, 0x00,
43
+ 0x00, 0x00, 0x00, 0x00,
44
+ 0x02, 0x00, 0x00, 0x00,
45
+ 0x00, 0x00, 0x00, 0x00,
46
+ };
47
+ ASSERT_EQ(0xd9963a56, Value(reinterpret_cast<char*>(data), sizeof(data)));
48
+ }
49
+
50
+ TEST(CRC, Values) {
51
+ ASSERT_NE(Value("a", 1), Value("foo", 3));
52
+ }
53
+
54
+ TEST(CRC, Extend) {
55
+ ASSERT_EQ(Value("hello world", 11),
56
+ Extend(Value("hello ", 6), "world", 5));
57
+ }
58
+
59
+ TEST(CRC, Mask) {
60
+ uint32_t crc = Value("foo", 3);
61
+ ASSERT_NE(crc, Mask(crc));
62
+ ASSERT_NE(crc, Mask(Mask(crc)));
63
+ ASSERT_EQ(crc, Unmask(Mask(crc)));
64
+ ASSERT_EQ(crc, Unmask(Unmask(Mask(Mask(crc)))));
65
+ }
66
+
67
+ } // namespace crc32c
68
+ } // namespace leveldb
69
+
70
+ int main(int argc, char** argv) {
71
+ return leveldb::test::RunAllTests();
72
+ }
@@ -0,0 +1,96 @@
1
+ // Copyright (c) 2011 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/env.h"
6
+
7
+ namespace leveldb {
8
+
9
+ Env::~Env() {
10
+ }
11
+
12
+ SequentialFile::~SequentialFile() {
13
+ }
14
+
15
+ RandomAccessFile::~RandomAccessFile() {
16
+ }
17
+
18
+ WritableFile::~WritableFile() {
19
+ }
20
+
21
+ Logger::~Logger() {
22
+ }
23
+
24
+ FileLock::~FileLock() {
25
+ }
26
+
27
+ void Log(Logger* info_log, const char* format, ...) {
28
+ if (info_log != NULL) {
29
+ va_list ap;
30
+ va_start(ap, format);
31
+ info_log->Logv(format, ap);
32
+ va_end(ap);
33
+ }
34
+ }
35
+
36
+ static Status DoWriteStringToFile(Env* env, const Slice& data,
37
+ const std::string& fname,
38
+ bool should_sync) {
39
+ WritableFile* file;
40
+ Status s = env->NewWritableFile(fname, &file);
41
+ if (!s.ok()) {
42
+ return s;
43
+ }
44
+ s = file->Append(data);
45
+ if (s.ok() && should_sync) {
46
+ s = file->Sync();
47
+ }
48
+ if (s.ok()) {
49
+ s = file->Close();
50
+ }
51
+ delete file; // Will auto-close if we did not close above
52
+ if (!s.ok()) {
53
+ env->DeleteFile(fname);
54
+ }
55
+ return s;
56
+ }
57
+
58
+ Status WriteStringToFile(Env* env, const Slice& data,
59
+ const std::string& fname) {
60
+ return DoWriteStringToFile(env, data, fname, false);
61
+ }
62
+
63
+ Status WriteStringToFileSync(Env* env, const Slice& data,
64
+ const std::string& fname) {
65
+ return DoWriteStringToFile(env, data, fname, true);
66
+ }
67
+
68
+ Status ReadFileToString(Env* env, const std::string& fname, std::string* data) {
69
+ data->clear();
70
+ SequentialFile* file;
71
+ Status s = env->NewSequentialFile(fname, &file);
72
+ if (!s.ok()) {
73
+ return s;
74
+ }
75
+ static const int kBufferSize = 8192;
76
+ char* space = new char[kBufferSize];
77
+ while (true) {
78
+ Slice fragment;
79
+ s = file->Read(kBufferSize, &fragment, space);
80
+ if (!s.ok()) {
81
+ break;
82
+ }
83
+ data->append(fragment.data(), fragment.size());
84
+ if (fragment.empty()) {
85
+ break;
86
+ }
87
+ }
88
+ delete[] space;
89
+ delete file;
90
+ return s;
91
+ }
92
+
93
+ EnvWrapper::~EnvWrapper() {
94
+ }
95
+
96
+ } // namespace leveldb