diff options
| author | arcadia-devtools <[email protected]> | 2022-05-06 16:25:32 +0300 | 
|---|---|---|
| committer | arcadia-devtools <[email protected]> | 2022-05-06 16:25:32 +0300 | 
| commit | cd04681a15e2a0f5a6c26802a5e27ab822ef5fb7 (patch) | |
| tree | 308286ac567a4172e2bb516fa551898f349986db /library/cpp/digest | |
| parent | 8db3cc37187f35d7768f073b5880e559b6767bdf (diff) | |
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 369b46a2136..bc9de521341 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 17b554c8e1c..e6b767c6071 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 aa31b83422a..dcafaf278d6 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); +    }  }  | 
