static VALUE rbreg_get(VALUE, VALUE rname) { lwc::Registry *reg = lwc::Registry::Instance(); if (!reg) { rb_raise(rb_eRuntimeError, "lwc::Registry has not yet been initialized"); } VALUE sname = rb_check_string_type(rname); if (NIL_P(sname)) { rb_raise(rb_eTypeError, "RLWC::Registry.get expects a string as argument"); } char *name = RSTRING(sname)->ptr; lwc::Object *obj = reg->get(name); if (!obj) { return Qnil; } else { VALUE rv = Qnil; //if (!strcmp(obj->getLoaderName(), "rbloader")) { // rv = ((Object*)obj)->self(); // //} else { rv = rb_funcall2(cLWCObject, rb_intern("new"), 0, NULL); SetObjectPointer(rv, obj); //} return rv; } }
void CPointerTypeInfo::Assign(TObjectPtr dst, TConstObjectPtr src, ESerialRecursionMode how) const { TConstObjectPtr data = GetObjectPointer(src); if ( how != eRecursive ) { SetObjectPointer(dst, how == eShallow ? (const_cast<void*>(data)) : 0); } else if ( data == 0) { SetObjectPointer(dst, 0); } else { TTypeInfo type = GetRealDataTypeInfo(data); TObjectPtr object = type->Create(); type->Assign(object, data, how); SetObjectPointer(dst, object); } }
static VALUE rbreg_destroy(VALUE self, VALUE robj) { lwc::Registry *reg = lwc::Registry::Instance(); if (!reg) { rb_raise(rb_eRuntimeError, "lwc::Registry has not yet been initialized"); } lwc::Object *obj = 0; rb::Exc::GetTypedPointer(robj, obj, cLWCObject); reg->destroy(obj); //RDATA(robj)->data = (void*)0; SetObjectPointer(robj, 0); return self; }
void CPointerTypeInfo::SetDefault(TObjectPtr dst) const { SetObjectPointer(dst, 0); }