symbian-qemu-0.9.1-12/python-2.6.1/Mac/Modules/cf/_CFmodule.c
author johnathan.white@2718R8BGH51.accenture.com
Mon, 08 Mar 2010 18:45:03 +0000
changeset 46 b6935a90ca64
parent 1 2fb8b9db1c86
permissions -rw-r--r--
Modify framebuffer and NGA framebuffer to read screen size from board model dtb file. Optimise memory usuage of frame buffer Add example minigui application with hooks to profiler (which writes results to S:\). Modified NGA framebuffer to run its own dfc queue at high priority


/* =========================== Module _CF =========================== */

#include "Python.h"



#include "pymactoolbox.h"

/* Macro to test whether a weak-loaded CFM function exists */
#define PyMac_PRECHECK(rtn) do { if ( &rtn == NULL )  {\
        PyErr_SetString(PyExc_NotImplementedError, \
        "Not available in this shared library/OS version"); \
        return NULL; \
    }} while(0)


#include <CoreServices/CoreServices.h>

#include "pycfbridge.h"

#ifdef USE_TOOLBOX_OBJECT_GLUE
extern PyObject *_CFObj_New(CFTypeRef);
extern int _CFObj_Convert(PyObject *, CFTypeRef *);
#define CFObj_New _CFObj_New
#define CFObj_Convert _CFObj_Convert

extern PyObject *_CFTypeRefObj_New(CFTypeRef);
extern int _CFTypeRefObj_Convert(PyObject *, CFTypeRef *);
#define CFTypeRefObj_New _CFTypeRefObj_New
#define CFTypeRefObj_Convert _CFTypeRefObj_Convert

extern PyObject *_CFStringRefObj_New(CFStringRef);
extern int _CFStringRefObj_Convert(PyObject *, CFStringRef *);
#define CFStringRefObj_New _CFStringRefObj_New
#define CFStringRefObj_Convert _CFStringRefObj_Convert

extern PyObject *_CFMutableStringRefObj_New(CFMutableStringRef);
extern int _CFMutableStringRefObj_Convert(PyObject *, CFMutableStringRef *);
#define CFMutableStringRefObj_New _CFMutableStringRefObj_New
#define CFMutableStringRefObj_Convert _CFMutableStringRefObj_Convert

extern PyObject *_CFArrayRefObj_New(CFArrayRef);
extern int _CFArrayRefObj_Convert(PyObject *, CFArrayRef *);
#define CFArrayRefObj_New _CFArrayRefObj_New
#define CFArrayRefObj_Convert _CFArrayRefObj_Convert

extern PyObject *_CFMutableArrayRefObj_New(CFMutableArrayRef);
extern int _CFMutableArrayRefObj_Convert(PyObject *, CFMutableArrayRef *);
#define CFMutableArrayRefObj_New _CFMutableArrayRefObj_New
#define CFMutableArrayRefObj_Convert _CFMutableArrayRefObj_Convert

extern PyObject *_CFDataRefObj_New(CFDataRef);
extern int _CFDataRefObj_Convert(PyObject *, CFDataRef *);
#define CFDataRefObj_New _CFDataRefObj_New
#define CFDataRefObj_Convert _CFDataRefObj_Convert

extern PyObject *_CFMutableDataRefObj_New(CFMutableDataRef);
extern int _CFMutableDataRefObj_Convert(PyObject *, CFMutableDataRef *);
#define CFMutableDataRefObj_New _CFMutableDataRefObj_New
#define CFMutableDataRefObj_Convert _CFMutableDataRefObj_Convert

extern PyObject *_CFDictionaryRefObj_New(CFDictionaryRef);
extern int _CFDictionaryRefObj_Convert(PyObject *, CFDictionaryRef *);
#define CFDictionaryRefObj_New _CFDictionaryRefObj_New
#define CFDictionaryRefObj_Convert _CFDictionaryRefObj_Convert

extern PyObject *_CFMutableDictionaryRefObj_New(CFMutableDictionaryRef);
extern int _CFMutableDictionaryRefObj_Convert(PyObject *, CFMutableDictionaryRef *);
#define CFMutableDictionaryRefObj_New _CFMutableDictionaryRefObj_New
#define CFMutableDictionaryRefObj_Convert _CFMutableDictionaryRefObj_Convert

extern PyObject *_CFURLRefObj_New(CFURLRef);
extern int _CFURLRefObj_Convert(PyObject *, CFURLRef *);
extern int _OptionalCFURLRefObj_Convert(PyObject *, CFURLRef *);
#define CFURLRefObj_New _CFURLRefObj_New
#define CFURLRefObj_Convert _CFURLRefObj_Convert
#define OptionalCFURLRefObj_Convert _OptionalCFURLRefObj_Convert
#endif

/*
** Parse/generate CFRange records
*/
PyObject *CFRange_New(CFRange *itself)
{

        return Py_BuildValue("ll", (long)itself->location, (long)itself->length);
}

int
CFRange_Convert(PyObject *v, CFRange *p_itself)
{
        long location, length;

        if( !PyArg_ParseTuple(v, "ll", &location, &length) )
                return 0;
        p_itself->location = (CFIndex)location;
        p_itself->length = (CFIndex)length;
        return 1;
}

/* Optional CFURL argument or None (passed as NULL) */
int
OptionalCFURLRefObj_Convert(PyObject *v, CFURLRef *p_itself)
{
    if ( v == Py_None ) {
        p_itself = NULL;
        return 1;
    }
    return CFURLRefObj_Convert(v, p_itself);
}

static PyObject *CF_Error;

/* --------------------- Object type CFTypeRef ---------------------- */

PyTypeObject CFTypeRef_Type;

#define CFTypeRefObj_Check(x) ((x)->ob_type == &CFTypeRef_Type || PyObject_TypeCheck((x), &CFTypeRef_Type))

typedef struct CFTypeRefObject {
	PyObject_HEAD
	CFTypeRef ob_itself;
	void (*ob_freeit)(CFTypeRef ptr);
} CFTypeRefObject;

PyObject *CFTypeRefObj_New(CFTypeRef itself)
{
	CFTypeRefObject *it;
	if (itself == NULL)
	{
		PyErr_SetString(PyExc_RuntimeError, "cannot wrap NULL");
		return NULL;
	}
	it = PyObject_NEW(CFTypeRefObject, &CFTypeRef_Type);
	if (it == NULL) return NULL;
	it->ob_itself = itself;
	it->ob_freeit = CFRelease;
	return (PyObject *)it;
}

int CFTypeRefObj_Convert(PyObject *v, CFTypeRef *p_itself)
{

	if (v == Py_None) { *p_itself = NULL; return 1; }
	/* Check for other CF objects here */

	if (!CFTypeRefObj_Check(v))
	{
		PyErr_SetString(PyExc_TypeError, "CFTypeRef required");
		return 0;
	}
	*p_itself = ((CFTypeRefObject *)v)->ob_itself;
	return 1;
}

static void CFTypeRefObj_dealloc(CFTypeRefObject *self)
{
	if (self->ob_freeit && self->ob_itself)
	{
		self->ob_freeit((CFTypeRef)self->ob_itself);
		self->ob_itself = NULL;
	}
	self->ob_type->tp_free((PyObject *)self);
}

static PyObject *CFTypeRefObj_CFGetTypeID(CFTypeRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFTypeID _rv;
#ifndef CFGetTypeID
	PyMac_PRECHECK(CFGetTypeID);
#endif
	if (!PyArg_ParseTuple(_args, ""))
		return NULL;
	_rv = CFGetTypeID(_self->ob_itself);
	_res = Py_BuildValue("l",
	                     _rv);
	return _res;
}

static PyObject *CFTypeRefObj_CFRetain(CFTypeRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFTypeRef _rv;
#ifndef CFRetain
	PyMac_PRECHECK(CFRetain);
#endif
	if (!PyArg_ParseTuple(_args, ""))
		return NULL;
	_rv = CFRetain(_self->ob_itself);
	_res = Py_BuildValue("O&",
	                     CFTypeRefObj_New, _rv);
	return _res;
}

static PyObject *CFTypeRefObj_CFRelease(CFTypeRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
#ifndef CFRelease
	PyMac_PRECHECK(CFRelease);
#endif
	if (!PyArg_ParseTuple(_args, ""))
		return NULL;
	CFRelease(_self->ob_itself);
	Py_INCREF(Py_None);
	_res = Py_None;
	return _res;
}

static PyObject *CFTypeRefObj_CFGetRetainCount(CFTypeRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFIndex _rv;
#ifndef CFGetRetainCount
	PyMac_PRECHECK(CFGetRetainCount);
#endif
	if (!PyArg_ParseTuple(_args, ""))
		return NULL;
	_rv = CFGetRetainCount(_self->ob_itself);
	_res = Py_BuildValue("l",
	                     _rv);
	return _res;
}

static PyObject *CFTypeRefObj_CFEqual(CFTypeRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	Boolean _rv;
	CFTypeRef cf2;
#ifndef CFEqual
	PyMac_PRECHECK(CFEqual);
#endif
	if (!PyArg_ParseTuple(_args, "O&",
	                      CFTypeRefObj_Convert, &cf2))
		return NULL;
	_rv = CFEqual(_self->ob_itself,
	              cf2);
	_res = Py_BuildValue("l",
	                     _rv);
	return _res;
}

static PyObject *CFTypeRefObj_CFHash(CFTypeRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFHashCode _rv;
#ifndef CFHash
	PyMac_PRECHECK(CFHash);
#endif
	if (!PyArg_ParseTuple(_args, ""))
		return NULL;
	_rv = CFHash(_self->ob_itself);
	_res = Py_BuildValue("l",
	                     _rv);
	return _res;
}

static PyObject *CFTypeRefObj_CFCopyDescription(CFTypeRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFStringRef _rv;
#ifndef CFCopyDescription
	PyMac_PRECHECK(CFCopyDescription);
#endif
	if (!PyArg_ParseTuple(_args, ""))
		return NULL;
	_rv = CFCopyDescription(_self->ob_itself);
	_res = Py_BuildValue("O&",
	                     CFStringRefObj_New, _rv);
	return _res;
}

static PyObject *CFTypeRefObj_CFPropertyListCreateXMLData(CFTypeRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFDataRef _rv;
	if (!PyArg_ParseTuple(_args, ""))
		return NULL;
	_rv = CFPropertyListCreateXMLData((CFAllocatorRef)NULL,
	                                  _self->ob_itself);
	_res = Py_BuildValue("O&",
	                     CFDataRefObj_New, _rv);
	return _res;
}

static PyObject *CFTypeRefObj_CFPropertyListCreateDeepCopy(CFTypeRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFTypeRef _rv;
	CFOptionFlags mutabilityOption;
	if (!PyArg_ParseTuple(_args, "l",
	                      &mutabilityOption))
		return NULL;
	_rv = CFPropertyListCreateDeepCopy((CFAllocatorRef)NULL,
	                                   _self->ob_itself,
	                                   mutabilityOption);
	_res = Py_BuildValue("O&",
	                     CFTypeRefObj_New, _rv);
	return _res;
}

static PyObject *CFTypeRefObj_CFShow(CFTypeRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
#ifndef CFShow
	PyMac_PRECHECK(CFShow);
#endif
	if (!PyArg_ParseTuple(_args, ""))
		return NULL;
	CFShow(_self->ob_itself);
	Py_INCREF(Py_None);
	_res = Py_None;
	return _res;
}

static PyObject *CFTypeRefObj_CFPropertyListCreateFromXMLData(CFTypeRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;

	CFTypeRef _rv;
	CFOptionFlags mutabilityOption;
	CFStringRef errorString;
	if (!PyArg_ParseTuple(_args, "l",
	                      &mutabilityOption))
	        return NULL;
	_rv = CFPropertyListCreateFromXMLData((CFAllocatorRef)NULL,
	                                      _self->ob_itself,
	                                      mutabilityOption,
	                                      &errorString);
	if (errorString)
	        CFRelease(errorString);
	if (_rv == NULL) {
	        PyErr_SetString(PyExc_RuntimeError, "Parse error in XML data");
	        return NULL;
	}
	_res = Py_BuildValue("O&",
	                     CFTypeRefObj_New, _rv);
	return _res;

}

static PyObject *CFTypeRefObj_toPython(CFTypeRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;

	_res = PyCF_CF2Python(_self->ob_itself);
	return _res;

}

static PyMethodDef CFTypeRefObj_methods[] = {
	{"CFGetTypeID", (PyCFunction)CFTypeRefObj_CFGetTypeID, 1,
	 PyDoc_STR("() -> (CFTypeID _rv)")},
	{"CFRetain", (PyCFunction)CFTypeRefObj_CFRetain, 1,
	 PyDoc_STR("() -> (CFTypeRef _rv)")},
	{"CFRelease", (PyCFunction)CFTypeRefObj_CFRelease, 1,
	 PyDoc_STR("() -> None")},
	{"CFGetRetainCount", (PyCFunction)CFTypeRefObj_CFGetRetainCount, 1,
	 PyDoc_STR("() -> (CFIndex _rv)")},
	{"CFEqual", (PyCFunction)CFTypeRefObj_CFEqual, 1,
	 PyDoc_STR("(CFTypeRef cf2) -> (Boolean _rv)")},
	{"CFHash", (PyCFunction)CFTypeRefObj_CFHash, 1,
	 PyDoc_STR("() -> (CFHashCode _rv)")},
	{"CFCopyDescription", (PyCFunction)CFTypeRefObj_CFCopyDescription, 1,
	 PyDoc_STR("() -> (CFStringRef _rv)")},
	{"CFPropertyListCreateXMLData", (PyCFunction)CFTypeRefObj_CFPropertyListCreateXMLData, 1,
	 PyDoc_STR("() -> (CFDataRef _rv)")},
	{"CFPropertyListCreateDeepCopy", (PyCFunction)CFTypeRefObj_CFPropertyListCreateDeepCopy, 1,
	 PyDoc_STR("(CFOptionFlags mutabilityOption) -> (CFTypeRef _rv)")},
	{"CFShow", (PyCFunction)CFTypeRefObj_CFShow, 1,
	 PyDoc_STR("() -> None")},
	{"CFPropertyListCreateFromXMLData", (PyCFunction)CFTypeRefObj_CFPropertyListCreateFromXMLData, 1,
	 PyDoc_STR("(CFOptionFlags mutabilityOption) -> (CFTypeRefObj)")},
	{"toPython", (PyCFunction)CFTypeRefObj_toPython, 1,
	 PyDoc_STR("() -> (python_object)")},
	{NULL, NULL, 0}
};

#define CFTypeRefObj_getsetlist NULL


static int CFTypeRefObj_compare(CFTypeRefObject *self, CFTypeRefObject *other)
{
	/* XXXX Or should we use CFEqual?? */
	if ( self->ob_itself > other->ob_itself ) return 1;
	if ( self->ob_itself < other->ob_itself ) return -1;
	return 0;
}

static PyObject * CFTypeRefObj_repr(CFTypeRefObject *self)
{
	char buf[100];
	sprintf(buf, "<CFTypeRef type-%d object at 0x%8.8x for 0x%8.8x>", (int)CFGetTypeID(self->ob_itself), (unsigned)self, (unsigned)self->ob_itself);
	return PyString_FromString(buf);
}

static int CFTypeRefObj_hash(CFTypeRefObject *self)
{
	/* XXXX Or should we use CFHash?? */
	return (int)self->ob_itself;
}
static int CFTypeRefObj_tp_init(PyObject *_self, PyObject *_args, PyObject *_kwds)
{
	CFTypeRef itself;
	char *kw[] = {"itself", 0};

	if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFTypeRefObj_Convert, &itself))
	{
		((CFTypeRefObject *)_self)->ob_itself = itself;
		return 0;
	}
	return -1;
}

#define CFTypeRefObj_tp_alloc PyType_GenericAlloc

static PyObject *CFTypeRefObj_tp_new(PyTypeObject *type, PyObject *_args, PyObject *_kwds)
{
	PyObject *self;
	if ((self = type->tp_alloc(type, 0)) == NULL) return NULL;
	((CFTypeRefObject *)self)->ob_itself = NULL;
	((CFTypeRefObject *)self)->ob_freeit = CFRelease;
	return self;
}

#define CFTypeRefObj_tp_free PyObject_Del


PyTypeObject CFTypeRef_Type = {
	PyObject_HEAD_INIT(NULL)
	0, /*ob_size*/
	"_CF.CFTypeRef", /*tp_name*/
	sizeof(CFTypeRefObject), /*tp_basicsize*/
	0, /*tp_itemsize*/
	/* methods */
	(destructor) CFTypeRefObj_dealloc, /*tp_dealloc*/
	0, /*tp_print*/
	(getattrfunc)0, /*tp_getattr*/
	(setattrfunc)0, /*tp_setattr*/
	(cmpfunc) CFTypeRefObj_compare, /*tp_compare*/
	(reprfunc) CFTypeRefObj_repr, /*tp_repr*/
	(PyNumberMethods *)0, /* tp_as_number */
	(PySequenceMethods *)0, /* tp_as_sequence */
	(PyMappingMethods *)0, /* tp_as_mapping */
	(hashfunc) CFTypeRefObj_hash, /*tp_hash*/
	0, /*tp_call*/
	0, /*tp_str*/
	PyObject_GenericGetAttr, /*tp_getattro*/
	PyObject_GenericSetAttr, /*tp_setattro */
	0, /*tp_as_buffer*/
	Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */
	0, /*tp_doc*/
	0, /*tp_traverse*/
	0, /*tp_clear*/
	0, /*tp_richcompare*/
	0, /*tp_weaklistoffset*/
	0, /*tp_iter*/
	0, /*tp_iternext*/
	CFTypeRefObj_methods, /* tp_methods */
	0, /*tp_members*/
	CFTypeRefObj_getsetlist, /*tp_getset*/
	0, /*tp_base*/
	0, /*tp_dict*/
	0, /*tp_descr_get*/
	0, /*tp_descr_set*/
	0, /*tp_dictoffset*/
	CFTypeRefObj_tp_init, /* tp_init */
	CFTypeRefObj_tp_alloc, /* tp_alloc */
	CFTypeRefObj_tp_new, /* tp_new */
	CFTypeRefObj_tp_free, /* tp_free */
};

/* ------------------- End object type CFTypeRef -------------------- */


/* --------------------- Object type CFArrayRef --------------------- */

PyTypeObject CFArrayRef_Type;

#define CFArrayRefObj_Check(x) ((x)->ob_type == &CFArrayRef_Type || PyObject_TypeCheck((x), &CFArrayRef_Type))

typedef struct CFArrayRefObject {
	PyObject_HEAD
	CFArrayRef ob_itself;
	void (*ob_freeit)(CFTypeRef ptr);
} CFArrayRefObject;

PyObject *CFArrayRefObj_New(CFArrayRef itself)
{
	CFArrayRefObject *it;
	if (itself == NULL)
	{
		PyErr_SetString(PyExc_RuntimeError, "cannot wrap NULL");
		return NULL;
	}
	it = PyObject_NEW(CFArrayRefObject, &CFArrayRef_Type);
	if (it == NULL) return NULL;
	/* XXXX Should we tp_init or tp_new our basetype? */
	it->ob_itself = itself;
	it->ob_freeit = CFRelease;
	return (PyObject *)it;
}

int CFArrayRefObj_Convert(PyObject *v, CFArrayRef *p_itself)
{

	if (v == Py_None) { *p_itself = NULL; return 1; }
	/* Check for other CF objects here */

	if (!CFArrayRefObj_Check(v))
	{
		PyErr_SetString(PyExc_TypeError, "CFArrayRef required");
		return 0;
	}
	*p_itself = ((CFArrayRefObject *)v)->ob_itself;
	return 1;
}

static void CFArrayRefObj_dealloc(CFArrayRefObject *self)
{
	if (self->ob_freeit && self->ob_itself)
	{
		self->ob_freeit((CFTypeRef)self->ob_itself);
		self->ob_itself = NULL;
	}
	CFTypeRef_Type.tp_dealloc((PyObject *)self);
}

static PyObject *CFArrayRefObj_CFArrayCreateCopy(CFArrayRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFArrayRef _rv;
	if (!PyArg_ParseTuple(_args, ""))
		return NULL;
	_rv = CFArrayCreateCopy((CFAllocatorRef)NULL,
	                        _self->ob_itself);
	_res = Py_BuildValue("O&",
	                     CFArrayRefObj_New, _rv);
	return _res;
}

static PyObject *CFArrayRefObj_CFArrayGetCount(CFArrayRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFIndex _rv;
#ifndef CFArrayGetCount
	PyMac_PRECHECK(CFArrayGetCount);
#endif
	if (!PyArg_ParseTuple(_args, ""))
		return NULL;
	_rv = CFArrayGetCount(_self->ob_itself);
	_res = Py_BuildValue("l",
	                     _rv);
	return _res;
}

static PyObject *CFArrayRefObj_CFStringCreateByCombiningStrings(CFArrayRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFStringRef _rv;
	CFStringRef separatorString;
	if (!PyArg_ParseTuple(_args, "O&",
	                      CFStringRefObj_Convert, &separatorString))
		return NULL;
	_rv = CFStringCreateByCombiningStrings((CFAllocatorRef)NULL,
	                                       _self->ob_itself,
	                                       separatorString);
	_res = Py_BuildValue("O&",
	                     CFStringRefObj_New, _rv);
	return _res;
}

static PyMethodDef CFArrayRefObj_methods[] = {
	{"CFArrayCreateCopy", (PyCFunction)CFArrayRefObj_CFArrayCreateCopy, 1,
	 PyDoc_STR("() -> (CFArrayRef _rv)")},
	{"CFArrayGetCount", (PyCFunction)CFArrayRefObj_CFArrayGetCount, 1,
	 PyDoc_STR("() -> (CFIndex _rv)")},
	{"CFStringCreateByCombiningStrings", (PyCFunction)CFArrayRefObj_CFStringCreateByCombiningStrings, 1,
	 PyDoc_STR("(CFStringRef separatorString) -> (CFStringRef _rv)")},
	{NULL, NULL, 0}
};

#define CFArrayRefObj_getsetlist NULL


static int CFArrayRefObj_compare(CFArrayRefObject *self, CFArrayRefObject *other)
{
	/* XXXX Or should we use CFEqual?? */
	if ( self->ob_itself > other->ob_itself ) return 1;
	if ( self->ob_itself < other->ob_itself ) return -1;
	return 0;
}

static PyObject * CFArrayRefObj_repr(CFArrayRefObject *self)
{
	char buf[100];
	sprintf(buf, "<CFArrayRef object at 0x%8.8x for 0x%8.8x>", (unsigned)self, (unsigned)self->ob_itself);
	return PyString_FromString(buf);
}

static int CFArrayRefObj_hash(CFArrayRefObject *self)
{
	/* XXXX Or should we use CFHash?? */
	return (int)self->ob_itself;
}
static int CFArrayRefObj_tp_init(PyObject *_self, PyObject *_args, PyObject *_kwds)
{
	CFArrayRef itself;
	char *kw[] = {"itself", 0};

	if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFArrayRefObj_Convert, &itself))
	{
		((CFArrayRefObject *)_self)->ob_itself = itself;
		return 0;
	}

	/* Any CFTypeRef descendent is allowed as initializer too */
	if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFTypeRefObj_Convert, &itself))
	{
		((CFArrayRefObject *)_self)->ob_itself = itself;
		return 0;
	}
	return -1;
}

#define CFArrayRefObj_tp_alloc PyType_GenericAlloc

static PyObject *CFArrayRefObj_tp_new(PyTypeObject *type, PyObject *_args, PyObject *_kwds)
{
	PyObject *self;
	if ((self = type->tp_alloc(type, 0)) == NULL) return NULL;
	((CFArrayRefObject *)self)->ob_itself = NULL;
	((CFArrayRefObject *)self)->ob_freeit = CFRelease;
	return self;
}

#define CFArrayRefObj_tp_free PyObject_Del


