Browse Source

Trying callbacks but they are hard to implement.

Beoran 11 years ago
parent
commit
2c16bea7ce
4 changed files with 24 additions and 4 deletions
  1. 6 1
      src/algo/al/bitmap.go
  2. 12 0
      src/algo/al/callbacks.go
  3. 1 1
      src/algo/al/helpers.c
  4. 5 2
      src/algo/al/helpers.h

+ 6 - 1
src/algo/al/bitmap.go

@@ -128,7 +128,7 @@ func (upload *UploadBitmapFunction) toC() UploadBitmapC {
 }
 
 func CreateCustomBitmapRaw(w, h int, upload UploadBitmapFunction, data unsafe.Pointer) *Bitmap {
-	fn := (*C.go_upload_bitmap_function)(unsafe.Pointer(C.go_upload_bitmap_cb))
+	fn := (C.function_pointer)(unsafe.Pointer(C.go_upload_bitmap_cb))
 	return wrapBitmapRaw(C.al_create_custom_bitmap(C.int(w), C.int(h), fn, data))
 }
 
@@ -220,3 +220,8 @@ func (self *Bitmap) Convert() {
 func ConvertBitmaps() {
 	C.al_convert_bitmaps()
 }
+
+/*
+void qsort(void *base, size_t nmemb, size_t size,
+                  int (*compar)(const void *, const void *));
+*/

+ 12 - 0
src/algo/al/callbacks.go

@@ -13,3 +13,15 @@ import "unsafe"
 func go_upload_bitmap(bitmap unsafe.Pointer, data unsafe.Pointer) C.bool {
 	return false
 }
+
+var CallbackInt func() int = nil
+
+// generic function pointer caller
+
+//export go_generic_callback_int
+func go_generic_callback_int() int {
+	if CallbackInt != nil {
+		return CallbackInt()
+	}
+	return 0
+}

+ 1 - 1
src/algo/al/helpers.c

@@ -1,4 +1,4 @@
 #include "helpers.h"
 
-go_upload_bitmap_function * go_upload_bitmap_cb = go_upload_bitmap;
+function_pointer go_upload_bitmap_cb = (function_pointer) go_upload_bitmap;
 

+ 5 - 2
src/algo/al/helpers.h

@@ -1,6 +1,9 @@
 #include <allegro5/allegro.h>
 
+/* C Standard guarantees that all function pointers are equivalent. */
+typedef void (*function_pointer)(void);
+
+
 bool go_upload_bitmap(void * bitmap, void *data);
-typedef bool go_upload_bitmap_function(void  * bitmap, void *data);
-extern go_upload_bitmap_function * go_upload_bitmap_cb;
+extern function_pointer go_upload_bitmap_cb;