1 /* Abstract Object Interface (many thanks to Jim Fulton) */ 2 3 #ifndef Py_ABSTRACTOBJECT_H 4 #define Py_ABSTRACTOBJECT_H 5 #ifdef __cplusplus 6 extern "C" { 7 #endif 8 9 /* === Object Protocol ================================================== */ 10 11 /* Implemented elsewhere: 12 13 int PyObject_Print(PyObject *o, FILE *fp, int flags); 14 15 Print an object 'o' on file 'fp'. Returns -1 on error. The flags argument 16 is used to enable certain printing options. The only option currently 17 supported is Py_Print_RAW. 18 19 (What should be said about Py_Print_RAW?). */ 20 21 22 /* Implemented elsewhere: 23 24 int PyObject_HasAttrString(PyObject *o, const char *attr_name); 25 26 Returns 1 if object 'o' has the attribute attr_name, and 0 otherwise. 27 28 This is equivalent to the Python expression: hasattr(o,attr_name). 29 30 This function always succeeds. */ 31 32 33 /* Implemented elsewhere: 34 35 PyObject* PyObject_GetAttrString(PyObject *o, const char *attr_name); 36 37 Retrieve an attributed named attr_name form object o. 38 Returns the attribute value on success, or NULL on failure. 39 40 This is the equivalent of the Python expression: o.attr_name. */ 41 42 43 /* Implemented elsewhere: 44 45 int PyObject_HasAttr(PyObject *o, PyObject *attr_name); 46 47 Returns 1 if o has the attribute attr_name, and 0 otherwise. 48 49 This is equivalent to the Python expression: hasattr(o,attr_name). 50 51 This function always succeeds. */ 52 53 /* Implemented elsewhere: 54 55 PyObject* PyObject_GetAttr(PyObject *o, PyObject *attr_name); 56 57 Retrieve an attributed named 'attr_name' form object 'o'. 58 Returns the attribute value on success, or NULL on failure. 59 60 This is the equivalent of the Python expression: o.attr_name. */ 61 62 63 /* Implemented elsewhere: 64 65 int PyObject_SetAttrString(PyObject *o, const char *attr_name, PyObject *v); 66 67 Set the value of the attribute named attr_name, for object 'o', 68 to the value 'v'. Raise an exception and return -1 on failure; return 0 on 69 success. 70 71 This is the equivalent of the Python statement o.attr_name=v. */ 72 73 74 /* Implemented elsewhere: 75 76 int PyObject_SetAttr(PyObject *o, PyObject *attr_name, PyObject *v); 77 78 Set the value of the attribute named attr_name, for object 'o', to the value 79 'v'. an exception and return -1 on failure; return 0 on success. 80 81 This is the equivalent of the Python statement o.attr_name=v. */ 82 83 /* Implemented as a macro: 84 85 int PyObject_DelAttrString(PyObject *o, const char *attr_name); 86 87 Delete attribute named attr_name, for object o. Returns 88 -1 on failure. 89 90 This is the equivalent of the Python statement: del o.attr_name. */ 91 #define PyObject_DelAttrString(O,A) PyObject_SetAttrString((O),(A), NULL) 92 93 94 /* Implemented as a macro: 95 96 int PyObject_DelAttr(PyObject *o, PyObject *attr_name); 97 98 Delete attribute named attr_name, for object o. Returns -1 99 on failure. This is the equivalent of the Python 100 statement: del o.attr_name. */ 101 #define PyObject_DelAttr(O,A) PyObject_SetAttr((O),(A), NULL) 102 103 104 /* Implemented elsewhere: 105 106 PyObject *PyObject_Repr(PyObject *o); 107 108 Compute the string representation of object 'o'. Returns the 109 string representation on success, NULL on failure. 110 111 This is the equivalent of the Python expression: repr(o). 112 113 Called by the repr() built-in function. */ 114 115 116 /* Implemented elsewhere: 117 118 PyObject *PyObject_Str(PyObject *o); 119 120 Compute the string representation of object, o. Returns the 121 string representation on success, NULL on failure. 122 123 This is the equivalent of the Python expression: str(o). 124 125 Called by the str() and print() built-in functions. */ 126 127 128 /* Declared elsewhere 129 130 PyAPI_FUNC(int) PyCallable_Check(PyObject *o); 131 132 Determine if the object, o, is callable. Return 1 if the object is callable 133 and 0 otherwise. 134 135 This function always succeeds. */ 136 137 138 #ifdef PY_SSIZE_T_CLEAN 139 # define PyObject_CallFunction _PyObject_CallFunction_SizeT 140 # define PyObject_CallMethod _PyObject_CallMethod_SizeT 141 #endif 142 143 144 #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03090000 145 /* Call a callable Python object without any arguments */ 146 PyAPI_FUNC(PyObject *) PyObject_CallNoArgs(PyObject *func); 147 #endif 148 149 150 /* Call a callable Python object 'callable' with arguments given by the 151 tuple 'args' and keywords arguments given by the dictionary 'kwargs'. 152 153 'args' must not be NULL, use an empty tuple if no arguments are 154 needed. If no named arguments are needed, 'kwargs' can be NULL. 155 156 This is the equivalent of the Python expression: 157 callable(*args, **kwargs). */ 158 PyAPI_FUNC(PyObject *) PyObject_Call(PyObject *callable, 159 PyObject *args, PyObject *kwargs); 160 161 162 /* Call a callable Python object 'callable', with arguments given by the 163 tuple 'args'. If no arguments are needed, then 'args' can be NULL. 164 165 Returns the result of the call on success, or NULL on failure. 166 167 This is the equivalent of the Python expression: 168 callable(*args). */ 169 PyAPI_FUNC(PyObject *) PyObject_CallObject(PyObject *callable, 170 PyObject *args); 171 172 /* Call a callable Python object, callable, with a variable number of C 173 arguments. The C arguments are described using a mkvalue-style format 174 string. 175 176 The format may be NULL, indicating that no arguments are provided. 177 178 Returns the result of the call on success, or NULL on failure. 179 180 This is the equivalent of the Python expression: 181 callable(arg1, arg2, ...). */ 182 PyAPI_FUNC(PyObject *) PyObject_CallFunction(PyObject *callable, 183 const char *format, ...); 184 185 /* Call the method named 'name' of object 'obj' with a variable number of 186 C arguments. The C arguments are described by a mkvalue format string. 187 188 The format can be NULL, indicating that no arguments are provided. 189 190 Returns the result of the call on success, or NULL on failure. 191 192 This is the equivalent of the Python expression: 193 obj.name(arg1, arg2, ...). */ 194 PyAPI_FUNC(PyObject *) PyObject_CallMethod(PyObject *obj, 195 const char *name, 196 const char *format, ...); 197 198 PyAPI_FUNC(PyObject *) _PyObject_CallFunction_SizeT(PyObject *callable, 199 const char *format, 200 ...); 201 202 PyAPI_FUNC(PyObject *) _PyObject_CallMethod_SizeT(PyObject *obj, 203 const char *name, 204 const char *format, 205 ...); 206 207 /* Call a callable Python object 'callable' with a variable number of C 208 arguments. The C arguments are provided as PyObject* values, terminated 209 by a NULL. 210 211 Returns the result of the call on success, or NULL on failure. 212 213 This is the equivalent of the Python expression: 214 callable(arg1, arg2, ...). */ 215 PyAPI_FUNC(PyObject *) PyObject_CallFunctionObjArgs(PyObject *callable, 216 ...); 217 218 /* Call the method named 'name' of object 'obj' with a variable number of 219 C arguments. The C arguments are provided as PyObject* values, terminated 220 by NULL. 221 222 Returns the result of the call on success, or NULL on failure. 223 224 This is the equivalent of the Python expression: obj.name(*args). */ 225 226 PyAPI_FUNC(PyObject *) PyObject_CallMethodObjArgs( 227 PyObject *obj, 228 PyObject *name, 229 ...); 230 231 232 /* Implemented elsewhere: 233 234 Py_hash_t PyObject_Hash(PyObject *o); 235 236 Compute and return the hash, hash_value, of an object, o. On 237 failure, return -1. 238 239 This is the equivalent of the Python expression: hash(o). */ 240 241 242 /* Implemented elsewhere: 243 244 int PyObject_IsTrue(PyObject *o); 245 246 Returns 1 if the object, o, is considered to be true, 0 if o is 247 considered to be false and -1 on failure. 248 249 This is equivalent to the Python expression: not not o. */ 250 251 252 /* Implemented elsewhere: 253 254 int PyObject_Not(PyObject *o); 255 256 Returns 0 if the object, o, is considered to be true, 1 if o is 257 considered to be false and -1 on failure. 258 259 This is equivalent to the Python expression: not o. */ 260 261 262 /* Get the type of an object. 263 264 On success, returns a type object corresponding to the object type of object 265 'o'. On failure, returns NULL. 266 267 This is equivalent to the Python expression: type(o) */ 268 PyAPI_FUNC(PyObject *) PyObject_Type(PyObject *o); 269 270 271 /* Return the size of object 'o'. If the object 'o' provides both sequence and 272 mapping protocols, the sequence size is returned. 273 274 On error, -1 is returned. 275 276 This is the equivalent to the Python expression: len(o) */ 277 PyAPI_FUNC(Py_ssize_t) PyObject_Size(PyObject *o); 278 279 280 /* For DLL compatibility */ 281 #undef PyObject_Length 282 PyAPI_FUNC(Py_ssize_t) PyObject_Length(PyObject *o); 283 #define PyObject_Length PyObject_Size 284 285 /* Return element of 'o' corresponding to the object 'key'. Return NULL 286 on failure. 287 288 This is the equivalent of the Python expression: o[key] */ 289 PyAPI_FUNC(PyObject *) PyObject_GetItem(PyObject *o, PyObject *key); 290 291 292 /* Map the object 'key' to the value 'v' into 'o'. 293 294 Raise an exception and return -1 on failure; return 0 on success. 295 296 This is the equivalent of the Python statement: o[key]=v. */ 297 PyAPI_FUNC(int) PyObject_SetItem(PyObject *o, PyObject *key, PyObject *v); 298 299 /* Remove the mapping for the string 'key' from the object 'o'. 300 Returns -1 on failure. 301 302 This is equivalent to the Python statement: del o[key]. */ 303 PyAPI_FUNC(int) PyObject_DelItemString(PyObject *o, const char *key); 304 305 /* Delete the mapping for the object 'key' from the object 'o'. 306 Returns -1 on failure. 307 308 This is the equivalent of the Python statement: del o[key]. */ 309 PyAPI_FUNC(int) PyObject_DelItem(PyObject *o, PyObject *key); 310 311 312 /* === Old Buffer API ============================================ */ 313 314 /* FIXME: usage of these should all be replaced in Python itself 315 but for backwards compatibility we will implement them. 316 Their usage without a corresponding "unlock" mechanism 317 may create issues (but they would already be there). */ 318 319 /* Takes an arbitrary object which must support the (character, single segment) 320 buffer interface and returns a pointer to a read-only memory location 321 usable as character based input for subsequent processing. 322 323 Return 0 on success. buffer and buffer_len are only set in case no error 324 occurs. Otherwise, -1 is returned and an exception set. */ 325 Py_DEPRECATED(3.0) 326 PyAPI_FUNC(int) PyObject_AsCharBuffer(PyObject *obj, 327 const char **buffer, 328 Py_ssize_t *buffer_len); 329 330 /* Checks whether an arbitrary object supports the (character, single segment) 331 buffer interface. 332 333 Returns 1 on success, 0 on failure. */ 334 Py_DEPRECATED(3.0) PyAPI_FUNC(int) PyObject_CheckReadBuffer(PyObject *obj); 335 336 /* Same as PyObject_AsCharBuffer() except that this API expects (readable, 337 single segment) buffer interface and returns a pointer to a read-only memory 338 location which can contain arbitrary data. 339 340 0 is returned on success. buffer and buffer_len are only set in case no 341 error occurs. Otherwise, -1 is returned and an exception set. */ 342 Py_DEPRECATED(3.0) 343 PyAPI_FUNC(int) PyObject_AsReadBuffer(PyObject *obj, 344 const void **buffer, 345 Py_ssize_t *buffer_len); 346 347 /* Takes an arbitrary object which must support the (writable, single segment) 348 buffer interface and returns a pointer to a writable memory location in 349 buffer of size 'buffer_len'. 350 351 Return 0 on success. buffer and buffer_len are only set in case no error 352 occurs. Otherwise, -1 is returned and an exception set. */ 353 Py_DEPRECATED(3.0) 354 PyAPI_FUNC(int) PyObject_AsWriteBuffer(PyObject *obj, 355 void **buffer, 356 Py_ssize_t *buffer_len); 357 358 359 /* === New Buffer API ============================================ */ 360 361 /* Takes an arbitrary object and returns the result of calling 362 obj.__format__(format_spec). */ 363 PyAPI_FUNC(PyObject *) PyObject_Format(PyObject *obj, 364 PyObject *format_spec); 365 366 367 /* ==== Iterators ================================================ */ 368 369 /* Takes an object and returns an iterator for it. 370 This is typically a new iterator but if the argument is an iterator, this 371 returns itself. */ 372 PyAPI_FUNC(PyObject *) PyObject_GetIter(PyObject *); 373 374 /* Takes an AsyncIterable object and returns an AsyncIterator for it. 375 This is typically a new iterator but if the argument is an AsyncIterator, 376 this returns itself. */ 377 PyAPI_FUNC(PyObject *) PyObject_GetAIter(PyObject *); 378 379 /* Returns non-zero if the object 'obj' provides iterator protocols, and 0 otherwise. 380 381 This function always succeeds. */ 382 PyAPI_FUNC(int) PyIter_Check(PyObject *); 383 384 /* Returns non-zero if the object 'obj' provides AsyncIterator protocols, and 0 otherwise. 385 386 This function always succeeds. */ 387 PyAPI_FUNC(int) PyAIter_Check(PyObject *); 388 389 /* Takes an iterator object and calls its tp_iternext slot, 390 returning the next value. 391 392 If the iterator is exhausted, this returns NULL without setting an 393 exception. 394 395 NULL with an exception means an error occurred. */ 396 PyAPI_FUNC(PyObject *) PyIter_Next(PyObject *); 397 398 #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030A0000 399 400 /* Takes generator, coroutine or iterator object and sends the value into it. 401 Returns: 402 - PYGEN_RETURN (0) if generator has returned. 403 'result' parameter is filled with return value 404 - PYGEN_ERROR (-1) if exception was raised. 405 'result' parameter is NULL 406 - PYGEN_NEXT (1) if generator has yielded. 407 'result' parameter is filled with yielded value. */ 408 PyAPI_FUNC(PySendResult) PyIter_Send(PyObject *, PyObject *, PyObject **); 409 #endif 410 411 412 /* === Number Protocol ================================================== */ 413 414 /* Returns 1 if the object 'o' provides numeric protocols, and 0 otherwise. 415 416 This function always succeeds. */ 417 PyAPI_FUNC(int) PyNumber_Check(PyObject *o); 418 419 /* Returns the result of adding o1 and o2, or NULL on failure. 420 421 This is the equivalent of the Python expression: o1 + o2. */ 422 PyAPI_FUNC(PyObject *) PyNumber_Add(PyObject *o1, PyObject *o2); 423 424 /* Returns the result of subtracting o2 from o1, or NULL on failure. 425 426 This is the equivalent of the Python expression: o1 - o2. */ 427 PyAPI_FUNC(PyObject *) PyNumber_Subtract(PyObject *o1, PyObject *o2); 428 429 /* Returns the result of multiplying o1 and o2, or NULL on failure. 430 431 This is the equivalent of the Python expression: o1 * o2. */ 432 PyAPI_FUNC(PyObject *) PyNumber_Multiply(PyObject *o1, PyObject *o2); 433 434 #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000 435 /* This is the equivalent of the Python expression: o1 @ o2. */ 436 PyAPI_FUNC(PyObject *) PyNumber_MatrixMultiply(PyObject *o1, PyObject *o2); 437 #endif 438 439 /* Returns the result of dividing o1 by o2 giving an integral result, 440 or NULL on failure. 441 442 This is the equivalent of the Python expression: o1 // o2. */ 443 PyAPI_FUNC(PyObject *) PyNumber_FloorDivide(PyObject *o1, PyObject *o2); 444 445 /* Returns the result of dividing o1 by o2 giving a float result, or NULL on 446 failure. 447 448 This is the equivalent of the Python expression: o1 / o2. */ 449 PyAPI_FUNC(PyObject *) PyNumber_TrueDivide(PyObject *o1, PyObject *o2); 450 451 /* Returns the remainder of dividing o1 by o2, or NULL on failure. 452 453 This is the equivalent of the Python expression: o1 % o2. */ 454 PyAPI_FUNC(PyObject *) PyNumber_Remainder(PyObject *o1, PyObject *o2); 455 456 /* See the built-in function divmod. 457 458 Returns NULL on failure. 459 460 This is the equivalent of the Python expression: divmod(o1, o2). */ 461 PyAPI_FUNC(PyObject *) PyNumber_Divmod(PyObject *o1, PyObject *o2); 462 463 /* See the built-in function pow. Returns NULL on failure. 464 465 This is the equivalent of the Python expression: pow(o1, o2, o3), 466 where o3 is optional. */ 467 PyAPI_FUNC(PyObject *) PyNumber_Power(PyObject *o1, PyObject *o2, 468 PyObject *o3); 469 470 /* Returns the negation of o on success, or NULL on failure. 471 472 This is the equivalent of the Python expression: -o. */ 473 PyAPI_FUNC(PyObject *) PyNumber_Negative(PyObject *o); 474 475 /* Returns the positive of o on success, or NULL on failure. 476 477 This is the equivalent of the Python expression: +o. */ 478 PyAPI_FUNC(PyObject *) PyNumber_Positive(PyObject *o); 479 480 /* Returns the absolute value of 'o', or NULL on failure. 481 482 This is the equivalent of the Python expression: abs(o). */ 483 PyAPI_FUNC(PyObject *) PyNumber_Absolute(PyObject *o); 484 485 /* Returns the bitwise negation of 'o' on success, or NULL on failure. 486 487 This is the equivalent of the Python expression: ~o. */ 488 PyAPI_FUNC(PyObject *) PyNumber_Invert(PyObject *o); 489 490 /* Returns the result of left shifting o1 by o2 on success, or NULL on failure. 491 492 This is the equivalent of the Python expression: o1 << o2. */ 493 PyAPI_FUNC(PyObject *) PyNumber_Lshift(PyObject *o1, PyObject *o2); 494 495 /* Returns the result of right shifting o1 by o2 on success, or NULL on 496 failure. 497 498 This is the equivalent of the Python expression: o1 >> o2. */ 499 PyAPI_FUNC(PyObject *) PyNumber_Rshift(PyObject *o1, PyObject *o2); 500 501 /* Returns the result of bitwise and of o1 and o2 on success, or NULL on 502 failure. 503 504 This is the equivalent of the Python expression: o1 & o2. */ 505 PyAPI_FUNC(PyObject *) PyNumber_And(PyObject *o1, PyObject *o2); 506 507 /* Returns the bitwise exclusive or of o1 by o2 on success, or NULL on failure. 508 509 This is the equivalent of the Python expression: o1 ^ o2. */ 510 PyAPI_FUNC(PyObject *) PyNumber_Xor(PyObject *o1, PyObject *o2); 511 512 /* Returns the result of bitwise or on o1 and o2 on success, or NULL on 513 failure. 514 515 This is the equivalent of the Python expression: o1 | o2. */ 516 PyAPI_FUNC(PyObject *) PyNumber_Or(PyObject *o1, PyObject *o2); 517 518 /* Returns 1 if obj is an index integer (has the nb_index slot of the 519 tp_as_number structure filled in), and 0 otherwise. */ 520 PyAPI_FUNC(int) PyIndex_Check(PyObject *); 521 522 /* Returns the object 'o' converted to a Python int, or NULL with an exception 523 raised on failure. */ 524 PyAPI_FUNC(PyObject *) PyNumber_Index(PyObject *o); 525 526 /* Returns the object 'o' converted to Py_ssize_t by going through 527 PyNumber_Index() first. 528 529 If an overflow error occurs while converting the int to Py_ssize_t, then the 530 second argument 'exc' is the error-type to return. If it is NULL, then the 531 overflow error is cleared and the value is clipped. */ 532 PyAPI_FUNC(Py_ssize_t) PyNumber_AsSsize_t(PyObject *o, PyObject *exc); 533 534 /* Returns the object 'o' converted to an integer object on success, or NULL 535 on failure. 536 537 This is the equivalent of the Python expression: int(o). */ 538 PyAPI_FUNC(PyObject *) PyNumber_Long(PyObject *o); 539 540 /* Returns the object 'o' converted to a float object on success, or NULL 541 on failure. 542 543 This is the equivalent of the Python expression: float(o). */ 544 PyAPI_FUNC(PyObject *) PyNumber_Float(PyObject *o); 545 546 547 /* --- In-place variants of (some of) the above number protocol functions -- */ 548 549 /* Returns the result of adding o2 to o1, possibly in-place, or NULL 550 on failure. 551 552 This is the equivalent of the Python expression: o1 += o2. */ 553 PyAPI_FUNC(PyObject *) PyNumber_InPlaceAdd(PyObject *o1, PyObject *o2); 554 555 /* Returns the result of subtracting o2 from o1, possibly in-place or 556 NULL on failure. 557 558 This is the equivalent of the Python expression: o1 -= o2. */ 559 PyAPI_FUNC(PyObject *) PyNumber_InPlaceSubtract(PyObject *o1, PyObject *o2); 560 561 /* Returns the result of multiplying o1 by o2, possibly in-place, or NULL on 562 failure. 563 564 This is the equivalent of the Python expression: o1 *= o2. */ 565 PyAPI_FUNC(PyObject *) PyNumber_InPlaceMultiply(PyObject *o1, PyObject *o2); 566 567 #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000 568 /* This is the equivalent of the Python expression: o1 @= o2. */ 569 PyAPI_FUNC(PyObject *) PyNumber_InPlaceMatrixMultiply(PyObject *o1, PyObject *o2); 570 #endif 571 572 /* Returns the result of dividing o1 by o2 giving an integral result, possibly 573 in-place, or NULL on failure. 574 575 This is the equivalent of the Python expression: o1 /= o2. */ 576 PyAPI_FUNC(PyObject *) PyNumber_InPlaceFloorDivide(PyObject *o1, 577 PyObject *o2); 578 579 /* Returns the result of dividing o1 by o2 giving a float result, possibly 580 in-place, or null on failure. 581 582 This is the equivalent of the Python expression: o1 /= o2. */ 583 PyAPI_FUNC(PyObject *) PyNumber_InPlaceTrueDivide(PyObject *o1, 584 PyObject *o2); 585 586 /* Returns the remainder of dividing o1 by o2, possibly in-place, or NULL on 587 failure. 588 589 This is the equivalent of the Python expression: o1 %= o2. */ 590 PyAPI_FUNC(PyObject *) PyNumber_InPlaceRemainder(PyObject *o1, PyObject *o2); 591 592 /* Returns the result of raising o1 to the power of o2, possibly in-place, 593 or NULL on failure. 594 595 This is the equivalent of the Python expression: o1 **= o2, 596 or o1 = pow(o1, o2, o3) if o3 is present. */ 597 PyAPI_FUNC(PyObject *) PyNumber_InPlacePower(PyObject *o1, PyObject *o2, 598 PyObject *o3); 599 600 /* Returns the result of left shifting o1 by o2, possibly in-place, or NULL 601 on failure. 602 603 This is the equivalent of the Python expression: o1 <<= o2. */ 604 PyAPI_FUNC(PyObject *) PyNumber_InPlaceLshift(PyObject *o1, PyObject *o2); 605 606 /* Returns the result of right shifting o1 by o2, possibly in-place or NULL 607 on failure. 608 609 This is the equivalent of the Python expression: o1 >>= o2. */ 610 PyAPI_FUNC(PyObject *) PyNumber_InPlaceRshift(PyObject *o1, PyObject *o2); 611 612 /* Returns the result of bitwise and of o1 and o2, possibly in-place, or NULL 613 on failure. 614 615 This is the equivalent of the Python expression: o1 &= o2. */ 616 PyAPI_FUNC(PyObject *) PyNumber_InPlaceAnd(PyObject *o1, PyObject *o2); 617 618 /* Returns the bitwise exclusive or of o1 by o2, possibly in-place, or NULL 619 on failure. 620 621 This is the equivalent of the Python expression: o1 ^= o2. */ 622 PyAPI_FUNC(PyObject *) PyNumber_InPlaceXor(PyObject *o1, PyObject *o2); 623 624 /* Returns the result of bitwise or of o1 and o2, possibly in-place, 625 or NULL on failure. 626 627 This is the equivalent of the Python expression: o1 |= o2. */ 628 PyAPI_FUNC(PyObject *) PyNumber_InPlaceOr(PyObject *o1, PyObject *o2); 629 630 /* Returns the integer n converted to a string with a base, with a base 631 marker of 0b, 0o or 0x prefixed if applicable. 632 633 If n is not an int object, it is converted with PyNumber_Index first. */ 634 PyAPI_FUNC(PyObject *) PyNumber_ToBase(PyObject *n, int base); 635 636 637 /* === Sequence protocol ================================================ */ 638 639 /* Return 1 if the object provides sequence protocol, and zero 640 otherwise. 641 642 This function always succeeds. */ 643 PyAPI_FUNC(int) PySequence_Check(PyObject *o); 644 645 /* Return the size of sequence object o, or -1 on failure. */ 646 PyAPI_FUNC(Py_ssize_t) PySequence_Size(PyObject *o); 647 648 /* For DLL compatibility */ 649 #undef PySequence_Length 650 PyAPI_FUNC(Py_ssize_t) PySequence_Length(PyObject *o); 651 #define PySequence_Length PySequence_Size 652 653 654 /* Return the concatenation of o1 and o2 on success, and NULL on failure. 655 656 This is the equivalent of the Python expression: o1 + o2. */ 657 PyAPI_FUNC(PyObject *) PySequence_Concat(PyObject *o1, PyObject *o2); 658 659 /* Return the result of repeating sequence object 'o' 'count' times, 660 or NULL on failure. 661 662 This is the equivalent of the Python expression: o * count. */ 663 PyAPI_FUNC(PyObject *) PySequence_Repeat(PyObject *o, Py_ssize_t count); 664 665 /* Return the ith element of o, or NULL on failure. 666 667 This is the equivalent of the Python expression: o[i]. */ 668 PyAPI_FUNC(PyObject *) PySequence_GetItem(PyObject *o, Py_ssize_t i); 669 670 /* Return the slice of sequence object o between i1 and i2, or NULL on failure. 671 672 This is the equivalent of the Python expression: o[i1:i2]. */ 673 PyAPI_FUNC(PyObject *) PySequence_GetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2); 674 675 /* Assign object 'v' to the ith element of the sequence 'o'. Raise an exception 676 and return -1 on failure; return 0 on success. 677 678 This is the equivalent of the Python statement o[i] = v. */ 679 PyAPI_FUNC(int) PySequence_SetItem(PyObject *o, Py_ssize_t i, PyObject *v); 680 681 /* Delete the 'i'-th element of the sequence 'v'. Returns -1 on failure. 682 683 This is the equivalent of the Python statement: del o[i]. */ 684 PyAPI_FUNC(int) PySequence_DelItem(PyObject *o, Py_ssize_t i); 685 686 /* Assign the sequence object 'v' to the slice in sequence object 'o', 687 from 'i1' to 'i2'. Returns -1 on failure. 688 689 This is the equivalent of the Python statement: o[i1:i2] = v. */ 690 PyAPI_FUNC(int) PySequence_SetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2, 691 PyObject *v); 692 693 /* Delete the slice in sequence object 'o' from 'i1' to 'i2'. 694 Returns -1 on failure. 695 696 This is the equivalent of the Python statement: del o[i1:i2]. */ 697 PyAPI_FUNC(int) PySequence_DelSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2); 698 699 /* Returns the sequence 'o' as a tuple on success, and NULL on failure. 700 701 This is equivalent to the Python expression: tuple(o). */ 702 PyAPI_FUNC(PyObject *) PySequence_Tuple(PyObject *o); 703 704 /* Returns the sequence 'o' as a list on success, and NULL on failure. 705 This is equivalent to the Python expression: list(o) */ 706 PyAPI_FUNC(PyObject *) PySequence_List(PyObject *o); 707 708 /* Return the sequence 'o' as a list, unless it's already a tuple or list. 709 710 Use PySequence_Fast_GET_ITEM to access the members of this list, and 711 PySequence_Fast_GET_SIZE to get its length. 712 713 Returns NULL on failure. If the object does not support iteration, raises a 714 TypeError exception with 'm' as the message text. */ 715 PyAPI_FUNC(PyObject *) PySequence_Fast(PyObject *o, const char* m); 716 717 /* Return the size of the sequence 'o', assuming that 'o' was returned by 718 PySequence_Fast and is not NULL. */ 719 #define PySequence_Fast_GET_SIZE(o) \ 720 (PyList_Check(o) ? PyList_GET_SIZE(o) : PyTuple_GET_SIZE(o)) 721 722 /* Return the 'i'-th element of the sequence 'o', assuming that o was returned 723 by PySequence_Fast, and that i is within bounds. */ 724 #define PySequence_Fast_GET_ITEM(o, i)\ 725 (PyList_Check(o) ? PyList_GET_ITEM(o, i) : PyTuple_GET_ITEM(o, i)) 726 727 /* Return a pointer to the underlying item array for 728 an object returned by PySequence_Fast */ 729 #define PySequence_Fast_ITEMS(sf) \ 730 (PyList_Check(sf) ? ((PyListObject *)(sf))->ob_item \ 731 : ((PyTupleObject *)(sf))->ob_item) 732 733 /* Return the number of occurrences on value on 'o', that is, return 734 the number of keys for which o[key] == value. 735 736 On failure, return -1. This is equivalent to the Python expression: 737 o.count(value). */ 738 PyAPI_FUNC(Py_ssize_t) PySequence_Count(PyObject *o, PyObject *value); 739 740 /* Return 1 if 'ob' is in the sequence 'seq'; 0 if 'ob' is not in the sequence 741 'seq'; -1 on error. 742 743 Use __contains__ if possible, else _PySequence_IterSearch(). */ 744 PyAPI_FUNC(int) PySequence_Contains(PyObject *seq, PyObject *ob); 745 746 /* For DLL-level backwards compatibility */ 747 #undef PySequence_In 748 /* Determine if the sequence 'o' contains 'value'. If an item in 'o' is equal 749 to 'value', return 1, otherwise return 0. On error, return -1. 750 751 This is equivalent to the Python expression: value in o. */ 752 PyAPI_FUNC(int) PySequence_In(PyObject *o, PyObject *value); 753 754 /* For source-level backwards compatibility */ 755 #define PySequence_In PySequence_Contains 756 757 758 /* Return the first index for which o[i] == value. 759 On error, return -1. 760 761 This is equivalent to the Python expression: o.index(value). */ 762 PyAPI_FUNC(Py_ssize_t) PySequence_Index(PyObject *o, PyObject *value); 763 764 765 /* --- In-place versions of some of the above Sequence functions --- */ 766 767 /* Append sequence 'o2' to sequence 'o1', in-place when possible. Return the 768 resulting object, which could be 'o1', or NULL on failure. 769 770 This is the equivalent of the Python expression: o1 += o2. */ 771 PyAPI_FUNC(PyObject *) PySequence_InPlaceConcat(PyObject *o1, PyObject *o2); 772 773 /* Repeat sequence 'o' by 'count', in-place when possible. Return the resulting 774 object, which could be 'o', or NULL on failure. 775 776 This is the equivalent of the Python expression: o1 *= count. */ 777 PyAPI_FUNC(PyObject *) PySequence_InPlaceRepeat(PyObject *o, Py_ssize_t count); 778 779 780 /* === Mapping protocol ================================================= */ 781 782 /* Return 1 if the object provides mapping protocol, and 0 otherwise. 783 784 This function always succeeds. */ 785 PyAPI_FUNC(int) PyMapping_Check(PyObject *o); 786 787 /* Returns the number of keys in mapping object 'o' on success, and -1 on 788 failure. This is equivalent to the Python expression: len(o). */ 789 PyAPI_FUNC(Py_ssize_t) PyMapping_Size(PyObject *o); 790 791 /* For DLL compatibility */ 792 #undef PyMapping_Length 793 PyAPI_FUNC(Py_ssize_t) PyMapping_Length(PyObject *o); 794 #define PyMapping_Length PyMapping_Size 795 796 797 /* Implemented as a macro: 798 799 int PyMapping_DelItemString(PyObject *o, const char *key); 800 801 Remove the mapping for the string 'key' from the mapping 'o'. Returns -1 on 802 failure. 803 804 This is equivalent to the Python statement: del o[key]. */ 805 #define PyMapping_DelItemString(O,K) PyObject_DelItemString((O),(K)) 806 807 /* Implemented as a macro: 808 809 int PyMapping_DelItem(PyObject *o, PyObject *key); 810 811 Remove the mapping for the object 'key' from the mapping object 'o'. 812 Returns -1 on failure. 813 814 This is equivalent to the Python statement: del o[key]. */ 815 #define PyMapping_DelItem(O,K) PyObject_DelItem((O),(K)) 816 817 /* On success, return 1 if the mapping object 'o' has the key 'key', 818 and 0 otherwise. 819 820 This is equivalent to the Python expression: key in o. 821 822 This function always succeeds. */ 823 PyAPI_FUNC(int) PyMapping_HasKeyString(PyObject *o, const char *key); 824 825 /* Return 1 if the mapping object has the key 'key', and 0 otherwise. 826 827 This is equivalent to the Python expression: key in o. 828 829 This function always succeeds. */ 830 PyAPI_FUNC(int) PyMapping_HasKey(PyObject *o, PyObject *key); 831 832 /* On success, return a list or tuple of the keys in mapping object 'o'. 833 On failure, return NULL. */ 834 PyAPI_FUNC(PyObject *) PyMapping_Keys(PyObject *o); 835 836 /* On success, return a list or tuple of the values in mapping object 'o'. 837 On failure, return NULL. */ 838 PyAPI_FUNC(PyObject *) PyMapping_Values(PyObject *o); 839 840 /* On success, return a list or tuple of the items in mapping object 'o', 841 where each item is a tuple containing a key-value pair. On failure, return 842 NULL. */ 843 PyAPI_FUNC(PyObject *) PyMapping_Items(PyObject *o); 844 845 /* Return element of 'o' corresponding to the string 'key' or NULL on failure. 846 847 This is the equivalent of the Python expression: o[key]. */ 848 PyAPI_FUNC(PyObject *) PyMapping_GetItemString(PyObject *o, 849 const char *key); 850 851 /* Map the string 'key' to the value 'v' in the mapping 'o'. 852 Returns -1 on failure. 853 854 This is the equivalent of the Python statement: o[key]=v. */ 855 PyAPI_FUNC(int) PyMapping_SetItemString(PyObject *o, const char *key, 856 PyObject *value); 857 858 /* isinstance(object, typeorclass) */ 859 PyAPI_FUNC(int) PyObject_IsInstance(PyObject *object, PyObject *typeorclass); 860 861 /* issubclass(object, typeorclass) */ 862 PyAPI_FUNC(int) PyObject_IsSubclass(PyObject *object, PyObject *typeorclass); 863 864 #ifndef Py_LIMITED_API 865 # define Py_CPYTHON_ABSTRACTOBJECT_H 866 # include "cpython/abstract.h" 867 # undef Py_CPYTHON_ABSTRACTOBJECT_H 868 #endif 869 870 #ifdef __cplusplus 871 } 872 #endif 873 #endif /* Py_ABSTRACTOBJECT_H */ 874