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,24 +13,27 @@ namespace swig {
|
|||
template <class Type>
|
||||
struct traits_asptr<std::shared_ptr<Type> > {
|
||||
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_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) {
|
||||
**val = p ? *p : std::shared_ptr<Type>();
|
||||
} else {
|
||||
*val = p;
|
||||
if (newmem.own & SWIG_CAST_NEW_MEMORY) {
|
||||
// Upcast for pointers to shared_ptr in this generic framework has not been implemented
|
||||
res = SWIG_ERROR;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (newmem.own & SWIG_CAST_NEW_MEMORY)
|
||||
delete p;
|
||||
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) {
|
||||
**val = p ? *p : std::shared_ptr<Type>();
|
||||
} else {
|
||||
*val = p;
|
||||
if (newmem.own & SWIG_CAST_NEW_MEMORY) {
|
||||
// Upcast for pointers to shared_ptr in this generic framework has not been implemented
|
||||
res = SWIG_ERROR;
|
||||
}
|
||||
}
|
||||
if (newmem.own & SWIG_CAST_NEW_MEMORY)
|
||||
delete p;
|
||||
}
|
||||
} else {
|
||||
res = descriptor ? SWIG_ConvertPtr(obj, 0, descriptor, 0) : SWIG_ERROR;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue