Skip to content

Commit f63ca25

Browse files
authored
Merge pull request #531 from evoskuil/master
Update storage interface, impl, test to support dynamic head.
2 parents 04472ed + c322741 commit f63ca25

File tree

34 files changed

+2466
-88
lines changed

34 files changed

+2466
-88
lines changed

Makefile.am

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,9 @@ test_libbitcoin_database_test_SOURCES = \
7878
test/mocks/map_store.hpp \
7979
test/primitives/arraymap.cpp \
8080
test/primitives/hashmap.cpp \
81+
test/primitives/hashmap2.cpp \
8182
test/primitives/head.cpp \
83+
test/primitives/head2.cpp \
8284
test/primitives/iterator.cpp \
8385
test/primitives/linkage.cpp \
8486
test/primitives/manager.cpp \
@@ -95,17 +97,17 @@ test_libbitcoin_database_test_SOURCES = \
9597
test/tables/archives/output.cpp \
9698
test/tables/archives/point.cpp \
9799
test/tables/archives/puts.cpp \
100+
test/tables/archives/spend.cpp \
98101
test/tables/archives/transaction.cpp \
99102
test/tables/archives/txs.cpp \
100-
test/tables/caches/bootstrap.cpp \
101-
test/tables/caches/buffer.cpp \
102-
test/tables/caches/neutrino.cpp \
103+
test/tables/caches/prevouts.cpp \
103104
test/tables/caches/validated_bk.cpp \
104105
test/tables/caches/validated_tx.cpp \
105-
test/tables/indexes/address.cpp \
106106
test/tables/indexes/height.cpp \
107-
test/tables/indexes/spend.cpp \
108-
test/tables/indexes/strong_tx.cpp
107+
test/tables/indexes/strong_tx.cpp \
108+
test/tables/optional/address.cpp \
109+
test/tables/optional/bootstrap.cpp \
110+
test/tables/optional/neutrino.cpp
109111

110112
endif WITH_TESTS
111113

@@ -159,7 +161,9 @@ include_bitcoin_database_impl_primitivesdir = ${includedir}/bitcoin/database/imp
159161
include_bitcoin_database_impl_primitives_HEADERS = \
160162
include/bitcoin/database/impl/primitives/arraymap.ipp \
161163
include/bitcoin/database/impl/primitives/hashmap.ipp \
164+
include/bitcoin/database/impl/primitives/hashmap2.ipp \
162165
include/bitcoin/database/impl/primitives/head.ipp \
166+
include/bitcoin/database/impl/primitives/head2.ipp \
163167
include/bitcoin/database/impl/primitives/iterator.ipp \
164168
include/bitcoin/database/impl/primitives/linkage.ipp \
165169
include/bitcoin/database/impl/primitives/manager.ipp
@@ -204,7 +208,9 @@ include_bitcoin_database_primitivesdir = ${includedir}/bitcoin/database/primitiv
204208
include_bitcoin_database_primitives_HEADERS = \
205209
include/bitcoin/database/primitives/arraymap.hpp \
206210
include/bitcoin/database/primitives/hashmap.hpp \
211+
include/bitcoin/database/primitives/hashmap2.hpp \
207212
include/bitcoin/database/primitives/head.hpp \
213+
include/bitcoin/database/primitives/head2.hpp \
208214
include/bitcoin/database/primitives/iterator.hpp \
209215
include/bitcoin/database/primitives/linkage.hpp \
210216
include/bitcoin/database/primitives/manager.hpp \
@@ -231,6 +237,7 @@ include_bitcoin_database_tables_archives_HEADERS = \
231237

232238
include_bitcoin_database_tables_cachesdir = ${includedir}/bitcoin/database/tables/caches
233239
include_bitcoin_database_tables_caches_HEADERS = \
240+
include/bitcoin/database/tables/caches/prevouts.hpp \
234241
include/bitcoin/database/tables/caches/validated_bk.hpp \
235242
include/bitcoin/database/tables/caches/validated_tx.hpp
236243

