blob: b76f2573c98df5daa6039665b4f2c6a55c63aebe [file] [log] [blame]
Guido van Rossuma8275371995-07-18 14:07:00 +00001#ifndef Py_ABSTRACTOBJECT_H
2#define Py_ABSTRACTOBJECT_H
3#ifdef __cplusplus
4extern "C" {
5#endif
6
Guido van Rossuma8275371995-07-18 14:07:00 +00007/* Abstract Object Interface (many thanks to Jim Fulton) */
8
9/*
10 PROPOSAL: A Generic Python Object Interface for Python C Modules
11
12Problem
13
14 Python modules written in C that must access Python objects must do
15 so through routines whose interfaces are described by a set of
16 include files. Unfortunately, these routines vary according to the
17 object accessed. To use these routines, the C programmer must check
18 the type of the object being used and must call a routine based on
19 the object type. For example, to access an element of a sequence,
20 the programmer must determine whether the sequence is a list or a
21 tuple:
22
23 if(is_tupleobject(o))
24 e=gettupleitem(o,i)
25 else if(is_listitem(o))
26 e=getlistitem(o,i)
27
28 If the programmer wants to get an item from another type of object
29 that provides sequence behavior, there is no clear way to do it
30 correctly.
31
32 The persistent programmer may peruse object.h and find that the
33 _typeobject structure provides a means of invoking up to (currently
34 about) 41 special operators. So, for example, a routine can get an
35 item from any object that provides sequence behavior. However, to
36 use this mechanism, the programmer must make their code dependent on
37 the current Python implementation.
38
39 Also, certain semantics, especially memory management semantics, may
40 differ by the type of object being used. Unfortunately, these
41 semantics are not clearly described in the current include files.
42 An abstract interface providing more consistent semantics is needed.
43
44Proposal
45
46 I propose the creation of a standard interface (with an associated
47 library of routines and/or macros) for generically obtaining the
48 services of Python objects. This proposal can be viewed as one
49 components of a Python C interface consisting of several components.
50
Raymond Hettingera72e2f92003-02-28 05:11:03 +000051 From the viewpoint of C access to Python services, we have (as
Guido van Rossuma8275371995-07-18 14:07:00 +000052 suggested by Guido in off-line discussions):
53
54 - "Very high level layer": two or three functions that let you exec or
55 eval arbitrary Python code given as a string in a module whose name is
56 given, passing C values in and getting C values out using
57 mkvalue/getargs style format strings. This does not require the user
58 to declare any variables of type "PyObject *". This should be enough
59 to write a simple application that gets Python code from the user,
60 execs it, and returns the output or errors. (Error handling must also
61 be part of this API.)
62
63 - "Abstract objects layer": which is the subject of this proposal.
64 It has many functions operating on objects, and lest you do many
65 things from C that you can also write in Python, without going
66 through the Python parser.
67
68 - "Concrete objects layer": This is the public type-dependent
69 interface provided by the standard built-in types, such as floats,
70 strings, and lists. This interface exists and is currently
Raymond Hettingera72e2f92003-02-28 05:11:03 +000071 documented by the collection of include files provided with the
Guido van Rossuma8275371995-07-18 14:07:00 +000072 Python distributions.
73
74 From the point of view of Python accessing services provided by C
75 modules:
76
77 - "Python module interface": this interface consist of the basic
78 routines used to define modules and their members. Most of the
79 current extensions-writing guide deals with this interface.
80
81 - "Built-in object interface": this is the interface that a new
82 built-in type must provide and the mechanisms and rules that a
83 developer of a new built-in type must use and follow.
84
85 This proposal is a "first-cut" that is intended to spur
86 discussion. See especially the lists of notes.
87
88 The Python C object interface will provide four protocols: object,
89 numeric, sequence, and mapping. Each protocol consists of a
90 collection of related operations. If an operation that is not
91 provided by a particular type is invoked, then a standard exception,
92 NotImplementedError is raised with a operation name as an argument.
93 In addition, for convenience this interface defines a set of
94 constructors for building objects of built-in types. This is needed
95 so new objects can be returned from C functions that otherwise treat
96 objects generically.
97
98Memory Management
99
100 For all of the functions described in this proposal, if a function
101 retains a reference to a Python object passed as an argument, then the
102 function will increase the reference count of the object. It is
103 unnecessary for the caller to increase the reference count of an
104 argument in anticipation of the object's retention.
105
106 All Python objects returned from functions should be treated as new
107 objects. Functions that return objects assume that the caller will
108 retain a reference and the reference count of the object has already
109 been incremented to account for this fact. A caller that does not
110 retain a reference to an object that is returned from a function
111 must decrement the reference count of the object (using
112 DECREF(object)) to prevent memory leaks.
113
114 Note that the behavior mentioned here is different from the current
115 behavior for some objects (e.g. lists and tuples) when certain
116 type-specific routines are called directly (e.g. setlistitem). The
117 proposed abstraction layer will provide a consistent memory
118 management interface, correcting for inconsistent behavior for some
119 built-in types.
120
121Protocols
122
123xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/
124
125/* Object Protocol: */
126
127 /* Implemented elsewhere:
128
129 int PyObject_Print(PyObject *o, FILE *fp, int flags);
130
131 Print an object, o, on file, fp. Returns -1 on
132 error. The flags argument is used to enable certain printing
133 options. The only option currently supported is Py_Print_RAW.
134
135 (What should be said about Py_Print_RAW?)
136
137 */
138
139 /* Implemented elsewhere:
140
141 int PyObject_HasAttrString(PyObject *o, char *attr_name);
142
143 Returns 1 if o has the attribute attr_name, and 0 otherwise.
144 This is equivalent to the Python expression:
145 hasattr(o,attr_name).
146
147 This function always succeeds.
148
149 */
150
151 /* Implemented elsewhere:
152
153 PyObject* PyObject_GetAttrString(PyObject *o, char *attr_name);
154
155 Retrieve an attributed named attr_name form object o.
156 Returns the attribute value on success, or NULL on failure.
157 This is the equivalent of the Python expression: o.attr_name.
158
159 */
160
161 /* Implemented elsewhere:
162
163 int PyObject_HasAttr(PyObject *o, PyObject *attr_name);
164
165 Returns 1 if o has the attribute attr_name, and 0 otherwise.
166 This is equivalent to the Python expression:
167 hasattr(o,attr_name).
168
169 This function always succeeds.
170
171 */
172
173 /* Implemented elsewhere:
174
175 PyObject* PyObject_GetAttr(PyObject *o, PyObject *attr_name);
176
177 Retrieve an attributed named attr_name form object o.
178 Returns the attribute value on success, or NULL on failure.
179 This is the equivalent of the Python expression: o.attr_name.
180
181 */
182
183
184 /* Implemented elsewhere:
185
186 int PyObject_SetAttrString(PyObject *o, char *attr_name, PyObject *v);
187
188 Set the value of the attribute named attr_name, for object o,
189 to the value, v. Returns -1 on failure. This is
190 the equivalent of the Python statement: o.attr_name=v.
191
192 */
193
194 /* Implemented elsewhere:
195
196 int PyObject_SetAttr(PyObject *o, PyObject *attr_name, PyObject *v);
197
198 Set the value of the attribute named attr_name, for object o,
199 to the value, v. Returns -1 on failure. This is
200 the equivalent of the Python statement: o.attr_name=v.
201
202 */
203
204 /* implemented as a macro:
205
206 int PyObject_DelAttrString(PyObject *o, char *attr_name);
207
208 Delete attribute named attr_name, for object o. Returns
209 -1 on failure. This is the equivalent of the Python
210 statement: del o.attr_name.
211
212 */
213#define PyObject_DelAttrString(O,A) PyObject_SetAttrString((O),(A),NULL)
214
215 /* implemented as a macro:
216
217 int PyObject_DelAttr(PyObject *o, PyObject *attr_name);
218
219 Delete attribute named attr_name, for object o. Returns -1
220 on failure. This is the equivalent of the Python
221 statement: del o.attr_name.
222
223 */
224#define PyObject_DelAttr(O,A) PyObject_SetAttr((O),(A),NULL)
225
Mark Hammond91a681d2002-08-12 07:21:58 +0000226 PyAPI_FUNC(int) PyObject_Cmp(PyObject *o1, PyObject *o2, int *result);
Guido van Rossuma8275371995-07-18 14:07:00 +0000227
228 /*
229 Compare the values of o1 and o2 using a routine provided by
230 o1, if one exists, otherwise with a routine provided by o2.
231 The result of the comparison is returned in result. Returns
232 -1 on failure. This is the equivalent of the Python
233 statement: result=cmp(o1,o2).
234
235 */
236
237 /* Implemented elsewhere:
238
239 int PyObject_Compare(PyObject *o1, PyObject *o2);
240
241 Compare the values of o1 and o2 using a routine provided by
242 o1, if one exists, otherwise with a routine provided by o2.
243 Returns the result of the comparison on success. On error,
244 the value returned is undefined. This is equivalent to the
245 Python expression: cmp(o1,o2).
246
247 */
248
249 /* Implemented elsewhere:
250
251 PyObject *PyObject_Repr(PyObject *o);
252
253 Compute the string representation of object, o. Returns the
254 string representation on success, NULL on failure. This is
255 the equivalent of the Python expression: repr(o).
256
257 Called by the repr() built-in function and by reverse quotes.
258
259 */
260
261 /* Implemented elsewhere:
262
263 PyObject *PyObject_Str(PyObject *o);
264
265 Compute the string representation of object, o. Returns the
266 string representation on success, NULL on failure. This is
267 the equivalent of the Python expression: str(o).)
268
269 Called by the str() built-in function and by the print
270 statement.
271
272 */
273
Marc-André Lemburgad7c98e2001-01-17 17:09:53 +0000274 /* Implemented elsewhere:
275
276 PyObject *PyObject_Unicode(PyObject *o);
277
278 Compute the unicode representation of object, o. Returns the
279 unicode representation on success, NULL on failure. This is
280 the equivalent of the Python expression: unistr(o).)
281
282 Called by the unistr() built-in function.
283
284 */
285
Mark Hammond91a681d2002-08-12 07:21:58 +0000286 PyAPI_FUNC(int) PyCallable_Check(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000287
288 /*
289 Determine if the object, o, is callable. Return 1 if the
290 object is callable and 0 otherwise.
291
292 This function always succeeds.
Guido van Rossuma8275371995-07-18 14:07:00 +0000293 */
294
Mark Hammond91a681d2002-08-12 07:21:58 +0000295 PyAPI_FUNC(PyObject *) PyObject_Call(PyObject *callable_object,
Neal Norwitzfe554642006-03-17 06:58:45 +0000296 PyObject *args, PyObject *kw);
Tim Peters6d6c1a32001-08-02 04:15:00 +0000297
298 /*
Tim Peters6d6c1a32001-08-02 04:15:00 +0000299 Call a callable Python object, callable_object, with
300 arguments and keywords arguments. The 'args' argument can not be
301 NULL, but the 'kw' argument can be NULL.
Tim Peters6d6c1a32001-08-02 04:15:00 +0000302 */
Guido van Rossuma8275371995-07-18 14:07:00 +0000303
Mark Hammond91a681d2002-08-12 07:21:58 +0000304 PyAPI_FUNC(PyObject *) PyObject_CallObject(PyObject *callable_object,
Neal Norwitzfe554642006-03-17 06:58:45 +0000305 PyObject *args);
Guido van Rossuma8275371995-07-18 14:07:00 +0000306
307 /*
Guido van Rossuma8275371995-07-18 14:07:00 +0000308 Call a callable Python object, callable_object, with
309 arguments given by the tuple, args. If no arguments are
310 needed, then args may be NULL. Returns the result of the
311 call on success, or NULL on failure. This is the equivalent
Neal Norwitzfe554642006-03-17 06:58:45 +0000312 of the Python expression: o(*args).
Guido van Rossuma8275371995-07-18 14:07:00 +0000313 */
314
Mark Hammond91a681d2002-08-12 07:21:58 +0000315 PyAPI_FUNC(PyObject *) PyObject_CallFunction(PyObject *callable_object,
Neal Norwitzfe554642006-03-17 06:58:45 +0000316 char *format, ...);
Guido van Rossuma8275371995-07-18 14:07:00 +0000317
318 /*
319 Call a callable Python object, callable_object, with a
320 variable number of C arguments. The C arguments are described
321 using a mkvalue-style format string. The format may be NULL,
322 indicating that no arguments are provided. Returns the
323 result of the call on success, or NULL on failure. This is
Neal Norwitzfe554642006-03-17 06:58:45 +0000324 the equivalent of the Python expression: o(*args).
Guido van Rossuma8275371995-07-18 14:07:00 +0000325 */
326
327
Neal Norwitzfe554642006-03-17 06:58:45 +0000328 PyAPI_FUNC(PyObject *) PyObject_CallMethod(PyObject *o, char *method,
329 char *format, ...);
Guido van Rossuma8275371995-07-18 14:07:00 +0000330
331 /*
332 Call the method named m of object o with a variable number of
333 C arguments. The C arguments are described by a mkvalue
334 format string. The format may be NULL, indicating that no
335 arguments are provided. Returns the result of the call on
336 success, or NULL on failure. This is the equivalent of the
337 Python expression: o.method(args).
Fred Drakeb421b8c2001-10-26 16:21:32 +0000338 */
Guido van Rossuma8275371995-07-18 14:07:00 +0000339
Guido van Rossuma8275371995-07-18 14:07:00 +0000340
Mark Hammond91a681d2002-08-12 07:21:58 +0000341 PyAPI_FUNC(PyObject *) PyObject_CallFunctionObjArgs(PyObject *callable,
Neal Norwitzfe554642006-03-17 06:58:45 +0000342 ...);
Fred Drakeb421b8c2001-10-26 16:21:32 +0000343
344 /*
345 Call a callable Python object, callable_object, with a
346 variable number of C arguments. The C arguments are provided
Fred Drakeb5662892003-05-12 21:41:39 +0000347 as PyObject * values, terminated by a NULL. Returns the
348 result of the call on success, or NULL on failure. This is
Neal Norwitzfe554642006-03-17 06:58:45 +0000349 the equivalent of the Python expression: o(*args).
Fred Drakeb421b8c2001-10-26 16:21:32 +0000350 */
351
352
Mark Hammond91a681d2002-08-12 07:21:58 +0000353 PyAPI_FUNC(PyObject *) PyObject_CallMethodObjArgs(PyObject *o,
Neal Norwitzfe554642006-03-17 06:58:45 +0000354 PyObject *method, ...);
Fred Drakeb421b8c2001-10-26 16:21:32 +0000355
356 /*
357 Call the method named m of object o with a variable number of
Fred Drakeb5662892003-05-12 21:41:39 +0000358 C arguments. The C arguments are provided as PyObject *
359 values, terminated by NULL. Returns the result of the call
360 on success, or NULL on failure. This is the equivalent of
361 the Python expression: o.method(args).
Guido van Rossuma8275371995-07-18 14:07:00 +0000362 */
363
364
365 /* Implemented elsewhere:
366
367 long PyObject_Hash(PyObject *o);
368
369 Compute and return the hash, hash_value, of an object, o. On
370 failure, return -1. This is the equivalent of the Python
371 expression: hash(o).
Guido van Rossuma8275371995-07-18 14:07:00 +0000372 */
373
374
375 /* Implemented elsewhere:
376
377 int PyObject_IsTrue(PyObject *o);
378
Michael W. Hudson31316792002-11-25 15:06:29 +0000379 Returns 1 if the object, o, is considered to be true, 0 if o is
380 considered to be false and -1 on failure. This is equivalent to the
381 Python expression: not not o
Guido van Rossuma8275371995-07-18 14:07:00 +0000382 */
383
Guido van Rossumc3d3f961998-04-09 17:53:59 +0000384 /* Implemented elsewhere:
385
386 int PyObject_Not(PyObject *o);
387
Michael W. Hudson31316792002-11-25 15:06:29 +0000388 Returns 0 if the object, o, is considered to be true, 1 if o is
389 considered to be false and -1 on failure. This is equivalent to the
390 Python expression: not o
Guido van Rossumc3d3f961998-04-09 17:53:59 +0000391 */
392
Mark Hammond91a681d2002-08-12 07:21:58 +0000393 PyAPI_FUNC(PyObject *) PyObject_Type(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000394
395 /*
396 On success, returns a type object corresponding to the object
397 type of object o. On failure, returns NULL. This is
398 equivalent to the Python expression: type(o).
399 */
400
Martin v. Löwis18e16552006-02-15 17:27:45 +0000401 PyAPI_FUNC(Py_ssize_t) PyObject_Size(PyObject *o);
Jeremy Hylton6253f832000-07-12 12:56:19 +0000402
Guido van Rossuma8275371995-07-18 14:07:00 +0000403 /*
Jeremy Hylton6253f832000-07-12 12:56:19 +0000404 Return the size of object o. If the object, o, provides
405 both sequence and mapping protocols, the sequence size is
Guido van Rossuma8275371995-07-18 14:07:00 +0000406 returned. On error, -1 is returned. This is the equivalent
407 to the Python expression: len(o).
Guido van Rossuma8275371995-07-18 14:07:00 +0000408 */
409
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +0000410 /* For DLL compatibility */
411#undef PyObject_Length
Martin v. Löwis18e16552006-02-15 17:27:45 +0000412 PyAPI_FUNC(Py_ssize_t) PyObject_Length(PyObject *o);
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +0000413#define PyObject_Length PyObject_Size
414
Martin v. Löwis18e16552006-02-15 17:27:45 +0000415 PyAPI_FUNC(Py_ssize_t) _PyObject_LengthHint(PyObject *o);
Raymond Hettinger6b27cda2005-09-24 21:23:05 +0000416
417 /*
418 Return the size of object o. If the object, o, provides
419 both sequence and mapping protocols, the sequence size is
420 returned. On error, -1 is returned. If the object provides
Armin Rigof5b3e362006-02-11 21:32:43 +0000421 a __length_hint__() method, its value is returned. This is an
422 internal undocumented API provided for performance reasons;
423 for compatibility, don't use it outside the core. This is the
Raymond Hettinger6b27cda2005-09-24 21:23:05 +0000424 equivalent to the Python expression:
425 try:
426 return len(o)
427 except (AttributeError, TypeError):
Armin Rigof5b3e362006-02-11 21:32:43 +0000428 exc_type, exc_value, exc_tb = sys.exc_info()
429 try:
430 return o.__length_hint__()
431 except:
432 pass
433 raise exc_type, exc_value, exc_tb
Raymond Hettinger6b27cda2005-09-24 21:23:05 +0000434 */
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +0000435
Mark Hammond91a681d2002-08-12 07:21:58 +0000436 PyAPI_FUNC(PyObject *) PyObject_GetItem(PyObject *o, PyObject *key);
Guido van Rossuma8275371995-07-18 14:07:00 +0000437
438 /*
439 Return element of o corresponding to the object, key, or NULL
440 on failure. This is the equivalent of the Python expression:
441 o[key].
Guido van Rossuma8275371995-07-18 14:07:00 +0000442 */
443
Mark Hammond91a681d2002-08-12 07:21:58 +0000444 PyAPI_FUNC(int) PyObject_SetItem(PyObject *o, PyObject *key, PyObject *v);
Guido van Rossuma8275371995-07-18 14:07:00 +0000445
446 /*
447 Map the object, key, to the value, v. Returns
448 -1 on failure. This is the equivalent of the Python
449 statement: o[key]=v.
450 */
451
Mark Hammond91a681d2002-08-12 07:21:58 +0000452 PyAPI_FUNC(int) PyObject_DelItemString(PyObject *o, char *key);
Martin v. Löwisb0d71d02002-01-05 10:50:30 +0000453
454 /*
455 Remove the mapping for object, key, from the object *o.
456 Returns -1 on failure. This is equivalent to
457 the Python statement: del o[key].
458 */
459
Mark Hammond91a681d2002-08-12 07:21:58 +0000460 PyAPI_FUNC(int) PyObject_DelItem(PyObject *o, PyObject *key);
Guido van Rossum6cdc6f41996-08-21 17:41:54 +0000461
462 /*
463 Delete the mapping for key from *o. Returns -1 on failure.
464 This is the equivalent of the Python statement: del o[key].
465 */
466
Mark Hammond91a681d2002-08-12 07:21:58 +0000467 PyAPI_FUNC(int) PyObject_AsCharBuffer(PyObject *obj,
Neal Norwitzfe554642006-03-17 06:58:45 +0000468 const char **buffer,
469 Py_ssize_t *buffer_len);
Guido van Rossumfd9eed32000-03-10 22:35:06 +0000470
471 /*
472 Takes an arbitrary object which must support the (character,
473 single segment) buffer interface and returns a pointer to a
474 read-only memory location useable as character based input
475 for subsequent processing.
476
477 0 is returned on success. buffer and buffer_len are only
Raymond Hettingera72e2f92003-02-28 05:11:03 +0000478 set in case no error occurs. Otherwise, -1 is returned and
Guido van Rossumfd9eed32000-03-10 22:35:06 +0000479 an exception set.
Guido van Rossumfd9eed32000-03-10 22:35:06 +0000480 */
481
Mark Hammond91a681d2002-08-12 07:21:58 +0000482 PyAPI_FUNC(int) PyObject_CheckReadBuffer(PyObject *obj);
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000483
484 /*
485 Checks whether an arbitrary object supports the (character,
486 single segment) buffer interface. Returns 1 on success, 0
487 on failure.
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000488 */
489
Mark Hammond91a681d2002-08-12 07:21:58 +0000490 PyAPI_FUNC(int) PyObject_AsReadBuffer(PyObject *obj,
Neal Norwitzfe554642006-03-17 06:58:45 +0000491 const void **buffer,
492 Py_ssize_t *buffer_len);
Guido van Rossumfd9eed32000-03-10 22:35:06 +0000493
494 /*
495 Same as PyObject_AsCharBuffer() except that this API expects
496 (readable, single segment) buffer interface and returns a
497 pointer to a read-only memory location which can contain
498 arbitrary data.
499
500 0 is returned on success. buffer and buffer_len are only
501 set in case no error occurrs. Otherwise, -1 is returned and
502 an exception set.
Guido van Rossumfd9eed32000-03-10 22:35:06 +0000503 */
504
Mark Hammond91a681d2002-08-12 07:21:58 +0000505 PyAPI_FUNC(int) PyObject_AsWriteBuffer(PyObject *obj,
Neal Norwitzfe554642006-03-17 06:58:45 +0000506 void **buffer,
507 Py_ssize_t *buffer_len);
Guido van Rossumfd9eed32000-03-10 22:35:06 +0000508
509 /*
510 Takes an arbitrary object which must support the (writeable,
511 single segment) buffer interface and returns a pointer to a
512 writeable memory location in buffer of size buffer_len.
513
514 0 is returned on success. buffer and buffer_len are only
515 set in case no error occurrs. Otherwise, -1 is returned and
516 an exception set.
Guido van Rossumfd9eed32000-03-10 22:35:06 +0000517 */
Guido van Rossuma8275371995-07-18 14:07:00 +0000518
Guido van Rossum213c7a62001-04-23 14:08:49 +0000519/* Iterators */
520
Mark Hammond91a681d2002-08-12 07:21:58 +0000521 PyAPI_FUNC(PyObject *) PyObject_GetIter(PyObject *);
Guido van Rossum59d1d2b2001-04-20 19:13:02 +0000522 /* Takes an object and returns an iterator for it.
523 This is typically a new iterator but if the argument
524 is an iterator, this returns itself. */
525
Guido van Rossum213c7a62001-04-23 14:08:49 +0000526#define PyIter_Check(obj) \
527 (PyType_HasFeature((obj)->ob_type, Py_TPFLAGS_HAVE_ITER) && \
528 (obj)->ob_type->tp_iternext != NULL)
529
Mark Hammond91a681d2002-08-12 07:21:58 +0000530 PyAPI_FUNC(PyObject *) PyIter_Next(PyObject *);
Guido van Rossum213c7a62001-04-23 14:08:49 +0000531 /* Takes an iterator object and calls its tp_iternext slot,
532 returning the next value. If the iterator is exhausted,
Tim Petersf4848da2001-05-05 00:14:56 +0000533 this returns NULL without setting an exception.
534 NULL with an exception means an error occurred. */
Guido van Rossum213c7a62001-04-23 14:08:49 +0000535
Guido van Rossuma8275371995-07-18 14:07:00 +0000536/* Number Protocol:*/
537
Mark Hammond91a681d2002-08-12 07:21:58 +0000538 PyAPI_FUNC(int) PyNumber_Check(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000539
540 /*
541 Returns 1 if the object, o, provides numeric protocols, and
542 false otherwise.
543
544 This function always succeeds.
Guido van Rossuma8275371995-07-18 14:07:00 +0000545 */
546
Mark Hammond91a681d2002-08-12 07:21:58 +0000547 PyAPI_FUNC(PyObject *) PyNumber_Add(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000548
549 /*
550 Returns the result of adding o1 and o2, or null on failure.
551 This is the equivalent of the Python expression: o1+o2.
Guido van Rossuma8275371995-07-18 14:07:00 +0000552 */
553
Mark Hammond91a681d2002-08-12 07:21:58 +0000554 PyAPI_FUNC(PyObject *) PyNumber_Subtract(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000555
556 /*
557 Returns the result of subtracting o2 from o1, or null on
558 failure. This is the equivalent of the Python expression:
559 o1-o2.
Guido van Rossuma8275371995-07-18 14:07:00 +0000560 */
561
Mark Hammond91a681d2002-08-12 07:21:58 +0000562 PyAPI_FUNC(PyObject *) PyNumber_Multiply(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000563
564 /*
565 Returns the result of multiplying o1 and o2, or null on
566 failure. This is the equivalent of the Python expression:
567 o1*o2.
Guido van Rossuma8275371995-07-18 14:07:00 +0000568 */
569
Mark Hammond91a681d2002-08-12 07:21:58 +0000570 PyAPI_FUNC(PyObject *) PyNumber_Divide(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000571
572 /*
573 Returns the result of dividing o1 by o2, or null on failure.
574 This is the equivalent of the Python expression: o1/o2.
Guido van Rossuma8275371995-07-18 14:07:00 +0000575 */
576
Mark Hammond91a681d2002-08-12 07:21:58 +0000577 PyAPI_FUNC(PyObject *) PyNumber_FloorDivide(PyObject *o1, PyObject *o2);
Guido van Rossum4668b002001-08-08 05:00:18 +0000578
579 /*
580 Returns the result of dividing o1 by o2 giving an integral result,
581 or null on failure.
582 This is the equivalent of the Python expression: o1//o2.
Guido van Rossum4668b002001-08-08 05:00:18 +0000583 */
584
Mark Hammond91a681d2002-08-12 07:21:58 +0000585 PyAPI_FUNC(PyObject *) PyNumber_TrueDivide(PyObject *o1, PyObject *o2);
Guido van Rossum4668b002001-08-08 05:00:18 +0000586
587 /*
588 Returns the result of dividing o1 by o2 giving a float result,
589 or null on failure.
590 This is the equivalent of the Python expression: o1/o2.
Guido van Rossum4668b002001-08-08 05:00:18 +0000591 */
592
Mark Hammond91a681d2002-08-12 07:21:58 +0000593 PyAPI_FUNC(PyObject *) PyNumber_Remainder(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000594
595 /*
596 Returns the remainder of dividing o1 by o2, or null on
597 failure. This is the equivalent of the Python expression:
598 o1%o2.
Guido van Rossuma8275371995-07-18 14:07:00 +0000599 */
600
Mark Hammond91a681d2002-08-12 07:21:58 +0000601 PyAPI_FUNC(PyObject *) PyNumber_Divmod(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000602
603 /*
604 See the built-in function divmod. Returns NULL on failure.
605 This is the equivalent of the Python expression:
606 divmod(o1,o2).
Guido van Rossuma8275371995-07-18 14:07:00 +0000607 */
608
Mark Hammond91a681d2002-08-12 07:21:58 +0000609 PyAPI_FUNC(PyObject *) PyNumber_Power(PyObject *o1, PyObject *o2,
Neal Norwitzfe554642006-03-17 06:58:45 +0000610 PyObject *o3);
Guido van Rossuma8275371995-07-18 14:07:00 +0000611
612 /*
613 See the built-in function pow. Returns NULL on failure.
614 This is the equivalent of the Python expression:
615 pow(o1,o2,o3), where o3 is optional.
Guido van Rossuma8275371995-07-18 14:07:00 +0000616 */
617
Mark Hammond91a681d2002-08-12 07:21:58 +0000618 PyAPI_FUNC(PyObject *) PyNumber_Negative(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000619
620 /*
621 Returns the negation of o on success, or null on failure.
622 This is the equivalent of the Python expression: -o.
Guido van Rossuma8275371995-07-18 14:07:00 +0000623 */
624
Mark Hammond91a681d2002-08-12 07:21:58 +0000625 PyAPI_FUNC(PyObject *) PyNumber_Positive(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000626
627 /*
628 Returns the (what?) of o on success, or NULL on failure.
629 This is the equivalent of the Python expression: +o.
Guido van Rossuma8275371995-07-18 14:07:00 +0000630 */
631
Mark Hammond91a681d2002-08-12 07:21:58 +0000632 PyAPI_FUNC(PyObject *) PyNumber_Absolute(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000633
634 /*
635 Returns the absolute value of o, or null on failure. This is
636 the equivalent of the Python expression: abs(o).
Guido van Rossuma8275371995-07-18 14:07:00 +0000637 */
638
Mark Hammond91a681d2002-08-12 07:21:58 +0000639 PyAPI_FUNC(PyObject *) PyNumber_Invert(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000640
641 /*
642 Returns the bitwise negation of o on success, or NULL on
643 failure. This is the equivalent of the Python expression:
644 ~o.
Guido van Rossuma8275371995-07-18 14:07:00 +0000645 */
646
Mark Hammond91a681d2002-08-12 07:21:58 +0000647 PyAPI_FUNC(PyObject *) PyNumber_Lshift(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000648
649 /*
650 Returns the result of left shifting o1 by o2 on success, or
651 NULL on failure. This is the equivalent of the Python
652 expression: o1 << o2.
Guido van Rossuma8275371995-07-18 14:07:00 +0000653 */
654
Mark Hammond91a681d2002-08-12 07:21:58 +0000655 PyAPI_FUNC(PyObject *) PyNumber_Rshift(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000656
657 /*
658 Returns the result of right shifting o1 by o2 on success, or
659 NULL on failure. This is the equivalent of the Python
660 expression: o1 >> o2.
Guido van Rossuma8275371995-07-18 14:07:00 +0000661 */
662
Mark Hammond91a681d2002-08-12 07:21:58 +0000663 PyAPI_FUNC(PyObject *) PyNumber_And(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000664
665 /*
Guido van Rossum1ca407f1997-02-14 22:51:40 +0000666 Returns the result of bitwise and of o1 and o2 on success, or
667 NULL on failure. This is the equivalent of the Python
668 expression: o1&o2.
Guido van Rossuma8275371995-07-18 14:07:00 +0000669
Guido van Rossuma8275371995-07-18 14:07:00 +0000670 */
671
Mark Hammond91a681d2002-08-12 07:21:58 +0000672 PyAPI_FUNC(PyObject *) PyNumber_Xor(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000673
674 /*
675 Returns the bitwise exclusive or of o1 by o2 on success, or
676 NULL on failure. This is the equivalent of the Python
677 expression: o1^o2.
Guido van Rossuma8275371995-07-18 14:07:00 +0000678 */
679
Mark Hammond91a681d2002-08-12 07:21:58 +0000680 PyAPI_FUNC(PyObject *) PyNumber_Or(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000681
682 /*
Raymond Hettingera72e2f92003-02-28 05:11:03 +0000683 Returns the result of bitwise or on o1 and o2 on success, or
Guido van Rossum1ca407f1997-02-14 22:51:40 +0000684 NULL on failure. This is the equivalent of the Python
685 expression: o1|o2.
Guido van Rossuma8275371995-07-18 14:07:00 +0000686 */
687
688 /* Implemented elsewhere:
689
Guido van Rossumed227f01996-09-06 13:40:53 +0000690 int PyNumber_Coerce(PyObject **p1, PyObject **p2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000691
Guido van Rossumed227f01996-09-06 13:40:53 +0000692 This function takes the addresses of two variables of type
693 PyObject*.
694
695 If the objects pointed to by *p1 and *p2 have the same type,
696 increment their reference count and return 0 (success).
697 If the objects can be converted to a common numeric type,
698 replace *p1 and *p2 by their converted value (with 'new'
699 reference counts), and return 0.
700 If no conversion is possible, or if some other error occurs,
701 return -1 (failure) and don't increment the reference counts.
702 The call PyNumber_Coerce(&o1, &o2) is equivalent to the Python
703 statement o1, o2 = coerce(o1, o2).
Guido van Rossuma8275371995-07-18 14:07:00 +0000704 */
705
Guido van Rossum38fff8c2006-03-07 18:50:55 +0000706 PyAPI_FUNC(Py_ssize_t) PyNumber_Index(PyObject *);
707
708 /*
709 Returns the object converted to Py_ssize_t on success
710 or -1 with an error raised on failure.
711 */
712
713
Mark Hammond91a681d2002-08-12 07:21:58 +0000714 PyAPI_FUNC(PyObject *) PyNumber_Int(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000715
716 /*
717 Returns the o converted to an integer object on success, or
718 NULL on failure. This is the equivalent of the Python
719 expression: int(o).
Guido van Rossuma8275371995-07-18 14:07:00 +0000720 */
721
Mark Hammond91a681d2002-08-12 07:21:58 +0000722 PyAPI_FUNC(PyObject *) PyNumber_Long(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000723
724 /*
725 Returns the o converted to a long integer object on success,
726 or NULL on failure. This is the equivalent of the Python
727 expression: long(o).
Guido van Rossuma8275371995-07-18 14:07:00 +0000728 */
729
Mark Hammond91a681d2002-08-12 07:21:58 +0000730 PyAPI_FUNC(PyObject *) PyNumber_Float(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000731
732 /*
733 Returns the o converted to a float object on success, or NULL
734 on failure. This is the equivalent of the Python expression:
735 float(o).
736 */
737
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000738/* In-place variants of (some of) the above number protocol functions */
739
Mark Hammond91a681d2002-08-12 07:21:58 +0000740 PyAPI_FUNC(PyObject *) PyNumber_InPlaceAdd(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000741
742 /*
743 Returns the result of adding o2 to o1, possibly in-place, or null
744 on failure. This is the equivalent of the Python expression:
745 o1 += o2.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000746 */
747
Mark Hammond91a681d2002-08-12 07:21:58 +0000748 PyAPI_FUNC(PyObject *) PyNumber_InPlaceSubtract(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000749
750 /*
751 Returns the result of subtracting o2 from o1, possibly in-place or
752 null on failure. This is the equivalent of the Python expression:
753 o1 -= o2.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000754 */
755
Mark Hammond91a681d2002-08-12 07:21:58 +0000756 PyAPI_FUNC(PyObject *) PyNumber_InPlaceMultiply(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000757
758 /*
759 Returns the result of multiplying o1 by o2, possibly in-place, or
760 null on failure. This is the equivalent of the Python expression:
761 o1 *= o2.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000762 */
763
Mark Hammond91a681d2002-08-12 07:21:58 +0000764 PyAPI_FUNC(PyObject *) PyNumber_InPlaceDivide(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000765
766 /*
767 Returns the result of dividing o1 by o2, possibly in-place, or null
768 on failure. This is the equivalent of the Python expression:
769 o1 /= o2.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000770 */
771
Mark Hammond91a681d2002-08-12 07:21:58 +0000772 PyAPI_FUNC(PyObject *) PyNumber_InPlaceFloorDivide(PyObject *o1,
Neal Norwitzfe554642006-03-17 06:58:45 +0000773 PyObject *o2);
Guido van Rossum4668b002001-08-08 05:00:18 +0000774
775 /*
776 Returns the result of dividing o1 by o2 giving an integral result,
777 possibly in-place, or null on failure.
778 This is the equivalent of the Python expression:
779 o1 /= o2.
Guido van Rossum4668b002001-08-08 05:00:18 +0000780 */
781
Mark Hammond91a681d2002-08-12 07:21:58 +0000782 PyAPI_FUNC(PyObject *) PyNumber_InPlaceTrueDivide(PyObject *o1,
Neal Norwitzfe554642006-03-17 06:58:45 +0000783 PyObject *o2);
Guido van Rossum4668b002001-08-08 05:00:18 +0000784
785 /*
786 Returns the result of dividing o1 by o2 giving a float result,
787 possibly in-place, or null on failure.
788 This is the equivalent of the Python expression:
789 o1 /= o2.
Guido van Rossum4668b002001-08-08 05:00:18 +0000790 */
791
Mark Hammond91a681d2002-08-12 07:21:58 +0000792 PyAPI_FUNC(PyObject *) PyNumber_InPlaceRemainder(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000793
794 /*
795 Returns the remainder of dividing o1 by o2, possibly in-place, or
796 null on failure. This is the equivalent of the Python expression:
797 o1 %= o2.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000798 */
799
Mark Hammond91a681d2002-08-12 07:21:58 +0000800 PyAPI_FUNC(PyObject *) PyNumber_InPlacePower(PyObject *o1, PyObject *o2,
Neal Norwitzfe554642006-03-17 06:58:45 +0000801 PyObject *o3);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000802
803 /*
804 Returns the result of raising o1 to the power of o2, possibly
805 in-place, or null on failure. This is the equivalent of the Python
806 expression: o1 **= o2, or pow(o1, o2, o3) if o3 is present.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000807 */
808
Mark Hammond91a681d2002-08-12 07:21:58 +0000809 PyAPI_FUNC(PyObject *) PyNumber_InPlaceLshift(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000810
811 /*
812 Returns the result of left shifting o1 by o2, possibly in-place, or
813 null on failure. This is the equivalent of the Python expression:
814 o1 <<= o2.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000815 */
816
Mark Hammond91a681d2002-08-12 07:21:58 +0000817 PyAPI_FUNC(PyObject *) PyNumber_InPlaceRshift(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000818
819 /*
820 Returns the result of right shifting o1 by o2, possibly in-place or
821 null on failure. This is the equivalent of the Python expression:
822 o1 >>= o2.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000823 */
824
Mark Hammond91a681d2002-08-12 07:21:58 +0000825 PyAPI_FUNC(PyObject *) PyNumber_InPlaceAnd(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000826
827 /*
828 Returns the result of bitwise and of o1 and o2, possibly in-place,
829 or null on failure. This is the equivalent of the Python
830 expression: o1 &= o2.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000831 */
832
Mark Hammond91a681d2002-08-12 07:21:58 +0000833 PyAPI_FUNC(PyObject *) PyNumber_InPlaceXor(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000834
835 /*
836 Returns the bitwise exclusive or of o1 by o2, possibly in-place, or
837 null on failure. This is the equivalent of the Python expression:
838 o1 ^= o2.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000839 */
840
Mark Hammond91a681d2002-08-12 07:21:58 +0000841 PyAPI_FUNC(PyObject *) PyNumber_InPlaceOr(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000842
843 /*
Walter Dörwaldf0dfc7a2003-10-20 14:01:56 +0000844 Returns the result of bitwise or of o1 and o2, possibly in-place,
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000845 or null on failure. This is the equivalent of the Python
846 expression: o1 |= o2.
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000847 */
848
Guido van Rossuma8275371995-07-18 14:07:00 +0000849
850/* Sequence protocol:*/
851
Mark Hammond91a681d2002-08-12 07:21:58 +0000852 PyAPI_FUNC(int) PySequence_Check(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000853
854 /*
855 Return 1 if the object provides sequence protocol, and zero
856 otherwise.
857
858 This function always succeeds.
Guido van Rossuma8275371995-07-18 14:07:00 +0000859 */
860
Martin v. Löwis18e16552006-02-15 17:27:45 +0000861 PyAPI_FUNC(Py_ssize_t) PySequence_Size(PyObject *o);
Jeremy Hylton6253f832000-07-12 12:56:19 +0000862
Guido van Rossum4f4ce681996-07-21 02:22:56 +0000863 /*
Jeremy Hylton6253f832000-07-12 12:56:19 +0000864 Return the size of sequence object o, or -1 on failure.
Guido van Rossum4f4ce681996-07-21 02:22:56 +0000865 */
866
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +0000867 /* For DLL compatibility */
868#undef PySequence_Length
Martin v. Löwis18e16552006-02-15 17:27:45 +0000869 PyAPI_FUNC(Py_ssize_t) PySequence_Length(PyObject *o);
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +0000870#define PySequence_Length PySequence_Size
871
872
Mark Hammond91a681d2002-08-12 07:21:58 +0000873 PyAPI_FUNC(PyObject *) PySequence_Concat(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000874
875 /*
Thomas Wouters7e474022000-07-16 12:04:32 +0000876 Return the concatenation of o1 and o2 on success, and NULL on
Guido van Rossuma8275371995-07-18 14:07:00 +0000877 failure. This is the equivalent of the Python
878 expression: o1+o2.
Guido van Rossuma8275371995-07-18 14:07:00 +0000879 */
880
Martin v. Löwis18e16552006-02-15 17:27:45 +0000881 PyAPI_FUNC(PyObject *) PySequence_Repeat(PyObject *o, Py_ssize_t count);
Guido van Rossuma8275371995-07-18 14:07:00 +0000882
883 /*
884 Return the result of repeating sequence object o count times,
885 or NULL on failure. This is the equivalent of the Python
886 expression: o1*count.
Guido van Rossuma8275371995-07-18 14:07:00 +0000887 */
888
Martin v. Löwis18e16552006-02-15 17:27:45 +0000889 PyAPI_FUNC(PyObject *) PySequence_GetItem(PyObject *o, Py_ssize_t i);
Guido van Rossuma8275371995-07-18 14:07:00 +0000890
891 /*
892 Return the ith element of o, or NULL on failure. This is the
893 equivalent of the Python expression: o[i].
Guido van Rossuma8275371995-07-18 14:07:00 +0000894 */
895
Martin v. Löwis18e16552006-02-15 17:27:45 +0000896 PyAPI_FUNC(PyObject *) PySequence_GetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000897
898 /*
899 Return the slice of sequence object o between i1 and i2, or
900 NULL on failure. This is the equivalent of the Python
901 expression: o[i1:i2].
Guido van Rossuma8275371995-07-18 14:07:00 +0000902 */
903
Martin v. Löwis18e16552006-02-15 17:27:45 +0000904 PyAPI_FUNC(int) PySequence_SetItem(PyObject *o, Py_ssize_t i, PyObject *v);
Guido van Rossuma8275371995-07-18 14:07:00 +0000905
906 /*
907 Assign object v to the ith element of o. Returns
908 -1 on failure. This is the equivalent of the Python
909 statement: o[i]=v.
Guido van Rossuma8275371995-07-18 14:07:00 +0000910 */
911
Martin v. Löwis18e16552006-02-15 17:27:45 +0000912 PyAPI_FUNC(int) PySequence_DelItem(PyObject *o, Py_ssize_t i);
Guido van Rossum6cdc6f41996-08-21 17:41:54 +0000913
914 /*
915 Delete the ith element of object v. Returns
916 -1 on failure. This is the equivalent of the Python
917 statement: del o[i].
918 */
919
Martin v. Löwis18e16552006-02-15 17:27:45 +0000920 PyAPI_FUNC(int) PySequence_SetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2,
Neal Norwitzfe554642006-03-17 06:58:45 +0000921 PyObject *v);
Guido van Rossuma8275371995-07-18 14:07:00 +0000922
923 /*
924 Assign the sequence object, v, to the slice in sequence
925 object, o, from i1 to i2. Returns -1 on failure. This is the
926 equivalent of the Python statement: o[i1:i2]=v.
927 */
928
Martin v. Löwis18e16552006-02-15 17:27:45 +0000929 PyAPI_FUNC(int) PySequence_DelSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2);
Guido van Rossum6cdc6f41996-08-21 17:41:54 +0000930
931 /*
932 Delete the slice in sequence object, o, from i1 to i2.
933 Returns -1 on failure. This is the equivalent of the Python
934 statement: del o[i1:i2].
935 */
936
Mark Hammond91a681d2002-08-12 07:21:58 +0000937 PyAPI_FUNC(PyObject *) PySequence_Tuple(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000938
939 /*
Guido van Rossumf39fc431997-03-04 18:31:47 +0000940 Returns the sequence, o, as a tuple on success, and NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000941 This is equivalent to the Python expression: tuple(o)
942 */
943
Andrew M. Kuchling74042d62000-06-18 18:43:14 +0000944
Mark Hammond91a681d2002-08-12 07:21:58 +0000945 PyAPI_FUNC(PyObject *) PySequence_List(PyObject *o);
Guido van Rossum2adf06b1996-12-05 21:48:50 +0000946 /*
Guido van Rossumf39fc431997-03-04 18:31:47 +0000947 Returns the sequence, o, as a list on success, and NULL on failure.
948 This is equivalent to the Python expression: list(o)
Guido van Rossum2adf06b1996-12-05 21:48:50 +0000949 */
Guido van Rossumf39fc431997-03-04 18:31:47 +0000950
Mark Hammond91a681d2002-08-12 07:21:58 +0000951 PyAPI_FUNC(PyObject *) PySequence_Fast(PyObject *o, const char* m);
Andrew M. Kuchling74042d62000-06-18 18:43:14 +0000952 /*
953 Returns the sequence, o, as a tuple, unless it's already a
954 tuple or list. Use PySequence_Fast_GET_ITEM to access the
Tim Peters1fc240e2001-10-26 05:06:50 +0000955 members of this list, and PySequence_Fast_GET_SIZE to get its length.
Andrew M. Kuchling74042d62000-06-18 18:43:14 +0000956
Tim Peters6912d4d2001-05-05 03:56:37 +0000957 Returns NULL on failure. If the object does not support iteration,
Andrew M. Kuchling74042d62000-06-18 18:43:14 +0000958 raises a TypeError exception with m as the message text.
959 */
960
Tim Peters1fc240e2001-10-26 05:06:50 +0000961#define PySequence_Fast_GET_SIZE(o) \
962 (PyList_Check(o) ? PyList_GET_SIZE(o) : PyTuple_GET_SIZE(o))
963 /*
964 Return the size of o, assuming that o was returned by
965 PySequence_Fast and is not NULL.
966 */
967
Andrew M. Kuchling74042d62000-06-18 18:43:14 +0000968#define PySequence_Fast_GET_ITEM(o, i)\
969 (PyList_Check(o) ? PyList_GET_ITEM(o, i) : PyTuple_GET_ITEM(o, i))
Andrew M. Kuchling74042d62000-06-18 18:43:14 +0000970 /*
971 Return the ith element of o, assuming that o was returned by
972 PySequence_Fast, and that i is within bounds.
973 */
974
Martin v. Löwis01f94bd2002-05-08 08:44:21 +0000975#define PySequence_ITEM(o, i)\
976 ( o->ob_type->tp_as_sequence->sq_item(o, i) )
977 /* Assume tp_as_sequence and sq_item exist and that i does not
978 need to be corrected for a negative index
979 */
980
Raymond Hettinger42bec932004-03-12 16:38:17 +0000981#define PySequence_Fast_ITEMS(sf) \
Raymond Hettingerc1e4f9d2004-03-12 08:04:00 +0000982 (PyList_Check(sf) ? ((PyListObject *)(sf))->ob_item \
983 : ((PyTupleObject *)(sf))->ob_item)
984 /* Return a pointer to the underlying item array for
985 an object retured by PySequence_Fast */
986
Neal Norwitz1fc4b772006-03-04 18:49:58 +0000987 PyAPI_FUNC(Py_ssize_t) PySequence_Count(PyObject *o, PyObject *value);
Guido van Rossuma8275371995-07-18 14:07:00 +0000988
989 /*
990 Return the number of occurrences on value on o, that is,
991 return the number of keys for which o[key]==value. On
992 failure, return -1. This is equivalent to the Python
993 expression: o.count(value).
994 */
995
Mark Hammond91a681d2002-08-12 07:21:58 +0000996 PyAPI_FUNC(int) PySequence_Contains(PyObject *seq, PyObject *ob);
Tim Peterscb8d3682001-05-05 21:05:01 +0000997 /*
998 Return -1 if error; 1 if ob in seq; 0 if ob not in seq.
Tim Peters16a77ad2001-09-08 04:00:12 +0000999 Use __contains__ if possible, else _PySequence_IterSearch().
Tim Peterscb8d3682001-05-05 21:05:01 +00001000 */
1001
Tim Peters16a77ad2001-09-08 04:00:12 +00001002#define PY_ITERSEARCH_COUNT 1
1003#define PY_ITERSEARCH_INDEX 2
1004#define PY_ITERSEARCH_CONTAINS 3
Neal Norwitz1fc4b772006-03-04 18:49:58 +00001005 PyAPI_FUNC(Py_ssize_t) _PySequence_IterSearch(PyObject *seq,
1006 PyObject *obj, int operation);
Tim Peters16a77ad2001-09-08 04:00:12 +00001007 /*
1008 Iterate over seq. Result depends on the operation:
1009 PY_ITERSEARCH_COUNT: return # of times obj appears in seq; -1 if
1010 error.
Raymond Hettingera72e2f92003-02-28 05:11:03 +00001011 PY_ITERSEARCH_INDEX: return 0-based index of first occurrence of
Tim Peters16a77ad2001-09-08 04:00:12 +00001012 obj in seq; set ValueError and return -1 if none found;
1013 also return -1 on error.
1014 PY_ITERSEARCH_CONTAINS: return 1 if obj in seq, else 0; -1 on
1015 error.
1016 */
Guido van Rossum83684531999-03-17 18:44:39 +00001017
1018/* For DLL-level backwards compatibility */
1019#undef PySequence_In
Mark Hammond91a681d2002-08-12 07:21:58 +00001020 PyAPI_FUNC(int) PySequence_In(PyObject *o, PyObject *value);
Guido van Rossum83684531999-03-17 18:44:39 +00001021
1022/* For source-level backwards compatibility */
Guido van Rossumf1536db1998-08-23 22:06:59 +00001023#define PySequence_In PySequence_Contains
Guido van Rossuma8275371995-07-18 14:07:00 +00001024
1025 /*
1026 Determine if o contains value. If an item in o is equal to
1027 X, return 1, otherwise return 0. On error, return -1. This
1028 is equivalent to the Python expression: value in o.
1029 */
1030
Neal Norwitz1fc4b772006-03-04 18:49:58 +00001031 PyAPI_FUNC(Py_ssize_t) PySequence_Index(PyObject *o, PyObject *value);
Guido van Rossuma8275371995-07-18 14:07:00 +00001032
1033 /*
1034 Return the first index for which o[i]=value. On error,
1035 return -1. This is equivalent to the Python
1036 expression: o.index(value).
1037 */
1038
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +00001039/* In-place versions of some of the above Sequence functions. */
1040
Mark Hammond91a681d2002-08-12 07:21:58 +00001041 PyAPI_FUNC(PyObject *) PySequence_InPlaceConcat(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +00001042
1043 /*
1044 Append o2 to o1, in-place when possible. Return the resulting
1045 object, which could be o1, or NULL on failure. This is the
1046 equivalent of the Python expression: o1 += o2.
1047
1048 */
1049
Martin v. Löwis18e16552006-02-15 17:27:45 +00001050 PyAPI_FUNC(PyObject *) PySequence_InPlaceRepeat(PyObject *o, Py_ssize_t count);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +00001051
1052 /*
1053 Repeat o1 by count, in-place when possible. Return the resulting
1054 object, which could be o1, or NULL on failure. This is the
1055 equivalent of the Python expression: o1 *= count.
1056
1057 */
1058
Guido van Rossuma8275371995-07-18 14:07:00 +00001059/* Mapping protocol:*/
1060
Mark Hammond91a681d2002-08-12 07:21:58 +00001061 PyAPI_FUNC(int) PyMapping_Check(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +00001062
1063 /*
1064 Return 1 if the object provides mapping protocol, and zero
1065 otherwise.
1066
1067 This function always succeeds.
1068 */
1069
Martin v. Löwis18e16552006-02-15 17:27:45 +00001070 PyAPI_FUNC(Py_ssize_t) PyMapping_Size(PyObject *o);
Jeremy Hylton6253f832000-07-12 12:56:19 +00001071
Guido van Rossuma8275371995-07-18 14:07:00 +00001072 /*
1073 Returns the number of keys in object o on success, and -1 on
1074 failure. For objects that do not provide sequence protocol,
1075 this is equivalent to the Python expression: len(o).
1076 */
1077
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +00001078 /* For DLL compatibility */
1079#undef PyMapping_Length
Martin v. Löwis18e16552006-02-15 17:27:45 +00001080 PyAPI_FUNC(Py_ssize_t) PyMapping_Length(PyObject *o);
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +00001081#define PyMapping_Length PyMapping_Size
1082
1083
Guido van Rossuma25e5e91996-09-06 13:48:38 +00001084 /* implemented as a macro:
1085
Fred Drakeea9cb5a2000-07-09 00:20:36 +00001086 int PyMapping_DelItemString(PyObject *o, char *key);
Guido van Rossuma8275371995-07-18 14:07:00 +00001087
Guido van Rossuma8275371995-07-18 14:07:00 +00001088 Remove the mapping for object, key, from the object *o.
1089 Returns -1 on failure. This is equivalent to
1090 the Python statement: del o[key].
1091 */
Jeremy Hylton7c7ee5f2001-11-28 16:20:07 +00001092#define PyMapping_DelItemString(O,K) PyObject_DelItemString((O),(K))
Guido van Rossuma25e5e91996-09-06 13:48:38 +00001093
1094 /* implemented as a macro:
Guido van Rossuma8275371995-07-18 14:07:00 +00001095
Fred Drakeea9cb5a2000-07-09 00:20:36 +00001096 int PyMapping_DelItem(PyObject *o, PyObject *key);
Guido van Rossuma8275371995-07-18 14:07:00 +00001097
Guido van Rossuma8275371995-07-18 14:07:00 +00001098 Remove the mapping for object, key, from the object *o.
1099 Returns -1 on failure. This is equivalent to
1100 the Python statement: del o[key].
1101 */
Jeremy Hylton7c7ee5f2001-11-28 16:20:07 +00001102#define PyMapping_DelItem(O,K) PyObject_DelItem((O),(K))
Guido van Rossuma8275371995-07-18 14:07:00 +00001103
Mark Hammond91a681d2002-08-12 07:21:58 +00001104 PyAPI_FUNC(int) PyMapping_HasKeyString(PyObject *o, char *key);
Guido van Rossuma8275371995-07-18 14:07:00 +00001105
1106 /*
1107 On success, return 1 if the mapping object has the key, key,
1108 and 0 otherwise. This is equivalent to the Python expression:
1109 o.has_key(key).
1110
1111 This function always succeeds.
1112 */
1113
Mark Hammond91a681d2002-08-12 07:21:58 +00001114 PyAPI_FUNC(int) PyMapping_HasKey(PyObject *o, PyObject *key);
Guido van Rossuma8275371995-07-18 14:07:00 +00001115
1116 /*
1117 Return 1 if the mapping object has the key, key,
1118 and 0 otherwise. This is equivalent to the Python expression:
1119 o.has_key(key).
1120
1121 This function always succeeds.
1122
1123 */
1124
1125 /* Implemented as macro:
1126
1127 PyObject *PyMapping_Keys(PyObject *o);
1128
1129 On success, return a list of the keys in object o. On
1130 failure, return NULL. This is equivalent to the Python
1131 expression: o.keys().
1132 */
1133#define PyMapping_Keys(O) PyObject_CallMethod(O,"keys",NULL)
1134
1135 /* Implemented as macro:
1136
1137 PyObject *PyMapping_Values(PyObject *o);
1138
1139 On success, return a list of the values in object o. On
1140 failure, return NULL. This is equivalent to the Python
1141 expression: o.values().
1142 */
1143#define PyMapping_Values(O) PyObject_CallMethod(O,"values",NULL)
1144
1145 /* Implemented as macro:
1146
1147 PyObject *PyMapping_Items(PyObject *o);
1148
1149 On success, return a list of the items in object o, where
1150 each item is a tuple containing a key-value pair. On
1151 failure, return NULL. This is equivalent to the Python
1152 expression: o.items().
1153
1154 */
1155#define PyMapping_Items(O) PyObject_CallMethod(O,"items",NULL)
1156
Mark Hammond91a681d2002-08-12 07:21:58 +00001157 PyAPI_FUNC(PyObject *) PyMapping_GetItemString(PyObject *o, char *key);
Guido van Rossuma8275371995-07-18 14:07:00 +00001158
1159 /*
1160 Return element of o corresponding to the object, key, or NULL
1161 on failure. This is the equivalent of the Python expression:
1162 o[key].
1163 */
1164
Mark Hammond91a681d2002-08-12 07:21:58 +00001165 PyAPI_FUNC(int) PyMapping_SetItemString(PyObject *o, char *key,
Fred Drakeea9cb5a2000-07-09 00:20:36 +00001166 PyObject *value);
Guido van Rossuma8275371995-07-18 14:07:00 +00001167
1168 /*
1169 Map the object, key, to the value, v. Returns
1170 -1 on failure. This is the equivalent of the Python
1171 statement: o[key]=v.
1172 */
1173
1174
Mark Hammond91a681d2002-08-12 07:21:58 +00001175PyAPI_FUNC(int) PyObject_IsInstance(PyObject *object, PyObject *typeorclass);
Guido van Rossum823649d2001-03-21 18:40:58 +00001176 /* isinstance(object, typeorclass) */
1177
Mark Hammond91a681d2002-08-12 07:21:58 +00001178PyAPI_FUNC(int) PyObject_IsSubclass(PyObject *object, PyObject *typeorclass);
Guido van Rossum823649d2001-03-21 18:40:58 +00001179 /* issubclass(object, typeorclass) */
1180
1181
Guido van Rossum8ca687a1995-09-18 21:20:02 +00001182#ifdef __cplusplus
1183}
1184#endif
Guido van Rossuma8275371995-07-18 14:07:00 +00001185#endif /* Py_ABSTRACTOBJECT_H */