コード例 #1
0
ファイル: registry.cpp プロジェクト: gatgui/lwc
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;
    }
}
コード例 #2
0
ファイル: ptrinfo.cpp プロジェクト: swuecho/igblast
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);
    }
}
コード例 #3
0
ファイル: registry.cpp プロジェクト: gatgui/lwc
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;
}
コード例 #4
0
ファイル: ptrinfo.cpp プロジェクト: swuecho/igblast
void CPointerTypeInfo::SetDefault(TObjectPtr dst) const
{
    SetObjectPointer(dst, 0);
}