From dc09e66a935a9888c6748a6deebcbf06af6f05d5 Mon Sep 17 00:00:00 2001 From: Marc Pervaz Boocha Date: Wed, 6 Nov 2024 22:10:51 +0530 Subject: Add typppe antation --- .config/nvim/lua/set.lua | 79 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 .config/nvim/lua/set.lua (limited to '.config/nvim/lua/set.lua') diff --git a/.config/nvim/lua/set.lua b/.config/nvim/lua/set.lua new file mode 100644 index 0000000..1e829d5 --- /dev/null +++ b/.config/nvim/lua/set.lua @@ -0,0 +1,79 @@ +---@class Set +---@field elements table +Set = {} +Set.__index = Set + +--- Constructor for creating a new set +---@param initialList table|nil -- Accepts a table (list) or nil for empty set +---@return Set +function Set:new(initialList) + local instance = setmetatable({}, self) + instance.elements = {} + + -- Populate the set with elements from initialList if provided + if initialList then + for _, element in ipairs(initialList) do + instance:add(element) + end + end + + return instance +end + +--- Add an element to the set +---@param element any +function Set:add(element) + self.elements[element] = true -- Setting key to true enforces uniqueness +end + +--- Remove an element from the set +---@param element any +function Set:remove(element) + self.elements[element] = nil +end + +---Check if the set contains an element +---@param element any +function Set:has(element) + return self.elements[element] ~= nil +end + +---Union operation: combines two sets +---@param otherSet Set +---@return Set +function Set:union(otherSet) + local resultSet = Set:new() + for key in pairs(self.elements) do + resultSet:add(key) + end + for key in pairs(otherSet.elements) do + resultSet:add(key) + end + return resultSet +end + +-- Intersection operation: elements common to both sets +function Set:intersection(otherSet) + local resultSet = Set:new() + for key in pairs(self.elements) do + if otherSet:contains(key) then + resultSet:add(key) + end + end + return resultSet +end + +-- Difference operation: elements in this set but not in otherSet +---@param otherSet Set +---@return Set +function Set:difference(otherSet) + local resultSet = Set:new() + for key in pairs(self.elements) do + if not otherSet:has(key) then + resultSet:add(key) + end + end + return resultSet +end + +return Set -- cgit v1.2.3-70-g09d2