PyTypeObject CFArrayRef_Type = {
	PyObject_HEAD_INIT(NULL)
	0, /*ob_size*/
	"_CF.CFArrayRef", /*tp_name*/
	sizeof(CFArrayRefObject), /*tp_basicsize*/
	0, /*tp_itemsize*/
	/* methods */
	(destructor) CFArrayRefObj_dealloc, /*tp_dealloc*/
	0, /*tp_print*/
	(getattrfunc)0, /*tp_getattr*/
	(setattrfunc)0, /*tp_setattr*/
	(cmpfunc) CFArrayRefObj_compare, /*tp_compare*/
	(reprfunc) CFArrayRefObj_repr, /*tp_repr*/
	(PyNumberMethods *)0, /* tp_as_number */
	(PySequenceMethods *)0, /* tp_as_sequence */
	(PyMappingMethods *)0, /* tp_as_mapping */
	(hashfunc) CFArrayRefObj_hash, /*tp_hash*/
	0, /*tp_call*/
	0, /*tp_str*/
	PyObject_GenericGetAttr, /*tp_getattro*/
	PyObject_GenericSetAttr, /*tp_setattro */
	0, /*tp_as_buffer*/
	Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */
	0, /*tp_doc*/
	0, /*tp_traverse*/
	0, /*tp_clear*/
	0, /*tp_richcompare*/
	0, /*tp_weaklistoffset*/
	0, /*tp_iter*/
	0, /*tp_iternext*/
	CFArrayRefObj_methods, /* tp_methods */
	0, /*tp_members*/
	CFArrayRefObj_getsetlist, /*tp_getset*/
	0, /*tp_base*/
	0, /*tp_dict*/
	0, /*tp_descr_get*/
	0, /*tp_descr_set*/
	0, /*tp_dictoffset*/
	CFArrayRefObj_tp_init, /* tp_init */
	CFArrayRefObj_tp_alloc, /* tp_alloc */
	CFArrayRefObj_tp_new, /* tp_new */
	CFArrayRefObj_tp_free, /* tp_free */
};

/* ------------------- End object type CFArrayRef ------------------- */


/* ----------------- Object type CFMutableArrayRef ------------------ */

PyTypeObject CFMutableArrayRef_Type;

#define CFMutableArrayRefObj_Check(x) ((x)->ob_type == &CFMutableArrayRef_Type || PyObject_TypeCheck((x), &CFMutableArrayRef_Type))

typedef struct CFMutableArrayRefObject {
	PyObject_HEAD
	CFMutableArrayRef ob_itself;
	void (*ob_freeit)(CFTypeRef ptr);
} CFMutableArrayRefObject;

PyObject *CFMutableArrayRefObj_New(CFMutableArrayRef itself)
{
	CFMutableArrayRefObject *it;
	if (itself == NULL)
	{
		PyErr_SetString(PyExc_RuntimeError, "cannot wrap NULL");
		return NULL;
	}
	it = PyObject_NEW(CFMutableArrayRefObject, &CFMutableArrayRef_Type);
	if (it == NULL) return NULL;
	/* XXXX Should we tp_init or tp_new our basetype? */
	it->ob_itself = itself;
	it->ob_freeit = CFRelease;
	return (PyObject *)it;
}

int CFMutableArrayRefObj_Convert(PyObject *v, CFMutableArrayRef *p_itself)
{

	if (v == Py_None) { *p_itself = NULL; return 1; }
	/* Check for other CF objects here */

	if (!CFMutableArrayRefObj_Check(v))
	{
		PyErr_SetString(PyExc_TypeError, "CFMutableArrayRef required");
		return 0;
	}
	*p_itself = ((CFMutableArrayRefObject *)v)->ob_itself;
	return 1;
}

static void CFMutableArrayRefObj_dealloc(CFMutableArrayRefObject *self)
{
	if (self->ob_freeit && self->ob_itself)
	{
		self->ob_freeit((CFTypeRef)self->ob_itself);
		self->ob_itself = NULL;
	}
	CFArrayRef_Type.tp_dealloc((PyObject *)self);
}

static PyObject *CFMutableArrayRefObj_CFArrayRemoveValueAtIndex(CFMutableArrayRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFIndex idx;
#ifndef CFArrayRemoveValueAtIndex
	PyMac_PRECHECK(CFArrayRemoveValueAtIndex);
#endif
	if (!PyArg_ParseTuple(_args, "l",
	                      &idx))
		return NULL;
	CFArrayRemoveValueAtIndex(_self->ob_itself,
	                          idx);
	Py_INCREF(Py_None);
	_res = Py_None;
	return _res;
}

static PyObject *CFMutableArrayRefObj_CFArrayRemoveAllValues(CFMutableArrayRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
#ifndef CFArrayRemoveAllValues
	PyMac_PRECHECK(CFArrayRemoveAllValues);
#endif
	if (!PyArg_ParseTuple(_args, ""))
		return NULL;
	CFArrayRemoveAllValues(_self->ob_itself);
	Py_INCREF(Py_None);
	_res = Py_None;
	return _res;
}

static PyObject *CFMutableArrayRefObj_CFArrayExchangeValuesAtIndices(CFMutableArrayRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFIndex idx1;
	CFIndex idx2;
#ifndef CFArrayExchangeValuesAtIndices
	PyMac_PRECHECK(CFArrayExchangeValuesAtIndices);
#endif
	if (!PyArg_ParseTuple(_args, "ll",
	                      &idx1,
	                      &idx2))
		return NULL;
	CFArrayExchangeValuesAtIndices(_self->ob_itself,
	                               idx1,
	                               idx2);
	Py_INCREF(Py_None);
	_res = Py_None;
	return _res;
}

static PyObject *CFMutableArrayRefObj_CFArrayAppendArray(CFMutableArrayRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFArrayRef otherArray;
	CFRange otherRange;
#ifndef CFArrayAppendArray
	PyMac_PRECHECK(CFArrayAppendArray);
#endif
	if (!PyArg_ParseTuple(_args, "O&O&",
	                      CFArrayRefObj_Convert, &otherArray,
	                      CFRange_Convert, &otherRange))
		return NULL;
	CFArrayAppendArray(_self->ob_itself,
	                   otherArray,
	                   otherRange);
	Py_INCREF(Py_None);
	_res = Py_None;
	return _res;
}

static PyMethodDef CFMutableArrayRefObj_methods[] = {
	{"CFArrayRemoveValueAtIndex", (PyCFunction)CFMutableArrayRefObj_CFArrayRemoveValueAtIndex, 1,
	 PyDoc_STR("(CFIndex idx) -> None")},
	{"CFArrayRemoveAllValues", (PyCFunction)CFMutableArrayRefObj_CFArrayRemoveAllValues, 1,
	 PyDoc_STR("() -> None")},
	{"CFArrayExchangeValuesAtIndices", (PyCFunction)CFMutableArrayRefObj_CFArrayExchangeValuesAtIndices, 1,
	 PyDoc_STR("(CFIndex idx1, CFIndex idx2) -> None")},
	{"CFArrayAppendArray", (PyCFunction)CFMutableArrayRefObj_CFArrayAppendArray, 1,
	 PyDoc_STR("(CFArrayRef otherArray, CFRange otherRange) -> None")},
	{NULL, NULL, 0}
};

#define CFMutableArrayRefObj_getsetlist NULL


static int CFMutableArrayRefObj_compare(CFMutableArrayRefObject *self, CFMutableArrayRefObject *other)
{
	/* XXXX Or should we use CFEqual?? */
	if ( self->ob_itself > other->ob_itself ) return 1;
	if ( self->ob_itself < other->ob_itself ) return -1;
	return 0;
}

static PyObject * CFMutableArrayRefObj_repr(CFMutableArrayRefObject *self)
{
	char buf[100];
	sprintf(buf, "<CFMutableArrayRef object at 0x%8.8x for 0x%8.8x>", (unsigned)self, (unsigned)self->ob_itself);
	return PyString_FromString(buf);
}

static int CFMutableArrayRefObj_hash(CFMutableArrayRefObject *self)
{
	/* XXXX Or should we use CFHash?? */
	return (int)self->ob_itself;
}
static int CFMutableArrayRefObj_tp_init(PyObject *_self, PyObject *_args, PyObject *_kwds)
{
	CFMutableArrayRef itself;
	char *kw[] = {"itself", 0};

	if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFMutableArrayRefObj_Convert, &itself))
	{
		((CFMutableArrayRefObject *)_self)->ob_itself = itself;
		return 0;
	}

	/* Any CFTypeRef descendent is allowed as initializer too */
	if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFTypeRefObj_Convert, &itself))
	{
		((CFMutableArrayRefObject *)_self)->ob_itself = itself;
		return 0;
	}
	return -1;
}

#define CFMutableArrayRefObj_tp_alloc PyType_GenericAlloc

static PyObject *CFMutableArrayRefObj_tp_new(PyTypeObject *type, PyObject *_args, PyObject *_kwds)
{
	PyObject *self;
	if ((self = type->tp_alloc(type, 0)) == NULL) return NULL;
	((CFMutableArrayRefObject *)self)->ob_itself = NULL;
	((CFMutableArrayRefObject *)self)->ob_freeit = CFRelease;
	return self;
}

#define CFMutableArrayRefObj_tp_free PyObject_Del


PyTypeObject CFMutableArrayRef_Type = {
	PyObject_HEAD_INIT(NULL)
	0, /*ob_size*/
	"_CF.CFMutableArrayRef", /*tp_name*/
	sizeof(CFMutableArrayRefObject), /*tp_basicsize*/
	0, /*tp_itemsize*/
	/* methods */
	(destructor) CFMutableArrayRefObj_dealloc, /*tp_dealloc*/
	0, /*tp_print*/
	(getattrfunc)0, /*tp_getattr*/
	(setattrfunc)0, /*tp_setattr*/
	(cmpfunc) CFMutableArrayRefObj_compare, /*tp_compare*/
	(reprfunc) CFMutableArrayRefObj_repr, /*tp_repr*/
	(PyNumberMethods *)0, /* tp_as_number */
	(PySequenceMethods *)0, /* tp_as_sequence */
	(PyMappingMethods *)0, /* tp_as_mapping */
	(hashfunc) CFMutableArrayRefObj_hash, /*tp_hash*/
	0, /*tp_call*/
	0, /*tp_str*/
	PyObject_GenericGetAttr, /*tp_getattro*/
	PyObject_GenericSetAttr, /*tp_setattro */
	0, /*tp_as_buffer*/
	Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */
	0, /*tp_doc*/
	0, /*tp_traverse*/
	0, /*tp_clear*/
	0, /*tp_richcompare*/
	0, /*tp_weaklistoffset*/
	0, /*tp_iter*/
	0, /*tp_iternext*/
	CFMutableArrayRefObj_methods, /* tp_methods */
	0, /*tp_members*/
	CFMutableArrayRefObj_getsetlist, /*tp_getset*/
	0, /*tp_base*/
	0, /*tp_dict*/
	0, /*tp_descr_get*/
	0, /*tp_descr_set*/
	0, /*tp_dictoffset*/
	CFMutableArrayRefObj_tp_init, /* tp_init */
	CFMutableArrayRefObj_tp_alloc, /* tp_alloc */
	CFMutableArrayRefObj_tp_new, /* tp_new */
	CFMutableArrayRefObj_tp_free, /* tp_free */
};

/* --------------- End object type CFMutableArrayRef ---------------- */


/* ------------------ Object type CFDictionaryRef ------------------- */

PyTypeObject CFDictionaryRef_Type;

#define CFDictionaryRefObj_Check(x) ((x)->ob_type == &CFDictionaryRef_Type || PyObject_TypeCheck((x), &CFDictionaryRef_Type))

typedef struct CFDictionaryRefObject {
	PyObject_HEAD
	CFDictionaryRef ob_itself;
	void (*ob_freeit)(CFTypeRef ptr);
} CFDictionaryRefObject;

PyObject *CFDictionaryRefObj_New(CFDictionaryRef itself)
{
	CFDictionaryRefObject *it;
	if (itself == NULL)
	{
		PyErr_SetString(PyExc_RuntimeError, "cannot wrap NULL");
		return NULL;
	}
	it = PyObject_NEW(CFDictionaryRefObject, &CFDictionaryRef_Type);
	if (it == NULL) return NULL;
	/* XXXX Should we tp_init or tp_new our basetype? */
	it->ob_itself = itself;
	it->ob_freeit = CFRelease;
	return (PyObject *)it;
}

int CFDictionaryRefObj_Convert(PyObject *v, CFDictionaryRef *p_itself)
{

	if (v == Py_None) { *p_itself = NULL; return 1; }
	/* Check for other CF objects here */

	if (!CFDictionaryRefObj_Check(v))
	{
		PyErr_SetString(PyExc_TypeError, "CFDictionaryRef required");
		return 0;
	}
	*p_itself = ((CFDictionaryRefObject *)v)->ob_itself;
	return 1;
}

static void CFDictionaryRefObj_dealloc(CFDictionaryRefObject *self)
{
	if (self->ob_freeit && self->ob_itself)
	{
		self->ob_freeit((CFTypeRef)self->ob_itself);
		self->ob_itself = NULL;
	}
	CFTypeRef_Type.tp_dealloc((PyObject *)self);
}

static PyObject *CFDictionaryRefObj_CFDictionaryCreateCopy(CFDictionaryRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFDictionaryRef _rv;
	if (!PyArg_ParseTuple(_args, ""))
		return NULL;
	_rv = CFDictionaryCreateCopy((CFAllocatorRef)NULL,
	                             _self->ob_itself);
	_res = Py_BuildValue("O&",
	                     CFDictionaryRefObj_New, _rv);
	return _res;
}

static PyObject *CFDictionaryRefObj_CFDictionaryGetCount(CFDictionaryRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFIndex _rv;
#ifndef CFDictionaryGetCount
	PyMac_PRECHECK(CFDictionaryGetCount);
#endif
	if (!PyArg_ParseTuple(_args, ""))
		return NULL;
	_rv = CFDictionaryGetCount(_self->ob_itself);
	_res = Py_BuildValue("l",
	                     _rv);
	return _res;
}

static PyMethodDef CFDictionaryRefObj_methods[] = {
	{"CFDictionaryCreateCopy", (PyCFunction)CFDictionaryRefObj_CFDictionaryCreateCopy, 1,
	 PyDoc_STR("() -> (CFDictionaryRef _rv)")},
	{"CFDictionaryGetCount", (PyCFunction)CFDictionaryRefObj_CFDictionaryGetCount, 1,
	 PyDoc_STR("() -> (CFIndex _rv)")},
	{NULL, NULL, 0}
};

#define CFDictionaryRefObj_getsetlist NULL


static int CFDictionaryRefObj_compare(CFDictionaryRefObject *self, CFDictionaryRefObject *other)
{
	/* XXXX Or should we use CFEqual?? */
	if ( self->ob_itself > other->ob_itself ) return 1;
	if ( self->ob_itself < other->ob_itself ) return -1;
	return 0;
}

static PyObject * CFDictionaryRefObj_repr(CFDictionaryRefObject *self)
{
	char buf[100];
	sprintf(buf, "<CFDictionaryRef object at 0x%8.8x for 0x%8.8x>", (unsigned)self, (unsigned)self->ob_itself);
	return PyString_FromString(buf);
}

static int CFDictionaryRefObj_hash(CFDictionaryRefObject *self)
{
	/* XXXX Or should we use CFHash?? */
	return (int)self->ob_itself;
}
static int CFDictionaryRefObj_tp_init(PyObject *_self, PyObject *_args, PyObject *_kwds)
{
	CFDictionaryRef itself;
	char *kw[] = {"itself", 0};

	if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFDictionaryRefObj_Convert, &itself))
	{
		((CFDictionaryRefObject *)_self)->ob_itself = itself;
		return 0;
	}

	/* Any CFTypeRef descendent is allowed as initializer too */
	if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFTypeRefObj_Convert, &itself))
	{
		((CFDictionaryRefObject *)_self)->ob_itself = itself;
		return 0;
	}
	return -1;
}

#define CFDictionaryRefObj_tp_alloc PyType_GenericAlloc

static PyObject *CFDictionaryRefObj_tp_new(PyTypeObject *type, PyObject *_args, PyObject *_kwds)
{
	PyObject *self;
	if ((self = type->tp_alloc(type, 0)) == NULL) return NULL;
	((CFDictionaryRefObject *)self)->ob_itself = NULL;
	((CFDictionaryRefObject *)self)->ob_freeit = CFRelease;
	return self;
}

#define CFDictionaryRefObj_tp_free PyObject_Del


PyTypeObject CFDictionaryRef_Type = {
	PyObject_HEAD_INIT(NULL)
	0, /*ob_size*/
	"_CF.CFDictionaryRef", /*tp_name*/
	sizeof(CFDictionaryRefObject), /*tp_basicsize*/
	0, /*tp_itemsize*/
	/* methods */
	(destructor) CFDictionaryRefObj_dealloc, /*tp_dealloc*/
	0, /*tp_print*/
	(getattrfunc)0, /*tp_getattr*/
	(setattrfunc)0, /*tp_setattr*/
	(cmpfunc) CFDictionaryRefObj_compare, /*tp_compare*/
	(reprfunc) CFDictionaryRefObj_repr, /*tp_repr*/
	(PyNumberMethods *)0, /* tp_as_number */
	(PySequenceMethods *)0, /* tp_as_sequence */
	(PyMappingMethods *)0, /* tp_as_mapping */
	(hashfunc) CFDictionaryRefObj_hash, /*tp_hash*/
	0, /*tp_call*/
	0, /*tp_str*/
	PyObject_GenericGetAttr, /*tp_getattro*/
	PyObject_GenericSetAttr, /*tp_setattro */
	0, /*tp_as_buffer*/
	Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */
	0, /*tp_doc*/
	0, /*tp_traverse*/
	0, /*tp_clear*/
	0, /*tp_richcompare*/
	0, /*tp_weaklistoffset*/
	0, /*tp_iter*/
	0, /*tp_iternext*/
	CFDictionaryRefObj_methods, /* tp_methods */
	0, /*tp_members*/
	CFDictionaryRefObj_getsetlist, /*tp_getset*/
	0, /*tp_base*/
	0, /*tp_dict*/
	0, /*tp_descr_get*/
	0, /*tp_descr_set*/
	0, /*tp_dictoffset*/
	CFDictionaryRefObj_tp_init, /* tp_init */
	CFDictionaryRefObj_tp_alloc, /* tp_alloc */
	CFDictionaryRefObj_tp_new, /* tp_new */
	CFDictionaryRefObj_tp_free, /* tp_free */
};

/* ---------------- End object type CFDictionaryRef ----------------- */


/* --------------- Object type CFMutableDictionaryRef --------------- */

PyTypeObject CFMutableDictionaryRef_Type;

#define CFMutableDictionaryRefObj_Check(x) ((x)->ob_type == &CFMutableDictionaryRef_Type || PyObject_TypeCheck((x), &CFMutableDictionaryRef_Type))

typedef struct CFMutableDictionaryRefObject {
	PyObject_HEAD
	CFMutableDictionaryRef ob_itself;
	void (*ob_freeit)(CFTypeRef ptr);
} CFMutableDictionaryRefObject;

PyObject *CFMutableDictionaryRefObj_New(CFMutableDictionaryRef itself)
{
	CFMutableDictionaryRefObject *it;
	if (itself == NULL)
	{
		PyErr_SetString(PyExc_RuntimeError, "cannot wrap NULL");
		return NULL;
	}
	it = PyObject_NEW(CFMutableDictionaryRefObject, &CFMutableDictionaryRef_Type);
	if (it == NULL) return NULL;
	/* XXXX Should we tp_init or tp_new our basetype? */
	it->ob_itself = itself;
	it->ob_freeit = CFRelease;
	return (PyObject *)it;
}

int CFMutableDictionaryRefObj_Convert(PyObject *v, CFMutableDictionaryRef *p_itself)
{

	if (v == Py_None) { *p_itself = NULL; return 1; }
	/* Check for other CF objects here */

	if (!CFMutableDictionaryRefObj_Check(v))
	{
		PyErr_SetString(PyExc_TypeError, "CFMutableDictionaryRef required");
		return 0;
	}
	*p_itself = ((CFMutableDictionaryRefObject *)v)->ob_itself;
	return 1;
}

static void CFMutableDictionaryRefObj_dealloc(CFMutableDictionaryRefObject *self)
{
	if (self->ob_freeit && self->ob_itself)
	{
		self->ob_freeit((CFTypeRef)self->ob_itself);
		self->ob_itself = NULL;
	}
	CFDictionaryRef_Type.tp_dealloc((PyObject *)self);
}

static PyObject *CFMutableDictionaryRefObj_CFDictionaryRemoveAllValues(CFMutableDictionaryRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
#ifndef CFDictionaryRemoveAllValues
	PyMac_PRECHECK(CFDictionaryRemoveAllValues);
#endif
	if (!PyArg_ParseTuple(_args, ""))
		return NULL;
	CFDictionaryRemoveAllValues(_self->ob_itself);
	Py_INCREF(Py_None);
	_res = Py_None;
	return _res;
}

static PyMethodDef CFMutableDictionaryRefObj_methods[] = {
	{"CFDictionaryRemoveAllValues", (PyCFunction)CFMutableDictionaryRefObj_CFDictionaryRemoveAllValues, 1,
	 PyDoc_STR("() -> None")},
	{NULL, NULL, 0}
};

#define CFMutableDictionaryRefObj_getsetlist NULL


static int CFMutableDictionaryRefObj_compare(CFMutableDictionaryRefObject *self, CFMutableDictionaryRefObject *other)
{
	/* XXXX Or should we use CFEqual?? */
	if ( self->ob_itself > other->ob_itself ) return 1;
	if ( self->ob_itself < other->ob_itself ) return -1;
	return 0;
}

static PyObject * CFMutableDictionaryRefObj_repr(CFMutableDictionaryRefObject *self)
{
	char buf[100];
	sprintf(buf, "<CFMutableDictionaryRef object at 0x%8.8x for 0x%8.8x>", (unsigned)self, (unsigned)self->ob_itself);
	return PyString_FromString(buf);
}

static int CFMutableDictionaryRefObj_hash(CFMutableDictionaryRefObject *self)
{
	/* XXXX Or should we use CFHash?? */
	return (int)self->ob_itself;
}
static int CFMutableDictionaryRefObj_tp_init(PyObject *_self, PyObject *_args, PyObject *_kwds)
{
	CFMutableDictionaryRef itself;
	char *kw[] = {"itself", 0};

	if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFMutableDictionaryRefObj_Convert, &itself))
	{
		((CFMutableDictionaryRefObject *)_self)->ob_itself = itself;
		return 0;
	}

	/* Any CFTypeRef descendent is allowed as initializer too */
	if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFTypeRefObj_Convert, &itself))
	{
		((CFMutableDictionaryRefObject *)_self)->ob_itself = itself;
		return 0;
	}
	return -1;
}

#define CFMutableDictionaryRefObj_tp_alloc PyType_GenericAlloc

static PyObject *CFMutableDictionaryRefObj_tp_new(PyTypeObject *type, PyObject *_args, PyObject *_kwds)
{
	PyObject *self;
	if ((self = type->tp_alloc(type, 0)) == NULL) return NULL;
	((CFMutableDictionaryRefObject *)self)->ob_itself = NULL;
	((CFMutableDictionaryRefObject *)self)->ob_freeit = CFRelease;
	return self;
}

#define CFMutableDictionaryRefObj_tp_free PyObject_Del


PyTypeObject CFMutableDictionaryRef_Type = {
	PyObject_HEAD_INIT(NULL)
	0, /*ob_size*/
	"_CF.CFMutableDictionaryRef", /*tp_name*/
	sizeof(CFMutableDictionaryRefObject), /*tp_basicsize*/
	0, /*tp_itemsize*/
	/* methods */
	(destructor) CFMutableDictionaryRefObj_dealloc, /*tp_dealloc*/
	0, /*tp_print*/
	(getattrfunc)0, /*tp_getattr*/
	(setattrfunc)0, /*tp_setattr*/
	(cmpfunc) CFMutableDictionaryRefObj_compare, /*tp_compare*/
	(reprfunc) CFMutableDictionaryRefObj_repr, /*tp_repr*/
	(PyNumberMethods *)0, /* tp_as_number */
	(PySequenceMethods *)0, /* tp_as_sequence */
	(PyMappingMethods *)0, /* tp_as_mapping */
	(hashfunc) CFMutableDictionaryRefObj_hash, /*tp_hash*/
	0, /*tp_call*/
	0, /*tp_str*/
	PyObject_GenericGetAttr, /*tp_getattro*/
	PyObject_GenericSetAttr, /*tp_setattro */
	0, /*tp_as_buffer*/
	Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */
	0, /*tp_doc*/
	0, /*tp_traverse*/
	0, /*tp_clear*/
	0, /*tp_richcompare*/
	0, /*tp_weaklistoffset*/
	0, /*tp_iter*/
	0, /*tp_iternext*/
	CFMutableDictionaryRefObj_methods, /* tp_methods */
	0, /*tp_members*/
	CFMutableDictionaryRefObj_getsetlist, /*tp_getset*/
	0, /*tp_base*/
	0, /*tp_dict*/
	0, /*tp_descr_get*/
	0, /*tp_descr_set*/
	0, /*tp_dictoffset*/
	CFMutableDictionaryRefObj_tp_init, /* tp_init */
	CFMutableDictionaryRefObj_tp_alloc, /* tp_alloc */
	CFMutableDictionaryRefObj_tp_new, /* tp_new */
	CFMutableDictionaryRefObj_tp_free, /* tp_free */
};

