Add Lua typecast from C++ vector to C-Array

This is useful for MIDI bytes amongst other things
This commit is contained in:
Robin Gareus 2019-12-01 21:32:10 +01:00
parent 5fb83da69c
commit 5e1a73a28c
Signed by: rgareus
GPG Key ID: A090BCE02CF57F04
3 changed files with 20 additions and 14 deletions

View File

@ -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")
.beginStdVector <uint8_t> ("ByteVector")
.endClass ()
// register float array (float*)
.registerArray <float> ("FloatArray")
// register float array (int32_t*)
.registerArray <int32_t> ("IntArray")
// 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 ();
}

View File

@ -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>

View File

@ -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>