diff options
author | arcadia-devtools <arcadia-devtools@yandex-team.ru> | 2022-05-06 16:25:32 +0300 |
---|---|---|
committer | arcadia-devtools <arcadia-devtools@yandex-team.ru> | 2022-05-06 16:25:32 +0300 |
commit | cd04681a15e2a0f5a6c26802a5e27ab822ef5fb7 (patch) | |
tree | 308286ac567a4172e2bb516fa551898f349986db /library/cpp/digest | |
parent | 8db3cc37187f35d7768f073b5880e559b6767bdf (diff) | |
download | ydb-cd04681a15e2a0f5a6c26802a5e27ab822ef5fb7.tar.gz |
intermediate changes
ref:7e8696b4742c75a3ab825709512075b3710a0a6f
Diffstat (limited to 'library/cpp/digest')
-rw-r--r-- | library/cpp/digest/crc32c/crc32c.cpp | 10 | ||||
-rw-r--r-- | library/cpp/digest/crc32c/crc32c.h | 1 | ||||
-rw-r--r-- | library/cpp/digest/crc32c/crc32c_ut.cpp | 8 |
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); + } } |