Le module stack est une implémentation personnalisée d'une pile (stack) en Lua. Une pile est une structure de données de type LIFO (Last In, First Out), où le dernier élément ajouté est le premier à être retiré. Ce module fournit une interface pour manipuler des piles, avec des opérations pour empiler, dépiler, vérifier le sommet, et plus encore. Il est particulièrement utile pour gérer des tâches où l'ordre inverse est important.
Le module stack est conçu pour être flexible et réutilisable. Après l'avoir chargé via le ModuleLoader, vous pouvez créer autant d'instances de piles que nécessaire, à n'importe quel moment dans votre script. Chaque instance est indépendante et possède ses propres éléments, vous permettant de gérer plusieurs piles sans interférences.
Chargement du module
Pour commencer, vous devez charger le module stack avec le ModuleLoader :
-- Chargement du ModuleLoader
ModuleLoader = dofile(global:getCurrentDirectory() .. [[\YayaToolsTouch\Module\ModuleLoader.lua]])(1)
-- Chargement du module stack
Stack = ModuleLoader:load("stack")
Une fois le module chargé, vous pouvez instancier une pile à tout moment dans votre script, en appelant la fonction Stack() autant de fois que nécessaire :
-- Création d'une nouvelle instance de stack
local myStack = Stack()
-- Vous pouvez créer plusieurs instances indépendantes
local undoStack = Stack()
local callStack = Stack()
local browserHistory = Stack()
Chaque instance de stack est indépendante des autres. Vous pouvez les manipuler séparément sans qu'elles n'interfèrent entre elles.
Ajoute un élément au sommet de la pile.
Syntaxe
stack:push(value)
Paramètres
Retourne
Retire et retourne l'élément au sommet de la pile.
Syntaxe
local value = stack:pop()
Paramètres
Retourne
Vérifie si la pile est vide.
Syntaxe
local empty = stack:isEmpty()
Paramètres
Retourne
Obtient la valeur de l'élément au sommet de la pile sans le retirer.
Syntaxe
local value = stack:peek()
Paramètres
Retourne
Convertit la pile en une table Lua standard (liste).
Syntaxe
local list = stack:toList()
Paramètres
Retourne
Crée une nouvelle pile à partir d'une table Lua standard (liste).
Syntaxe
local newStack = stack:fromList(list)
Paramètres
Retourne
Le module stack implémente plusieurs métaméthodes pour une intégration transparente avec Lua.
Permet d'obtenir la taille de la pile en utilisant l'opérateur #.
Utilisation
local count = #stack
Définit le comportement de l'opérateur == pour comparer deux piles.
Utilisation
local areEqual = stack1 == stack2
Définit le comportement de l'opérateur + pour combiner deux piles.
Utilisation
local combinedStack = stack1 + stack2
Note : La pile résultante aura les éléments de stack2 au sommet, suivis des éléments de stack1.
Permet l'itération sur la pile en utilisant les boucles pairs() et ipairs().
Utilisation
for index, value in pairs(stack) do
-- ...
end
for index, value in ipairs(stack) do
-- ...
end
Voici un exemple illustrant comment utiliser le module stack dans un script :
-- Chargement du ModuleLoader
ModuleLoader = dofile(global:getCurrentDirectory() .. [[\YayaToolsTouch\Module\ModuleLoader.lua]])(1)
-- Chargement du module Logger pour afficher les informations
Logger = ModuleLoader:load("Logger")(1)
-- Chargement du module stack
Stack = ModuleLoader:load("stack")
-- Création d'une nouvelle instance de stack
local undoStack = Stack()
-- Ajout d'actions à la pile d'annulation
undoStack:push("Écrire du texte")
undoStack:push("Mettre en gras")
undoStack:push("Ajouter une image")
-- Affichage de l'action actuelle
Logger:log("Action actuelle : " .. undoStack:peek())
-- Annulation de la dernière action
local lastAction = undoStack:pop()
Logger:log("Annulation de : " .. lastAction)
-- Nouvelle action actuelle
Logger:log("Nouvelle action actuelle : " .. undoStack:peek())
-- Vérification si la pile est vide
if undoStack:isEmpty() then
Logger:log("Aucune action à annuler.")
else
Logger:log("Des actions peuvent encore être annulées.")
end
-- Taille de la pile
Logger:log("Nombre d'actions restantes : " .. #undoStack)
Sortie attendue :
Action actuelle : Ajouter une image
Annulation de : Ajouter une image
Nouvelle action actuelle : Mettre en gras
Des actions peuvent encore être annulées.
Nombre d'actions restantes : 2
Si vous rencontrez des problèmes ou avez des questions concernant le module linkedList :