1ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov//===-- llvm/Support/Compression.h ---Compression----------------*- C++ -*-===//
2ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov//
3ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov//                     The LLVM Compiler Infrastructure
4ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov//
5ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov// This file is distributed under the University of Illinois Open Source
6ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov// License. See LICENSE.TXT for details.
7ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov//
8ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov//===----------------------------------------------------------------------===//
9ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov//
10ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov// This file contains basic functions for compression/uncompression.
11ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov//
12ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov//===----------------------------------------------------------------------===//
13ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov
14ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov#ifndef LLVM_SUPPORT_COMPRESSION_H
15ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov#define LLVM_SUPPORT_COMPRESSION_H
16ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov
17ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov#include "llvm/Support/DataTypes.h"
1836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include <memory>
19dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#include "llvm/ADT/SmallVector.h"
20ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov
21ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonovnamespace llvm {
22ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov
23ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonovclass StringRef;
24ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov
25ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonovnamespace zlib {
26ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov
27ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonovenum CompressionLevel {
28ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov  NoCompression,
29ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov  DefaultCompression,
30ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov  BestSpeedCompression,
31ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov  BestSizeCompression
32ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov};
33ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov
34ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonovenum Status {
35ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov  StatusOK,
3636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  StatusUnsupported,    // zlib is unavailable
3736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  StatusOutOfMemory,    // there was not enough memory
3836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  StatusBufferTooShort, // there was not enough room in the output buffer
3936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  StatusInvalidArg,     // invalid input parameter
4036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  StatusInvalidData     // data was corrupted or incomplete
41ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov};
42ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov
43ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonovbool isAvailable();
44ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov
45dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen HinesStatus compress(StringRef InputBuffer, SmallVectorImpl<char> &CompressedBuffer,
46ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov                CompressionLevel Level = DefaultCompression);
47ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov
48ee03c949b85036b68c261dcc27dca064ee7e525dAlexey SamsonovStatus uncompress(StringRef InputBuffer,
49dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines                  SmallVectorImpl<char> &UncompressedBuffer,
50ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov                  size_t UncompressedSize);
51ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov
52ef7aefc53bf24214f489bf9e4100bcff45f7b12aAlexey Samsonovuint32_t crc32(StringRef Buffer);
53ef7aefc53bf24214f489bf9e4100bcff45f7b12aAlexey Samsonov
54ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov}  // End of namespace zlib
55ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov
56ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov} // End of namespace llvm
57ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov
58ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov#endif
59ee03c949b85036b68c261dcc27dca064ee7e525dAlexey Samsonov
60