From e2f5c74bb478bff3d002b7469e63b91571b47008 Mon Sep 17 00:00:00 2001 From: Christopher Lam Date: Sun, 27 Oct 2024 15:17:27 +0800 Subject: [PATCH] [engine.i] VECTORREF_HELPER_INOUT to handle SplitsVec& --- bindings/engine.i | 1 + common/base-typemaps.i | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/bindings/engine.i b/bindings/engine.i index c8dae2f043..0885066f4e 100644 --- a/bindings/engine.i +++ b/bindings/engine.i @@ -86,6 +86,7 @@ GLIST_HELPER_INOUT(PriceList, SWIGTYPE_p_GNCPrice); // TODO: free PriceList? GLIST_HELPER_INOUT(CommodityList, SWIGTYPE_p_gnc_commodity); VECTOR_HELPER_INOUT(SplitsVec, SWIGTYPE_p_Split, Split); +VECTORREF_HELPER_INOUT(SplitsVec&, SWIGTYPE_p_Split, Split); VECTOR_HELPER_INOUT(AccountVec, SWIGTYPE_p_Account, Account); %typemap(newfree) char * "g_free($1);" diff --git a/common/base-typemaps.i b/common/base-typemaps.i index 23c2a6cd4b..2a878a0122 100644 --- a/common/base-typemaps.i +++ b/common/base-typemaps.i @@ -185,6 +185,15 @@ typedef char gchar; } %enddef + +%define VECTORREF_HELPER_INOUT(VectorType, ElemSwigType, ElemType) + +%typemap(out) VectorType { + auto accum = [](SCM acc, auto n){ return scm_cons(SWIG_NewPointerObj(n, ElemSwigType, 0), acc); }; + $result = std::accumulate ($1->rbegin(), $1->rend(), SCM_EOL, accum); +} +%enddef + #elif defined(SWIGPYTHON) /* Typemaps for Python */ %import "glib.h"