Files
Phoenix/src/longlong.sip
Robin Dunn b77c88a280 Merge tag 'wxPython-4.0.2' into wxPy-4.0.x
(cherry picked from commit 4c56c39e52)
2018-06-17 22:04:22 -07:00

108 lines
3.3 KiB
Plaintext

//--------------------------------------------------------------------------
// Name: datetime.sip
// Purpose: Implements a %MappedType for wxLongLong
//
// Author: Robin Dunn
//
// Created: 29-Feb-2012
// Copyright: (c) 2012-2018 by Total Control Software
// Licence: wxWindows license
//--------------------------------------------------------------------------
typedef long long wxLongLong_t /NoTypeName/;
typedef unsigned long long wxULongLong_t /NoTypeName/;
%MappedType wxLongLong {
%TypeHeaderCode
#include <wx/longlong.h>
%End
%ConvertToTypeCode
// Code to test a PyObject for compatibility
if (!sipIsErr) {
if (PyNumber_Check(sipPy))
return TRUE;
return FALSE;
}
// Code to convert from a compatible PyObject
#if wxUSE_LONGLONG_NATIVE
*sipCppPtr = new wxLongLong(PyLong_AsLongLong(sipPy));
#else
#error TODO. Get the hi/lo 32-bit dwords to construct the wxLongLong
#endif
return sipGetState(sipTransferObj);
%End
%ConvertFromTypeCode
#if wxUSE_LONGLONG_NATIVE
return PyLong_FromLongLong(sipCpp->GetValue());
#else
#error This is untested
// Convert a wxLongLong to a Python Long by getting the hi/lo
// dwords, then shifting and or-ing them together
PyObject *hi, *lo, *shifter, *shifted, *result;
hi = PyLong_FromLong( sipCpp->GetHi() );
lo = PyLong_FromLong( sipCpp->GetLo() );
shifter = PyLong_FromLong(32);
shifted = PyNumber_Lshift(hi, shifter);
result = PyNumber_Or(shifted, lo);
Py_DECREF(hi);
Py_DECREF(lo);
Py_DECREF(shifter);
Py_DECREF(shifted);
return result;
#endif
%End
};
%MappedType wxULongLong {
%TypeHeaderCode
#include <wx/longlong.h>
%End
%ConvertToTypeCode
// Code to test a PyObject for compatibility
if (!sipIsErr) {
if (PyNumber_Check(sipPy))
return TRUE;
return FALSE;
}
// Code to convert from a compatible PyObject
#if wxUSE_LONGLONG_NATIVE
*sipCppPtr = new wxULongLong(PyLong_AsUnsignedLongLong(sipPy));
#else
#error TODO. Get the hi/lo 32-bit dwords to construct the wxLongLong
#endif
return sipGetState(sipTransferObj);
%End
%ConvertFromTypeCode
#if wxUSE_LONGLONG_NATIVE
return PyLong_FromUnsignedLongLong(sipCpp->GetValue());
#else
#error This needs testing and fixing for unsigned
// Convert a wxLongLong to a Python Long by getting the hi/lo
// dwords, then shifting and or-ing them together
PyObject *hi, *lo, *shifter, *shifted, *result;
hi = PyLong_FromLong( sipCpp->GetHi() );
lo = PyLong_FromLong( sipCpp->GetLo() );
shifter = PyLong_FromLong(32);
shifted = PyNumber_Lshift(hi, shifter);
result = PyNumber_Or(shifted, lo);
Py_DECREF(hi);
Py_DECREF(lo);
Py_DECREF(shifter);
Py_DECREF(shifted);
return result;
#endif
%End
};