syncbase/bridge/cgo: Two changes to the C API for handling callbacks

The first change is to switch the handle from 'int' to 'void*'. This
will help interfacing with language where is easier to pass a pointer
to a struct instead of explicitly managing the mapping to it. Both
Java and Swift manage memory in a way that makes is hard/impossible
to use pointers so the 'void*' will be used as a larger 'int'.

The second change is to use a single handle instead of two for both
watching and scanning. This makes the C API simpler and is more inline
with what the Java/Swift need to do (namely, keeping a struct that
describes both callbacks).

Note: the author of the Swift code is Aaron Zinman <aaron@azinman.com>.

MultiPart: 1/2
Change-Id: I6aa1f300a7d97aa1c9ef0f20b08cde7ac29cd5fa
diff --git a/services/syncbase/bridge/cgo/impl.go b/services/syncbase/bridge/cgo/impl.go
index 4617232..ffa8b7b 100644
--- a/services/syncbase/bridge/cgo/impl.go
+++ b/services/syncbase/bridge/cgo/impl.go
@@ -53,17 +53,17 @@
 #include "lib.h"
 
 static void CallDbWatchPatternsCallbacksOnChange(v23_syncbase_DbWatchPatternsCallbacks cbs, v23_syncbase_WatchChange wc) {
-  cbs.onChange(cbs.hOnChange, wc);
+  cbs.onChange(cbs.handle, wc);
 }
 static void CallDbWatchPatternsCallbacksOnError(v23_syncbase_DbWatchPatternsCallbacks cbs, v23_syncbase_VError err) {
-  cbs.onError(cbs.hOnChange, cbs.hOnError, err);
+  cbs.onError(cbs.handle, err);
 }
 
 static void CallCollectionScanCallbacksOnKeyValue(v23_syncbase_CollectionScanCallbacks cbs, v23_syncbase_KeyValue kv) {
-  cbs.onKeyValue(cbs.hOnKeyValue, kv);
+  cbs.onKeyValue(cbs.handle, kv);
 }
 static void CallCollectionScanCallbacksOnDone(v23_syncbase_CollectionScanCallbacks cbs, v23_syncbase_VError err) {
-  cbs.onDone(cbs.hOnKeyValue, cbs.hOnDone, err);
+  cbs.onDone(cbs.handle, err);
 }
 */
 import "C"
diff --git a/services/syncbase/bridge/cgo/lib.h b/services/syncbase/bridge/cgo/lib.h
index 64d849a..d216df6 100644
--- a/services/syncbase/bridge/cgo/lib.h
+++ b/services/syncbase/bridge/cgo/lib.h
@@ -131,25 +131,18 @@
 ////////////////////////////////////////
 // Functions
 
-// Callbacks are represented as struct
-// {v23_syncbase_Handle, f(v23_syncbase_Handle, ...)} to allow for currying
-// RefMap handles to Swift closures.
-// https://forums.developer.apple.com/message/15725#15725
-
-typedef int v23_syncbase_Handle;
+typedef void* v23_syncbase_Handle;
 
 typedef struct {
-  v23_syncbase_Handle hOnChange;
-  v23_syncbase_Handle hOnError;
-  void (*onChange)(v23_syncbase_Handle hOnChange, v23_syncbase_WatchChange);
-  void (*onError)(v23_syncbase_Handle hOnChange, v23_syncbase_Handle hOnError, v23_syncbase_VError);
+  v23_syncbase_Handle handle;
+  void (*onChange)(v23_syncbase_Handle handle, v23_syncbase_WatchChange);
+  void (*onError)(v23_syncbase_Handle handle, v23_syncbase_VError);
 } v23_syncbase_DbWatchPatternsCallbacks;
 
 typedef struct {
-  v23_syncbase_Handle hOnKeyValue;
-  v23_syncbase_Handle hOnDone;
-  void (*onKeyValue)(v23_syncbase_Handle hOnKeyValue, v23_syncbase_KeyValue);
-  void (*onDone)(v23_syncbase_Handle hOnKeyValue, v23_syncbase_Handle hOnDone, v23_syncbase_VError);
+  v23_syncbase_Handle handle;
+  void (*onKeyValue)(v23_syncbase_Handle handle, v23_syncbase_KeyValue);
+  void (*onDone)(v23_syncbase_Handle handle, v23_syncbase_VError);
 } v23_syncbase_CollectionScanCallbacks;
 
 #endif  // V23_SYNCBASE_LIB_H_