/* ------------- End object type CFMutableDictionaryRef ------------- */


/* --------------------- Object type CFDataRef ---------------------- */

PyTypeObject CFDataRef_Type;

#define CFDataRefObj_Check(x) ((x)->ob_type == &CFDataRef_Type || PyObject_TypeCheck((x), &CFDataRef_Type))

typedef struct CFDataRefObject {
	PyObject_HEAD
	CFDataRef ob_itself;
	void (*ob_freeit)(CFTypeRef ptr);
} CFDataRefObject;

PyObject *CFDataRefObj_New(CFDataRef itself)
{
	CFDataRefObject *it;
	if (itself == NULL)
	{
		PyErr_SetString(PyExc_RuntimeError, "cannot wrap NULL");
		return NULL;
	}
	it = PyObject_NEW(CFDataRefObject, &CFDataRef_Type);
	if (it == NULL) return NULL;
	/* XXXX Should we tp_init or tp_new our basetype? */
	it->ob_itself = itself;
	it->ob_freeit = CFRelease;
	return (PyObject *)it;
}

int CFDataRefObj_Convert(PyObject *v, CFDataRef *p_itself)
{

	if (v == Py_None) { *p_itself = NULL; return 1; }
	if (PyString_Check(v)) {
	    char *cStr;
	    Py_ssize_t cLen;
	    if( PyString_AsStringAndSize(v, &cStr, &cLen) < 0 ) return 0;
	    *p_itself = CFDataCreate((CFAllocatorRef)NULL, (unsigned char *)cStr, cLen);
	    return 1;
	}

	if (!CFDataRefObj_Check(v))
	{
		PyErr_SetString(PyExc_TypeError, "CFDataRef required");
		return 0;
	}
	*p_itself = ((CFDataRefObject *)v)->ob_itself;
	return 1;
}

static void CFDataRefObj_dealloc(CFDataRefObject *self)
{
	if (self->ob_freeit && self->ob_itself)
	{
		self->ob_freeit((CFTypeRef)self->ob_itself);
		self->ob_itself = NULL;
	}
	CFTypeRef_Type.tp_dealloc((PyObject *)self);
}

static PyObject *CFDataRefObj_CFDataCreateCopy(CFDataRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFDataRef _rv;
	if (!PyArg_ParseTuple(_args, ""))
		return NULL;
	_rv = CFDataCreateCopy((CFAllocatorRef)NULL,
	                       _self->ob_itself);
	_res = Py_BuildValue("O&",
	                     CFDataRefObj_New, _rv);
	return _res;
}

static PyObject *CFDataRefObj_CFDataGetLength(CFDataRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFIndex _rv;
#ifndef CFDataGetLength
	PyMac_PRECHECK(CFDataGetLength);
#endif
	if (!PyArg_ParseTuple(_args, ""))
		return NULL;
	_rv = CFDataGetLength(_self->ob_itself);
	_res = Py_BuildValue("l",
	                     _rv);
	return _res;
}

static PyObject *CFDataRefObj_CFStringCreateFromExternalRepresentation(CFDataRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFStringRef _rv;
	CFStringEncoding encoding;
	if (!PyArg_ParseTuple(_args, "l",
	                      &encoding))
		return NULL;
	_rv = CFStringCreateFromExternalRepresentation((CFAllocatorRef)NULL,
	                                               _self->ob_itself,
	                                               encoding);
	_res = Py_BuildValue("O&",
	                     CFStringRefObj_New, _rv);
	return _res;
}

static PyObject *CFDataRefObj_CFDataGetData(CFDataRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;

	int size = CFDataGetLength(_self->ob_itself);
	char *data = (char *)CFDataGetBytePtr(_self->ob_itself);

	_res = (PyObject *)PyString_FromStringAndSize(data, size);
	return _res;

}

static PyMethodDef CFDataRefObj_methods[] = {
	{"CFDataCreateCopy", (PyCFunction)CFDataRefObj_CFDataCreateCopy, 1,
	 PyDoc_STR("() -> (CFDataRef _rv)")},
	{"CFDataGetLength", (PyCFunction)CFDataRefObj_CFDataGetLength, 1,
	 PyDoc_STR("() -> (CFIndex _rv)")},
	{"CFStringCreateFromExternalRepresentation", (PyCFunction)CFDataRefObj_CFStringCreateFromExternalRepresentation, 1,
	 PyDoc_STR("(CFStringEncoding encoding) -> (CFStringRef _rv)")},
	{"CFDataGetData", (PyCFunction)CFDataRefObj_CFDataGetData, 1,
	 PyDoc_STR("() -> (string _rv)")},
	{NULL, NULL, 0}
};

#define CFDataRefObj_getsetlist NULL


static int CFDataRefObj_compare(CFDataRefObject *self, CFDataRefObject *other)
{
	/* XXXX Or should we use CFEqual?? */
	if ( self->ob_itself > other->ob_itself ) return 1;
	if ( self->ob_itself < other->ob_itself ) return -1;
	return 0;
}

static PyObject * CFDataRefObj_repr(CFDataRefObject *self)
{
	char buf[100];
	sprintf(buf, "<CFDataRef object at 0x%8.8x for 0x%8.8x>", (unsigned)self, (unsigned)self->ob_itself);
	return PyString_FromString(buf);
}

static int CFDataRefObj_hash(CFDataRefObject *self)
{
	/* XXXX Or should we use CFHash?? */
	return (int)self->ob_itself;
}
static int CFDataRefObj_tp_init(PyObject *_self, PyObject *_args, PyObject *_kwds)
{
	CFDataRef itself;
	char *kw[] = {"itself", 0};

	if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFDataRefObj_Convert, &itself))
	{
		((CFDataRefObject *)_self)->ob_itself = itself;
		return 0;
	}

	/* Any CFTypeRef descendent is allowed as initializer too */
	if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFTypeRefObj_Convert, &itself))
	{
		((CFDataRefObject *)_self)->ob_itself = itself;
		return 0;
	}
	return -1;
}

#define CFDataRefObj_tp_alloc PyType_GenericAlloc

static PyObject *CFDataRefObj_tp_new(PyTypeObject *type, PyObject *_args, PyObject *_kwds)
{
	PyObject *self;
	if ((self = type->tp_alloc(type, 0)) == NULL) return NULL;
	((CFDataRefObject *)self)->ob_itself = NULL;
	((CFDataRefObject *)self)->ob_freeit = CFRelease;
	return self;
}

#define CFDataRefObj_tp_free PyObject_Del


PyTypeObject CFDataRef_Type = {
	PyObject_HEAD_INIT(NULL)
	0, /*ob_size*/
	"_CF.CFDataRef", /*tp_name*/
	sizeof(CFDataRefObject), /*tp_basicsize*/
	0, /*tp_itemsize*/
	/* methods */
	(destructor) CFDataRefObj_dealloc, /*tp_dealloc*/
	0, /*tp_print*/
	(getattrfunc)0, /*tp_getattr*/
	(setattrfunc)0, /*tp_setattr*/
	(cmpfunc) CFDataRefObj_compare, /*tp_compare*/
	(reprfunc) CFDataRefObj_repr, /*tp_repr*/
	(PyNumberMethods *)0, /* tp_as_number */
	(PySequenceMethods *)0, /* tp_as_sequence */
	(PyMappingMethods *)0, /* tp_as_mapping */
	(hashfunc) CFDataRefObj_hash, /*tp_hash*/
	0, /*tp_call*/
	0, /*tp_str*/
	PyObject_GenericGetAttr, /*tp_getattro*/
	PyObject_GenericSetAttr, /*tp_setattro */
	0, /*tp_as_buffer*/
	Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */
	0, /*tp_doc*/
	0, /*tp_traverse*/
	0, /*tp_clear*/
	0, /*tp_richcompare*/
	0, /*tp_weaklistoffset*/
	0, /*tp_iter*/
	0, /*tp_iternext*/
	CFDataRefObj_methods, /* tp_methods */
	0, /*tp_members*/
	CFDataRefObj_getsetlist, /*tp_getset*/
	0, /*tp_base*/
	0, /*tp_dict*/
	0, /*tp_descr_get*/
	0, /*tp_descr_set*/
	0, /*tp_dictoffset*/
	CFDataRefObj_tp_init, /* tp_init */
	CFDataRefObj_tp_alloc, /* tp_alloc */
	CFDataRefObj_tp_new, /* tp_new */
	CFDataRefObj_tp_free, /* tp_free */
};

/* ------------------- End object type CFDataRef -------------------- */


/* ------------------ Object type CFMutableDataRef ------------------ */

PyTypeObject CFMutableDataRef_Type;

#define CFMutableDataRefObj_Check(x) ((x)->ob_type == &CFMutableDataRef_Type || PyObject_TypeCheck((x), &CFMutableDataRef_Type))

typedef struct CFMutableDataRefObject {
	PyObject_HEAD
	CFMutableDataRef ob_itself;
	void (*ob_freeit)(CFTypeRef ptr);
} CFMutableDataRefObject;

PyObject *CFMutableDataRefObj_New(CFMutableDataRef itself)
{
	CFMutableDataRefObject *it;
	if (itself == NULL)
	{
		PyErr_SetString(PyExc_RuntimeError, "cannot wrap NULL");
		return NULL;
	}
	it = PyObject_NEW(CFMutableDataRefObject, &CFMutableDataRef_Type);
	if (it == NULL) return NULL;
	/* XXXX Should we tp_init or tp_new our basetype? */
	it->ob_itself = itself;
	it->ob_freeit = CFRelease;
	return (PyObject *)it;
}

int CFMutableDataRefObj_Convert(PyObject *v, CFMutableDataRef *p_itself)
{

	if (v == Py_None) { *p_itself = NULL; return 1; }
	/* Check for other CF objects here */

	if (!CFMutableDataRefObj_Check(v))
	{
		PyErr_SetString(PyExc_TypeError, "CFMutableDataRef required");
		return 0;
	}
	*p_itself = ((CFMutableDataRefObject *)v)->ob_itself;
	return 1;
}

static void CFMutableDataRefObj_dealloc(CFMutableDataRefObject *self)
{
	if (self->ob_freeit && self->ob_itself)
	{
		self->ob_freeit((CFTypeRef)self->ob_itself);
		self->ob_itself = NULL;
	}
	CFDataRef_Type.tp_dealloc((PyObject *)self);
}

static PyObject *CFMutableDataRefObj_CFDataSetLength(CFMutableDataRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFIndex length;
#ifndef CFDataSetLength
	PyMac_PRECHECK(CFDataSetLength);
#endif
	if (!PyArg_ParseTuple(_args, "l",
	                      &length))
		return NULL;
	CFDataSetLength(_self->ob_itself,
	                length);
	Py_INCREF(Py_None);
	_res = Py_None;
	return _res;
}

static PyObject *CFMutableDataRefObj_CFDataIncreaseLength(CFMutableDataRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFIndex extraLength;
#ifndef CFDataIncreaseLength
	PyMac_PRECHECK(CFDataIncreaseLength);
#endif
	if (!PyArg_ParseTuple(_args, "l",
	                      &extraLength))
		return NULL;
	CFDataIncreaseLength(_self->ob_itself,
	                     extraLength);
	Py_INCREF(Py_None);
	_res = Py_None;
	return _res;
}

static PyObject *CFMutableDataRefObj_CFDataAppendBytes(CFMutableDataRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	unsigned char *bytes__in__;
	long bytes__len__;
	int bytes__in_len__;
#ifndef CFDataAppendBytes
	PyMac_PRECHECK(CFDataAppendBytes);
#endif
	if (!PyArg_ParseTuple(_args, "s#",
	                      &bytes__in__, &bytes__in_len__))
		return NULL;
	bytes__len__ = bytes__in_len__;
	CFDataAppendBytes(_self->ob_itself,
	                  bytes__in__, bytes__len__);
	Py_INCREF(Py_None);
	_res = Py_None;
	return _res;
}

static PyObject *CFMutableDataRefObj_CFDataReplaceBytes(CFMutableDataRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFRange range;
	unsigned char *newBytes__in__;
	long newBytes__len__;
	int newBytes__in_len__;
#ifndef CFDataReplaceBytes
	PyMac_PRECHECK(CFDataReplaceBytes);
#endif
	if (!PyArg_ParseTuple(_args, "O&s#",
	                      CFRange_Convert, &range,
	                      &newBytes__in__, &newBytes__in_len__))
		return NULL;
	newBytes__len__ = newBytes__in_len__;
	CFDataReplaceBytes(_self->ob_itself,
	                   range,
	                   newBytes__in__, newBytes__len__);
	Py_INCREF(Py_None);
	_res = Py_None;
	return _res;
}

static PyObject *CFMutableDataRefObj_CFDataDeleteBytes(CFMutableDataRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFRange range;
#ifndef CFDataDeleteBytes
	PyMac_PRECHECK(CFDataDeleteBytes);
#endif
	if (!PyArg_ParseTuple(_args, "O&",
	                      CFRange_Convert, &range))
		return NULL;
	CFDataDeleteBytes(_self->ob_itself,
	                  range);
	Py_INCREF(Py_None);
	_res = Py_None;
	return _res;
}

static PyMethodDef CFMutableDataRefObj_methods[] = {
	{"CFDataSetLength", (PyCFunction)CFMutableDataRefObj_CFDataSetLength, 1,
	 PyDoc_STR("(CFIndex length) -> None")},
	{"CFDataIncreaseLength", (PyCFunction)CFMutableDataRefObj_CFDataIncreaseLength, 1,
	 PyDoc_STR("(CFIndex extraLength) -> None")},
	{"CFDataAppendBytes", (PyCFunction)CFMutableDataRefObj_CFDataAppendBytes, 1,
	 PyDoc_STR("(Buffer bytes) -> None")},
	{"CFDataReplaceBytes", (PyCFunction)CFMutableDataRefObj_CFDataReplaceBytes, 1,
	 PyDoc_STR("(CFRange range, Buffer newBytes) -> None")},
	{"CFDataDeleteBytes", (PyCFunction)CFMutableDataRefObj_CFDataDeleteBytes, 1,
	 PyDoc_STR("(CFRange range) -> None")},
	{NULL, NULL, 0}
};

#define CFMutableDataRefObj_getsetlist NULL


static int CFMutableDataRefObj_compare(CFMutableDataRefObject *self, CFMutableDataRefObject *other)
{
	/* XXXX Or should we use CFEqual?? */
	if ( self->ob_itself > other->ob_itself ) return 1;
	if ( self->ob_itself < other->ob_itself ) return -1;
	return 0;
}

static PyObject * CFMutableDataRefObj_repr(CFMutableDataRefObject *self)
{
	char buf[100];
	sprintf(buf, "<CFMutableDataRef object at 0x%8.8x for 0x%8.8x>", (unsigned)self, (unsigned)self->ob_itself);
	return PyString_FromString(buf);
}

static int CFMutableDataRefObj_hash(CFMutableDataRefObject *self)
{
	/* XXXX Or should we use CFHash?? */
	return (int)self->ob_itself;
}
static int CFMutableDataRefObj_tp_init(PyObject *_self, PyObject *_args, PyObject *_kwds)
{
	CFMutableDataRef itself;
	char *kw[] = {"itself", 0};

	if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFMutableDataRefObj_Convert, &itself))
	{
		((CFMutableDataRefObject *)_self)->ob_itself = itself;
		return 0;
	}

	/* Any CFTypeRef descendent is allowed as initializer too */
	if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFTypeRefObj_Convert, &itself))
	{
		((CFMutableDataRefObject *)_self)->ob_itself = itself;
		return 0;
	}
	return -1;
}

#define CFMutableDataRefObj_tp_alloc PyType_GenericAlloc

static PyObject *CFMutableDataRefObj_tp_new(PyTypeObject *type, PyObject *_args, PyObject *_kwds)
{
	PyObject *self;
	if ((self = type->tp_alloc(type, 0)) == NULL) return NULL;
	((CFMutableDataRefObject *)self)->ob_itself = NULL;
	((CFMutableDataRefObject *)self)->ob_freeit = CFRelease;
	return self;
}

#define CFMutableDataRefObj_tp_free PyObject_Del


PyTypeObject CFMutableDataRef_Type = {
	PyObject_HEAD_INIT(NULL)
	0, /*ob_size*/
	"_CF.CFMutableDataRef", /*tp_name*/
	sizeof(CFMutableDataRefObject), /*tp_basicsize*/
	0, /*tp_itemsize*/
	/* methods */
	(destructor) CFMutableDataRefObj_dealloc, /*tp_dealloc*/
	0, /*tp_print*/
	(getattrfunc)0, /*tp_getattr*/
	(setattrfunc)0, /*tp_setattr*/
	(cmpfunc) CFMutableDataRefObj_compare, /*tp_compare*/
	(reprfunc) CFMutableDataRefObj_repr, /*tp_repr*/
	(PyNumberMethods *)0, /* tp_as_number */
	(PySequenceMethods *)0, /* tp_as_sequence */
	(PyMappingMethods *)0, /* tp_as_mapping */
	(hashfunc) CFMutableDataRefObj_hash, /*tp_hash*/
	0, /*tp_call*/
	0, /*tp_str*/
	PyObject_GenericGetAttr, /*tp_getattro*/
	PyObject_GenericSetAttr, /*tp_setattro */
	0, /*tp_as_buffer*/
	Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */
	0, /*tp_doc*/
	0, /*tp_traverse*/
	0, /*tp_clear*/
	0, /*tp_richcompare*/
	0, /*tp_weaklistoffset*/
	0, /*tp_iter*/
	0, /*tp_iternext*/
	CFMutableDataRefObj_methods, /* tp_methods */
	0, /*tp_members*/
	CFMutableDataRefObj_getsetlist, /*tp_getset*/
	0, /*tp_base*/
	0, /*tp_dict*/
	0, /*tp_descr_get*/
	0, /*tp_descr_set*/
	0, /*tp_dictoffset*/
	CFMutableDataRefObj_tp_init, /* tp_init */
	CFMutableDataRefObj_tp_alloc, /* tp_alloc */
	CFMutableDataRefObj_tp_new, /* tp_new */
	CFMutableDataRefObj_tp_free, /* tp_free */
};

/* ---------------- End object type CFMutableDataRef ---------------- */


/* -------------------- Object type CFStringRef --------------------- */

PyTypeObject CFStringRef_Type;

#define CFStringRefObj_Check(x) ((x)->ob_type == &CFStringRef_Type || PyObject_TypeCheck((x), &CFStringRef_Type))

typedef struct CFStringRefObject {
	PyObject_HEAD
	CFStringRef ob_itself;
	void (*ob_freeit)(CFTypeRef ptr);
} CFStringRefObject;

PyObject *CFStringRefObj_New(CFStringRef itself)
{
	CFStringRefObject *it;
	if (itself == NULL)
	{
		PyErr_SetString(PyExc_RuntimeError, "cannot wrap NULL");
		return NULL;
	}
	it = PyObject_NEW(CFStringRefObject, &CFStringRef_Type);
	if (it == NULL) return NULL;
	/* XXXX Should we tp_init or tp_new our basetype? */
	it->ob_itself = itself;
	it->ob_freeit = CFRelease;
	return (PyObject *)it;
}

int CFStringRefObj_Convert(PyObject *v, CFStringRef *p_itself)
{

	if (v == Py_None) { *p_itself = NULL; return 1; }
	if (PyString_Check(v)) {
	    char *cStr;
	    if (!PyArg_Parse(v, "es", "ascii", &cStr))
	        return 0;
	        *p_itself = CFStringCreateWithCString((CFAllocatorRef)NULL, cStr, kCFStringEncodingASCII);
		PyMem_Free(cStr);
	        return 1;
	}
	if (PyUnicode_Check(v)) {
	        /* We use the CF types here, if Python was configured differently that will give an error */
	        CFIndex size = PyUnicode_GetSize(v);
	        UniChar *unichars = PyUnicode_AsUnicode(v);
	        if (!unichars) return 0;
	        *p_itself = CFStringCreateWithCharacters((CFAllocatorRef)NULL, unichars, size);
	        return 1;
	}


	if (!CFStringRefObj_Check(v))
	{
		PyErr_SetString(PyExc_TypeError, "CFStringRef required");
		return 0;
	}
	*p_itself = ((CFStringRefObject *)v)->ob_itself;
	return 1;
}

static void CFStringRefObj_dealloc(CFStringRefObject *self)
{
	if (self->ob_freeit && self->ob_itself)
	{
		self->ob_freeit((CFTypeRef)self->ob_itself);
		self->ob_itself = NULL;
	}
	CFTypeRef_Type.tp_dealloc((PyObject *)self);
}

static PyObject *CFStringRefObj_CFStringCreateWithSubstring(CFStringRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFStringRef _rv;
	CFRange range;
	if (!PyArg_ParseTuple(_args, "O&",
	                      CFRange_Convert, &range))
		return NULL;
	_rv = CFStringCreateWithSubstring((CFAllocatorRef)NULL,
	                                  _self->ob_itself,
	                                  range);
	_res = Py_BuildValue("O&",
	                     CFStringRefObj_New, _rv);
	return _res;
}

static PyObject *CFStringRefObj_CFStringCreateCopy(CFStringRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFStringRef _rv;
	if (!PyArg_ParseTuple(_args, ""))
		return NULL;
	_rv = CFStringCreateCopy((CFAllocatorRef)NULL,
	                         _self->ob_itself);
	_res = Py_BuildValue("O&",
	                     CFStringRefObj_New, _rv);
	return _res;
}

static PyObject *CFStringRefObj_CFStringGetLength(CFStringRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFIndex _rv;
#ifndef CFStringGetLength
	PyMac_PRECHECK(CFStringGetLength);
#endif
	if (!PyArg_ParseTuple(_args, ""))
		return NULL;
	_rv = CFStringGetLength(_self->ob_itself);
	_res = Py_BuildValue("l",
	                     _rv);
	return _res;
}

static PyObject *CFStringRefObj_CFStringGetBytes(CFStringRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFIndex _rv;
	CFRange range;
	CFStringEncoding encoding;
	UInt8 lossByte;
	Boolean isExternalRepresentation;
	UInt8 buffer;
	CFIndex maxBufLen;
	CFIndex usedBufLen;
#ifndef CFStringGetBytes
	PyMac_PRECHECK(CFStringGetBytes);
#endif
	if (!PyArg_ParseTuple(_args, "O&lbll",
	                      CFRange_Convert, &range,
	                      &encoding,
	                      &lossByte,
	                      &isExternalRepresentation,
	                      &maxBufLen))
		return NULL;
	_rv = CFStringGetBytes(_self->ob_itself,
	                       range,
	                       encoding,
	                       lossByte,
	                       isExternalRepresentation,
	                       &buffer,
	                       maxBufLen,
	                       &usedBufLen);
	_res = Py_BuildValue("lbl",
	                     _rv,
	                     buffer,
	                     usedBufLen);
	return _res;
}

static PyObject *CFStringRefObj_CFStringCreateExternalRepresentation(CFStringRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFDataRef _rv;
	CFStringEncoding encoding;
	UInt8 lossByte;
	if (!PyArg_ParseTuple(_args, "lb",
	                      &encoding,
	                      &lossByte))
		return NULL;
	_rv = CFStringCreateExternalRepresentation((CFAllocatorRef)NULL,
	                                           _self->ob_itself,
	                                           encoding,
	                                           lossByte);
	_res = Py_BuildValue("O&",
	                     CFDataRefObj_New, _rv);
	return _res;
}

static PyObject *CFStringRefObj_CFStringGetSmallestEncoding(CFStringRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFStringEncoding _rv;
#ifndef CFStringGetSmallestEncoding
	PyMac_PRECHECK(CFStringGetSmallestEncoding);
#endif
	if (!PyArg_ParseTuple(_args, ""))
		return NULL;
	_rv = CFStringGetSmallestEncoding(_self->ob_itself);
	_res = Py_BuildValue("l",
	                     _rv);
	return _res;
}

