aboutsummaryrefslogtreecommitdiff
path: root/subprojects
diff options
context:
space:
mode:
authorThomas White <taw@physics.org>2023-04-24 14:49:53 +0200
committerThomas White <taw@physics.org>2023-07-28 13:22:04 +0200
commitc8fb149760f7a8ef4e018f22e79bcb48e1e3c444 (patch)
treebd026b2ff0a14186efd26af3a2ff23d2b71b5baa /subprojects
parent01f6f6ec756a435c0187154627e3a8900bcd3e11 (diff)
Add C wrapper for Mille
Diffstat (limited to 'subprojects')
-rw-r--r--subprojects/packagefiles/millepede/meson.build3
-rw-r--r--subprojects/packagefiles/millepede/mille_c_wrap.cc47
-rw-r--r--subprojects/packagefiles/millepede/mille_c_wrap.h30
3 files changed, 79 insertions, 1 deletions
diff --git a/subprojects/packagefiles/millepede/meson.build b/subprojects/packagefiles/millepede/meson.build
index 7a535945..d18cece5 100644
--- a/subprojects/packagefiles/millepede/meson.build
+++ b/subprojects/packagefiles/millepede/meson.build
@@ -5,7 +5,8 @@ project('millepede', ['c', 'cpp','fortran'],
default_options: ['buildtype=debugoptimized'])
-mille = library('mille', ['Mille.cc'],
+mille = library('mille', ['Mille.cc',
+ 'mille_c_wrap.cc'],
install: true)
millepede_dep = declare_dependency(include_directories: '.',
diff --git a/subprojects/packagefiles/millepede/mille_c_wrap.cc b/subprojects/packagefiles/millepede/mille_c_wrap.cc
new file mode 100644
index 00000000..103754a1
--- /dev/null
+++ b/subprojects/packagefiles/millepede/mille_c_wrap.cc
@@ -0,0 +1,47 @@
+#include "Mille.h"
+#include "mille_c_wrap.h"
+
+
+extern "C" Mille *mille_new(const char *outFileName,
+ int asBinary,
+ int writeZero)
+{
+ return new Mille(outFileName, asBinary, writeZero);
+}
+
+
+extern "C" void mille_free(Mille *m)
+{
+ delete m;
+}
+
+
+extern "C" void mille_add_measurement(Mille *m,
+ int NLC, const float *derLc,
+ int NGL, const float *derGl,
+ const int *label, float rMeas,
+ float sigma)
+{
+ m->mille(NLC, derLc, NGL, derGl, label, rMeas, sigma);
+}
+
+
+extern "C" void mille_add_special(Mille *m,
+ int nSpecial,
+ const float *floatings,
+ const int *integers)
+{
+ m->special(nSpecial, floatings, integers);
+}
+
+
+extern "C" void mille_delete_last_record(Mille *m)
+{
+ m->kill();
+}
+
+
+extern "C" void mille_write_record(Mille *m)
+{
+ m->end();
+}
diff --git a/subprojects/packagefiles/millepede/mille_c_wrap.h b/subprojects/packagefiles/millepede/mille_c_wrap.h
new file mode 100644
index 00000000..1f0fc841
--- /dev/null
+++ b/subprojects/packagefiles/millepede/mille_c_wrap.h
@@ -0,0 +1,30 @@
+#ifdef __cplusplus
+extern "C" {
+#else
+typedef void *Mille;
+#endif
+
+
+extern Mille *mille_new(const char *outFileName,
+ int asBinary,
+ int writeZero);
+
+extern void mille_add_measurement(Mille *m,
+ int NLC, const float *derLc,
+ int NGL, const float *derGl,
+ const int *label, float rMeas, float sigma);
+
+extern void mille_add_special(Mille *m,
+ int nSpecial,
+ const float *floatings,
+ const int *integers);
+
+extern void mille_delete_last_record(Mille *m);
+
+extern void mille_write_record(Mille *m);
+
+extern void mille_free(Mille *m);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif