The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
PerlTokenFilter *
new(CLASS, in)
        const char* CLASS
        TokenStream* in
    CODE:
        MarkObjCppOwned(ST(1));
        RETVAL = new PerlTokenFilter(in);
    OUTPUT:
        RETVAL
    CLEANUP:
        RETVAL->setObject(ST(0));
        // Memorize Reader in returned blessed hash reference.
        // We don't want it to be destroyed by perl before the C++ object it
        // contains gets destroyed by C++. Otherwise this would cause a seg fault.
        hv_store((HV *) SvRV(ST(0)), "TokenStream", 11, newRV(SvRV(ST(1))), 1);

bool
next(token)
        Token *token
    CODE:
        croak("Virtual method Lucene::TokenFilter::next() not implemented");

void
DESTROY(self)
        PerlTokenFilter *self
    CODE:
        if (!IsObjCppOwned(ST(0)))
            delete self;