Je dois effectuer des opérations sur les tables Lua à partir de C où les tables sont traitées comme des listes ou des files d'attente. Plus précisément, j'ai besoin d'insérer un élément en tête et d'enlever l'élément de tête, et de faire bouger les autres éléments pour accommoder le nouvel élément.Comment faire des opérations de table lua à partir de C?
Ce serait simple en lua droite, j'utiliserais table.insert
et table.remove
. Mais dans C?
Il y a des fonctions dans le Lua C api tels que lua_settable, mais pas d'équivalent pour table.insert
et table.remove qui refait surface. Il semble qu'il y ait des fonctions internes C à l'intérieur de l'interpréteur appelées tinsert
et tremove
, mais elles ne font pas partie de l'API.
Dois-je vraiment faire appel à une fonction lua qui le fait pour moi?
merci. Mais quand j'ai essayé tinsert de mon code, il échoue parce que la valeur de retour de lua_gettop n'est pas ce qu'elle attend. Il y a déjà des valeurs sur la pile, donc lua_gettop retourne quelque chose comme 24, et cette fonction attend le nombre d'arguments passés, par exemple 2 ou 3. –
Poussez-vous, par exemple, position et valeur dans la pile avant vous appelez tinsert? –
Oui, la fonction peut être appelée à partir de différents contextes où la pile a déjà des quantités de choses différentes. J'ai donc ajouté une variable supplémentaire à ma version de tinsert pour le décalage de pile et fait que les internes de mon tinsert utilisent ce décalage. Maintenant ça marche. Merci. –