Mercurial > hgrepos > Python > libs > ConfigMix
annotate configmix/_py_helper.h @ 654:0d6673d06c2c
Add support for using "tomllib" (in Python's stdlib since 3.11) and "tomli" TOML packages.
They are preferred if they are found to be installed.
But note that the declared dependency for the "toml" extra nevertheless
is the "toml" package. Because it is available for all supported Python
versions.
So use Python 3.11+ or install "tomli" manually if you want to use the
alternate packages.
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Thu, 19 May 2022 22:10:59 +0200 |
| parents | f454889e41fa |
| children |
| rev | line source |
|---|---|
|
559
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1 /* -*- coding: utf-8 -*- */ |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
2 /* |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
3 * Some Python helper for C. |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
4 * |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
5 * Also contains some interesting backports from later Python versions. |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
6 * |
|
593
f454889e41fa
Adjust copyright year (the end) to 2022
Franz Glasner <fzglas.hg@dom66.de>
parents:
563
diff
changeset
|
7 * :Copyright: (c) 2021-2022, Franz Glasner. All rights reserved. |
|
559
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
8 * :License: BSD-3-Clause. See LICENSE.txt for details. |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
9 */ |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
10 |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
11 #if !defined(_PY_HELPER_H_d9df407295df4884a88e56699f6c6d8d) |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
12 #define _PY_HELPER_H_d9df407295df4884a88e56699f6c6d8d |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
13 |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
14 #if PY_VERSION_HEX < 0x030A0000 |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
15 |
|
560
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
16 /* |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
17 * Return a new owned reference to an object |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
18 */ |
|
559
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
19 static inline |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
20 PyObject * |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
21 Py_NewRef(PyObject *obj) |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
22 { |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
23 Py_INCREF(obj); |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
24 return obj; |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
25 } |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
26 |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
27 |
|
560
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
28 /* |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
29 * Return a new owned reference to an object when the input can be NULL |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
30 */ |
|
559
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
31 static inline |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
32 PyObject * |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
33 Py_XNewRef(PyObject *obj) |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
34 { |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
35 Py_XINCREF(obj); |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
36 return obj; |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
37 } |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
38 |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
39 #endif /* PY_VERSION_HEX < 0x030A0000 */ |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
40 |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
41 |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
42 static inline |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
43 void |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
44 py_clear_ref(PyObject **obj) |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
45 { |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
46 PyObject *tmp; |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
47 |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
48 if ((tmp = *obj) != NULL) { |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
49 *obj = NULL; |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
50 Py_DECREF(tmp); |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
51 } |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
52 } |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
53 |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
54 |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
55 /* |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
56 * NOTE: This implementation is valid for CPython only! |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
57 */ |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
58 static inline |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
59 int |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
60 py_object_is(PyObject *obj1, PyObject *obj2) |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
61 { |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
62 return (obj1 == obj2); |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
63 } |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
64 |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
65 |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
66 /* |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
67 * NOTE: This implementation is valid for CPython only! |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
68 */ |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
69 static inline |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
70 int |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
71 py_object_isnot(PyObject *obj1, PyObject *obj2) |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
72 { |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
73 return (obj1 != obj2); |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
74 } |
|
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
75 |
|
560
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
76 |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
77 /** |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
78 * Copy from source to destination and make an owned reference. |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
79 * Also safely clear the destination before. |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
80 */ |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
81 static inline |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
82 void |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
83 py_assign(PyObject **dest, PyObject *src) |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
84 { |
|
563
2c211934d4b0
Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents:
562
diff
changeset
|
85 Py_DECREF(*dest); |
|
2c211934d4b0
Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents:
562
diff
changeset
|
86 *dest = Py_NewRef(src); |
|
2c211934d4b0
Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents:
562
diff
changeset
|
87 } |
|
2c211934d4b0
Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents:
562
diff
changeset
|
88 |
|
2c211934d4b0
Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents:
562
diff
changeset
|
89 |
|
2c211934d4b0
Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents:
562
diff
changeset
|
90 /** |
|
2c211934d4b0
Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents:
562
diff
changeset
|
91 * Copy from source to destination and make an owned reference. |
|
2c211934d4b0
Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents:
562
diff
changeset
|
92 * Also clear the destination before. |
|
2c211934d4b0
Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents:
562
diff
changeset
|
93 */ |
|
2c211934d4b0
Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents:
562
diff
changeset
|
94 static inline |
|
2c211934d4b0
Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents:
562
diff
changeset
|
95 void |
|
2c211934d4b0
Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents:
562
diff
changeset
|
96 py_x_assign(PyObject **dest, PyObject *src) |
|
2c211934d4b0
Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents:
562
diff
changeset
|
97 { |
|
560
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
98 Py_XDECREF(*dest); |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
99 *dest = Py_NewRef(src); |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
100 } |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
101 |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
102 |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
103 /** |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
104 * Copy from source to destination and make an owned reference. |
|
563
2c211934d4b0
Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents:
562
diff
changeset
|
105 * Also clear the destination before. The source object may be NULL. |
|
2c211934d4b0
Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents:
562
diff
changeset
|
106 */ |
|
2c211934d4b0
Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents:
562
diff
changeset
|
107 static inline |
|
2c211934d4b0
Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents:
562
diff
changeset
|
108 void |
|
2c211934d4b0
Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents:
562
diff
changeset
|
109 py_assign_x(PyObject **dest, PyObject *src) |
|
2c211934d4b0
Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents:
562
diff
changeset
|
110 { |
|
2c211934d4b0
Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents:
562
diff
changeset
|
111 Py_DECREF(*dest); |
|
2c211934d4b0
Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents:
562
diff
changeset
|
112 *dest = Py_XNewRef(src); |
|
2c211934d4b0
Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents:
562
diff
changeset
|
113 } |
|
2c211934d4b0
Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents:
562
diff
changeset
|
114 |
|
2c211934d4b0
Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents:
562
diff
changeset
|
115 |
|
2c211934d4b0
Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents:
562
diff
changeset
|
116 /** |
|
2c211934d4b0
Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents:
562
diff
changeset
|
117 * Copy from source to destination and make an owned reference. |
|
560
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
118 * Also safely clear the destination before. The source object may be NULL. |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
119 */ |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
120 static inline |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
121 void |
|
563
2c211934d4b0
Some more helper functions (with regard to NULL PyObjects)
Franz Glasner <fzglas.hg@dom66.de>
parents:
562
diff
changeset
|
122 py_x_assign_x(PyObject **dest, PyObject *src) |
|
560
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
123 { |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
124 Py_XDECREF(*dest); |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
125 *dest = Py_XNewRef(src); |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
126 } |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
127 |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
128 |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
129 /* |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
130 * Transfer from a borrowed reference to an owned one and clear the source. |
| 562 | 131 * Also clear the destination before. |
|
560
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
132 */ |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
133 static inline |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
134 void |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
135 py_transfer_borrowed(PyObject **dest, PyObject **src) |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
136 { |
| 562 | 137 Py_DECREF(*dest); |
| 138 *dest = Py_NewRef(*src); | |
| 139 *src = NULL; | |
| 140 } | |
| 141 | |
| 142 | |
| 143 /* | |
| 144 * Transfer from a borrowed reference to an owned one and clear the source. | |
| 145 * Also safely clear the destination before. | |
| 146 */ | |
| 147 static inline | |
| 148 void | |
| 149 py_x_transfer_borrowed(PyObject **dest, PyObject **src) | |
| 150 { | |
|
560
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
151 Py_XDECREF(*dest); |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
152 *dest = Py_NewRef(*src); |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
153 *src = NULL; |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
154 } |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
155 |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
156 |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
157 /* |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
158 * Transfer from a borrowed reference to an owned one and clear the source. |
| 562 | 159 * Also clear the destination before. The source object may be NULL. |
| 160 */ | |
| 161 static inline | |
| 162 void | |
| 163 py_transfer_x_borrowed(PyObject **dest, PyObject **src) | |
| 164 { | |
| 165 Py_DECREF(*dest); | |
| 166 *dest = Py_XNewRef(*src); | |
| 167 *src = NULL; | |
| 168 } | |
| 169 | |
| 170 | |
| 171 /* | |
| 172 * Transfer from a borrowed reference to an owned one and clear the source. | |
|
560
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
173 * Also safely clear the destination before. The source object may be NULL. |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
174 */ |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
175 static inline |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
176 void |
| 562 | 177 py_x_transfer_x_borrowed(PyObject **dest, PyObject **src) |
|
560
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
178 { |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
179 Py_XDECREF(*dest); |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
180 *dest = Py_XNewRef(*src); |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
181 *src = NULL; |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
182 } |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
183 |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
184 |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
185 /* |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
186 * Transfer ownership from a owned reference to an owned one and clear the |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
187 * source. |
| 562 | 188 * Also clear the destination before. |
| 189 */ | |
| 190 static inline | |
| 191 void | |
| 192 py_transfer_owned(PyObject **dest, PyObject **src) | |
| 193 { | |
| 194 Py_DECREF(*dest); | |
| 195 *dest = *src; | |
| 196 *src = NULL; | |
| 197 } | |
| 198 | |
| 199 | |
| 200 /* | |
| 201 * Transfer ownership from a owned reference to an owned one and clear the | |
| 202 * source. | |
|
560
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
203 * Also safely clear the destination before. |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
204 */ |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
205 static inline |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
206 void |
| 562 | 207 py_x_transfer_owned(PyObject **dest, PyObject **src) |
|
560
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
208 { |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
209 Py_XDECREF(*dest); |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
210 *dest = *src; |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
211 *src = NULL; |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
212 } |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
213 |
|
81238ea2dbe3
Implement and use more helper functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
559
diff
changeset
|
214 |
|
559
bb160a1e67d7
A simple helper include file with some conveniente functions.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
215 #endif |
