Blob Blame History Raw
From cca79ea56a7ee83a4c67b432decdaef3de8c9d30 Mon Sep 17 00:00:00 2001
From: Markus Mottl <markus.mottl@gmail.com>
Date: Thu, 25 Feb 2021 10:43:04 -0500
Subject: [PATCH 2/4] Used new OCaml 4.12 C-macros

---
 dune-project      |  2 +-
 src/mlgsl_fit.c   |  6 +++---
 src/mlgsl_monte.c |  2 +-
 src/mlgsl_odeiv.c |  8 ++++----
 src/mlgsl_stats.c | 34 +++++++++++++++++-----------------
 src/wrappers.h    |  1 -
 6 files changed, 26 insertions(+), 27 deletions(-)

diff --git a/dune-project b/dune-project
index 27bdde7..704028c 100644
--- a/dune-project
+++ b/dune-project
@@ -25,7 +25,7 @@ most frequently used functions for scientific computation including algorithms
 for optimization, differential equations, statistics, random number generation,
 linear algebra, etc.")
   (depends
-    (ocaml (>= 4.08))
+    (ocaml (>= 4.12))
     dune-configurator
     (conf-gsl :build)
     (conf-pkg-config :build)
diff --git a/src/mlgsl_fit.c b/src/mlgsl_fit.c
index 655f1a4..0776c0a 100644
--- a/src/mlgsl_fit.c
+++ b/src/mlgsl_fit.c
@@ -23,7 +23,7 @@ CAMLprim value ml_gsl_fit_linear(value wo, value x, value y)
   if(Double_array_length(y) != N)
     GSL_ERROR("array sizes differ", GSL_EBADLEN);
 
-  if(wo == Val_none)
+  if(Is_none(wo))
     gsl_fit_linear(Double_array_val(x), 1, 
 		   Double_array_val(y), 1, N,
 		   &c0, &c1, &cov00, &cov01, &cov11, &sumsq);
@@ -68,7 +68,7 @@ CAMLprim value ml_gsl_fit_mul(value wo, value x, value y)
   if(Double_array_length(y) != N)
     GSL_ERROR("array sizes differ", GSL_EBADLEN);
 
-  if(wo == Val_none)
+  if(Is_none(wo))
     gsl_fit_mul(Double_array_val(x), 1, Double_array_val(y), 1, N,
 		&c1, &cov11, &sumsq);
   else {
@@ -120,7 +120,7 @@ CAMLprim value ml_gsl_multifit_linear(value wo, value x, value y,
   _DECLARE_VECTOR2(y,c);
   _CONVERT_MATRIX2(x,cov);
   _CONVERT_VECTOR2(y,c);
-  if(wo == Val_none)
+  if(Is_none(wo))
     gsl_multifit_linear(&m_x, &v_y, &v_c, &m_cov, 
 			&chisq, MultifitWS_val(ws));
   else {
diff --git a/src/mlgsl_monte.c b/src/mlgsl_monte.c
index 3fe90c7..ffecb55 100644
--- a/src/mlgsl_monte.c
+++ b/src/mlgsl_monte.c
@@ -313,7 +313,7 @@ CAMLprim value ml_gsl_monte_vegas_get_params(value state)
   Store_field(r, 4, Val_int(s->verbose));
   {
     value vchan;
-    if(GSLVEGASSTREAM_VAL(state) != Val_none){
+    if(Is_some(GSLVEGASSTREAM_VAL(state))){
       vchan=alloc_small(1, 0);
       Field(vchan, 0)=GSLVEGASSTREAM_VAL(state);
     }
diff --git a/src/mlgsl_odeiv.c b/src/mlgsl_odeiv.c
index b7abcc0..7a4376b 100644
--- a/src/mlgsl_odeiv.c
+++ b/src/mlgsl_odeiv.c
@@ -68,14 +68,14 @@ CAMLprim value ml_gsl_odeiv_alloc_system(value func, value ojac, value dim)
   p->dim = Int_val(dim);
   p->closure = func;
   register_global_root(&(p->closure));
-  p->jac_closure = (ojac == Val_none ? Val_unit : Unoption(ojac));
+  p->jac_closure = (Is_none(ojac) ? Val_unit : Unoption(ojac));
   register_global_root(&(p->jac_closure));
   p->arr1 = alloc(Int_val(dim) * Double_wosize, Double_array_tag);
   register_global_root(&(p->arr1));
   p->arr2 = alloc(Int_val(dim) * Double_wosize, Double_array_tag);
   register_global_root(&(p->arr2));
   p->mat =
-    (ojac == Val_none)
+    Is_none(ojac)
     ? Val_unit
     : alloc_bigarray_dims(barr_flags, 2, NULL, Int_val(dim), Int_val(dim));
   register_global_root(&(p->mat));
@@ -137,9 +137,9 @@ CAMLprim value ml_gsl_odeiv_step_apply(value step, value t, value h, value y,
   LOCALARRAY(double, y_copy,  Double_array_length(y)); 
   LOCALARRAY(double, yerr_copy, Double_array_length(yerr)); 
   size_t len_dydt_in = 
-    odydt_in == Val_none ? 0 : Double_array_length(Unoption(odydt_in)) ;
+    Is_none(odydt_in) ? 0 : Double_array_length(Unoption(odydt_in)) ;
   size_t len_dydt_out = 
-    odydt_out == Val_none ? 0 : Double_array_length(Unoption(odydt_out)) ;
+    Is_none(odydt_out) ? 0 : Double_array_length(Unoption(odydt_out)) ;
   LOCALARRAY(double, dydt_in, len_dydt_in); 
   LOCALARRAY(double, dydt_out, len_dydt_out); 
   int status;
diff --git a/src/mlgsl_stats.c b/src/mlgsl_stats.c
index a754d19..2c91ede 100644
--- a/src/mlgsl_stats.c
+++ b/src/mlgsl_stats.c
@@ -21,7 +21,7 @@ CAMLprim value ml_gsl_stats_mean(value ow, value data)
 {
   size_t len = Double_array_length(data);
   double result;
-  if(ow == Val_none)
+  if(Is_none(ow))
     result = gsl_stats_mean(Double_array_val(data), 1, len);
   else {
     value w = Unoption(ow);
@@ -36,8 +36,8 @@ CAMLprim value ml_gsl_stats_variance(value ow, value omean, value data)
 {
   size_t len = Double_array_length(data);
   double result;
-  if(ow == Val_none)
-    if(omean == Val_none)
+  if(Is_none(ow))
+    if(Is_none(omean))
       result = gsl_stats_variance(Double_array_val(data), 1, len);
     else
       result = gsl_stats_variance_m(Double_array_val(data), 1, len, 
@@ -45,7 +45,7 @@ CAMLprim value ml_gsl_stats_variance(value ow, value omean, value data)
   else {
     value w = Unoption(ow);
     check_array_size(data, w);
-    if(omean == Val_none)
+    if(Is_none(omean))
       result = gsl_stats_wvariance(Double_array_val(w), 1, 
 				   Double_array_val(data), 1, len);
     else
@@ -60,8 +60,8 @@ CAMLprim value ml_gsl_stats_sd(value ow, value omean, value data)
 {
   size_t len = Double_array_length(data);
   double result;
-  if(ow == Val_none)
-    if(omean == Val_none)
+  if(Is_none(ow))
+    if(Is_none(omean))
       result = gsl_stats_sd(Double_array_val(data), 1, len);
     else
       result = gsl_stats_sd_m(Double_array_val(data), 1, len, 
@@ -69,7 +69,7 @@ CAMLprim value ml_gsl_stats_sd(value ow, value omean, value data)
   else {
     value w = Unoption(ow);
     check_array_size(data, w);
-    if(omean == Val_none)
+    if(Is_none(omean))
       result = gsl_stats_wsd(Double_array_val(w), 1, 
 			     Double_array_val(data), 1, len);
     else
@@ -85,7 +85,7 @@ CAMLprim value ml_gsl_stats_variance_with_fixed_mean(value ow,
 {
   size_t len = Double_array_length(data);
   double result;
-  if(ow == Val_none)
+  if(Is_none(ow))
     result = gsl_stats_variance_with_fixed_mean(Double_array_val(data), 
 						1, len, Double_val(mean));
   else {
@@ -103,7 +103,7 @@ CAMLprim value ml_gsl_stats_sd_with_fixed_mean(value ow,
 {
   size_t len = Double_array_length(data);
   double result;
-  if(ow == Val_none)
+  if(Is_none(ow))
     result = gsl_stats_sd_with_fixed_mean(Double_array_val(data), 
 					  1, len, Double_val(mean));
   else {
@@ -120,8 +120,8 @@ CAMLprim value ml_gsl_stats_absdev(value ow, value omean, value data)
 {
   size_t len = Double_array_length(data);
   double result;
-  if(ow == Val_none)
-    if(omean == Val_none)
+  if(Is_none(ow))
+    if(Is_none(omean))
       result = gsl_stats_absdev(Double_array_val(data), 1, len);
     else
       result = gsl_stats_absdev_m(Double_array_val(data), 1, len, 
@@ -129,7 +129,7 @@ CAMLprim value ml_gsl_stats_absdev(value ow, value omean, value data)
   else {
     value w = Unoption(ow);
     check_array_size(data, w);
-    if(omean == Val_none)
+    if(Is_none(omean))
       result = gsl_stats_wabsdev(Double_array_val(w), 1, 
 				 Double_array_val(data), 1, len);
     else
@@ -144,7 +144,7 @@ CAMLprim value ml_gsl_stats_skew(value ow, value data)
 {
   size_t len = Double_array_length(data);
   double result;
-  if(ow == Val_none)
+  if(Is_none(ow))
     result = gsl_stats_skew(Double_array_val(data), 1, len);
   else {
     value w = Unoption(ow);
@@ -160,7 +160,7 @@ CAMLprim value ml_gsl_stats_skew_m_sd(value ow, value mean,
 {
   size_t len = Double_array_length(data);
   double result;
-  if(ow == Val_none)
+  if(Is_none(ow))
     result = gsl_stats_skew_m_sd(Double_array_val(data), 1, len,
 				 Double_val(mean), Double_val(sd));
   else {
@@ -177,7 +177,7 @@ CAMLprim value ml_gsl_stats_kurtosis(value ow, value data)
 {
   size_t len = Double_array_length(data);
   double result;
-  if(ow == Val_none)
+  if(Is_none(ow))
     result = gsl_stats_kurtosis(Double_array_val(data), 1, len);
   else {
     value w = Unoption(ow);
@@ -193,7 +193,7 @@ CAMLprim value ml_gsl_stats_kurtosis_m_sd(value ow, value mean,
 {
   size_t len = Double_array_length(data);
   double result;
-  if(ow == Val_none)
+  if(Is_none(ow))
     result = gsl_stats_kurtosis_m_sd(Double_array_val(data), 1, len,
 				     Double_val(mean), Double_val(sd));
   else {
@@ -210,7 +210,7 @@ CAMLprim value ml_gsl_stats_lag1_autocorrelation(value omean, value data)
 {
   size_t len = Double_array_length(data);
   double result;
-  if(omean == Val_none)
+  if(Is_none(omean))
     result = gsl_stats_lag1_autocorrelation(Double_array_val(data), 1, len);
   else
     result = gsl_stats_lag1_autocorrelation_m(Double_array_val(data), 1, len, 
diff --git a/src/wrappers.h b/src/wrappers.h
index 3bd852d..bdaea4b 100644
--- a/src/wrappers.h
+++ b/src/wrappers.h
@@ -17,7 +17,6 @@
 
 #define Unoption(v) (Field((v), 0))
 #define Opt_arg(v, conv, def) (Is_block(v) ? conv(Field((v),0)) : (def))
-#define Val_none Val_int(0)
 
 #define Val_negbool(x) Val_not(Val_bool(x))
 
-- 
2.41.0