@@ -243,7 +250,6 @@ include_bitcoin_database_tables_optionalsdir = ${includedir}/bitcoin/database/ta
243250
include_bitcoin_database_tables_optionals_HEADERS = \
244251
include/bitcoin/database/tables/optionals/address.hpp \
245252
include/bitcoin/database/tables/optionals/bootstrap.hpp \
246-
include/bitcoin/database/tables/optionals/buffer.hpp \
247253
include/bitcoin/database/tables/optionals/neutrino.hpp
248254

249255

builds/cmake/CMakeLists.txt

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,9 @@ if (with-tests)
286286
"../../test/mocks/map_store.hpp"
287287
"../../test/primitives/arraymap.cpp"
288288
"../../test/primitives/hashmap.cpp"
289+
"../../test/primitives/hashmap2.cpp"
289290
"../../test/primitives/head.cpp"
291+
"../../test/primitives/head2.cpp"
290292
"../../test/primitives/iterator.cpp"
291293
"../../test/primitives/linkage.cpp"
292294
"../../test/primitives/manager.cpp"
@@ -303,17 +305,17 @@ if (with-tests)
303305
"../../test/tables/archives/output.cpp"
304306
"../../test/tables/archives/point.cpp"
305307
"../../test/tables/archives/puts.cpp"
308+
"../../test/tables/archives/spend.cpp"
306309
"../../test/tables/archives/transaction.cpp"
307310
"../../test/tables/archives/txs.cpp"
308-
"../../test/tables/caches/bootstrap.cpp"
309-
"../../test/tables/caches/buffer.cpp"
310-
"../../test/tables/caches/neutrino.cpp"
311+
"../../test/tables/caches/prevouts.cpp"
311312
"../../test/tables/caches/validated_bk.cpp"
312313
"../../test/tables/caches/validated_tx.cpp"
313-
"../../test/tables/indexes/address.cpp"
314314
"../../test/tables/indexes/height.cpp"
315-
"../../test/tables/indexes/spend.cpp"
316-
"../../test/tables/indexes/strong_tx.cpp" )
315+
"../../test/tables/indexes/strong_tx.cpp"
316+
"../../test/tables/optional/address.cpp"
317+
"../../test/tables/optional/bootstrap.cpp"
318+
"../../test/tables/optional/neutrino.cpp" )
317319

