perl binding for C++ ref-counted object

[email protected] (YangXi)
Newsgroups perl.xs
Message-ID <[email protected]>
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();
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.