Hi, everyone!I'm asking a question about how to wrapping a refcounted class
inside perl.I have some experience on embedding perl in C++, but have little
knowledge on perl XS, and I found perldoc perlxs really puzzled.Firstly, I have
an simple refcounted C++ base class like this:class Referenced {public:
Referenced():refcnt(0) { } virtual ~Referenced() {} void refInc() {
refcnt++; } void refDec() { if (--refcnt<=0) delete this;
}protected: int refcnt;};In my wrapper, I want to have following functions:-
able to construct my object within perl, like My::Class->new();- able to
construct my object in C++, and pass it to perl sub as argument;- handle ref
count correctly;So, is these things correct for my XS?Referenced::new(class)
PREINIT: const char* class; Referenced* obj; SV* obj_wrap;
SV* sv; CODE: // create object obj = new Referenced;
obj->refInc(); // store pointer as unsigned int?
obj_wrap = newSV(0); sv_setuv(obj_wrap, (uv)obj); // we
always wrap 2 layers SVs for a class? Should I do these things manually?
sv = newSVrv(obj_wrap, class); RETVAL = sv; OUTPUT: RETVAL//
is this correct?// I don't really understand when would Perl do automatic
scalar conversion, and when should I manually do that.Referenced::DESTROY(self)
PREINIT: Referenced* self; CODE: self->refDec();