/* File: DiscRecording/DRCoreObject.h Contains: Core object functionality for Disc Recording. Version: Technology: Mac OS X Release: Mac OS X Copyright: (c) 2002-2007 Apple Inc. All Rights Reserved. Bugs?: For bug reports, consult the following page on the World Wide Web: http://developer.apple.com/bugreporter/ */ /*! @header @abstract Base types for Disc Recording Core object references. @discussion These types are for use in polymorphic functions and as general-purpose type identifiers. */ #ifndef _H_DRCoreObject #define _H_DRCoreObject #if PRAGMA_ONCE #pragma once #endif #ifndef __CORESERVICES__ #include <CoreServices/CoreServices.h> #endif #ifndef __AVAILABILITYMACROS__ #include <AvailabilityMacros.h> #endif #if defined(__cplusplus) extern "C" { #endif /*! @typedef DRTypeRef @abstract An untyped, generic reference to any Disc Recording object. @discussion @link DRTypeRef DRTypeRef @/link is one of the base types defined in Disc Recording, used as a placeholder for parameter and return type in several polymorphic functions. It is a generic object reference that can take a reference to any other Disc Recording object. */ typedef CFTypeRef DRTypeRef; /*! @typedef DRRefConRetainCallback @abstract A callback used by a Disc Recording object to obtain ownership of its <tt>refCon</tt> (reference context) data. @discussion If you name your function <tt>MyDRRefConRetainCallback</tt>, you would declare it like this: <pre> void MyDRRefConRetainCallback (void *refCon); </pre> This callback returns the value to store as the reference context for a Disc Recording object, typically the <tt>refCon</tt> parameter passed to the callback -- but your callback may return any value as the reference context. */ typedef const void* (*DRRefConRetainCallback)(const void *refCon); /*! @typedef DRRefConReleaseCallback @abstract A callback used by a Disc Recording object to relinquish ownership of its <tt>refCon</tt> (reference context) data. @discussion If you name your function <tt>MyDRRefConReleaseCallback</tt>, you would declare it like this: <pre> void MyDRRefConReleaseCallback (void *refCon); </pre> */ typedef void (*DRRefConReleaseCallback)(const void *refCon); /*! @struct DRRefConCallbacks @abstract Contains a set of callbacks for use by a Disc Recording object in managing its reference context. @field version The version of this structure. The value must be a known version, or zero. @field retain An optional callback used by a Disc Recording object to retain its reference context. When <tt>NULL</tt>, the Disc Recording object will not retain the reference context when set. @field release An optional callback used by a Disc Recording object to remove a retain previously added for its reference context. When <tt>NULL</tt>, the Disc Recording objecting will not release its reference context when the object is destroyed or when a new reference context value is set. */ struct DRRefConCallbacks { unsigned long version; DRRefConRetainCallback retain; DRRefConReleaseCallback release; }; typedef struct DRRefConCallbacks DRRefConCallbacks; /*! @constant kDRRefConCFTypeCallbacks @abstract A predefined @link DRRefConCallbacks DRRefConCallbacks @/link structure containing a set of callbacks appropriate for use when the reference context is a <tt>CFType</tt> object. */ extern const DRRefConCallbacks kDRRefConCFTypeCallbacks; /*! @function DRSetRefCon @abstract Sets the Disc Recording object's reference context value. @param ref A generic reference to any Disc Recording object whose reference context you want to set. @param refCon The reference context value to set for the Disc Recording object. If the the Disc Recording object's reference context is not <tt>NULL</tt> when a new value is set, the previous <tt>refCon</tt> value will be released using the release callback previously set, if any. The new <tt>refCon</tt> value will be retained by the Disc Recording object using the retain callback previously set, if any. You may pass a value of <tt>NULL</tt>, which results in the Disc Recording object having no value in its reference context. @param callbacks A pointer to a @link DRRefConCallbacks DRRefConCallbacks @/link structure initialized with the callbacks for the Disc Recording object to use on its reference context. A copy of the contents of the callbacks structure is made, so that a pointer to a structure on the stack can be passed in, or can be reused for multiple object references. If the structure's version field does not contain a known value, this function's behavior is undefined. The <tt>retain</tt> field may be <tt>NULL</tt>, in which case the Disc Recording object will not retain the reference context when set. The <tt>release</tt> field may also be <tt>NULL</tt>, in which case the Disc Recording object will not release its reference context when the object is destroyed or when a new reference context value is set. If this parameter itself is <tt>NULL</tt>, this function behaves as if a valid structure of version 0 and with all fields <tt>NULL</tt> had been passed in. If any of the callback structure's fields are not valid pointers to functions of the correct type, or if this parameter is not a valid pointer to a @link DRRefConCallbacks DRRefConCallbacks @/link callbacks structure, this function's behavior is undefined. */ extern void DRSetRefCon(DRTypeRef ref, void* refCon, const DRRefConCallbacks* callbacks) AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER; /*! @function DRGetRefCon @abstract Gets the Disc Recording object's reference context value. @param ref A generic reference to any Disc Recording object whose <tt>refCon</tt> value you want to get. @result The value currently stored in the Disc Recording object's reference context. */ extern void* DRGetRefCon(DRTypeRef ref) AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER; /*! @function DRCopyLocalizedStringForValue @abstract Maps a framework key to a localized string. @discussion If a localized string cannot be found, this function returns the specified value as a string @param value The key/string to be localized @result A value of type CFStringRef which contains the localized string. */ extern CFStringRef DRCopyLocalizedStringForValue(CFStringRef value) AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER; #if defined(__cplusplus) } #endif #endif /* _H_DRCoreObject */