Better conversion functions for integral and floating point types,

allows truncated floats to be used where integers are expeceted,
raises more meaningful exceptions, etc.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@26502 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robin Dunn
2004-03-30 19:50:53 +00:00
parent 94eaeb1b02
commit 8470ed1a3a

View File

@@ -273,6 +273,62 @@
} }
// These fragments are iserted in modules that need to convert PyObjects to
// integer values, my versions allow any numeric type to be used, as long as
// it can be converted to a PyInt. (Specifically, I allow floats where the
// default SWIG_AsLong would raise an obsucre exception from within
// PyLong_AsLong.)
%fragment("SWIG_AsLong","header") %{
SWIGSTATICINLINE(long)
SWIG_AsLong(PyObject * obj)
{
if (PyNumber_Check(obj))
return PyInt_AsLong(obj);
else {
PyObject* errmsg = PyString_FromFormat("Expected number, got %s",
obj->ob_type->tp_name);
PyErr_SetObject(PyExc_TypeError, errmsg);
Py_DECREF(errmsg);
return 0;
}
}
%}
%fragment("SWIG_AsUnsignedLong","header", fragment="SWIG_AsLong") %{
SWIGSTATICINLINE(unsigned long)
SWIG_AsUnsignedLong(PyObject * obj)
{
if (PyLong_Check(obj)) {
return PyLong_AsUnsignedLong(obj);
} else {
long i = SWIG_AsLong(obj);
if ( !PyErr_Occurred() && (i < 0)) {
PyErr_SetString(PyExc_TypeError, "negative value received for unsigned type");
}
return i;
}
}
%}
%fragment("SWIG_AsDouble","header") %{
SWIGSTATICINLINE(double)
SWIG_AsDouble(PyObject *obj)
{
if (PyNumber_Check(obj))
return PyFloat_AsDouble(obj);
else {
PyObject* errmsg = PyString_FromFormat("Expected number, got %s",
obj->ob_type->tp_name);
PyErr_SetObject(PyExc_TypeError, errmsg);
Py_DECREF(errmsg);
return 0;
}
}
%}
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
// Typemap for when GDI objects are returned by reference. This will cause a // Typemap for when GDI objects are returned by reference. This will cause a
// copy to be made instead of returning a reference to the same instance. The // copy to be made instead of returning a reference to the same instance. The