Expose CRC-32 implementation from zlib
authorAlexey Samsonov <samsonov@google.com>
Wed, 14 Aug 2013 16:03:29 +0000 (16:03 +0000)
committerAlexey Samsonov <samsonov@google.com>
Wed, 14 Aug 2013 16:03:29 +0000 (16:03 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@188380 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Support/Compression.h
lib/Support/Compression.cpp
unittests/Support/CompressionTest.cpp

index 9b1142d035da2a2781da0a1e670d08acb9448807..bef9146d07dfc4dddd1307f26c4b0ac814088ab9 100644 (file)
@@ -50,6 +50,8 @@ Status uncompress(StringRef InputBuffer,
                   OwningPtr<MemoryBuffer> &UncompressedBuffer,
                   size_t UncompressedSize);
 
+uint32_t crc32(StringRef Buffer);
+
 }  // End of namespace zlib
 
 } // End of namespace llvm
index fd8a8743ea180aca3a859cd37049610d9f3ffaeb..b5ddb7002cade054282a19d5cf9905c09fcd59f6 100644 (file)
@@ -81,6 +81,10 @@ zlib::Status zlib::uncompress(StringRef InputBuffer,
   return Res;
 }
 
+uint32_t zlib::crc32(StringRef Buffer) {
+  return ::crc32(0, (const Bytef *)Buffer.data(), Buffer.size());
+}
+
 #else
 bool zlib::isAvailable() { return false; }
 zlib::Status zlib::compress(StringRef InputBuffer,
@@ -93,5 +97,8 @@ zlib::Status zlib::uncompress(StringRef InputBuffer,
                               size_t UncompressedSize) {
   return zlib::StatusUnsupported;
 }
+uint32_t zlib::crc32(StringRef Buffer) {
+  llvm_unreachable("zlib::crc32 is unavailable");
+}
 #endif
 
index c8e2cd9f02b62e59bab085ec8b00bb3d4ff566f7..c0a9adadb78872b2891b6d16ea2c08e16ddb1ea9 100644 (file)
@@ -63,6 +63,12 @@ TEST(CompressionTest, Zlib) {
   TestZlibCompression(BinaryDataStr, zlib::DefaultCompression);
 }
 
+TEST(CompressionTest, ZlibCRC32) {
+  EXPECT_EQ(
+      0x414FA339U,
+      zlib::crc32(StringRef("The quick brown fox jumps over the lazy dog")));
+}
+
 #endif
 
 }