Add support for ptrdiff_t and size_t == long long
New fragment to check if long long is available using LLONG_MAX AsVal and From functions for ptrdiff_t and size_t now use long long if available and sizeof(ptrdiff_t) > sizeof(long)
This commit is contained in:
parent
a8cf1eddf8
commit
d2ab7e8bad
1 changed files with 58 additions and 12 deletions
|
|
@ -148,6 +148,12 @@ SWIG_AsVal_dec(bool)(SWIG_Object obj, bool *val)
|
|||
|
||||
/* long long/unsigned long long */
|
||||
|
||||
%fragment("SWIG_LongLongAvailable","header", fragment="<limits.h>") %{
|
||||
#if defined(LLONG_MAX) && !defined(SWIG_LONG_LONG_AVAILABLE)
|
||||
# define SWIG_LONG_LONG_AVAILABLE
|
||||
#endif
|
||||
%}
|
||||
|
||||
%ensure_type_fragments(long long)
|
||||
%ensure_type_fragments(unsigned long long)
|
||||
|
||||
|
|
@ -157,42 +163,82 @@ SWIG_AsVal_dec(bool)(SWIG_Object obj, bool *val)
|
|||
|
||||
/* size_t */
|
||||
|
||||
%fragment(SWIG_From_frag(size_t),"header",fragment=SWIG_From_frag(unsigned long)) {
|
||||
%fragment(SWIG_From_frag(size_t),"header",fragment=SWIG_From_frag(unsigned long),fragment=SWIG_From_frag(unsigned long long)) {
|
||||
SWIGINTERNINLINE SWIG_Object
|
||||
SWIG_From_dec(size_t)(size_t value)
|
||||
{
|
||||
return SWIG_From(unsigned long)(%numeric_cast(value, unsigned long));
|
||||
%#ifdef SWIG_LONG_LONG_AVAILABLE
|
||||
if (sizeof(size_t) <= sizeof(unsigned long)) {
|
||||
%#endif
|
||||
return SWIG_From(unsigned long)(%numeric_cast(value, unsigned long));
|
||||
%#ifdef SWIG_LONG_LONG_AVAILABLE
|
||||
} else {
|
||||
/* assume sizeof(size_t) <= sizeof(unsigned long long) */
|
||||
return SWIG_From(unsigned long long)(%numeric_cast(value, unsigned long long));
|
||||
}
|
||||
%#endif
|
||||
}
|
||||
}
|
||||
|
||||
%fragment(SWIG_AsVal_frag(size_t),"header",fragment=SWIG_AsVal_frag(unsigned long)) {
|
||||
%fragment(SWIG_AsVal_frag(size_t),"header",fragment=SWIG_AsVal_frag(unsigned long),fragment=SWIG_AsVal_frag(unsigned long long)) {
|
||||
SWIGINTERNINLINE int
|
||||
SWIG_AsVal_dec(size_t)(SWIG_Object obj, size_t *val)
|
||||
{
|
||||
unsigned long v;
|
||||
int res = SWIG_AsVal(unsigned long)(obj, val ? &v : 0);
|
||||
if (SWIG_IsOK(res) && val) *val = %numeric_cast(v, size_t);
|
||||
int res = SWIG_TypeError;
|
||||
%#ifdef SWIG_LONG_LONG_AVAILABLE
|
||||
if (sizeof(size_t) <= sizeof(unsigned long)) {
|
||||
%#endif
|
||||
unsigned long v;
|
||||
res = SWIG_AsVal(unsigned long)(obj, val ? &v : 0);
|
||||
if (SWIG_IsOK(res) && val) *val = %numeric_cast(v, size_t);
|
||||
%#ifdef SWIG_LONG_LONG_AVAILABLE
|
||||
} else if (sizeof(size_t) <= sizeof(unsigned long long)) {
|
||||
unsigned long long v;
|
||||
res = SWIG_AsVal(unsigned long long)(obj, val ? &v : 0);
|
||||
if (SWIG_IsOK(res) && val) *val = %numeric_cast(v, size_t);
|
||||
}
|
||||
%#endif
|
||||
return res;
|
||||
}
|
||||
}
|
||||
|
||||
/* ptrdiff_t */
|
||||
|
||||
%fragment(SWIG_From_frag(ptrdiff_t),"header",fragment=SWIG_From_frag(long)) {
|
||||
%fragment(SWIG_From_frag(ptrdiff_t),"header",fragment=SWIG_From_frag(long),fragment=SWIG_From_frag(long long)) {
|
||||
SWIGINTERNINLINE SWIG_Object
|
||||
SWIG_From_dec(ptrdiff_t)(ptrdiff_t value)
|
||||
{
|
||||
return SWIG_From(long)(%numeric_cast(value,long));
|
||||
%#ifdef SWIG_LONG_LONG_AVAILABLE
|
||||
if (sizeof(ptrdiff_t) <= sizeof(long)) {
|
||||
%#endif
|
||||
return SWIG_From(long)(%numeric_cast(value, long));
|
||||
%#ifdef SWIG_LONG_LONG_AVAILABLE
|
||||
} else {
|
||||
/* assume sizeof(ptrdiff_t) <= sizeof(long long) */
|
||||
return SWIG_From(long long)(%numeric_cast(value, long long));
|
||||
}
|
||||
%#endif
|
||||
}
|
||||
}
|
||||
|
||||
%fragment(SWIG_AsVal_frag(ptrdiff_t),"header",fragment=SWIG_AsVal_frag(long)) {
|
||||
%fragment(SWIG_AsVal_frag(ptrdiff_t),"header",fragment=SWIG_AsVal_frag(long),fragment=SWIG_AsVal_frag(long long)) {
|
||||
SWIGINTERNINLINE int
|
||||
SWIG_AsVal_dec(ptrdiff_t)(SWIG_Object obj, ptrdiff_t *val)
|
||||
{
|
||||
long v;
|
||||
int res = SWIG_AsVal(long)(obj, val ? &v : 0);
|
||||
if (SWIG_IsOK(res) && val) *val = %numeric_cast(v, ptrdiff_t);
|
||||
int res = SWIG_TypeError;
|
||||
%#ifdef SWIG_LONG_LONG_AVAILABLE
|
||||
if (sizeof(ptrdiff_t) <= sizeof(long)) {
|
||||
%#endif
|
||||
long v;
|
||||
res = SWIG_AsVal(long)(obj, val ? &v : 0);
|
||||
if (SWIG_IsOK(res) && val) *val = %numeric_cast(v, ptrdiff_t);
|
||||
%#ifdef SWIG_LONG_LONG_AVAILABLE
|
||||
} else if (sizeof(ptrdiff_t) <= sizeof(long long)) {
|
||||
long long v;
|
||||
res = SWIG_AsVal(long long)(obj, val ? &v : 0);
|
||||
if (SWIG_IsOK(res) && val) *val = %numeric_cast(v, ptrdiff_t);
|
||||
}
|
||||
%#endif
|
||||
return res;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue