200 lines
9.4 KiB
C
200 lines
9.4 KiB
C
|
//
|
||
|
// GTMNSData+zlib.h
|
||
|
//
|
||
|
// Copyright 2007-2008 Google Inc.
|
||
|
//
|
||
|
// Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
||
|
// use this file except in compliance with the License. You may obtain a copy
|
||
|
// of the License at
|
||
|
//
|
||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||
|
//
|
||
|
// Unless required by applicable law or agreed to in writing, software
|
||
|
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||
|
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||
|
// License for the specific language governing permissions and limitations under
|
||
|
// the License.
|
||
|
//
|
||
|
|
||
|
#import <Foundation/Foundation.h>
|
||
|
#import "GTMDefines.h"
|
||
|
|
||
|
/// Helpers for dealing w/ zlib inflate/deflate calls.
|
||
|
@interface NSData (GTMZLibAdditions)
|
||
|
|
||
|
// NOTE: For 64bit, none of these apis handle input sizes >32bits, they will
|
||
|
// return nil when given such data. To handle data of that size you really
|
||
|
// should be streaming it rather then doing it all in memory.
|
||
|
|
||
|
#pragma mark Gzip Compression
|
||
|
|
||
|
/// Return an autoreleased NSData w/ the result of gzipping the bytes.
|
||
|
//
|
||
|
// Uses the default compression level.
|
||
|
+ (NSData *)gtm_dataByGzippingBytes:(const void *)bytes
|
||
|
length:(NSUInteger)length __attribute__((deprecated("Use error variant")));
|
||
|
+ (NSData *)gtm_dataByGzippingBytes:(const void *)bytes
|
||
|
length:(NSUInteger)length
|
||
|
error:(NSError **)error;
|
||
|
|
||
|
/// Return an autoreleased NSData w/ the result of gzipping the payload of |data|.
|
||
|
//
|
||
|
// Uses the default compression level.
|
||
|
+ (NSData *)gtm_dataByGzippingData:(NSData *)data __attribute__((deprecated("Use error variant")));
|
||
|
+ (NSData *)gtm_dataByGzippingData:(NSData *)data
|
||
|
error:(NSError **)error;
|
||
|
|
||
|
/// Return an autoreleased NSData w/ the result of gzipping the bytes using |level| compression level.
|
||
|
//
|
||
|
// |level| can be 1-9, any other values will be clipped to that range.
|
||
|
+ (NSData *)gtm_dataByGzippingBytes:(const void *)bytes
|
||
|
length:(NSUInteger)length
|
||
|
compressionLevel:(int)level __attribute__((deprecated("Use error variant")));
|
||
|
+ (NSData *)gtm_dataByGzippingBytes:(const void *)bytes
|
||
|
length:(NSUInteger)length
|
||
|
compressionLevel:(int)level
|
||
|
error:(NSError **)error;
|
||
|
|
||
|
/// Return an autoreleased NSData w/ the result of gzipping the payload of |data| using |level| compression level.
|
||
|
+ (NSData *)gtm_dataByGzippingData:(NSData *)data
|
||
|
compressionLevel:(int)level __attribute__((deprecated("Use error variant")));
|
||
|
+ (NSData *)gtm_dataByGzippingData:(NSData *)data
|
||
|
compressionLevel:(int)level
|
||
|
error:(NSError **)error;
|
||
|
|
||
|
#pragma mark Zlib "Stream" Compression
|
||
|
|
||
|
// NOTE: deflate is *NOT* gzip. deflate is a "zlib" stream. pick which one
|
||
|
// you really want to create. (the inflate api will handle either)
|
||
|
|
||
|
/// Return an autoreleased NSData w/ the result of deflating the bytes.
|
||
|
//
|
||
|
// Uses the default compression level.
|
||
|
+ (NSData *)gtm_dataByDeflatingBytes:(const void *)bytes
|
||
|
length:(NSUInteger)length __attribute__((deprecated("Use error variant")));
|
||
|
+ (NSData *)gtm_dataByDeflatingBytes:(const void *)bytes
|
||
|
length:(NSUInteger)length
|
||
|
error:(NSError **)error;
|
||
|
|
||
|
/// Return an autoreleased NSData w/ the result of deflating the payload of |data|.
|
||
|
//
|
||
|
// Uses the default compression level.
|
||
|
+ (NSData *)gtm_dataByDeflatingData:(NSData *)data __attribute__((deprecated("Use error variant")));
|
||
|
+ (NSData *)gtm_dataByDeflatingData:(NSData *)data
|
||
|
error:(NSError **)error;
|
||
|
|
||
|
/// Return an autoreleased NSData w/ the result of deflating the bytes using |level| compression level.
|
||
|
//
|
||
|
// |level| can be 1-9, any other values will be clipped to that range.
|
||
|
+ (NSData *)gtm_dataByDeflatingBytes:(const void *)bytes
|
||
|
length:(NSUInteger)length
|
||
|
compressionLevel:(int)level __attribute__((deprecated("Use error variant")));
|
||
|
+ (NSData *)gtm_dataByDeflatingBytes:(const void *)bytes
|
||
|
length:(NSUInteger)length
|
||
|
compressionLevel:(int)level
|
||
|
error:(NSError **)error;
|
||
|
|
||
|
/// Return an autoreleased NSData w/ the result of deflating the payload of |data| using |level| compression level.
|
||
|
+ (NSData *)gtm_dataByDeflatingData:(NSData *)data
|
||
|
compressionLevel:(int)level __attribute__((deprecated("Use error variant")));
|
||
|
+ (NSData *)gtm_dataByDeflatingData:(NSData *)data
|
||
|
compressionLevel:(int)level
|
||
|
error:(NSError **)error;
|
||
|
|
||
|
#pragma mark Uncompress of Gzip or Zlib
|
||
|
|
||
|
/// Return an autoreleased NSData w/ the result of decompressing the bytes.
|
||
|
//
|
||
|
// The bytes to decompress can be zlib or gzip payloads.
|
||
|
+ (NSData *)gtm_dataByInflatingBytes:(const void *)bytes
|
||
|
length:(NSUInteger)length __attribute__((deprecated("Use error variant")));
|
||
|
+ (NSData *)gtm_dataByInflatingBytes:(const void *)bytes
|
||
|
length:(NSUInteger)length
|
||
|
error:(NSError **)error;
|
||
|
|
||
|
/// Return an autoreleased NSData w/ the result of decompressing the payload of |data|.
|
||
|
//
|
||
|
// The data to decompress can be zlib or gzip payloads.
|
||
|
+ (NSData *)gtm_dataByInflatingData:(NSData *)data __attribute__((deprecated("Use error variant")));
|
||
|
+ (NSData *)gtm_dataByInflatingData:(NSData *)data
|
||
|
error:(NSError **)error;
|
||
|
|
||
|
#pragma mark "Raw" Compression Support
|
||
|
|
||
|
// NOTE: raw deflate is *NOT* gzip or deflate. it does not include a header
|
||
|
// of any form and should only be used within streams here an external crc/etc.
|
||
|
// is done to validate the data. The RawInflate apis can be used on data
|
||
|
// processed like this.
|
||
|
|
||
|
/// Return an autoreleased NSData w/ the result of *raw* deflating the bytes.
|
||
|
//
|
||
|
// Uses the default compression level.
|
||
|
// *No* header is added to the resulting data.
|
||
|
+ (NSData *)gtm_dataByRawDeflatingBytes:(const void *)bytes
|
||
|
length:(NSUInteger)length __attribute__((deprecated("Use error variant")));
|
||
|
+ (NSData *)gtm_dataByRawDeflatingBytes:(const void *)bytes
|
||
|
length:(NSUInteger)length
|
||
|
error:(NSError **)error;
|
||
|
|
||
|
/// Return an autoreleased NSData w/ the result of *raw* deflating the payload of |data|.
|
||
|
//
|
||
|
// Uses the default compression level.
|
||
|
// *No* header is added to the resulting data.
|
||
|
+ (NSData *)gtm_dataByRawDeflatingData:(NSData *)data __attribute__((deprecated("Use error variant")));
|
||
|
+ (NSData *)gtm_dataByRawDeflatingData:(NSData *)data
|
||
|
error:(NSError **)error;
|
||
|
|
||
|
/// Return an autoreleased NSData w/ the result of *raw* deflating the bytes using |level| compression level.
|
||
|
//
|
||
|
// |level| can be 1-9, any other values will be clipped to that range.
|
||
|
// *No* header is added to the resulting data.
|
||
|
+ (NSData *)gtm_dataByRawDeflatingBytes:(const void *)bytes
|
||
|
length:(NSUInteger)length
|
||
|
compressionLevel:(int)level __attribute__((deprecated("Use error variant")));
|
||
|
+ (NSData *)gtm_dataByRawDeflatingBytes:(const void *)bytes
|
||
|
length:(NSUInteger)length
|
||
|
compressionLevel:(int)level
|
||
|
error:(NSError **)error;
|
||
|
|
||
|
/// Return an autoreleased NSData w/ the result of *raw* deflating the payload of |data| using |level| compression level.
|
||
|
// *No* header is added to the resulting data.
|
||
|
+ (NSData *)gtm_dataByRawDeflatingData:(NSData *)data
|
||
|
compressionLevel:(int)level __attribute__((deprecated("Use error variant")));
|
||
|
+ (NSData *)gtm_dataByRawDeflatingData:(NSData *)data
|
||
|
compressionLevel:(int)level
|
||
|
error:(NSError **)error;
|
||
|
|
||
|
/// Return an autoreleased NSData w/ the result of *raw* decompressing the bytes.
|
||
|
//
|
||
|
// The data to decompress, it should *not* have any header (zlib nor gzip).
|
||
|
+ (NSData *)gtm_dataByRawInflatingBytes:(const void *)bytes
|
||
|
length:(NSUInteger)length __attribute__((deprecated("Use error variant")));
|
||
|
+ (NSData *)gtm_dataByRawInflatingBytes:(const void *)bytes
|
||
|
length:(NSUInteger)length
|
||
|
error:(NSError **)error;
|
||
|
|
||
|
/// Return an autoreleased NSData w/ the result of *raw* decompressing the payload of |data|.
|
||
|
//
|
||
|
// The data to decompress, it should *not* have any header (zlib nor gzip).
|
||
|
+ (NSData *)gtm_dataByRawInflatingData:(NSData *)data __attribute__((deprecated("Use error variant")));
|
||
|
+ (NSData *)gtm_dataByRawInflatingData:(NSData *)data
|
||
|
error:(NSError **)error;
|
||
|
|
||
|
@end
|
||
|
|
||
|
FOUNDATION_EXPORT NSString *const GTMNSDataZlibErrorDomain;
|
||
|
FOUNDATION_EXPORT NSString *const GTMNSDataZlibErrorKey; // NSNumber
|
||
|
FOUNDATION_EXPORT NSString *const GTMNSDataZlibRemainingBytesKey; // NSNumber
|
||
|
|
||
|
typedef NS_ENUM(NSInteger, GTMNSDataZlibError) {
|
||
|
GTMNSDataZlibErrorGreaterThan32BitsToCompress = 1024,
|
||
|
// An internal zlib error.
|
||
|
// GTMNSDataZlibErrorKey will contain the error value.
|
||
|
// NSLocalizedDescriptionKey may contain an error string from zlib.
|
||
|
// Look in zlib.h for list of errors.
|
||
|
GTMNSDataZlibErrorInternal,
|
||
|
// There was left over data in the buffer that was not used.
|
||
|
// GTMNSDataZlibRemainingBytesKey will contain number of remaining bytes.
|
||
|
GTMNSDataZlibErrorDataRemaining
|
||
|
};
|