From c8fb149760f7a8ef4e018f22e79bcb48e1e3c444 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Mon, 24 Apr 2023 14:49:53 +0200 Subject: Add C wrapper for Mille --- subprojects/packagefiles/millepede/meson.build | 3 +- subprojects/packagefiles/millepede/mille_c_wrap.cc | 47 ++++++++++++++++++++++ subprojects/packagefiles/millepede/mille_c_wrap.h | 30 ++++++++++++++ 3 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 subprojects/packagefiles/millepede/mille_c_wrap.cc create mode 100644 subprojects/packagefiles/millepede/mille_c_wrap.h (limited to 'subprojects') 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 -- cgit v1.2.3