-- ------------------------------------------------------------------------------ -- -- TradeSkillMaster -- -- https://tradeskillmaster.com -- -- All Rights Reserved - Detailed license information included with addon. -- -- ------------------------------------------------------------------------------ -- local TSM = select(2, ...) ---@type TSM local Vararg = TSM.Init("Util.Vararg") ---@class Util.Vararg local private = { iterTemp = {}, } -- ============================================================================ -- Module Functions -- ============================================================================ ---Stores a varag into a table. ---@param tbl table The table to store the values in ---@param ... any Zero or more values to store in the table function Vararg.IntoTable(tbl, ...) for i = 1, select("#", ...) do tbl[i] = select(i, ...) end end ---Creates an iterator from a vararg. --- ---**NOTE:** This iterator must be run to completion and not be interrupted (i.e. with a `break` or `return`). ---@param ... any The values to iterate over ---@return fun(): number, any @An iterator with fields: `index, value` function Vararg.Iterator(...) local tbl = private.iterTemp assert(not tbl.inUse) tbl.inUse = true tbl.length = select("#", ...) Vararg.IntoTable(private.iterTemp, ...) return private.IteratorHelper, private.iterTemp, 0 end ---Returns whether not the value exists within the vararg. ---@param value any The value to search for ---@param ... any Any number of values to search in ---@return boolean @Whether or not the value was found in the vararg function Vararg.In(value, ...) for i = 1, select("#", ...) do if value == select(i, ...) then return true end end return false end -- ============================================================================ -- Private Helper Functions -- ============================================================================ function private.IteratorHelper(tbl, index) index = index + 1 if index > tbl.length then wipe(tbl) return end return index, tbl[index] end