Source

pyobjc / Modules / objc / objc_support.h

/* Copyright (c) 1996,97,98 by Lele Gaifax.  All Rights Reserved
 * Copyright (2) 2003 Ronald Oussoren
 *
 * This software may be used and distributed freely for any purpose
 * provided that this notice is included unchanged on any and all
 * copies. The author does not warrant or guarantee this software in
 * any way.
 *
 * This file is part of the PyObjC package.
 *
 * RCSfile: objc_support.h,v
 * Revision: 1.16
 * Date: 1998/08/18 15:35:57
 *
 * Created Tue Sep 10 14:11:38 1996.
 *
 * TODO: the functions exported by this file should be changed, the names
 * should start with 'PyObjC' and should be the same as the names used in
 * pyobjc-api.h (where appropriate).
 */

#ifndef _objc_support_H
#define _objc_support_H

#ifdef GNU_RUNTIME

#  include "objc-runtime-gnu.h"

#else /* NeXTSTEP / Mac OS X */

#  include "objc-runtime-apple.h"

#endif 

/*#F Takes a C value pointed by @var{datum} with its type encoded in
  @var{type}, that should be coming from an ObjC @encode directive,
  and returns an equivalent Python object where C structures and
  arrays are represented as tuples. */
extern PyObject *pythonify_c_value (const char *type,
				    void *datum);
extern PyObject *pythonify_c_return_value (const char *type,
				    void *datum);

/*#F Takes a Python object @var{arg} and translate it into a C value
  pointed by @var{datum} accordingly with the type specification
  encoded in @var{type}, that should be coming from an ObjC @encode
  directive.
  Returns NULL on success, or a static error string describing the
  error. */
extern int depythonify_c_value (const char *type,
					PyObject *arg,
					void *datum);
extern int depythonify_c_return_value (const char *type,
					PyObject *arg,
					void *datum);

extern Py_ssize_t PyObjCRT_SizeOfReturnType(const char* type);
extern Py_ssize_t PyObjCRT_SizeOfType(const char *type);
extern Py_ssize_t PyObjCRT_AlignOfType(const char *type);
extern const char *PyObjCRT_SkipTypeSpec (const char *type);
extern const char* PyObjCRT_SkipTypeQualifiers (const char* type);

/*
 * Compatibility with pyobjc-api.h
 */
static inline id PyObjC_PythonToId(PyObject* value)
{
	id res;
	int r;

	r = depythonify_c_value(@encode(id), value, &res);
	if (r == -1) {
		return NULL;
	} else {
		return res;
	}
}

static inline PyObject* PyObjC_IdToPython(id value)
{
	PyObject* res;

	res = pythonify_c_value(@encode(id), &value);
	return res;
}


extern int PyObjCRT_SetupClass(
	Class, Class, const char*, Class, Class, Py_ssize_t, struct objc_ivar_list*,
	struct objc_protocol_list*);
extern void PyObjCRT_ClearClass(Class cls);

#endif /* _objc_support_H */