#include "rr.h" namespace rr { template Ref Ref::create(v8::Handle handle, VALUE klass) { return Ref(new Holder(handle, klass)); } template Ref::Ref(Ref::Holder* holder) { this->holder = holder; } template Ref::Ref(VALUE wrapper) { Holder* holder = NULL; Data_Get_Struct(wrapper, class Holder, holder) ; this->holder = holder; } template Ref::operator VALUE() { return holder->value; } template Ref::Holder::Holder(v8::Handle handle, VALUE klass) { this->handle = v8::Persistent::New(handle); this->value = Data_Wrap_Struct(klass, 0, &Holder::enqueue, this); } template Ref::Holder::~Holder() { this->handle.Dispose(); } template void Ref::Holder::enqueue(Holder* holder) { holder->value = Qnil; printf("enqueuing a reference for garbage collection (should actually do something)\n"); } }