symbian-qemu-0.9.1-12/python-2.6.1/Include/abstract.h
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 #ifndef Py_ABSTRACTOBJECT_H
       
     2 #define Py_ABSTRACTOBJECT_H
       
     3 #ifdef __cplusplus
       
     4 extern "C" {
       
     5 #endif
       
     6 
       
     7 #ifdef PY_SSIZE_T_CLEAN
       
     8 #define PyObject_CallFunction _PyObject_CallFunction_SizeT
       
     9 #define PyObject_CallMethod _PyObject_CallMethod_SizeT
       
    10 #endif
       
    11 
       
    12 /* Abstract Object Interface (many thanks to Jim Fulton) */
       
    13 
       
    14 /*
       
    15    PROPOSAL: A Generic Python Object Interface for Python C Modules
       
    16 
       
    17 Problem
       
    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 
       
    49 Proposal
       
    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 
       
    56   From the viewpoint of C access to Python services, we have (as
       
    57   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
       
    76     documented by the collection of include files provided with the
       
    77     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 
       
   103 Memory 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 
       
   126 Protocols
       
   127 
       
   128 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/
       
   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 
       
   231      PyAPI_FUNC(int) PyObject_Cmp(PyObject *o1, PyObject *o2, int *result);
       
   232 
       
   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 
       
   279      /* 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 
       
   291        /* Declared elsewhere
       
   292 
       
   293      PyAPI_FUNC(int) PyCallable_Check(PyObject *o);
       
   294 
       
   295 	 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 
       
   303 
       
   304      PyAPI_FUNC(PyObject *) PyObject_Call(PyObject *callable_object,
       
   305 					 PyObject *args, PyObject *kw);
       
   306 
       
   307        /*
       
   308 	 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        */
       
   313      
       
   314      PyAPI_FUNC(PyObject *) PyObject_CallObject(PyObject *callable_object,
       
   315                                                PyObject *args);
       
   316 
       
   317        /*
       
   318 	 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 
       
   326      PyAPI_FUNC(PyObject *) PyObject_CallFunction(PyObject *callable_object,
       
   327                                                  char *format, ...);
       
   328 
       
   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 
       
   340      PyAPI_FUNC(PyObject *) PyObject_CallMethod(PyObject *o, char *m,
       
   341                                                char *format, ...);
       
   342 
       
   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).
       
   350        */
       
   351 
       
   352      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, ...);
       
   357 
       
   358      PyAPI_FUNC(PyObject *) PyObject_CallFunctionObjArgs(PyObject *callable,
       
   359                                                         ...);
       
   360 
       
   361        /*
       
   362 	 Call a callable Python object, callable_object, with a
       
   363 	 variable number of C arguments.  The C arguments are provided
       
   364 	 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).
       
   367        */
       
   368 
       
   369 
       
   370      PyAPI_FUNC(PyObject *) PyObject_CallMethodObjArgs(PyObject *o,
       
   371                                                       PyObject *m, ...);
       
   372 
       
   373        /*
       
   374 	 Call the method named m of object o with a variable number of
       
   375 	 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).
       
   379        */
       
   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 
       
   397 	 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
       
   400 
       
   401        */
       
   402 
       
   403      /* Implemented elsewhere:
       
   404 
       
   405      int PyObject_Not(PyObject *o);
       
   406 
       
   407 	 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
       
   410 
       
   411        */
       
   412 
       
   413      PyAPI_FUNC(PyObject *) PyObject_Type(PyObject *o);
       
   414 
       
   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 
       
   421      PyAPI_FUNC(Py_ssize_t) PyObject_Size(PyObject *o);
       
   422 
       
   423        /*
       
   424          Return the size of object o.  If the object, o, provides
       
   425 	 both sequence and mapping protocols, the sequence size is
       
   426 	 returned. On error, -1 is returned.  This is the equivalent
       
   427 	 to the Python expression: len(o).
       
   428 
       
   429        */
       
   430 
       
   431        /* For DLL compatibility */
       
   432 #undef PyObject_Length
       
   433      PyAPI_FUNC(Py_ssize_t) PyObject_Length(PyObject *o);
       
   434 #define PyObject_Length PyObject_Size
       
   435 
       
   436      PyAPI_FUNC(Py_ssize_t) _PyObject_LengthHint(PyObject *o, Py_ssize_t);
       
   437 
       
   438        /*
       
   439          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.
       
   442        */
       
   443 
       
   444      PyAPI_FUNC(PyObject *) PyObject_GetItem(PyObject *o, PyObject *key);
       
   445 
       
   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 
       
   453      PyAPI_FUNC(int) PyObject_SetItem(PyObject *o, PyObject *key, PyObject *v);
       
   454 
       
   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 
       
   461      PyAPI_FUNC(int) PyObject_DelItemString(PyObject *o, char *key);
       
   462 
       
   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 
       
   469      PyAPI_FUNC(int) PyObject_DelItem(PyObject *o, PyObject *key);
       
   470 
       
   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 
       
   476      PyAPI_FUNC(int) PyObject_AsCharBuffer(PyObject *obj,
       
   477 					  const char **buffer,
       
   478 					  Py_ssize_t *buffer_len);
       
   479 
       
   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
       
   487 	  set in case no error occurs. Otherwise, -1 is returned and
       
   488 	  an exception set.
       
   489 
       
   490        */
       
   491 
       
   492      PyAPI_FUNC(int) PyObject_CheckReadBuffer(PyObject *obj);
       
   493 
       
   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 
       
   501      PyAPI_FUNC(int) PyObject_AsReadBuffer(PyObject *obj,
       
   502 					  const void **buffer,
       
   503 					  Py_ssize_t *buffer_len);
       
   504 
       
   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 
       
   517      PyAPI_FUNC(int) PyObject_AsWriteBuffer(PyObject *obj,
       
   518 					   void **buffer,
       
   519 					   Py_ssize_t *buffer_len);
       
   520 
       
   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        */
       
   531 
       
   532 	/* new buffer API */
       
   533 
       
   534 #define PyObject_CheckBuffer(obj) \
       
   535 	(((obj)->ob_type->tp_as_buffer != NULL) &&			\
       
   536 	 (PyType_HasFeature((obj)->ob_type, Py_TPFLAGS_HAVE_NEWBUFFER)) && \
       
   537 	 ((obj)->ob_type->tp_as_buffer->bf_getbuffer != NULL))
       
   538 			    
       
   539 	/* Return 1 if the getbuffer function is available, otherwise 
       
   540 	   return 0 */
       
   541 
       
   542      PyAPI_FUNC(int) PyObject_GetBuffer(PyObject *obj, Py_buffer *view, 
       
   543 					int flags);
       
   544 
       
   545 	/* This is a C-API version of the getbuffer function call.  It checks
       
   546        	   to make sure object has the required function pointer and issues the
       
   547 	   call.  Returns -1 and raises an error on failure and returns 0 on 
       
   548 	   success
       
   549         */
       
   550 
       
   551 
       
   552      PyAPI_FUNC(void *) PyBuffer_GetPointer(Py_buffer *view, Py_ssize_t *indices);
       
   553         
       
   554         /* Get the memory area pointed to by the indices for the buffer given. 
       
   555            Note that view->ndim is the assumed size of indices 
       
   556         */
       
   557 
       
   558      PyAPI_FUNC(int) PyBuffer_SizeFromFormat(const char *);
       
   559 		
       
   560 	/* Return the implied itemsize of the data-format area from a 
       
   561 	   struct-style description */
       
   562     
       
   563 
       
   564 	
       
   565      PyAPI_FUNC(int) PyBuffer_ToContiguous(void *buf, Py_buffer *view,
       
   566     					   Py_ssize_t len, char fort);
       
   567 
       
   568      PyAPI_FUNC(int) PyBuffer_FromContiguous(Py_buffer *view, void *buf, 
       
   569     					     Py_ssize_t len, char fort);
       
   570 
       
   571 
       
   572 	/* Copy len bytes of data from the contiguous chunk of memory
       
   573 	   pointed to by buf into the buffer exported by obj.  Return
       
   574 	   0 on success and return -1 and raise a PyBuffer_Error on
       
   575 	   error (i.e. the object does not have a buffer interface or
       
   576 	   it is not working).
       
   577 
       
   578 	   If fort is 'F' and the object is multi-dimensional,
       
   579 	   then the data will be copied into the array in
       
   580 	   Fortran-style (first dimension varies the fastest).  If
       
   581 	   fort is 'C', then the data will be copied into the array
       
   582 	   in C-style (last dimension varies the fastest).  If fort
       
   583 	   is 'A', then it does not matter and the copy will be made
       
   584 	   in whatever way is more efficient.
       
   585 
       
   586         */
       
   587 
       
   588      PyAPI_FUNC(int) PyObject_CopyData(PyObject *dest, PyObject *src);
       
   589         
       
   590         /* Copy the data from the src buffer to the buffer of destination
       
   591          */
       
   592 
       
   593      PyAPI_FUNC(int) PyBuffer_IsContiguous(Py_buffer *view, char fort);
       
   594 
       
   595 
       
   596      PyAPI_FUNC(void) PyBuffer_FillContiguousStrides(int ndims, 
       
   597 	  					    Py_ssize_t *shape, 
       
   598 						    Py_ssize_t *strides,
       
   599 	                                            int itemsize,
       
   600 	     					    char fort);
       
   601 
       
   602        	/*  Fill the strides array with byte-strides of a contiguous
       
   603             (Fortran-style if fort is 'F' or C-style otherwise)
       
   604             array of the given shape with the given number of bytes
       
   605             per element.
       
   606         */
       
   607 
       
   608      PyAPI_FUNC(int) PyBuffer_FillInfo(Py_buffer *view, PyObject *o, void *buf,
       
   609 		             	       Py_ssize_t len, int readonly,
       
   610 				       int flags);
       
   611 
       
   612         /* Fills in a buffer-info structure correctly for an exporter
       
   613            that can only share a contiguous chunk of memory of
       
   614            "unsigned bytes" of the given length. Returns 0 on success
       
   615            and -1 (with raising an error) on error.
       
   616          */
       
   617 
       
   618      PyAPI_FUNC(void) PyBuffer_Release(Py_buffer *view);
       
   619 
       
   620        /* Releases a Py_buffer obtained from getbuffer ParseTuple's s*.
       
   621         */
       
   622 
       
   623      PyAPI_FUNC(PyObject *) PyObject_Format(PyObject* obj,
       
   624 					    PyObject *format_spec);
       
   625        /*
       
   626 	 Takes an arbitrary object and returns the result of
       
   627 	 calling obj.__format__(format_spec).
       
   628        */
       
   629 
       
   630 /* Iterators */
       
   631 
       
   632      PyAPI_FUNC(PyObject *) PyObject_GetIter(PyObject *);
       
   633      /* Takes an object and returns an iterator for it.
       
   634         This is typically a new iterator but if the argument
       
   635 	is an iterator, this returns itself. */
       
   636 
       
   637 #define PyIter_Check(obj) \
       
   638     (PyType_HasFeature((obj)->ob_type, Py_TPFLAGS_HAVE_ITER) && \
       
   639      (obj)->ob_type->tp_iternext != NULL)
       
   640 
       
   641      PyAPI_FUNC(PyObject *) PyIter_Next(PyObject *);
       
   642      /* Takes an iterator object and calls its tp_iternext slot,
       
   643 	returning the next value.  If the iterator is exhausted,
       
   644 	this returns NULL without setting an exception.
       
   645 	NULL with an exception means an error occurred. */
       
   646 
       
   647 /*  Number Protocol:*/
       
   648 
       
   649      PyAPI_FUNC(int) PyNumber_Check(PyObject *o);
       
   650 
       
   651        /*
       
   652          Returns 1 if the object, o, provides numeric protocols, and
       
   653 	 false otherwise. 
       
   654 
       
   655 	 This function always succeeds.
       
   656 
       
   657        */
       
   658 
       
   659      PyAPI_FUNC(PyObject *) PyNumber_Add(PyObject *o1, PyObject *o2);
       
   660 
       
   661        /*
       
   662 	 Returns the result of adding o1 and o2, or null on failure.
       
   663 	 This is the equivalent of the Python expression: o1+o2.
       
   664 
       
   665 
       
   666        */
       
   667 
       
   668      PyAPI_FUNC(PyObject *) PyNumber_Subtract(PyObject *o1, PyObject *o2);
       
   669 
       
   670        /*
       
   671 	 Returns the result of subtracting o2 from o1, or null on
       
   672 	 failure.  This is the equivalent of the Python expression:
       
   673 	 o1-o2.
       
   674 
       
   675        */
       
   676 
       
   677      PyAPI_FUNC(PyObject *) PyNumber_Multiply(PyObject *o1, PyObject *o2);
       
   678 
       
   679        /*
       
   680 	 Returns the result of multiplying o1 and o2, or null on
       
   681 	 failure.  This is the equivalent of the Python expression:
       
   682 	 o1*o2.
       
   683 
       
   684 
       
   685        */
       
   686 
       
   687      PyAPI_FUNC(PyObject *) PyNumber_Divide(PyObject *o1, PyObject *o2);
       
   688 
       
   689        /*
       
   690 	 Returns the result of dividing o1 by o2, or null on failure.
       
   691 	 This is the equivalent of the Python expression: o1/o2.
       
   692 
       
   693 
       
   694        */
       
   695 
       
   696      PyAPI_FUNC(PyObject *) PyNumber_FloorDivide(PyObject *o1, PyObject *o2);
       
   697 
       
   698        /*
       
   699 	 Returns the result of dividing o1 by o2 giving an integral result,
       
   700 	 or null on failure.
       
   701 	 This is the equivalent of the Python expression: o1//o2.
       
   702 
       
   703 
       
   704        */
       
   705 
       
   706      PyAPI_FUNC(PyObject *) PyNumber_TrueDivide(PyObject *o1, PyObject *o2);
       
   707 
       
   708        /*
       
   709 	 Returns the result of dividing o1 by o2 giving a float result,
       
   710 	 or null on failure.
       
   711 	 This is the equivalent of the Python expression: o1/o2.
       
   712 
       
   713 
       
   714        */
       
   715 
       
   716      PyAPI_FUNC(PyObject *) PyNumber_Remainder(PyObject *o1, PyObject *o2);
       
   717 
       
   718        /*
       
   719 	 Returns the remainder of dividing o1 by o2, or null on
       
   720 	 failure.  This is the equivalent of the Python expression:
       
   721 	 o1%o2.
       
   722 
       
   723 
       
   724        */
       
   725 
       
   726      PyAPI_FUNC(PyObject *) PyNumber_Divmod(PyObject *o1, PyObject *o2);
       
   727 
       
   728        /*
       
   729 	 See the built-in function divmod.  Returns NULL on failure.
       
   730 	 This is the equivalent of the Python expression:
       
   731 	 divmod(o1,o2).
       
   732 
       
   733 
       
   734        */
       
   735 
       
   736      PyAPI_FUNC(PyObject *) PyNumber_Power(PyObject *o1, PyObject *o2,
       
   737                                           PyObject *o3);
       
   738 
       
   739        /*
       
   740 	 See the built-in function pow.  Returns NULL on failure.
       
   741 	 This is the equivalent of the Python expression:
       
   742 	 pow(o1,o2,o3), where o3 is optional.
       
   743 
       
   744        */
       
   745 
       
   746      PyAPI_FUNC(PyObject *) PyNumber_Negative(PyObject *o);
       
   747 
       
   748        /*
       
   749 	 Returns the negation of o on success, or null on failure.
       
   750 	 This is the equivalent of the Python expression: -o.
       
   751 
       
   752        */
       
   753 
       
   754      PyAPI_FUNC(PyObject *) PyNumber_Positive(PyObject *o);
       
   755 
       
   756        /*
       
   757          Returns the (what?) of o on success, or NULL on failure.
       
   758 	 This is the equivalent of the Python expression: +o.
       
   759 
       
   760        */
       
   761 
       
   762      PyAPI_FUNC(PyObject *) PyNumber_Absolute(PyObject *o);
       
   763 
       
   764        /*
       
   765 	 Returns the absolute value of o, or null on failure.  This is
       
   766 	 the equivalent of the Python expression: abs(o).
       
   767 
       
   768        */
       
   769 
       
   770      PyAPI_FUNC(PyObject *) PyNumber_Invert(PyObject *o);
       
   771 
       
   772        /*
       
   773 	 Returns the bitwise negation of o on success, or NULL on
       
   774 	 failure.  This is the equivalent of the Python expression:
       
   775 	 ~o.
       
   776 
       
   777 
       
   778        */
       
   779 
       
   780      PyAPI_FUNC(PyObject *) PyNumber_Lshift(PyObject *o1, PyObject *o2);
       
   781 
       
   782        /*
       
   783 	 Returns the result of left shifting o1 by o2 on success, or
       
   784 	 NULL on failure.  This is the equivalent of the Python
       
   785 	 expression: o1 << o2.
       
   786 
       
   787 
       
   788        */
       
   789 
       
   790      PyAPI_FUNC(PyObject *) PyNumber_Rshift(PyObject *o1, PyObject *o2);
       
   791 
       
   792        /*
       
   793 	 Returns the result of right shifting o1 by o2 on success, or
       
   794 	 NULL on failure.  This is the equivalent of the Python
       
   795 	 expression: o1 >> o2.
       
   796 
       
   797        */
       
   798 
       
   799      PyAPI_FUNC(PyObject *) PyNumber_And(PyObject *o1, PyObject *o2);
       
   800 
       
   801        /*
       
   802 	 Returns the result of bitwise and of o1 and o2 on success, or
       
   803 	 NULL on failure. This is the equivalent of the Python
       
   804 	 expression: o1&o2.
       
   805 
       
   806 
       
   807        */
       
   808 
       
   809      PyAPI_FUNC(PyObject *) PyNumber_Xor(PyObject *o1, PyObject *o2);
       
   810 
       
   811        /*
       
   812 	 Returns the bitwise exclusive or of o1 by o2 on success, or
       
   813 	 NULL on failure.  This is the equivalent of the Python
       
   814 	 expression: o1^o2.
       
   815 
       
   816 
       
   817        */
       
   818 
       
   819      PyAPI_FUNC(PyObject *) PyNumber_Or(PyObject *o1, PyObject *o2);
       
   820 
       
   821        /*
       
   822 	 Returns the result of bitwise or on o1 and o2 on success, or
       
   823 	 NULL on failure.  This is the equivalent of the Python
       
   824 	 expression: o1|o2.
       
   825 
       
   826        */
       
   827 
       
   828      /* Implemented elsewhere:
       
   829 
       
   830      int PyNumber_Coerce(PyObject **p1, PyObject **p2);
       
   831 
       
   832 	 This function takes the addresses of two variables of type
       
   833 	 PyObject*.
       
   834 
       
   835 	 If the objects pointed to by *p1 and *p2 have the same type,
       
   836 	 increment their reference count and return 0 (success).
       
   837 	 If the objects can be converted to a common numeric type,
       
   838 	 replace *p1 and *p2 by their converted value (with 'new'
       
   839 	 reference counts), and return 0.
       
   840 	 If no conversion is possible, or if some other error occurs,
       
   841 	 return -1 (failure) and don't increment the reference counts.
       
   842 	 The call PyNumber_Coerce(&o1, &o2) is equivalent to the Python
       
   843 	 statement o1, o2 = coerce(o1, o2).
       
   844 
       
   845        */
       
   846 
       
   847 #define PyIndex_Check(obj) \
       
   848    ((obj)->ob_type->tp_as_number != NULL && \
       
   849     PyType_HasFeature((obj)->ob_type, Py_TPFLAGS_HAVE_INDEX) && \
       
   850     (obj)->ob_type->tp_as_number->nb_index != NULL)
       
   851         
       
   852      PyAPI_FUNC(PyObject *) PyNumber_Index(PyObject *o);
       
   853 
       
   854        /*
       
   855 	 Returns the object converted to a Python long or int
       
   856 	 or NULL with an error raised on failure.
       
   857        */
       
   858 
       
   859      PyAPI_FUNC(Py_ssize_t) PyNumber_AsSsize_t(PyObject *o, PyObject *exc);
       
   860 
       
   861        /*
       
   862          Returns the Integral instance converted to an int. The
       
   863          instance is expected to be int or long or have an __int__
       
   864          method. Steals integral's reference. error_format will be
       
   865          used to create the TypeError if integral isn't actually an
       
   866          Integral instance. error_format should be a format string
       
   867          that can accept a char* naming integral's type.
       
   868        */
       
   869 
       
   870      PyAPI_FUNC(PyObject *) _PyNumber_ConvertIntegralToInt(
       
   871              PyObject *integral,
       
   872              const char* error_format);
       
   873 
       
   874        /*
       
   875         Returns the object converted to Py_ssize_t by going through
       
   876         PyNumber_Index first.  If an overflow error occurs while
       
   877         converting the int-or-long to Py_ssize_t, then the second argument
       
   878         is the error-type to return.  If it is NULL, then the overflow error
       
   879         is cleared and the value is clipped. 
       
   880        */
       
   881 
       
   882      PyAPI_FUNC(PyObject *) PyNumber_Int(PyObject *o);
       
   883 
       
   884        /*
       
   885 	 Returns the o converted to an integer object on success, or
       
   886 	 NULL on failure.  This is the equivalent of the Python
       
   887 	 expression: int(o).
       
   888 
       
   889        */
       
   890 
       
   891      PyAPI_FUNC(PyObject *) PyNumber_Long(PyObject *o);
       
   892 
       
   893        /*
       
   894 	 Returns the o converted to a long integer object on success,
       
   895 	 or NULL on failure.  This is the equivalent of the Python
       
   896 	 expression: long(o).
       
   897 
       
   898        */
       
   899 
       
   900      PyAPI_FUNC(PyObject *) PyNumber_Float(PyObject *o);
       
   901 
       
   902        /*
       
   903 	 Returns the o converted to a float object on success, or NULL
       
   904 	 on failure.  This is the equivalent of the Python expression:
       
   905 	 float(o).
       
   906        */
       
   907 	 
       
   908 /*  In-place variants of (some of) the above number protocol functions */
       
   909 
       
   910      PyAPI_FUNC(PyObject *) PyNumber_InPlaceAdd(PyObject *o1, PyObject *o2);
       
   911 
       
   912        /*
       
   913 	 Returns the result of adding o2 to o1, possibly in-place, or null
       
   914 	 on failure.  This is the equivalent of the Python expression:
       
   915 	 o1 += o2.
       
   916 
       
   917        */
       
   918 
       
   919      PyAPI_FUNC(PyObject *) PyNumber_InPlaceSubtract(PyObject *o1, PyObject *o2);
       
   920 
       
   921        /*
       
   922 	 Returns the result of subtracting o2 from o1, possibly in-place or
       
   923 	 null on failure.  This is the equivalent of the Python expression:
       
   924 	 o1 -= o2.
       
   925 
       
   926        */
       
   927 
       
   928      PyAPI_FUNC(PyObject *) PyNumber_InPlaceMultiply(PyObject *o1, PyObject *o2);
       
   929 
       
   930        /*
       
   931 	 Returns the result of multiplying o1 by o2, possibly in-place, or
       
   932 	 null on failure.  This is the equivalent of the Python expression:
       
   933 	 o1 *= o2.
       
   934 
       
   935        */
       
   936 
       
   937      PyAPI_FUNC(PyObject *) PyNumber_InPlaceDivide(PyObject *o1, PyObject *o2);
       
   938 
       
   939        /*
       
   940 	 Returns the result of dividing o1 by o2, possibly in-place, or null
       
   941 	 on failure.  This is the equivalent of the Python expression:
       
   942 	 o1 /= o2.
       
   943 
       
   944        */
       
   945 
       
   946      PyAPI_FUNC(PyObject *) PyNumber_InPlaceFloorDivide(PyObject *o1,
       
   947 						       PyObject *o2);
       
   948 
       
   949        /*
       
   950 	 Returns the result of dividing o1 by o2 giving an integral result,
       
   951 	 possibly in-place, or null on failure.
       
   952 	 This is the equivalent of the Python expression:
       
   953 	 o1 /= o2.
       
   954 
       
   955        */
       
   956 
       
   957      PyAPI_FUNC(PyObject *) PyNumber_InPlaceTrueDivide(PyObject *o1,
       
   958 						      PyObject *o2);
       
   959 
       
   960        /*
       
   961 	 Returns the result of dividing o1 by o2 giving a float result,
       
   962 	 possibly in-place, or null on failure.
       
   963 	 This is the equivalent of the Python expression:
       
   964 	 o1 /= o2.
       
   965 
       
   966        */
       
   967 
       
   968      PyAPI_FUNC(PyObject *) PyNumber_InPlaceRemainder(PyObject *o1, PyObject *o2);
       
   969 
       
   970        /*
       
   971 	 Returns the remainder of dividing o1 by o2, possibly in-place, or
       
   972 	 null on failure.  This is the equivalent of the Python expression:
       
   973 	 o1 %= o2.
       
   974 
       
   975        */
       
   976 
       
   977      PyAPI_FUNC(PyObject *) PyNumber_InPlacePower(PyObject *o1, PyObject *o2,
       
   978      						 PyObject *o3);
       
   979 
       
   980        /*
       
   981 	 Returns the result of raising o1 to the power of o2, possibly
       
   982 	 in-place, or null on failure.  This is the equivalent of the Python
       
   983 	 expression: o1 **= o2, or pow(o1, o2, o3) if o3 is present.
       
   984 
       
   985        */
       
   986 
       
   987      PyAPI_FUNC(PyObject *) PyNumber_InPlaceLshift(PyObject *o1, PyObject *o2);
       
   988 
       
   989        /*
       
   990 	 Returns the result of left shifting o1 by o2, possibly in-place, or
       
   991 	 null on failure.  This is the equivalent of the Python expression:
       
   992 	 o1 <<= o2.
       
   993 
       
   994        */
       
   995 
       
   996      PyAPI_FUNC(PyObject *) PyNumber_InPlaceRshift(PyObject *o1, PyObject *o2);
       
   997 
       
   998        /*
       
   999 	 Returns the result of right shifting o1 by o2, possibly in-place or
       
  1000 	 null on failure.  This is the equivalent of the Python expression:
       
  1001 	 o1 >>= o2.
       
  1002 
       
  1003        */
       
  1004 
       
  1005      PyAPI_FUNC(PyObject *) PyNumber_InPlaceAnd(PyObject *o1, PyObject *o2);
       
  1006 
       
  1007        /*
       
  1008 	 Returns the result of bitwise and of o1 and o2, possibly in-place,
       
  1009 	 or null on failure. This is the equivalent of the Python
       
  1010 	 expression: o1 &= o2.
       
  1011 
       
  1012        */
       
  1013 
       
  1014      PyAPI_FUNC(PyObject *) PyNumber_InPlaceXor(PyObject *o1, PyObject *o2);
       
  1015 
       
  1016        /*
       
  1017 	 Returns the bitwise exclusive or of o1 by o2, possibly in-place, or
       
  1018 	 null on failure.  This is the equivalent of the Python expression:
       
  1019 	 o1 ^= o2.
       
  1020 
       
  1021        */
       
  1022 
       
  1023      PyAPI_FUNC(PyObject *) PyNumber_InPlaceOr(PyObject *o1, PyObject *o2);
       
  1024 
       
  1025        /*
       
  1026 	 Returns the result of bitwise or of o1 and o2, possibly in-place,
       
  1027 	 or null on failure.  This is the equivalent of the Python
       
  1028 	 expression: o1 |= o2.
       
  1029 
       
  1030        */
       
  1031 
       
  1032 
       
  1033      PyAPI_FUNC(PyObject *) PyNumber_ToBase(PyObject *n, int base);
       
  1034 
       
  1035        /*
       
  1036 	 Returns the integer n converted to a string with a base, with a base
       
  1037 	 marker of 0b, 0o or 0x prefixed if applicable.
       
  1038 	 If n is not an int object, it is converted with PyNumber_Index first.
       
  1039        */
       
  1040 
       
  1041 
       
  1042 /*  Sequence protocol:*/
       
  1043 
       
  1044      PyAPI_FUNC(int) PySequence_Check(PyObject *o);
       
  1045 
       
  1046        /*
       
  1047          Return 1 if the object provides sequence protocol, and zero
       
  1048 	 otherwise.  
       
  1049 
       
  1050 	 This function always succeeds.
       
  1051 
       
  1052        */
       
  1053 
       
  1054      PyAPI_FUNC(Py_ssize_t) PySequence_Size(PyObject *o);
       
  1055 
       
  1056        /*
       
  1057          Return the size of sequence object o, or -1 on failure.
       
  1058 
       
  1059        */
       
  1060 
       
  1061        /* For DLL compatibility */
       
  1062 #undef PySequence_Length
       
  1063      PyAPI_FUNC(Py_ssize_t) PySequence_Length(PyObject *o);
       
  1064 #define PySequence_Length PySequence_Size
       
  1065 
       
  1066 
       
  1067      PyAPI_FUNC(PyObject *) PySequence_Concat(PyObject *o1, PyObject *o2);
       
  1068 
       
  1069        /*
       
  1070 	 Return the concatenation of o1 and o2 on success, and NULL on
       
  1071 	 failure.   This is the equivalent of the Python
       
  1072 	 expression: o1+o2.
       
  1073 
       
  1074        */
       
  1075 
       
  1076      PyAPI_FUNC(PyObject *) PySequence_Repeat(PyObject *o, Py_ssize_t count);
       
  1077 
       
  1078        /*
       
  1079 	 Return the result of repeating sequence object o count times,
       
  1080 	 or NULL on failure.  This is the equivalent of the Python
       
  1081 	 expression: o1*count.
       
  1082 
       
  1083        */
       
  1084 
       
  1085      PyAPI_FUNC(PyObject *) PySequence_GetItem(PyObject *o, Py_ssize_t i);
       
  1086 
       
  1087        /*
       
  1088 	 Return the ith element of o, or NULL on failure. This is the
       
  1089 	 equivalent of the Python expression: o[i].
       
  1090        */
       
  1091 
       
  1092      PyAPI_FUNC(PyObject *) PySequence_GetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2);
       
  1093 
       
  1094        /*
       
  1095 	 Return the slice of sequence object o between i1 and i2, or
       
  1096 	 NULL on failure. This is the equivalent of the Python
       
  1097 	 expression: o[i1:i2].
       
  1098 
       
  1099        */
       
  1100 
       
  1101      PyAPI_FUNC(int) PySequence_SetItem(PyObject *o, Py_ssize_t i, PyObject *v);
       
  1102 
       
  1103        /*
       
  1104 	 Assign object v to the ith element of o.  Returns
       
  1105 	 -1 on failure.  This is the equivalent of the Python
       
  1106 	 statement: o[i]=v.
       
  1107 
       
  1108        */
       
  1109 
       
  1110      PyAPI_FUNC(int) PySequence_DelItem(PyObject *o, Py_ssize_t i);
       
  1111 
       
  1112        /*
       
  1113 	 Delete the ith element of object v.  Returns
       
  1114 	 -1 on failure.  This is the equivalent of the Python
       
  1115 	 statement: del o[i].
       
  1116        */
       
  1117 
       
  1118      PyAPI_FUNC(int) PySequence_SetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2,
       
  1119                                         PyObject *v);
       
  1120 
       
  1121        /*
       
  1122          Assign the sequence object, v, to the slice in sequence
       
  1123 	 object, o, from i1 to i2.  Returns -1 on failure. This is the
       
  1124 	 equivalent of the Python statement: o[i1:i2]=v.
       
  1125        */
       
  1126 
       
  1127      PyAPI_FUNC(int) PySequence_DelSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2);
       
  1128 
       
  1129        /*
       
  1130 	 Delete the slice in sequence object, o, from i1 to i2.
       
  1131 	 Returns -1 on failure. This is the equivalent of the Python
       
  1132 	 statement: del o[i1:i2].
       
  1133        */
       
  1134 
       
  1135      PyAPI_FUNC(PyObject *) PySequence_Tuple(PyObject *o);
       
  1136 
       
  1137        /*
       
  1138 	 Returns the sequence, o, as a tuple on success, and NULL on failure.
       
  1139 	 This is equivalent to the Python expression: tuple(o)
       
  1140        */
       
  1141 
       
  1142 
       
  1143      PyAPI_FUNC(PyObject *) PySequence_List(PyObject *o);
       
  1144        /*
       
  1145 	 Returns the sequence, o, as a list on success, and NULL on failure.
       
  1146 	 This is equivalent to the Python expression: list(o)
       
  1147        */
       
  1148 
       
  1149      PyAPI_FUNC(PyObject *) PySequence_Fast(PyObject *o, const char* m);
       
  1150        /*
       
  1151          Returns the sequence, o, as a tuple, unless it's already a
       
  1152          tuple or list.  Use PySequence_Fast_GET_ITEM to access the
       
  1153          members of this list, and PySequence_Fast_GET_SIZE to get its length.
       
  1154 
       
  1155          Returns NULL on failure.  If the object does not support iteration,
       
  1156          raises a TypeError exception with m as the message text.
       
  1157        */
       
  1158 
       
  1159 #define PySequence_Fast_GET_SIZE(o) \
       
  1160 	(PyList_Check(o) ? PyList_GET_SIZE(o) : PyTuple_GET_SIZE(o))
       
  1161        /*
       
  1162 	 Return the size of o, assuming that o was returned by
       
  1163          PySequence_Fast and is not NULL.
       
  1164        */
       
  1165 
       
  1166 #define PySequence_Fast_GET_ITEM(o, i)\
       
  1167      (PyList_Check(o) ? PyList_GET_ITEM(o, i) : PyTuple_GET_ITEM(o, i))
       
  1168        /*
       
  1169 	 Return the ith element of o, assuming that o was returned by
       
  1170          PySequence_Fast, and that i is within bounds.
       
  1171        */
       
  1172 
       
  1173 #define PySequence_ITEM(o, i)\
       
  1174 	( Py_TYPE(o)->tp_as_sequence->sq_item(o, i) )
       
  1175        /* Assume tp_as_sequence and sq_item exist and that i does not
       
  1176 	  need to be corrected for a negative index
       
  1177        */     
       
  1178 
       
  1179 #define PySequence_Fast_ITEMS(sf) \
       
  1180 	(PyList_Check(sf) ? ((PyListObject *)(sf))->ob_item \
       
  1181 			  : ((PyTupleObject *)(sf))->ob_item)
       
  1182 	/* Return a pointer to the underlying item array for
       
  1183            an object retured by PySequence_Fast */
       
  1184 
       
  1185      PyAPI_FUNC(Py_ssize_t) PySequence_Count(PyObject *o, PyObject *value);
       
  1186 
       
  1187        /*
       
  1188          Return the number of occurrences on value on o, that is,
       
  1189 	 return the number of keys for which o[key]==value.  On
       
  1190 	 failure, return -1.  This is equivalent to the Python
       
  1191 	 expression: o.count(value).
       
  1192        */
       
  1193 
       
  1194      PyAPI_FUNC(int) PySequence_Contains(PyObject *seq, PyObject *ob);
       
  1195        /*
       
  1196          Return -1 if error; 1 if ob in seq; 0 if ob not in seq.
       
  1197          Use __contains__ if possible, else _PySequence_IterSearch().
       
  1198        */
       
  1199 
       
  1200 #define PY_ITERSEARCH_COUNT    1
       
  1201 #define PY_ITERSEARCH_INDEX    2
       
  1202 #define PY_ITERSEARCH_CONTAINS 3
       
  1203      PyAPI_FUNC(Py_ssize_t) _PySequence_IterSearch(PyObject *seq,
       
  1204      					PyObject *obj, int operation);
       
  1205 	/*
       
  1206 	  Iterate over seq.  Result depends on the operation:
       
  1207 	  PY_ITERSEARCH_COUNT:  return # of times obj appears in seq; -1 if
       
  1208 	  	error.
       
  1209 	  PY_ITERSEARCH_INDEX:  return 0-based index of first occurrence of
       
  1210 	  	obj in seq; set ValueError and return -1 if none found;
       
  1211 	  	also return -1 on error.
       
  1212 	  PY_ITERSEARCH_CONTAINS:  return 1 if obj in seq, else 0; -1 on
       
  1213 	  	error.
       
  1214 	*/
       
  1215 
       
  1216 /* For DLL-level backwards compatibility */
       
  1217 #undef PySequence_In
       
  1218      PyAPI_FUNC(int) PySequence_In(PyObject *o, PyObject *value);
       
  1219 
       
  1220 /* For source-level backwards compatibility */
       
  1221 #define PySequence_In PySequence_Contains
       
  1222 
       
  1223        /*
       
  1224 	 Determine if o contains value.  If an item in o is equal to
       
  1225 	 X, return 1, otherwise return 0.  On error, return -1.  This
       
  1226 	 is equivalent to the Python expression: value in o.
       
  1227        */
       
  1228 
       
  1229      PyAPI_FUNC(Py_ssize_t) PySequence_Index(PyObject *o, PyObject *value);
       
  1230 
       
  1231        /*
       
  1232 	 Return the first index for which o[i]=value.  On error,
       
  1233 	 return -1.    This is equivalent to the Python
       
  1234 	 expression: o.index(value).
       
  1235        */
       
  1236 
       
  1237 /* In-place versions of some of the above Sequence functions. */
       
  1238 
       
  1239      PyAPI_FUNC(PyObject *) PySequence_InPlaceConcat(PyObject *o1, PyObject *o2);
       
  1240 
       
  1241        /*
       
  1242 	 Append o2 to o1, in-place when possible. Return the resulting
       
  1243 	 object, which could be o1, or NULL on failure.  This is the
       
  1244 	 equivalent of the Python expression: o1 += o2.
       
  1245 
       
  1246        */
       
  1247 
       
  1248      PyAPI_FUNC(PyObject *) PySequence_InPlaceRepeat(PyObject *o, Py_ssize_t count);
       
  1249 
       
  1250        /*
       
  1251 	 Repeat o1 by count, in-place when possible. Return the resulting
       
  1252 	 object, which could be o1, or NULL on failure.  This is the
       
  1253 	 equivalent of the Python expression: o1 *= count.
       
  1254 
       
  1255        */
       
  1256 
       
  1257 /*  Mapping protocol:*/
       
  1258 
       
  1259      PyAPI_FUNC(int) PyMapping_Check(PyObject *o);
       
  1260 
       
  1261        /*
       
  1262          Return 1 if the object provides mapping protocol, and zero
       
  1263 	 otherwise.  
       
  1264 
       
  1265 	 This function always succeeds.
       
  1266        */
       
  1267 
       
  1268      PyAPI_FUNC(Py_ssize_t) PyMapping_Size(PyObject *o);
       
  1269 
       
  1270        /*
       
  1271          Returns the number of keys in object o on success, and -1 on
       
  1272 	 failure.  For objects that do not provide sequence protocol,
       
  1273 	 this is equivalent to the Python expression: len(o).
       
  1274        */
       
  1275 
       
  1276        /* For DLL compatibility */
       
  1277 #undef PyMapping_Length
       
  1278      PyAPI_FUNC(Py_ssize_t) PyMapping_Length(PyObject *o);
       
  1279 #define PyMapping_Length PyMapping_Size
       
  1280 
       
  1281 
       
  1282      /* implemented as a macro:
       
  1283 
       
  1284      int PyMapping_DelItemString(PyObject *o, char *key);
       
  1285 
       
  1286 	 Remove the mapping for object, key, from the object *o.
       
  1287 	 Returns -1 on failure.  This is equivalent to
       
  1288 	 the Python statement: del o[key].
       
  1289        */
       
  1290 #define PyMapping_DelItemString(O,K) PyObject_DelItemString((O),(K))
       
  1291 
       
  1292      /* implemented as a macro:
       
  1293 
       
  1294      int PyMapping_DelItem(PyObject *o, PyObject *key);
       
  1295 
       
  1296 	 Remove the mapping for object, key, from the object *o.
       
  1297 	 Returns -1 on failure.  This is equivalent to
       
  1298 	 the Python statement: del o[key].
       
  1299        */
       
  1300 #define PyMapping_DelItem(O,K) PyObject_DelItem((O),(K))
       
  1301 
       
  1302      PyAPI_FUNC(int) PyMapping_HasKeyString(PyObject *o, char *key);
       
  1303 
       
  1304        /*
       
  1305 	 On success, return 1 if the mapping object has the key, key,
       
  1306 	 and 0 otherwise.  This is equivalent to the Python expression:
       
  1307 	 o.has_key(key). 
       
  1308 
       
  1309 	 This function always succeeds.
       
  1310        */
       
  1311 
       
  1312      PyAPI_FUNC(int) PyMapping_HasKey(PyObject *o, PyObject *key);
       
  1313 
       
  1314        /*
       
  1315 	 Return 1 if the mapping object has the key, key,
       
  1316 	 and 0 otherwise.  This is equivalent to the Python expression:
       
  1317 	 o.has_key(key). 
       
  1318 
       
  1319 	 This function always succeeds.
       
  1320 
       
  1321        */
       
  1322 
       
  1323      /* Implemented as macro:
       
  1324 
       
  1325      PyObject *PyMapping_Keys(PyObject *o);
       
  1326 
       
  1327          On success, return a list of the keys in object o.  On
       
  1328 	 failure, return NULL. This is equivalent to the Python
       
  1329 	 expression: o.keys().
       
  1330        */
       
  1331 #define PyMapping_Keys(O) PyObject_CallMethod(O,"keys",NULL)
       
  1332 
       
  1333      /* Implemented as macro:
       
  1334 
       
  1335      PyObject *PyMapping_Values(PyObject *o);
       
  1336 
       
  1337          On success, return a list of the values in object o.  On
       
  1338 	 failure, return NULL. This is equivalent to the Python
       
  1339 	 expression: o.values().
       
  1340        */
       
  1341 #define PyMapping_Values(O) PyObject_CallMethod(O,"values",NULL)
       
  1342 
       
  1343      /* Implemented as macro:
       
  1344 
       
  1345      PyObject *PyMapping_Items(PyObject *o);
       
  1346 
       
  1347          On success, return a list of the items in object o, where
       
  1348 	 each item is a tuple containing a key-value pair.  On
       
  1349 	 failure, return NULL. This is equivalent to the Python
       
  1350 	 expression: o.items().
       
  1351 
       
  1352        */
       
  1353 #define PyMapping_Items(O) PyObject_CallMethod(O,"items",NULL)
       
  1354 
       
  1355      PyAPI_FUNC(PyObject *) PyMapping_GetItemString(PyObject *o, char *key);
       
  1356 
       
  1357        /*
       
  1358 	 Return element of o corresponding to the object, key, or NULL
       
  1359 	 on failure. This is the equivalent of the Python expression:
       
  1360 	 o[key].
       
  1361        */
       
  1362 
       
  1363      PyAPI_FUNC(int) PyMapping_SetItemString(PyObject *o, char *key,
       
  1364                                             PyObject *value);
       
  1365 
       
  1366        /*
       
  1367 	 Map the object, key, to the value, v.  Returns 
       
  1368 	 -1 on failure.  This is the equivalent of the Python
       
  1369 	 statement: o[key]=v.
       
  1370       */
       
  1371 
       
  1372 
       
  1373 PyAPI_FUNC(int) PyObject_IsInstance(PyObject *object, PyObject *typeorclass);
       
  1374       /* isinstance(object, typeorclass) */
       
  1375 
       
  1376 PyAPI_FUNC(int) PyObject_IsSubclass(PyObject *object, PyObject *typeorclass);
       
  1377       /* issubclass(object, typeorclass) */
       
  1378 
       
  1379 
       
  1380 PyAPI_FUNC(int) _PyObject_RealIsInstance(PyObject *inst, PyObject *cls);
       
  1381 
       
  1382 PyAPI_FUNC(int) _PyObject_RealIsSubclass(PyObject *derived, PyObject *cls);
       
  1383 
       
  1384 
       
  1385 #ifdef __cplusplus
       
  1386 }
       
  1387 #endif
       
  1388 #endif /* Py_ABSTRACTOBJECT_H */