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.
- data/LICENSE +24 -0
- data/README +60 -16
- data/ext/leveldb/extconf.rb +1 -1
- data/ext/leveldb/leveldb.cc +187 -18
- data/leveldb/Makefile +82 -96
- data/leveldb/build_detect_platform +137 -51
- data/leveldb/db/c.cc +110 -0
- data/leveldb/db/db_bench.cc +105 -4
- data/leveldb/db/db_impl.cc +135 -45
- data/leveldb/db/db_impl.h +12 -10
- data/leveldb/db/db_test.cc +666 -431
- data/leveldb/db/dbformat.cc +20 -0
- data/leveldb/db/dbformat.h +12 -0
- data/leveldb/db/repair.cc +3 -1
- data/leveldb/db/skiplist.h +2 -1
- data/leveldb/db/table_cache.cc +42 -16
- data/leveldb/db/table_cache.h +11 -0
- data/leveldb/db/version_set.cc +46 -41
- data/leveldb/db/version_set.h +9 -0
- data/leveldb/db/write_batch.cc +13 -4
- data/leveldb/db/write_batch_internal.h +2 -0
- data/leveldb/db/write_batch_test.cc +31 -0
- data/leveldb/include/leveldb/c.h +29 -0
- data/leveldb/include/leveldb/db.h +2 -1
- data/leveldb/include/leveldb/filter_policy.h +70 -0
- data/leveldb/include/leveldb/options.h +8 -0
- data/leveldb/include/leveldb/status.h +6 -0
- data/leveldb/include/leveldb/table.h +15 -0
- data/leveldb/include/leveldb/table_builder.h +1 -0
- data/leveldb/port/atomic_pointer.h +13 -5
- data/leveldb/port/port.h +0 -2
- data/leveldb/port/port_example.h +10 -0
- data/leveldb/port/port_posix.cc +4 -0
- data/leveldb/port/port_posix.h +24 -9
- data/leveldb/table/block.cc +8 -4
- data/leveldb/table/block.h +3 -2
- data/leveldb/table/filter_block.cc +111 -0
- data/leveldb/table/filter_block.h +68 -0
- data/leveldb/table/filter_block_test.cc +128 -0
- data/leveldb/table/format.cc +17 -7
- data/leveldb/table/format.h +9 -4
- data/leveldb/table/table.cc +107 -6
- data/leveldb/table/table_builder.cc +49 -6
- data/leveldb/table/table_test.cc +8 -24
- data/leveldb/util/bloom.cc +95 -0
- data/leveldb/util/bloom_test.cc +159 -0
- data/leveldb/util/coding_test.cc +23 -0
- data/leveldb/util/comparator.cc +8 -3
- data/leveldb/util/env_posix.cc +46 -4
- data/leveldb/util/filter_policy.cc +11 -0
- data/leveldb/util/options.cc +2 -1
- data/lib/leveldb.rb +31 -5
- metadata +227 -109
- data/leveldb/port/port_android.cc +0 -64
- data/leveldb/port/port_android.h +0 -156
@@ -1,64 +0,0 @@
|
|
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 "port/port_android.h"
|
6
|
-
|
7
|
-
#include <cstdlib>
|
8
|
-
|
9
|
-
extern "C" {
|
10
|
-
size_t fread_unlocked(void *a, size_t b, size_t c, FILE *d) {
|
11
|
-
return fread(a, b, c, d);
|
12
|
-
}
|
13
|
-
|
14
|
-
size_t fwrite_unlocked(const void *a, size_t b, size_t c, FILE *d) {
|
15
|
-
return fwrite(a, b, c, d);
|
16
|
-
}
|
17
|
-
|
18
|
-
int fflush_unlocked(FILE *f) {
|
19
|
-
return fflush(f);
|
20
|
-
}
|
21
|
-
|
22
|
-
int fdatasync(int fd) {
|
23
|
-
return fsync(fd);
|
24
|
-
}
|
25
|
-
}
|
26
|
-
|
27
|
-
namespace leveldb {
|
28
|
-
namespace port {
|
29
|
-
|
30
|
-
static void PthreadCall(const char* label, int result) {
|
31
|
-
if (result != 0) {
|
32
|
-
fprintf(stderr, "pthread %s: %s\n", label, strerror(result));
|
33
|
-
abort();
|
34
|
-
}
|
35
|
-
}
|
36
|
-
|
37
|
-
Mutex::Mutex() { PthreadCall("init mutex", pthread_mutex_init(&mu_, NULL)); }
|
38
|
-
Mutex::~Mutex() { PthreadCall("destroy mutex", pthread_mutex_destroy(&mu_)); }
|
39
|
-
void Mutex::Lock() { PthreadCall("lock", pthread_mutex_lock(&mu_)); }
|
40
|
-
void Mutex::Unlock() { PthreadCall("unlock", pthread_mutex_unlock(&mu_)); }
|
41
|
-
|
42
|
-
CondVar::CondVar(Mutex* mu)
|
43
|
-
: mu_(mu) {
|
44
|
-
PthreadCall("init cv", pthread_cond_init(&cv_, NULL));
|
45
|
-
}
|
46
|
-
|
47
|
-
CondVar::~CondVar() {
|
48
|
-
PthreadCall("destroy cv", pthread_cond_destroy(&cv_));
|
49
|
-
}
|
50
|
-
|
51
|
-
void CondVar::Wait() {
|
52
|
-
PthreadCall("wait", pthread_cond_wait(&cv_, &mu_->mu_));
|
53
|
-
}
|
54
|
-
|
55
|
-
void CondVar::Signal(){
|
56
|
-
PthreadCall("signal", pthread_cond_signal(&cv_));
|
57
|
-
}
|
58
|
-
|
59
|
-
void CondVar::SignalAll() {
|
60
|
-
PthreadCall("broadcast", pthread_cond_broadcast(&cv_));
|
61
|
-
}
|
62
|
-
|
63
|
-
} // namespace port
|
64
|
-
} // namespace leveldb
|
data/leveldb/port/port_android.h
DELETED
@@ -1,156 +0,0 @@
|
|
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
|
-
// See port_example.h for documentation for the following types/functions.
|
6
|
-
|
7
|
-
#ifndef STORAGE_LEVELDB_PORT_PORT_ANDROID_H_
|
8
|
-
#define STORAGE_LEVELDB_PORT_PORT_ANDROID_H_
|
9
|
-
|
10
|
-
#include <endian.h>
|
11
|
-
#include <pthread.h>
|
12
|
-
#include <stdint.h>
|
13
|
-
#include <cstdatomic>
|
14
|
-
#include <string>
|
15
|
-
#include <cctype>
|
16
|
-
|
17
|
-
// Collapse the plethora of ARM flavors available to an easier to manage set
|
18
|
-
// Defs reference is at https://wiki.edubuntu.org/ARM/Thumb2PortingHowto
|
19
|
-
#if defined(__ARM_ARCH_6__) || \
|
20
|
-
defined(__ARM_ARCH_6J__) || \
|
21
|
-
defined(__ARM_ARCH_6K__) || \
|
22
|
-
defined(__ARM_ARCH_6Z__) || \
|
23
|
-
defined(__ARM_ARCH_6T2__) || \
|
24
|
-
defined(__ARM_ARCH_6ZK__) || \
|
25
|
-
defined(__ARM_ARCH_7__) || \
|
26
|
-
defined(__ARM_ARCH_7R__) || \
|
27
|
-
defined(__ARM_ARCH_7A__)
|
28
|
-
#define ARMV6_OR_7 1
|
29
|
-
#endif
|
30
|
-
|
31
|
-
extern "C" {
|
32
|
-
size_t fread_unlocked(void *a, size_t b, size_t c, FILE *d);
|
33
|
-
size_t fwrite_unlocked(const void *a, size_t b, size_t c, FILE *d);
|
34
|
-
int fflush_unlocked(FILE *f);
|
35
|
-
int fdatasync (int fd);
|
36
|
-
}
|
37
|
-
|
38
|
-
namespace leveldb {
|
39
|
-
namespace port {
|
40
|
-
|
41
|
-
static const bool kLittleEndian = __BYTE_ORDER == __LITTLE_ENDIAN;
|
42
|
-
|
43
|
-
class CondVar;
|
44
|
-
|
45
|
-
class Mutex {
|
46
|
-
public:
|
47
|
-
Mutex();
|
48
|
-
~Mutex();
|
49
|
-
|
50
|
-
void Lock();
|
51
|
-
void Unlock();
|
52
|
-
void AssertHeld() {
|
53
|
-
//TODO(gabor): How can I implement this?
|
54
|
-
}
|
55
|
-
|
56
|
-
private:
|
57
|
-
friend class CondVar;
|
58
|
-
pthread_mutex_t mu_;
|
59
|
-
|
60
|
-
// No copying
|
61
|
-
Mutex(const Mutex&);
|
62
|
-
void operator=(const Mutex&);
|
63
|
-
};
|
64
|
-
|
65
|
-
class CondVar {
|
66
|
-
public:
|
67
|
-
explicit CondVar(Mutex* mu);
|
68
|
-
~CondVar();
|
69
|
-
void Wait();
|
70
|
-
void Signal();
|
71
|
-
void SignalAll();
|
72
|
-
private:
|
73
|
-
Mutex* mu_;
|
74
|
-
pthread_cond_t cv_;
|
75
|
-
};
|
76
|
-
|
77
|
-
#ifndef ARMV6_OR_7
|
78
|
-
// On ARM chipsets <V6, 0xffff0fa0 is the hard coded address of a
|
79
|
-
// memory barrier function provided by the kernel.
|
80
|
-
typedef void (*LinuxKernelMemoryBarrierFunc)(void);
|
81
|
-
LinuxKernelMemoryBarrierFunc pLinuxKernelMemoryBarrier ATTRIBUTE_WEAK =
|
82
|
-
(LinuxKernelMemoryBarrierFunc) 0xffff0fa0;
|
83
|
-
#endif
|
84
|
-
|
85
|
-
// Storage for a lock-free pointer
|
86
|
-
class AtomicPointer {
|
87
|
-
private:
|
88
|
-
void* rep_;
|
89
|
-
|
90
|
-
inline void MemoryBarrier() const {
|
91
|
-
// TODO(gabor): This only works on Android instruction sets >= V6
|
92
|
-
#ifdef ARMV6_OR_7
|
93
|
-
__asm__ __volatile__("dmb" : : : "memory");
|
94
|
-
#else
|
95
|
-
pLinuxKernelMemoryBarrier();
|
96
|
-
#endif
|
97
|
-
}
|
98
|
-
|
99
|
-
public:
|
100
|
-
AtomicPointer() { }
|
101
|
-
explicit AtomicPointer(void* v) : rep_(v) { }
|
102
|
-
inline void* Acquire_Load() const {
|
103
|
-
void* r = rep_;
|
104
|
-
MemoryBarrier();
|
105
|
-
return r;
|
106
|
-
}
|
107
|
-
inline void Release_Store(void* v) {
|
108
|
-
MemoryBarrier();
|
109
|
-
rep_ = v;
|
110
|
-
}
|
111
|
-
inline void* NoBarrier_Load() const {
|
112
|
-
void* r = rep_;
|
113
|
-
return r;
|
114
|
-
}
|
115
|
-
inline void NoBarrier_Store(void* v) {
|
116
|
-
rep_ = v;
|
117
|
-
}
|
118
|
-
};
|
119
|
-
|
120
|
-
// TODO(gabor): Implement compress
|
121
|
-
inline bool Snappy_Compress(
|
122
|
-
const char* input,
|
123
|
-
size_t input_length,
|
124
|
-
std::string* output) {
|
125
|
-
return false;
|
126
|
-
}
|
127
|
-
|
128
|
-
// TODO(gabor): Implement uncompress
|
129
|
-
inline bool Snappy_GetUncompressedLength(const char* input, size_t length,
|
130
|
-
size_t* result) {
|
131
|
-
return false;
|
132
|
-
}
|
133
|
-
|
134
|
-
// TODO(gabor): Implement uncompress
|
135
|
-
inline bool Snappy_Uncompress(
|
136
|
-
const char* input_data,
|
137
|
-
size_t input_length,
|
138
|
-
char* output) {
|
139
|
-
return false;
|
140
|
-
}
|
141
|
-
|
142
|
-
inline uint64_t ThreadIdentifier() {
|
143
|
-
pthread_t tid = pthread_self();
|
144
|
-
uint64_t r = 0;
|
145
|
-
memcpy(&r, &tid, sizeof(r) < sizeof(tid) ? sizeof(r) : sizeof(tid));
|
146
|
-
return r;
|
147
|
-
}
|
148
|
-
|
149
|
-
inline bool GetHeapProfile(void (*func)(void*, const char*, int), void* arg) {
|
150
|
-
return false;
|
151
|
-
}
|
152
|
-
|
153
|
-
} // namespace port
|
154
|
-
} // namespace leveldb
|
155
|
-
|
156
|
-
#endif // STORAGE_LEVELDB_PORT_PORT_ANDROID_H_
|