#ifndef __V8_REF_H #define __V8_REF_H #include <ruby.h> #include <v8.h> using namespace v8; /* * The objectRef keeps a persistent V8 handle, so ruby object can access * a reference to it. * */ struct v8_ref { v8_ref(Handle<void> object, VALUE orig=Qnil); virtual ~v8_ref(); void set(const char *name, VALUE ref); Persistent<void> handle; VALUE references; VALUE origin; }; /* API */ VALUE v8_ref_new(VALUE obj, Handle<void> handle, VALUE orig=Qnil); VALUE v8_ref_orig(VALUE obj); void v8_ref_set(VALUE obj, const char *name, VALUE ref); /* * Gets reference to V8 object from related ruby object, and reflects * it to specified type. * * v8_ref_get<String>(rb_str_value); * v8_ref_get<Integer>(rb_int_value); * */ template <class T> Local<T> v8_ref_get(VALUE obj) { v8_ref* r = 0; Data_Get_Struct(obj, struct v8_ref, r); return (T*)*r->handle; } #endif//__V8_REF_H