Golang C.sourcefunc_info类(方法)实例源码

下面列出了Golang C.sourcefunc_info 类(方法)源码代码实例,从而了解它的用法。

作者:pock    项目:go-gt   
//export _go_glib_sourcefunc
func _go_glib_sourcefunc(sfi *C.sourcefunc_info) {
	context := sourcefunc_contexts[int(sfi.func_no)]
	t := context.f.Type()
	fargs := make([]reflect.Value, t.NumIn())
	if len(fargs) > 0 {
		fargs[0] = reflect.ValueOf(context.data)
	}
	ret := context.f.Call(fargs)
	if len(ret) > 0 {
		bret, _ := ret[0].Interface().(bool)
		sfi.ret = gbool(bret)
	}
}

作者:lei    项目:go-gt   
//export _go_glib_sourcefunc
func _go_glib_sourcefunc(sfi *C.sourcefunc_info) {
	context := sourcefunc_contexts[int(sfi.func_no)]
	rf := reflect.ValueOf(context.f)
	t := rf.Type()
	fargs := make([]reflect.Value, t.NumIn())
	n := 0
	if len(fargs) > n && sfi.channel != nil {
		fargs[n] = reflect.ValueOf(int(sfi.condition))
		n++
	}
	if len(fargs) > n {
		fargs[n] = reflect.ValueOf(context.data)
		n++
	}
	ret := rf.Call(fargs)
	if len(ret) > 0 {
		bret, _ := ret[0].Interface().(bool)
		sfi.ret = bool2gboolean(bret)
	}
}

作者:matt    项目:go-gt   
//export _go_glib_sourcefunc
func _go_glib_sourcefunc(sfi *C.sourcefunc_info) {
	id := int(sfi.func_no)
	value, found := sourcefunc_contexts.Get(id)
	if !found {
		return
	}
	context := value.(*SourcefuncContext)
	t := context.f.Type()
	fargs := make([]reflect.Value, t.NumIn())
	if len(fargs) > 0 {
		fargs[0] = reflect.ValueOf(context.data)
	}
	ret := context.f.Call(fargs)
	if len(ret) > 0 {
		bret, _ := ret[0].Interface().(bool)
		sfi.ret = gbool(bret)
	}
	if !gobool(sfi.ret) {
		sourcefunc_contexts.Remove(id)
	}
}


问题


面经


文章

微信
公众号

扫码关注公众号