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.
- checksums.yaml +7 -0
- data/LICENSE.txt +22 -0
- data/README.md +95 -0
- data/ext/Rakefile +11 -0
- data/ext/leveldb/LICENSE +27 -0
- data/ext/leveldb/Makefile +206 -0
- data/ext/leveldb/build_config.mk +13 -0
- data/ext/leveldb/db/builder.cc +88 -0
- data/ext/leveldb/db/builder.h +34 -0
- data/ext/leveldb/db/c.cc +595 -0
- data/ext/leveldb/db/c_test.c +390 -0
- data/ext/leveldb/db/corruption_test.cc +359 -0
- data/ext/leveldb/db/db_bench.cc +979 -0
- data/ext/leveldb/db/db_impl.cc +1485 -0
- data/ext/leveldb/db/db_impl.h +203 -0
- data/ext/leveldb/db/db_iter.cc +299 -0
- data/ext/leveldb/db/db_iter.h +26 -0
- data/ext/leveldb/db/db_test.cc +2092 -0
- data/ext/leveldb/db/dbformat.cc +140 -0
- data/ext/leveldb/db/dbformat.h +227 -0
- data/ext/leveldb/db/dbformat_test.cc +112 -0
- data/ext/leveldb/db/filename.cc +139 -0
- data/ext/leveldb/db/filename.h +80 -0
- data/ext/leveldb/db/filename_test.cc +122 -0
- data/ext/leveldb/db/leveldb_main.cc +238 -0
- data/ext/leveldb/db/log_format.h +35 -0
- data/ext/leveldb/db/log_reader.cc +259 -0
- data/ext/leveldb/db/log_reader.h +108 -0
- data/ext/leveldb/db/log_test.cc +500 -0
- data/ext/leveldb/db/log_writer.cc +103 -0
- data/ext/leveldb/db/log_writer.h +48 -0
- data/ext/leveldb/db/memtable.cc +145 -0
- data/ext/leveldb/db/memtable.h +91 -0
- data/ext/leveldb/db/repair.cc +389 -0
- data/ext/leveldb/db/skiplist.h +379 -0
- data/ext/leveldb/db/skiplist_test.cc +378 -0
- data/ext/leveldb/db/snapshot.h +66 -0
- data/ext/leveldb/db/table_cache.cc +121 -0
- data/ext/leveldb/db/table_cache.h +61 -0
- data/ext/leveldb/db/version_edit.cc +266 -0
- data/ext/leveldb/db/version_edit.h +107 -0
- data/ext/leveldb/db/version_edit_test.cc +46 -0
- data/ext/leveldb/db/version_set.cc +1443 -0
- data/ext/leveldb/db/version_set.h +383 -0
- data/ext/leveldb/db/version_set_test.cc +179 -0
- data/ext/leveldb/db/write_batch.cc +147 -0
- data/ext/leveldb/db/write_batch_internal.h +49 -0
- data/ext/leveldb/db/write_batch_test.cc +120 -0
- data/ext/leveldb/doc/bench/db_bench_sqlite3.cc +718 -0
- data/ext/leveldb/doc/bench/db_bench_tree_db.cc +528 -0
- data/ext/leveldb/helpers/memenv/memenv.cc +384 -0
- data/ext/leveldb/helpers/memenv/memenv.h +20 -0
- data/ext/leveldb/helpers/memenv/memenv_test.cc +232 -0
- data/ext/leveldb/include/leveldb/c.h +291 -0
- data/ext/leveldb/include/leveldb/cache.h +99 -0
- data/ext/leveldb/include/leveldb/comparator.h +63 -0
- data/ext/leveldb/include/leveldb/db.h +161 -0
- data/ext/leveldb/include/leveldb/env.h +333 -0
- data/ext/leveldb/include/leveldb/filter_policy.h +70 -0
- data/ext/leveldb/include/leveldb/iterator.h +100 -0
- data/ext/leveldb/include/leveldb/options.h +195 -0
- data/ext/leveldb/include/leveldb/slice.h +109 -0
- data/ext/leveldb/include/leveldb/status.h +106 -0
- data/ext/leveldb/include/leveldb/table.h +85 -0
- data/ext/leveldb/include/leveldb/table_builder.h +92 -0
- data/ext/leveldb/include/leveldb/write_batch.h +64 -0
- data/ext/leveldb/issues/issue178_test.cc +92 -0
- data/ext/leveldb/port/atomic_pointer.h +224 -0
- data/ext/leveldb/port/port.h +19 -0
- data/ext/leveldb/port/port_example.h +135 -0
- data/ext/leveldb/port/port_posix.cc +54 -0
- data/ext/leveldb/port/port_posix.h +157 -0
- data/ext/leveldb/port/thread_annotations.h +59 -0
- data/ext/leveldb/port/win/stdint.h +24 -0
- data/ext/leveldb/table/block.cc +268 -0
- data/ext/leveldb/table/block.h +44 -0
- data/ext/leveldb/table/block_builder.cc +109 -0
- data/ext/leveldb/table/block_builder.h +57 -0
- data/ext/leveldb/table/filter_block.cc +111 -0
- data/ext/leveldb/table/filter_block.h +68 -0
- data/ext/leveldb/table/filter_block_test.cc +128 -0
- data/ext/leveldb/table/format.cc +145 -0
- data/ext/leveldb/table/format.h +108 -0
- data/ext/leveldb/table/iterator.cc +67 -0
- data/ext/leveldb/table/iterator_wrapper.h +63 -0
- data/ext/leveldb/table/merger.cc +197 -0
- data/ext/leveldb/table/merger.h +26 -0
- data/ext/leveldb/table/table.cc +275 -0
- data/ext/leveldb/table/table_builder.cc +270 -0
- data/ext/leveldb/table/table_test.cc +868 -0
- data/ext/leveldb/table/two_level_iterator.cc +182 -0
- data/ext/leveldb/table/two_level_iterator.h +34 -0
- data/ext/leveldb/util/arena.cc +68 -0
- data/ext/leveldb/util/arena.h +68 -0
- data/ext/leveldb/util/arena_test.cc +68 -0
- data/ext/leveldb/util/bloom.cc +95 -0
- data/ext/leveldb/util/bloom_test.cc +160 -0
- data/ext/leveldb/util/cache.cc +325 -0
- data/ext/leveldb/util/cache_test.cc +186 -0
- data/ext/leveldb/util/coding.cc +194 -0
- data/ext/leveldb/util/coding.h +104 -0
- data/ext/leveldb/util/coding_test.cc +196 -0
- data/ext/leveldb/util/comparator.cc +81 -0
- data/ext/leveldb/util/crc32c.cc +332 -0
- data/ext/leveldb/util/crc32c.h +45 -0
- data/ext/leveldb/util/crc32c_test.cc +72 -0
- data/ext/leveldb/util/env.cc +96 -0
- data/ext/leveldb/util/env_posix.cc +698 -0
- data/ext/leveldb/util/env_test.cc +104 -0
- data/ext/leveldb/util/filter_policy.cc +11 -0
- data/ext/leveldb/util/hash.cc +52 -0
- data/ext/leveldb/util/hash.h +19 -0
- data/ext/leveldb/util/histogram.cc +139 -0
- data/ext/leveldb/util/histogram.h +42 -0
- data/ext/leveldb/util/logging.cc +81 -0
- data/ext/leveldb/util/logging.h +47 -0
- data/ext/leveldb/util/mutexlock.h +41 -0
- data/ext/leveldb/util/options.cc +29 -0
- data/ext/leveldb/util/posix_logger.h +98 -0
- data/ext/leveldb/util/random.h +59 -0
- data/ext/leveldb/util/status.cc +75 -0
- data/ext/leveldb/util/testharness.cc +77 -0
- data/ext/leveldb/util/testharness.h +138 -0
- data/ext/leveldb/util/testutil.cc +51 -0
- data/ext/leveldb/util/testutil.h +53 -0
- data/lib/leveldb/version.rb +3 -0
- data/lib/leveldb.rb +1006 -0
- 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
|