diff --git a/linear_models/cfuncs.go b/linear_models/cfuncs.go new file mode 100644 index 0000000..bde2f0a --- /dev/null +++ b/linear_models/cfuncs.go @@ -0,0 +1,14 @@ +// +build go1.2 + +package linear_models + +/* + +void libLinearPrintFunc(char *); + +void golearn_liblinear_print_func_cgo(char *c) { + libLinearPrintFunc(c); +} + +*/ +import "C" diff --git a/linear_models/liblinear.go b/linear_models/liblinear.go index e5d0682..0f627a2 100644 --- a/linear_models/liblinear.go +++ b/linear_models/liblinear.go @@ -59,6 +59,7 @@ func NewProblem(X [][]float64, y []float64, bias float64) *Problem { } func Train(prob *Problem, param *Parameter) *Model { + libLinearHookPrintFunc() // Sets up logging return &Model{C.train(&prob.c_prob, ¶m.c_param)} } diff --git a/linear_models/liblinear_print.go b/linear_models/liblinear_print.go new file mode 100644 index 0000000..f472a77 --- /dev/null +++ b/linear_models/liblinear_print.go @@ -0,0 +1,27 @@ +// +build go1.2 + +package linear_models + +/* +#cgo LDFLAGS: -llinear +#cgo CFLAGS: +#include + +typedef void (*print_func)(char *); +void golearn_liblinear_print_func_cgo(char *); +*/ +import "C" + +import ( + "fmt" + "unsafe" +) + +//export libLinearPrintFunc +func libLinearPrintFunc(str *C.char) { + fmt.Println(C.GoString(str)) +} + +func libLinearHookPrintFunc() { + C.set_print_string_function((C.print_func)(unsafe.Pointer(C.golearn_liblinear_print_func_cgo))) +} diff --git a/linear_models/liblinear_print_11.go b/linear_models/liblinear_print_11.go new file mode 100644 index 0000000..92616ce --- /dev/null +++ b/linear_models/liblinear_print_11.go @@ -0,0 +1,16 @@ +// +build go1.1 +// +build !go1.2 +// +build !go1.3 + +package linear_models + +import "C" + +//export libLinearPrintFunc +func libLinearPrintFunc(str *C.char) { + // Stubbed +} + +func libLinearHookPrintFunc() { + // Stubbed +}