director_basic


function self=OctFoo()
  global director_basic;
  self=subclass(director_basic.Foo());
  self.ping=@OctFoo_ping;
end
function string=OctFoo_ping(self)
  string="OctFoo::ping()";
end

a = OctFoo();

if (!strcmp(a.ping(),"OctFoo::ping()"))
  error(a.ping())
endif

if (!strcmp(a.pong(),"Foo::pong();OctFoo::ping()"))
  error(a.pong())
endif

b = director_basic.Foo();

if (!strcmp(b.ping(),"Foo::ping()"))
  error(b.ping())
endif

if (!strcmp(b.pong(),"Foo::pong();Foo::ping()"))
  error(b.pong())
endif

a = director_basic.A1(1);

if (a.rg(2) != 2)
  error("failed");
endif

function self=OctClass()
  global director_basic;
  self=subclass(director_basic.MyClass());
  self.method=@OctClass_method;
  self.vmethod=@OctClass_vmethod;
end
function OctClass_method(self,vptr)
  self.cmethod = 7;
end
function out=OctClass_vmethod(self,b)
  b.x = b.x + 31;
  out=b;
end

b = director_basic.Bar(3);
d = director_basic.MyClass();
c = OctClass();

cc = director_basic.MyClass_get_self(c);
dd = director_basic.MyClass_get_self(d);

bc = cc.cmethod(b);
bd = dd.cmethod(b);

cc.method(b);
if (c.cmethod != 7)
  error("failed");
endif

if (bc.x != 34)
  error("failed");
endif


if (bd.x != 16)
  error("failed");
endif


function self=OctMulti()
  global director_basic;
  self=subclass(director_basic.Foo(),director_basic.MyClass());
  self.vmethod=@OctMulti_vmethod;
  self.ping=@OctMulti_ping;
end
function out=OctMulti_vmethod(self,b)
  b.x = b.x + 31;
  out=b;
end
function out=OctMulti_ping(self)
  out="OctFoo::ping()";
end

a = 0;
for i=0:100,
    octmult = OctMulti();
    octmult.pong();
    clear octmult 
endfor


octmult = OctMulti();


p1 = director_basic.Foo_get_self(octmult);
p2 = director_basic.MyClass_get_self(octmult);

p1.ping();
p2.vmethod(bc);



