Remove an unnecessary shared_ptr reference count increment in Ruby wrappers
When wrapping STL containers, remove a shared_ptr reference count increment when an upcast is needed when checking type conversion in traits_check::check.
This commit is contained in:
parent
67a38589a8
commit
6cec69ef7b
1 changed files with 20 additions and 17 deletions
|
|
@ -13,12 +13,13 @@ namespace swig {
|
||||||
template <class Type>
|
template <class Type>
|
||||||
struct traits_asptr<std::shared_ptr<Type> > {
|
struct traits_asptr<std::shared_ptr<Type> > {
|
||||||
static int asptr(VALUE obj, std::shared_ptr<Type> **val) {
|
static int asptr(VALUE obj, std::shared_ptr<Type> **val) {
|
||||||
std::shared_ptr<Type> *p = 0;
|
int res = SWIG_ERROR;
|
||||||
swig_type_info *descriptor = type_info<std::shared_ptr<Type> >();
|
swig_type_info *descriptor = type_info<std::shared_ptr<Type> >();
|
||||||
swig_ruby_owntype newmem = {0, 0};
|
|
||||||
int res = descriptor ? SWIG_ConvertPtrAndOwn(obj, (void **)&p, descriptor, 0, &newmem) : SWIG_ERROR;
|
|
||||||
if (SWIG_IsOK(res)) {
|
|
||||||
if (val) {
|
if (val) {
|
||||||
|
std::shared_ptr<Type> *p = 0;
|
||||||
|
swig_ruby_owntype newmem = {0, 0};
|
||||||
|
res = descriptor ? SWIG_ConvertPtrAndOwn(obj, (void **)&p, descriptor, 0, &newmem) : SWIG_ERROR;
|
||||||
|
if (SWIG_IsOK(res)) {
|
||||||
if (*val) {
|
if (*val) {
|
||||||
**val = p ? *p : std::shared_ptr<Type>();
|
**val = p ? *p : std::shared_ptr<Type>();
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -28,10 +29,12 @@ namespace swig {
|
||||||
res = SWIG_ERROR;
|
res = SWIG_ERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if (newmem.own & SWIG_CAST_NEW_MEMORY)
|
if (newmem.own & SWIG_CAST_NEW_MEMORY)
|
||||||
delete p;
|
delete p;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
res = descriptor ? SWIG_ConvertPtr(obj, 0, descriptor, 0) : SWIG_ERROR;
|
||||||
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue