summaryrefslogtreecommitdiff
path: root/numpy/doc
diff options
context:
space:
mode:
authorwfspotz@sandia.gov <wfspotz@sandia.gov@localhost>2007-12-02 04:17:23 +0000
committerwfspotz@sandia.gov <wfspotz@sandia.gov@localhost>2007-12-02 04:17:23 +0000
commit65293fce1c575ac74bd18a96ac43187e3fd8c439 (patch)
tree62610e55a9dda94ee4b15455adad3e6988efc90d /numpy/doc
parent69645b8ecf83a23180eb0bb7b065a0a127d78da9 (diff)
downloadnumpy-65293fce1c575ac74bd18a96ac43187e3fd8c439.tar.gz
Corrected casting logic for numpy array scalars
Diffstat (limited to 'numpy/doc')
-rw-r--r--numpy/doc/swig/pyfragments.swg127
1 files changed, 9 insertions, 118 deletions
diff --git a/numpy/doc/swig/pyfragments.swg b/numpy/doc/swig/pyfragments.swg
index 6e812c647..3c9502ff5 100644
--- a/numpy/doc/swig/pyfragments.swg
+++ b/numpy/doc/swig/pyfragments.swg
@@ -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;
}
}