From 0b01520118bdbe42b2c505522107e974711e612b Mon Sep 17 00:00:00 2001 From: VorTechnix <45538536+VorTechnix@users.noreply.github.com> Date: Sun, 18 Jul 2021 12:39:48 -0700 Subject: [PATCH] sets (not working) --- worldeditadditions/init.lua | 55 +++++++++++++++++ worldeditadditions/utils/set.lua | 101 +++++++++++++++++++++++++++++++ 2 files changed, 156 insertions(+) create mode 100644 worldeditadditions/utils/set.lua diff --git a/worldeditadditions/init.lua b/worldeditadditions/init.lua index 7c4154a..e118c9f 100644 --- a/worldeditadditions/init.lua +++ b/worldeditadditions/init.lua @@ -6,6 +6,61 @@ -- @author Starbeamrainbowlabs worldeditadditions = {} +worldeditadditions.modpath = minetest.get_modpath("worldeditadditions") +dofile(worldeditadditions.modpath.."/utils/vector.lua") +worldeditadditions.Set = dofile(worldeditadditions.modpath.."/utils/set.lua") +worldeditadditions.Vector3 = dofile(worldeditadditions.modpath.."/utils/vector3.lua") +worldeditadditions.Mesh, +worldeditadditions.Face = dofile(worldeditadditions.modpath.."/utils/mesh.lua") + +worldeditadditions.Queue = dofile(worldeditadditions.modpath.."/utils/queue.lua") +worldeditadditions.LRU = dofile(worldeditadditions.modpath.."/utils/lru.lua") + + +dofile(worldeditadditions.modpath.."/utils/strings/init.lua") +dofile(worldeditadditions.modpath.."/utils/format/init.lua") +dofile(worldeditadditions.modpath.."/utils/parse/init.lua") +dofile(worldeditadditions.modpath.."/utils/tables/init.lua") + +dofile(worldeditadditions.modpath.."/utils/numbers.lua") +dofile(worldeditadditions.modpath.."/utils/nodes.lua") +dofile(worldeditadditions.modpath.."/utils/node_identification.lua") +dofile(worldeditadditions.modpath.."/utils/terrain.lua") +dofile(worldeditadditions.modpath.."/utils/raycast_adv.lua") -- For the farwand +dofile(worldeditadditions.modpath.."/utils/axes.lua") + +dofile(worldeditadditions.modpath.."/lib/compat/saplingnames.lua") + +dofile(worldeditadditions.modpath.."/lib/floodfill.lua") +dofile(worldeditadditions.modpath.."/lib/overlay.lua") +dofile(worldeditadditions.modpath.."/lib/layers.lua") +dofile(worldeditadditions.modpath.."/lib/fillcaves.lua") +dofile(worldeditadditions.modpath.."/lib/ellipsoid.lua") +dofile(worldeditadditions.modpath.."/lib/torus.lua") +dofile(worldeditadditions.modpath.."/lib/line.lua") +dofile(worldeditadditions.modpath.."/lib/walls.lua") +dofile(worldeditadditions.modpath.."/lib/replacemix.lua") +dofile(worldeditadditions.modpath.."/lib/maze2d.lua") +dofile(worldeditadditions.modpath.."/lib/maze3d.lua") +dofile(worldeditadditions.modpath.."/lib/hollow.lua") +dofile(worldeditadditions.modpath.."/lib/scale_up.lua") +dofile(worldeditadditions.modpath.."/lib/scale_down.lua") +dofile(worldeditadditions.modpath.."/lib/scale.lua") +dofile(worldeditadditions.modpath.."/lib/conv/conv.lua") +dofile(worldeditadditions.modpath.."/lib/erode/erode.lua") +dofile(worldeditadditions.modpath.."/lib/noise/init.lua") + +dofile(worldeditadditions.modpath.."/lib/count.lua") + +dofile(worldeditadditions.modpath.."/lib/bonemeal.lua") +dofile(worldeditadditions.modpath.."/lib/forest.lua") + +dofile(worldeditadditions.modpath.."/lib/ellipsoidapply.lua") +dofile(worldeditadditions.modpath.."/lib/airapply.lua") + +dofile(worldeditadditions.modpath.."/lib/subdivide.lua") +dofile(worldeditadditions.modpath.."/lib/selection/stack.lua") +dofile(worldeditadditions.modpath.."/lib/selection/cloud.lua") local wea = worldeditadditions wea.modpath = minetest.get_modpath("worldeditadditions") diff --git a/worldeditadditions/utils/set.lua b/worldeditadditions/utils/set.lua new file mode 100644 index 0000000..d5ea57d --- /dev/null +++ b/worldeditadditions/utils/set.lua @@ -0,0 +1,101 @@ +--- Sets for lua! +-- local Set = {} +--- Option 1: +-- Set.__index = Set +-- Set.__newindex = function(tbl, key, value) +-- if not tbl.__protected[key] then +-- rawset(tbl,key,value) +-- else +-- error("Protected!") +-- end +-- end +-- Set.__protected = { +-- __protected=true, +-- new=true, +-- add=true, +-- delete=true, +-- has=true +-- } + +--- Option 2: +local Set = {} +Set.__index = Set +Set.__newindex = function(tbl, key, value) + rawset(tbl.set,key,value) +end + +--- Creates a new set. +-- @param i any Initial values(s) of the set. +-- @returns Set A table of keys equal to true. +function Set.new(i) + local result = {set={}} + setmetatable(result, Set) + if type(i) == "table" then + for k,v in pairs(i) do result[v] = true end + elseif i then + result[i] = true + end + return result +end +-- a = Set.new({"add","new","thing"}) + +--- Adds item(s) to set. +-- @param a set Set to manipulate. +-- @param i not nil Values(s) to add. +-- @returns bool Success of operation. +function Set.add(a,i) + if type(i) == "table" then + for k,v in pairs(i) do a[v] = true end + else + a[i] = true + end + return true +end + +--- Deletes item(s) from set. +-- @param a set Set to manipulate. +-- @param i not nil Values(s) to delete. +-- @returns bool Success of operation. +function Set.delete(a,i) + if type(i) == "table" then + for k,v in pairs(i) do a[v] = nil end + else + a[i] = nil + end + return true +end + +--- Checks if value(s) are present in set. +-- @param a set Set to inspect. +-- @param i not nil Values(s) to check. +-- @returns bool Value(s) are present? +function Set.has(a,i) + if type(i) == "table" then + for k,v in pairs(i) do + if not a[k] then return false end + end + return true + else + return a[i] ~= nil + end +end + + + +-- ██████ ██████ ███████ ██████ █████ ████████ ██████ ██████ +-- ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ +-- ██ ██ ██████ █████ ██████ ███████ ██ ██ ██ ██████ +-- ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ +-- ██████ ██ ███████ ██ ██ ██ ██ ██ ██████ ██ ██ +-- +-- ██████ ██ ██ ███████ ██████ ██████ ██ ██████ ███████ ███████ +-- ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ +-- ██ ██ ██ ██ █████ ██████ ██████ ██ ██ ██ █████ ███████ +-- ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ +-- ██████ ████ ███████ ██ ██ ██ ██ ██ ██████ ███████ ███████ + +function Set.__call(i) return Set.new(i) end + + +-- Main Return: +return Set