aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/digest
diff options
context:
space:
mode:
authorarcadia-devtools <arcadia-devtools@yandex-team.ru>2022-05-06 16:25:32 +0300
committerarcadia-devtools <arcadia-devtools@yandex-team.ru>2022-05-06 16:25:32 +0300
commitcd04681a15e2a0f5a6c26802a5e27ab822ef5fb7 (patch)
tree308286ac567a4172e2bb516fa551898f349986db /library/cpp/digest
parent8db3cc37187f35d7768f073b5880e559b6767bdf (diff)
downloadydb-cd04681a15e2a0f5a6c26802a5e27ab822ef5fb7.tar.gz
intermediate changes
ref:7e8696b4742c75a3ab825709512075b3710a0a6f
Diffstat (limited to 'library/cpp/digest')
-rw-r--r--library/cpp/digest/crc32c/crc32c.cpp10
-rw-r--r--library/cpp/digest/crc32c/crc32c.h1
-rw-r--r--library/cpp/digest/crc32c/crc32c_ut.cpp8
3 files changed, 19 insertions, 0 deletions
diff --git a/library/cpp/digest/crc32c/crc32c.cpp b/library/cpp/digest/crc32c/crc32c.cpp
index 369b46a213..bc9de52134 100644
--- a/library/cpp/digest/crc32c/crc32c.cpp
+++ b/library/cpp/digest/crc32c/crc32c.cpp
@@ -24,6 +24,12 @@ namespace {
Pimpl->Compute(data, n, &sum);
return (ui32)sum;
}
+
+ inline ui32 Combine(ui32 blockACrc, ui32 blockBCrc, size_t blockBSize) const noexcept {
+ crcutil_interface::UINT64 sum = blockACrc;
+ Pimpl->Concatenate(blockBCrc, 0, blockBSize, &sum);
+ return (ui32)sum;
+ }
};
}
@@ -35,6 +41,10 @@ ui32 Crc32cExtend(ui32 init, const void* data, size_t n) noexcept {
return Singleton<TCrcUtilSse4>()->Extend(init, data, n);
}
+ui32 Crc32cCombine(ui32 blockACrc, ui32 blockBCrc, size_t blockBSize) noexcept {
+ return Singleton<TCrcUtilSse4>()->Combine(blockACrc, blockBCrc, blockBSize);
+}
+
bool HaveFastCrc32c() noexcept {
return TCrc::IsSSE42Available();
}
diff --git a/library/cpp/digest/crc32c/crc32c.h b/library/cpp/digest/crc32c/crc32c.h
index 17b554c8e1..e6b767c607 100644
--- a/library/cpp/digest/crc32c/crc32c.h
+++ b/library/cpp/digest/crc32c/crc32c.h
@@ -5,5 +5,6 @@
// Threadsafe
ui32 Crc32c(const void* p, size_t size) noexcept;
ui32 Crc32cExtend(ui32 init, const void* data, size_t n) noexcept;
+ui32 Crc32cCombine(ui32 blockACrc, ui32 blockBCrc, size_t blockBSize) noexcept;
bool HaveFastCrc32c() noexcept;
diff --git a/library/cpp/digest/crc32c/crc32c_ut.cpp b/library/cpp/digest/crc32c/crc32c_ut.cpp
index aa31b83422..dcafaf278d 100644
--- a/library/cpp/digest/crc32c/crc32c_ut.cpp
+++ b/library/cpp/digest/crc32c/crc32c_ut.cpp
@@ -20,4 +20,12 @@ Y_UNIT_TEST_SUITE(TestCrc32c) {
Y_UNIT_TEST(TestExtend) {
UNIT_ASSERT_VALUES_EQUAL(Crc32cExtend(1, "abc", 3), ui32(2466950601));
}
+
+ Y_UNIT_TEST(TestCombine) {
+ ui32 aSum = Crc32c("abc", 3);
+ ui32 bSum = Crc32c("de", 2);
+ ui32 abSum = Crc32c("abcde", 5);
+
+ UNIT_ASSERT_VALUES_EQUAL(Crc32cCombine(aSum, bSum, 2), abSum);
+ }
}