static PyObject *CFStringRefObj_CFStringGetFastestEncoding(CFStringRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFStringEncoding _rv;
#ifndef CFStringGetFastestEncoding
	PyMac_PRECHECK(CFStringGetFastestEncoding);
#endif
	if (!PyArg_ParseTuple(_args, ""))
		return NULL;
	_rv = CFStringGetFastestEncoding(_self->ob_itself);
	_res = Py_BuildValue("l",
	                     _rv);
	return _res;
}

static PyObject *CFStringRefObj_CFStringCompareWithOptions(CFStringRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFComparisonResult _rv;
	CFStringRef theString2;
	CFRange rangeToCompare;
	CFOptionFlags compareOptions;
#ifndef CFStringCompareWithOptions
	PyMac_PRECHECK(CFStringCompareWithOptions);
#endif
	if (!PyArg_ParseTuple(_args, "O&O&l",
	                      CFStringRefObj_Convert, &theString2,
	                      CFRange_Convert, &rangeToCompare,
	                      &compareOptions))
		return NULL;
	_rv = CFStringCompareWithOptions(_self->ob_itself,
	                                 theString2,
	                                 rangeToCompare,
	                                 compareOptions);
	_res = Py_BuildValue("l",
	                     _rv);
	return _res;
}

static PyObject *CFStringRefObj_CFStringCompare(CFStringRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFComparisonResult _rv;
	CFStringRef theString2;
	CFOptionFlags compareOptions;
#ifndef CFStringCompare
	PyMac_PRECHECK(CFStringCompare);
#endif
	if (!PyArg_ParseTuple(_args, "O&l",
	                      CFStringRefObj_Convert, &theString2,
	                      &compareOptions))
		return NULL;
	_rv = CFStringCompare(_self->ob_itself,
	                      theString2,
	                      compareOptions);
	_res = Py_BuildValue("l",
	                     _rv);
	return _res;
}

static PyObject *CFStringRefObj_CFStringFindWithOptions(CFStringRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	Boolean _rv;
	CFStringRef stringToFind;
	CFRange rangeToSearch;
	CFOptionFlags searchOptions;
	CFRange result;
#ifndef CFStringFindWithOptions
	PyMac_PRECHECK(CFStringFindWithOptions);
#endif
	if (!PyArg_ParseTuple(_args, "O&O&l",
	                      CFStringRefObj_Convert, &stringToFind,
	                      CFRange_Convert, &rangeToSearch,
	                      &searchOptions))
		return NULL;
	_rv = CFStringFindWithOptions(_self->ob_itself,
	                              stringToFind,
	                              rangeToSearch,
	                              searchOptions,
	                              &result);
	_res = Py_BuildValue("lO&",
	                     _rv,
	                     CFRange_New, result);
	return _res;
}

static PyObject *CFStringRefObj_CFStringCreateArrayWithFindResults(CFStringRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFArrayRef _rv;
	CFStringRef stringToFind;
	CFRange rangeToSearch;
	CFOptionFlags compareOptions;
	if (!PyArg_ParseTuple(_args, "O&O&l",
	                      CFStringRefObj_Convert, &stringToFind,
	                      CFRange_Convert, &rangeToSearch,
	                      &compareOptions))
		return NULL;
	_rv = CFStringCreateArrayWithFindResults((CFAllocatorRef)NULL,
	                                         _self->ob_itself,
	                                         stringToFind,
	                                         rangeToSearch,
	                                         compareOptions);
	_res = Py_BuildValue("O&",
	                     CFArrayRefObj_New, _rv);
	return _res;
}

static PyObject *CFStringRefObj_CFStringFind(CFStringRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFRange _rv;
	CFStringRef stringToFind;
	CFOptionFlags compareOptions;
#ifndef CFStringFind
	PyMac_PRECHECK(CFStringFind);
#endif
	if (!PyArg_ParseTuple(_args, "O&l",
	                      CFStringRefObj_Convert, &stringToFind,
	                      &compareOptions))
		return NULL;
	_rv = CFStringFind(_self->ob_itself,
	                   stringToFind,
	                   compareOptions);
	_res = Py_BuildValue("O&",
	                     CFRange_New, _rv);
	return _res;
}

static PyObject *CFStringRefObj_CFStringHasPrefix(CFStringRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	Boolean _rv;
	CFStringRef prefix;
#ifndef CFStringHasPrefix
	PyMac_PRECHECK(CFStringHasPrefix);
#endif
	if (!PyArg_ParseTuple(_args, "O&",
	                      CFStringRefObj_Convert, &prefix))
		return NULL;
	_rv = CFStringHasPrefix(_self->ob_itself,
	                        prefix);
	_res = Py_BuildValue("l",
	                     _rv);
	return _res;
}

static PyObject *CFStringRefObj_CFStringHasSuffix(CFStringRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	Boolean _rv;
	CFStringRef suffix;
#ifndef CFStringHasSuffix
	PyMac_PRECHECK(CFStringHasSuffix);
#endif
	if (!PyArg_ParseTuple(_args, "O&",
	                      CFStringRefObj_Convert, &suffix))
		return NULL;
	_rv = CFStringHasSuffix(_self->ob_itself,
	                        suffix);
	_res = Py_BuildValue("l",
	                     _rv);
	return _res;
}

static PyObject *CFStringRefObj_CFStringGetLineBounds(CFStringRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFRange range;
	CFIndex lineBeginIndex;
	CFIndex lineEndIndex;
	CFIndex contentsEndIndex;
#ifndef CFStringGetLineBounds
	PyMac_PRECHECK(CFStringGetLineBounds);
#endif
	if (!PyArg_ParseTuple(_args, "O&",
	                      CFRange_Convert, &range))
		return NULL;
	CFStringGetLineBounds(_self->ob_itself,
	                      range,
	                      &lineBeginIndex,
	                      &lineEndIndex,
	                      &contentsEndIndex);
	_res = Py_BuildValue("lll",
	                     lineBeginIndex,
	                     lineEndIndex,
	                     contentsEndIndex);
	return _res;
}

static PyObject *CFStringRefObj_CFStringCreateArrayBySeparatingStrings(CFStringRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFArrayRef _rv;
	CFStringRef separatorString;
	if (!PyArg_ParseTuple(_args, "O&",
	                      CFStringRefObj_Convert, &separatorString))
		return NULL;
	_rv = CFStringCreateArrayBySeparatingStrings((CFAllocatorRef)NULL,
	                                             _self->ob_itself,
	                                             separatorString);
	_res = Py_BuildValue("O&",
	                     CFArrayRefObj_New, _rv);
	return _res;
}

static PyObject *CFStringRefObj_CFStringGetIntValue(CFStringRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	SInt32 _rv;
#ifndef CFStringGetIntValue
	PyMac_PRECHECK(CFStringGetIntValue);
#endif
	if (!PyArg_ParseTuple(_args, ""))
		return NULL;
	_rv = CFStringGetIntValue(_self->ob_itself);
	_res = Py_BuildValue("l",
	                     _rv);
	return _res;
}

static PyObject *CFStringRefObj_CFStringGetDoubleValue(CFStringRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	double _rv;
#ifndef CFStringGetDoubleValue
	PyMac_PRECHECK(CFStringGetDoubleValue);
#endif
	if (!PyArg_ParseTuple(_args, ""))
		return NULL;
	_rv = CFStringGetDoubleValue(_self->ob_itself);
	_res = Py_BuildValue("d",
	                     _rv);
	return _res;
}

static PyObject *CFStringRefObj_CFStringConvertIANACharSetNameToEncoding(CFStringRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFStringEncoding _rv;
#ifndef CFStringConvertIANACharSetNameToEncoding
	PyMac_PRECHECK(CFStringConvertIANACharSetNameToEncoding);
#endif
	if (!PyArg_ParseTuple(_args, ""))
		return NULL;
	_rv = CFStringConvertIANACharSetNameToEncoding(_self->ob_itself);
	_res = Py_BuildValue("l",
	                     _rv);
	return _res;
}

static PyObject *CFStringRefObj_CFShowStr(CFStringRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
#ifndef CFShowStr
	PyMac_PRECHECK(CFShowStr);
#endif
	if (!PyArg_ParseTuple(_args, ""))
		return NULL;
	CFShowStr(_self->ob_itself);
	Py_INCREF(Py_None);
	_res = Py_None;
	return _res;
}

static PyObject *CFStringRefObj_CFURLCreateWithString(CFStringRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFURLRef _rv;
	CFURLRef baseURL;
	if (!PyArg_ParseTuple(_args, "O&",
	                      OptionalCFURLRefObj_Convert, &baseURL))
		return NULL;
	_rv = CFURLCreateWithString((CFAllocatorRef)NULL,
	                            _self->ob_itself,
	                            baseURL);
	_res = Py_BuildValue("O&",
	                     CFURLRefObj_New, _rv);
	return _res;
}

static PyObject *CFStringRefObj_CFURLCreateWithFileSystemPath(CFStringRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFURLRef _rv;
	CFURLPathStyle pathStyle;
	Boolean isDirectory;
	if (!PyArg_ParseTuple(_args, "ll",
	                      &pathStyle,
	                      &isDirectory))
		return NULL;
	_rv = CFURLCreateWithFileSystemPath((CFAllocatorRef)NULL,
	                                    _self->ob_itself,
	                                    pathStyle,
	                                    isDirectory);
	_res = Py_BuildValue("O&",
	                     CFURLRefObj_New, _rv);
	return _res;
}

static PyObject *CFStringRefObj_CFURLCreateWithFileSystemPathRelativeToBase(CFStringRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFURLRef _rv;
	CFURLPathStyle pathStyle;
	Boolean isDirectory;
	CFURLRef baseURL;
	if (!PyArg_ParseTuple(_args, "llO&",
	                      &pathStyle,
	                      &isDirectory,
	                      OptionalCFURLRefObj_Convert, &baseURL))
		return NULL;
	_rv = CFURLCreateWithFileSystemPathRelativeToBase((CFAllocatorRef)NULL,
	                                                  _self->ob_itself,
	                                                  pathStyle,
	                                                  isDirectory,
	                                                  baseURL);
	_res = Py_BuildValue("O&",
	                     CFURLRefObj_New, _rv);
	return _res;
}

static PyObject *CFStringRefObj_CFURLCreateStringByReplacingPercentEscapes(CFStringRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFStringRef _rv;
	CFStringRef charactersToLeaveEscaped;
	if (!PyArg_ParseTuple(_args, "O&",
	                      CFStringRefObj_Convert, &charactersToLeaveEscaped))
		return NULL;
	_rv = CFURLCreateStringByReplacingPercentEscapes((CFAllocatorRef)NULL,
	                                                 _self->ob_itself,
	                                                 charactersToLeaveEscaped);
	_res = Py_BuildValue("O&",
	                     CFStringRefObj_New, _rv);
	return _res;
}

static PyObject *CFStringRefObj_CFURLCreateStringByAddingPercentEscapes(CFStringRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFStringRef _rv;
	CFStringRef charactersToLeaveUnescaped;
	CFStringRef legalURLCharactersToBeEscaped;
	CFStringEncoding encoding;
	if (!PyArg_ParseTuple(_args, "O&O&l",
	                      CFStringRefObj_Convert, &charactersToLeaveUnescaped,
	                      CFStringRefObj_Convert, &legalURLCharactersToBeEscaped,
	                      &encoding))
		return NULL;
	_rv = CFURLCreateStringByAddingPercentEscapes((CFAllocatorRef)NULL,
	                                              _self->ob_itself,
	                                              charactersToLeaveUnescaped,
	                                              legalURLCharactersToBeEscaped,
	                                              encoding);
	_res = Py_BuildValue("O&",
	                     CFStringRefObj_New, _rv);
	return _res;
}

static PyObject *CFStringRefObj_CFStringGetString(CFStringRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;

	int size = CFStringGetLength(_self->ob_itself)+1;
	char *data = malloc(size);

	if( data == NULL ) return PyErr_NoMemory();
	if ( CFStringGetCString(_self->ob_itself, data, size, 0) ) {
	        _res = (PyObject *)PyString_FromString(data);
	} else {
	        PyErr_SetString(PyExc_RuntimeError, "CFStringGetCString could not fit the string");
	        _res = NULL;
	}
	free(data);
	return _res;

}

static PyObject *CFStringRefObj_CFStringGetUnicode(CFStringRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;

	int size = CFStringGetLength(_self->ob_itself)+1;
	Py_UNICODE *data = malloc(size*sizeof(Py_UNICODE));
	CFRange range;

	range.location = 0;
	range.length = size;
	if( data == NULL ) return PyErr_NoMemory();
	CFStringGetCharacters(_self->ob_itself, range, data);
	_res = (PyObject *)PyUnicode_FromUnicode(data, size-1);
	free(data);
	return _res;

}

static PyMethodDef CFStringRefObj_methods[] = {
	{"CFStringCreateWithSubstring", (PyCFunction)CFStringRefObj_CFStringCreateWithSubstring, 1,
	 PyDoc_STR("(CFRange range) -> (CFStringRef _rv)")},
	{"CFStringCreateCopy", (PyCFunction)CFStringRefObj_CFStringCreateCopy, 1,
	 PyDoc_STR("() -> (CFStringRef _rv)")},
	{"CFStringGetLength", (PyCFunction)CFStringRefObj_CFStringGetLength, 1,
	 PyDoc_STR("() -> (CFIndex _rv)")},
	{"CFStringGetBytes", (PyCFunction)CFStringRefObj_CFStringGetBytes, 1,
	 PyDoc_STR("(CFRange range, CFStringEncoding encoding, UInt8 lossByte, Boolean isExternalRepresentation, CFIndex maxBufLen) -> (CFIndex _rv, UInt8 buffer, CFIndex usedBufLen)")},
	{"CFStringCreateExternalRepresentation", (PyCFunction)CFStringRefObj_CFStringCreateExternalRepresentation, 1,
	 PyDoc_STR("(CFStringEncoding encoding, UInt8 lossByte) -> (CFDataRef _rv)")},
	{"CFStringGetSmallestEncoding", (PyCFunction)CFStringRefObj_CFStringGetSmallestEncoding, 1,
	 PyDoc_STR("() -> (CFStringEncoding _rv)")},
	{"CFStringGetFastestEncoding", (PyCFunction)CFStringRefObj_CFStringGetFastestEncoding, 1,
	 PyDoc_STR("() -> (CFStringEncoding _rv)")},
	{"CFStringCompareWithOptions", (PyCFunction)CFStringRefObj_CFStringCompareWithOptions, 1,
	 PyDoc_STR("(CFStringRef theString2, CFRange rangeToCompare, CFOptionFlags compareOptions) -> (CFComparisonResult _rv)")},
	{"CFStringCompare", (PyCFunction)CFStringRefObj_CFStringCompare, 1,
	 PyDoc_STR("(CFStringRef theString2, CFOptionFlags compareOptions) -> (CFComparisonResult _rv)")},
	{"CFStringFindWithOptions", (PyCFunction)CFStringRefObj_CFStringFindWithOptions, 1,
	 PyDoc_STR("(CFStringRef stringToFind, CFRange rangeToSearch, CFOptionFlags searchOptions) -> (Boolean _rv, CFRange result)")},
	{"CFStringCreateArrayWithFindResults", (PyCFunction)CFStringRefObj_CFStringCreateArrayWithFindResults, 1,
	 PyDoc_STR("(CFStringRef stringToFind, CFRange rangeToSearch, CFOptionFlags compareOptions) -> (CFArrayRef _rv)")},
	{"CFStringFind", (PyCFunction)CFStringRefObj_CFStringFind, 1,
	 PyDoc_STR("(CFStringRef stringToFind, CFOptionFlags compareOptions) -> (CFRange _rv)")},
	{"CFStringHasPrefix", (PyCFunction)CFStringRefObj_CFStringHasPrefix, 1,
	 PyDoc_STR("(CFStringRef prefix) -> (Boolean _rv)")},
	{"CFStringHasSuffix", (PyCFunction)CFStringRefObj_CFStringHasSuffix, 1,
	 PyDoc_STR("(CFStringRef suffix) -> (Boolean _rv)")},
	{"CFStringGetLineBounds", (PyCFunction)CFStringRefObj_CFStringGetLineBounds, 1,
	 PyDoc_STR("(CFRange range) -> (CFIndex lineBeginIndex, CFIndex lineEndIndex, CFIndex contentsEndIndex)")},
	{"CFStringCreateArrayBySeparatingStrings", (PyCFunction)CFStringRefObj_CFStringCreateArrayBySeparatingStrings, 1,
	 PyDoc_STR("(CFStringRef separatorString) -> (CFArrayRef _rv)")},
	{"CFStringGetIntValue", (PyCFunction)CFStringRefObj_CFStringGetIntValue, 1,
	 PyDoc_STR("() -> (SInt32 _rv)")},
	{"CFStringGetDoubleValue", (PyCFunction)CFStringRefObj_CFStringGetDoubleValue, 1,
	 PyDoc_STR("() -> (double _rv)")},
	{"CFStringConvertIANACharSetNameToEncoding", (PyCFunction)CFStringRefObj_CFStringConvertIANACharSetNameToEncoding, 1,
	 PyDoc_STR("() -> (CFStringEncoding _rv)")},
	{"CFShowStr", (PyCFunction)CFStringRefObj_CFShowStr, 1,
	 PyDoc_STR("() -> None")},
	{"CFURLCreateWithString", (PyCFunction)CFStringRefObj_CFURLCreateWithString, 1,
	 PyDoc_STR("(CFURLRef baseURL) -> (CFURLRef _rv)")},
	{"CFURLCreateWithFileSystemPath", (PyCFunction)CFStringRefObj_CFURLCreateWithFileSystemPath, 1,
	 PyDoc_STR("(CFURLPathStyle pathStyle, Boolean isDirectory) -> (CFURLRef _rv)")},
	{"CFURLCreateWithFileSystemPathRelativeToBase", (PyCFunction)CFStringRefObj_CFURLCreateWithFileSystemPathRelativeToBase, 1,
	 PyDoc_STR("(CFURLPathStyle pathStyle, Boolean isDirectory, CFURLRef baseURL) -> (CFURLRef _rv)")},
	{"CFURLCreateStringByReplacingPercentEscapes", (PyCFunction)CFStringRefObj_CFURLCreateStringByReplacingPercentEscapes, 1,
	 PyDoc_STR("(CFStringRef charactersToLeaveEscaped) -> (CFStringRef _rv)")},
	{"CFURLCreateStringByAddingPercentEscapes", (PyCFunction)CFStringRefObj_CFURLCreateStringByAddingPercentEscapes, 1,
	 PyDoc_STR("(CFStringRef charactersToLeaveUnescaped, CFStringRef legalURLCharactersToBeEscaped, CFStringEncoding encoding) -> (CFStringRef _rv)")},
	{"CFStringGetString", (PyCFunction)CFStringRefObj_CFStringGetString, 1,
	 PyDoc_STR("() -> (string _rv)")},
	{"CFStringGetUnicode", (PyCFunction)CFStringRefObj_CFStringGetUnicode, 1,
	 PyDoc_STR("() -> (unicode _rv)")},
	{NULL, NULL, 0}
};

#define CFStringRefObj_getsetlist NULL


static int CFStringRefObj_compare(CFStringRefObject *self, CFStringRefObject *other)
{
	/* XXXX Or should we use CFEqual?? */
	if ( self->ob_itself > other->ob_itself ) return 1;
	if ( self->ob_itself < other->ob_itself ) return -1;
	return 0;
}

static PyObject * CFStringRefObj_repr(CFStringRefObject *self)
{
	char buf[100];
	sprintf(buf, "<CFStringRef object at 0x%8.8x for 0x%8.8x>", (unsigned)self, (unsigned)self->ob_itself);
	return PyString_FromString(buf);
}

static int CFStringRefObj_hash(CFStringRefObject *self)
{
	/* XXXX Or should we use CFHash?? */
	return (int)self->ob_itself;
}
static int CFStringRefObj_tp_init(PyObject *_self, PyObject *_args, PyObject *_kwds)
{
	CFStringRef itself;
	char *kw[] = {"itself", 0};

	if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFStringRefObj_Convert, &itself))
	{
		((CFStringRefObject *)_self)->ob_itself = itself;
		return 0;
	}

	/* Any CFTypeRef descendent is allowed as initializer too */
	if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFTypeRefObj_Convert, &itself))
	{
		((CFStringRefObject *)_self)->ob_itself = itself;
		return 0;
	}
	return -1;
}

#define CFStringRefObj_tp_alloc PyType_GenericAlloc

static PyObject *CFStringRefObj_tp_new(PyTypeObject *type, PyObject *_args, PyObject *_kwds)
{
	PyObject *self;
	if ((self = type->tp_alloc(type, 0)) == NULL) return NULL;
	((CFStringRefObject *)self)->ob_itself = NULL;
	((CFStringRefObject *)self)->ob_freeit = CFRelease;
	return self;
}

#define CFStringRefObj_tp_free PyObject_Del


PyTypeObject CFStringRef_Type = {
	PyObject_HEAD_INIT(NULL)
	0, /*ob_size*/
	"_CF.CFStringRef", /*tp_name*/
	sizeof(CFStringRefObject), /*tp_basicsize*/
	0, /*tp_itemsize*/
	/* methods */
	(destructor) CFStringRefObj_dealloc, /*tp_dealloc*/
	0, /*tp_print*/
	(getattrfunc)0, /*tp_getattr*/
	(setattrfunc)0, /*tp_setattr*/
	(cmpfunc) CFStringRefObj_compare, /*tp_compare*/
	(reprfunc) CFStringRefObj_repr, /*tp_repr*/
	(PyNumberMethods *)0, /* tp_as_number */
	(PySequenceMethods *)0, /* tp_as_sequence */
	(PyMappingMethods *)0, /* tp_as_mapping */
	(hashfunc) CFStringRefObj_hash, /*tp_hash*/
	0, /*tp_call*/
	0, /*tp_str*/
	PyObject_GenericGetAttr, /*tp_getattro*/
	PyObject_GenericSetAttr, /*tp_setattro */
	0, /*tp_as_buffer*/
	Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */
	0, /*tp_doc*/
	0, /*tp_traverse*/
	0, /*tp_clear*/
	0, /*tp_richcompare*/
	0, /*tp_weaklistoffset*/
	0, /*tp_iter*/
	0, /*tp_iternext*/
	CFStringRefObj_methods, /* tp_methods */
	0, /*tp_members*/
	CFStringRefObj_getsetlist, /*tp_getset*/
	0, /*tp_base*/
	0, /*tp_dict*/
	0, /*tp_descr_get*/
	0, /*tp_descr_set*/
	0, /*tp_dictoffset*/
	CFStringRefObj_tp_init, /* tp_init */
	CFStringRefObj_tp_alloc, /* tp_alloc */
	CFStringRefObj_tp_new, /* tp_new */
	CFStringRefObj_tp_free, /* tp_free */
};

/* ------------------ End object type CFStringRef ------------------- */


/* ----------------- Object type CFMutableStringRef ----------------- */

PyTypeObject CFMutableStringRef_Type;

#define CFMutableStringRefObj_Check(x) ((x)->ob_type == &CFMutableStringRef_Type || PyObject_TypeCheck((x), &CFMutableStringRef_Type))

typedef struct CFMutableStringRefObject {
	PyObject_HEAD
	CFMutableStringRef ob_itself;
	void (*ob_freeit)(CFTypeRef ptr);
} CFMutableStringRefObject;

PyObject *CFMutableStringRefObj_New(CFMutableStringRef itself)
{
	CFMutableStringRefObject *it;
	if (itself == NULL)
	{
		PyErr_SetString(PyExc_RuntimeError, "cannot wrap NULL");
		return NULL;
	}
	it = PyObject_NEW(CFMutableStringRefObject, &CFMutableStringRef_Type);
	if (it == NULL) return NULL;
	/* XXXX Should we tp_init or tp_new our basetype? */
	it->ob_itself = itself;
	it->ob_freeit = CFRelease;
	return (PyObject *)it;
}

int CFMutableStringRefObj_Convert(PyObject *v, CFMutableStringRef *p_itself)
{

	if (v == Py_None) { *p_itself = NULL; return 1; }
	/* Check for other CF objects here */

	if (!CFMutableStringRefObj_Check(v))
	{
		PyErr_SetString(PyExc_TypeError, "CFMutableStringRef required");
		return 0;
	}
	*p_itself = ((CFMutableStringRefObject *)v)->ob_itself;
	return 1;
}

static void CFMutableStringRefObj_dealloc(CFMutableStringRefObject *self)
{
	if (self->ob_freeit && self->ob_itself)
	{
		self->ob_freeit((CFTypeRef)self->ob_itself);
		self->ob_itself = NULL;
	}
	CFStringRef_Type.tp_dealloc((PyObject *)self);
}

static PyObject *CFMutableStringRefObj_CFStringAppend(CFMutableStringRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFStringRef appendedString;
#ifndef CFStringAppend
	PyMac_PRECHECK(CFStringAppend);
#endif
	if (!PyArg_ParseTuple(_args, "O&",
	                      CFStringRefObj_Convert, &appendedString))
		return NULL;
	CFStringAppend(_self->ob_itself,
	               appendedString);
	Py_INCREF(Py_None);
	_res = Py_None;
	return _res;
}

static PyObject *CFMutableStringRefObj_CFStringAppendCharacters(CFMutableStringRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	UniChar *chars__in__;
	UniCharCount chars__len__;
	int chars__in_len__;
#ifndef CFStringAppendCharacters
	PyMac_PRECHECK(CFStringAppendCharacters);
#endif
	if (!PyArg_ParseTuple(_args, "u#",
	                      &chars__in__, &chars__in_len__))
		return NULL;
	chars__len__ = chars__in_len__;
	CFStringAppendCharacters(_self->ob_itself,
	                         chars__in__, chars__len__);
	Py_INCREF(Py_None);
	_res = Py_None;
	return _res;
}

static PyObject *CFMutableStringRefObj_CFStringAppendPascalString(CFMutableStringRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	Str255 pStr;
	CFStringEncoding encoding;
#ifndef CFStringAppendPascalString
	PyMac_PRECHECK(CFStringAppendPascalString);
#endif
	if (!PyArg_ParseTuple(_args, "O&l",
	                      PyMac_GetStr255, pStr,
	                      &encoding))
		return NULL;
	CFStringAppendPascalString(_self->ob_itself,
	                           pStr,
	                           encoding);
	Py_INCREF(Py_None);
	_res = Py_None;
	return _res;
}

static PyObject *CFMutableStringRefObj_CFStringAppendCString(CFMutableStringRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	char* cStr;
	CFStringEncoding encoding;
#ifndef CFStringAppendCString
	PyMac_PRECHECK(CFStringAppendCString);
#endif
	if (!PyArg_ParseTuple(_args, "sl",
	                      &cStr,
	                      &encoding))
		return NULL;
	CFStringAppendCString(_self->ob_itself,
	                      cStr,
	                      encoding);
	Py_INCREF(Py_None);
	_res = Py_None;
	return _res;
}

static PyObject *CFMutableStringRefObj_CFStringInsert(CFMutableStringRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFIndex idx;
	CFStringRef insertedStr;
#ifndef CFStringInsert
	PyMac_PRECHECK(CFStringInsert);
#endif
	if (!PyArg_ParseTuple(_args, "lO&",
	                      &idx,
	                      CFStringRefObj_Convert, &insertedStr))
		return NULL;
	CFStringInsert(_self->ob_itself,
	               idx,
	               insertedStr);
	Py_INCREF(Py_None);
	_res = Py_None;
	return _res;
}

static PyObject *CFMutableStringRefObj_CFStringDelete(CFMutableStringRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFRange range;
#ifndef CFStringDelete
	PyMac_PRECHECK(CFStringDelete);
#endif
	if (!PyArg_ParseTuple(_args, "O&",
	                      CFRange_Convert, &range))
		return NULL;
	CFStringDelete(_self->ob_itself,
	               range);
	Py_INCREF(Py_None);
	_res = Py_None;
	return _res;
}

static PyObject *CFMutableStringRefObj_CFStringReplace(CFMutableStringRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFRange range;
	CFStringRef replacement;
#ifndef CFStringReplace
	PyMac_PRECHECK(CFStringReplace);
#endif
	if (!PyArg_ParseTuple(_args, "O&O&",
	                      CFRange_Convert, &range,
	                      CFStringRefObj_Convert, &replacement))
		return NULL;
	CFStringReplace(_self->ob_itself,
	                range,
	                replacement);
	Py_INCREF(Py_None);
	_res = Py_None;
	return _res;
}

static PyObject *CFMutableStringRefObj_CFStringReplaceAll(CFMutableStringRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFStringRef replacement;
#ifndef CFStringReplaceAll
	PyMac_PRECHECK(CFStringReplaceAll);
#endif
	if (!PyArg_ParseTuple(_args, "O&",
	                      CFStringRefObj_Convert, &replacement))
		return NULL;
	CFStringReplaceAll(_self->ob_itself,
	                   replacement);
	Py_INCREF(Py_None);
	_res = Py_None;
	return _res;
}

static PyObject *CFMutableStringRefObj_CFStringPad(CFMutableStringRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFStringRef padString;
	CFIndex length;
	CFIndex indexIntoPad;
#ifndef CFStringPad
	PyMac_PRECHECK(CFStringPad);
#endif
	if (!PyArg_ParseTuple(_args, "O&ll",
	                      CFStringRefObj_Convert, &padString,
	                      &length,
	                      &indexIntoPad))
		return NULL;
	CFStringPad(_self->ob_itself,
	            padString,
	            length,
	            indexIntoPad);
	Py_INCREF(Py_None);
	_res = Py_None;
	return _res;
}

static PyObject *CFMutableStringRefObj_CFStringTrim(CFMutableStringRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFStringRef trimString;
#ifndef CFStringTrim
	PyMac_PRECHECK(CFStringTrim);
#endif
	if (!PyArg_ParseTuple(_args, "O&",
	                      CFStringRefObj_Convert, &trimString))
		return NULL;
	CFStringTrim(_self->ob_itself,
	             trimString);
	Py_INCREF(Py_None);
	_res = Py_None;
	return _res;
}

static PyObject *CFMutableStringRefObj_CFStringTrimWhitespace(CFMutableStringRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
#ifndef CFStringTrimWhitespace
	PyMac_PRECHECK(CFStringTrimWhitespace);
#endif
	if (!PyArg_ParseTuple(_args, ""))
		return NULL;
	CFStringTrimWhitespace(_self->ob_itself);
	Py_INCREF(Py_None);
	_res = Py_None;
	return _res;
}

static PyMethodDef CFMutableStringRefObj_methods[] = {
	{"CFStringAppend", (PyCFunction)CFMutableStringRefObj_CFStringAppend, 1,
	 PyDoc_STR("(CFStringRef appendedString) -> None")},
	{"CFStringAppendCharacters", (PyCFunction)CFMutableStringRefObj_CFStringAppendCharacters, 1,
	 PyDoc_STR("(Buffer chars) -> None")},
	{"CFStringAppendPascalString", (PyCFunction)CFMutableStringRefObj_CFStringAppendPascalString, 1,
	 PyDoc_STR("(Str255 pStr, CFStringEncoding encoding) -> None")},
	{"CFStringAppendCString", (PyCFunction)CFMutableStringRefObj_CFStringAppendCString, 1,
	 PyDoc_STR("(char* cStr, CFStringEncoding encoding) -> None")},
	{"CFStringInsert", (PyCFunction)CFMutableStringRefObj_CFStringInsert, 1,
	 PyDoc_STR("(CFIndex idx, CFStringRef insertedStr) -> None")},
	{"CFStringDelete", (PyCFunction)CFMutableStringRefObj_CFStringDelete, 1,
	 PyDoc_STR("(CFRange range) -> None")},
	{"CFStringReplace", (PyCFunction)CFMutableStringRefObj_CFStringReplace, 1,
	 PyDoc_STR("(CFRange range, CFStringRef replacement) -> None")},
	{"CFStringReplaceAll", (PyCFunction)CFMutableStringRefObj_CFStringReplaceAll, 1,
	 PyDoc_STR("(CFStringRef replacement) -> None")},
	{"CFStringPad", (PyCFunction)CFMutableStringRefObj_CFStringPad, 1,
	 PyDoc_STR("(CFStringRef padString, CFIndex length, CFIndex indexIntoPad) -> None")},
	{"CFStringTrim", (PyCFunction)CFMutableStringRefObj_CFStringTrim, 1,
	 PyDoc_STR("(CFStringRef trimString) -> None")},
	{"CFStringTrimWhitespace", (PyCFunction)CFMutableStringRefObj_CFStringTrimWhitespace, 1,
	 PyDoc_STR("() -> None")},
	{NULL, NULL, 0}
};

#define CFMutableStringRefObj_getsetlist NULL


static int CFMutableStringRefObj_compare(CFMutableStringRefObject *self, CFMutableStringRefObject *other)
{
	/* XXXX Or should we use CFEqual?? */
	if ( self->ob_itself > other->ob_itself ) return 1;
	if ( self->ob_itself < other->ob_itself ) return -1;
	return 0;
}

static PyObject * CFMutableStringRefObj_repr(CFMutableStringRefObject *self)
{
	char buf[100];
	sprintf(buf, "<CFMutableStringRef object at 0x%8.8x for 0x%8.8x>", (unsigned)self, (unsigned)self->ob_itself);
	return PyString_FromString(buf);
}

static int CFMutableStringRefObj_hash(CFMutableStringRefObject *self)
{
	/* XXXX Or should we use CFHash?? */
	return (int)self->ob_itself;
}
static int CFMutableStringRefObj_tp_init(PyObject *_self, PyObject *_args, PyObject *_kwds)
{
	CFMutableStringRef itself;
	char *kw[] = {"itself", 0};

	if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFMutableStringRefObj_Convert, &itself))
	{
		((CFMutableStringRefObject *)_self)->ob_itself = itself;
		return 0;
	}

	/* Any CFTypeRef descendent is allowed as initializer too */
	if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFTypeRefObj_Convert, &itself))
	{
		((CFMutableStringRefObject *)_self)->ob_itself = itself;
		return 0;
	}
	return -1;
}

#define CFMutableStringRefObj_tp_alloc PyType_GenericAlloc

static PyObject *CFMutableStringRefObj_tp_new(PyTypeObject *type, PyObject *_args, PyObject *_kwds)
{
	PyObject *self;
	if ((self = type->tp_alloc(type, 0)) == NULL) return NULL;
	((CFMutableStringRefObject *)self)->ob_itself = NULL;
	((CFMutableStringRefObject *)self)->ob_freeit = CFRelease;
	return self;
}

#define CFMutableStringRefObj_tp_free PyObject_Del


PyTypeObject CFMutableStringRef_Type = {
	PyObject_HEAD_INIT(NULL)
	0, /*ob_size*/
	"_CF.CFMutableStringRef", /*tp_name*/
	sizeof(CFMutableStringRefObject), /*tp_basicsize*/
	0, /*tp_itemsize*/
	/* methods */
	(destructor) CFMutableStringRefObj_dealloc, /*tp_dealloc*/
	0, /*tp_print*/
	(getattrfunc)0, /*tp_getattr*/
	(setattrfunc)0, /*tp_setattr*/
	(cmpfunc) CFMutableStringRefObj_compare, /*tp_compare*/
	(reprfunc) CFMutableStringRefObj_repr, /*tp_repr*/
	(PyNumberMethods *)0, /* tp_as_number */
	(PySequenceMethods *)0, /* tp_as_sequence */
	(PyMappingMethods *)0, /* tp_as_mapping */
	(hashfunc) CFMutableStringRefObj_hash, /*tp_hash*/
	0, /*tp_call*/
	0, /*tp_str*/
	PyObject_GenericGetAttr, /*tp_getattro*/
	PyObject_GenericSetAttr, /*tp_setattro */
	0, /*tp_as_buffer*/
	Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */
	0, /*tp_doc*/
	0, /*tp_traverse*/
	0, /*tp_clear*/
	0, /*tp_richcompare*/
	0, /*tp_weaklistoffset*/
	0, /*tp_iter*/
	0, /*tp_iternext*/
	CFMutableStringRefObj_methods, /* tp_methods */
	0, /*tp_members*/
	CFMutableStringRefObj_getsetlist, /*tp_getset*/
	0, /*tp_base*/
	0, /*tp_dict*/
	0, /*tp_descr_get*/
	0, /*tp_descr_set*/
	0, /*tp_dictoffset*/
	CFMutableStringRefObj_tp_init, /* tp_init */
	CFMutableStringRefObj_tp_alloc, /* tp_alloc */
	CFMutableStringRefObj_tp_new, /* tp_new */
	CFMutableStringRefObj_tp_free, /* tp_free */
};

/* --------------- End object type CFMutableStringRef --------------- */


/* ---------------------- Object type CFURLRef ---------------------- */

PyTypeObject CFURLRef_Type;

#define CFURLRefObj_Check(x) ((x)->ob_type == &CFURLRef_Type || PyObject_TypeCheck((x), &CFURLRef_Type))

typedef struct CFURLRefObject {
	PyObject_HEAD
	CFURLRef ob_itself;
	void (*ob_freeit)(CFTypeRef ptr);
} CFURLRefObject;

PyObject *CFURLRefObj_New(CFURLRef itself)
{
	CFURLRefObject *it;
	if (itself == NULL)
	{
		PyErr_SetString(PyExc_RuntimeError, "cannot wrap NULL");
		return NULL;
	}
	it = PyObject_NEW(CFURLRefObject, &CFURLRef_Type);
	if (it == NULL) return NULL;
	/* XXXX Should we tp_init or tp_new our basetype? */
	it->ob_itself = itself;
	it->ob_freeit = CFRelease;
	return (PyObject *)it;
}

int CFURLRefObj_Convert(PyObject *v, CFURLRef *p_itself)
{

	if (v == Py_None) { *p_itself = NULL; return 1; }
	/* Check for other CF objects here */

	if (!CFURLRefObj_Check(v))
	{
		PyErr_SetString(PyExc_TypeError, "CFURLRef required");
		return 0;
	}
	*p_itself = ((CFURLRefObject *)v)->ob_itself;
	return 1;
}

static void CFURLRefObj_dealloc(CFURLRefObject *self)
{
	if (self->ob_freeit && self->ob_itself)
	{
		self->ob_freeit((CFTypeRef)self->ob_itself);
		self->ob_itself = NULL;
	}
	CFTypeRef_Type.tp_dealloc((PyObject *)self);
}

static PyObject *CFURLRefObj_CFURLCreateData(CFURLRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFDataRef _rv;
	CFStringEncoding encoding;
	Boolean escapeWhitespace;
	if (!PyArg_ParseTuple(_args, "ll",
	                      &encoding,
	                      &escapeWhitespace))
		return NULL;
	_rv = CFURLCreateData((CFAllocatorRef)NULL,
	                      _self->ob_itself,
	                      encoding,
	                      escapeWhitespace);
	_res = Py_BuildValue("O&",
	                     CFDataRefObj_New, _rv);
	return _res;
}

static PyObject *CFURLRefObj_CFURLGetFileSystemRepresentation(CFURLRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	Boolean _rv;
	Boolean resolveAgainstBase;
	UInt8 buffer;
	CFIndex maxBufLen;
#ifndef CFURLGetFileSystemRepresentation
	PyMac_PRECHECK(CFURLGetFileSystemRepresentation);
#endif
	if (!PyArg_ParseTuple(_args, "ll",
	                      &resolveAgainstBase,
	                      &maxBufLen))
		return NULL;
	_rv = CFURLGetFileSystemRepresentation(_self->ob_itself,
	                                       resolveAgainstBase,
	                                       &buffer,
	                                       maxBufLen);
	_res = Py_BuildValue("lb",
	                     _rv,
	                     buffer);
	return _res;
}

static PyObject *CFURLRefObj_CFURLCopyAbsoluteURL(CFURLRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFURLRef _rv;
#ifndef CFURLCopyAbsoluteURL
	PyMac_PRECHECK(CFURLCopyAbsoluteURL);
#endif
	if (!PyArg_ParseTuple(_args, ""))
		return NULL;
	_rv = CFURLCopyAbsoluteURL(_self->ob_itself);
	_res = Py_BuildValue("O&",
	                     CFURLRefObj_New, _rv);
	return _res;
}

static PyObject *CFURLRefObj_CFURLGetString(CFURLRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFStringRef _rv;
#ifndef CFURLGetString
	PyMac_PRECHECK(CFURLGetString);
#endif
	if (!PyArg_ParseTuple(_args, ""))
		return NULL;
	_rv = CFURLGetString(_self->ob_itself);
	_res = Py_BuildValue("O&",
	                     CFStringRefObj_New, _rv);
	return _res;
}

static PyObject *CFURLRefObj_CFURLGetBaseURL(CFURLRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFURLRef _rv;
#ifndef CFURLGetBaseURL
	PyMac_PRECHECK(CFURLGetBaseURL);
#endif
	if (!PyArg_ParseTuple(_args, ""))
		return NULL;
	_rv = CFURLGetBaseURL(_self->ob_itself);
	_res = Py_BuildValue("O&",
	                     CFURLRefObj_New, _rv);
	return _res;
}

static PyObject *CFURLRefObj_CFURLCanBeDecomposed(CFURLRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	Boolean _rv;
#ifndef CFURLCanBeDecomposed
	PyMac_PRECHECK(CFURLCanBeDecomposed);
#endif
	if (!PyArg_ParseTuple(_args, ""))
		return NULL;
	_rv = CFURLCanBeDecomposed(_self->ob_itself);
	_res = Py_BuildValue("l",
	                     _rv);
	return _res;
}

static PyObject *CFURLRefObj_CFURLCopyScheme(CFURLRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFStringRef _rv;
#ifndef CFURLCopyScheme
	PyMac_PRECHECK(CFURLCopyScheme);
#endif
	if (!PyArg_ParseTuple(_args, ""))
		return NULL;
	_rv = CFURLCopyScheme(_self->ob_itself);
	_res = Py_BuildValue("O&",
	                     CFStringRefObj_New, _rv);
	return _res;
}

static PyObject *CFURLRefObj_CFURLCopyNetLocation(CFURLRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFStringRef _rv;
#ifndef CFURLCopyNetLocation
	PyMac_PRECHECK(CFURLCopyNetLocation);
#endif
	if (!PyArg_ParseTuple(_args, ""))
		return NULL;
	_rv = CFURLCopyNetLocation(_self->ob_itself);
	_res = Py_BuildValue("O&",
	                     CFStringRefObj_New, _rv);
	return _res;
}

static PyObject *CFURLRefObj_CFURLCopyPath(CFURLRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFStringRef _rv;
#ifndef CFURLCopyPath
	PyMac_PRECHECK(CFURLCopyPath);
#endif
	if (!PyArg_ParseTuple(_args, ""))
		return NULL;
	_rv = CFURLCopyPath(_self->ob_itself);
	_res = Py_BuildValue("O&",
	                     CFStringRefObj_New, _rv);
	return _res;
}

static PyObject *CFURLRefObj_CFURLCopyStrictPath(CFURLRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFStringRef _rv;
	Boolean isAbsolute;
#ifndef CFURLCopyStrictPath
	PyMac_PRECHECK(CFURLCopyStrictPath);
#endif
	if (!PyArg_ParseTuple(_args, ""))
		return NULL;
	_rv = CFURLCopyStrictPath(_self->ob_itself,
	                          &isAbsolute);
	_res = Py_BuildValue("O&l",
	                     CFStringRefObj_New, _rv,
	                     isAbsolute);
	return _res;
}

static PyObject *CFURLRefObj_CFURLCopyFileSystemPath(CFURLRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFStringRef _rv;
	CFURLPathStyle pathStyle;
#ifndef CFURLCopyFileSystemPath
	PyMac_PRECHECK(CFURLCopyFileSystemPath);
#endif
	if (!PyArg_ParseTuple(_args, "l",
	                      &pathStyle))
		return NULL;
	_rv = CFURLCopyFileSystemPath(_self->ob_itself,
	                              pathStyle);
	_res = Py_BuildValue("O&",
	                     CFStringRefObj_New, _rv);
	return _res;
}

static PyObject *CFURLRefObj_CFURLHasDirectoryPath(CFURLRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	Boolean _rv;
#ifndef CFURLHasDirectoryPath
	PyMac_PRECHECK(CFURLHasDirectoryPath);
#endif
	if (!PyArg_ParseTuple(_args, ""))
		return NULL;
	_rv = CFURLHasDirectoryPath(_self->ob_itself);
	_res = Py_BuildValue("l",
	                     _rv);
	return _res;
}

static PyObject *CFURLRefObj_CFURLCopyResourceSpecifier(CFURLRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFStringRef _rv;
#ifndef CFURLCopyResourceSpecifier
	PyMac_PRECHECK(CFURLCopyResourceSpecifier);
#endif
	if (!PyArg_ParseTuple(_args, ""))
		return NULL;
	_rv = CFURLCopyResourceSpecifier(_self->ob_itself);
	_res = Py_BuildValue("O&",
	                     CFStringRefObj_New, _rv);
	return _res;
}

static PyObject *CFURLRefObj_CFURLCopyHostName(CFURLRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFStringRef _rv;
#ifndef CFURLCopyHostName
	PyMac_PRECHECK(CFURLCopyHostName);
#endif
	if (!PyArg_ParseTuple(_args, ""))
		return NULL;
	_rv = CFURLCopyHostName(_self->ob_itself);
	_res = Py_BuildValue("O&",
	                     CFStringRefObj_New, _rv);
	return _res;
}

static PyObject *CFURLRefObj_CFURLGetPortNumber(CFURLRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	SInt32 _rv;
#ifndef CFURLGetPortNumber
	PyMac_PRECHECK(CFURLGetPortNumber);
#endif
	if (!PyArg_ParseTuple(_args, ""))
		return NULL;
	_rv = CFURLGetPortNumber(_self->ob_itself);
	_res = Py_BuildValue("l",
	                     _rv);
	return _res;
}

static PyObject *CFURLRefObj_CFURLCopyUserName(CFURLRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFStringRef _rv;
#ifndef CFURLCopyUserName
	PyMac_PRECHECK(CFURLCopyUserName);
#endif
	if (!PyArg_ParseTuple(_args, ""))
		return NULL;
	_rv = CFURLCopyUserName(_self->ob_itself);
	_res = Py_BuildValue("O&",
	                     CFStringRefObj_New, _rv);
	return _res;
}

static PyObject *CFURLRefObj_CFURLCopyPassword(CFURLRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFStringRef _rv;
#ifndef CFURLCopyPassword
	PyMac_PRECHECK(CFURLCopyPassword);
#endif
	if (!PyArg_ParseTuple(_args, ""))
		return NULL;
	_rv = CFURLCopyPassword(_self->ob_itself);
	_res = Py_BuildValue("O&",
	                     CFStringRefObj_New, _rv);
	return _res;
}

static PyObject *CFURLRefObj_CFURLCopyParameterString(CFURLRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFStringRef _rv;
	CFStringRef charactersToLeaveEscaped;
#ifndef CFURLCopyParameterString
	PyMac_PRECHECK(CFURLCopyParameterString);
#endif
	if (!PyArg_ParseTuple(_args, "O&",
	                      CFStringRefObj_Convert, &charactersToLeaveEscaped))
		return NULL;
	_rv = CFURLCopyParameterString(_self->ob_itself,
	                               charactersToLeaveEscaped);
	_res = Py_BuildValue("O&",
	                     CFStringRefObj_New, _rv);
	return _res;
}

static PyObject *CFURLRefObj_CFURLCopyQueryString(CFURLRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFStringRef _rv;
	CFStringRef charactersToLeaveEscaped;
#ifndef CFURLCopyQueryString
	PyMac_PRECHECK(CFURLCopyQueryString);
#endif
	if (!PyArg_ParseTuple(_args, "O&",
	                      CFStringRefObj_Convert, &charactersToLeaveEscaped))
		return NULL;
	_rv = CFURLCopyQueryString(_self->ob_itself,
	                           charactersToLeaveEscaped);
	_res = Py_BuildValue("O&",
	                     CFStringRefObj_New, _rv);
	return _res;
}

