/* =========================== 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 ========================= */