[Numpy-svn] r4518 - trunk/numpy/doc/swig
numpy-svn at scipy.org
numpy-svn at scipy.org
Sat Dec 1 23:17:35 EST 2007
Author: wfspotz at sandia.gov
Date: 2007-12-01 22:17:23 -0600 (Sat, 01 Dec 2007)
New Revision: 4518
Modified:
trunk/numpy/doc/swig/pyfragments.swg
Log:
Corrected casting logic for numpy array scalars
Modified: trunk/numpy/doc/swig/pyfragments.swg
===================================================================
--- trunk/numpy/doc/swig/pyfragments.swg 2007-12-01 18:16:42 UTC (rev 4517)
+++ trunk/numpy/doc/swig/pyfragments.swg 2007-12-02 04:17:23 UTC (rev 4518)
@@ -1,4 +1,5 @@
/*-*- C -*-*/
+
/**********************************************************************/
/* For numpy versions prior to 1.0, the names of certain data types
@@ -71,11 +72,12 @@
%fragment(SWIG_AsVal_frag(long), "header",
fragment="SWIG_CanCastAsInteger",
- fragment="NumPy_Backward_Compatibility")
+ fragment="NumPy_Backward_Compatibility")
{
SWIGINTERN int
SWIG_AsVal_dec(long)(PyObject * obj, long * val)
{
+ static PyArray_Descr * longDescr = PyArray_DescrNewFromType(NPY_LONG);
if (PyInt_Check(obj)) {
if (val) *val = PyInt_AsLong(obj);
return SWIG_OK;
@@ -108,69 +110,13 @@
}
}
%#endif
- if (!PyArray_CheckScalar(obj)) return SWIG_TypeError;
- int dataType = PyArray_TYPE(obj);
- switch (dataType)
- {
- case NPY_BYTE:
- {
- char data = *((char*)PyArray_DATA(obj));
- if (val) *val = %numeric_cast(data, long);
- break;
- }
- case NPY_UBYTE:
- {
- unsigned char data = *((unsigned char*)PyArray_DATA(obj));
- if (val) *val = %numeric_cast(data, long);
- break;
- }
- case NPY_SHORT:
- {
- short data = *((short*)PyArray_DATA(obj));
- if (val) *val = %numeric_cast(data, long);
- break;
- }
- case NPY_USHORT:
- {
- unsigned short data = *((unsigned short*)PyArray_DATA(obj));
- if (val) *val = %numeric_cast(data, long);
- break;
- }
- case NPY_INT:
- {
- int data = *((int*)PyArray_DATA(obj));
- if (val) *val = %numeric_cast(data, long);
- break;
- }
- case NPY_UINT:
- {
- unsigned int data = *((unsigned int*)PyArray_DATA(obj));
- if (data > NPY_MAX_LONG) return SWIG_OverflowError;
- if (val) *val = %numeric_cast(data, long);
- break;
- }
- case NPY_LONG:
- {
- *val = *((long*)PyArray_DATA(obj));
- break;
- }
- case NPY_ULONG:
- {
- unsigned long data = *((unsigned long*)PyArray_DATA(obj));
- if (data > NPY_MAX_LONG) return SWIG_OverflowError;
- if (val) *val = %numeric_cast(data, long);
- break;
- }
- default:
- return SWIG_TypeError;
- }
+ if (!PyArray_IsScalar(obj,Integer)) return SWIG_TypeError;
+ PyArray_CastScalarToCtype(obj, (void*)val, longDescr);
return SWIG_OK;
}
}
-
-
/* Override the SWIG_AsVal_frag(unsigned long) fragment so that it
* also checks for numpy scalar array types. The code through the
* %#endif is essentially cut-and-paste from pyprimtype.swg
@@ -178,11 +124,12 @@
%fragment(SWIG_AsVal_frag(unsigned long),"header",
fragment="SWIG_CanCastAsInteger",
- fragment="NumPy_Backward_Compatibility")
+ fragment="NumPy_Backward_Compatibility")
{
SWIGINTERN int
SWIG_AsVal_dec(unsigned long)(PyObject *obj, unsigned long *val)
{
+ static PyArray_Descr * ulongDescr = PyArray_DescrNewFromType(NPY_ULONG);
if (PyInt_Check(obj)) {
long v = PyInt_AsLong(obj);
if (v >= 0) {
@@ -220,64 +167,8 @@
}
}
%#endif
- if (!PyArray_CheckScalar(obj)) return SWIG_TypeError;
- int dataType = PyArray_TYPE(obj);
- switch (dataType)
- {
- case NPY_BYTE:
- {
- char data = *((char*)PyArray_DATA(obj));
- if (data < 0) return SWIG_OverflowError;
- if (val) *val = %numeric_cast(data, unsigned long);
- break;
- }
- case NPY_UBYTE:
- {
- unsigned char data = *((unsigned char*)PyArray_DATA(obj));
- if (val) *val = %numeric_cast(data, unsigned long);
- break;
- }
- case NPY_SHORT:
- {
- short data = *((short*)PyArray_DATA(obj));
- if (data < 0) return SWIG_OverflowError;
- if (val) *val = %numeric_cast(data, unsigned long);
- break;
- }
- case NPY_USHORT:
- {
- unsigned short data = *((unsigned short*)PyArray_DATA(obj));
- if (val) *val = %numeric_cast(data, unsigned long);
- break;
- }
- case NPY_INT:
- {
- int data = *((int*)PyArray_DATA(obj));
- if (data < 0) return SWIG_OverflowError;
- if (val) *val = %numeric_cast(data, unsigned long);
- break;
- }
- case NPY_UINT:
- {
- unsigned int data = *((unsigned int*)PyArray_DATA(obj));
- if (val) *val = %numeric_cast(data, unsigned long);
- break;
- }
- case NPY_LONG:
- {
- long data = *((long*)PyArray_DATA(obj));
- if (data < 0) return SWIG_OverflowError;
- if (val) *val = %numeric_cast(data, unsigned long);
- break;
- }
- case NPY_ULONG:
- {
- *val = *((unsigned long*)PyArray_DATA(obj));
- break;
- }
- default:
- return SWIG_TypeError;
- }
+ if (!PyArray_IsScalar(obj,Integer)) return SWIG_TypeError;
+ PyArray_CastScalarToCtype(obj, (void*)val, ulongDescr);
return SWIG_OK;
}
}
More information about the Numpy-svn
mailing list