add disown.i and li_attribute.i

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@7726 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
Marcelo Matus 2005-10-26 07:08:18 +00:00
commit 1fa14f74a7
12 changed files with 98 additions and 5 deletions

View file

@ -125,6 +125,7 @@ CPP_TEST_CASES += \
director_string \
director_unroll \
director_wombat \
disown \
dynamic_cast \
empty \
enum_plus \
@ -156,6 +157,7 @@ CPP_TEST_CASES += \
inline_initializer \
kind \
langobj \
li_attribute \
li_carrays \
li_cdata \
li_cpointer \

View file

@ -0,0 +1,47 @@
%module disown
%{
#include <iostream>
%}
#pragma SWIG nowarn=453
%apply SWIGTYPE *DISOWN { A *disown };
%inline {
struct A
{
~A()
{
// std::cout <<"delete A" << std::endl;
}
};
class B
{
A *_a;
public:
B() : _a(0)
{
}
~B()
{
if (_a) {
// std::cout <<"delete A from B" << std::endl;
delete _a;
}
// std::cout <<"delete B" << std::endl;
}
int acquire(A *disown)
{
// std::cout <<"acquire A" << std::endl;
_a = disown;
return 5;
}
};
}

View file

@ -1,5 +1,6 @@
%module li_attribute
%include exception.i
%include attribute.i
%attribute(A, int, a, get_a, set_a);

View file

@ -13,10 +13,11 @@ top_builddir = @top_builddir@
CPP_TEST_CASES += \
primitive_types \
li_attribute \
li_cdata \
li_cstring \
C_TEST_CASES += \
li_cdata \
li_cstring \

View file

@ -0,0 +1,10 @@
use disown;
if (1) {
$a = new disown::A();
$b = new disown::B();
$c = $b->acquire($a);
}

View file

@ -24,7 +24,6 @@ CPP_TEST_CASES += \
input \
inplaceadd \
kwargs \
li_attribute \
li_cstring \
li_cwstring \
li_implicit \

View file

@ -0,0 +1,6 @@
from disown import *
a = A()
b = B()
b.acquire(a)

View file

@ -15,10 +15,11 @@ CPP_TEST_CASES = \
track_objects \
track_objects_directors \
primitive_types \
li_attribute \
li_cdata \
li_cstring
C_TEST_CASES += \
li_cdata \
li_cstring
include $(srcdir)/../common.mk

View file

@ -0,0 +1,9 @@
require 'disown'
include Disown
a = A.new
b = B.new
b.acquire(a)

View file

@ -13,7 +13,7 @@
%typemap(argout) Foo** foo {
/* %typemap(argout) Foo** foo */
$result = SWIG_NewPointerObj((void *) *$1, $*1_descriptor, 0);
$result = SWIG_NewPointerObj((void *) *$1, $*1_descriptor, $track);
}
%apply SWIGTYPE *DISOWN {Foo* ownedFoo};

View file

@ -13,12 +13,13 @@ top_builddir = @top_builddir@
CPP_TEST_CASES += \
primitive_types \
li_attribute \
li_cdata \
li_cstring \
li_cwstring \
li_std_wstring
C_TEST_CASES += \
li_cdata \
li_cstring \
li_cwstring

View file

@ -0,0 +1,16 @@
# This is the union runtime testcase. It ensures that values within a
# union embedded within a struct can be set and read correctly.
if [ catch { load ./disown[info sharedlibextension] disown} err_msg ] {
puts stderr "Could not load shared object:\n$err_msg"
}
set x 0
while {$x<100} {
set a [new_A]
B b
b acquire $a
incr x
}