rrudb 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +1 -0
  3. data/LICENSE.txt +22 -0
  4. data/README.md +26 -0
  5. data/examples/example.rb +39 -0
  6. data/ext/rudb/NuDB/include/nudb/CMakeLists.txt +104 -0
  7. data/ext/rudb/NuDB/include/nudb/_experimental/basic_seconds_clock.hpp +200 -0
  8. data/ext/rudb/NuDB/include/nudb/_experimental/chrono_util.hpp +58 -0
  9. data/ext/rudb/NuDB/include/nudb/_experimental/test/fail_file.hpp +343 -0
  10. data/ext/rudb/NuDB/include/nudb/_experimental/test/temp_dir.hpp +73 -0
  11. data/ext/rudb/NuDB/include/nudb/_experimental/test/test_store.hpp +451 -0
  12. data/ext/rudb/NuDB/include/nudb/_experimental/test/xor_shift_engine.hpp +105 -0
  13. data/ext/rudb/NuDB/include/nudb/_experimental/util.hpp +288 -0
  14. data/ext/rudb/NuDB/include/nudb/basic_store.hpp +461 -0
  15. data/ext/rudb/NuDB/include/nudb/concepts.hpp +205 -0
  16. data/ext/rudb/NuDB/include/nudb/context.hpp +144 -0
  17. data/ext/rudb/NuDB/include/nudb/create.hpp +117 -0
  18. data/ext/rudb/NuDB/include/nudb/detail/arena.hpp +296 -0
  19. data/ext/rudb/NuDB/include/nudb/detail/bucket.hpp +473 -0
  20. data/ext/rudb/NuDB/include/nudb/detail/buffer.hpp +86 -0
  21. data/ext/rudb/NuDB/include/nudb/detail/bulkio.hpp +196 -0
  22. data/ext/rudb/NuDB/include/nudb/detail/cache.hpp +236 -0
  23. data/ext/rudb/NuDB/include/nudb/detail/endian.hpp +93 -0
  24. data/ext/rudb/NuDB/include/nudb/detail/field.hpp +265 -0
  25. data/ext/rudb/NuDB/include/nudb/detail/format.hpp +630 -0
  26. data/ext/rudb/NuDB/include/nudb/detail/gentex.hpp +259 -0
  27. data/ext/rudb/NuDB/include/nudb/detail/mutex.hpp +26 -0
  28. data/ext/rudb/NuDB/include/nudb/detail/pool.hpp +243 -0
  29. data/ext/rudb/NuDB/include/nudb/detail/store_base.hpp +45 -0
  30. data/ext/rudb/NuDB/include/nudb/detail/stream.hpp +149 -0
  31. data/ext/rudb/NuDB/include/nudb/detail/xxhash.hpp +328 -0
  32. data/ext/rudb/NuDB/include/nudb/error.hpp +257 -0
  33. data/ext/rudb/NuDB/include/nudb/file.hpp +55 -0
  34. data/ext/rudb/NuDB/include/nudb/impl/basic_store.ipp +785 -0
  35. data/ext/rudb/NuDB/include/nudb/impl/context.ipp +241 -0
  36. data/ext/rudb/NuDB/include/nudb/impl/create.ipp +163 -0
  37. data/ext/rudb/NuDB/include/nudb/impl/error.ipp +175 -0
  38. data/ext/rudb/NuDB/include/nudb/impl/posix_file.ipp +248 -0
  39. data/ext/rudb/NuDB/include/nudb/impl/recover.ipp +209 -0
  40. data/ext/rudb/NuDB/include/nudb/impl/rekey.ipp +248 -0
  41. data/ext/rudb/NuDB/include/nudb/impl/verify.ipp +634 -0
  42. data/ext/rudb/NuDB/include/nudb/impl/visit.ipp +96 -0
  43. data/ext/rudb/NuDB/include/nudb/impl/win32_file.ipp +264 -0
  44. data/ext/rudb/NuDB/include/nudb/native_file.hpp +76 -0
  45. data/ext/rudb/NuDB/include/nudb/nudb.hpp +27 -0
  46. data/ext/rudb/NuDB/include/nudb/posix_file.hpp +228 -0
  47. data/ext/rudb/NuDB/include/nudb/progress.hpp +32 -0
  48. data/ext/rudb/NuDB/include/nudb/recover.hpp +73 -0
  49. data/ext/rudb/NuDB/include/nudb/rekey.hpp +110 -0
  50. data/ext/rudb/NuDB/include/nudb/store.hpp +27 -0
  51. data/ext/rudb/NuDB/include/nudb/type_traits.hpp +63 -0
  52. data/ext/rudb/NuDB/include/nudb/verify.hpp +200 -0
  53. data/ext/rudb/NuDB/include/nudb/version.hpp +21 -0
  54. data/ext/rudb/NuDB/include/nudb/visit.hpp +63 -0
  55. data/ext/rudb/NuDB/include/nudb/win32_file.hpp +246 -0
  56. data/ext/rudb/NuDB/include/nudb/xxhasher.hpp +45 -0
  57. data/ext/rudb/extconf.rb +12 -0
  58. data/ext/rudb/rudb.cpp +234 -0
  59. data/lib/rudb/version.rb +3 -0
  60. data/lib/rudb.rb +1 -0
  61. metadata +104 -0
