summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2019-12-01 21:32:10 +0100
committerRobin Gareus <robin@gareus.org>2019-12-01 21:32:10 +0100
commit5e1a73a28c07ba8c9c80b27abdacdc6da5f080bd (patch)
tree521f7ea21b12348bb102639b5137b1ad0981603a
parent5fb83da69cd22cdb8f925f00c550b854153b84f4 (diff)
Add Lua typecast from C++ vector to C-Array
This is useful for MIDI bytes amongst other things
-rw-r--r--libs/ardour/luabindings.cc19
-rw-r--r--libs/lua/LuaBridge/detail/CFunctions.h11
-rw-r--r--libs/lua/LuaBridge/detail/Namespace.h4
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 <std::string> ("StringList")
.endClass ()
- // std::vector<std::string>
.beginStdVector <std::string> ("StringVector")
.endClass ()
- // std::vector<float>
.beginStdVector <float> ("FloatVector")
.endClass ()
- // register float array (uint8_t*)
- .registerArray <uint8_t> ("ByteArray")
-
- // register float array (float*)
- .registerArray <float> ("FloatArray")
-
- // register float array (int32_t*)
- .registerArray <int32_t> ("IntArray")
+ .beginStdVector <uint8_t> ("ByteVector")
+ .endClass ()
- // std::vector<float*>
.beginStdVector <float*> ("FloatArrayVector")
.endClass ()
+ .registerArray <uint8_t> ("ByteArray")
+ .registerArray <float> ("FloatArray")
+ .registerArray <int32_t> ("IntArray")
+
// samplepos_t, sampleoffset_t lists e.g. AnalysisFeatureList
.beginStdList <int64_t> ("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<T, C> (L, t->get());
}
+ //--------------------------------------------------------------------------
+
+
+ template <class T, class C>
+ static int vectorToArray (lua_State *L)
+ {
+ C * const t = Userdata::get<C> (L, 1, false);
+ T * a = &((*t)[0]);
+ Stack <T*>::push (L, a);
+ return 1;
+ }
//--------------------------------------------------------------------------
template <class T, class C>
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<T> (name)
.addVoidConstructor ()
.addFunction ("push_back", (void (LT::*)(const T&))&LT::push_back)
+ .addFunction ("clear", (void (LT::*)())&LT::clear)
+ .addExtCFunction ("to_array", &CFunc::vectorToArray<T, LT>)
.addExtCFunction ("add", &CFunc::tableToList<T, LT>);
}
-
-
//----------------------------------------------------------------------------
template <class T>