bool IntType<SPECIFY_TYPE>::isSameType(PyObject* pyValue) { int ival = 0; if(PyLong_Check(pyValue)) { ival = (int)PyLong_AsLong(pyValue); if(PyErr_Occurred()) { PyErr_Clear(); ival = (int)PyLong_AsUnsignedLong(pyValue); if (PyErr_Occurred()) { OUT_TYPE_ERROR("INT"); return false; } } } else { OUT_TYPE_ERROR("INT"); return false; } SPECIFY_TYPE val = (SPECIFY_TYPE)ival; if(ival != int(val)) { ERROR_MSG("IntType::isSameType:%d is out of range (currVal = %d).\n", ival, int(val)); return false; } return true; }
//------------------------------------------------------------------------------------- bool UInt64Type::isSameType(PyObject* pyValue) { if(pyValue == NULL) { OUT_TYPE_ERROR("UINT64"); return false; } if (!PyLong_Check(pyValue)) return false; PyLong_AsUnsignedLongLong(pyValue); if (!PyErr_Occurred()) return true; PyErr_Clear(); PyLong_AsUnsignedLong(pyValue); if (!PyErr_Occurred()) return true; PyErr_Clear(); long v = PyLong_AsLong(pyValue); if (!PyErr_Occurred()) { if(v < 0) { OUT_TYPE_ERROR("UINT64"); return false; } return true; } PyErr_Clear(); OUT_TYPE_ERROR("UINT64"); return false; }