blob: 2239bdf8051d5ee61d8bafe0cbf1533e8f492e2b [file] [log] [blame]
// Copyright 2014 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Package seq implements the machine-dependent seq serialization format.
//
// Implementations of Transact and FinalizeRef are provided by a
// specific foreign language binding package, e.g. go.mobile/bind/java.
//
// Designed only for use by the code generated by gobind. Don't try to
// use this directly.
package seq // import "golang.org/x/mobile/bind/seq"
// TODO(crawshaw):
// There is opportunity for optimizing these language
// bindings which requires deconstructing seq into something
// gnarly. So don't get too attached to the design.
import "fmt"
// Transact calls a method on a foreign object instance.
// It blocks until the call is complete.
var Transact func(ref *Ref, code int, in *Buffer) (out *Buffer)
// FinalizeRef is the finalizer used on foreign objects.
var FinalizeRef func(ref *Ref)
// A Func can be registered and called by a foreign language.
type Func func(out, in *Buffer)
// Registry holds functions callable from gobind generated bindings.
// Functions are keyed by descriptor and function code.
var Registry = make(map[string]map[int]Func)
// Register registers a function in the Registry.
func Register(descriptor string, code int, fn Func) {
m := Registry[descriptor]
if m == nil {
m = make(map[int]Func)
Registry[descriptor] = m
}
if m[code] != nil {
panic(fmt.Sprintf("registry.Register: %q/%d already registered", descriptor, code))
}
m[code] = fn
}