From 5e1a73a28c07ba8c9c80b27abdacdc6da5f080bd Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Sun, 1 Dec 2019 21:32:10 +0100 Subject: [PATCH] Add Lua typecast from C++ vector to C-Array This is useful for MIDI bytes amongst other things --- libs/ardour/luabindings.cc | 19 +++++++------------ libs/lua/LuaBridge/detail/CFunctions.h | 11 +++++++++++ libs/lua/LuaBridge/detail/Namespace.h | 4 ++-- 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/libs/ardour/luabindings.cc b/libs/ardour/luabindings.cc index b05a625396..6deb7accf4 100644 --- a/libs/ardour/luabindings.cc +++ b/libs/ardour/luabindings.cc @@ -352,32 +352,27 @@ LuaBindings::stddef (lua_State* L) .beginStdList ("StringList") .endClass () - // std::vector .beginStdVector ("StringVector") .endClass () - // std::vector .beginStdVector ("FloatVector") .endClass () - // register float array (uint8_t*) - .registerArray ("ByteArray") + .beginStdVector ("ByteVector") + .endClass () - // register float array (float*) - .registerArray ("FloatArray") - - // register float array (int32_t*) - .registerArray ("IntArray") - - // std::vector .beginStdVector ("FloatArrayVector") .endClass () + .registerArray ("ByteArray") + .registerArray ("FloatArray") + .registerArray ("IntArray") + // samplepos_t, sampleoffset_t lists e.g. AnalysisFeatureList .beginStdList ("Int64List") .endClass () - // TODO std::set + // TODO std::set .endNamespace (); } diff --git a/libs/lua/LuaBridge/detail/CFunctions.h b/libs/lua/LuaBridge/detail/CFunctions.h index 22dc115a6a..88c30fc4ad 100644 --- a/libs/lua/LuaBridge/detail/CFunctions.h +++ b/libs/lua/LuaBridge/detail/CFunctions.h @@ -1148,6 +1148,17 @@ struct CFunc if (!t) { return luaL_error (L, "cannot derefencee shared_ptr"); } return tableToListHelper (L, t->get()); } + //-------------------------------------------------------------------------- + + + template + static int vectorToArray (lua_State *L) + { + C * const t = Userdata::get (L, 1, false); + T * a = &((*t)[0]); + Stack ::push (L, a); + return 1; + } //-------------------------------------------------------------------------- template diff --git a/libs/lua/LuaBridge/detail/Namespace.h b/libs/lua/LuaBridge/detail/Namespace.h index 0ea453e932..46fdaa5252 100644 --- a/libs/lua/LuaBridge/detail/Namespace.h +++ b/libs/lua/LuaBridge/detail/Namespace.h @@ -1938,11 +1938,11 @@ public: return beginConstStdVector (name) .addVoidConstructor () .addFunction ("push_back", (void (LT::*)(const T&))<::push_back) + .addFunction ("clear", (void (LT::*)())<::clear) + .addExtCFunction ("to_array", &CFunc::vectorToArray) .addExtCFunction ("add", &CFunc::tableToList); } - - //---------------------------------------------------------------------------- template