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"