@nxtedition/rocksdb 8.2.8 → 9.0.0
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.
- package/deps/rocksdb/rocksdb/CMakeLists.txt +7 -1
- package/deps/rocksdb/rocksdb/Makefile +22 -19
- package/deps/rocksdb/rocksdb/TARGETS +8 -0
- package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +157 -61
- package/deps/rocksdb/rocksdb/cache/cache_test.cc +43 -92
- package/deps/rocksdb/rocksdb/cache/clock_cache.cc +632 -455
- package/deps/rocksdb/rocksdb/cache/clock_cache.h +244 -149
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +41 -13
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +11 -1
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +216 -17
- package/deps/rocksdb/rocksdb/cache/lru_cache.cc +7 -5
- package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +279 -199
- package/deps/rocksdb/rocksdb/cache/secondary_cache.cc +2 -1
- package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +159 -8
- package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.h +28 -2
- package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +1 -1
- package/deps/rocksdb/rocksdb/cache/sharded_cache.h +8 -0
- package/deps/rocksdb/rocksdb/crash_test.mk +14 -0
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +3 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +1 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +2 -2
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +1 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +18 -21
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +1 -2
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +2 -3
- package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/builder.cc +32 -7
- package/deps/rocksdb/rocksdb/db/c.cc +169 -6
- package/deps/rocksdb/rocksdb/db/c_test.c +104 -6
- package/deps/rocksdb/rocksdb/db/column_family.cc +98 -47
- package/deps/rocksdb/rocksdb/db/column_family.h +25 -2
- package/deps/rocksdb/rocksdb/db/column_family_test.cc +213 -2
- package/deps/rocksdb/rocksdb/db/compact_files_test.cc +4 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +93 -23
- package/deps/rocksdb/rocksdb/db/compaction/compaction.h +33 -9
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +7 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +17 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +107 -43
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +15 -4
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +4 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +25 -17
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +13 -4
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +11 -11
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +29 -4
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +24 -31
- package/deps/rocksdb/rocksdb/db/compaction/file_pri.h +3 -1
- package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +19 -19
- package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +2 -1
- package/deps/rocksdb/rocksdb/db/convenience.cc +20 -3
- package/deps/rocksdb/rocksdb/db/convenience_impl.h +15 -0
- package/deps/rocksdb/rocksdb/db/corruption_test.cc +17 -0
- package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_basic_test.cc +17 -3
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +5 -0
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +15 -15
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +666 -44
- package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +2 -29
- package/deps/rocksdb/rocksdb/db/db_flush_test.cc +274 -1
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +40 -19
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +6 -5
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +250 -116
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +51 -23
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +354 -96
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +6 -3
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +2 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +5 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +50 -21
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +26 -13
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +13 -5
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +61 -21
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +8 -87
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +7 -1
- package/deps/rocksdb/rocksdb/db/db_iter.cc +2 -2
- package/deps/rocksdb/rocksdb/db/db_iter.h +1 -0
- package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +4 -11
- package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +6 -6
- package/deps/rocksdb/rocksdb/db/db_options_test.cc +39 -29
- package/deps/rocksdb/rocksdb/db/db_properties_test.cc +26 -36
- package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +106 -0
- package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +12 -3
- package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +279 -166
- package/deps/rocksdb/rocksdb/db/db_test.cc +48 -21
- package/deps/rocksdb/rocksdb/db/db_test2.cc +81 -12
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +14 -6
- package/deps/rocksdb/rocksdb/db/db_test_util.h +40 -0
- package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +13 -1
- package/deps/rocksdb/rocksdb/db/db_wal_test.cc +233 -0
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +143 -0
- package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +6 -6
- package/deps/rocksdb/rocksdb/db/db_write_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/dbformat.cc +36 -0
- package/deps/rocksdb/rocksdb/db/dbformat.h +169 -20
- package/deps/rocksdb/rocksdb/db/dbformat_test.cc +129 -0
- package/deps/rocksdb/rocksdb/db/error_handler.cc +16 -0
- package/deps/rocksdb/rocksdb/db/error_handler.h +6 -3
- package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/event_helpers.cc +4 -0
- package/deps/rocksdb/rocksdb/db/experimental.cc +2 -1
- package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +17 -8
- package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +86 -4
- package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/file_indexer.cc +2 -4
- package/deps/rocksdb/rocksdb/db/flush_job.cc +101 -11
- package/deps/rocksdb/rocksdb/db/flush_job.h +24 -1
- package/deps/rocksdb/rocksdb/db/flush_job_test.cc +88 -11
- package/deps/rocksdb/rocksdb/db/forward_iterator.cc +2 -3
- package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +159 -91
- package/deps/rocksdb/rocksdb/db/import_column_family_job.h +19 -10
- package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +143 -0
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +13 -1
- package/deps/rocksdb/rocksdb/db/internal_stats.h +2 -0
- package/deps/rocksdb/rocksdb/db/listener_test.cc +2 -1
- package/deps/rocksdb/rocksdb/db/log_reader.h +3 -2
- package/deps/rocksdb/rocksdb/db/log_test.cc +17 -21
- package/deps/rocksdb/rocksdb/db/log_writer.cc +1 -1
- package/deps/rocksdb/rocksdb/db/log_writer.h +3 -2
- package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +4 -3
- package/deps/rocksdb/rocksdb/db/memtable.cc +52 -13
- package/deps/rocksdb/rocksdb/db/memtable.h +45 -1
- package/deps/rocksdb/rocksdb/db/memtable_list.cc +44 -10
- package/deps/rocksdb/rocksdb/db/memtable_list.h +32 -1
- package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +90 -4
- package/deps/rocksdb/rocksdb/db/perf_context_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/repair.cc +21 -4
- package/deps/rocksdb/rocksdb/db/repair_test.cc +143 -2
- package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +5 -4
- package/deps/rocksdb/rocksdb/db/table_cache.cc +44 -35
- package/deps/rocksdb/rocksdb/db/table_cache.h +6 -6
- package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +2 -2
- package/deps/rocksdb/rocksdb/db/version_builder.cc +0 -1
- package/deps/rocksdb/rocksdb/db/version_builder_test.cc +236 -204
- package/deps/rocksdb/rocksdb/db/version_edit.cc +66 -4
- package/deps/rocksdb/rocksdb/db/version_edit.h +48 -6
- package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +80 -8
- package/deps/rocksdb/rocksdb/db/version_edit_handler.h +12 -0
- package/deps/rocksdb/rocksdb/db/version_edit_test.cc +86 -17
- package/deps/rocksdb/rocksdb/db/version_set.cc +136 -41
- package/deps/rocksdb/rocksdb/db/version_set.h +28 -7
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +25 -15
- package/deps/rocksdb/rocksdb/db/write_batch.cc +11 -0
- package/deps/rocksdb/rocksdb/db/write_batch_internal.h +3 -0
- package/deps/rocksdb/rocksdb/db/write_batch_test.cc +16 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +22 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +2 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +42 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +32 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +7 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +247 -120
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +9 -4
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +13 -6
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.h +2 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +15 -27
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +264 -69
- package/deps/rocksdb/rocksdb/env/env.cc +1 -2
- package/deps/rocksdb/rocksdb/env/env_encryption.cc +11 -165
- package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +0 -17
- package/deps/rocksdb/rocksdb/env/env_posix.cc +6 -2
- package/deps/rocksdb/rocksdb/env/env_test.cc +86 -2
- package/deps/rocksdb/rocksdb/env/fs_posix.cc +6 -4
- package/deps/rocksdb/rocksdb/env/unique_id_gen.cc +78 -0
- package/deps/rocksdb/rocksdb/env/unique_id_gen.h +34 -0
- package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +1 -0
- package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +15 -4
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +52 -43
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +34 -18
- package/deps/rocksdb/rocksdb/file/file_util.cc +10 -5
- package/deps/rocksdb/rocksdb/file/file_util.h +13 -1
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +724 -79
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +64 -33
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +3 -16
- package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +23 -12
- package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +3 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +2 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +153 -88
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +70 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +50 -11
- package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +3 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +16 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +55 -8
- package/deps/rocksdb/rocksdb/include/rocksdb/env.h +32 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +9 -109
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +90 -13
- package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +3 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +85 -17
- package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +13 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_manager.h +2 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +5 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +21 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/table.h +7 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +6 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +5 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/optimistic_transaction_db.h +33 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +14 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +33 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +0 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +3 -0
- package/deps/rocksdb/rocksdb/memory/arena_test.cc +18 -11
- package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +2 -1
- package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +69 -34
- package/deps/rocksdb/rocksdb/monitoring/statistics.cc +16 -1
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +10 -0
- package/deps/rocksdb/rocksdb/options/cf_options.cc +19 -0
- package/deps/rocksdb/rocksdb/options/cf_options.h +10 -2
- package/deps/rocksdb/rocksdb/options/customizable_test.cc +2 -1
- package/deps/rocksdb/rocksdb/options/db_options.cc +7 -0
- package/deps/rocksdb/rocksdb/options/db_options.h +1 -0
- package/deps/rocksdb/rocksdb/options/options.cc +15 -1
- package/deps/rocksdb/rocksdb/options/options_helper.cc +6 -0
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +11 -3
- package/deps/rocksdb/rocksdb/options/options_test.cc +8 -0
- package/deps/rocksdb/rocksdb/port/mmap.h +20 -0
- package/deps/rocksdb/rocksdb/port/stack_trace.cc +27 -12
- package/deps/rocksdb/rocksdb/port/win/env_win.h +1 -1
- package/deps/rocksdb/rocksdb/src.mk +3 -0
- package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/block.cc +48 -22
- package/deps/rocksdb/rocksdb/table/block_based/block.h +60 -12
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +115 -42
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +6 -5
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +60 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +2 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +62 -44
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +36 -14
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +38 -15
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +219 -51
- package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +41 -8
- package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +25 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +50 -21
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +11 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +195 -55
- package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +31 -16
- package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +97 -58
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +6 -0
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +27 -12
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +3 -1
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +114 -70
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +1 -2
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +9 -6
- package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +15 -3
- package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +6 -3
- package/deps/rocksdb/rocksdb/table/block_fetcher.cc +11 -11
- package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +3 -0
- package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.cc +1 -0
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +6 -2
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +1 -2
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +2 -3
- package/deps/rocksdb/rocksdb/table/format.cc +175 -33
- package/deps/rocksdb/rocksdb/table/format.h +63 -10
- package/deps/rocksdb/rocksdb/table/merging_iterator.cc +10 -2
- package/deps/rocksdb/rocksdb/table/meta_blocks.cc +12 -4
- package/deps/rocksdb/rocksdb/table/meta_blocks.h +1 -0
- package/deps/rocksdb/rocksdb/table/mock_table.cc +8 -3
- package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +10 -5
- package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +10 -1
- package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +1 -2
- package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +3 -3
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +12 -3
- package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +26 -1
- package/deps/rocksdb/rocksdb/table/table_builder.h +6 -2
- package/deps/rocksdb/rocksdb/table/table_properties.cc +6 -0
- package/deps/rocksdb/rocksdb/table/table_test.cc +52 -22
- package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.h +19 -7
- package/deps/rocksdb/rocksdb/test_util/sync_point.h +3 -1
- package/deps/rocksdb/rocksdb/test_util/testutil.cc +29 -0
- package/deps/rocksdb/rocksdb/test_util/testutil.h +19 -0
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +65 -26
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +8 -5
- package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +1 -0
- package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +1 -0
- package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +0 -1
- package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +4 -0
- package/deps/rocksdb/rocksdb/unreleased_history/README.txt +73 -0
- package/deps/rocksdb/rocksdb/unreleased_history/add.sh +27 -0
- package/deps/rocksdb/rocksdb/unreleased_history/behavior_changes/.gitkeep +0 -0
- package/deps/rocksdb/rocksdb/unreleased_history/bug_fixes/.gitkeep +0 -0
- package/deps/rocksdb/rocksdb/unreleased_history/new_features/.gitkeep +0 -0
- package/deps/rocksdb/rocksdb/unreleased_history/performance_improvements/.gitkeep +0 -0
- package/deps/rocksdb/rocksdb/unreleased_history/public_api_changes/.gitkeep +0 -0
- package/deps/rocksdb/rocksdb/unreleased_history/release.sh +104 -0
- package/deps/rocksdb/rocksdb/util/async_file_reader.cc +5 -0
- package/deps/rocksdb/rocksdb/util/bloom_impl.h +3 -3
- package/deps/rocksdb/rocksdb/util/cast_util.h +14 -0
- package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +2 -0
- package/deps/rocksdb/rocksdb/util/comparator.cc +29 -7
- package/deps/rocksdb/rocksdb/util/compression.cc +4 -4
- package/deps/rocksdb/rocksdb/util/compression.h +110 -32
- package/deps/rocksdb/rocksdb/util/core_local.h +2 -1
- package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +4 -4
- package/deps/rocksdb/rocksdb/util/filelock_test.cc +3 -0
- package/deps/rocksdb/rocksdb/util/hash.h +7 -3
- package/deps/rocksdb/rocksdb/util/hash_test.cc +44 -0
- package/deps/rocksdb/rocksdb/util/math.h +58 -6
- package/deps/rocksdb/rocksdb/util/math128.h +29 -7
- package/deps/rocksdb/rocksdb/util/mutexlock.h +35 -27
- package/deps/rocksdb/rocksdb/util/single_thread_executor.h +1 -0
- package/deps/rocksdb/rocksdb/util/stop_watch.h +1 -1
- package/deps/rocksdb/rocksdb/util/thread_operation.h +8 -1
- package/deps/rocksdb/rocksdb/util/udt_util.cc +343 -0
- package/deps/rocksdb/rocksdb/util/udt_util.h +173 -1
- package/deps/rocksdb/rocksdb/util/udt_util_test.cc +447 -0
- package/deps/rocksdb/rocksdb/util/write_batch_util.cc +25 -0
- package/deps/rocksdb/rocksdb/util/write_batch_util.h +80 -0
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +4 -4
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +69 -25
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +7 -6
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +2 -3
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +6 -11
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +1 -2
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +4 -5
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +2 -1
- package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +3 -3
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +1 -2
- package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.cc +2 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.cc +23 -8
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +9 -6
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +37 -12
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +231 -33
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +0 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +76 -20
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +18 -9
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +40 -23
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +13 -12
- package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +7 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +41 -11
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.h +6 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +71 -24
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +19 -4
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +60 -107
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +39 -11
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.h +6 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +14 -8
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +10 -5
- package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +2 -1
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +6 -6
- package/deps/rocksdb/rocksdb.gyp +2 -0
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/node.napi.node +0 -0
- package/prebuilds/linux-x64/node.napi.node +0 -0
|
@@ -53,8 +53,11 @@
|
|
|
53
53
|
#include <zdict.h>
|
|
54
54
|
#endif // ZSTD_VERSION_NUMBER >= 10103
|
|
55
55
|
// v1.4.0+
|
|
56
|
+
// ZSTD_Compress2(), ZSTD_compressStream2() and frame parameters all belong to
|
|
57
|
+
// advanced APIs and require v1.4.0+.
|
|
58
|
+
// https://github.com/facebook/zstd/blob/eb9f881eb810f2242f1ef36b3f3e7014eecb8fa6/lib/zstd.h#L297C40-L297C45
|
|
56
59
|
#if ZSTD_VERSION_NUMBER >= 10400
|
|
57
|
-
#define
|
|
60
|
+
#define ZSTD_ADVANCED
|
|
58
61
|
#endif // ZSTD_VERSION_NUMBER >= 10400
|
|
59
62
|
namespace ROCKSDB_NAMESPACE {
|
|
60
63
|
// Need this for the context allocation override
|
|
@@ -180,6 +183,9 @@ struct CompressionDict {
|
|
|
180
183
|
if (level == CompressionOptions::kDefaultCompressionLevel) {
|
|
181
184
|
// 3 is the value of ZSTD_CLEVEL_DEFAULT (not exposed publicly), see
|
|
182
185
|
// https://github.com/facebook/zstd/issues/1148
|
|
186
|
+
// TODO(cbi): ZSTD_CLEVEL_DEFAULT is exposed after
|
|
187
|
+
// https://github.com/facebook/zstd/pull/1174. Use ZSTD_CLEVEL_DEFAULT
|
|
188
|
+
// instead of hardcoding 3.
|
|
183
189
|
level = 3;
|
|
184
190
|
}
|
|
185
191
|
// Should be safe (but slower) if below call fails as we'll use the
|
|
@@ -363,14 +369,43 @@ class CompressionContext {
|
|
|
363
369
|
private:
|
|
364
370
|
#if defined(ZSTD) && (ZSTD_VERSION_NUMBER >= 500)
|
|
365
371
|
ZSTD_CCtx* zstd_ctx_ = nullptr;
|
|
366
|
-
|
|
367
|
-
|
|
372
|
+
|
|
373
|
+
ZSTD_CCtx* CreateZSTDContext() {
|
|
368
374
|
#ifdef ROCKSDB_ZSTD_CUSTOM_MEM
|
|
369
|
-
|
|
370
|
-
ZSTD_createCCtx_advanced(port::GetJeZstdAllocationOverrides());
|
|
375
|
+
return ZSTD_createCCtx_advanced(port::GetJeZstdAllocationOverrides());
|
|
371
376
|
#else // ROCKSDB_ZSTD_CUSTOM_MEM
|
|
372
|
-
|
|
377
|
+
return ZSTD_createCCtx();
|
|
373
378
|
#endif // ROCKSDB_ZSTD_CUSTOM_MEM
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
void CreateNativeContext(CompressionType type, int level, bool checksum) {
|
|
382
|
+
if (type == kZSTD || type == kZSTDNotFinalCompression) {
|
|
383
|
+
zstd_ctx_ = CreateZSTDContext();
|
|
384
|
+
#ifdef ZSTD_ADVANCED
|
|
385
|
+
if (level == CompressionOptions::kDefaultCompressionLevel) {
|
|
386
|
+
// 3 is the value of ZSTD_CLEVEL_DEFAULT (not exposed publicly), see
|
|
387
|
+
// https://github.com/facebook/zstd/issues/1148
|
|
388
|
+
level = 3;
|
|
389
|
+
}
|
|
390
|
+
size_t err =
|
|
391
|
+
ZSTD_CCtx_setParameter(zstd_ctx_, ZSTD_c_compressionLevel, level);
|
|
392
|
+
if (ZSTD_isError(err)) {
|
|
393
|
+
assert(false);
|
|
394
|
+
ZSTD_freeCCtx(zstd_ctx_);
|
|
395
|
+
zstd_ctx_ = CreateZSTDContext();
|
|
396
|
+
}
|
|
397
|
+
if (checksum) {
|
|
398
|
+
err = ZSTD_CCtx_setParameter(zstd_ctx_, ZSTD_c_checksumFlag, 1);
|
|
399
|
+
if (ZSTD_isError(err)) {
|
|
400
|
+
assert(false);
|
|
401
|
+
ZSTD_freeCCtx(zstd_ctx_);
|
|
402
|
+
zstd_ctx_ = CreateZSTDContext();
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
#else
|
|
406
|
+
(void)level;
|
|
407
|
+
(void)checksum;
|
|
408
|
+
#endif
|
|
374
409
|
}
|
|
375
410
|
}
|
|
376
411
|
void DestroyNativeContext() {
|
|
@@ -388,12 +423,14 @@ class CompressionContext {
|
|
|
388
423
|
|
|
389
424
|
#else // ZSTD && (ZSTD_VERSION_NUMBER >= 500)
|
|
390
425
|
private:
|
|
391
|
-
void CreateNativeContext(CompressionType /* type
|
|
426
|
+
void CreateNativeContext(CompressionType /* type */, int /* level */,
|
|
427
|
+
bool /* checksum */) {}
|
|
392
428
|
void DestroyNativeContext() {}
|
|
393
429
|
#endif // ZSTD && (ZSTD_VERSION_NUMBER >= 500)
|
|
394
430
|
public:
|
|
395
|
-
explicit CompressionContext(CompressionType type
|
|
396
|
-
|
|
431
|
+
explicit CompressionContext(CompressionType type,
|
|
432
|
+
const CompressionOptions& options) {
|
|
433
|
+
CreateNativeContext(type, options.level, options.checksum);
|
|
397
434
|
}
|
|
398
435
|
~CompressionContext() { DestroyNativeContext(); }
|
|
399
436
|
CompressionContext(const CompressionContext&) = delete;
|
|
@@ -525,7 +562,7 @@ inline bool ZSTDNotFinal_Supported() {
|
|
|
525
562
|
}
|
|
526
563
|
|
|
527
564
|
inline bool ZSTD_Streaming_Supported() {
|
|
528
|
-
#if defined(
|
|
565
|
+
#if defined(ZSTD_ADVANCED)
|
|
529
566
|
return true;
|
|
530
567
|
#else
|
|
531
568
|
return false;
|
|
@@ -1343,30 +1380,44 @@ inline bool ZSTD_Compress(const CompressionInfo& info, const char* input,
|
|
|
1343
1380
|
size_t compressBound = ZSTD_compressBound(length);
|
|
1344
1381
|
output->resize(static_cast<size_t>(output_header_len + compressBound));
|
|
1345
1382
|
size_t outlen = 0;
|
|
1346
|
-
int level;
|
|
1347
|
-
if (info.options().level == CompressionOptions::kDefaultCompressionLevel) {
|
|
1348
|
-
// 3 is the value of ZSTD_CLEVEL_DEFAULT (not exposed publicly), see
|
|
1349
|
-
// https://github.com/facebook/zstd/issues/1148
|
|
1350
|
-
level = 3;
|
|
1351
|
-
} else {
|
|
1352
|
-
level = info.options().level;
|
|
1353
|
-
}
|
|
1354
1383
|
#if ZSTD_VERSION_NUMBER >= 500 // v0.5.0+
|
|
1355
1384
|
ZSTD_CCtx* context = info.context().ZSTDPreallocCtx();
|
|
1356
1385
|
assert(context != nullptr);
|
|
1386
|
+
#ifdef ZSTD_ADVANCED
|
|
1387
|
+
if (info.dict().GetDigestedZstdCDict() != nullptr) {
|
|
1388
|
+
ZSTD_CCtx_refCDict(context, info.dict().GetDigestedZstdCDict());
|
|
1389
|
+
} else {
|
|
1390
|
+
ZSTD_CCtx_loadDictionary(context, info.dict().GetRawDict().data(),
|
|
1391
|
+
info.dict().GetRawDict().size());
|
|
1392
|
+
}
|
|
1393
|
+
|
|
1394
|
+
// Compression level is set in `contex` during CreateNativeContext()
|
|
1395
|
+
outlen = ZSTD_compress2(context, &(*output)[output_header_len], compressBound,
|
|
1396
|
+
input, length);
|
|
1397
|
+
#else // ZSTD_ADVANCED
|
|
1357
1398
|
#if ZSTD_VERSION_NUMBER >= 700 // v0.7.0+
|
|
1358
1399
|
if (info.dict().GetDigestedZstdCDict() != nullptr) {
|
|
1359
1400
|
outlen = ZSTD_compress_usingCDict(context, &(*output)[output_header_len],
|
|
1360
1401
|
compressBound, input, length,
|
|
1361
1402
|
info.dict().GetDigestedZstdCDict());
|
|
1362
1403
|
}
|
|
1363
|
-
#endif
|
|
1404
|
+
#endif // ZSTD_VERSION_NUMBER >= 700
|
|
1405
|
+
// TODO (cbi): error handling for compression.
|
|
1364
1406
|
if (outlen == 0) {
|
|
1407
|
+
int level;
|
|
1408
|
+
if (info.options().level == CompressionOptions::kDefaultCompressionLevel) {
|
|
1409
|
+
// 3 is the value of ZSTD_CLEVEL_DEFAULT (not exposed publicly), see
|
|
1410
|
+
// https://github.com/facebook/zstd/issues/1148
|
|
1411
|
+
level = 3;
|
|
1412
|
+
} else {
|
|
1413
|
+
level = info.options().level;
|
|
1414
|
+
}
|
|
1365
1415
|
outlen = ZSTD_compress_usingDict(context, &(*output)[output_header_len],
|
|
1366
1416
|
compressBound, input, length,
|
|
1367
1417
|
info.dict().GetRawDict().data(),
|
|
1368
1418
|
info.dict().GetRawDict().size(), level);
|
|
1369
1419
|
}
|
|
1420
|
+
#endif // ZSTD_ADVANCED
|
|
1370
1421
|
#else // up to v0.4.x
|
|
1371
1422
|
outlen = ZSTD_compress(&(*output)[output_header_len], compressBound, input,
|
|
1372
1423
|
length, level);
|
|
@@ -1387,17 +1438,28 @@ inline bool ZSTD_Compress(const CompressionInfo& info, const char* input,
|
|
|
1387
1438
|
|
|
1388
1439
|
// @param compression_dict Data for presetting the compression library's
|
|
1389
1440
|
// dictionary.
|
|
1441
|
+
// @param error_message If not null, will be set if decompression fails.
|
|
1442
|
+
//
|
|
1443
|
+
// Returns nullptr if decompression fails.
|
|
1390
1444
|
inline CacheAllocationPtr ZSTD_Uncompress(
|
|
1391
1445
|
const UncompressionInfo& info, const char* input_data, size_t input_length,
|
|
1392
|
-
size_t* uncompressed_size, MemoryAllocator* allocator = nullptr
|
|
1446
|
+
size_t* uncompressed_size, MemoryAllocator* allocator = nullptr,
|
|
1447
|
+
const char** error_message = nullptr) {
|
|
1393
1448
|
#ifdef ZSTD
|
|
1449
|
+
static const char* const kErrorDecodeOutputSize =
|
|
1450
|
+
"Cannot decode output size.";
|
|
1451
|
+
static const char* const kErrorOutputLenMismatch =
|
|
1452
|
+
"Decompressed size does not match header.";
|
|
1394
1453
|
uint32_t output_len = 0;
|
|
1395
1454
|
if (!compression::GetDecompressedSizeInfo(&input_data, &input_length,
|
|
1396
1455
|
&output_len)) {
|
|
1456
|
+
if (error_message) {
|
|
1457
|
+
*error_message = kErrorDecodeOutputSize;
|
|
1458
|
+
}
|
|
1397
1459
|
return nullptr;
|
|
1398
1460
|
}
|
|
1399
1461
|
|
|
1400
|
-
|
|
1462
|
+
CacheAllocationPtr output = AllocateBlock(output_len, allocator);
|
|
1401
1463
|
size_t actual_output_length = 0;
|
|
1402
1464
|
#if ZSTD_VERSION_NUMBER >= 500 // v0.5.0+
|
|
1403
1465
|
ZSTD_DCtx* context = info.context().GetZSTDContext();
|
|
@@ -1407,19 +1469,31 @@ inline CacheAllocationPtr ZSTD_Uncompress(
|
|
|
1407
1469
|
actual_output_length = ZSTD_decompress_usingDDict(
|
|
1408
1470
|
context, output.get(), output_len, input_data, input_length,
|
|
1409
1471
|
info.dict().GetDigestedZstdDDict());
|
|
1410
|
-
}
|
|
1472
|
+
} else {
|
|
1411
1473
|
#endif // ROCKSDB_ZSTD_DDICT
|
|
1412
|
-
if (actual_output_length == 0) {
|
|
1413
1474
|
actual_output_length = ZSTD_decompress_usingDict(
|
|
1414
1475
|
context, output.get(), output_len, input_data, input_length,
|
|
1415
1476
|
info.dict().GetRawDict().data(), info.dict().GetRawDict().size());
|
|
1477
|
+
#ifdef ROCKSDB_ZSTD_DDICT
|
|
1416
1478
|
}
|
|
1479
|
+
#endif // ROCKSDB_ZSTD_DDICT
|
|
1417
1480
|
#else // up to v0.4.x
|
|
1418
1481
|
(void)info;
|
|
1419
1482
|
actual_output_length =
|
|
1420
1483
|
ZSTD_decompress(output.get(), output_len, input_data, input_length);
|
|
1421
1484
|
#endif // ZSTD_VERSION_NUMBER >= 500
|
|
1422
|
-
|
|
1485
|
+
if (ZSTD_isError(actual_output_length)) {
|
|
1486
|
+
if (error_message) {
|
|
1487
|
+
*error_message = ZSTD_getErrorName(actual_output_length);
|
|
1488
|
+
}
|
|
1489
|
+
return nullptr;
|
|
1490
|
+
} else if (actual_output_length != output_len) {
|
|
1491
|
+
if (error_message) {
|
|
1492
|
+
*error_message = kErrorOutputLenMismatch;
|
|
1493
|
+
}
|
|
1494
|
+
return nullptr;
|
|
1495
|
+
}
|
|
1496
|
+
|
|
1423
1497
|
*uncompressed_size = actual_output_length;
|
|
1424
1498
|
return output;
|
|
1425
1499
|
#else // ZSTD
|
|
@@ -1428,6 +1502,7 @@ inline CacheAllocationPtr ZSTD_Uncompress(
|
|
|
1428
1502
|
(void)input_length;
|
|
1429
1503
|
(void)uncompressed_size;
|
|
1430
1504
|
(void)allocator;
|
|
1505
|
+
(void)error_message;
|
|
1431
1506
|
return nullptr;
|
|
1432
1507
|
#endif
|
|
1433
1508
|
}
|
|
@@ -1530,6 +1605,7 @@ inline std::string ZSTD_FinalizeDictionary(
|
|
|
1530
1605
|
return dict_data;
|
|
1531
1606
|
}
|
|
1532
1607
|
#else // up to v1.4.4
|
|
1608
|
+
assert(false);
|
|
1533
1609
|
(void)samples;
|
|
1534
1610
|
(void)sample_lens;
|
|
1535
1611
|
(void)max_dict_bytes;
|
|
@@ -1589,7 +1665,8 @@ inline bool CompressData(const Slice& raw,
|
|
|
1589
1665
|
inline CacheAllocationPtr UncompressData(
|
|
1590
1666
|
const UncompressionInfo& uncompression_info, const char* data, size_t n,
|
|
1591
1667
|
size_t* uncompressed_size, uint32_t compress_format_version,
|
|
1592
|
-
MemoryAllocator* allocator = nullptr
|
|
1668
|
+
MemoryAllocator* allocator = nullptr,
|
|
1669
|
+
const char** error_message = nullptr) {
|
|
1593
1670
|
switch (uncompression_info.type()) {
|
|
1594
1671
|
case kSnappyCompression:
|
|
1595
1672
|
return Snappy_Uncompress(data, n, uncompressed_size, allocator);
|
|
@@ -1609,8 +1686,9 @@ inline CacheAllocationPtr UncompressData(
|
|
|
1609
1686
|
return CacheAllocationPtr(XPRESS_Uncompress(data, n, uncompressed_size));
|
|
1610
1687
|
case kZSTD:
|
|
1611
1688
|
case kZSTDNotFinalCompression:
|
|
1689
|
+
// TODO(cbi): error message handling for other compression algorithms.
|
|
1612
1690
|
return ZSTD_Uncompress(uncompression_info, data, n, uncompressed_size,
|
|
1613
|
-
allocator);
|
|
1691
|
+
allocator, error_message);
|
|
1614
1692
|
default:
|
|
1615
1693
|
return CacheAllocationPtr();
|
|
1616
1694
|
}
|
|
@@ -1743,7 +1821,7 @@ class ZSTDStreamingCompress final : public StreamingCompress {
|
|
|
1743
1821
|
size_t max_output_len)
|
|
1744
1822
|
: StreamingCompress(kZSTD, opts, compress_format_version,
|
|
1745
1823
|
max_output_len) {
|
|
1746
|
-
#ifdef
|
|
1824
|
+
#ifdef ZSTD_ADVANCED
|
|
1747
1825
|
cctx_ = ZSTD_createCCtx();
|
|
1748
1826
|
// Each compressed frame will have a checksum
|
|
1749
1827
|
ZSTD_CCtx_setParameter(cctx_, ZSTD_c_checksumFlag, 1);
|
|
@@ -1752,14 +1830,14 @@ class ZSTDStreamingCompress final : public StreamingCompress {
|
|
|
1752
1830
|
#endif
|
|
1753
1831
|
}
|
|
1754
1832
|
~ZSTDStreamingCompress() override {
|
|
1755
|
-
#ifdef
|
|
1833
|
+
#ifdef ZSTD_ADVANCED
|
|
1756
1834
|
ZSTD_freeCCtx(cctx_);
|
|
1757
1835
|
#endif
|
|
1758
1836
|
}
|
|
1759
1837
|
int Compress(const char* input, size_t input_size, char* output,
|
|
1760
1838
|
size_t* output_pos) override;
|
|
1761
1839
|
void Reset() override;
|
|
1762
|
-
#ifdef
|
|
1840
|
+
#ifdef ZSTD_ADVANCED
|
|
1763
1841
|
ZSTD_CCtx* cctx_;
|
|
1764
1842
|
ZSTD_inBuffer input_buffer_;
|
|
1765
1843
|
#endif
|
|
@@ -1770,14 +1848,14 @@ class ZSTDStreamingUncompress final : public StreamingUncompress {
|
|
|
1770
1848
|
explicit ZSTDStreamingUncompress(uint32_t compress_format_version,
|
|
1771
1849
|
size_t max_output_len)
|
|
1772
1850
|
: StreamingUncompress(kZSTD, compress_format_version, max_output_len) {
|
|
1773
|
-
#ifdef
|
|
1851
|
+
#ifdef ZSTD_ADVANCED
|
|
1774
1852
|
dctx_ = ZSTD_createDCtx();
|
|
1775
1853
|
assert(dctx_ != nullptr);
|
|
1776
1854
|
input_buffer_ = {/*src=*/nullptr, /*size=*/0, /*pos=*/0};
|
|
1777
1855
|
#endif
|
|
1778
1856
|
}
|
|
1779
1857
|
~ZSTDStreamingUncompress() override {
|
|
1780
|
-
#ifdef
|
|
1858
|
+
#ifdef ZSTD_ADVANCED
|
|
1781
1859
|
ZSTD_freeDCtx(dctx_);
|
|
1782
1860
|
#endif
|
|
1783
1861
|
}
|
|
@@ -1786,7 +1864,7 @@ class ZSTDStreamingUncompress final : public StreamingUncompress {
|
|
|
1786
1864
|
void Reset() override;
|
|
1787
1865
|
|
|
1788
1866
|
private:
|
|
1789
|
-
#ifdef
|
|
1867
|
+
#ifdef ZSTD_ADVANCED
|
|
1790
1868
|
ZSTD_DCtx* dctx_;
|
|
1791
1869
|
ZSTD_inBuffer input_buffer_;
|
|
1792
1870
|
#endif
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
|
|
14
14
|
#include "port/likely.h"
|
|
15
15
|
#include "port/port.h"
|
|
16
|
+
#include "util/math.h"
|
|
16
17
|
#include "util/random.h"
|
|
17
18
|
|
|
18
19
|
namespace ROCKSDB_NAMESPACE {
|
|
@@ -70,7 +71,7 @@ std::pair<T*, size_t> CoreLocalArray<T>::AccessElementAndIndex() const {
|
|
|
70
71
|
// cpu id unavailable, just pick randomly
|
|
71
72
|
core_idx = Random::GetTLSInstance()->Uniform(1 << size_shift_);
|
|
72
73
|
} else {
|
|
73
|
-
core_idx = static_cast<size_t>(cpuid
|
|
74
|
+
core_idx = static_cast<size_t>(BottomNBits(cpuid, size_shift_));
|
|
74
75
|
}
|
|
75
76
|
return {AccessAtCore(core_idx), core_idx};
|
|
76
77
|
}
|
|
@@ -126,7 +126,7 @@ inline void DynamicBloom::MayContain(int num_keys, Slice* keys,
|
|
|
126
126
|
std::array<size_t, MultiGetContext::MAX_BATCH_SIZE> byte_offsets;
|
|
127
127
|
for (int i = 0; i < num_keys; ++i) {
|
|
128
128
|
hashes[i] = BloomHash(keys[i]);
|
|
129
|
-
size_t a = FastRange32(
|
|
129
|
+
size_t a = FastRange32(hashes[i], kLen);
|
|
130
130
|
PREFETCH(data_ + a, 0, 3);
|
|
131
131
|
byte_offsets[i] = a;
|
|
132
132
|
}
|
|
@@ -142,7 +142,7 @@ inline void DynamicBloom::MayContain(int num_keys, Slice* keys,
|
|
|
142
142
|
#pragma warning(disable : 4189)
|
|
143
143
|
#endif
|
|
144
144
|
inline void DynamicBloom::Prefetch(uint32_t h32) {
|
|
145
|
-
size_t a = FastRange32(
|
|
145
|
+
size_t a = FastRange32(h32, kLen);
|
|
146
146
|
PREFETCH(data_ + a, 0, 3);
|
|
147
147
|
}
|
|
148
148
|
#if defined(_MSC_VER)
|
|
@@ -171,7 +171,7 @@ inline void DynamicBloom::Prefetch(uint32_t h32) {
|
|
|
171
171
|
// because of false positives.)
|
|
172
172
|
|
|
173
173
|
inline bool DynamicBloom::MayContainHash(uint32_t h32) const {
|
|
174
|
-
size_t a = FastRange32(
|
|
174
|
+
size_t a = FastRange32(h32, kLen);
|
|
175
175
|
PREFETCH(data_ + a, 0, 3);
|
|
176
176
|
return DoubleProbe(h32, a);
|
|
177
177
|
}
|
|
@@ -195,7 +195,7 @@ inline bool DynamicBloom::DoubleProbe(uint32_t h32, size_t byte_offset) const {
|
|
|
195
195
|
|
|
196
196
|
template <typename OrFunc>
|
|
197
197
|
inline void DynamicBloom::AddHash(uint32_t h32, const OrFunc& or_func) {
|
|
198
|
-
size_t a = FastRange32(
|
|
198
|
+
size_t a = FastRange32(h32, kLen);
|
|
199
199
|
PREFETCH(data_ + a, 0, 3);
|
|
200
200
|
// Expand/remix with 64-bit golden ratio
|
|
201
201
|
uint64_t h = 0x9e3779b97f4a7c13ULL * h32;
|
|
@@ -128,10 +128,14 @@ inline uint32_t Upper32of64(uint64_t v) {
|
|
|
128
128
|
}
|
|
129
129
|
inline uint32_t Lower32of64(uint64_t v) { return static_cast<uint32_t>(v); }
|
|
130
130
|
|
|
131
|
-
// std::hash
|
|
132
|
-
|
|
133
|
-
struct SliceHasher {
|
|
131
|
+
// std::hash-like interface.
|
|
132
|
+
struct SliceHasher32 {
|
|
134
133
|
uint32_t operator()(const Slice& s) const { return GetSliceHash(s); }
|
|
135
134
|
};
|
|
135
|
+
struct SliceNPHasher64 {
|
|
136
|
+
uint64_t operator()(const Slice& s, uint64_t seed = 0) const {
|
|
137
|
+
return GetSliceNPHash64(s, seed);
|
|
138
|
+
}
|
|
139
|
+
};
|
|
136
140
|
|
|
137
141
|
} // namespace ROCKSDB_NAMESPACE
|
|
@@ -565,6 +565,8 @@ size_t FastRange64(uint64_t hash, size_t range) {
|
|
|
565
565
|
// Tests for math.h / math128.h (not worth a separate test binary)
|
|
566
566
|
using ROCKSDB_NAMESPACE::BitParity;
|
|
567
567
|
using ROCKSDB_NAMESPACE::BitsSetToOne;
|
|
568
|
+
using ROCKSDB_NAMESPACE::BitwiseAnd;
|
|
569
|
+
using ROCKSDB_NAMESPACE::BottomNBits;
|
|
568
570
|
using ROCKSDB_NAMESPACE::ConstexprFloorLog2;
|
|
569
571
|
using ROCKSDB_NAMESPACE::CountTrailingZeroBits;
|
|
570
572
|
using ROCKSDB_NAMESPACE::DecodeFixed128;
|
|
@@ -580,6 +582,19 @@ using ROCKSDB_NAMESPACE::Upper64of128;
|
|
|
580
582
|
|
|
581
583
|
int blah(int x) { return DownwardInvolution(x); }
|
|
582
584
|
|
|
585
|
+
template <typename T1, typename T2>
|
|
586
|
+
static void test_BitwiseAnd(T1 v1, T2 v2) {
|
|
587
|
+
auto a = BitwiseAnd(v1, v2);
|
|
588
|
+
// Essentially repeating the implementation :-/
|
|
589
|
+
if constexpr (sizeof(T1) < sizeof(T2)) {
|
|
590
|
+
static_assert(std::is_same_v<decltype(a), T1>);
|
|
591
|
+
EXPECT_EQ(a, static_cast<T1>(v1 & v2));
|
|
592
|
+
} else {
|
|
593
|
+
static_assert(std::is_same_v<decltype(a), T2>);
|
|
594
|
+
EXPECT_EQ(a, static_cast<T2>(v1 & v2));
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
|
|
583
598
|
template <typename T>
|
|
584
599
|
static void test_BitOps() {
|
|
585
600
|
// This complex code is to generalize to 128-bit values. Otherwise
|
|
@@ -598,6 +613,22 @@ static void test_BitOps() {
|
|
|
598
613
|
// If we could directly use arithmetic:
|
|
599
614
|
// T vm1 = static_cast<T>(v - 1);
|
|
600
615
|
|
|
616
|
+
// BottomNBits
|
|
617
|
+
{
|
|
618
|
+
// An essentially full length value
|
|
619
|
+
T x = everyOtherBit;
|
|
620
|
+
if (i > 2) {
|
|
621
|
+
// Make it slightly irregular
|
|
622
|
+
x = x ^ (T{1} << (i / 2));
|
|
623
|
+
}
|
|
624
|
+
auto a = BottomNBits(x, i);
|
|
625
|
+
auto b = BottomNBits(~x, i);
|
|
626
|
+
EXPECT_EQ(x | a, x);
|
|
627
|
+
EXPECT_EQ(a | b, vm1);
|
|
628
|
+
EXPECT_EQ(a & b, T{0});
|
|
629
|
+
EXPECT_EQ(BottomNBits(x ^ a, i), T{0});
|
|
630
|
+
}
|
|
631
|
+
|
|
601
632
|
// FloorLog2
|
|
602
633
|
if (v > 0) {
|
|
603
634
|
EXPECT_EQ(FloorLog2(v), i);
|
|
@@ -707,9 +738,22 @@ static void test_BitOps() {
|
|
|
707
738
|
}
|
|
708
739
|
}
|
|
709
740
|
|
|
741
|
+
// BitwiseAnd
|
|
742
|
+
{
|
|
743
|
+
test_BitwiseAnd(vm1, static_cast<char>(0x99));
|
|
744
|
+
test_BitwiseAnd(v, static_cast<char>(0x99));
|
|
745
|
+
test_BitwiseAnd(char{0x66}, vm1);
|
|
746
|
+
test_BitwiseAnd(char{0x66}, v);
|
|
747
|
+
test_BitwiseAnd(v, int16_t{0x6699});
|
|
748
|
+
test_BitwiseAnd(v, uint16_t{0x9966});
|
|
749
|
+
test_BitwiseAnd(int64_t{0x1234234534564567}, v);
|
|
750
|
+
test_BitwiseAnd(uint64_t{0x9876876576545432}, v);
|
|
751
|
+
}
|
|
752
|
+
|
|
710
753
|
vm1 = (vm1 << 1) | 1;
|
|
711
754
|
}
|
|
712
755
|
|
|
756
|
+
// ConstexprFloorLog2
|
|
713
757
|
EXPECT_EQ(ConstexprFloorLog2(T{1}), 0);
|
|
714
758
|
EXPECT_EQ(ConstexprFloorLog2(T{2}), 1);
|
|
715
759
|
EXPECT_EQ(ConstexprFloorLog2(T{3}), 1);
|
|
@@ -9,6 +9,9 @@
|
|
|
9
9
|
#ifdef _MSC_VER
|
|
10
10
|
#include <intrin.h>
|
|
11
11
|
#endif
|
|
12
|
+
#ifdef __BMI2__
|
|
13
|
+
#include <immintrin.h>
|
|
14
|
+
#endif
|
|
12
15
|
|
|
13
16
|
#include <cstdint>
|
|
14
17
|
#include <type_traits>
|
|
@@ -20,11 +23,33 @@ ASSERT_FEATURE_COMPAT_HEADER();
|
|
|
20
23
|
|
|
21
24
|
namespace ROCKSDB_NAMESPACE {
|
|
22
25
|
|
|
26
|
+
// Fast implementation of extracting the bottom n bits of an integer.
|
|
27
|
+
// To ensure fast implementation, undefined if n bits is full width or more.
|
|
28
|
+
template <typename T>
|
|
29
|
+
inline T BottomNBits(T v, int nbits) {
|
|
30
|
+
static_assert(std::is_integral_v<T>, "non-integral type");
|
|
31
|
+
static_assert(!std::is_reference_v<T>, "use std::remove_reference_t");
|
|
32
|
+
assert(nbits >= 0);
|
|
33
|
+
assert(nbits < int{8 * sizeof(T)});
|
|
34
|
+
#ifdef __BMI2__
|
|
35
|
+
if constexpr (sizeof(T) <= 4) {
|
|
36
|
+
return static_cast<T>(_bzhi_u32(static_cast<uint32_t>(v), nbits));
|
|
37
|
+
}
|
|
38
|
+
if constexpr (sizeof(T) <= 8) {
|
|
39
|
+
return static_cast<T>(_bzhi_u64(static_cast<uint64_t>(v), nbits));
|
|
40
|
+
}
|
|
41
|
+
#endif
|
|
42
|
+
// Newer compilers compile this down to bzhi on x86, but some older
|
|
43
|
+
// ones don't, thus the need for the intrinsic above.
|
|
44
|
+
return static_cast<T>(v & ((T{1} << nbits) - 1));
|
|
45
|
+
}
|
|
46
|
+
|
|
23
47
|
// Fast implementation of floor(log2(v)). Undefined for 0 or negative
|
|
24
48
|
// numbers (in case of signed type).
|
|
25
49
|
template <typename T>
|
|
26
50
|
inline int FloorLog2(T v) {
|
|
27
|
-
static_assert(std::
|
|
51
|
+
static_assert(std::is_integral_v<T>, "non-integral type");
|
|
52
|
+
static_assert(!std::is_reference_v<T>, "use std::remove_reference_t");
|
|
28
53
|
assert(v > 0);
|
|
29
54
|
#ifdef _MSC_VER
|
|
30
55
|
static_assert(sizeof(T) <= sizeof(uint64_t), "type too big");
|
|
@@ -63,6 +88,8 @@ inline int FloorLog2(T v) {
|
|
|
63
88
|
// Constexpr version of FloorLog2
|
|
64
89
|
template <typename T>
|
|
65
90
|
constexpr int ConstexprFloorLog2(T v) {
|
|
91
|
+
// NOTE: not checking is_integral so that this works with Unsigned128
|
|
92
|
+
static_assert(!std::is_reference_v<T>, "use std::remove_reference_t");
|
|
66
93
|
int rv = 0;
|
|
67
94
|
while (v > T{1}) {
|
|
68
95
|
++rv;
|
|
@@ -74,7 +101,8 @@ constexpr int ConstexprFloorLog2(T v) {
|
|
|
74
101
|
// Number of low-order zero bits before the first 1 bit. Undefined for 0.
|
|
75
102
|
template <typename T>
|
|
76
103
|
inline int CountTrailingZeroBits(T v) {
|
|
77
|
-
static_assert(std::
|
|
104
|
+
static_assert(std::is_integral_v<T>, "non-integral type");
|
|
105
|
+
static_assert(!std::is_reference_v<T>, "use std::remove_reference_t");
|
|
78
106
|
assert(v != 0);
|
|
79
107
|
#ifdef _MSC_VER
|
|
80
108
|
static_assert(sizeof(T) <= sizeof(uint64_t), "type too big");
|
|
@@ -115,6 +143,9 @@ namespace detail {
|
|
|
115
143
|
|
|
116
144
|
template <typename T>
|
|
117
145
|
int BitsSetToOneFallback(T v) {
|
|
146
|
+
static_assert(std::is_integral_v<T>, "non-integral type");
|
|
147
|
+
static_assert(!std::is_reference_v<T>, "use std::remove_reference_t");
|
|
148
|
+
|
|
118
149
|
const int kBits = static_cast<int>(sizeof(T)) * 8;
|
|
119
150
|
static_assert((kBits & (kBits - 1)) == 0, "must be power of two bits");
|
|
120
151
|
// we static_cast these bit patterns in order to truncate them to the correct
|
|
@@ -140,7 +171,9 @@ int BitsSetToOneFallback(T v) {
|
|
|
140
171
|
// Number of bits set to 1. Also known as "population count".
|
|
141
172
|
template <typename T>
|
|
142
173
|
inline int BitsSetToOne(T v) {
|
|
143
|
-
static_assert(std::
|
|
174
|
+
static_assert(std::is_integral_v<T>, "non-integral type");
|
|
175
|
+
static_assert(!std::is_reference_v<T>, "use std::remove_reference_t");
|
|
176
|
+
|
|
144
177
|
#ifdef _MSC_VER
|
|
145
178
|
static_assert(sizeof(T) <= sizeof(uint64_t), "type too big");
|
|
146
179
|
if (sizeof(T) < sizeof(uint32_t)) {
|
|
@@ -192,7 +225,9 @@ inline int BitsSetToOne(T v) {
|
|
|
192
225
|
|
|
193
226
|
template <typename T>
|
|
194
227
|
inline int BitParity(T v) {
|
|
195
|
-
static_assert(std::
|
|
228
|
+
static_assert(std::is_integral_v<T>, "non-integral type");
|
|
229
|
+
static_assert(!std::is_reference_v<T>, "use std::remove_reference_t");
|
|
230
|
+
|
|
196
231
|
#ifdef _MSC_VER
|
|
197
232
|
// bit parity == oddness of popcount
|
|
198
233
|
return BitsSetToOne(v) & 1;
|
|
@@ -214,7 +249,8 @@ inline int BitParity(T v) {
|
|
|
214
249
|
// encode/decode big endian.
|
|
215
250
|
template <typename T>
|
|
216
251
|
inline T EndianSwapValue(T v) {
|
|
217
|
-
static_assert(std::
|
|
252
|
+
static_assert(std::is_integral_v<T>, "non-integral type");
|
|
253
|
+
static_assert(!std::is_reference_v<T>, "use std::remove_reference_t");
|
|
218
254
|
|
|
219
255
|
#ifdef _MSC_VER
|
|
220
256
|
if (sizeof(T) == 2) {
|
|
@@ -244,6 +280,9 @@ inline T EndianSwapValue(T v) {
|
|
|
244
280
|
// Reverses the order of bits in an integral value
|
|
245
281
|
template <typename T>
|
|
246
282
|
inline T ReverseBits(T v) {
|
|
283
|
+
static_assert(std::is_integral_v<T>, "non-integral type");
|
|
284
|
+
static_assert(!std::is_reference_v<T>, "use std::remove_reference_t");
|
|
285
|
+
|
|
247
286
|
T r = EndianSwapValue(v);
|
|
248
287
|
const T kHighestByte = T{1} << ((sizeof(T) - 1) * 8);
|
|
249
288
|
const T kEveryByte = kHighestByte | (kHighestByte / 255);
|
|
@@ -277,7 +316,8 @@ inline T ReverseBits(T v) {
|
|
|
277
316
|
// is that all square sub-matrices that include the top row are invertible.
|
|
278
317
|
template <typename T>
|
|
279
318
|
inline T DownwardInvolution(T v) {
|
|
280
|
-
static_assert(std::
|
|
319
|
+
static_assert(std::is_integral_v<T>, "non-integral type");
|
|
320
|
+
static_assert(!std::is_reference_v<T>, "use std::remove_reference_t");
|
|
281
321
|
static_assert(sizeof(T) <= 8, "only supported up to 64 bits");
|
|
282
322
|
|
|
283
323
|
uint64_t r = static_cast<uint64_t>(v);
|
|
@@ -296,4 +336,16 @@ inline T DownwardInvolution(T v) {
|
|
|
296
336
|
return static_cast<T>(r);
|
|
297
337
|
}
|
|
298
338
|
|
|
339
|
+
// Bitwise-And with typing that allows you to avoid writing an explicit cast
|
|
340
|
+
// to the smaller type, or the type of the right parameter if same size.
|
|
341
|
+
template <typename A, typename B>
|
|
342
|
+
inline std::conditional_t<sizeof(A) < sizeof(B), A, B> BitwiseAnd(A a, B b) {
|
|
343
|
+
static_assert(std::is_integral_v<A>, "non-integral type");
|
|
344
|
+
static_assert(std::is_integral_v<B>, "non-integral type");
|
|
345
|
+
static_assert(!std::is_reference_v<A>, "use std::remove_reference_t");
|
|
346
|
+
static_assert(!std::is_reference_v<B>, "use std::remove_reference_t");
|
|
347
|
+
using Smaller = std::conditional_t<sizeof(A) < sizeof(B), A, B>;
|
|
348
|
+
return static_cast<Smaller>(a & b);
|
|
349
|
+
}
|
|
350
|
+
|
|
299
351
|
} // namespace ROCKSDB_NAMESPACE
|
|
@@ -41,13 +41,13 @@ struct Unsigned128 {
|
|
|
41
41
|
hi = upper;
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
explicit operator
|
|
49
|
-
|
|
50
|
-
|
|
44
|
+
// Convert to any integer 64 bits or less.
|
|
45
|
+
template <typename T,
|
|
46
|
+
typename = std::enable_if_t<std::is_integral_v<T> &&
|
|
47
|
+
sizeof(T) <= sizeof(uint64_t)> >
|
|
48
|
+
explicit operator T() {
|
|
49
|
+
return static_cast<T>(lo);
|
|
50
|
+
}
|
|
51
51
|
};
|
|
52
52
|
|
|
53
53
|
inline Unsigned128 operator<<(const Unsigned128& lhs, unsigned shift) {
|
|
@@ -190,6 +190,16 @@ inline Unsigned128 Multiply64to128(uint64_t a, uint64_t b) {
|
|
|
190
190
|
#endif
|
|
191
191
|
}
|
|
192
192
|
|
|
193
|
+
template <>
|
|
194
|
+
inline Unsigned128 BottomNBits(Unsigned128 v, int nbits) {
|
|
195
|
+
if (nbits < 64) {
|
|
196
|
+
return BottomNBits(Lower64of128(v), nbits);
|
|
197
|
+
} else {
|
|
198
|
+
return (Unsigned128{BottomNBits(Upper64of128(v), nbits - 64)} << 64) |
|
|
199
|
+
Lower64of128(v);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
193
203
|
template <>
|
|
194
204
|
inline int FloorLog2(Unsigned128 v) {
|
|
195
205
|
if (Upper64of128(v) == 0) {
|
|
@@ -236,6 +246,18 @@ inline Unsigned128 DownwardInvolution(Unsigned128 v) {
|
|
|
236
246
|
DownwardInvolution(Upper64of128(v) ^ Lower64of128(v));
|
|
237
247
|
}
|
|
238
248
|
|
|
249
|
+
template <typename A>
|
|
250
|
+
inline std::remove_reference_t<A> BitwiseAnd(A a, Unsigned128 b) {
|
|
251
|
+
static_assert(sizeof(A) <= sizeof(Unsigned128));
|
|
252
|
+
return static_cast<A>(a & b);
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
template <typename B>
|
|
256
|
+
inline std::remove_reference_t<B> BitwiseAnd(Unsigned128 a, B b) {
|
|
257
|
+
static_assert(sizeof(B) <= sizeof(Unsigned128));
|
|
258
|
+
return static_cast<B>(a & b);
|
|
259
|
+
}
|
|
260
|
+
|
|
239
261
|
template <typename T>
|
|
240
262
|
struct IsUnsignedUpTo128
|
|
241
263
|
: std::integral_constant<bool, std::is_unsigned<T>::value ||
|