static PyObject *CFURLRefObj_CFURLCopyFragment(CFURLRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFStringRef _rv;
	CFStringRef charactersToLeaveEscaped;
#ifndef CFURLCopyFragment
	PyMac_PRECHECK(CFURLCopyFragment);
#endif
	if (!PyArg_ParseTuple(_args, "O&",
	                      CFStringRefObj_Convert, &charactersToLeaveEscaped))
		return NULL;
	_rv = CFURLCopyFragment(_self->ob_itself,
	                        charactersToLeaveEscaped);
	_res = Py_BuildValue("O&",
	                     CFStringRefObj_New, _rv);
	return _res;
}

static PyObject *CFURLRefObj_CFURLCopyLastPathComponent(CFURLRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFStringRef _rv;
#ifndef CFURLCopyLastPathComponent
	PyMac_PRECHECK(CFURLCopyLastPathComponent);
#endif
	if (!PyArg_ParseTuple(_args, ""))
		return NULL;
	_rv = CFURLCopyLastPathComponent(_self->ob_itself);
	_res = Py_BuildValue("O&",
	                     CFStringRefObj_New, _rv);
	return _res;
}

static PyObject *CFURLRefObj_CFURLCopyPathExtension(CFURLRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFStringRef _rv;
#ifndef CFURLCopyPathExtension
	PyMac_PRECHECK(CFURLCopyPathExtension);
#endif
	if (!PyArg_ParseTuple(_args, ""))
		return NULL;
	_rv = CFURLCopyPathExtension(_self->ob_itself);
	_res = Py_BuildValue("O&",
	                     CFStringRefObj_New, _rv);
	return _res;
}

static PyObject *CFURLRefObj_CFURLCreateCopyAppendingPathComponent(CFURLRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFURLRef _rv;
	CFStringRef pathComponent;
	Boolean isDirectory;
	if (!PyArg_ParseTuple(_args, "O&l",
	                      CFStringRefObj_Convert, &pathComponent,
	                      &isDirectory))
		return NULL;
	_rv = CFURLCreateCopyAppendingPathComponent((CFAllocatorRef)NULL,
	                                            _self->ob_itself,
	                                            pathComponent,
	                                            isDirectory);
	_res = Py_BuildValue("O&",
	                     CFURLRefObj_New, _rv);
	return _res;
}

static PyObject *CFURLRefObj_CFURLCreateCopyDeletingLastPathComponent(CFURLRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFURLRef _rv;
	if (!PyArg_ParseTuple(_args, ""))
		return NULL;
	_rv = CFURLCreateCopyDeletingLastPathComponent((CFAllocatorRef)NULL,
	                                               _self->ob_itself);
	_res = Py_BuildValue("O&",
	                     CFURLRefObj_New, _rv);
	return _res;
}

static PyObject *CFURLRefObj_CFURLCreateCopyAppendingPathExtension(CFURLRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFURLRef _rv;
	CFStringRef extension;
	if (!PyArg_ParseTuple(_args, "O&",
	                      CFStringRefObj_Convert, &extension))
		return NULL;
	_rv = CFURLCreateCopyAppendingPathExtension((CFAllocatorRef)NULL,
	                                            _self->ob_itself,
	                                            extension);
	_res = Py_BuildValue("O&",
	                     CFURLRefObj_New, _rv);
	return _res;
}

static PyObject *CFURLRefObj_CFURLCreateCopyDeletingPathExtension(CFURLRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFURLRef _rv;
	if (!PyArg_ParseTuple(_args, ""))
		return NULL;
	_rv = CFURLCreateCopyDeletingPathExtension((CFAllocatorRef)NULL,
	                                           _self->ob_itself);
	_res = Py_BuildValue("O&",
	                     CFURLRefObj_New, _rv);
	return _res;
}

static PyObject *CFURLRefObj_CFURLGetFSRef(CFURLRefObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	Boolean _rv;
	FSRef fsRef;
#ifndef CFURLGetFSRef
	PyMac_PRECHECK(CFURLGetFSRef);
#endif
	if (!PyArg_ParseTuple(_args, ""))
		return NULL;
	_rv = CFURLGetFSRef(_self->ob_itself,
	                    &fsRef);
	_res = Py_BuildValue("lO&",
	                     _rv,
	                     PyMac_BuildFSRef, &fsRef);
	return _res;
}

static PyMethodDef CFURLRefObj_methods[] = {
	{"CFURLCreateData", (PyCFunction)CFURLRefObj_CFURLCreateData, 1,
	 PyDoc_STR("(CFStringEncoding encoding, Boolean escapeWhitespace) -> (CFDataRef _rv)")},
	{"CFURLGetFileSystemRepresentation", (PyCFunction)CFURLRefObj_CFURLGetFileSystemRepresentation, 1,
	 PyDoc_STR("(Boolean resolveAgainstBase, CFIndex maxBufLen) -> (Boolean _rv, UInt8 buffer)")},
	{"CFURLCopyAbsoluteURL", (PyCFunction)CFURLRefObj_CFURLCopyAbsoluteURL, 1,
	 PyDoc_STR("() -> (CFURLRef _rv)")},
	{"CFURLGetString", (PyCFunction)CFURLRefObj_CFURLGetString, 1,
	 PyDoc_STR("() -> (CFStringRef _rv)")},
	{"CFURLGetBaseURL", (PyCFunction)CFURLRefObj_CFURLGetBaseURL, 1,
	 PyDoc_STR("() -> (CFURLRef _rv)")},
	{"CFURLCanBeDecomposed", (PyCFunction)CFURLRefObj_CFURLCanBeDecomposed, 1,
	 PyDoc_STR("() -> (Boolean _rv)")},
	{"CFURLCopyScheme", (PyCFunction)CFURLRefObj_CFURLCopyScheme, 1,
	 PyDoc_STR("() -> (CFStringRef _rv)")},
	{"CFURLCopyNetLocation", (PyCFunction)CFURLRefObj_CFURLCopyNetLocation, 1,
	 PyDoc_STR("() -> (CFStringRef _rv)")},
	{"CFURLCopyPath", (PyCFunction)CFURLRefObj_CFURLCopyPath, 1,
	 PyDoc_STR("() -> (CFStringRef _rv)")},
	{"CFURLCopyStrictPath", (PyCFunction)CFURLRefObj_CFURLCopyStrictPath, 1,
	 PyDoc_STR("() -> (CFStringRef _rv, Boolean isAbsolute)")},
	{"CFURLCopyFileSystemPath", (PyCFunction)CFURLRefObj_CFURLCopyFileSystemPath, 1,
	 PyDoc_STR("(CFURLPathStyle pathStyle) -> (CFStringRef _rv)")},
	{"CFURLHasDirectoryPath", (PyCFunction)CFURLRefObj_CFURLHasDirectoryPath, 1,
	 PyDoc_STR("() -> (Boolean _rv)")},
	{"CFURLCopyResourceSpecifier", (PyCFunction)CFURLRefObj_CFURLCopyResourceSpecifier, 1,
	 PyDoc_STR("() -> (CFStringRef _rv)")},
	{"CFURLCopyHostName", (PyCFunction)CFURLRefObj_CFURLCopyHostName, 1,
	 PyDoc_STR("() -> (CFStringRef _rv)")},
	{"CFURLGetPortNumber", (PyCFunction)CFURLRefObj_CFURLGetPortNumber, 1,
	 PyDoc_STR("() -> (SInt32 _rv)")},
	{"CFURLCopyUserName", (PyCFunction)CFURLRefObj_CFURLCopyUserName, 1,
	 PyDoc_STR("() -> (CFStringRef _rv)")},
	{"CFURLCopyPassword", (PyCFunction)CFURLRefObj_CFURLCopyPassword, 1,
	 PyDoc_STR("() -> (CFStringRef _rv)")},
	{"CFURLCopyParameterString", (PyCFunction)CFURLRefObj_CFURLCopyParameterString, 1,
	 PyDoc_STR("(CFStringRef charactersToLeaveEscaped) -> (CFStringRef _rv)")},
	{"CFURLCopyQueryString", (PyCFunction)CFURLRefObj_CFURLCopyQueryString, 1,
	 PyDoc_STR("(CFStringRef charactersToLeaveEscaped) -> (CFStringRef _rv)")},
	{"CFURLCopyFragment", (PyCFunction)CFURLRefObj_CFURLCopyFragment, 1,
	 PyDoc_STR("(CFStringRef charactersToLeaveEscaped) -> (CFStringRef _rv)")},
	{"CFURLCopyLastPathComponent", (PyCFunction)CFURLRefObj_CFURLCopyLastPathComponent, 1,
	 PyDoc_STR("() -> (CFStringRef _rv)")},
	{"CFURLCopyPathExtension", (PyCFunction)CFURLRefObj_CFURLCopyPathExtension, 1,
	 PyDoc_STR("() -> (CFStringRef _rv)")},
	{"CFURLCreateCopyAppendingPathComponent", (PyCFunction)CFURLRefObj_CFURLCreateCopyAppendingPathComponent, 1,
	 PyDoc_STR("(CFStringRef pathComponent, Boolean isDirectory) -> (CFURLRef _rv)")},
	{"CFURLCreateCopyDeletingLastPathComponent", (PyCFunction)CFURLRefObj_CFURLCreateCopyDeletingLastPathComponent, 1,
	 PyDoc_STR("() -> (CFURLRef _rv)")},
	{"CFURLCreateCopyAppendingPathExtension", (PyCFunction)CFURLRefObj_CFURLCreateCopyAppendingPathExtension, 1,
	 PyDoc_STR("(CFStringRef extension) -> (CFURLRef _rv)")},
	{"CFURLCreateCopyDeletingPathExtension", (PyCFunction)CFURLRefObj_CFURLCreateCopyDeletingPathExtension, 1,
	 PyDoc_STR("() -> (CFURLRef _rv)")},
	{"CFURLGetFSRef", (PyCFunction)CFURLRefObj_CFURLGetFSRef, 1,
	 PyDoc_STR("() -> (Boolean _rv, FSRef fsRef)")},
	{NULL, NULL, 0}
};

#define CFURLRefObj_getsetlist NULL


static int CFURLRefObj_compare(CFURLRefObject *self, CFURLRefObject *other)
{
	/* XXXX Or should we use CFEqual?? */
	if ( self->ob_itself > other->ob_itself ) return 1;
	if ( self->ob_itself < other->ob_itself ) return -1;
	return 0;
}

static PyObject * CFURLRefObj_repr(CFURLRefObject *self)
{
	char buf[100];
	sprintf(buf, "<CFURL object at 0x%8.8x for 0x%8.8x>", (unsigned)self, (unsigned)self->ob_itself);
	return PyString_FromString(buf);
}

static int CFURLRefObj_hash(CFURLRefObject *self)
{
	/* XXXX Or should we use CFHash?? */
	return (int)self->ob_itself;
}
static int CFURLRefObj_tp_init(PyObject *_self, PyObject *_args, PyObject *_kwds)
{
	CFURLRef itself;
	char *kw[] = {"itself", 0};

	if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFURLRefObj_Convert, &itself))
	{
		((CFURLRefObject *)_self)->ob_itself = itself;
		return 0;
	}

	/* Any CFTypeRef descendent is allowed as initializer too */
	if (PyArg_ParseTupleAndKeywords(_args, _kwds, "O&", kw, CFTypeRefObj_Convert, &itself))
	{
		((CFURLRefObject *)_self)->ob_itself = itself;
		return 0;
	}
	return -1;
}

#define CFURLRefObj_tp_alloc PyType_GenericAlloc

static PyObject *CFURLRefObj_tp_new(PyTypeObject *type, PyObject *_args, PyObject *_kwds)
{
	PyObject *self;
	if ((self = type->tp_alloc(type, 0)) == NULL) return NULL;
	((CFURLRefObject *)self)->ob_itself = NULL;
	((CFURLRefObject *)self)->ob_freeit = CFRelease;
	return self;
}

#define CFURLRefObj_tp_free PyObject_Del


PyTypeObject CFURLRef_Type = {
	PyObject_HEAD_INIT(NULL)
	0, /*ob_size*/
	"_CF.CFURLRef", /*tp_name*/
	sizeof(CFURLRefObject), /*tp_basicsize*/
	0, /*tp_itemsize*/
	/* methods */
	(destructor) CFURLRefObj_dealloc, /*tp_dealloc*/
	0, /*tp_print*/
	(getattrfunc)0, /*tp_getattr*/
	(setattrfunc)0, /*tp_setattr*/
	(cmpfunc) CFURLRefObj_compare, /*tp_compare*/
	(reprfunc) CFURLRefObj_repr, /*tp_repr*/
	(PyNumberMethods *)0, /* tp_as_number */
	(PySequenceMethods *)0, /* tp_as_sequence */
	(PyMappingMethods *)0, /* tp_as_mapping */
	(hashfunc) CFURLRefObj_hash, /*tp_hash*/
	0, /*tp_call*/
	0, /*tp_str*/
	PyObject_GenericGetAttr, /*tp_getattro*/
	PyObject_GenericSetAttr, /*tp_setattro */
	0, /*tp_as_buffer*/
	Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */
	0, /*tp_doc*/
	0, /*tp_traverse*/
	0, /*tp_clear*/
	0, /*tp_richcompare*/
	0, /*tp_weaklistoffset*/
	0, /*tp_iter*/
	0, /*tp_iternext*/
	CFURLRefObj_methods, /* tp_methods */
	0, /*tp_members*/
	CFURLRefObj_getsetlist, /*tp_getset*/
	0, /*tp_base*/
	0, /*tp_dict*/
	0, /*tp_descr_get*/
	0, /*tp_descr_set*/
	0, /*tp_dictoffset*/
	CFURLRefObj_tp_init, /* tp_init */
	CFURLRefObj_tp_alloc, /* tp_alloc */
	CFURLRefObj_tp_new, /* tp_new */
	CFURLRefObj_tp_free, /* tp_free */
};

/* -------------------- End object type CFURLRef -------------------- */


static PyObject *CF___CFRangeMake(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFRange _rv;
	CFIndex loc;
	CFIndex len;
#ifndef __CFRangeMake
	PyMac_PRECHECK(__CFRangeMake);
#endif
	if (!PyArg_ParseTuple(_args, "ll",
	                      &loc,
	                      &len))
		return NULL;
	_rv = __CFRangeMake(loc,
	                    len);
	_res = Py_BuildValue("O&",
	                     CFRange_New, _rv);
	return _res;
}

static PyObject *CF_CFAllocatorGetTypeID(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFTypeID _rv;
#ifndef CFAllocatorGetTypeID
	PyMac_PRECHECK(CFAllocatorGetTypeID);
#endif
	if (!PyArg_ParseTuple(_args, ""))
		return NULL;
	_rv = CFAllocatorGetTypeID();
	_res = Py_BuildValue("l",
	                     _rv);
	return _res;
}

static PyObject *CF_CFAllocatorGetPreferredSizeForSize(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFIndex _rv;
	CFIndex size;
	CFOptionFlags hint;
#ifndef CFAllocatorGetPreferredSizeForSize
	PyMac_PRECHECK(CFAllocatorGetPreferredSizeForSize);
#endif
	if (!PyArg_ParseTuple(_args, "ll",
	                      &size,
	                      &hint))
		return NULL;
	_rv = CFAllocatorGetPreferredSizeForSize((CFAllocatorRef)NULL,
	                                         size,
	                                         hint);
	_res = Py_BuildValue("l",
	                     _rv);
	return _res;
}

static PyObject *CF_CFCopyTypeIDDescription(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFStringRef _rv;
	CFTypeID type_id;
#ifndef CFCopyTypeIDDescription
	PyMac_PRECHECK(CFCopyTypeIDDescription);
#endif
	if (!PyArg_ParseTuple(_args, "l",
	                      &type_id))
		return NULL;
	_rv = CFCopyTypeIDDescription(type_id);
	_res = Py_BuildValue("O&",
	                     CFStringRefObj_New, _rv);
	return _res;
}

static PyObject *CF_CFArrayGetTypeID(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFTypeID _rv;
#ifndef CFArrayGetTypeID
	PyMac_PRECHECK(CFArrayGetTypeID);
#endif
	if (!PyArg_ParseTuple(_args, ""))
		return NULL;
	_rv = CFArrayGetTypeID();
	_res = Py_BuildValue("l",
	                     _rv);
	return _res;
}

static PyObject *CF_CFArrayCreateMutable(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFMutableArrayRef _rv;
	CFIndex capacity;
#ifndef CFArrayCreateMutable
	PyMac_PRECHECK(CFArrayCreateMutable);
#endif
	if (!PyArg_ParseTuple(_args, "l",
	                      &capacity))
		return NULL;
	_rv = CFArrayCreateMutable((CFAllocatorRef)NULL,
	                           capacity,
	                           &kCFTypeArrayCallBacks);
	_res = Py_BuildValue("O&",
	                     CFMutableArrayRefObj_New, _rv);
	return _res;
}

static PyObject *CF_CFArrayCreateMutableCopy(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFMutableArrayRef _rv;
	CFIndex capacity;
	CFArrayRef theArray;
#ifndef CFArrayCreateMutableCopy
	PyMac_PRECHECK(CFArrayCreateMutableCopy);
#endif
	if (!PyArg_ParseTuple(_args, "lO&",
	                      &capacity,
	                      CFArrayRefObj_Convert, &theArray))
		return NULL;
	_rv = CFArrayCreateMutableCopy((CFAllocatorRef)NULL,
	                               capacity,
	                               theArray);
	_res = Py_BuildValue("O&",
	                     CFMutableArrayRefObj_New, _rv);
	return _res;
}

static PyObject *CF_CFDataGetTypeID(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFTypeID _rv;
#ifndef CFDataGetTypeID
	PyMac_PRECHECK(CFDataGetTypeID);
#endif
	if (!PyArg_ParseTuple(_args, ""))
		return NULL;
	_rv = CFDataGetTypeID();
	_res = Py_BuildValue("l",
	                     _rv);
	return _res;
}

static PyObject *CF_CFDataCreate(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFDataRef _rv;
	unsigned char *bytes__in__;
	long bytes__len__;
	int bytes__in_len__;
#ifndef CFDataCreate
	PyMac_PRECHECK(CFDataCreate);
#endif
	if (!PyArg_ParseTuple(_args, "s#",
	                      &bytes__in__, &bytes__in_len__))
		return NULL;
	bytes__len__ = bytes__in_len__;
	_rv = CFDataCreate((CFAllocatorRef)NULL,
	                   bytes__in__, bytes__len__);
	_res = Py_BuildValue("O&",
	                     CFDataRefObj_New, _rv);
	return _res;
}

static PyObject *CF_CFDataCreateWithBytesNoCopy(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFDataRef _rv;
	unsigned char *bytes__in__;
	long bytes__len__;
	int bytes__in_len__;
#ifndef CFDataCreateWithBytesNoCopy
	PyMac_PRECHECK(CFDataCreateWithBytesNoCopy);
#endif
	if (!PyArg_ParseTuple(_args, "s#",
	                      &bytes__in__, &bytes__in_len__))
		return NULL;
	bytes__len__ = bytes__in_len__;
	_rv = CFDataCreateWithBytesNoCopy((CFAllocatorRef)NULL,
	                                  bytes__in__, bytes__len__,
	                                  (CFAllocatorRef)NULL);
	_res = Py_BuildValue("O&",
	                     CFDataRefObj_New, _rv);
	return _res;
}

static PyObject *CF_CFDataCreateMutable(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFMutableDataRef _rv;
	CFIndex capacity;
#ifndef CFDataCreateMutable
	PyMac_PRECHECK(CFDataCreateMutable);
#endif
	if (!PyArg_ParseTuple(_args, "l",
	                      &capacity))
		return NULL;
	_rv = CFDataCreateMutable((CFAllocatorRef)NULL,
	                          capacity);
	_res = Py_BuildValue("O&",
	                     CFMutableDataRefObj_New, _rv);
	return _res;
}

static PyObject *CF_CFDataCreateMutableCopy(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFMutableDataRef _rv;
	CFIndex capacity;
	CFDataRef theData;
#ifndef CFDataCreateMutableCopy
	PyMac_PRECHECK(CFDataCreateMutableCopy);
#endif
	if (!PyArg_ParseTuple(_args, "lO&",
	                      &capacity,
	                      CFDataRefObj_Convert, &theData))
		return NULL;
	_rv = CFDataCreateMutableCopy((CFAllocatorRef)NULL,
	                              capacity,
	                              theData);
	_res = Py_BuildValue("O&",
	                     CFMutableDataRefObj_New, _rv);
	return _res;
}

static PyObject *CF_CFDictionaryGetTypeID(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFTypeID _rv;
#ifndef CFDictionaryGetTypeID
	PyMac_PRECHECK(CFDictionaryGetTypeID);
#endif
	if (!PyArg_ParseTuple(_args, ""))
		return NULL;
	_rv = CFDictionaryGetTypeID();
	_res = Py_BuildValue("l",
	                     _rv);
	return _res;
}

static PyObject *CF_CFDictionaryCreateMutable(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFMutableDictionaryRef _rv;
	CFIndex capacity;
#ifndef CFDictionaryCreateMutable
	PyMac_PRECHECK(CFDictionaryCreateMutable);
#endif
	if (!PyArg_ParseTuple(_args, "l",
	                      &capacity))
		return NULL;
	_rv = CFDictionaryCreateMutable((CFAllocatorRef)NULL,
	                                capacity,
	                                &kCFTypeDictionaryKeyCallBacks,
	                                &kCFTypeDictionaryValueCallBacks);
	_res = Py_BuildValue("O&",
	                     CFMutableDictionaryRefObj_New, _rv);
	return _res;
}

static PyObject *CF_CFDictionaryCreateMutableCopy(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFMutableDictionaryRef _rv;
	CFIndex capacity;
	CFDictionaryRef theDict;
#ifndef CFDictionaryCreateMutableCopy
	PyMac_PRECHECK(CFDictionaryCreateMutableCopy);
#endif
	if (!PyArg_ParseTuple(_args, "lO&",
	                      &capacity,
	                      CFDictionaryRefObj_Convert, &theDict))
		return NULL;
	_rv = CFDictionaryCreateMutableCopy((CFAllocatorRef)NULL,
	                                    capacity,
	                                    theDict);
	_res = Py_BuildValue("O&",
	                     CFMutableDictionaryRefObj_New, _rv);
	return _res;
}

static PyObject *CF_CFPreferencesCopyAppValue(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFTypeRef _rv;
	CFStringRef key;
	CFStringRef applicationID;
#ifndef CFPreferencesCopyAppValue
	PyMac_PRECHECK(CFPreferencesCopyAppValue);
#endif
	if (!PyArg_ParseTuple(_args, "O&O&",
	                      CFStringRefObj_Convert, &key,
	                      CFStringRefObj_Convert, &applicationID))
		return NULL;
	_rv = CFPreferencesCopyAppValue(key,
	                                applicationID);
	_res = Py_BuildValue("O&",
	                     CFTypeRefObj_New, _rv);
	return _res;
}

static PyObject *CF_CFPreferencesGetAppBooleanValue(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	Boolean _rv;
	CFStringRef key;
	CFStringRef applicationID;
	Boolean keyExistsAndHasValidFormat;
#ifndef CFPreferencesGetAppBooleanValue
	PyMac_PRECHECK(CFPreferencesGetAppBooleanValue);
#endif
	if (!PyArg_ParseTuple(_args, "O&O&",
	                      CFStringRefObj_Convert, &key,
	                      CFStringRefObj_Convert, &applicationID))
		return NULL;
	_rv = CFPreferencesGetAppBooleanValue(key,
	                                      applicationID,
	                                      &keyExistsAndHasValidFormat);
	_res = Py_BuildValue("ll",
	                     _rv,
	                     keyExistsAndHasValidFormat);
	return _res;
}

static PyObject *CF_CFPreferencesGetAppIntegerValue(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFIndex _rv;
	CFStringRef key;
	CFStringRef applicationID;
	Boolean keyExistsAndHasValidFormat;
#ifndef CFPreferencesGetAppIntegerValue
	PyMac_PRECHECK(CFPreferencesGetAppIntegerValue);
#endif
	if (!PyArg_ParseTuple(_args, "O&O&",
	                      CFStringRefObj_Convert, &key,
	                      CFStringRefObj_Convert, &applicationID))
		return NULL;
	_rv = CFPreferencesGetAppIntegerValue(key,
	                                      applicationID,
	                                      &keyExistsAndHasValidFormat);
	_res = Py_BuildValue("ll",
	                     _rv,
	                     keyExistsAndHasValidFormat);
	return _res;
}

