blob: b7fde09d528b5b959ff113caee4e6a5d83bfa5f3 [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
Martin v. Löwis5cb69362006-04-14 09:08:42 +00007#ifdef PY_SSIZE_T_CLEAN
8#define PyObject_CallFunction _PyObject_CallFunction_SizeT
9#define PyObject_CallMethod _PyObject_CallMethod_SizeT
10#endif
11
Guido van Rossuma8275371995-07-18 14:07:00 +000012/* Abstract Object Interface (many thanks to Jim Fulton) */
13
14/*
15 PROPOSAL: A Generic Python Object Interface for Python C Modules
16
17Problem
18
19 Python modules written in C that must access Python objects must do
20 so through routines whose interfaces are described by a set of
21 include files. Unfortunately, these routines vary according to the
22 object accessed. To use these routines, the C programmer must check
23 the type of the object being used and must call a routine based on
24 the object type. For example, to access an element of a sequence,
25 the programmer must determine whether the sequence is a list or a
26 tuple:
27
28 if(is_tupleobject(o))
29 e=gettupleitem(o,i)
30 else if(is_listitem(o))
31 e=getlistitem(o,i)
32
33 If the programmer wants to get an item from another type of object
34 that provides sequence behavior, there is no clear way to do it
35 correctly.
36
37 The persistent programmer may peruse object.h and find that the
38 _typeobject structure provides a means of invoking up to (currently
39 about) 41 special operators. So, for example, a routine can get an
40 item from any object that provides sequence behavior. However, to
41 use this mechanism, the programmer must make their code dependent on
42 the current Python implementation.
43
44 Also, certain semantics, especially memory management semantics, may
45 differ by the type of object being used. Unfortunately, these
46 semantics are not clearly described in the current include files.
47 An abstract interface providing more consistent semantics is needed.
48
49Proposal
50
51 I propose the creation of a standard interface (with an associated
52 library of routines and/or macros) for generically obtaining the
53 services of Python objects. This proposal can be viewed as one
54 components of a Python C interface consisting of several components.
55
Raymond Hettingera72e2f92003-02-28 05:11:03 +000056 From the viewpoint of C access to Python services, we have (as
Guido van Rossuma8275371995-07-18 14:07:00 +000057 suggested by Guido in off-line discussions):
58
59 - "Very high level layer": two or three functions that let you exec or
60 eval arbitrary Python code given as a string in a module whose name is
61 given, passing C values in and getting C values out using
62 mkvalue/getargs style format strings. This does not require the user
63 to declare any variables of type "PyObject *". This should be enough
64 to write a simple application that gets Python code from the user,
65 execs it, and returns the output or errors. (Error handling must also
66 be part of this API.)
67
68 - "Abstract objects layer": which is the subject of this proposal.
69 It has many functions operating on objects, and lest you do many
70 things from C that you can also write in Python, without going
71 through the Python parser.
72
73 - "Concrete objects layer": This is the public type-dependent
74 interface provided by the standard built-in types, such as floats,
75 strings, and lists. This interface exists and is currently
Raymond Hettingera72e2f92003-02-28 05:11:03 +000076 documented by the collection of include files provided with the
Guido van Rossuma8275371995-07-18 14:07:00 +000077 Python distributions.
78
79 From the point of view of Python accessing services provided by C
80 modules:
81
82 - "Python module interface": this interface consist of the basic
83 routines used to define modules and their members. Most of the
84 current extensions-writing guide deals with this interface.
85
86 - "Built-in object interface": this is the interface that a new
87 built-in type must provide and the mechanisms and rules that a
88 developer of a new built-in type must use and follow.
89
90 This proposal is a "first-cut" that is intended to spur
91 discussion. See especially the lists of notes.
92
93 The Python C object interface will provide four protocols: object,
94 numeric, sequence, and mapping. Each protocol consists of a
95 collection of related operations. If an operation that is not
96 provided by a particular type is invoked, then a standard exception,
97 NotImplementedError is raised with a operation name as an argument.
98 In addition, for convenience this interface defines a set of
99 constructors for building objects of built-in types. This is needed
100 so new objects can be returned from C functions that otherwise treat
101 objects generically.
102
103Memory Management
104
105 For all of the functions described in this proposal, if a function
106 retains a reference to a Python object passed as an argument, then the
107 function will increase the reference count of the object. It is
108 unnecessary for the caller to increase the reference count of an
109 argument in anticipation of the object's retention.
110
111 All Python objects returned from functions should be treated as new
112 objects. Functions that return objects assume that the caller will
113 retain a reference and the reference count of the object has already
114 been incremented to account for this fact. A caller that does not
115 retain a reference to an object that is returned from a function
116 must decrement the reference count of the object (using
117 DECREF(object)) to prevent memory leaks.
118
119 Note that the behavior mentioned here is different from the current
120 behavior for some objects (e.g. lists and tuples) when certain
121 type-specific routines are called directly (e.g. setlistitem). The
122 proposed abstraction layer will provide a consistent memory
123 management interface, correcting for inconsistent behavior for some
124 built-in types.
125
126Protocols
127
128xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/
129
130/* Object Protocol: */
131
132 /* Implemented elsewhere:
133
134 int PyObject_Print(PyObject *o, FILE *fp, int flags);
135
136 Print an object, o, on file, fp. Returns -1 on
137 error. The flags argument is used to enable certain printing
138 options. The only option currently supported is Py_Print_RAW.
139
140 (What should be said about Py_Print_RAW?)
141
142 */
143
144 /* Implemented elsewhere:
145
146 int PyObject_HasAttrString(PyObject *o, char *attr_name);
147
148 Returns 1 if o has the attribute attr_name, and 0 otherwise.
149 This is equivalent to the Python expression:
150 hasattr(o,attr_name).
151
152 This function always succeeds.
153
154 */
155
156 /* Implemented elsewhere:
157
158 PyObject* PyObject_GetAttrString(PyObject *o, char *attr_name);
159
160 Retrieve an attributed named attr_name form object o.
161 Returns the attribute value on success, or NULL on failure.
162 This is the equivalent of the Python expression: o.attr_name.
163
164 */
165
166 /* Implemented elsewhere:
167
168 int PyObject_HasAttr(PyObject *o, PyObject *attr_name);
169
170 Returns 1 if o has the attribute attr_name, and 0 otherwise.
171 This is equivalent to the Python expression:
172 hasattr(o,attr_name).
173
174 This function always succeeds.
175
176 */
177
178 /* Implemented elsewhere:
179
180 PyObject* PyObject_GetAttr(PyObject *o, PyObject *attr_name);
181
182 Retrieve an attributed named attr_name form object o.
183 Returns the attribute value on success, or NULL on failure.
184 This is the equivalent of the Python expression: o.attr_name.
185
186 */
187
188
189 /* Implemented elsewhere:
190
191 int PyObject_SetAttrString(PyObject *o, char *attr_name, PyObject *v);
192
193 Set the value of the attribute named attr_name, for object o,
194 to the value, v. Returns -1 on failure. This is
195 the equivalent of the Python statement: o.attr_name=v.
196
197 */
198
199 /* Implemented elsewhere:
200
201 int PyObject_SetAttr(PyObject *o, PyObject *attr_name, PyObject *v);
202
203 Set the value of the attribute named attr_name, for object o,
204 to the value, v. Returns -1 on failure. This is
205 the equivalent of the Python statement: o.attr_name=v.
206
207 */
208
209 /* implemented as a macro:
210
211 int PyObject_DelAttrString(PyObject *o, char *attr_name);
212
213 Delete attribute named attr_name, for object o. Returns
214 -1 on failure. This is the equivalent of the Python
215 statement: del o.attr_name.
216
217 */
218#define PyObject_DelAttrString(O,A) PyObject_SetAttrString((O),(A),NULL)
219
220 /* implemented as a macro:
221
222 int PyObject_DelAttr(PyObject *o, PyObject *attr_name);
223
224 Delete attribute named attr_name, for object o. Returns -1
225 on failure. This is the equivalent of the Python
226 statement: del o.attr_name.
227
228 */
229#define PyObject_DelAttr(O,A) PyObject_SetAttr((O),(A),NULL)
230
Mark Hammond91a681d2002-08-12 07:21:58 +0000231 PyAPI_FUNC(int) PyObject_Cmp(PyObject *o1, PyObject *o2, int *result);
Guido van Rossuma8275371995-07-18 14:07:00 +0000232
233 /*
234 Compare the values of o1 and o2 using a routine provided by
235 o1, if one exists, otherwise with a routine provided by o2.
236 The result of the comparison is returned in result. Returns
237 -1 on failure. This is the equivalent of the Python
238 statement: result=cmp(o1,o2).
239
240 */
241
242 /* Implemented elsewhere:
243
244 int PyObject_Compare(PyObject *o1, PyObject *o2);
245
246 Compare the values of o1 and o2 using a routine provided by
247 o1, if one exists, otherwise with a routine provided by o2.
248 Returns the result of the comparison on success. On error,
249 the value returned is undefined. This is equivalent to the
250 Python expression: cmp(o1,o2).
251
252 */
253
254 /* Implemented elsewhere:
255
256 PyObject *PyObject_Repr(PyObject *o);
257
258 Compute the string representation of object, o. Returns the
259 string representation on success, NULL on failure. This is
260 the equivalent of the Python expression: repr(o).
261
262 Called by the repr() built-in function and by reverse quotes.
263
264 */
265
266 /* Implemented elsewhere:
267
268 PyObject *PyObject_Str(PyObject *o);
269
270 Compute the string representation of object, o. Returns the
271 string representation on success, NULL on failure. This is
272 the equivalent of the Python expression: str(o).)
273
274 Called by the str() built-in function and by the print
275 statement.
276
277 */
278
Marc-André Lemburgad7c98e2001-01-17 17:09:53 +0000279 /* Implemented elsewhere:
280
281 PyObject *PyObject_Unicode(PyObject *o);
282
283 Compute the unicode representation of object, o. Returns the
284 unicode representation on success, NULL on failure. This is
285 the equivalent of the Python expression: unistr(o).)
286
287 Called by the unistr() built-in function.
288
289 */
290
Martin v. Löwis98f0d142006-10-22 10:46:18 +0000291 /* Declared elsewhere
292
Mark Hammond91a681d2002-08-12 07:21:58 +0000293 PyAPI_FUNC(int) PyCallable_Check(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000294
Guido van Rossuma8275371995-07-18 14:07:00 +0000295 Determine if the object, o, is callable. Return 1 if the
296 object is callable and 0 otherwise.
297
298 This function always succeeds.
299
300 */
301
302
Tim Peters6d6c1a32001-08-02 04:15:00 +0000303
Mark Hammond91a681d2002-08-12 07:21:58 +0000304 PyAPI_FUNC(PyObject *) PyObject_Call(PyObject *callable_object,
Tim Peters6d6c1a32001-08-02 04:15:00 +0000305 PyObject *args, PyObject *kw);
306
307 /*
Tim Peters6d6c1a32001-08-02 04:15:00 +0000308 Call a callable Python object, callable_object, with
309 arguments and keywords arguments. The 'args' argument can not be
310 NULL, but the 'kw' argument can be NULL.
311
312 */
Guido van Rossuma8275371995-07-18 14:07:00 +0000313
Mark Hammond91a681d2002-08-12 07:21:58 +0000314 PyAPI_FUNC(PyObject *) PyObject_CallObject(PyObject *callable_object,
Fred Drakeea9cb5a2000-07-09 00:20:36 +0000315 PyObject *args);
Guido van Rossuma8275371995-07-18 14:07:00 +0000316
317 /*
Guido van Rossuma8275371995-07-18 14:07:00 +0000318 Call a callable Python object, callable_object, with
319 arguments given by the tuple, args. If no arguments are
320 needed, then args may be NULL. Returns the result of the
321 call on success, or NULL on failure. This is the equivalent
322 of the Python expression: apply(o,args).
323
324 */
325
Mark Hammond91a681d2002-08-12 07:21:58 +0000326 PyAPI_FUNC(PyObject *) PyObject_CallFunction(PyObject *callable_object,
Fred Drakeea9cb5a2000-07-09 00:20:36 +0000327 char *format, ...);
Guido van Rossuma8275371995-07-18 14:07:00 +0000328
329 /*
330 Call a callable Python object, callable_object, with a
331 variable number of C arguments. The C arguments are described
332 using a mkvalue-style format string. The format may be NULL,
333 indicating that no arguments are provided. Returns the
334 result of the call on success, or NULL on failure. This is
335 the equivalent of the Python expression: apply(o,args).
336
337 */
338
339
Mark Hammond91a681d2002-08-12 07:21:58 +0000340 PyAPI_FUNC(PyObject *) PyObject_CallMethod(PyObject *o, char *m,
Fred Drakeea9cb5a2000-07-09 00:20:36 +0000341 char *format, ...);
Guido van Rossuma8275371995-07-18 14:07:00 +0000342
343 /*
344 Call the method named m of object o with a variable number of
345 C arguments. The C arguments are described by a mkvalue
346 format string. The format may be NULL, indicating that no
347 arguments are provided. Returns the result of the call on
348 success, or NULL on failure. This is the equivalent of the
349 Python expression: o.method(args).
Fred Drakeb421b8c2001-10-26 16:21:32 +0000350 */
Guido van Rossuma8275371995-07-18 14:07:00 +0000351
Skip Montanaro54e964d2006-04-18 00:27:46 +0000352 PyAPI_FUNC(PyObject *) _PyObject_CallFunction_SizeT(PyObject *callable,
353 char *format, ...);
354 PyAPI_FUNC(PyObject *) _PyObject_CallMethod_SizeT(PyObject *o,
355 char *name,
356 char *format, ...);
Guido van Rossuma8275371995-07-18 14:07:00 +0000357
Mark Hammond91a681d2002-08-12 07:21:58 +0000358 PyAPI_FUNC(PyObject *) PyObject_CallFunctionObjArgs(PyObject *callable,
Fred Drakeb0c079e2001-10-28 02:39:03 +0000359 ...);
Fred Drakeb421b8c2001-10-26 16:21:32 +0000360
361 /*
362 Call a callable Python object, callable_object, with a
363 variable number of C arguments. The C arguments are provided
Fred Drakeb5662892003-05-12 21:41:39 +0000364 as PyObject * values, terminated by a NULL. Returns the
365 result of the call on success, or NULL on failure. This is
366 the equivalent of the Python expression: apply(o,args).
Fred Drakeb421b8c2001-10-26 16:21:32 +0000367 */
368
369
Mark Hammond91a681d2002-08-12 07:21:58 +0000370 PyAPI_FUNC(PyObject *) PyObject_CallMethodObjArgs(PyObject *o,
Fred Drakeb0c079e2001-10-28 02:39:03 +0000371 PyObject *m, ...);
Fred Drakeb421b8c2001-10-26 16:21:32 +0000372
373 /*
374 Call the method named m of object o with a variable number of
Fred Drakeb5662892003-05-12 21:41:39 +0000375 C arguments. The C arguments are provided as PyObject *
376 values, terminated by NULL. Returns the result of the call
377 on success, or NULL on failure. This is the equivalent of
378 the Python expression: o.method(args).
Guido van Rossuma8275371995-07-18 14:07:00 +0000379 */
380
381
382 /* Implemented elsewhere:
383
384 long PyObject_Hash(PyObject *o);
385
386 Compute and return the hash, hash_value, of an object, o. On
387 failure, return -1. This is the equivalent of the Python
388 expression: hash(o).
389
390 */
391
392
393 /* Implemented elsewhere:
394
395 int PyObject_IsTrue(PyObject *o);
396
Michael W. Hudson31316792002-11-25 15:06:29 +0000397 Returns 1 if the object, o, is considered to be true, 0 if o is
398 considered to be false and -1 on failure. This is equivalent to the
399 Python expression: not not o
Guido van Rossuma8275371995-07-18 14:07:00 +0000400
Guido van Rossuma8275371995-07-18 14:07:00 +0000401 */
402
Guido van Rossumc3d3f961998-04-09 17:53:59 +0000403 /* Implemented elsewhere:
404
405 int PyObject_Not(PyObject *o);
406
Michael W. Hudson31316792002-11-25 15:06:29 +0000407 Returns 0 if the object, o, is considered to be true, 1 if o is
408 considered to be false and -1 on failure. This is equivalent to the
409 Python expression: not o
Guido van Rossumc3d3f961998-04-09 17:53:59 +0000410
Guido van Rossumc3d3f961998-04-09 17:53:59 +0000411 */
412
Mark Hammond91a681d2002-08-12 07:21:58 +0000413 PyAPI_FUNC(PyObject *) PyObject_Type(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000414
415 /*
416 On success, returns a type object corresponding to the object
417 type of object o. On failure, returns NULL. This is
418 equivalent to the Python expression: type(o).
419 */
420
Martin v. Löwis18e16552006-02-15 17:27:45 +0000421 PyAPI_FUNC(Py_ssize_t) PyObject_Size(PyObject *o);
Jeremy Hylton6253f832000-07-12 12:56:19 +0000422
Guido van Rossuma8275371995-07-18 14:07:00 +0000423 /*
Jeremy Hylton6253f832000-07-12 12:56:19 +0000424 Return the size of object o. If the object, o, provides
425 both sequence and mapping protocols, the sequence size is
Guido van Rossuma8275371995-07-18 14:07:00 +0000426 returned. On error, -1 is returned. This is the equivalent
427 to the Python expression: len(o).
428
429 */
430
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +0000431 /* For DLL compatibility */
432#undef PyObject_Length
Martin v. Löwis18e16552006-02-15 17:27:45 +0000433 PyAPI_FUNC(Py_ssize_t) PyObject_Length(PyObject *o);
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +0000434#define PyObject_Length PyObject_Size
435
Raymond Hettinger4e2f7142007-12-06 00:56:53 +0000436 PyAPI_FUNC(Py_ssize_t) _PyObject_LengthHint(PyObject *o, Py_ssize_t);
Raymond Hettinger6b27cda2005-09-24 21:23:05 +0000437
438 /*
Raymond Hettinger4e2f7142007-12-06 00:56:53 +0000439 Guess the size of object o using len(o) or o.__length_hint__().
440 If neither of those return a non-negative value, then return the
441 default value. This function never fails. All exceptions are cleared.
Raymond Hettinger6b27cda2005-09-24 21:23:05 +0000442 */
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +0000443
Mark Hammond91a681d2002-08-12 07:21:58 +0000444 PyAPI_FUNC(PyObject *) PyObject_GetItem(PyObject *o, PyObject *key);
Guido van Rossuma8275371995-07-18 14:07:00 +0000445
446 /*
447 Return element of o corresponding to the object, key, or NULL
448 on failure. This is the equivalent of the Python expression:
449 o[key].
450
451 */
452
Mark Hammond91a681d2002-08-12 07:21:58 +0000453 PyAPI_FUNC(int) PyObject_SetItem(PyObject *o, PyObject *key, PyObject *v);
Guido van Rossuma8275371995-07-18 14:07:00 +0000454
455 /*
456 Map the object, key, to the value, v. Returns
457 -1 on failure. This is the equivalent of the Python
458 statement: o[key]=v.
459 */
460
Mark Hammond91a681d2002-08-12 07:21:58 +0000461 PyAPI_FUNC(int) PyObject_DelItemString(PyObject *o, char *key);
Martin v. Löwisb0d71d02002-01-05 10:50:30 +0000462
463 /*
464 Remove the mapping for object, key, from the object *o.
465 Returns -1 on failure. This is equivalent to
466 the Python statement: del o[key].
467 */
468
Mark Hammond91a681d2002-08-12 07:21:58 +0000469 PyAPI_FUNC(int) PyObject_DelItem(PyObject *o, PyObject *key);
Guido van Rossum6cdc6f41996-08-21 17:41:54 +0000470
471 /*
472 Delete the mapping for key from *o. Returns -1 on failure.
473 This is the equivalent of the Python statement: del o[key].
474 */
475
Mark Hammond91a681d2002-08-12 07:21:58 +0000476 PyAPI_FUNC(int) PyObject_AsCharBuffer(PyObject *obj,
Guido van Rossumfd9eed32000-03-10 22:35:06 +0000477 const char **buffer,
Martin v. Löwis18e16552006-02-15 17:27:45 +0000478 Py_ssize_t *buffer_len);
Guido van Rossumfd9eed32000-03-10 22:35:06 +0000479
480 /*
481 Takes an arbitrary object which must support the (character,
482 single segment) buffer interface and returns a pointer to a
483 read-only memory location useable as character based input
484 for subsequent processing.
485
486 0 is returned on success. buffer and buffer_len are only
Raymond Hettingera72e2f92003-02-28 05:11:03 +0000487 set in case no error occurs. Otherwise, -1 is returned and
Guido van Rossumfd9eed32000-03-10 22:35:06 +0000488 an exception set.
489
490 */
491
Mark Hammond91a681d2002-08-12 07:21:58 +0000492 PyAPI_FUNC(int) PyObject_CheckReadBuffer(PyObject *obj);
Jeremy Hylton89c3a222001-11-09 21:59:42 +0000493
494 /*
495 Checks whether an arbitrary object supports the (character,
496 single segment) buffer interface. Returns 1 on success, 0
497 on failure.
498
499 */
500
Mark Hammond91a681d2002-08-12 07:21:58 +0000501 PyAPI_FUNC(int) PyObject_AsReadBuffer(PyObject *obj,
Guido van Rossumfd9eed32000-03-10 22:35:06 +0000502 const void **buffer,
Martin v. Löwis18e16552006-02-15 17:27:45 +0000503 Py_ssize_t *buffer_len);
Guido van Rossumfd9eed32000-03-10 22:35:06 +0000504
505 /*
506 Same as PyObject_AsCharBuffer() except that this API expects
507 (readable, single segment) buffer interface and returns a
508 pointer to a read-only memory location which can contain
509 arbitrary data.
510
511 0 is returned on success. buffer and buffer_len are only
512 set in case no error occurrs. Otherwise, -1 is returned and
513 an exception set.
514
515 */
516
Mark Hammond91a681d2002-08-12 07:21:58 +0000517 PyAPI_FUNC(int) PyObject_AsWriteBuffer(PyObject *obj,
Guido van Rossumfd9eed32000-03-10 22:35:06 +0000518 void **buffer,
Martin v. Löwis18e16552006-02-15 17:27:45 +0000519 Py_ssize_t *buffer_len);
Guido van Rossumfd9eed32000-03-10 22:35:06 +0000520
521 /*
522 Takes an arbitrary object which must support the (writeable,
523 single segment) buffer interface and returns a pointer to a
524 writeable memory location in buffer of size buffer_len.
525
526 0 is returned on success. buffer and buffer_len are only
527 set in case no error occurrs. Otherwise, -1 is returned and
528 an exception set.
529
530 */
Guido van Rossuma8275371995-07-18 14:07:00 +0000531
Guido van Rossum213c7a62001-04-23 14:08:49 +0000532/* Iterators */
533
Mark Hammond91a681d2002-08-12 07:21:58 +0000534 PyAPI_FUNC(PyObject *) PyObject_GetIter(PyObject *);
Guido van Rossum59d1d2b2001-04-20 19:13:02 +0000535 /* Takes an object and returns an iterator for it.
536 This is typically a new iterator but if the argument
537 is an iterator, this returns itself. */
538
Guido van Rossum213c7a62001-04-23 14:08:49 +0000539#define PyIter_Check(obj) \
540 (PyType_HasFeature((obj)->ob_type, Py_TPFLAGS_HAVE_ITER) && \
541 (obj)->ob_type->tp_iternext != NULL)
542
Mark Hammond91a681d2002-08-12 07:21:58 +0000543 PyAPI_FUNC(PyObject *) PyIter_Next(PyObject *);
Guido van Rossum213c7a62001-04-23 14:08:49 +0000544 /* Takes an iterator object and calls its tp_iternext slot,
545 returning the next value. If the iterator is exhausted,
Tim Petersf4848da2001-05-05 00:14:56 +0000546 this returns NULL without setting an exception.
547 NULL with an exception means an error occurred. */
Guido van Rossum213c7a62001-04-23 14:08:49 +0000548
Guido van Rossuma8275371995-07-18 14:07:00 +0000549/* Number Protocol:*/
550
Mark Hammond91a681d2002-08-12 07:21:58 +0000551 PyAPI_FUNC(int) PyNumber_Check(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000552
553 /*
554 Returns 1 if the object, o, provides numeric protocols, and
555 false otherwise.
556
557 This function always succeeds.
558
559 */
560
Mark Hammond91a681d2002-08-12 07:21:58 +0000561 PyAPI_FUNC(PyObject *) PyNumber_Add(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000562
563 /*
564 Returns the result of adding o1 and o2, or null on failure.
565 This is the equivalent of the Python expression: o1+o2.
566
567
568 */
569
Mark Hammond91a681d2002-08-12 07:21:58 +0000570 PyAPI_FUNC(PyObject *) PyNumber_Subtract(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000571
572 /*
573 Returns the result of subtracting o2 from o1, or null on
574 failure. This is the equivalent of the Python expression:
575 o1-o2.
576
577 */
578
Mark Hammond91a681d2002-08-12 07:21:58 +0000579 PyAPI_FUNC(PyObject *) PyNumber_Multiply(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000580
581 /*
582 Returns the result of multiplying o1 and o2, or null on
583 failure. This is the equivalent of the Python expression:
584 o1*o2.
585
586
587 */
588
Mark Hammond91a681d2002-08-12 07:21:58 +0000589 PyAPI_FUNC(PyObject *) PyNumber_Divide(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000590
591 /*
592 Returns the result of dividing o1 by o2, or null on failure.
593 This is the equivalent of the Python expression: o1/o2.
594
595
596 */
597
Mark Hammond91a681d2002-08-12 07:21:58 +0000598 PyAPI_FUNC(PyObject *) PyNumber_FloorDivide(PyObject *o1, PyObject *o2);
Guido van Rossum4668b002001-08-08 05:00:18 +0000599
600 /*
601 Returns the result of dividing o1 by o2 giving an integral result,
602 or null on failure.
603 This is the equivalent of the Python expression: o1//o2.
604
605
606 */
607
Mark Hammond91a681d2002-08-12 07:21:58 +0000608 PyAPI_FUNC(PyObject *) PyNumber_TrueDivide(PyObject *o1, PyObject *o2);
Guido van Rossum4668b002001-08-08 05:00:18 +0000609
610 /*
611 Returns the result of dividing o1 by o2 giving a float result,
612 or null on failure.
613 This is the equivalent of the Python expression: o1/o2.
614
615
616 */
617
Mark Hammond91a681d2002-08-12 07:21:58 +0000618 PyAPI_FUNC(PyObject *) PyNumber_Remainder(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000619
620 /*
621 Returns the remainder of dividing o1 by o2, or null on
622 failure. This is the equivalent of the Python expression:
623 o1%o2.
624
625
626 */
627
Mark Hammond91a681d2002-08-12 07:21:58 +0000628 PyAPI_FUNC(PyObject *) PyNumber_Divmod(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000629
630 /*
631 See the built-in function divmod. Returns NULL on failure.
632 This is the equivalent of the Python expression:
633 divmod(o1,o2).
634
635
636 */
637
Mark Hammond91a681d2002-08-12 07:21:58 +0000638 PyAPI_FUNC(PyObject *) PyNumber_Power(PyObject *o1, PyObject *o2,
Fred Drakeea9cb5a2000-07-09 00:20:36 +0000639 PyObject *o3);
Guido van Rossuma8275371995-07-18 14:07:00 +0000640
641 /*
642 See the built-in function pow. Returns NULL on failure.
643 This is the equivalent of the Python expression:
644 pow(o1,o2,o3), where o3 is optional.
645
646 */
647
Mark Hammond91a681d2002-08-12 07:21:58 +0000648 PyAPI_FUNC(PyObject *) PyNumber_Negative(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000649
650 /*
651 Returns the negation of o on success, or null on failure.
652 This is the equivalent of the Python expression: -o.
653
654 */
655
Mark Hammond91a681d2002-08-12 07:21:58 +0000656 PyAPI_FUNC(PyObject *) PyNumber_Positive(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000657
658 /*
659 Returns the (what?) of o on success, or NULL on failure.
660 This is the equivalent of the Python expression: +o.
661
662 */
663
Mark Hammond91a681d2002-08-12 07:21:58 +0000664 PyAPI_FUNC(PyObject *) PyNumber_Absolute(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000665
666 /*
667 Returns the absolute value of o, or null on failure. This is
668 the equivalent of the Python expression: abs(o).
669
670 */
671
Mark Hammond91a681d2002-08-12 07:21:58 +0000672 PyAPI_FUNC(PyObject *) PyNumber_Invert(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000673
674 /*
675 Returns the bitwise negation of o on success, or NULL on
676 failure. This is the equivalent of the Python expression:
677 ~o.
678
679
680 */
681
Mark Hammond91a681d2002-08-12 07:21:58 +0000682 PyAPI_FUNC(PyObject *) PyNumber_Lshift(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000683
684 /*
685 Returns the result of left shifting o1 by o2 on success, or
686 NULL on failure. This is the equivalent of the Python
687 expression: o1 << o2.
688
689
690 */
691
Mark Hammond91a681d2002-08-12 07:21:58 +0000692 PyAPI_FUNC(PyObject *) PyNumber_Rshift(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000693
694 /*
695 Returns the result of right shifting o1 by o2 on success, or
696 NULL on failure. This is the equivalent of the Python
697 expression: o1 >> o2.
698
699 */
700
Mark Hammond91a681d2002-08-12 07:21:58 +0000701 PyAPI_FUNC(PyObject *) PyNumber_And(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000702
703 /*
Guido van Rossum1ca407f1997-02-14 22:51:40 +0000704 Returns the result of bitwise and of o1 and o2 on success, or
705 NULL on failure. This is the equivalent of the Python
706 expression: o1&o2.
Guido van Rossuma8275371995-07-18 14:07:00 +0000707
708
709 */
710
Mark Hammond91a681d2002-08-12 07:21:58 +0000711 PyAPI_FUNC(PyObject *) PyNumber_Xor(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000712
713 /*
714 Returns the bitwise exclusive or of o1 by o2 on success, or
715 NULL on failure. This is the equivalent of the Python
716 expression: o1^o2.
717
718
719 */
720
Mark Hammond91a681d2002-08-12 07:21:58 +0000721 PyAPI_FUNC(PyObject *) PyNumber_Or(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000722
723 /*
Raymond Hettingera72e2f92003-02-28 05:11:03 +0000724 Returns the result of bitwise or on o1 and o2 on success, or
Guido van Rossum1ca407f1997-02-14 22:51:40 +0000725 NULL on failure. This is the equivalent of the Python
726 expression: o1|o2.
Guido van Rossuma8275371995-07-18 14:07:00 +0000727
728 */
729
730 /* Implemented elsewhere:
731
Guido van Rossumed227f01996-09-06 13:40:53 +0000732 int PyNumber_Coerce(PyObject **p1, PyObject **p2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000733
Guido van Rossumed227f01996-09-06 13:40:53 +0000734 This function takes the addresses of two variables of type
735 PyObject*.
736
737 If the objects pointed to by *p1 and *p2 have the same type,
738 increment their reference count and return 0 (success).
739 If the objects can be converted to a common numeric type,
740 replace *p1 and *p2 by their converted value (with 'new'
741 reference counts), and return 0.
742 If no conversion is possible, or if some other error occurs,
743 return -1 (failure) and don't increment the reference counts.
744 The call PyNumber_Coerce(&o1, &o2) is equivalent to the Python
745 statement o1, o2 = coerce(o1, o2).
Guido van Rossuma8275371995-07-18 14:07:00 +0000746
747 */
748
Neal Norwitz8a87f5d2006-08-12 17:03:09 +0000749#define PyIndex_Check(obj) \
750 ((obj)->ob_type->tp_as_number != NULL && \
751 PyType_HasFeature((obj)->ob_type, Py_TPFLAGS_HAVE_INDEX) && \
752 (obj)->ob_type->tp_as_number->nb_index != NULL)
753
754 PyAPI_FUNC(PyObject *) PyNumber_Index(PyObject *o);
Guido van Rossum38fff8c2006-03-07 18:50:55 +0000755
756 /*
Neal Norwitz8a87f5d2006-08-12 17:03:09 +0000757 Returns the object converted to a Python long or int
758 or NULL with an error raised on failure.
Guido van Rossum38fff8c2006-03-07 18:50:55 +0000759 */
760
Neal Norwitz8a87f5d2006-08-12 17:03:09 +0000761 PyAPI_FUNC(Py_ssize_t) PyNumber_AsSsize_t(PyObject *o, PyObject *exc);
762
763 /*
764 Returns the object converted to Py_ssize_t by going through
765 PyNumber_Index first. If an overflow error occurs while
766 converting the int-or-long to Py_ssize_t, then the second argument
767 is the error-type to return. If it is NULL, then the overflow error
768 is cleared and the value is clipped.
769 */
Guido van Rossum38fff8c2006-03-07 18:50:55 +0000770
Mark Hammond91a681d2002-08-12 07:21:58 +0000771 PyAPI_FUNC(PyObject *) PyNumber_Int(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000772
773 /*
774 Returns the o converted to an integer object on success, or
775 NULL on failure. This is the equivalent of the Python
776 expression: int(o).
777
778 */
779
Mark Hammond91a681d2002-08-12 07:21:58 +0000780 PyAPI_FUNC(PyObject *) PyNumber_Long(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000781
782 /*
783 Returns the o converted to a long integer object on success,
784 or NULL on failure. This is the equivalent of the Python
785 expression: long(o).
786
787 */
788
Mark Hammond91a681d2002-08-12 07:21:58 +0000789 PyAPI_FUNC(PyObject *) PyNumber_Float(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000790
791 /*
792 Returns the o converted to a float object on success, or NULL
793 on failure. This is the equivalent of the Python expression:
794 float(o).
795 */
796
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000797/* In-place variants of (some of) the above number protocol functions */
798
Mark Hammond91a681d2002-08-12 07:21:58 +0000799 PyAPI_FUNC(PyObject *) PyNumber_InPlaceAdd(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000800
801 /*
802 Returns the result of adding o2 to o1, possibly in-place, or null
803 on failure. This is the equivalent of the Python expression:
804 o1 += o2.
805
806 */
807
Mark Hammond91a681d2002-08-12 07:21:58 +0000808 PyAPI_FUNC(PyObject *) PyNumber_InPlaceSubtract(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000809
810 /*
811 Returns the result of subtracting o2 from o1, possibly in-place or
812 null on failure. This is the equivalent of the Python expression:
813 o1 -= o2.
814
815 */
816
Mark Hammond91a681d2002-08-12 07:21:58 +0000817 PyAPI_FUNC(PyObject *) PyNumber_InPlaceMultiply(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000818
819 /*
820 Returns the result of multiplying o1 by o2, possibly in-place, or
821 null on failure. This is the equivalent of the Python expression:
822 o1 *= o2.
823
824 */
825
Mark Hammond91a681d2002-08-12 07:21:58 +0000826 PyAPI_FUNC(PyObject *) PyNumber_InPlaceDivide(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000827
828 /*
829 Returns the result of dividing o1 by o2, possibly in-place, or null
830 on failure. This is the equivalent of the Python expression:
831 o1 /= o2.
832
833 */
834
Mark Hammond91a681d2002-08-12 07:21:58 +0000835 PyAPI_FUNC(PyObject *) PyNumber_InPlaceFloorDivide(PyObject *o1,
Guido van Rossum4668b002001-08-08 05:00:18 +0000836 PyObject *o2);
837
838 /*
839 Returns the result of dividing o1 by o2 giving an integral result,
840 possibly in-place, or null on failure.
841 This is the equivalent of the Python expression:
842 o1 /= o2.
843
844 */
845
Mark Hammond91a681d2002-08-12 07:21:58 +0000846 PyAPI_FUNC(PyObject *) PyNumber_InPlaceTrueDivide(PyObject *o1,
Guido van Rossum4668b002001-08-08 05:00:18 +0000847 PyObject *o2);
848
849 /*
850 Returns the result of dividing o1 by o2 giving a float result,
851 possibly in-place, or null on failure.
852 This is the equivalent of the Python expression:
853 o1 /= o2.
854
855 */
856
Mark Hammond91a681d2002-08-12 07:21:58 +0000857 PyAPI_FUNC(PyObject *) PyNumber_InPlaceRemainder(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000858
859 /*
860 Returns the remainder of dividing o1 by o2, possibly in-place, or
861 null on failure. This is the equivalent of the Python expression:
862 o1 %= o2.
863
864 */
865
Mark Hammond91a681d2002-08-12 07:21:58 +0000866 PyAPI_FUNC(PyObject *) PyNumber_InPlacePower(PyObject *o1, PyObject *o2,
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000867 PyObject *o3);
868
869 /*
870 Returns the result of raising o1 to the power of o2, possibly
871 in-place, or null on failure. This is the equivalent of the Python
872 expression: o1 **= o2, or pow(o1, o2, o3) if o3 is present.
873
874 */
875
Mark Hammond91a681d2002-08-12 07:21:58 +0000876 PyAPI_FUNC(PyObject *) PyNumber_InPlaceLshift(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000877
878 /*
879 Returns the result of left shifting o1 by o2, possibly in-place, or
880 null on failure. This is the equivalent of the Python expression:
881 o1 <<= o2.
882
883 */
884
Mark Hammond91a681d2002-08-12 07:21:58 +0000885 PyAPI_FUNC(PyObject *) PyNumber_InPlaceRshift(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000886
887 /*
888 Returns the result of right shifting o1 by o2, possibly in-place or
889 null on failure. This is the equivalent of the Python expression:
890 o1 >>= o2.
891
892 */
893
Mark Hammond91a681d2002-08-12 07:21:58 +0000894 PyAPI_FUNC(PyObject *) PyNumber_InPlaceAnd(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000895
896 /*
897 Returns the result of bitwise and of o1 and o2, possibly in-place,
898 or null on failure. This is the equivalent of the Python
899 expression: o1 &= o2.
900
901 */
902
Mark Hammond91a681d2002-08-12 07:21:58 +0000903 PyAPI_FUNC(PyObject *) PyNumber_InPlaceXor(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000904
905 /*
906 Returns the bitwise exclusive or of o1 by o2, possibly in-place, or
907 null on failure. This is the equivalent of the Python expression:
908 o1 ^= o2.
909
910 */
911
Mark Hammond91a681d2002-08-12 07:21:58 +0000912 PyAPI_FUNC(PyObject *) PyNumber_InPlaceOr(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000913
914 /*
Walter Dörwaldf0dfc7a2003-10-20 14:01:56 +0000915 Returns the result of bitwise or of o1 and o2, possibly in-place,
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +0000916 or null on failure. This is the equivalent of the Python
917 expression: o1 |= o2.
918
919 */
920
Guido van Rossuma8275371995-07-18 14:07:00 +0000921
922/* Sequence protocol:*/
923
Mark Hammond91a681d2002-08-12 07:21:58 +0000924 PyAPI_FUNC(int) PySequence_Check(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +0000925
926 /*
927 Return 1 if the object provides sequence protocol, and zero
928 otherwise.
929
930 This function always succeeds.
931
932 */
933
Martin v. Löwis18e16552006-02-15 17:27:45 +0000934 PyAPI_FUNC(Py_ssize_t) PySequence_Size(PyObject *o);
Jeremy Hylton6253f832000-07-12 12:56:19 +0000935
Guido van Rossum4f4ce681996-07-21 02:22:56 +0000936 /*
Jeremy Hylton6253f832000-07-12 12:56:19 +0000937 Return the size of sequence object o, or -1 on failure.
Guido van Rossum4f4ce681996-07-21 02:22:56 +0000938
939 */
940
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +0000941 /* For DLL compatibility */
942#undef PySequence_Length
Martin v. Löwis18e16552006-02-15 17:27:45 +0000943 PyAPI_FUNC(Py_ssize_t) PySequence_Length(PyObject *o);
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +0000944#define PySequence_Length PySequence_Size
945
946
Mark Hammond91a681d2002-08-12 07:21:58 +0000947 PyAPI_FUNC(PyObject *) PySequence_Concat(PyObject *o1, PyObject *o2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000948
949 /*
Thomas Wouters7e474022000-07-16 12:04:32 +0000950 Return the concatenation of o1 and o2 on success, and NULL on
Guido van Rossuma8275371995-07-18 14:07:00 +0000951 failure. This is the equivalent of the Python
952 expression: o1+o2.
953
954 */
955
Martin v. Löwis18e16552006-02-15 17:27:45 +0000956 PyAPI_FUNC(PyObject *) PySequence_Repeat(PyObject *o, Py_ssize_t count);
Guido van Rossuma8275371995-07-18 14:07:00 +0000957
958 /*
959 Return the result of repeating sequence object o count times,
960 or NULL on failure. This is the equivalent of the Python
961 expression: o1*count.
962
963 */
964
Martin v. Löwis18e16552006-02-15 17:27:45 +0000965 PyAPI_FUNC(PyObject *) PySequence_GetItem(PyObject *o, Py_ssize_t i);
Guido van Rossuma8275371995-07-18 14:07:00 +0000966
967 /*
968 Return the ith element of o, or NULL on failure. This is the
969 equivalent of the Python expression: o[i].
Guido van Rossuma8275371995-07-18 14:07:00 +0000970 */
971
Martin v. Löwis18e16552006-02-15 17:27:45 +0000972 PyAPI_FUNC(PyObject *) PySequence_GetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000973
974 /*
975 Return the slice of sequence object o between i1 and i2, or
976 NULL on failure. This is the equivalent of the Python
977 expression: o[i1:i2].
978
979 */
980
Martin v. Löwis18e16552006-02-15 17:27:45 +0000981 PyAPI_FUNC(int) PySequence_SetItem(PyObject *o, Py_ssize_t i, PyObject *v);
Guido van Rossuma8275371995-07-18 14:07:00 +0000982
983 /*
984 Assign object v to the ith element of o. Returns
985 -1 on failure. This is the equivalent of the Python
986 statement: o[i]=v.
987
988 */
989
Martin v. Löwis18e16552006-02-15 17:27:45 +0000990 PyAPI_FUNC(int) PySequence_DelItem(PyObject *o, Py_ssize_t i);
Guido van Rossum6cdc6f41996-08-21 17:41:54 +0000991
992 /*
993 Delete the ith element of object v. Returns
994 -1 on failure. This is the equivalent of the Python
995 statement: del o[i].
996 */
997
Martin v. Löwis18e16552006-02-15 17:27:45 +0000998 PyAPI_FUNC(int) PySequence_SetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2,
Fred Drakeea9cb5a2000-07-09 00:20:36 +0000999 PyObject *v);
Guido van Rossuma8275371995-07-18 14:07:00 +00001000
1001 /*
1002 Assign the sequence object, v, to the slice in sequence
1003 object, o, from i1 to i2. Returns -1 on failure. This is the
1004 equivalent of the Python statement: o[i1:i2]=v.
1005 */
1006
Martin v. Löwis18e16552006-02-15 17:27:45 +00001007 PyAPI_FUNC(int) PySequence_DelSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2);
Guido van Rossum6cdc6f41996-08-21 17:41:54 +00001008
1009 /*
1010 Delete the slice in sequence object, o, from i1 to i2.
1011 Returns -1 on failure. This is the equivalent of the Python
1012 statement: del o[i1:i2].
1013 */
1014
Mark Hammond91a681d2002-08-12 07:21:58 +00001015 PyAPI_FUNC(PyObject *) PySequence_Tuple(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +00001016
1017 /*
Guido van Rossumf39fc431997-03-04 18:31:47 +00001018 Returns the sequence, o, as a tuple on success, and NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +00001019 This is equivalent to the Python expression: tuple(o)
1020 */
1021
Andrew M. Kuchling74042d62000-06-18 18:43:14 +00001022
Mark Hammond91a681d2002-08-12 07:21:58 +00001023 PyAPI_FUNC(PyObject *) PySequence_List(PyObject *o);
Guido van Rossum2adf06b1996-12-05 21:48:50 +00001024 /*
Guido van Rossumf39fc431997-03-04 18:31:47 +00001025 Returns the sequence, o, as a list on success, and NULL on failure.
1026 This is equivalent to the Python expression: list(o)
Guido van Rossum2adf06b1996-12-05 21:48:50 +00001027 */
Guido van Rossumf39fc431997-03-04 18:31:47 +00001028
Mark Hammond91a681d2002-08-12 07:21:58 +00001029 PyAPI_FUNC(PyObject *) PySequence_Fast(PyObject *o, const char* m);
Andrew M. Kuchling74042d62000-06-18 18:43:14 +00001030 /*
1031 Returns the sequence, o, as a tuple, unless it's already a
1032 tuple or list. Use PySequence_Fast_GET_ITEM to access the
Tim Peters1fc240e2001-10-26 05:06:50 +00001033 members of this list, and PySequence_Fast_GET_SIZE to get its length.
Andrew M. Kuchling74042d62000-06-18 18:43:14 +00001034
Tim Peters6912d4d2001-05-05 03:56:37 +00001035 Returns NULL on failure. If the object does not support iteration,
Andrew M. Kuchling74042d62000-06-18 18:43:14 +00001036 raises a TypeError exception with m as the message text.
1037 */
1038
Tim Peters1fc240e2001-10-26 05:06:50 +00001039#define PySequence_Fast_GET_SIZE(o) \
1040 (PyList_Check(o) ? PyList_GET_SIZE(o) : PyTuple_GET_SIZE(o))
1041 /*
1042 Return the size of o, assuming that o was returned by
1043 PySequence_Fast and is not NULL.
1044 */
1045
Andrew M. Kuchling74042d62000-06-18 18:43:14 +00001046#define PySequence_Fast_GET_ITEM(o, i)\
1047 (PyList_Check(o) ? PyList_GET_ITEM(o, i) : PyTuple_GET_ITEM(o, i))
Andrew M. Kuchling74042d62000-06-18 18:43:14 +00001048 /*
1049 Return the ith element of o, assuming that o was returned by
1050 PySequence_Fast, and that i is within bounds.
1051 */
1052
Martin v. Löwis01f94bd2002-05-08 08:44:21 +00001053#define PySequence_ITEM(o, i)\
Christian Heimese93237d2007-12-19 02:37:44 +00001054 ( Py_TYPE(o)->tp_as_sequence->sq_item(o, i) )
Martin v. Löwis01f94bd2002-05-08 08:44:21 +00001055 /* Assume tp_as_sequence and sq_item exist and that i does not
1056 need to be corrected for a negative index
1057 */
1058
Raymond Hettinger42bec932004-03-12 16:38:17 +00001059#define PySequence_Fast_ITEMS(sf) \
Raymond Hettingerc1e4f9d2004-03-12 08:04:00 +00001060 (PyList_Check(sf) ? ((PyListObject *)(sf))->ob_item \
1061 : ((PyTupleObject *)(sf))->ob_item)
1062 /* Return a pointer to the underlying item array for
1063 an object retured by PySequence_Fast */
1064
Neal Norwitz1fc4b772006-03-04 18:49:58 +00001065 PyAPI_FUNC(Py_ssize_t) PySequence_Count(PyObject *o, PyObject *value);
Guido van Rossuma8275371995-07-18 14:07:00 +00001066
1067 /*
1068 Return the number of occurrences on value on o, that is,
1069 return the number of keys for which o[key]==value. On
1070 failure, return -1. This is equivalent to the Python
1071 expression: o.count(value).
1072 */
1073
Mark Hammond91a681d2002-08-12 07:21:58 +00001074 PyAPI_FUNC(int) PySequence_Contains(PyObject *seq, PyObject *ob);
Tim Peterscb8d3682001-05-05 21:05:01 +00001075 /*
1076 Return -1 if error; 1 if ob in seq; 0 if ob not in seq.
Tim Peters16a77ad2001-09-08 04:00:12 +00001077 Use __contains__ if possible, else _PySequence_IterSearch().
Tim Peterscb8d3682001-05-05 21:05:01 +00001078 */
1079
Tim Peters16a77ad2001-09-08 04:00:12 +00001080#define PY_ITERSEARCH_COUNT 1
1081#define PY_ITERSEARCH_INDEX 2
1082#define PY_ITERSEARCH_CONTAINS 3
Neal Norwitz1fc4b772006-03-04 18:49:58 +00001083 PyAPI_FUNC(Py_ssize_t) _PySequence_IterSearch(PyObject *seq,
1084 PyObject *obj, int operation);
Tim Peters16a77ad2001-09-08 04:00:12 +00001085 /*
1086 Iterate over seq. Result depends on the operation:
1087 PY_ITERSEARCH_COUNT: return # of times obj appears in seq; -1 if
1088 error.
Raymond Hettingera72e2f92003-02-28 05:11:03 +00001089 PY_ITERSEARCH_INDEX: return 0-based index of first occurrence of
Tim Peters16a77ad2001-09-08 04:00:12 +00001090 obj in seq; set ValueError and return -1 if none found;
1091 also return -1 on error.
1092 PY_ITERSEARCH_CONTAINS: return 1 if obj in seq, else 0; -1 on
1093 error.
1094 */
Guido van Rossum83684531999-03-17 18:44:39 +00001095
1096/* For DLL-level backwards compatibility */
1097#undef PySequence_In
Mark Hammond91a681d2002-08-12 07:21:58 +00001098 PyAPI_FUNC(int) PySequence_In(PyObject *o, PyObject *value);
Guido van Rossum83684531999-03-17 18:44:39 +00001099
1100/* For source-level backwards compatibility */
Guido van Rossumf1536db1998-08-23 22:06:59 +00001101#define PySequence_In PySequence_Contains
Guido van Rossuma8275371995-07-18 14:07:00 +00001102
1103 /*
1104 Determine if o contains value. If an item in o is equal to
1105 X, return 1, otherwise return 0. On error, return -1. This
1106 is equivalent to the Python expression: value in o.
1107 */
1108
Neal Norwitz1fc4b772006-03-04 18:49:58 +00001109 PyAPI_FUNC(Py_ssize_t) PySequence_Index(PyObject *o, PyObject *value);
Guido van Rossuma8275371995-07-18 14:07:00 +00001110
1111 /*
1112 Return the first index for which o[i]=value. On error,
1113 return -1. This is equivalent to the Python
1114 expression: o.index(value).
1115 */
1116
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +00001117/* In-place versions of some of the above Sequence functions. */
1118
Mark Hammond91a681d2002-08-12 07:21:58 +00001119 PyAPI_FUNC(PyObject *) PySequence_InPlaceConcat(PyObject *o1, PyObject *o2);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +00001120
1121 /*
1122 Append o2 to o1, in-place when possible. Return the resulting
1123 object, which could be o1, or NULL on failure. This is the
1124 equivalent of the Python expression: o1 += o2.
1125
1126 */
1127
Martin v. Löwis18e16552006-02-15 17:27:45 +00001128 PyAPI_FUNC(PyObject *) PySequence_InPlaceRepeat(PyObject *o, Py_ssize_t count);
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +00001129
1130 /*
1131 Repeat o1 by count, in-place when possible. Return the resulting
1132 object, which could be o1, or NULL on failure. This is the
1133 equivalent of the Python expression: o1 *= count.
1134
1135 */
1136
Guido van Rossuma8275371995-07-18 14:07:00 +00001137/* Mapping protocol:*/
1138
Mark Hammond91a681d2002-08-12 07:21:58 +00001139 PyAPI_FUNC(int) PyMapping_Check(PyObject *o);
Guido van Rossuma8275371995-07-18 14:07:00 +00001140
1141 /*
1142 Return 1 if the object provides mapping protocol, and zero
1143 otherwise.
1144
1145 This function always succeeds.
1146 */
1147
Martin v. Löwis18e16552006-02-15 17:27:45 +00001148 PyAPI_FUNC(Py_ssize_t) PyMapping_Size(PyObject *o);
Jeremy Hylton6253f832000-07-12 12:56:19 +00001149
Guido van Rossuma8275371995-07-18 14:07:00 +00001150 /*
1151 Returns the number of keys in object o on success, and -1 on
1152 failure. For objects that do not provide sequence protocol,
1153 this is equivalent to the Python expression: len(o).
1154 */
1155
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +00001156 /* For DLL compatibility */
1157#undef PyMapping_Length
Martin v. Löwis18e16552006-02-15 17:27:45 +00001158 PyAPI_FUNC(Py_ssize_t) PyMapping_Length(PyObject *o);
Marc-André Lemburgcf5f3582000-07-17 09:22:55 +00001159#define PyMapping_Length PyMapping_Size
1160
1161
Guido van Rossuma25e5e91996-09-06 13:48:38 +00001162 /* implemented as a macro:
1163
Fred Drakeea9cb5a2000-07-09 00:20:36 +00001164 int PyMapping_DelItemString(PyObject *o, char *key);
Guido van Rossuma8275371995-07-18 14:07:00 +00001165
Guido van Rossuma8275371995-07-18 14:07:00 +00001166 Remove the mapping for object, key, from the object *o.
1167 Returns -1 on failure. This is equivalent to
1168 the Python statement: del o[key].
1169 */
Jeremy Hylton7c7ee5f2001-11-28 16:20:07 +00001170#define PyMapping_DelItemString(O,K) PyObject_DelItemString((O),(K))
Guido van Rossuma25e5e91996-09-06 13:48:38 +00001171
1172 /* implemented as a macro:
Guido van Rossuma8275371995-07-18 14:07:00 +00001173
Fred Drakeea9cb5a2000-07-09 00:20:36 +00001174 int PyMapping_DelItem(PyObject *o, PyObject *key);
Guido van Rossuma8275371995-07-18 14:07:00 +00001175
Guido van Rossuma8275371995-07-18 14:07:00 +00001176 Remove the mapping for object, key, from the object *o.
1177 Returns -1 on failure. This is equivalent to
1178 the Python statement: del o[key].
1179 */
Jeremy Hylton7c7ee5f2001-11-28 16:20:07 +00001180#define PyMapping_DelItem(O,K) PyObject_DelItem((O),(K))
Guido van Rossuma8275371995-07-18 14:07:00 +00001181
Mark Hammond91a681d2002-08-12 07:21:58 +00001182 PyAPI_FUNC(int) PyMapping_HasKeyString(PyObject *o, char *key);
Guido van Rossuma8275371995-07-18 14:07:00 +00001183
1184 /*
1185 On success, return 1 if the mapping object has the key, key,
1186 and 0 otherwise. This is equivalent to the Python expression:
1187 o.has_key(key).
1188
1189 This function always succeeds.
1190 */
1191
Mark Hammond91a681d2002-08-12 07:21:58 +00001192 PyAPI_FUNC(int) PyMapping_HasKey(PyObject *o, PyObject *key);
Guido van Rossuma8275371995-07-18 14:07:00 +00001193
1194 /*
1195 Return 1 if the mapping object has the key, key,
1196 and 0 otherwise. This is equivalent to the Python expression:
1197 o.has_key(key).
1198
1199 This function always succeeds.
1200
1201 */
1202
1203 /* Implemented as macro:
1204
1205 PyObject *PyMapping_Keys(PyObject *o);
1206
1207 On success, return a list of the keys in object o. On
1208 failure, return NULL. This is equivalent to the Python
1209 expression: o.keys().
1210 */
1211#define PyMapping_Keys(O) PyObject_CallMethod(O,"keys",NULL)
1212
1213 /* Implemented as macro:
1214
1215 PyObject *PyMapping_Values(PyObject *o);
1216
1217 On success, return a list of the values in object o. On
1218 failure, return NULL. This is equivalent to the Python
1219 expression: o.values().
1220 */
1221#define PyMapping_Values(O) PyObject_CallMethod(O,"values",NULL)
1222
1223 /* Implemented as macro:
1224
1225 PyObject *PyMapping_Items(PyObject *o);
1226
1227 On success, return a list of the items in object o, where
1228 each item is a tuple containing a key-value pair. On
1229 failure, return NULL. This is equivalent to the Python
1230 expression: o.items().
1231
1232 */
1233#define PyMapping_Items(O) PyObject_CallMethod(O,"items",NULL)
1234
Mark Hammond91a681d2002-08-12 07:21:58 +00001235 PyAPI_FUNC(PyObject *) PyMapping_GetItemString(PyObject *o, char *key);
Guido van Rossuma8275371995-07-18 14:07:00 +00001236
1237 /*
1238 Return element of o corresponding to the object, key, or NULL
1239 on failure. This is the equivalent of the Python expression:
1240 o[key].
1241 */
1242
Mark Hammond91a681d2002-08-12 07:21:58 +00001243 PyAPI_FUNC(int) PyMapping_SetItemString(PyObject *o, char *key,
Fred Drakeea9cb5a2000-07-09 00:20:36 +00001244 PyObject *value);
Guido van Rossuma8275371995-07-18 14:07:00 +00001245
1246 /*
1247 Map the object, key, to the value, v. Returns
1248 -1 on failure. This is the equivalent of the Python
1249 statement: o[key]=v.
1250 */
1251
1252
Mark Hammond91a681d2002-08-12 07:21:58 +00001253PyAPI_FUNC(int) PyObject_IsInstance(PyObject *object, PyObject *typeorclass);
Guido van Rossum823649d2001-03-21 18:40:58 +00001254 /* isinstance(object, typeorclass) */
1255
Mark Hammond91a681d2002-08-12 07:21:58 +00001256PyAPI_FUNC(int) PyObject_IsSubclass(PyObject *object, PyObject *typeorclass);
Guido van Rossum823649d2001-03-21 18:40:58 +00001257 /* issubclass(object, typeorclass) */
1258
1259
Guido van Rossum8ca687a1995-09-18 21:20:02 +00001260#ifdef __cplusplus
1261}
1262#endif
Guido van Rossuma8275371995-07-18 14:07:00 +00001263#endif /* Py_ABSTRACTOBJECT_H */