1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
/* 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 */
|