static PyObject *CF_CFPreferencesSetAppValue(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFStringRef key;
	CFTypeRef value;
	CFStringRef applicationID;
#ifndef CFPreferencesSetAppValue
	PyMac_PRECHECK(CFPreferencesSetAppValue);
#endif
	if (!PyArg_ParseTuple(_args, "O&O&O&",
	                      CFStringRefObj_Convert, &key,
	                      CFTypeRefObj_Convert, &value,
	                      CFStringRefObj_Convert, &applicationID))
		return NULL;
	CFPreferencesSetAppValue(key,
	                         value,
	                         applicationID);
	Py_INCREF(Py_None);
	_res = Py_None;
	return _res;
}

static PyObject *CF_CFPreferencesAddSuitePreferencesToApp(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFStringRef applicationID;
	CFStringRef suiteID;
#ifndef CFPreferencesAddSuitePreferencesToApp
	PyMac_PRECHECK(CFPreferencesAddSuitePreferencesToApp);
#endif
	if (!PyArg_ParseTuple(_args, "O&O&",
	                      CFStringRefObj_Convert, &applicationID,
	                      CFStringRefObj_Convert, &suiteID))
		return NULL;
	CFPreferencesAddSuitePreferencesToApp(applicationID,
	                                      suiteID);
	Py_INCREF(Py_None);
	_res = Py_None;
	return _res;
}

static PyObject *CF_CFPreferencesRemoveSuitePreferencesFromApp(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFStringRef applicationID;
	CFStringRef suiteID;
#ifndef CFPreferencesRemoveSuitePreferencesFromApp
	PyMac_PRECHECK(CFPreferencesRemoveSuitePreferencesFromApp);
#endif
	if (!PyArg_ParseTuple(_args, "O&O&",
	                      CFStringRefObj_Convert, &applicationID,
	                      CFStringRefObj_Convert, &suiteID))
		return NULL;
	CFPreferencesRemoveSuitePreferencesFromApp(applicationID,
	                                           suiteID);
	Py_INCREF(Py_None);
	_res = Py_None;
	return _res;
}

static PyObject *CF_CFPreferencesAppSynchronize(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	Boolean _rv;
	CFStringRef applicationID;
#ifndef CFPreferencesAppSynchronize
	PyMac_PRECHECK(CFPreferencesAppSynchronize);
#endif
	if (!PyArg_ParseTuple(_args, "O&",
	                      CFStringRefObj_Convert, &applicationID))
		return NULL;
	_rv = CFPreferencesAppSynchronize(applicationID);
	_res = Py_BuildValue("l",
	                     _rv);
	return _res;
}

static PyObject *CF_CFPreferencesCopyValue(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFTypeRef _rv;
	CFStringRef key;
	CFStringRef applicationID;
	CFStringRef userName;
	CFStringRef hostName;
#ifndef CFPreferencesCopyValue
	PyMac_PRECHECK(CFPreferencesCopyValue);
#endif
	if (!PyArg_ParseTuple(_args, "O&O&O&O&",
	                      CFStringRefObj_Convert, &key,
	                      CFStringRefObj_Convert, &applicationID,
	                      CFStringRefObj_Convert, &userName,
	                      CFStringRefObj_Convert, &hostName))
		return NULL;
	_rv = CFPreferencesCopyValue(key,
	                             applicationID,
	                             userName,
	                             hostName);
	_res = Py_BuildValue("O&",
	                     CFTypeRefObj_New, _rv);
	return _res;
}

static PyObject *CF_CFPreferencesCopyMultiple(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFDictionaryRef _rv;
	CFArrayRef keysToFetch;
	CFStringRef applicationID;
	CFStringRef userName;
	CFStringRef hostName;
#ifndef CFPreferencesCopyMultiple
	PyMac_PRECHECK(CFPreferencesCopyMultiple);
#endif
	if (!PyArg_ParseTuple(_args, "O&O&O&O&",
	                      CFArrayRefObj_Convert, &keysToFetch,
	                      CFStringRefObj_Convert, &applicationID,
	                      CFStringRefObj_Convert, &userName,
	                      CFStringRefObj_Convert, &hostName))
		return NULL;
	_rv = CFPreferencesCopyMultiple(keysToFetch,
	                                applicationID,
	                                userName,
	                                hostName);
	_res = Py_BuildValue("O&",
	                     CFDictionaryRefObj_New, _rv);
	return _res;
}

static PyObject *CF_CFPreferencesSetValue(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFStringRef key;
	CFTypeRef value;
	CFStringRef applicationID;
	CFStringRef userName;
	CFStringRef hostName;
#ifndef CFPreferencesSetValue
	PyMac_PRECHECK(CFPreferencesSetValue);
#endif
	if (!PyArg_ParseTuple(_args, "O&O&O&O&O&",
	                      CFStringRefObj_Convert, &key,
	                      CFTypeRefObj_Convert, &value,
	                      CFStringRefObj_Convert, &applicationID,
	                      CFStringRefObj_Convert, &userName,
	                      CFStringRefObj_Convert, &hostName))
		return NULL;
	CFPreferencesSetValue(key,
	                      value,
	                      applicationID,
	                      userName,
	                      hostName);
	Py_INCREF(Py_None);
	_res = Py_None;
	return _res;
}

static PyObject *CF_CFPreferencesSetMultiple(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFDictionaryRef keysToSet;
	CFArrayRef keysToRemove;
	CFStringRef applicationID;
	CFStringRef userName;
	CFStringRef hostName;
#ifndef CFPreferencesSetMultiple
	PyMac_PRECHECK(CFPreferencesSetMultiple);
#endif
	if (!PyArg_ParseTuple(_args, "O&O&O&O&O&",
	                      CFDictionaryRefObj_Convert, &keysToSet,
	                      CFArrayRefObj_Convert, &keysToRemove,
	                      CFStringRefObj_Convert, &applicationID,
	                      CFStringRefObj_Convert, &userName,
	                      CFStringRefObj_Convert, &hostName))
		return NULL;
	CFPreferencesSetMultiple(keysToSet,
	                         keysToRemove,
	                         applicationID,
	                         userName,
	                         hostName);
	Py_INCREF(Py_None);
	_res = Py_None;
	return _res;
}

static PyObject *CF_CFPreferencesSynchronize(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	Boolean _rv;
	CFStringRef applicationID;
	CFStringRef userName;
	CFStringRef hostName;
#ifndef CFPreferencesSynchronize
	PyMac_PRECHECK(CFPreferencesSynchronize);
#endif
	if (!PyArg_ParseTuple(_args, "O&O&O&",
	                      CFStringRefObj_Convert, &applicationID,
	                      CFStringRefObj_Convert, &userName,
	                      CFStringRefObj_Convert, &hostName))
		return NULL;
	_rv = CFPreferencesSynchronize(applicationID,
	                               userName,
	                               hostName);
	_res = Py_BuildValue("l",
	                     _rv);
	return _res;
}

static PyObject *CF_CFPreferencesCopyApplicationList(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFArrayRef _rv;
	CFStringRef userName;
	CFStringRef hostName;
#ifndef CFPreferencesCopyApplicationList
	PyMac_PRECHECK(CFPreferencesCopyApplicationList);
#endif
	if (!PyArg_ParseTuple(_args, "O&O&",
	                      CFStringRefObj_Convert, &userName,
	                      CFStringRefObj_Convert, &hostName))
		return NULL;
	_rv = CFPreferencesCopyApplicationList(userName,
	                                       hostName);
	_res = Py_BuildValue("O&",
	                     CFArrayRefObj_New, _rv);
	return _res;
}

static PyObject *CF_CFPreferencesCopyKeyList(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFArrayRef _rv;
	CFStringRef applicationID;
	CFStringRef userName;
	CFStringRef hostName;
#ifndef CFPreferencesCopyKeyList
	PyMac_PRECHECK(CFPreferencesCopyKeyList);
#endif
	if (!PyArg_ParseTuple(_args, "O&O&O&",
	                      CFStringRefObj_Convert, &applicationID,
	                      CFStringRefObj_Convert, &userName,
	                      CFStringRefObj_Convert, &hostName))
		return NULL;
	_rv = CFPreferencesCopyKeyList(applicationID,
	                               userName,
	                               hostName);
	_res = Py_BuildValue("O&",
	                     CFArrayRefObj_New, _rv);
	return _res;
}

static PyObject *CF_CFStringGetTypeID(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFTypeID _rv;
#ifndef CFStringGetTypeID
	PyMac_PRECHECK(CFStringGetTypeID);
#endif
	if (!PyArg_ParseTuple(_args, ""))
		return NULL;
	_rv = CFStringGetTypeID();
	_res = Py_BuildValue("l",
	                     _rv);
	return _res;
}

static PyObject *CF_CFStringCreateWithPascalString(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFStringRef _rv;
	Str255 pStr;
	CFStringEncoding encoding;
#ifndef CFStringCreateWithPascalString
	PyMac_PRECHECK(CFStringCreateWithPascalString);
#endif
	if (!PyArg_ParseTuple(_args, "O&l",
	                      PyMac_GetStr255, pStr,
	                      &encoding))
		return NULL;
	_rv = CFStringCreateWithPascalString((CFAllocatorRef)NULL,
	                                     pStr,
	                                     encoding);
	_res = Py_BuildValue("O&",
	                     CFStringRefObj_New, _rv);
	return _res;
}

static PyObject *CF_CFStringCreateWithCString(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFStringRef _rv;
	char* cStr;
	CFStringEncoding encoding;
#ifndef CFStringCreateWithCString
	PyMac_PRECHECK(CFStringCreateWithCString);
#endif
	if (!PyArg_ParseTuple(_args, "sl",
	                      &cStr,
	                      &encoding))
		return NULL;
	_rv = CFStringCreateWithCString((CFAllocatorRef)NULL,
	                                cStr,
	                                encoding);
	_res = Py_BuildValue("O&",
	                     CFStringRefObj_New, _rv);
	return _res;
}

static PyObject *CF_CFStringCreateWithCharacters(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFStringRef _rv;
	UniChar *chars__in__;
	UniCharCount chars__len__;
	int chars__in_len__;
#ifndef CFStringCreateWithCharacters
	PyMac_PRECHECK(CFStringCreateWithCharacters);
#endif
	if (!PyArg_ParseTuple(_args, "u#",
	                      &chars__in__, &chars__in_len__))
		return NULL;
	chars__len__ = chars__in_len__;
	_rv = CFStringCreateWithCharacters((CFAllocatorRef)NULL,
	                                   chars__in__, chars__len__);
	_res = Py_BuildValue("O&",
	                     CFStringRefObj_New, _rv);
	return _res;
}

static PyObject *CF_CFStringCreateWithPascalStringNoCopy(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFStringRef _rv;
	Str255 pStr;
	CFStringEncoding encoding;
#ifndef CFStringCreateWithPascalStringNoCopy
	PyMac_PRECHECK(CFStringCreateWithPascalStringNoCopy);
#endif
	if (!PyArg_ParseTuple(_args, "O&l",
	                      PyMac_GetStr255, pStr,
	                      &encoding))
		return NULL;
	_rv = CFStringCreateWithPascalStringNoCopy((CFAllocatorRef)NULL,
	                                           pStr,
	                                           encoding,
	                                           (CFAllocatorRef)NULL);
	_res = Py_BuildValue("O&",
	                     CFStringRefObj_New, _rv);
	return _res;
}

static PyObject *CF_CFStringCreateWithCStringNoCopy(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFStringRef _rv;
	char* cStr;
	CFStringEncoding encoding;
#ifndef CFStringCreateWithCStringNoCopy
	PyMac_PRECHECK(CFStringCreateWithCStringNoCopy);
#endif
	if (!PyArg_ParseTuple(_args, "sl",
	                      &cStr,
	                      &encoding))
		return NULL;
	_rv = CFStringCreateWithCStringNoCopy((CFAllocatorRef)NULL,
	                                      cStr,
	                                      encoding,
	                                      (CFAllocatorRef)NULL);
	_res = Py_BuildValue("O&",
	                     CFStringRefObj_New, _rv);
	return _res;
}

static PyObject *CF_CFStringCreateWithCharactersNoCopy(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFStringRef _rv;
	UniChar *chars__in__;
	UniCharCount chars__len__;
	int chars__in_len__;
#ifndef CFStringCreateWithCharactersNoCopy
	PyMac_PRECHECK(CFStringCreateWithCharactersNoCopy);
#endif
	if (!PyArg_ParseTuple(_args, "u#",
	                      &chars__in__, &chars__in_len__))
		return NULL;
	chars__len__ = chars__in_len__;
	_rv = CFStringCreateWithCharactersNoCopy((CFAllocatorRef)NULL,
	                                         chars__in__, chars__len__,
	                                         (CFAllocatorRef)NULL);
	_res = Py_BuildValue("O&",
	                     CFStringRefObj_New, _rv);
	return _res;
}

static PyObject *CF_CFStringCreateMutable(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFMutableStringRef _rv;
	CFIndex maxLength;
#ifndef CFStringCreateMutable
	PyMac_PRECHECK(CFStringCreateMutable);
#endif
	if (!PyArg_ParseTuple(_args, "l",
	                      &maxLength))
		return NULL;
	_rv = CFStringCreateMutable((CFAllocatorRef)NULL,
	                            maxLength);
	_res = Py_BuildValue("O&",
	                     CFMutableStringRefObj_New, _rv);
	return _res;
}

static PyObject *CF_CFStringCreateMutableCopy(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFMutableStringRef _rv;
	CFIndex maxLength;
	CFStringRef theString;
#ifndef CFStringCreateMutableCopy
	PyMac_PRECHECK(CFStringCreateMutableCopy);
#endif
	if (!PyArg_ParseTuple(_args, "lO&",
	                      &maxLength,
	                      CFStringRefObj_Convert, &theString))
		return NULL;
	_rv = CFStringCreateMutableCopy((CFAllocatorRef)NULL,
	                                maxLength,
	                                theString);
	_res = Py_BuildValue("O&",
	                     CFMutableStringRefObj_New, _rv);
	return _res;
}

static PyObject *CF_CFStringCreateWithBytes(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFStringRef _rv;
	unsigned char *bytes__in__;
	long bytes__len__;
	int bytes__in_len__;
	CFStringEncoding encoding;
	Boolean isExternalRepresentation;
#ifndef CFStringCreateWithBytes
	PyMac_PRECHECK(CFStringCreateWithBytes);
#endif
	if (!PyArg_ParseTuple(_args, "s#ll",
	                      &bytes__in__, &bytes__in_len__,
	                      &encoding,
	                      &isExternalRepresentation))
		return NULL;
	bytes__len__ = bytes__in_len__;
	_rv = CFStringCreateWithBytes((CFAllocatorRef)NULL,
	                              bytes__in__, bytes__len__,
	                              encoding,
	                              isExternalRepresentation);
	_res = Py_BuildValue("O&",
	                     CFStringRefObj_New, _rv);
	return _res;
}

static PyObject *CF_CFStringGetSystemEncoding(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFStringEncoding _rv;
#ifndef CFStringGetSystemEncoding
	PyMac_PRECHECK(CFStringGetSystemEncoding);
#endif
	if (!PyArg_ParseTuple(_args, ""))
		return NULL;
	_rv = CFStringGetSystemEncoding();
	_res = Py_BuildValue("l",
	                     _rv);
	return _res;
}

static PyObject *CF_CFStringGetMaximumSizeForEncoding(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFIndex _rv;
	CFIndex length;
	CFStringEncoding encoding;
#ifndef CFStringGetMaximumSizeForEncoding
	PyMac_PRECHECK(CFStringGetMaximumSizeForEncoding);
#endif
	if (!PyArg_ParseTuple(_args, "ll",
	                      &length,
	                      &encoding))
		return NULL;
	_rv = CFStringGetMaximumSizeForEncoding(length,
	                                        encoding);
	_res = Py_BuildValue("l",
	                     _rv);
	return _res;
}

static PyObject *CF_CFStringIsEncodingAvailable(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	Boolean _rv;
	CFStringEncoding encoding;
#ifndef CFStringIsEncodingAvailable
	PyMac_PRECHECK(CFStringIsEncodingAvailable);
#endif
	if (!PyArg_ParseTuple(_args, "l",
	                      &encoding))
		return NULL;
	_rv = CFStringIsEncodingAvailable(encoding);
	_res = Py_BuildValue("l",
	                     _rv);
	return _res;
}

static PyObject *CF_CFStringGetNameOfEncoding(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFStringRef _rv;
	CFStringEncoding encoding;
#ifndef CFStringGetNameOfEncoding
	PyMac_PRECHECK(CFStringGetNameOfEncoding);
#endif
	if (!PyArg_ParseTuple(_args, "l",
	                      &encoding))
		return NULL;
	_rv = CFStringGetNameOfEncoding(encoding);
	_res = Py_BuildValue("O&",
	                     CFStringRefObj_New, _rv);
	return _res;
}

static PyObject *CF_CFStringConvertEncodingToNSStringEncoding(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	UInt32 _rv;
	CFStringEncoding encoding;
#ifndef CFStringConvertEncodingToNSStringEncoding
	PyMac_PRECHECK(CFStringConvertEncodingToNSStringEncoding);
#endif
	if (!PyArg_ParseTuple(_args, "l",
	                      &encoding))
		return NULL;
	_rv = CFStringConvertEncodingToNSStringEncoding(encoding);
	_res = Py_BuildValue("l",
	                     _rv);
	return _res;
}

static PyObject *CF_CFStringConvertNSStringEncodingToEncoding(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFStringEncoding _rv;
	UInt32 encoding;
#ifndef CFStringConvertNSStringEncodingToEncoding
	PyMac_PRECHECK(CFStringConvertNSStringEncodingToEncoding);
#endif
	if (!PyArg_ParseTuple(_args, "l",
	                      &encoding))
		return NULL;
	_rv = CFStringConvertNSStringEncodingToEncoding(encoding);
	_res = Py_BuildValue("l",
	                     _rv);
	return _res;
}

static PyObject *CF_CFStringConvertEncodingToWindowsCodepage(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	UInt32 _rv;
	CFStringEncoding encoding;
#ifndef CFStringConvertEncodingToWindowsCodepage
	PyMac_PRECHECK(CFStringConvertEncodingToWindowsCodepage);
#endif
	if (!PyArg_ParseTuple(_args, "l",
	                      &encoding))
		return NULL;
	_rv = CFStringConvertEncodingToWindowsCodepage(encoding);
	_res = Py_BuildValue("l",
	                     _rv);
	return _res;
}

static PyObject *CF_CFStringConvertWindowsCodepageToEncoding(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFStringEncoding _rv;
	UInt32 codepage;
#ifndef CFStringConvertWindowsCodepageToEncoding
	PyMac_PRECHECK(CFStringConvertWindowsCodepageToEncoding);
#endif
	if (!PyArg_ParseTuple(_args, "l",
	                      &codepage))
		return NULL;
	_rv = CFStringConvertWindowsCodepageToEncoding(codepage);
	_res = Py_BuildValue("l",
	                     _rv);
	return _res;
}

static PyObject *CF_CFStringConvertEncodingToIANACharSetName(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFStringRef _rv;
	CFStringEncoding encoding;
#ifndef CFStringConvertEncodingToIANACharSetName
	PyMac_PRECHECK(CFStringConvertEncodingToIANACharSetName);
#endif
	if (!PyArg_ParseTuple(_args, "l",
	                      &encoding))
		return NULL;
	_rv = CFStringConvertEncodingToIANACharSetName(encoding);
	_res = Py_BuildValue("O&",
	                     CFStringRefObj_New, _rv);
	return _res;
}

static PyObject *CF_CFStringGetMostCompatibleMacStringEncoding(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFStringEncoding _rv;
	CFStringEncoding encoding;
#ifndef CFStringGetMostCompatibleMacStringEncoding
	PyMac_PRECHECK(CFStringGetMostCompatibleMacStringEncoding);
#endif
	if (!PyArg_ParseTuple(_args, "l",
	                      &encoding))
		return NULL;
	_rv = CFStringGetMostCompatibleMacStringEncoding(encoding);
	_res = Py_BuildValue("l",
	                     _rv);
	return _res;
}

static PyObject *CF___CFStringMakeConstantString(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFStringRef _rv;
	char* cStr;
#ifndef __CFStringMakeConstantString
	PyMac_PRECHECK(__CFStringMakeConstantString);
#endif
	if (!PyArg_ParseTuple(_args, "s",
	                      &cStr))
		return NULL;
	_rv = __CFStringMakeConstantString(cStr);
	_res = Py_BuildValue("O&",
	                     CFStringRefObj_New, _rv);
	return _res;
}

static PyObject *CF_CFURLGetTypeID(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFTypeID _rv;
#ifndef CFURLGetTypeID
	PyMac_PRECHECK(CFURLGetTypeID);
#endif
	if (!PyArg_ParseTuple(_args, ""))
		return NULL;
	_rv = CFURLGetTypeID();
	_res = Py_BuildValue("l",
	                     _rv);
	return _res;
}

static PyObject *CF_CFURLCreateWithBytes(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFURLRef _rv;
	unsigned char *URLBytes__in__;
	long URLBytes__len__;
	int URLBytes__in_len__;
	CFStringEncoding encoding;
	CFURLRef baseURL;
#ifndef CFURLCreateWithBytes
	PyMac_PRECHECK(CFURLCreateWithBytes);
#endif
	if (!PyArg_ParseTuple(_args, "s#lO&",
	                      &URLBytes__in__, &URLBytes__in_len__,
	                      &encoding,
	                      OptionalCFURLRefObj_Convert, &baseURL))
		return NULL;
	URLBytes__len__ = URLBytes__in_len__;
	_rv = CFURLCreateWithBytes((CFAllocatorRef)NULL,
	                           URLBytes__in__, URLBytes__len__,
	                           encoding,
	                           baseURL);
	_res = Py_BuildValue("O&",
	                     CFURLRefObj_New, _rv);
	return _res;
}

static PyObject *CF_CFURLCreateFromFileSystemRepresentation(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFURLRef _rv;
	unsigned char *buffer__in__;
	long buffer__len__;
	int buffer__in_len__;
	Boolean isDirectory;
#ifndef CFURLCreateFromFileSystemRepresentation
	PyMac_PRECHECK(CFURLCreateFromFileSystemRepresentation);
#endif
	if (!PyArg_ParseTuple(_args, "s#l",
	                      &buffer__in__, &buffer__in_len__,
	                      &isDirectory))
		return NULL;
	buffer__len__ = buffer__in_len__;
	_rv = CFURLCreateFromFileSystemRepresentation((CFAllocatorRef)NULL,
	                                              buffer__in__, buffer__len__,
	                                              isDirectory);
	_res = Py_BuildValue("O&",
	                     CFURLRefObj_New, _rv);
	return _res;
}

static PyObject *CF_CFURLCreateFromFileSystemRepresentationRelativeToBase(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFURLRef _rv;
	unsigned char *buffer__in__;
	long buffer__len__;
	int buffer__in_len__;
	Boolean isDirectory;
	CFURLRef baseURL;
#ifndef CFURLCreateFromFileSystemRepresentationRelativeToBase
	PyMac_PRECHECK(CFURLCreateFromFileSystemRepresentationRelativeToBase);
#endif
	if (!PyArg_ParseTuple(_args, "s#lO&",
	                      &buffer__in__, &buffer__in_len__,
	                      &isDirectory,
	                      OptionalCFURLRefObj_Convert, &baseURL))
		return NULL;
	buffer__len__ = buffer__in_len__;
	_rv = CFURLCreateFromFileSystemRepresentationRelativeToBase((CFAllocatorRef)NULL,
	                                                            buffer__in__, buffer__len__,
	                                                            isDirectory,
	                                                            baseURL);
	_res = Py_BuildValue("O&",
	                     CFURLRefObj_New, _rv);
	return _res;
}

static PyObject *CF_CFURLCreateFromFSRef(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	CFURLRef _rv;
	FSRef fsRef;
#ifndef CFURLCreateFromFSRef
	PyMac_PRECHECK(CFURLCreateFromFSRef);
#endif
	if (!PyArg_ParseTuple(_args, "O&",
	                      PyMac_GetFSRef, &fsRef))
		return NULL;
	_rv = CFURLCreateFromFSRef((CFAllocatorRef)NULL,
	                           &fsRef);
	_res = Py_BuildValue("O&",
	                     CFURLRefObj_New, _rv);
	return _res;
}

