CFBase.h
上传用户:xjjlds
上传日期:2015-12-05
资源大小:22823k
文件大小:10k
- /*
- File: CFBase.h
-
- Contains: CoreFoundation base types
-
- Version: Technology: Mac OS X
- Release: QuickTime 6.0.2
-
- Copyright: (c) 1999-2001 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 __CFBASE__
- #define __CFBASE__
- #ifndef __MACTYPES__
- #include "MacTypes.h"
- #endif
- #if !defined(TRUE)
- #define TRUE 1
- #endif
-
- #if !defined(FALSE)
- #define FALSE 0
- #endif
- #if defined(__WIN32__)
- #undef CF_EXPORT
- #if defined(CF_BUILDING_CF)
- #define CF_EXPORT __declspec(dllexport) extern
- #else
- #define CF_EXPORT __declspec(dllimport) extern
- #endif
- #elif defined(macintosh)
- #if defined(__MWERKS__)
- #define CF_EXPORT __declspec(export) extern
- #endif
- #endif
- #if !defined(CF_EXPORT)
- #define CF_EXPORT extern
- #endif
- #if !defined(CF_INLINE)
- #if defined(__GNUC__)
- #define CF_INLINE static __inline__
- #elif defined(__MWERKS__)
- #define CF_INLINE static inline
- #endif
- #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
- #if PRAGMA_ENUM_ALWAYSINT
- #if defined(__fourbyteints__) && !__fourbyteints__
- #define __CFBASE__RESTORE_TWOBYTEINTS
- #pragma fourbyteints on
- #endif
- #pragma enumsalwaysint on
- #elif PRAGMA_ENUM_OPTIONS
- #pragma option enum=int
- #elif PRAGMA_ENUM_PACK
- #if __option(pack_enums)
- #define __CFBASE__RESTORE_PACKED_ENUMS
- #pragma options(!pack_enums)
- #endif
- #endif
- typedef UInt32 CFTypeID;
- typedef UInt32 CFOptionFlags;
- typedef UInt32 CFHashCode;
- typedef SInt32 CFIndex;
- #if !defined(__CFSTRING_STRUCT__)
- #define __CFSTRING_STRUCT__ 1
- typedef const struct __CFString * CFStringRef;
- typedef struct __CFString * CFMutableStringRef;
- #endif
- /* Values returned from comparison functions */
- enum CFComparisonResult {
- kCFCompareLessThan = -1,
- kCFCompareEqualTo = 0,
- kCFCompareGreaterThan = 1
- };
- typedef enum CFComparisonResult CFComparisonResult;
- /* A standard comparison function */
- typedef CALLBACK_API_C( CFComparisonResult , CFComparatorFunction )(const void *val1, const void *val2, void *context);
- /* Constant used by some functions to indicate failed searches. */
- /* This is of type CFIndex. */
- enum {
- kCFNotFound = -1
- };
- /* Range type */
- struct CFRange {
- CFIndex location;
- CFIndex length;
- };
- typedef struct CFRange CFRange;
- #if defined(CF_INLINE)
- CF_INLINE CFRange CFRangeMake(CFIndex loc, CFIndex len) {
- CFRange range;
- range.location = loc;
- range.length = len;
- return range;
- }
- #else
- #define CFRangeMake(LOC, LEN) __CFRangeMake(LOC, LEN)
- #endif
- EXTERN_API_C( CFRange )
- __CFRangeMake (CFIndex loc,
- CFIndex len);
- /* Private; do not use */
- /* Allocator API
- Most of the time when specifying an allocator to Create functions, the NULL
- argument indicates "use the default"; this is the same as using kCFAllocatorDefault
- or the return value from CFAllocatorGetDefault(). This assures that you will use
- the allocator in effect at that time.
-
- You should rarely use kCFAllocatorSystemDefault, the default default allocator.
- */
- typedef const struct __CFAllocator * CFAllocatorRef;
- /* This is a synonym for NULL, if you'd rather use a named constant. */
- extern const CFAllocatorRef kCFAllocatorDefault;
- /* Default system allocator. */
- extern const CFAllocatorRef kCFAllocatorSystemDefault;
- /* Null allocator which does nothing and allocates no memory. */
- extern const CFAllocatorRef kCFAllocatorNull;
- /* Special allocator argument to CFAllocatorCreate() which means
- "use the functions given in the context to allocate the allocator itself as well".
- */
- extern const CFAllocatorRef kCFAllocatorUseContext;
- typedef CALLBACK_API_C( const void *, CFAllocatorRetainCallBack )(const void *info);
- typedef CALLBACK_API_C( void , CFAllocatorReleaseCallBack )(const void *info);
- typedef CALLBACK_API_C( CFStringRef , CFAllocatorCopyDescriptionCallBack )(const void *info);
- typedef CALLBACK_API_C( void *, CFAllocatorAllocateCallBack )(CFIndex allocSize, CFOptionFlags hint, void *info);
- typedef CALLBACK_API_C( void *, CFAllocatorReallocateCallBack )(void *ptr, CFIndex newsize, CFOptionFlags hint, void *info);
- typedef CALLBACK_API_C( void , CFAllocatorDeallocateCallBack )(void *ptr, void *info);
- typedef CALLBACK_API_C( CFIndex , CFAllocatorPreferredSizeCallBack )(CFIndex size, CFOptionFlags hint, void *info);
- struct CFAllocatorContext {
- CFIndex version;
- void * info;
- CFAllocatorRetainCallBack retain;
- CFAllocatorReleaseCallBack release;
- CFAllocatorCopyDescriptionCallBack copyDescription;
- CFAllocatorAllocateCallBack allocate;
- CFAllocatorReallocateCallBack reallocate;
- CFAllocatorDeallocateCallBack deallocate;
- CFAllocatorPreferredSizeCallBack preferredSize;
- };
- typedef struct CFAllocatorContext CFAllocatorContext;
- EXTERN_API_C( CFTypeID )
- CFAllocatorGetTypeID (void);
- /* CFAllocatorSetDefault() sets the allocator that is used in the current thread
- whenever NULL is specified as an allocator argument. This means that most, if
- not all allocations will go through this allocator. It also means that any
- allocator set as the default needs to be ready to deal with arbitrary memory
- allocation requests; in addition, the size and number of requests will change
- between releases.
- If you wish to use a custom allocator in a context, it's best to provide it as
- the argument to the various creation functions rather than setting it as the
- default. Setting the default allocator is not encouraged.
- If you do set an allocator as the default, either do it for all time in your
- app, or do it in a nested fashion (by restoring the previous allocator when
- you exit your context). The latter might be appropriate for plug-ins or
- libraries that wish to set the default allocator.
- */
- EXTERN_API_C( void )
- CFAllocatorSetDefault (CFAllocatorRef allocator);
- EXTERN_API_C( CFAllocatorRef )
- CFAllocatorGetDefault (void);
- EXTERN_API_C( CFAllocatorRef )
- CFAllocatorCreate (CFAllocatorRef allocator,
- CFAllocatorContext * context);
- EXTERN_API_C( void *)
- CFAllocatorAllocate (CFAllocatorRef allocator,
- CFIndex size,
- CFOptionFlags hint);
- EXTERN_API_C( void *)
- CFAllocatorReallocate (CFAllocatorRef allocator,
- void * ptr,
- CFIndex newsize,
- CFOptionFlags hint);
- EXTERN_API_C( void )
- CFAllocatorDeallocate (CFAllocatorRef allocator,
- void * ptr);
- EXTERN_API_C( CFIndex )
- CFAllocatorGetPreferredSizeForSize (CFAllocatorRef allocator,
- CFIndex size,
- CFOptionFlags hint);
- EXTERN_API_C( void )
- CFAllocatorGetContext (CFAllocatorRef allocator,
- CFAllocatorContext * context);
- /* Base "type" of all "CF objects", and polymorphic functions on them */
- typedef const void * CFTypeRef;
- EXTERN_API_C( CFTypeID )
- CFGetTypeID (CFTypeRef cf);
- EXTERN_API_C( CFStringRef )
- CFCopyTypeIDDescription (CFTypeID theType);
- EXTERN_API_C( CFTypeRef )
- CFRetain (CFTypeRef cf);
- EXTERN_API_C( void )
- CFRelease (CFTypeRef cf);
- EXTERN_API_C( CFIndex )
- CFGetRetainCount (CFTypeRef cf);
- EXTERN_API_C( Boolean )
- CFEqual (CFTypeRef cf1,
- CFTypeRef cf2);
- EXTERN_API_C( CFHashCode )
- CFHash (CFTypeRef cf);
- EXTERN_API_C( CFStringRef )
- CFCopyDescription (CFTypeRef cf);
- EXTERN_API_C( CFAllocatorRef )
- CFGetAllocator (CFTypeRef cf);
- #if PRAGMA_ENUM_ALWAYSINT
- #pragma enumsalwaysint reset
- #ifdef __CFBASE__RESTORE_TWOBYTEINTS
- #pragma fourbyteints off
- #endif
- #elif PRAGMA_ENUM_OPTIONS
- #pragma option enum=reset
- #elif defined(__CFBASE__RESTORE_PACKED_ENUMS)
- #pragma options(pack_enums)
- #endif
- #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 /* __CFBASE__ */