Example of how to create a new CF class.
#include <CoreFoundation/CFBase.h>
#include <CoreFoundation/CFRuntime.h>
#include <CoreFoundation/CFString.h>
#include "EXUInt32.h"
struct __EXUInt32
{
CFRuntimeBase _parent;
UInt32 _value;
};
static Boolean
EXUInt32Equal (CFTypeRef cf1, CFTypeRef cf2)
{
EXUInt32Ref u1 = (EXUInt32Ref) cf1;
EXUInt32Ref u2 = (EXUInt32Ref) cf2;
if (u1->_value == u2->_value)
return true;
return false;
}
EXUInt32Hash (CFTypeRef cf)
{
EXUInt32Ref u = (EXUInt32Ref) cf;
}
static CFStringRef
EXUInt32CopyFormattingDesc (CFTypeRef cf, CFDictionaryRef formatOpts)
{
EXUInt32Ref u = (EXUInt32Ref) cf;
CFSTR (
"%u"), (
unsigned int) u->_value);
}
static CFStringRef
EXUInt32CopyDebugDesc (CFTypeRef cf)
{
EXUInt32Ref u = (EXUInt32Ref) cf;
CFSTR (
"<EXUInt32 %p [%p]>{ value = %u }"),
u, CFGetAllocator (u),
(unsigned int) u->_value);
}
static void
EXUInt32Finalize (CFTypeRef cf)
{
}
static CFTypeID _kEXUInt32TypeID = _kCFRuntimeNotATypeID;
static const CFRuntimeClass _kEXRangeClass = {
0,
"EXUInt32",
NULL,
NULL,
EXUInt32Finalize,
EXUInt32Equal,
EXUInt32Hash,
EXUInt32CopyFormattingDesc,
EXUInt32CopyDebugDesc,
NULL,
NULL
};
void
__EXUInt32ClassInitialize (void)
{
}
CFTypeID
EXUInt32GetTypeID (void)
{
return _kEXUInt32TypeID;
}
EXUInt32Ref
{
struct __EXUInt32 *new;
#define EXUINT32_EXTRA sizeof (struct __EXUInt32) - sizeof (CFRuntimeBase)
EXUINT32REF_EXTRA,
NULL);
if (new)
{
new->_value = value;
}
return new;
}
UInt32
EXUInt32GetValue (EXUInt32Ref u)
{
return u->_value;
}
unsigned long CFHashCode
Definition CFBase.h:159
const struct __CFAllocator * CFAllocatorRef
A reference to a CFAllocator object.
Definition CFBase.h:301
CFAllocatorRef kCFAllocatorDefault
Definition CFBase.h:334
CFTypeID _CFRuntimeRegisterClass(const CFRuntimeClass *const cls)
CFTypeRef _CFRuntimeCreateInstance(CFAllocatorRef allocator, CFTypeID typeID, CFIndex extraBytes, unsigned char *category)
#define CFSTR(x)
Creates a constant string object.
Definition CFString.h:107