@@ -0,0 +1,265 @@
1
+ //
2
+ // Copyright (c) 2015-2016 Vinnie Falco (vinnie dot falco at gmail dot com)
3
+ //
4
+ // Distributed under the Boost Software License, Version 1.0. (See accompanying
5
+ // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6
+ //
7
+
8
+ #ifndef NUDB_FIELD_HPP
9
+ #define NUDB_FIELD_HPP
10
+
11
+ #include <nudb/detail/stream.hpp>
12
+ #include <boost/assert.hpp>
13
+ #include <cstddef>
14
+ #include <cstdint>
15
+ #include <limits>
16
+ #include <stdexcept>
17
+ #include <type_traits>
18
+
19
+ namespace nudb {
20
+ namespace detail {
21
+
22
+ // A 24-bit integer
23
+ struct uint24_t;
24
+
25
+ // A 48-bit integer
26
+ struct uint48_t;
27
+
28
+ // These metafunctions describe the binary format of fields on disk
29
+
30
+ template<class T>
31
+ struct field;
32
+
33
+ template<>
34
+ struct field<std::uint8_t>
35
+ {
36
+ static std::size_t constexpr size = 1;
37
+ static std::uint64_t constexpr max = 0xff;
38
+ };
39
+
40
+ template<>
41
+ struct field<std::uint16_t>
42
+ {
43
+ static std::size_t constexpr size = 2;
44
+ static std::uint64_t constexpr max = 0xffff;
45
+ };
46
+
47
+ template<>
48
+ struct field<uint24_t>
49
+ {
50
+ static std::size_t constexpr size = 3;
51
+ static std::uint64_t constexpr max = 0xffffff;
52
+ };
53
+
54
+ template<>
55
+ struct field<std::uint32_t>
56
+ {
57
+ static std::size_t constexpr size = 4;
58
+ static std::uint64_t constexpr max = 0xffffffff;
59
+ };
60
+
61
+ template<>
62
+ struct field<uint48_t>
63
+ {
64
+ static std::size_t constexpr size = 6;
65
+ static std::uint64_t constexpr max = 0x0000ffffffffffff;
66
+ };
67
+
68
+ template<>
69
+ struct field<std::uint64_t>
70
+ {
71
+ static std::size_t constexpr size = 8;
72
+ static std::uint64_t constexpr max = 0xffffffffffffffff;
73
+ };
74
+
75
+ // read field from memory
76
+
77
+ template<class T, class U, typename std::enable_if<
78
+ std::is_same<T, std::uint8_t>::value>::type* = nullptr>
79
+ void
80
+ readp(void const* v, U& u)
81
+ {
82
+ auto p = reinterpret_cast<std::uint8_t const*>(v);
83
+ u = *p;
84
+ }
85
+
86
+ template<class T, class U, typename std::enable_if<
87
+ std::is_same<T, std::uint16_t>::value>::type* = nullptr>
88
+ void
89
+ readp(void const* v, U& u)
90
+ {
91
+ auto p = reinterpret_cast<std::uint8_t const*>(v);
92
+ T t;
93
+ t = T(*p++)<< 8;
94
+ t = T(*p ) | t;
95
+ u = t;
96
+ }
97
+
98
+ template<class T, class U, typename std::enable_if<
99
+ std::is_same<T, uint24_t>::value>::type* = nullptr>
100
+ void
101
+ readp(void const* v, U& u)
102
+ {
103
+ auto p = reinterpret_cast<std::uint8_t const*>(v);
104
+ std::uint32_t t;
105
+ t = std::uint32_t(*p++)<<16;
106
+ t = (std::uint32_t(*p++)<< 8) | t;
107
+ t = std::uint32_t(*p ) | t;
108
+ u = t;
109
+ }
110
+
111
+ template<class T, class U, typename std::enable_if<
112
+ std::is_same<T, std::uint32_t>::value>::type* = nullptr>
113
+ void
114
+ readp(void const* v, U& u)
115
+ {
116
+ auto const* p = reinterpret_cast<std::uint8_t const*>(v);
117
+ T t;
118
+ t = T(*p++)<<24;
119
+ t = (T(*p++)<<16) | t;
120
+ t = (T(*p++)<< 8) | t;
121
+ t = T(*p ) | t;
122
+ u = t;
123
+ }
124
+
125
+ template<class T, class U, typename std::enable_if<
126
+ std::is_same<T, uint48_t>::value>::type* = nullptr>
127
+ void
128
+ readp(void const* v, U& u)
129
+ {
130
+ auto p = reinterpret_cast<std::uint8_t const*>(v);
131
+ std::uint64_t t;
132
+ t = (std::uint64_t(*p++)<<40);
133
+ t = (std::uint64_t(*p++)<<32) | t;
134
+ t = (std::uint64_t(*p++)<<24) | t;
135
+ t = (std::uint64_t(*p++)<<16) | t;
136
+ t = (std::uint64_t(*p++)<< 8) | t;
137
+ t = std::uint64_t(*p ) | t;
138
+ u = t;
139
+ }
140
+
141
+ template<class T, class U, typename std::enable_if<
142
+ std::is_same<T, std::uint64_t>::value>::type* = nullptr>
143
+ void
144
+ readp(void const* v, U& u)
145
+ {
146
+ auto p = reinterpret_cast<std::uint8_t const*>(v);
147
+ T t;
148
+ t = T(*p++)<<56;
149
+ t = (T(*p++)<<48) | t;
150
+ t = (T(*p++)<<40) | t;
151
+ t = (T(*p++)<<32) | t;
152
+ t = (T(*p++)<<24) | t;
153
+ t = (T(*p++)<<16) | t;
154
+ t = (T(*p++)<< 8) | t;
155
+ t = T(*p ) | t;
156
+ u = t;
157
+ }
158
+
159
+ // read field from istream
160
+
161
+ template<class T, class U>
162
+ void
163
+ read(istream& is, U& u)
164
+ {
165
+ readp<T>(is.data(field<T>::size), u);
166
+ }
167
+
168
+ inline
169
+ void
170
+ read_size48(istream& is, std::size_t& u)
171
+ {
172
+ std::uint64_t v;
173
+ read<uint48_t>(is, v);
174
+ BOOST_ASSERT(v <= std::numeric_limits<std::uint32_t>::max());
175
+ u = static_cast<std::uint32_t>(v);
176
+ }
177
+
178
+ // write field to ostream
179
+
180
+ template<class T, class U, typename std::enable_if<
181
+ std::is_same<T, std::uint8_t>::value>::type* = nullptr>
182
+ void
183
+ write(ostream& os, U u)
184
+ {
185
+ BOOST_ASSERT(u <= field<T>::max);
186
+ std::uint8_t* p = os.data(field<T>::size);
187
+ *p = static_cast<std::uint8_t>(u);
188
+ }
189
+
190
+ template<class T, class U, typename std::enable_if<
191
+ std::is_same<T, std::uint16_t>::value>::type* = nullptr>
192
+ void
193
+ write(ostream& os, U u)
194
+ {
195
+ BOOST_ASSERT(u <= field<T>::max);
196
+ auto const t = static_cast<T>(u);
197
+ std::uint8_t* p = os.data(field<T>::size);
198
+ *p++ = (t>> 8)&0xff;
199
+ *p = t &0xff;
200
+ }
201
+
202
+ template<class T, class U, typename std::enable_if<
203
+ std::is_same<T, uint24_t>::value>::type* = nullptr>
204
+ void
205
+ write(ostream& os, U u)
206
+ {
207
+ BOOST_ASSERT(u <= field<T>::max);
208
+ auto const t = static_cast<std::uint32_t>(u);
209
+ std::uint8_t* p = os.data(field<T>::size);
210
+ *p++ = (t>>16)&0xff;
211
+ *p++ = (t>> 8)&0xff;
212
+ *p = t &0xff;
213
+ }
214
+
215
+ template<class T, class U, typename std::enable_if<
216
+ std::is_same<T, std::uint32_t>::value>::type* = nullptr>
217
+ void
218
+ write(ostream& os, U u)
219
+ {
220
+ BOOST_ASSERT(u <= field<T>::max);
221
+ auto const t = static_cast<T>(u);
222
+ std::uint8_t* p = os.data(field<T>::size);
223
+ *p++ = (t>>24)&0xff;
224
+ *p++ = (t>>16)&0xff;
225
+ *p++ = (t>> 8)&0xff;
226
+ *p = t &0xff;
227
+ }
228
+
229
+ template<class T, class U, typename std::enable_if<
230
+ std::is_same<T, uint48_t>::value>::type* = nullptr>
231
+ void
232
+ write(ostream& os, U u)
233
+ {
234
+ BOOST_ASSERT(u <= field<T>::max);
235
+ auto const t = static_cast<std::uint64_t>(u);
236
+ std::uint8_t* p = os.data(field<T>::size);
237
+ *p++ = (t>>40)&0xff;
238
+ *p++ = (t>>32)&0xff;
239
+ *p++ = (t>>24)&0xff;
240
+ *p++ = (t>>16)&0xff;
241
+ *p++ = (t>> 8)&0xff;
242
+ *p = t &0xff;
243
+ }
244
+
245
+ template<class T, class U, typename std::enable_if<
246
+ std::is_same<T, std::uint64_t>::value>::type* = nullptr>
247
+ void
248
+ write(ostream& os, U u)
249
+ {
250
+ auto const t = static_cast<T>(u);
251
+ std::uint8_t* p = os.data(field<T>::size);
252
+ *p++ = (t>>56)&0xff;
253
+ *p++ = (t>>48)&0xff;
254
+ *p++ = (t>>40)&0xff;
255
+ *p++ = (t>>32)&0xff;
256
+ *p++ = (t>>24)&0xff;
257
+ *p++ = (t>>16)&0xff;
258
+ *p++ = (t>> 8)&0xff;
259
+ *p = t &0xff;
260
+ }
261
+
262
+ } // detail
263
+ } // nudb
264
+
265
+ #endif