| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 | 
							- #include "ruby.h"
 
- #include "caml/callback.h"
 
-      
 
- void initcaml(void) {
 
-   char *dummy_argv[] = {0};
 
-   caml_startup(dummy_argv);
 
- }
 
- VALUE OcamlMatrix = Qnil; // set up the Ruby namespace
 
-     
 
- void Init_ocamlmatrix();
 
- VALUE singleton_matrix_new(VALUE class, VALUE width, VALUE height);
 
- void method_assign(VALUE self, VALUE x, VALUE y, VALUE item);
 
- VALUE method_retrieve(VALUE self, VALUE x, VALUE y);
 
- VALUE method_matrix_mul(VALUE self, VALUE b);
 
- void Init_ocamlmatrix() {
 
-   OcamlMatrix = rb_define_module("OcamlMatrix");
 
-   rb_define_singleton_method(OcamlMatrix, "w_new_matrix", singleton_matrix_new, 2);
 
-   rb_define_method(OcamlMatrix, "w_matrix_assign", method_assign, 3);
 
-   rb_define_method(OcamlMatrix, "w_matrix_retrieve", method_retrieve, 2);
 
-   rb_define_method(OcamlMatrix, "w_matrix_mul", method_matrix_mul, 1);
 
-   initcaml();
 
- }
 
- VALUE singleton_matrix_new(VALUE class, VALUE width, VALUE height) {
 
-   CAMLparam0 ();
 
-   CAMLlocal1 (ocaml_m);
 
-   ocaml_m = ocaml_new_matrix(Val_long(NUM2LONG(width)), Val_long(NUM2LONG(height)));
 
-   VALUE my_m = Data_Wrap_Struct(class, 0, 0, ocaml_m);
 
-   rb_obj_call_init(my_m, 0, NULL);
 
-   CAMLreturnT (VALUE, my_m);
 
- }
 
- void method_assign(VALUE self, VALUE x, VALUE y, VALUE item) {
 
-   CAMLparam0 ();
 
-   CAMLlocal1 (ocaml_m);
 
-   Data_Get_Struct(self, value, ocaml_m);
 
-   ocaml_matrix_assign(ocaml_m, Val_long(NUM2LONG(x)), Val_long(NUM2LONG(y)), Val_long(NUM2LONG(item)));
 
-   CAMLreturn0;
 
- }
 
- VALUE method_retrieve(VALUE self, VALUE x, VALUE y) {
 
-   CAMLparam0 ();
 
-   CAMLlocal1 (ocaml_m);
 
-   Data_Get_Struct(self, value, ocaml_m);
 
-   VALUE retval = LONG2NUM(Long_val(ocaml_matrix_retrieve(ocaml_m,
 
-                                                          Val_long(NUM2LONG(x)),
 
-                                                          Val_long(NUM2LONG(y)))
 
-                                    ));
 
-   CAMLreturnT (VALUE, retval);
 
- }
 
- VALUE method_matrix_mul(VALUE self, VALUE b) {
 
-   CAMLparam0 ();
 
-   CAMLlocal3 (ocaml_m1, ocaml_m2, ocaml_m3);
 
-   Data_Get_Struct(self, value, ocaml_m1);
 
-   Data_Get_Struct(b, value, ocaml_m2);
 
-   ocaml_m3 = ocaml_matrix_mul(ocaml_m1, ocaml_m2);
 
-   VALUE my_m = Data_Wrap_Struct(class, 0, 0, ocaml_m);
 
-   rb_obj_call_init(my_m, 0, NULL);
 
-   CAMLreturnT (VALUE, my_m);
 
- }
 
 
  |