CFBase.h
上传用户:xjjlds
上传日期:2015-12-05
资源大小:22823k
文件大小:10k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. /*
  2.      File:       CFBase.h
  3.  
  4.      Contains:   CoreFoundation base types
  5.  
  6.      Version:    Technology: Mac OS X
  7.                  Release:    QuickTime 6.0.2
  8.  
  9.      Copyright:  (c) 1999-2001 by Apple Computer, Inc., all rights reserved
  10.  
  11.      Bugs?:      For bug reports, consult the following page on
  12.                  the World Wide Web:
  13.  
  14.                      http://developer.apple.com/bugreporter/
  15.  
  16. */
  17. #ifndef __CFBASE__
  18. #define __CFBASE__
  19. #ifndef __MACTYPES__
  20. #include "MacTypes.h"
  21. #endif
  22. #if !defined(TRUE)
  23.     #define TRUE    1
  24. #endif
  25.    
  26. #if !defined(FALSE)
  27.     #define FALSE  0
  28. #endif
  29. #if defined(__WIN32__)
  30.     #undef CF_EXPORT
  31.     #if defined(CF_BUILDING_CF)
  32.         #define CF_EXPORT __declspec(dllexport) extern
  33.     #else
  34.         #define CF_EXPORT __declspec(dllimport) extern
  35.     #endif
  36. #elif defined(macintosh)
  37.     #if defined(__MWERKS__)
  38.         #define CF_EXPORT __declspec(export) extern
  39.     #endif
  40. #endif
  41. #if !defined(CF_EXPORT)
  42.     #define CF_EXPORT extern
  43. #endif
  44. #if !defined(CF_INLINE)
  45.     #if defined(__GNUC__)
  46.         #define CF_INLINE static __inline__
  47.     #elif defined(__MWERKS__)
  48.         #define CF_INLINE static inline
  49.     #endif
  50. #endif
  51. #if PRAGMA_ONCE
  52. #pragma once
  53. #endif
  54. #ifdef __cplusplus
  55. extern "C" {
  56. #endif
  57. #if PRAGMA_IMPORT
  58. #pragma import on
  59. #endif
  60. #if PRAGMA_STRUCT_ALIGN
  61.     #pragma options align=mac68k
  62. #elif PRAGMA_STRUCT_PACKPUSH
  63.     #pragma pack(push, 2)
  64. #elif PRAGMA_STRUCT_PACK
  65.     #pragma pack(2)
  66. #endif
  67. #if PRAGMA_ENUM_ALWAYSINT
  68.     #if defined(__fourbyteints__) && !__fourbyteints__ 
  69.         #define __CFBASE__RESTORE_TWOBYTEINTS
  70.         #pragma fourbyteints on
  71.     #endif
  72.     #pragma enumsalwaysint on
  73. #elif PRAGMA_ENUM_OPTIONS
  74.     #pragma option enum=int
  75. #elif PRAGMA_ENUM_PACK
  76.     #if __option(pack_enums)
  77.         #define __CFBASE__RESTORE_PACKED_ENUMS
  78.         #pragma options(!pack_enums)
  79.     #endif
  80. #endif
  81. typedef UInt32                          CFTypeID;
  82. typedef UInt32                          CFOptionFlags;
  83. typedef UInt32                          CFHashCode;
  84. typedef SInt32                          CFIndex;
  85. #if !defined(__CFSTRING_STRUCT__)
  86.     #define __CFSTRING_STRUCT__ 1
  87.     typedef const struct __CFString * CFStringRef;
  88.     typedef struct __CFString * CFMutableStringRef;
  89. #endif
  90. /* Values returned from comparison functions */
  91. enum CFComparisonResult {
  92.     kCFCompareLessThan          = -1,
  93.     kCFCompareEqualTo           = 0,
  94.     kCFCompareGreaterThan       = 1
  95. };
  96. typedef enum CFComparisonResult CFComparisonResult;
  97. /* A standard comparison function */
  98. typedef CALLBACK_API_C( CFComparisonResult , CFComparatorFunction )(const void *val1, const void *val2, void *context);
  99. /* Constant used by some functions to indicate failed searches. */
  100. /* This is of type CFIndex. */
  101. enum {
  102.     kCFNotFound                 = -1
  103. };
  104. /* Range type */
  105. struct CFRange {
  106.     CFIndex                         location;
  107.     CFIndex                         length;
  108. };
  109. typedef struct CFRange                  CFRange;
  110. #if defined(CF_INLINE)
  111. CF_INLINE CFRange CFRangeMake(CFIndex loc, CFIndex len) {
  112.     CFRange range;
  113.     range.location = loc;
  114.     range.length = len;
  115.     return range;
  116. }
  117. #else
  118. #define CFRangeMake(LOC, LEN) __CFRangeMake(LOC, LEN)
  119. #endif
  120. EXTERN_API_C( CFRange )
  121. __CFRangeMake                   (CFIndex                loc,
  122.                                  CFIndex                len);
  123. /* Private; do not use */
  124. /* Allocator API
  125.    Most of the time when specifying an allocator to Create functions, the NULL 
  126.    argument indicates "use the default"; this is the same as using kCFAllocatorDefault 
  127.    or the return value from CFAllocatorGetDefault().  This assures that you will use 
  128.    the allocator in effect at that time.
  129.    
  130.    You should rarely use kCFAllocatorSystemDefault, the default default allocator.
  131. */
  132. typedef const struct __CFAllocator * CFAllocatorRef;
  133. /* This is a synonym for NULL, if you'd rather use a named constant. */
  134. extern const CFAllocatorRef kCFAllocatorDefault;
  135. /* Default system allocator. */
  136. extern const CFAllocatorRef kCFAllocatorSystemDefault;
  137. /* Null allocator which does nothing and allocates no memory. */
  138. extern const CFAllocatorRef kCFAllocatorNull;
  139. /* Special allocator argument to CFAllocatorCreate() which means
  140.    "use the functions given in the context to allocate the allocator itself as well". 
  141. */
  142. extern const CFAllocatorRef kCFAllocatorUseContext;
  143. typedef CALLBACK_API_C( const void *, CFAllocatorRetainCallBack )(const void *info);
  144. typedef CALLBACK_API_C( void , CFAllocatorReleaseCallBack )(const void *info);
  145. typedef CALLBACK_API_C( CFStringRef , CFAllocatorCopyDescriptionCallBack )(const void *info);
  146. typedef CALLBACK_API_C( void *, CFAllocatorAllocateCallBack )(CFIndex allocSize, CFOptionFlags hint, void *info);
  147. typedef CALLBACK_API_C( void *, CFAllocatorReallocateCallBack )(void *ptr, CFIndex newsize, CFOptionFlags hint, void *info);
  148. typedef CALLBACK_API_C( void , CFAllocatorDeallocateCallBack )(void *ptr, void *info);
  149. typedef CALLBACK_API_C( CFIndex , CFAllocatorPreferredSizeCallBack )(CFIndex size, CFOptionFlags hint, void *info);
  150. struct CFAllocatorContext {
  151.     CFIndex                         version;
  152.     void *                          info;
  153.     CFAllocatorRetainCallBack       retain;
  154.     CFAllocatorReleaseCallBack      release;
  155.     CFAllocatorCopyDescriptionCallBack  copyDescription;
  156.     CFAllocatorAllocateCallBack     allocate;
  157.     CFAllocatorReallocateCallBack   reallocate;
  158.     CFAllocatorDeallocateCallBack   deallocate;
  159.     CFAllocatorPreferredSizeCallBack  preferredSize;
  160. };
  161. typedef struct CFAllocatorContext       CFAllocatorContext;
  162. EXTERN_API_C( CFTypeID )
  163. CFAllocatorGetTypeID            (void);
  164. /* CFAllocatorSetDefault() sets the allocator that is used in the current thread
  165.    whenever NULL is specified as an allocator argument. This means that most, if
  166.    not all allocations will go through this allocator. It also means that any
  167.    allocator set as the default needs to be ready to deal with arbitrary memory
  168.    allocation requests; in addition, the size and number of requests will change
  169.    between releases.
  170.    If you wish to use a custom allocator in a context, it's best to provide it as
  171.    the argument to the various creation functions rather than setting it as the
  172.    default. Setting the default allocator is not encouraged.
  173.    If you do set an allocator as the default, either do it for all time in your
  174.    app, or do it in a nested fashion (by restoring the previous allocator when
  175.    you exit your context). The latter might be appropriate for plug-ins or
  176.    libraries that wish to set the default allocator.
  177. */
  178. EXTERN_API_C( void )
  179. CFAllocatorSetDefault           (CFAllocatorRef         allocator);
  180. EXTERN_API_C( CFAllocatorRef )
  181. CFAllocatorGetDefault           (void);
  182. EXTERN_API_C( CFAllocatorRef )
  183. CFAllocatorCreate               (CFAllocatorRef         allocator,
  184.                                  CFAllocatorContext *   context);
  185. EXTERN_API_C( void *)
  186. CFAllocatorAllocate             (CFAllocatorRef         allocator,
  187.                                  CFIndex                size,
  188.                                  CFOptionFlags          hint);
  189. EXTERN_API_C( void *)
  190. CFAllocatorReallocate           (CFAllocatorRef         allocator,
  191.                                  void *                 ptr,
  192.                                  CFIndex                newsize,
  193.                                  CFOptionFlags          hint);
  194. EXTERN_API_C( void )
  195. CFAllocatorDeallocate           (CFAllocatorRef         allocator,
  196.                                  void *                 ptr);
  197. EXTERN_API_C( CFIndex )
  198. CFAllocatorGetPreferredSizeForSize (CFAllocatorRef      allocator,
  199.                                  CFIndex                size,
  200.                                  CFOptionFlags          hint);
  201. EXTERN_API_C( void )
  202. CFAllocatorGetContext           (CFAllocatorRef         allocator,
  203.                                  CFAllocatorContext *   context);
  204. /* Base "type" of all "CF objects", and polymorphic functions on them */
  205. typedef const void *                    CFTypeRef;
  206. EXTERN_API_C( CFTypeID )
  207. CFGetTypeID                     (CFTypeRef              cf);
  208. EXTERN_API_C( CFStringRef )
  209. CFCopyTypeIDDescription         (CFTypeID               theType);
  210. EXTERN_API_C( CFTypeRef )
  211. CFRetain                        (CFTypeRef              cf);
  212. EXTERN_API_C( void )
  213. CFRelease                       (CFTypeRef              cf);
  214. EXTERN_API_C( CFIndex )
  215. CFGetRetainCount                (CFTypeRef              cf);
  216. EXTERN_API_C( Boolean )
  217. CFEqual                         (CFTypeRef              cf1,
  218.                                  CFTypeRef              cf2);
  219. EXTERN_API_C( CFHashCode )
  220. CFHash                          (CFTypeRef              cf);
  221. EXTERN_API_C( CFStringRef )
  222. CFCopyDescription               (CFTypeRef              cf);
  223. EXTERN_API_C( CFAllocatorRef )
  224. CFGetAllocator                  (CFTypeRef              cf);
  225. #if PRAGMA_ENUM_ALWAYSINT
  226.     #pragma enumsalwaysint reset
  227.     #ifdef __CFBASE__RESTORE_TWOBYTEINTS
  228.         #pragma fourbyteints off
  229.     #endif
  230. #elif PRAGMA_ENUM_OPTIONS
  231.     #pragma option enum=reset
  232. #elif defined(__CFBASE__RESTORE_PACKED_ENUMS)
  233.     #pragma options(pack_enums)
  234. #endif
  235. #if PRAGMA_STRUCT_ALIGN
  236.     #pragma options align=reset
  237. #elif PRAGMA_STRUCT_PACKPUSH
  238.     #pragma pack(pop)
  239. #elif PRAGMA_STRUCT_PACK
  240.     #pragma pack()
  241. #endif
  242. #ifdef PRAGMA_IMPORT_OFF
  243. #pragma import off
  244. #elif PRAGMA_IMPORT
  245. #pragma import reset
  246. #endif
  247. #ifdef __cplusplus
  248. }
  249. #endif
  250. #endif /* __CFBASE__ */