318320
add_test( NAME libbitcoin-database-test COMMAND libbitcoin-database-test
319321
--run_test=*

builds/msvc/vs2022/libbitcoin-database-test/libbitcoin-database-test.vcxproj

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,9 @@
8787
<ClCompile Include="..\..\..\..\test\mocks\chunk_storage.cpp" />
8888
<ClCompile Include="..\..\..\..\test\primitives\arraymap.cpp" />
8989
<ClCompile Include="..\..\..\..\test\primitives\hashmap.cpp" />
90+
<ClCompile Include="..\..\..\..\test\primitives\hashmap2.cpp" />
9091
<ClCompile Include="..\..\..\..\test\primitives\head.cpp" />
92+
<ClCompile Include="..\..\..\..\test\primitives\head2.cpp" />
9193
<ClCompile Include="..\..\..\..\test\primitives\iterator.cpp" />
9294
<ClCompile Include="..\..\..\..\test\primitives\linkage.cpp" />
9395
<ClCompile Include="..\..\..\..\test\primitives\manager.cpp" />
@@ -106,17 +108,17 @@
106108
<ClCompile Include="..\..\..\..\test\tables\archives\output.cpp" />
107109
<ClCompile Include="..\..\..\..\test\tables\archives\point.cpp" />
108110
<ClCompile Include="..\..\..\..\test\tables\archives\puts.cpp" />
111+
<ClCompile Include="..\..\..\..\test\tables\archives\spend.cpp" />
109112
<ClCompile Include="..\..\..\..\test\tables\archives\transaction.cpp" />
110113
<ClCompile Include="..\..\..\..\test\tables\archives\txs.cpp" />
111-
<ClCompile Include="..\..\..\..\test\tables\caches\bootstrap.cpp" />
112-
<ClCompile Include="..\..\..\..\test\tables\caches\buffer.cpp" />
113-
<ClCompile Include="..\..\..\..\test\tables\caches\neutrino.cpp" />
114+
<ClCompile Include="..\..\..\..\test\tables\caches\prevouts.cpp" />
114115
<ClCompile Include="..\..\..\..\test\tables\caches\validated_bk.cpp" />
115116
<ClCompile Include="..\..\..\..\test\tables\caches\validated_tx.cpp" />
116-
<ClCompile Include="..\..\..\..\test\tables\indexes\address.cpp" />
117117
<ClCompile Include="..\..\..\..\test\tables\indexes\height.cpp" />
118-
<ClCompile Include="..\..\..\..\test\tables\indexes\spend.cpp" />
119118
<ClCompile Include="..\..\..\..\test\tables\indexes\strong_tx.cpp" />
119+
<ClCompile Include="..\..\..\..\test\tables\optional\address.cpp" />
120+
<ClCompile Include="..\..\..\..\test\tables\optional\bootstrap.cpp" />
121+
<ClCompile Include="..\..\..\..\test\tables\optional\neutrino.cpp" />
120122
<ClCompile Include="..\..\..\..\test\test.cpp" />
121123
</ItemGroup>
122124
<ItemGroup>

builds/msvc/vs2022/libbitcoin-database-test/libbitcoin-database-test.vcxproj.filters

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@
4040
<Filter Include="src\tables\indexes">
4141
<UniqueIdentifier>{5C4DA53A-8C06-4DA6-0000-00000000000A}</UniqueIdentifier>
4242
</Filter>
43+
<Filter Include="src\tables\optional">
44+
<UniqueIdentifier>{5C4DA53A-8C06-4DA6-0000-00000000000B}</UniqueIdentifier>
45+
</Filter>
4346
</ItemGroup>
4447
<ItemGroup>
4548
<ClCompile Include="..\..\..\..\test\error.cpp">
@@ -81,9 +84,15 @@
8184
<ClCompile Include="..\..\..\..\test\primitives\hashmap.cpp">
8285
<Filter>src\primitives</Filter>
8386
</ClCompile>
87+
<ClCompile Include="..\..\..\..\test\primitives\hashmap2.cpp">
88+
<Filter>src\primitives</Filter>
89+
</ClCompile>
8490
<ClCompile Include="..\..\..\..\test\primitives\head.cpp">
8591
<Filter>src\primitives</Filter>
8692
</ClCompile>
93+
<ClCompile Include="..\..\..\..\test\primitives\head2.cpp">
94+
<Filter>src\primitives</Filter>
95+
</ClCompile>
8796
<ClCompile Include="..\..\..\..\test\primitives\iterator.cpp">
8897
<Filter>src\primitives</Filter>
8998
</ClCompile>
@@ -138,19 +147,16 @@
138147
<ClCompile Include="..\..\..\..\test\tables\archives\puts.cpp">
139148
<Filter>src\tables\archives</Filter>
140149
</ClCompile>
150+
<ClCompile Include="..\..\..\..\test\tables\archives\spend.cpp">
151+
<Filter>src\tables\archives</Filter>
152+
</ClCompile>
141153
<ClCompile Include="..\..\..\..\test\tables\archives\transaction.cpp">
142154
<Filter>src\tables\archives</Filter>
143155
</ClCompile>
144156
<ClCompile Include="..\..\..\..\test\tables\archives\txs.cpp">
145157
<Filter>src\tables\archives</Filter>
146158
</ClCompile>
147-
<ClCompile Include="..\..\..\..\test\tables\caches\bootstrap.cpp">
148-
<Filter>src\tables\caches</Filter>
149-
</ClCompile>
150-
<ClCompile Include="..\..\..\..\test\tables\caches\buffer.cpp">
151-
<Filter>src\tables\caches</Filter>
152-
</ClCompile>
153-
<ClCompile Include="..\..\..\..\test\tables\caches\neutrino.cpp">
159+
<ClCompile Include="..\..\..\..\test\tables\caches\prevouts.cpp">
154160
<Filter>src\tables\caches</Filter>
155161
</ClCompile>
156162
<ClCompile Include="..\..\..\..\test\tables\caches\validated_bk.cpp">
@@ -159,18 +165,21 @@
159165
<ClCompile Include="..\..\..\..\test\tables\caches\validated_tx.cpp">
160166
<Filter>src\tables\caches</Filter>
161167
</ClCompile>
162-
<ClCompile Include="..\..\..\..\test\tables\indexes\address.cpp">
163-
<Filter>src\tables\indexes</Filter>
164-
</ClCompile>
165168
<ClCompile Include="..\..\..\..\test\tables\indexes\height.cpp">
166169
<Filter>src\tables\indexes</Filter>
167170
</ClCompile>
168-
<ClCompile Include="..\..\..\..\test\tables\indexes\spend.cpp">
169-
<Filter>src\tables\indexes</Filter>
170-
</ClCompile>
171171
<ClCompile Include="..\..\..\..\test\tables\indexes\strong_tx.cpp">
172172
<Filter>src\tables\indexes</Filter>
173173
</ClCompile>
174+
<ClCompile Include="..\..\..\..\test\tables\optional\address.cpp">
175+
<Filter>src\tables\optional</Filter>
176+
</ClCompile>
177+
<ClCompile Include="..\..\..\..\test\tables\optional\bootstrap.cpp">
178+
<Filter>src\tables\optional</Filter>
179+
</ClCompile>
180+
<ClCompile Include="..\..\..\..\test\tables\optional\neutrino.cpp">
181+
<Filter>src\tables\optional</Filter>
182+
</ClCompile>
174183
<ClCompile Include="..\..\..\..\test\test.cpp">
175184
<Filter>src</Filter>
176185
</ClCompile>

builds/msvc/vs2022/libbitcoin-database/libbitcoin-database.vcxproj

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,9 @@
115115
<ClInclude Include="..\..\..\..\include\bitcoin\database\memory\utilities.hpp" />
116116
<ClInclude Include="..\..\..\..\include\bitcoin\database\primitives\arraymap.hpp" />
117117
<ClInclude Include="..\..\..\..\include\bitcoin\database\primitives\hashmap.hpp" />
118+
<ClInclude Include="..\..\..\..\include\bitcoin\database\primitives\hashmap2.hpp" />
118119
<ClInclude Include="..\..\..\..\include\bitcoin\database\primitives\head.hpp" />
120+
<ClInclude Include="..\..\..\..\include\bitcoin\database\primitives\head2.hpp" />
119121
<ClInclude Include="..\..\..\..\include\bitcoin\database\primitives\iterator.hpp" />
120122
<ClInclude Include="..\..\..\..\include\bitcoin\database\primitives\linkage.hpp" />
121123
<ClInclude Include="..\..\..\..\include\bitcoin\database\primitives\manager.hpp" />
@@ -131,6 +133,7 @@
131133
<ClInclude Include="..\..\..\..\include\bitcoin\database\tables\archives\spend.hpp" />
132134
<ClInclude Include="..\..\..\..\include\bitcoin\database\tables\archives\transaction.hpp" />
133135
<ClInclude Include="..\..\..\..\include\bitcoin\database\tables\archives\txs.hpp" />
136+
<ClInclude Include="..\..\..\..\include\bitcoin\database\tables\caches\prevouts.hpp" />
134137
<ClInclude Include="..\..\..\..\include\bitcoin\database\tables\caches\validated_bk.hpp" />
135138
<ClInclude Include="..\..\..\..\include\bitcoin\database\tables\caches\validated_tx.hpp" />
136139
<ClInclude Include="..\..\..\..\include\bitcoin\database\tables\context.hpp" />
@@ -139,7 +142,6 @@
139142
<ClInclude Include="..\..\..\..\include\bitcoin\database\tables\indexes\strong_tx.hpp" />
140143
<ClInclude Include="..\..\..\..\include\bitcoin\database\tables\optionals\address.hpp" />
141144
<ClInclude Include="..\..\..\..\include\bitcoin\database\tables\optionals\bootstrap.hpp" />
142-
<ClInclude Include="..\..\..\..\include\bitcoin\database\tables\optionals\buffer.hpp" />
143145
<ClInclude Include="..\..\..\..\include\bitcoin\database\tables\optionals\neutrino.hpp" />
144146
<ClInclude Include="..\..\..\..\include\bitcoin\database\tables\schema.hpp" />
145147
<ClInclude Include="..\..\..\..\include\bitcoin\database\tables\table.hpp" />
@@ -153,7 +155,9 @@
153155
<None Include="..\..\..\..\include\bitcoin\database\impl\memory\simple_writer.ipp" />
154156
<None Include="..\..\..\..\include\bitcoin\database\impl\primitives\arraymap.ipp" />
155157
<None Include="..\..\..\..\include\bitcoin\database\impl\primitives\hashmap.ipp" />
158+
<None Include="..\..\..\..\include\bitcoin\database\impl\primitives\hashmap2.ipp" />
156159
<None Include="..\..\..\..\include\bitcoin\database\impl\primitives\head.ipp" />
160+
<None Include="..\..\..\..\include\bitcoin\database\impl\primitives\head2.ipp" />
157161
<None Include="..\..\..\..\include\bitcoin\database\impl\primitives\iterator.ipp" />
158162
<None Include="..\..\..\..\include\bitcoin\database\impl\primitives\linkage.ipp" />
159163
<None Include="..\..\..\..\include\bitcoin\database\impl\primitives\manager.ipp" />

builds/msvc/vs2022/libbitcoin-database/libbitcoin-database.vcxproj.filters

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -188,9 +188,15 @@
188188
<ClInclude Include="..\..\..\..\include\bitcoin\database\primitives\hashmap.hpp">
189189
<Filter>include\bitcoin\database\primitives</Filter>
190190
</ClInclude>
191+
<ClInclude Include="..\..\..\..\include\bitcoin\database\primitives\hashmap2.hpp">
192+
<Filter>include\bitcoin\database\primitives</Filter>
193+
</ClInclude>
191194
<ClInclude Include="..\..\..\..\include\bitcoin\database\primitives\head.hpp">
192195
<Filter>include\bitcoin\database\primitives</Filter>
193196
</ClInclude>
197+
<ClInclude Include="..\..\..\..\include\bitcoin\database\primitives\head2.hpp">
198+
<Filter>include\bitcoin\database\primitives</Filter>
199+
</ClInclude>
194200
<ClInclude Include="..\..\..\..\include\bitcoin\database\primitives\iterator.hpp">
195201
<Filter>include\bitcoin\database\primitives</Filter>
196202
</ClInclude>
@@ -236,6 +242,9 @@
236242
<ClInclude Include="..\..\..\..\include\bitcoin\database\tables\archives\txs.hpp">
237243
<Filter>include\bitcoin\database\tables\archives</Filter>
238244
</ClInclude>
245+
<ClInclude Include="..\..\..\..\include\bitcoin\database\tables\caches\prevouts.hpp">
246+
<Filter>include\bitcoin\database\tables\caches</Filter>
247+
</ClInclude>
239248
<ClInclude Include="..\..\..\..\include\bitcoin\database\tables\caches\validated_bk.hpp">
240249
<Filter>include\bitcoin\database\tables\caches</Filter>
241250
</ClInclude>
@@ -260,9 +269,6 @@
260269
<ClInclude Include="..\..\..\..\include\bitcoin\database\tables\optionals\bootstrap.hpp">
261270
<Filter>include\bitcoin\database\tables\optionals</Filter>
262271
</ClInclude>
263-
<ClInclude Include="..\..\..\..\include\bitcoin\database\tables\optionals\buffer.hpp">
264-
<Filter>include\bitcoin\database\tables\optionals</Filter>
265-
</ClInclude>
266272
<ClInclude Include="..\..\..\..\include\bitcoin\database\tables\optionals\neutrino.hpp">
267273
<Filter>include\bitcoin\database\tables\optionals</Filter>
268274
</ClInclude>
@@ -298,9 +304,15 @@
298304
<None Include="..\..\..\..\include\bitcoin\database\impl\primitives\hashmap.ipp">
299305
<Filter>include\bitcoin\database\impl\primitives</Filter>
300306
</None>
307+
<None Include="..\..\..\..\include\bitcoin\database\impl\primitives\hashmap2.ipp">
308+
<Filter>include\bitcoin\database\impl\primitives</Filter>
309+
</None>
301310
<None Include="..\..\..\..\include\bitcoin\database\impl\primitives\head.ipp">
302311
<Filter>include\bitcoin\database\impl\primitives</Filter>
303312
</None>
313+
<None Include="..\..\..\..\include\bitcoin\database\impl\primitives\head2.ipp">
314+
<Filter>include\bitcoin\database\impl\primitives</Filter>
315+
</None>
304316
<None Include="..\..\..\..\include\bitcoin\database\impl\primitives\iterator.ipp">
305317
<Filter>include\bitcoin\database\impl\primitives</Filter>
306318
</None>

include/bitcoin/database.hpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,9 @@
4444
#include <bitcoin/database/memory/interfaces/storage.hpp>
4545
#include <bitcoin/database/primitives/arraymap.hpp>
4646
#include <bitcoin/database/primitives/hashmap.hpp>
47+
#include <bitcoin/database/primitives/hashmap2.hpp>
4748
#include <bitcoin/database/primitives/head.hpp>
49+
#include <bitcoin/database/primitives/head2.hpp>
4850
#include <bitcoin/database/primitives/iterator.hpp>
4951
#include <bitcoin/database/primitives/linkage.hpp>
5052
#include <bitcoin/database/primitives/manager.hpp>
@@ -62,13 +64,13 @@
6264
#include <bitcoin/database/tables/archives/spend.hpp>
6365
#include <bitcoin/database/tables/archives/transaction.hpp>
6466
#include <bitcoin/database/tables/archives/txs.hpp>
67+
#include <bitcoin/database/tables/caches/prevouts.hpp>
6568
#include <bitcoin/database/tables/caches/validated_bk.hpp>
6669
#include <bitcoin/database/tables/caches/validated_tx.hpp>
6770
#include <bitcoin/database/tables/indexes/height.hpp>
6871
#include <bitcoin/database/tables/indexes/strong_tx.hpp>
6972
#include <bitcoin/database/tables/optionals/address.hpp>
7073
#include <bitcoin/database/tables/optionals/bootstrap.hpp>
71-
#include <bitcoin/database/tables/optionals/buffer.hpp>
7274
#include <bitcoin/database/tables/optionals/neutrino.hpp>
7375

7476
#endif

include/bitcoin/database/impl/primitives/hashmap.ipp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ typename CLASS::iterator CLASS::it(const Key& key) const NOEXCEPT
155155
{
156156
return { get_memory(), head_.top(key), key };
157157
}
158+
158159
TEMPLATE
159160
Link CLASS::allocate(const Link& size) NOEXCEPT
160161
{
@@ -307,7 +308,6 @@ bool CLASS::put(const Link& link, const Key& key,
307308
const Element& element) NOEXCEPT
308309
{
309310
using namespace system;
310-
const auto count = element.count();
311311
const auto ptr = manager_.get(link);
312312
if (!ptr)
313313
return false;
@@ -318,7 +318,11 @@ bool CLASS::put(const Link& link, const Key& key,
318318
sink.skip_bytes(Link::size);
319319
sink.write_bytes(key);
320320

321-
if constexpr (!is_slab) { BC_DEBUG_ONLY(sink.set_limit(Size * count);) }
321+
if constexpr (!is_slab)
322+
{
323+
BC_DEBUG_ONLY(sink.set_limit(Size * element.count());)
324+
}
325+
322326
auto& next = unsafe_array_cast<uint8_t, Link::size>(ptr->begin());
323327
return element.to_data(sink) && head_.push(link, next, head_.index(key));
324328
}

0 commit comments

Comments
 (0)