[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: [pygame] Int function simplified



Cool, I should have mentioned this same change works for floats.

René Dudfield wrote:
cool, thanks :)

Committed revision 1026.

On 7/27/07, Campbell Barton <cbarton@xxxxxxxxxx> wrote:
Hi, I have been looking into parsing  numbers with Blender3D's api and
thought Id take a look at how PyGame parses numbers.

Even though youd think PyInt_AsLong would only work with PyInt's it
actually converts any type that supports the PyNumber protocol into an
in. - so theres no advantage in using PyNumber_Int.

the code below is from base.c, a smaller replacement for IntFromObj is
below. This avoids creating and removing a PyObject every time.

_________________________________________________
/* internal C API utility functions */
static int
IntFromObj (PyObject* obj, int* val)
{
     PyObject* intobj;

     if (PyNumber_Check (obj))
     {
         if (!(intobj = PyNumber_Int (obj)))
         {
             PyErr_Clear ();
             return 0;
         }
         *val = PyInt_AsLong (intobj);
         Py_DECREF (intobj);
         if (PyErr_Occurred ())
         {
             PyErr_Clear ();
             return 0;
         }
         return 1;
     }
     return 0;
}


_____________________________________________-

/* internal C API utility functions */
static int
IntFromObj (PyObject* obj, int* val)
{
     int tmp_val;
     tmp_val = PyInt_AsLong (obj);
     if (tmp_val == -1 && PyErr_Occurred ())
     {
         PyErr_Clear ();
         return 0;
     }
     *val = tmp_val;
     return 1;
}




--
Campbell J Barton (ideasman42)