static PyObject *CF_toCF(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;

	CFTypeRef rv;
	CFTypeID typeid;

	if (!PyArg_ParseTuple(_args, "O&", PyCF_Python2CF, &rv))
	        return NULL;
	typeid = CFGetTypeID(rv);

	if (typeid == CFStringGetTypeID())
	        return Py_BuildValue("O&", CFStringRefObj_New, rv);
	if (typeid == CFArrayGetTypeID())
	        return Py_BuildValue("O&", CFArrayRefObj_New, rv);
	if (typeid == CFDictionaryGetTypeID())
	        return Py_BuildValue("O&", CFDictionaryRefObj_New, rv);
	if (typeid == CFURLGetTypeID())
	        return Py_BuildValue("O&", CFURLRefObj_New, rv);

	_res = Py_BuildValue("O&", CFTypeRefObj_New, rv);
	return _res;

}

static PyMethodDef CF_methods[] = {
	{"__CFRangeMake", (PyCFunction)CF___CFRangeMake, 1,
	 PyDoc_STR("(CFIndex loc, CFIndex len) -> (CFRange _rv)")},
	{"CFAllocatorGetTypeID", (PyCFunction)CF_CFAllocatorGetTypeID, 1,
	 PyDoc_STR("() -> (CFTypeID _rv)")},
	{"CFAllocatorGetPreferredSizeForSize", (PyCFunction)CF_CFAllocatorGetPreferredSizeForSize, 1,
	 PyDoc_STR("(CFIndex size, CFOptionFlags hint) -> (CFIndex _rv)")},
	{"CFCopyTypeIDDescription", (PyCFunction)CF_CFCopyTypeIDDescription, 1,
	 PyDoc_STR("(CFTypeID type_id) -> (CFStringRef _rv)")},
	{"CFArrayGetTypeID", (PyCFunction)CF_CFArrayGetTypeID, 1,
	 PyDoc_STR("() -> (CFTypeID _rv)")},
	{"CFArrayCreateMutable", (PyCFunction)CF_CFArrayCreateMutable, 1,
	 PyDoc_STR("(CFIndex capacity) -> (CFMutableArrayRef _rv)")},
	{"CFArrayCreateMutableCopy", (PyCFunction)CF_CFArrayCreateMutableCopy, 1,
	 PyDoc_STR("(CFIndex capacity, CFArrayRef theArray) -> (CFMutableArrayRef _rv)")},
	{"CFDataGetTypeID", (PyCFunction)CF_CFDataGetTypeID, 1,
	 PyDoc_STR("() -> (CFTypeID _rv)")},
	{"CFDataCreate", (PyCFunction)CF_CFDataCreate, 1,
	 PyDoc_STR("(Buffer bytes) -> (CFDataRef _rv)")},
	{"CFDataCreateWithBytesNoCopy", (PyCFunction)CF_CFDataCreateWithBytesNoCopy, 1,
	 PyDoc_STR("(Buffer bytes) -> (CFDataRef _rv)")},
	{"CFDataCreateMutable", (PyCFunction)CF_CFDataCreateMutable, 1,
	 PyDoc_STR("(CFIndex capacity) -> (CFMutableDataRef _rv)")},
	{"CFDataCreateMutableCopy", (PyCFunction)CF_CFDataCreateMutableCopy, 1,
	 PyDoc_STR("(CFIndex capacity, CFDataRef theData) -> (CFMutableDataRef _rv)")},
	{"CFDictionaryGetTypeID", (PyCFunction)CF_CFDictionaryGetTypeID, 1,
	 PyDoc_STR("() -> (CFTypeID _rv)")},
	{"CFDictionaryCreateMutable", (PyCFunction)CF_CFDictionaryCreateMutable, 1,
	 PyDoc_STR("(CFIndex capacity) -> (CFMutableDictionaryRef _rv)")},
	{"CFDictionaryCreateMutableCopy", (PyCFunction)CF_CFDictionaryCreateMutableCopy, 1,
	 PyDoc_STR("(CFIndex capacity, CFDictionaryRef theDict) -> (CFMutableDictionaryRef _rv)")},
	{"CFPreferencesCopyAppValue", (PyCFunction)CF_CFPreferencesCopyAppValue, 1,
	 PyDoc_STR("(CFStringRef key, CFStringRef applicationID) -> (CFTypeRef _rv)")},
	{"CFPreferencesGetAppBooleanValue", (PyCFunction)CF_CFPreferencesGetAppBooleanValue, 1,
	 PyDoc_STR("(CFStringRef key, CFStringRef applicationID) -> (Boolean _rv, Boolean keyExistsAndHasValidFormat)")},
	{"CFPreferencesGetAppIntegerValue", (PyCFunction)CF_CFPreferencesGetAppIntegerValue, 1,
	 PyDoc_STR("(CFStringRef key, CFStringRef applicationID) -> (CFIndex _rv, Boolean keyExistsAndHasValidFormat)")},
	{"CFPreferencesSetAppValue", (PyCFunction)CF_CFPreferencesSetAppValue, 1,
	 PyDoc_STR("(CFStringRef key, CFTypeRef value, CFStringRef applicationID) -> None")},
	{"CFPreferencesAddSuitePreferencesToApp", (PyCFunction)CF_CFPreferencesAddSuitePreferencesToApp, 1,
	 PyDoc_STR("(CFStringRef applicationID, CFStringRef suiteID) -> None")},
	{"CFPreferencesRemoveSuitePreferencesFromApp", (PyCFunction)CF_CFPreferencesRemoveSuitePreferencesFromApp, 1,
	 PyDoc_STR("(CFStringRef applicationID, CFStringRef suiteID) -> None")},
	{"CFPreferencesAppSynchronize", (PyCFunction)CF_CFPreferencesAppSynchronize, 1,
	 PyDoc_STR("(CFStringRef applicationID) -> (Boolean _rv)")},
	{"CFPreferencesCopyValue", (PyCFunction)CF_CFPreferencesCopyValue, 1,
	 PyDoc_STR("(CFStringRef key, CFStringRef applicationID, CFStringRef userName, CFStringRef hostName) -> (CFTypeRef _rv)")},
	{"CFPreferencesCopyMultiple", (PyCFunction)CF_CFPreferencesCopyMultiple, 1,
	 PyDoc_STR("(CFArrayRef keysToFetch, CFStringRef applicationID, CFStringRef userName, CFStringRef hostName) -> (CFDictionaryRef _rv)")},
	{"CFPreferencesSetValue", (PyCFunction)CF_CFPreferencesSetValue, 1,
	 PyDoc_STR("(CFStringRef key, CFTypeRef value, CFStringRef applicationID, CFStringRef userName, CFStringRef hostName) -> None")},
	{"CFPreferencesSetMultiple", (PyCFunction)CF_CFPreferencesSetMultiple, 1,
	 PyDoc_STR("(CFDictionaryRef keysToSet, CFArrayRef keysToRemove, CFStringRef applicationID, CFStringRef userName, CFStringRef hostName) -> None")},
	{"CFPreferencesSynchronize", (PyCFunction)CF_CFPreferencesSynchronize, 1,
	 PyDoc_STR("(CFStringRef applicationID, CFStringRef userName, CFStringRef hostName) -> (Boolean _rv)")},
	{"CFPreferencesCopyApplicationList", (PyCFunction)CF_CFPreferencesCopyApplicationList, 1,
	 PyDoc_STR("(CFStringRef userName, CFStringRef hostName) -> (CFArrayRef _rv)")},
	{"CFPreferencesCopyKeyList", (PyCFunction)CF_CFPreferencesCopyKeyList, 1,
	 PyDoc_STR("(CFStringRef applicationID, CFStringRef userName, CFStringRef hostName) -> (CFArrayRef _rv)")},
	{"CFStringGetTypeID", (PyCFunction)CF_CFStringGetTypeID, 1,
	 PyDoc_STR("() -> (CFTypeID _rv)")},
	{"CFStringCreateWithPascalString", (PyCFunction)CF_CFStringCreateWithPascalString, 1,
	 PyDoc_STR("(Str255 pStr, CFStringEncoding encoding) -> (CFStringRef _rv)")},
	{"CFStringCreateWithCString", (PyCFunction)CF_CFStringCreateWithCString, 1,
	 PyDoc_STR("(char* cStr, CFStringEncoding encoding) -> (CFStringRef _rv)")},
	{"CFStringCreateWithCharacters", (PyCFunction)CF_CFStringCreateWithCharacters, 1,
	 PyDoc_STR("(Buffer chars) -> (CFStringRef _rv)")},
	{"CFStringCreateWithPascalStringNoCopy", (PyCFunction)CF_CFStringCreateWithPascalStringNoCopy, 1,
	 PyDoc_STR("(Str255 pStr, CFStringEncoding encoding) -> (CFStringRef _rv)")},
	{"CFStringCreateWithCStringNoCopy", (PyCFunction)CF_CFStringCreateWithCStringNoCopy, 1,
	 PyDoc_STR("(char* cStr, CFStringEncoding encoding) -> (CFStringRef _rv)")},
	{"CFStringCreateWithCharactersNoCopy", (PyCFunction)CF_CFStringCreateWithCharactersNoCopy, 1,
	 PyDoc_STR("(Buffer chars) -> (CFStringRef _rv)")},
	{"CFStringCreateMutable", (PyCFunction)CF_CFStringCreateMutable, 1,
	 PyDoc_STR("(CFIndex maxLength) -> (CFMutableStringRef _rv)")},
	{"CFStringCreateMutableCopy", (PyCFunction)CF_CFStringCreateMutableCopy, 1,
	 PyDoc_STR("(CFIndex maxLength, CFStringRef theString) -> (CFMutableStringRef _rv)")},
	{"CFStringCreateWithBytes", (PyCFunction)CF_CFStringCreateWithBytes, 1,
	 PyDoc_STR("(Buffer bytes, CFStringEncoding encoding, Boolean isExternalRepresentation) -> (CFStringRef _rv)")},
	{"CFStringGetSystemEncoding", (PyCFunction)CF_CFStringGetSystemEncoding, 1,
	 PyDoc_STR("() -> (CFStringEncoding _rv)")},
	{"CFStringGetMaximumSizeForEncoding", (PyCFunction)CF_CFStringGetMaximumSizeForEncoding, 1,
	 PyDoc_STR("(CFIndex length, CFStringEncoding encoding) -> (CFIndex _rv)")},
	{"CFStringIsEncodingAvailable", (PyCFunction)CF_CFStringIsEncodingAvailable, 1,
	 PyDoc_STR("(CFStringEncoding encoding) -> (Boolean _rv)")},
	{"CFStringGetNameOfEncoding", (PyCFunction)CF_CFStringGetNameOfEncoding, 1,
	 PyDoc_STR("(CFStringEncoding encoding) -> (CFStringRef _rv)")},
	{"CFStringConvertEncodingToNSStringEncoding", (PyCFunction)CF_CFStringConvertEncodingToNSStringEncoding, 1,
	 PyDoc_STR("(CFStringEncoding encoding) -> (UInt32 _rv)")},
	{"CFStringConvertNSStringEncodingToEncoding", (PyCFunction)CF_CFStringConvertNSStringEncodingToEncoding, 1,
	 PyDoc_STR("(UInt32 encoding) -> (CFStringEncoding _rv)")},
	{"CFStringConvertEncodingToWindowsCodepage", (PyCFunction)CF_CFStringConvertEncodingToWindowsCodepage, 1,
	 PyDoc_STR("(CFStringEncoding encoding) -> (UInt32 _rv)")},
	{"CFStringConvertWindowsCodepageToEncoding", (PyCFunction)CF_CFStringConvertWindowsCodepageToEncoding, 1,
	 PyDoc_STR("(UInt32 codepage) -> (CFStringEncoding _rv)")},
	{"CFStringConvertEncodingToIANACharSetName", (PyCFunction)CF_CFStringConvertEncodingToIANACharSetName, 1,
	 PyDoc_STR("(CFStringEncoding encoding) -> (CFStringRef _rv)")},
	{"CFStringGetMostCompatibleMacStringEncoding", (PyCFunction)CF_CFStringGetMostCompatibleMacStringEncoding, 1,
	 PyDoc_STR("(CFStringEncoding encoding) -> (CFStringEncoding _rv)")},
	{"__CFStringMakeConstantString", (PyCFunction)CF___CFStringMakeConstantString, 1,
	 PyDoc_STR("(char* cStr) -> (CFStringRef _rv)")},
	{"CFURLGetTypeID", (PyCFunction)CF_CFURLGetTypeID, 1,
	 PyDoc_STR("() -> (CFTypeID _rv)")},
	{"CFURLCreateWithBytes", (PyCFunction)CF_CFURLCreateWithBytes, 1,
	 PyDoc_STR("(Buffer URLBytes, CFStringEncoding encoding, CFURLRef baseURL) -> (CFURLRef _rv)")},
	{"CFURLCreateFromFileSystemRepresentation", (PyCFunction)CF_CFURLCreateFromFileSystemRepresentation, 1,
	 PyDoc_STR("(Buffer buffer, Boolean isDirectory) -> (CFURLRef _rv)")},
	{"CFURLCreateFromFileSystemRepresentationRelativeToBase", (PyCFunction)CF_CFURLCreateFromFileSystemRepresentationRelativeToBase, 1,
	 PyDoc_STR("(Buffer buffer, Boolean isDirectory, CFURLRef baseURL) -> (CFURLRef _rv)")},
	{"CFURLCreateFromFSRef", (PyCFunction)CF_CFURLCreateFromFSRef, 1,
	 PyDoc_STR("(FSRef fsRef) -> (CFURLRef _rv)")},
	{"toCF", (PyCFunction)CF_toCF, 1,
	 PyDoc_STR("(python_object) -> (CF_object)")},
	{NULL, NULL, 0}
};




/* Routines to convert any CF type to/from the corresponding CFxxxObj */
PyObject *CFObj_New(CFTypeRef itself)
{
        if (itself == NULL)
        {
                PyErr_SetString(PyExc_RuntimeError, "cannot wrap NULL");
                return NULL;
        }
        if (CFGetTypeID(itself) == CFArrayGetTypeID()) return CFArrayRefObj_New((CFArrayRef)itself);
        if (CFGetTypeID(itself) == CFDictionaryGetTypeID()) return CFDictionaryRefObj_New((CFDictionaryRef)itself);
        if (CFGetTypeID(itself) == CFDataGetTypeID()) return CFDataRefObj_New((CFDataRef)itself);
        if (CFGetTypeID(itself) == CFStringGetTypeID()) return CFStringRefObj_New((CFStringRef)itself);
        if (CFGetTypeID(itself) == CFURLGetTypeID()) return CFURLRefObj_New((CFURLRef)itself);
        /* XXXX Or should we use PyCF_CF2Python here?? */
        return CFTypeRefObj_New(itself);
}
int CFObj_Convert(PyObject *v, CFTypeRef *p_itself)
{

        if (v == Py_None) { *p_itself = NULL; return 1; }
        /* Check for other CF objects here */

        if (!CFTypeRefObj_Check(v) &&
                !CFArrayRefObj_Check(v) &&
                !CFMutableArrayRefObj_Check(v) &&
                !CFDictionaryRefObj_Check(v) &&
                !CFMutableDictionaryRefObj_Check(v) &&
                !CFDataRefObj_Check(v) &&
                !CFMutableDataRefObj_Check(v) &&
                !CFStringRefObj_Check(v) &&
                !CFMutableStringRefObj_Check(v) &&
                !CFURLRefObj_Check(v) )
        {
                /* XXXX Or should we use PyCF_Python2CF here?? */
                PyErr_SetString(PyExc_TypeError, "CF object required");
                return 0;
        }
        *p_itself = ((CFTypeRefObject *)v)->ob_itself;
        return 1;
}


void init_CF(void)
{
	PyObject *m;
	PyObject *d;



	PyMac_INIT_TOOLBOX_OBJECT_NEW(CFTypeRef, CFObj_New);
	PyMac_INIT_TOOLBOX_OBJECT_CONVERT(CFTypeRef, CFObj_Convert);
	PyMac_INIT_TOOLBOX_OBJECT_NEW(CFTypeRef, CFTypeRefObj_New);
	PyMac_INIT_TOOLBOX_OBJECT_CONVERT(CFTypeRef, CFTypeRefObj_Convert);
	PyMac_INIT_TOOLBOX_OBJECT_NEW(CFStringRef, CFStringRefObj_New);
	PyMac_INIT_TOOLBOX_OBJECT_CONVERT(CFStringRef, CFStringRefObj_Convert);
	PyMac_INIT_TOOLBOX_OBJECT_NEW(CFMutableStringRef, CFMutableStringRefObj_New);
	PyMac_INIT_TOOLBOX_OBJECT_CONVERT(CFMutableStringRef, CFMutableStringRefObj_Convert);
	PyMac_INIT_TOOLBOX_OBJECT_NEW(CFArrayRef, CFArrayRefObj_New);
	PyMac_INIT_TOOLBOX_OBJECT_CONVERT(CFArrayRef, CFArrayRefObj_Convert);
	PyMac_INIT_TOOLBOX_OBJECT_NEW(CFMutableArrayRef, CFMutableArrayRefObj_New);
	PyMac_INIT_TOOLBOX_OBJECT_CONVERT(CFMutableArrayRef, CFMutableArrayRefObj_Convert);
	PyMac_INIT_TOOLBOX_OBJECT_NEW(CFDictionaryRef, CFDictionaryRefObj_New);
	PyMac_INIT_TOOLBOX_OBJECT_CONVERT(CFDictionaryRef, CFDictionaryRefObj_Convert);
	PyMac_INIT_TOOLBOX_OBJECT_NEW(CFMutableDictionaryRef, CFMutableDictionaryRefObj_New);
	PyMac_INIT_TOOLBOX_OBJECT_CONVERT(CFMutableDictionaryRef, CFMutableDictionaryRefObj_Convert);
	PyMac_INIT_TOOLBOX_OBJECT_NEW(CFURLRef, CFURLRefObj_New);
	PyMac_INIT_TOOLBOX_OBJECT_CONVERT(CFURLRef, CFURLRefObj_Convert);


	m = Py_InitModule("_CF", CF_methods);
	d = PyModule_GetDict(m);
	CF_Error = PyMac_GetOSErrException();
	if (CF_Error == NULL ||
	    PyDict_SetItemString(d, "Error", CF_Error) != 0)
		return;
	CFTypeRef_Type.ob_type = &PyType_Type;
	if (PyType_Ready(&CFTypeRef_Type) < 0) return;
	Py_INCREF(&CFTypeRef_Type);
	PyModule_AddObject(m, "CFTypeRef", (PyObject *)&CFTypeRef_Type);
	/* Backward-compatible name */
	Py_INCREF(&CFTypeRef_Type);
	PyModule_AddObject(m, "CFTypeRefType", (PyObject *)&CFTypeRef_Type);
	CFArrayRef_Type.ob_type = &PyType_Type;
	CFArrayRef_Type.tp_base = &CFTypeRef_Type;
	if (PyType_Ready(&CFArrayRef_Type) < 0) return;
	Py_INCREF(&CFArrayRef_Type);
	PyModule_AddObject(m, "CFArrayRef", (PyObject *)&CFArrayRef_Type);
	/* Backward-compatible name */
	Py_INCREF(&CFArrayRef_Type);
	PyModule_AddObject(m, "CFArrayRefType", (PyObject *)&CFArrayRef_Type);
	CFMutableArrayRef_Type.ob_type = &PyType_Type;
	CFMutableArrayRef_Type.tp_base = &CFArrayRef_Type;
	if (PyType_Ready(&CFMutableArrayRef_Type) < 0) return;
	Py_INCREF(&CFMutableArrayRef_Type);
	PyModule_AddObject(m, "CFMutableArrayRef", (PyObject *)&CFMutableArrayRef_Type);
	/* Backward-compatible name */
	Py_INCREF(&CFMutableArrayRef_Type);
	PyModule_AddObject(m, "CFMutableArrayRefType", (PyObject *)&CFMutableArrayRef_Type);
	CFDictionaryRef_Type.ob_type = &PyType_Type;
	CFDictionaryRef_Type.tp_base = &CFTypeRef_Type;
	if (PyType_Ready(&CFDictionaryRef_Type) < 0) return;
	Py_INCREF(&CFDictionaryRef_Type);
	PyModule_AddObject(m, "CFDictionaryRef", (PyObject *)&CFDictionaryRef_Type);
	/* Backward-compatible name */
	Py_INCREF(&CFDictionaryRef_Type);
	PyModule_AddObject(m, "CFDictionaryRefType", (PyObject *)&CFDictionaryRef_Type);
	CFMutableDictionaryRef_Type.ob_type = &PyType_Type;
	CFMutableDictionaryRef_Type.tp_base = &CFDictionaryRef_Type;
	if (PyType_Ready(&CFMutableDictionaryRef_Type) < 0) return;
	Py_INCREF(&CFMutableDictionaryRef_Type);
	PyModule_AddObject(m, "CFMutableDictionaryRef", (PyObject *)&CFMutableDictionaryRef_Type);
	/* Backward-compatible name */
	Py_INCREF(&CFMutableDictionaryRef_Type);
	PyModule_AddObject(m, "CFMutableDictionaryRefType", (PyObject *)&CFMutableDictionaryRef_Type);
	CFDataRef_Type.ob_type = &PyType_Type;
	CFDataRef_Type.tp_base = &CFTypeRef_Type;
	if (PyType_Ready(&CFDataRef_Type) < 0) return;
	Py_INCREF(&CFDataRef_Type);
	PyModule_AddObject(m, "CFDataRef", (PyObject *)&CFDataRef_Type);
	/* Backward-compatible name */
	Py_INCREF(&CFDataRef_Type);
	PyModule_AddObject(m, "CFDataRefType", (PyObject *)&CFDataRef_Type);
	CFMutableDataRef_Type.ob_type = &PyType_Type;
	CFMutableDataRef_Type.tp_base = &CFDataRef_Type;
	if (PyType_Ready(&CFMutableDataRef_Type) < 0) return;
	Py_INCREF(&CFMutableDataRef_Type);
	PyModule_AddObject(m, "CFMutableDataRef", (PyObject *)&CFMutableDataRef_Type);
	/* Backward-compatible name */
	Py_INCREF(&CFMutableDataRef_Type);
	PyModule_AddObject(m, "CFMutableDataRefType", (PyObject *)&CFMutableDataRef_Type);
	CFStringRef_Type.ob_type = &PyType_Type;
	CFStringRef_Type.tp_base = &CFTypeRef_Type;
	if (PyType_Ready(&CFStringRef_Type) < 0) return;
	Py_INCREF(&CFStringRef_Type);
	PyModule_AddObject(m, "CFStringRef", (PyObject *)&CFStringRef_Type);
	/* Backward-compatible name */
	Py_INCREF(&CFStringRef_Type);
	PyModule_AddObject(m, "CFStringRefType", (PyObject *)&CFStringRef_Type);
	CFMutableStringRef_Type.ob_type = &PyType_Type;
	CFMutableStringRef_Type.tp_base = &CFStringRef_Type;
	if (PyType_Ready(&CFMutableStringRef_Type) < 0) return;
	Py_INCREF(&CFMutableStringRef_Type);
	PyModule_AddObject(m, "CFMutableStringRef", (PyObject *)&CFMutableStringRef_Type);
	/* Backward-compatible name */
	Py_INCREF(&CFMutableStringRef_Type);
	PyModule_AddObject(m, "CFMutableStringRefType", (PyObject *)&CFMutableStringRef_Type);
	CFURLRef_Type.ob_type = &PyType_Type;
	CFURLRef_Type.tp_base = &CFTypeRef_Type;
	if (PyType_Ready(&CFURLRef_Type) < 0) return;
	Py_INCREF(&CFURLRef_Type);
	PyModule_AddObject(m, "CFURLRef", (PyObject *)&CFURLRef_Type);
	/* Backward-compatible name */
	Py_INCREF(&CFURLRef_Type);
	PyModule_AddObject(m, "CFURLRefType", (PyObject *)&CFURLRef_Type);

#define _STRINGCONST(name) PyModule_AddObject(m, #name, CFStringRefObj_New(name))
	_STRINGCONST(kCFPreferencesAnyApplication);
	_STRINGCONST(kCFPreferencesCurrentApplication);
	_STRINGCONST(kCFPreferencesAnyHost);
	_STRINGCONST(kCFPreferencesCurrentHost);
	_STRINGCONST(kCFPreferencesAnyUser);
	_STRINGCONST(kCFPreferencesCurrentUser);



}

/* ========================= End module _CF ========================= */