/*
 	File:		CFData.h
 
 	Contains:	CoreFoundation block of bytes
 
 	Version:	Technology:	Mac OS X
 				Release:	QuickTime 4.1
 
 	Copyright:	(c) 1999 by Apple Computer, Inc., all rights reserved
 
 	Bugs?:		For bug reports, consult the following page on
 				the World Wide Web:
 
 					http://developer.apple.com/bugreporter/
 
*/
#ifndef __COREFOUNDATION_CFDATA__
#define __COREFOUNDATION_CFDATA__

#ifndef __COREFOUNDATION_CFBASE__
	#include <CoreFoundation\CFBase.h>
#endif




#if PRAGMA_ONCE
#pragma once
#endif

#ifdef __cplusplus
extern "C" {
#endif

#if PRAGMA_IMPORT
#pragma import on
#endif

#if PRAGMA_STRUCT_ALIGN
	#pragma options align=mac68k
#elif PRAGMA_STRUCT_PACKPUSH
	#pragma pack(push, 2)
#elif PRAGMA_STRUCT_PACK
	#pragma pack(2)
#endif

typedef const struct __CFData * CFDataRef;
typedef struct __CFData * CFMutableDataRef;
EXTERN_API_C( CFTypeID )
CFDataGetTypeID					(void);


EXTERN_API_C( CFDataRef )
CFDataCreate					(CFAllocatorRef 		allocator,
								 const UInt8 *			bytes,
								 CFIndex 				length);

EXTERN_API_C( CFDataRef )
CFDataCreateWithBytesNoCopy		(CFAllocatorRef 		allocator,
								 const UInt8 *			bytes,
								 CFIndex 				length,
								 CFAllocatorRef 		bytesDeallocator);

/* Pass kCFAllocatorNull as bytesDeallocator to assure the bytes aren't freed */
EXTERN_API_C( CFDataRef )
CFDataCreateCopy				(CFAllocatorRef 		allocator,
								 CFDataRef 				data);

EXTERN_API_C( CFMutableDataRef )
CFDataCreateMutable				(CFAllocatorRef 		allocator,
								 CFIndex 				capacity);

EXTERN_API_C( CFMutableDataRef )
CFDataCreateMutableCopy			(CFAllocatorRef 		allocator,
								 CFIndex 				capacity,
								 CFDataRef 				data);


EXTERN_API_C( CFIndex )
CFDataGetLength					(CFDataRef 				data);

EXTERN_API_C( const UInt8 *)
CFDataGetBytePtr				(CFDataRef 				data);

EXTERN_API_C( UInt8 *)
CFDataGetMutableBytePtr			(CFMutableDataRef 		data);

EXTERN_API_C( void )
CFDataGetBytes					(CFDataRef 				data,
								 CFRange 				range,
								 UInt8 *				buffer);


EXTERN_API_C( void )
CFDataSetLength					(CFMutableDataRef 		data,
								 CFIndex 				length);

EXTERN_API_C( void )
CFDataIncreaseLength			(CFMutableDataRef 		data,
								 CFIndex 				extraLength);

EXTERN_API_C( void )
CFDataAppendBytes				(CFMutableDataRef 		data,
								 const UInt8 *			bytes,
								 CFIndex 				length);

EXTERN_API_C( void )
CFDataReplaceBytes				(CFMutableDataRef 		data,
								 CFRange 				range,
								 const UInt8 *			newBytes,
								 CFIndex 				newLength);

EXTERN_API_C( void )
CFDataDeleteBytes				(CFMutableDataRef 		data,
								 CFRange 				range);


#if PRAGMA_STRUCT_ALIGN
	#pragma options align=reset
#elif PRAGMA_STRUCT_PACKPUSH
	#pragma pack(pop)
#elif PRAGMA_STRUCT_PACK
	#pragma pack()
#endif

#ifdef PRAGMA_IMPORT_OFF
#pragma import off
#elif PRAGMA_IMPORT
#pragma import reset
#endif

#ifdef __cplusplus
}
#endif

#endif /* __COREFOUNDATION_CFDATA__ */

