blob: 12d799d1f1dcb2dc0d438d9dba3cae9e6fafc4d0 [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
7/***********************************************************
8Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
9The Netherlands.
10
11 All Rights Reserved
12
Guido van Rossumd266eb41996-10-25 14:44:06 +000013Permission to use, copy, modify, and distribute this software and its
14documentation for any purpose and without fee is hereby granted,
Guido van Rossuma8275371995-07-18 14:07:00 +000015provided that the above copyright notice appear in all copies and that
Guido van Rossumd266eb41996-10-25 14:44:06 +000016both that copyright notice and this permission notice appear in
Guido van Rossuma8275371995-07-18 14:07:00 +000017supporting documentation, and that the names of Stichting Mathematisch
Guido van Rossumd266eb41996-10-25 14:44:06 +000018Centrum or CWI or Corporation for National Research Initiatives or
19CNRI not be used in advertising or publicity pertaining to
20distribution of the software without specific, written prior
21permission.
Guido van Rossuma8275371995-07-18 14:07:00 +000022
Guido van Rossumd266eb41996-10-25 14:44:06 +000023While CWI is the initial source for this software, a modified version
24is made available by the Corporation for National Research Initiatives
25(CNRI) at the Internet address ftp://ftp.python.org.
26
27STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH
28REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
29MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH
30CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
31DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
32PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
33TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
34PERFORMANCE OF THIS SOFTWARE.
Guido van Rossuma8275371995-07-18 14:07:00 +000035
36******************************************************************/
37
38/* Abstract Object Interface (many thanks to Jim Fulton) */
39
40/*
41 PROPOSAL: A Generic Python Object Interface for Python C Modules
42
43Problem
44
45 Python modules written in C that must access Python objects must do
46 so through routines whose interfaces are described by a set of
47 include files. Unfortunately, these routines vary according to the
48 object accessed. To use these routines, the C programmer must check
49 the type of the object being used and must call a routine based on
50 the object type. For example, to access an element of a sequence,
51 the programmer must determine whether the sequence is a list or a
52 tuple:
53
54 if(is_tupleobject(o))
55 e=gettupleitem(o,i)
56 else if(is_listitem(o))
57 e=getlistitem(o,i)
58
59 If the programmer wants to get an item from another type of object
60 that provides sequence behavior, there is no clear way to do it
61 correctly.
62
63 The persistent programmer may peruse object.h and find that the
64 _typeobject structure provides a means of invoking up to (currently
65 about) 41 special operators. So, for example, a routine can get an
66 item from any object that provides sequence behavior. However, to
67 use this mechanism, the programmer must make their code dependent on
68 the current Python implementation.
69
70 Also, certain semantics, especially memory management semantics, may
71 differ by the type of object being used. Unfortunately, these
72 semantics are not clearly described in the current include files.
73 An abstract interface providing more consistent semantics is needed.
74
75Proposal
76
77 I propose the creation of a standard interface (with an associated
78 library of routines and/or macros) for generically obtaining the
79 services of Python objects. This proposal can be viewed as one
80 components of a Python C interface consisting of several components.
81
82 From the viewpoint of of C access to Python services, we have (as
83 suggested by Guido in off-line discussions):
84
85 - "Very high level layer": two or three functions that let you exec or
86 eval arbitrary Python code given as a string in a module whose name is
87 given, passing C values in and getting C values out using
88 mkvalue/getargs style format strings. This does not require the user
89 to declare any variables of type "PyObject *". This should be enough
90 to write a simple application that gets Python code from the user,
91 execs it, and returns the output or errors. (Error handling must also
92 be part of this API.)
93
94 - "Abstract objects layer": which is the subject of this proposal.
95 It has many functions operating on objects, and lest you do many
96 things from C that you can also write in Python, without going
97 through the Python parser.
98
99 - "Concrete objects layer": This is the public type-dependent
100 interface provided by the standard built-in types, such as floats,
101 strings, and lists. This interface exists and is currently
102 documented by the collection of include files provides with the
103 Python distributions.
104
105 From the point of view of Python accessing services provided by C
106 modules:
107
108 - "Python module interface": this interface consist of the basic
109 routines used to define modules and their members. Most of the
110 current extensions-writing guide deals with this interface.
111
112 - "Built-in object interface": this is the interface that a new
113 built-in type must provide and the mechanisms and rules that a
114 developer of a new built-in type must use and follow.
115
116 This proposal is a "first-cut" that is intended to spur
117 discussion. See especially the lists of notes.
118
119 The Python C object interface will provide four protocols: object,
120 numeric, sequence, and mapping. Each protocol consists of a
121 collection of related operations. If an operation that is not
122 provided by a particular type is invoked, then a standard exception,
123 NotImplementedError is raised with a operation name as an argument.
124 In addition, for convenience this interface defines a set of
125 constructors for building objects of built-in types. This is needed
126 so new objects can be returned from C functions that otherwise treat
127 objects generically.
128
129Memory Management
130
131 For all of the functions described in this proposal, if a function
132 retains a reference to a Python object passed as an argument, then the
133 function will increase the reference count of the object. It is
134 unnecessary for the caller to increase the reference count of an
135 argument in anticipation of the object's retention.
136
137 All Python objects returned from functions should be treated as new
138 objects. Functions that return objects assume that the caller will
139 retain a reference and the reference count of the object has already
140 been incremented to account for this fact. A caller that does not
141 retain a reference to an object that is returned from a function
142 must decrement the reference count of the object (using
143 DECREF(object)) to prevent memory leaks.
144
145 Note that the behavior mentioned here is different from the current
146 behavior for some objects (e.g. lists and tuples) when certain
147 type-specific routines are called directly (e.g. setlistitem). The
148 proposed abstraction layer will provide a consistent memory
149 management interface, correcting for inconsistent behavior for some
150 built-in types.
151
152Protocols
153
154xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/
155
156/* Object Protocol: */
157
158 /* Implemented elsewhere:
159
160 int PyObject_Print(PyObject *o, FILE *fp, int flags);
161
162 Print an object, o, on file, fp. Returns -1 on
163 error. The flags argument is used to enable certain printing
164 options. The only option currently supported is Py_Print_RAW.
165
166 (What should be said about Py_Print_RAW?)
167
168 */
169
170 /* Implemented elsewhere:
171
172 int PyObject_HasAttrString(PyObject *o, char *attr_name);
173
174 Returns 1 if o has the attribute attr_name, and 0 otherwise.
175 This is equivalent to the Python expression:
176 hasattr(o,attr_name).
177
178 This function always succeeds.
179
180 */
181
182 /* Implemented elsewhere:
183
184 PyObject* PyObject_GetAttrString(PyObject *o, char *attr_name);
185
186 Retrieve an attributed named attr_name form object o.
187 Returns the attribute value on success, or NULL on failure.
188 This is the equivalent of the Python expression: o.attr_name.
189
190 */
191
192 /* Implemented elsewhere:
193
194 int PyObject_HasAttr(PyObject *o, PyObject *attr_name);
195
196 Returns 1 if o has the attribute attr_name, and 0 otherwise.
197 This is equivalent to the Python expression:
198 hasattr(o,attr_name).
199
200 This function always succeeds.
201
202 */
203
204 /* Implemented elsewhere:
205
206 PyObject* PyObject_GetAttr(PyObject *o, PyObject *attr_name);
207
208 Retrieve an attributed named attr_name form object o.
209 Returns the attribute value on success, or NULL on failure.
210 This is the equivalent of the Python expression: o.attr_name.
211
212 */
213
214
215 /* Implemented elsewhere:
216
217 int PyObject_SetAttrString(PyObject *o, char *attr_name, PyObject *v);
218
219 Set the value of the attribute named attr_name, for object o,
220 to the value, v. Returns -1 on failure. This is
221 the equivalent of the Python statement: o.attr_name=v.
222
223 */
224
225 /* Implemented elsewhere:
226
227 int PyObject_SetAttr(PyObject *o, PyObject *attr_name, PyObject *v);
228
229 Set the value of the attribute named attr_name, for object o,
230 to the value, v. Returns -1 on failure. This is
231 the equivalent of the Python statement: o.attr_name=v.
232
233 */
234
235 /* implemented as a macro:
236
237 int PyObject_DelAttrString(PyObject *o, char *attr_name);
238
239 Delete attribute named attr_name, for object o. Returns
240 -1 on failure. This is the equivalent of the Python
241 statement: del o.attr_name.
242
243 */
244#define PyObject_DelAttrString(O,A) PyObject_SetAttrString((O),(A),NULL)
245
246 /* implemented as a macro:
247
248 int PyObject_DelAttr(PyObject *o, PyObject *attr_name);
249
250 Delete attribute named attr_name, for object o. Returns -1
251 on failure. This is the equivalent of the Python
252 statement: del o.attr_name.
253
254 */
255#define PyObject_DelAttr(O,A) PyObject_SetAttr((O),(A),NULL)
256
Guido van Rossum43466ec1998-12-04 18:48:25 +0000257 DL_IMPORT(int) PyObject_Cmp Py_PROTO((PyObject *o1, PyObject *o2, int *result));
Guido van Rossuma8275371995-07-18 14:07:00 +0000258
259 /*
260 Compare the values of o1 and o2 using a routine provided by
261 o1, if one exists, otherwise with a routine provided by o2.
262 The result of the comparison is returned in result. Returns
263 -1 on failure. This is the equivalent of the Python
264 statement: result=cmp(o1,o2).
265
266 */
267
268 /* Implemented elsewhere:
269
270 int PyObject_Compare(PyObject *o1, PyObject *o2);
271
272 Compare the values of o1 and o2 using a routine provided by
273 o1, if one exists, otherwise with a routine provided by o2.
274 Returns the result of the comparison on success. On error,
275 the value returned is undefined. This is equivalent to the
276 Python expression: cmp(o1,o2).
277
278 */
279
280 /* Implemented elsewhere:
281
282 PyObject *PyObject_Repr(PyObject *o);
283
284 Compute the string representation of object, o. Returns the
285 string representation on success, NULL on failure. This is
286 the equivalent of the Python expression: repr(o).
287
288 Called by the repr() built-in function and by reverse quotes.
289
290 */
291
292 /* Implemented elsewhere:
293
294 PyObject *PyObject_Str(PyObject *o);
295
296 Compute the string representation of object, o. Returns the
297 string representation on success, NULL on failure. This is
298 the equivalent of the Python expression: str(o).)
299
300 Called by the str() built-in function and by the print
301 statement.
302
303 */
304
Guido van Rossum43466ec1998-12-04 18:48:25 +0000305 DL_IMPORT(int) PyCallable_Check Py_PROTO((PyObject *o));
Guido van Rossuma8275371995-07-18 14:07:00 +0000306
307 /*
308 Determine if the object, o, is callable. Return 1 if the
309 object is callable and 0 otherwise.
310
311 This function always succeeds.
312
313 */
314
315
316
Guido van Rossum43466ec1998-12-04 18:48:25 +0000317 DL_IMPORT(PyObject *) PyObject_CallObject Py_PROTO((PyObject *callable_object,
Guido van Rossum8ca687a1995-09-18 21:20:02 +0000318 PyObject *args));
Guido van Rossuma8275371995-07-18 14:07:00 +0000319
320 /*
321
322 Call a callable Python object, callable_object, with
323 arguments given by the tuple, args. If no arguments are
324 needed, then args may be NULL. Returns the result of the
325 call on success, or NULL on failure. This is the equivalent
326 of the Python expression: apply(o,args).
327
328 */
329
Guido van Rossum43466ec1998-12-04 18:48:25 +0000330 DL_IMPORT(PyObject *) PyObject_CallFunction Py_PROTO((PyObject *callable_object,
Guido van Rossum8ca687a1995-09-18 21:20:02 +0000331 char *format, ...));
Guido van Rossuma8275371995-07-18 14:07:00 +0000332
333 /*
334 Call a callable Python object, callable_object, with a
335 variable number of C arguments. The C arguments are described
336 using a mkvalue-style format string. The format may be NULL,
337 indicating that no arguments are provided. Returns the
338 result of the call on success, or NULL on failure. This is
339 the equivalent of the Python expression: apply(o,args).
340
341 */
342
343
Guido van Rossum43466ec1998-12-04 18:48:25 +0000344 DL_IMPORT(PyObject *) PyObject_CallMethod Py_PROTO((PyObject *o, char *m,
Guido van Rossum8ca687a1995-09-18 21:20:02 +0000345 char *format, ...));
Guido van Rossuma8275371995-07-18 14:07:00 +0000346
347 /*
348 Call the method named m of object o with a variable number of
349 C arguments. The C arguments are described by a mkvalue
350 format string. The format may be NULL, indicating that no
351 arguments are provided. Returns the result of the call on
352 success, or NULL on failure. This is the equivalent of the
353 Python expression: o.method(args).
354
355 Note that Special method names, such as "__add__",
356 "__getitem__", and so on are not supported. The specific
357 abstract-object routines for these must be used.
358
359 */
360
361
362 /* Implemented elsewhere:
363
364 long PyObject_Hash(PyObject *o);
365
366 Compute and return the hash, hash_value, of an object, o. On
367 failure, return -1. This is the equivalent of the Python
368 expression: hash(o).
369
370 */
371
372
373 /* Implemented elsewhere:
374
375 int PyObject_IsTrue(PyObject *o);
376
377 Returns 1 if the object, o, is considered to be true, and
378 0 otherwise. This is equivalent to the Python expression:
379 not not o
380
381 This function always succeeds.
382
383 */
384
Guido van Rossumc3d3f961998-04-09 17:53:59 +0000385 /* Implemented elsewhere:
386
387 int PyObject_Not(PyObject *o);
388
389 Returns 0 if the object, o, is considered to be true, and
390 1 otherwise. This is equivalent to the Python expression:
391 not o
392
393 This function always succeeds.
394
395 */
396
Guido van Rossum43466ec1998-12-04 18:48:25 +0000397 DL_IMPORT(PyObject *) PyObject_Type Py_PROTO((PyObject *o));
Guido van Rossuma8275371995-07-18 14:07:00 +0000398
399 /*
400 On success, returns a type object corresponding to the object
401 type of object o. On failure, returns NULL. This is
402 equivalent to the Python expression: type(o).
403 */
404
Guido van Rossum43466ec1998-12-04 18:48:25 +0000405 DL_IMPORT(int) PyObject_Length Py_PROTO((PyObject *o));
Guido van Rossuma8275371995-07-18 14:07:00 +0000406
407 /*
408 Return the length of object o. If the object, o, provides
409 both sequence and mapping protocols, the sequence length is
410 returned. On error, -1 is returned. This is the equivalent
411 to the Python expression: len(o).
412
413 */
414
Guido van Rossum43466ec1998-12-04 18:48:25 +0000415 DL_IMPORT(PyObject *) PyObject_GetItem Py_PROTO((PyObject *o, PyObject *key));
Guido van Rossuma8275371995-07-18 14:07:00 +0000416
417 /*
418 Return element of o corresponding to the object, key, or NULL
419 on failure. This is the equivalent of the Python expression:
420 o[key].
421
422 */
423
Guido van Rossum43466ec1998-12-04 18:48:25 +0000424 DL_IMPORT(int) PyObject_SetItem Py_PROTO((PyObject *o, PyObject *key, PyObject *v));
Guido van Rossuma8275371995-07-18 14:07:00 +0000425
426 /*
427 Map the object, key, to the value, v. Returns
428 -1 on failure. This is the equivalent of the Python
429 statement: o[key]=v.
430 */
431
Guido van Rossum43466ec1998-12-04 18:48:25 +0000432 DL_IMPORT(int) PyObject_DelItem Py_PROTO((PyObject *o, PyObject *key));
Guido van Rossum6cdc6f41996-08-21 17:41:54 +0000433
434 /*
435 Delete the mapping for key from *o. Returns -1 on failure.
436 This is the equivalent of the Python statement: del o[key].
437 */
438
Guido van Rossumfd9eed32000-03-10 22:35:06 +0000439 DL_IMPORT(int) PyObject_AsCharBuffer(PyObject *obj,
440 const char **buffer,
441 int *buffer_len);
442
443 /*
444 Takes an arbitrary object which must support the (character,
445 single segment) buffer interface and returns a pointer to a
446 read-only memory location useable as character based input
447 for subsequent processing.
448
449 0 is returned on success. buffer and buffer_len are only
450 set in case no error occurrs. Otherwise, -1 is returned and
451 an exception set.
452
453 */
454
455 DL_IMPORT(int) PyObject_AsReadBuffer(PyObject *obj,
456 const void **buffer,
457 int *buffer_len);
458
459 /*
460 Same as PyObject_AsCharBuffer() except that this API expects
461 (readable, single segment) buffer interface and returns a
462 pointer to a read-only memory location which can contain
463 arbitrary data.
464
465 0 is returned on success. buffer and buffer_len are only
466 set in case no error occurrs. Otherwise, -1 is returned and
467 an exception set.
468
469 */
470
471 DL_IMPORT(int) PyObject_AsWriteBuffer(PyObject *obj,
472 void **buffer,
473 int *buffer_len);
474
475 /*
476 Takes an arbitrary object which must support the (writeable,
477 single segment) buffer interface and returns a pointer to a
478 writeable memory location in buffer of size buffer_len.
479
480 0 is returned on success. buffer and buffer_len are only
481 set in case no error occurrs. Otherwise, -1 is returned and
482 an exception set.
483
484 */
Guido van Rossuma8275371995-07-18 14:07:00 +0000485
486/* Number Protocol:*/
487
Guido van Rossum43466ec1998-12-04 18:48:25 +0000488 DL_IMPORT(int) PyNumber_Check Py_PROTO((PyObject *o));
Guido van Rossuma8275371995-07-18 14:07:00 +0000489
490 /*
491 Returns 1 if the object, o, provides numeric protocols, and
492 false otherwise.
493
494 This function always succeeds.
495
496 */
497
Guido van Rossum43466ec1998-12-04 18:48:25 +0000498 DL_IMPORT(PyObject *) PyNumber_Add Py_PROTO((PyObject *o1, PyObject *o2));
Guido van Rossuma8275371995-07-18 14:07:00 +0000499
500 /*
501 Returns the result of adding o1 and o2, or null on failure.
502 This is the equivalent of the Python expression: o1+o2.
503
504
505 */
506
Guido van Rossum43466ec1998-12-04 18:48:25 +0000507 DL_IMPORT(PyObject *) PyNumber_Subtract Py_PROTO((PyObject *o1, PyObject *o2));
Guido van Rossuma8275371995-07-18 14:07:00 +0000508
509 /*
510 Returns the result of subtracting o2 from o1, or null on
511 failure. This is the equivalent of the Python expression:
512 o1-o2.
513
514 */
515
Guido van Rossum43466ec1998-12-04 18:48:25 +0000516 DL_IMPORT(PyObject *) PyNumber_Multiply Py_PROTO((PyObject *o1, PyObject *o2));
Guido van Rossuma8275371995-07-18 14:07:00 +0000517
518 /*
519 Returns the result of multiplying o1 and o2, or null on
520 failure. This is the equivalent of the Python expression:
521 o1*o2.
522
523
524 */
525
Guido van Rossum43466ec1998-12-04 18:48:25 +0000526 DL_IMPORT(PyObject *) PyNumber_Divide Py_PROTO((PyObject *o1, PyObject *o2));
Guido van Rossuma8275371995-07-18 14:07:00 +0000527
528 /*
529 Returns the result of dividing o1 by o2, or null on failure.
530 This is the equivalent of the Python expression: o1/o2.
531
532
533 */
534
Guido van Rossum43466ec1998-12-04 18:48:25 +0000535 DL_IMPORT(PyObject *) PyNumber_Remainder Py_PROTO((PyObject *o1, PyObject *o2));
Guido van Rossuma8275371995-07-18 14:07:00 +0000536
537 /*
538 Returns the remainder of dividing o1 by o2, or null on
539 failure. This is the equivalent of the Python expression:
540 o1%o2.
541
542
543 */
544
Guido van Rossum43466ec1998-12-04 18:48:25 +0000545 DL_IMPORT(PyObject *) PyNumber_Divmod Py_PROTO((PyObject *o1, PyObject *o2));
Guido van Rossuma8275371995-07-18 14:07:00 +0000546
547 /*
548 See the built-in function divmod. Returns NULL on failure.
549 This is the equivalent of the Python expression:
550 divmod(o1,o2).
551
552
553 */
554
Guido van Rossum43466ec1998-12-04 18:48:25 +0000555 DL_IMPORT(PyObject *) PyNumber_Power Py_PROTO((PyObject *o1, PyObject *o2, PyObject *o3));
Guido van Rossuma8275371995-07-18 14:07:00 +0000556
557 /*
558 See the built-in function pow. Returns NULL on failure.
559 This is the equivalent of the Python expression:
560 pow(o1,o2,o3), where o3 is optional.
561
562 */
563
Guido van Rossum43466ec1998-12-04 18:48:25 +0000564 DL_IMPORT(PyObject *) PyNumber_Negative Py_PROTO((PyObject *o));
Guido van Rossuma8275371995-07-18 14:07:00 +0000565
566 /*
567 Returns the negation of o on success, or null on failure.
568 This is the equivalent of the Python expression: -o.
569
570 */
571
Guido van Rossum43466ec1998-12-04 18:48:25 +0000572 DL_IMPORT(PyObject *) PyNumber_Positive Py_PROTO((PyObject *o));
Guido van Rossuma8275371995-07-18 14:07:00 +0000573
574 /*
575 Returns the (what?) of o on success, or NULL on failure.
576 This is the equivalent of the Python expression: +o.
577
578 */
579
Guido van Rossum43466ec1998-12-04 18:48:25 +0000580 DL_IMPORT(PyObject *) PyNumber_Absolute Py_PROTO((PyObject *o));
Guido van Rossuma8275371995-07-18 14:07:00 +0000581
582 /*
583 Returns the absolute value of o, or null on failure. This is
584 the equivalent of the Python expression: abs(o).
585
586 */
587
Guido van Rossum43466ec1998-12-04 18:48:25 +0000588 DL_IMPORT(PyObject *) PyNumber_Invert Py_PROTO((PyObject *o));
Guido van Rossuma8275371995-07-18 14:07:00 +0000589
590 /*
591 Returns the bitwise negation of o on success, or NULL on
592 failure. This is the equivalent of the Python expression:
593 ~o.
594
595
596 */
597
Guido van Rossum43466ec1998-12-04 18:48:25 +0000598 DL_IMPORT(PyObject *) PyNumber_Lshift Py_PROTO((PyObject *o1, PyObject *o2));
Guido van Rossuma8275371995-07-18 14:07:00 +0000599
600 /*
601 Returns the result of left shifting o1 by o2 on success, or
602 NULL on failure. This is the equivalent of the Python
603 expression: o1 << o2.
604
605
606 */
607
Guido van Rossum43466ec1998-12-04 18:48:25 +0000608 DL_IMPORT(PyObject *) PyNumber_Rshift Py_PROTO((PyObject *o1, PyObject *o2));
Guido van Rossuma8275371995-07-18 14:07:00 +0000609
610 /*
611 Returns the result of right shifting o1 by o2 on success, or
612 NULL on failure. This is the equivalent of the Python
613 expression: o1 >> o2.
614
615 */
616
Guido van Rossum43466ec1998-12-04 18:48:25 +0000617 DL_IMPORT(PyObject *) PyNumber_And Py_PROTO((PyObject *o1, PyObject *o2));
Guido van Rossuma8275371995-07-18 14:07:00 +0000618
619 /*
Guido van Rossum1ca407f1997-02-14 22:51:40 +0000620 Returns the result of bitwise and of o1 and o2 on success, or
621 NULL on failure. This is the equivalent of the Python
622 expression: o1&o2.
Guido van Rossuma8275371995-07-18 14:07:00 +0000623
624
625 */
626
Guido van Rossum43466ec1998-12-04 18:48:25 +0000627 DL_IMPORT(PyObject *) PyNumber_Xor Py_PROTO((PyObject *o1, PyObject *o2));
Guido van Rossuma8275371995-07-18 14:07:00 +0000628
629 /*
630 Returns the bitwise exclusive or of o1 by o2 on success, or
631 NULL on failure. This is the equivalent of the Python
632 expression: o1^o2.
633
634
635 */
636
Guido van Rossum43466ec1998-12-04 18:48:25 +0000637 DL_IMPORT(PyObject *) PyNumber_Or Py_PROTO((PyObject *o1, PyObject *o2));
Guido van Rossuma8275371995-07-18 14:07:00 +0000638
639 /*
Guido van Rossum1ca407f1997-02-14 22:51:40 +0000640 Returns the result of bitwise or or o1 and o2 on success, or
641 NULL on failure. This is the equivalent of the Python
642 expression: o1|o2.
Guido van Rossuma8275371995-07-18 14:07:00 +0000643
644 */
645
646 /* Implemented elsewhere:
647
Guido van Rossumed227f01996-09-06 13:40:53 +0000648 int PyNumber_Coerce(PyObject **p1, PyObject **p2);
Guido van Rossuma8275371995-07-18 14:07:00 +0000649
Guido van Rossumed227f01996-09-06 13:40:53 +0000650 This function takes the addresses of two variables of type
651 PyObject*.
652
653 If the objects pointed to by *p1 and *p2 have the same type,
654 increment their reference count and return 0 (success).
655 If the objects can be converted to a common numeric type,
656 replace *p1 and *p2 by their converted value (with 'new'
657 reference counts), and return 0.
658 If no conversion is possible, or if some other error occurs,
659 return -1 (failure) and don't increment the reference counts.
660 The call PyNumber_Coerce(&o1, &o2) is equivalent to the Python
661 statement o1, o2 = coerce(o1, o2).
Guido van Rossuma8275371995-07-18 14:07:00 +0000662
663 */
664
Guido van Rossum43466ec1998-12-04 18:48:25 +0000665 DL_IMPORT(PyObject *) PyNumber_Int Py_PROTO((PyObject *o));
Guido van Rossuma8275371995-07-18 14:07:00 +0000666
667 /*
668 Returns the o converted to an integer object on success, or
669 NULL on failure. This is the equivalent of the Python
670 expression: int(o).
671
672 */
673
Guido van Rossum43466ec1998-12-04 18:48:25 +0000674 DL_IMPORT(PyObject *) PyNumber_Long Py_PROTO((PyObject *o));
Guido van Rossuma8275371995-07-18 14:07:00 +0000675
676 /*
677 Returns the o converted to a long integer object on success,
678 or NULL on failure. This is the equivalent of the Python
679 expression: long(o).
680
681 */
682
Guido van Rossum43466ec1998-12-04 18:48:25 +0000683 DL_IMPORT(PyObject *) PyNumber_Float Py_PROTO((PyObject *o));
Guido van Rossuma8275371995-07-18 14:07:00 +0000684
685 /*
686 Returns the o converted to a float object on success, or NULL
687 on failure. This is the equivalent of the Python expression:
688 float(o).
689 */
690
691
692/* Sequence protocol:*/
693
Guido van Rossum43466ec1998-12-04 18:48:25 +0000694 DL_IMPORT(int) PySequence_Check Py_PROTO((PyObject *o));
Guido van Rossuma8275371995-07-18 14:07:00 +0000695
696 /*
697 Return 1 if the object provides sequence protocol, and zero
698 otherwise.
699
700 This function always succeeds.
701
702 */
703
Guido van Rossum43466ec1998-12-04 18:48:25 +0000704 DL_IMPORT(int) PySequence_Length Py_PROTO((PyObject *o));
Guido van Rossum4f4ce681996-07-21 02:22:56 +0000705
706 /*
707 Return the length of sequence object o, or -1 on failure.
708
709 */
710
Guido van Rossum43466ec1998-12-04 18:48:25 +0000711 DL_IMPORT(PyObject *) PySequence_Concat Py_PROTO((PyObject *o1, PyObject *o2));
Guido van Rossuma8275371995-07-18 14:07:00 +0000712
713 /*
714 Return the concatination of o1 and o2 on success, and NULL on
715 failure. This is the equivalent of the Python
716 expression: o1+o2.
717
718 */
719
Guido van Rossum43466ec1998-12-04 18:48:25 +0000720 DL_IMPORT(PyObject *) PySequence_Repeat Py_PROTO((PyObject *o, int count));
Guido van Rossuma8275371995-07-18 14:07:00 +0000721
722 /*
723 Return the result of repeating sequence object o count times,
724 or NULL on failure. This is the equivalent of the Python
725 expression: o1*count.
726
727 */
728
Guido van Rossum43466ec1998-12-04 18:48:25 +0000729 DL_IMPORT(PyObject *) PySequence_GetItem Py_PROTO((PyObject *o, int i));
Guido van Rossuma8275371995-07-18 14:07:00 +0000730
731 /*
732 Return the ith element of o, or NULL on failure. This is the
733 equivalent of the Python expression: o[i].
734
735 */
736
Guido van Rossum43466ec1998-12-04 18:48:25 +0000737 DL_IMPORT(PyObject *) PySequence_GetSlice Py_PROTO((PyObject *o, int i1, int i2));
Guido van Rossuma8275371995-07-18 14:07:00 +0000738
739 /*
740 Return the slice of sequence object o between i1 and i2, or
741 NULL on failure. This is the equivalent of the Python
742 expression: o[i1:i2].
743
744 */
745
Guido van Rossum43466ec1998-12-04 18:48:25 +0000746 DL_IMPORT(int) PySequence_SetItem Py_PROTO((PyObject *o, int i, PyObject *v));
Guido van Rossuma8275371995-07-18 14:07:00 +0000747
748 /*
749 Assign object v to the ith element of o. Returns
750 -1 on failure. This is the equivalent of the Python
751 statement: o[i]=v.
752
753 */
754
Guido van Rossum43466ec1998-12-04 18:48:25 +0000755 DL_IMPORT(int) PySequence_DelItem Py_PROTO((PyObject *o, int i));
Guido van Rossum6cdc6f41996-08-21 17:41:54 +0000756
757 /*
758 Delete the ith element of object v. Returns
759 -1 on failure. This is the equivalent of the Python
760 statement: del o[i].
761 */
762
Guido van Rossum43466ec1998-12-04 18:48:25 +0000763 DL_IMPORT(int) PySequence_SetSlice Py_PROTO((PyObject *o, int i1, int i2, PyObject *v));
Guido van Rossuma8275371995-07-18 14:07:00 +0000764
765 /*
766 Assign the sequence object, v, to the slice in sequence
767 object, o, from i1 to i2. Returns -1 on failure. This is the
768 equivalent of the Python statement: o[i1:i2]=v.
769 */
770
Guido van Rossum43466ec1998-12-04 18:48:25 +0000771 DL_IMPORT(int) PySequence_DelSlice Py_PROTO((PyObject *o, int i1, int i2));
Guido van Rossum6cdc6f41996-08-21 17:41:54 +0000772
773 /*
774 Delete the slice in sequence object, o, from i1 to i2.
775 Returns -1 on failure. This is the equivalent of the Python
776 statement: del o[i1:i2].
777 */
778
Guido van Rossum43466ec1998-12-04 18:48:25 +0000779 DL_IMPORT(PyObject *) PySequence_Tuple Py_PROTO((PyObject *o));
Guido van Rossuma8275371995-07-18 14:07:00 +0000780
781 /*
Guido van Rossumf39fc431997-03-04 18:31:47 +0000782 Returns the sequence, o, as a tuple on success, and NULL on failure.
Guido van Rossuma8275371995-07-18 14:07:00 +0000783 This is equivalent to the Python expression: tuple(o)
784 */
785
Guido van Rossum43466ec1998-12-04 18:48:25 +0000786 DL_IMPORT(PyObject *) PySequence_List Py_PROTO((PyObject *o));
Guido van Rossumf39fc431997-03-04 18:31:47 +0000787
Guido van Rossum2adf06b1996-12-05 21:48:50 +0000788 /*
Guido van Rossumf39fc431997-03-04 18:31:47 +0000789 Returns the sequence, o, as a list on success, and NULL on failure.
790 This is equivalent to the Python expression: list(o)
Guido van Rossum2adf06b1996-12-05 21:48:50 +0000791 */
Guido van Rossumf39fc431997-03-04 18:31:47 +0000792
Guido van Rossum43466ec1998-12-04 18:48:25 +0000793 DL_IMPORT(int) PySequence_Count Py_PROTO((PyObject *o, PyObject *value));
Guido van Rossuma8275371995-07-18 14:07:00 +0000794
795 /*
796 Return the number of occurrences on value on o, that is,
797 return the number of keys for which o[key]==value. On
798 failure, return -1. This is equivalent to the Python
799 expression: o.count(value).
800 */
801
Guido van Rossum43466ec1998-12-04 18:48:25 +0000802 DL_IMPORT(int) PySequence_Contains Py_PROTO((PyObject *o, PyObject *value));
Guido van Rossum83684531999-03-17 18:44:39 +0000803
804/* For DLL-level backwards compatibility */
805#undef PySequence_In
806 DL_IMPORT(int) PySequence_In Py_PROTO((PyObject *o, PyObject *value));
807
808/* For source-level backwards compatibility */
Guido van Rossumf1536db1998-08-23 22:06:59 +0000809#define PySequence_In PySequence_Contains
Guido van Rossuma8275371995-07-18 14:07:00 +0000810
811 /*
812 Determine if o contains value. If an item in o is equal to
813 X, return 1, otherwise return 0. On error, return -1. This
814 is equivalent to the Python expression: value in o.
815 */
816
Guido van Rossum43466ec1998-12-04 18:48:25 +0000817 DL_IMPORT(int) PySequence_Index Py_PROTO((PyObject *o, PyObject *value));
Guido van Rossuma8275371995-07-18 14:07:00 +0000818
819 /*
820 Return the first index for which o[i]=value. On error,
821 return -1. This is equivalent to the Python
822 expression: o.index(value).
823 */
824
825/* Mapping protocol:*/
826
Guido van Rossum43466ec1998-12-04 18:48:25 +0000827 DL_IMPORT(int) PyMapping_Check Py_PROTO((PyObject *o));
Guido van Rossuma8275371995-07-18 14:07:00 +0000828
829 /*
830 Return 1 if the object provides mapping protocol, and zero
831 otherwise.
832
833 This function always succeeds.
834 */
835
Guido van Rossum43466ec1998-12-04 18:48:25 +0000836 DL_IMPORT(int) PyMapping_Length Py_PROTO((PyObject *o));
Guido van Rossuma8275371995-07-18 14:07:00 +0000837
838 /*
839 Returns the number of keys in object o on success, and -1 on
840 failure. For objects that do not provide sequence protocol,
841 this is equivalent to the Python expression: len(o).
842 */
843
Guido van Rossuma25e5e91996-09-06 13:48:38 +0000844 /* implemented as a macro:
845
Guido van Rossum8ca687a1995-09-18 21:20:02 +0000846 int PyMapping_DelItemString Py_PROTO((PyObject *o, char *key));
Guido van Rossuma8275371995-07-18 14:07:00 +0000847
Guido van Rossuma8275371995-07-18 14:07:00 +0000848 Remove the mapping for object, key, from the object *o.
849 Returns -1 on failure. This is equivalent to
850 the Python statement: del o[key].
851 */
Guido van Rossuma25e5e91996-09-06 13:48:38 +0000852#define PyMapping_DelItemString(O,K) PyDict_DelItemString((O),(K))
853
854 /* implemented as a macro:
Guido van Rossuma8275371995-07-18 14:07:00 +0000855
Guido van Rossum8ca687a1995-09-18 21:20:02 +0000856 int PyMapping_DelItem Py_PROTO((PyObject *o, PyObject *key));
Guido van Rossuma8275371995-07-18 14:07:00 +0000857
Guido van Rossuma8275371995-07-18 14:07:00 +0000858 Remove the mapping for object, key, from the object *o.
859 Returns -1 on failure. This is equivalent to
860 the Python statement: del o[key].
861 */
Guido van Rossuma25e5e91996-09-06 13:48:38 +0000862#define PyMapping_DelItem(O,K) PyDict_DelItem((O),(K))
Guido van Rossuma8275371995-07-18 14:07:00 +0000863
Guido van Rossum43466ec1998-12-04 18:48:25 +0000864 DL_IMPORT(int) PyMapping_HasKeyString Py_PROTO((PyObject *o, char *key));
Guido van Rossuma8275371995-07-18 14:07:00 +0000865
866 /*
867 On success, return 1 if the mapping object has the key, key,
868 and 0 otherwise. This is equivalent to the Python expression:
869 o.has_key(key).
870
871 This function always succeeds.
872 */
873
Guido van Rossum43466ec1998-12-04 18:48:25 +0000874 DL_IMPORT(int) PyMapping_HasKey Py_PROTO((PyObject *o, PyObject *key));
Guido van Rossuma8275371995-07-18 14:07:00 +0000875
876 /*
877 Return 1 if the mapping object has the key, key,
878 and 0 otherwise. This is equivalent to the Python expression:
879 o.has_key(key).
880
881 This function always succeeds.
882
883 */
884
885 /* Implemented as macro:
886
887 PyObject *PyMapping_Keys(PyObject *o);
888
889 On success, return a list of the keys in object o. On
890 failure, return NULL. This is equivalent to the Python
891 expression: o.keys().
892 */
893#define PyMapping_Keys(O) PyObject_CallMethod(O,"keys",NULL)
894
895 /* Implemented as macro:
896
897 PyObject *PyMapping_Values(PyObject *o);
898
899 On success, return a list of the values in object o. On
900 failure, return NULL. This is equivalent to the Python
901 expression: o.values().
902 */
903#define PyMapping_Values(O) PyObject_CallMethod(O,"values",NULL)
904
905 /* Implemented as macro:
906
907 PyObject *PyMapping_Items(PyObject *o);
908
909 On success, return a list of the items in object o, where
910 each item is a tuple containing a key-value pair. On
911 failure, return NULL. This is equivalent to the Python
912 expression: o.items().
913
914 */
915#define PyMapping_Items(O) PyObject_CallMethod(O,"items",NULL)
916
Guido van Rossum43466ec1998-12-04 18:48:25 +0000917 DL_IMPORT(PyObject *) PyMapping_GetItemString Py_PROTO((PyObject *o, char *key));
Guido van Rossuma8275371995-07-18 14:07:00 +0000918
919 /*
920 Return element of o corresponding to the object, key, or NULL
921 on failure. This is the equivalent of the Python expression:
922 o[key].
923 */
924
Guido van Rossum43466ec1998-12-04 18:48:25 +0000925 DL_IMPORT(int) PyMapping_SetItemString Py_PROTO((PyObject *o, char *key,
Guido van Rossum8ca687a1995-09-18 21:20:02 +0000926 PyObject *value));
Guido van Rossuma8275371995-07-18 14:07:00 +0000927
928 /*
929 Map the object, key, to the value, v. Returns
930 -1 on failure. This is the equivalent of the Python
931 statement: o[key]=v.
932 */
933
934
Guido van Rossum8ca687a1995-09-18 21:20:02 +0000935#ifdef __cplusplus
936}
937#endif
Guido van Rossuma8275371995-07-18 14:07:00 +0000938#endif /* Py_ABSTRACTOBJECT_H */