<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ALua_set</id>
	<title>Module:Lua set - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ALua_set"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Lua_set&amp;action=history"/>
	<updated>2026-04-16T18:02:50Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://stockhub.co/index.php?title=Module:Lua_set&amp;diff=143910&amp;oldid=prev</id>
		<title>imported&gt;Alexiscoutinho: Implemented hash collision handling by adding a function hash table and, most importantly, by greatly improving the internal data representation with &quot;_elements&quot; and &quot;_elements_obj&quot;. Improved valid element check. Converted &quot;_get&quot;, &quot;_set&quot; and &quot;_del&quot; to normal methods. Optimized some methods by using &quot;_get&quot; instead of &quot;has&quot;.</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Lua_set&amp;diff=143910&amp;oldid=prev"/>
		<updated>2022-08-28T21:11:55Z</updated>

		<summary type="html">&lt;p&gt;Implemented hash collision handling by adding a function hash table and, most importantly, by greatly improving the internal data representation with &amp;quot;_elements&amp;quot; and &amp;quot;_elements_obj&amp;quot;. Improved valid element check. Converted &amp;quot;_get&amp;quot;, &amp;quot;_set&amp;quot; and &amp;quot;_del&amp;quot; to normal methods. Optimized some methods by using &amp;quot;_get&amp;quot; instead of &amp;quot;has&amp;quot;.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;require(&amp;#039;Module:Lua class&amp;#039;)&lt;br /&gt;
local libraryUtil = require(&amp;#039;libraryUtil&amp;#039;)&lt;br /&gt;
local TableTools = require(&amp;#039;Module:TableTools&amp;#039;)&lt;br /&gt;
local warn = require(&amp;#039;Module:Warning&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local basic_types = {boolean=1, string=1, number=1, [&amp;#039;function&amp;#039;]=1}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local f_hashes = {} -- so that function elements can be properly compared and ordered in frozenset._hash&lt;br /&gt;
local f_hashes_mt = {&lt;br /&gt;
	__index = function (t, key)&lt;br /&gt;
		local h = tonumber(&amp;#039;0x&amp;#039; .. mw.hash.hashValue(&amp;#039;fnv1a32&amp;#039;, tostring(os.time() + math.random())))&lt;br /&gt;
		f_hashes[key] = h&lt;br /&gt;
		return h&lt;br /&gt;
	end,&lt;br /&gt;
	__mode = &amp;#039;k&amp;#039;&lt;br /&gt;
}&lt;br /&gt;
setmetatable(f_hashes, f_hashes_mt)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local frozenset, _frozenset = class(&amp;#039;frozenset&amp;#039;, {&lt;br /&gt;
	__init = function (self, args)&lt;br /&gt;
		local elements = {}&lt;br /&gt;
		self._elements = elements&lt;br /&gt;
		self._elements_obj = {}&lt;br /&gt;
&lt;br /&gt;
		if #args == 0 then -- for performance&lt;br /&gt;
			return&lt;br /&gt;
		elseif #args == 1 then&lt;br /&gt;
			local arg = args[1]&lt;br /&gt;
			if type(arg) == &amp;#039;string&amp;#039; then&lt;br /&gt;
				local c&lt;br /&gt;
				for i = 1, mw.ustring.len(arg) do&lt;br /&gt;
					c = mw.ustring.sub(arg, i,i)&lt;br /&gt;
					elements[c] = c&lt;br /&gt;
				end&lt;br /&gt;
				return&lt;br /&gt;
			elseif pcall(pairs, arg) or pcall(ipairs, arg) then&lt;br /&gt;
				args = arg&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if TableTools.isArrayLike(args) then&lt;br /&gt;
			for i, v in ipairs(args) do&lt;br /&gt;
				if type(v) == &amp;#039;table&amp;#039; or isinstance(v) and v.hash == nil then&lt;br /&gt;
					error((&amp;quot;TypeError: invalid element #%d type (got %s, which is not hashable)&amp;quot;):format(i, type(v)), 3)&lt;br /&gt;
				end&lt;br /&gt;
				self._set(v)&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			for k in pairs(args) do&lt;br /&gt;
				if type(k) == &amp;#039;table&amp;#039; or isinstance(k) and k.hash == nil then&lt;br /&gt;
					error((&amp;quot;TypeError: invalid element type (got %s, which is not hashable)&amp;quot;):format(type(k)), 3)&lt;br /&gt;
				end&lt;br /&gt;
				self._set(k)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end,&lt;br /&gt;
&lt;br /&gt;
	_get = function (self, elem)&lt;br /&gt;
		if basic_types[type(elem)] then&lt;br /&gt;
			return self._elements[elem]&lt;br /&gt;
		else&lt;br /&gt;
			local elements_obj = self._elements_obj&lt;br /&gt;
			local h = elem.hash()&lt;br /&gt;
&lt;br /&gt;
			while elements_obj[h] ~= nil do&lt;br /&gt;
				if elements_obj[h] == elem then&lt;br /&gt;
					return elem&lt;br /&gt;
				end&lt;br /&gt;
				h = h + 1&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end,&lt;br /&gt;
&lt;br /&gt;
	_set = function (self, elem)&lt;br /&gt;
		if basic_types[type(elem)] then&lt;br /&gt;
			self._elements[elem] = elem&lt;br /&gt;
		else&lt;br /&gt;
			local elements_obj = self._elements_obj&lt;br /&gt;
			local h = elem.hash()&lt;br /&gt;
&lt;br /&gt;
			while elements_obj[h] ~= nil do&lt;br /&gt;
				if elements_obj[h] == elem then&lt;br /&gt;
					return&lt;br /&gt;
				end&lt;br /&gt;
				h = h + 1&lt;br /&gt;
			end&lt;br /&gt;
			elements_obj[h] = elem -- otherwise different objects with the same content would duplicate&lt;br /&gt;
		end&lt;br /&gt;
	end,&lt;br /&gt;
&lt;br /&gt;
	__pairs = function (self)&lt;br /&gt;
		local elems = self._elements&lt;br /&gt;
		local k, v&lt;br /&gt;
&lt;br /&gt;
		local function iterator()&lt;br /&gt;
			k, v = next(elems, k)&lt;br /&gt;
			if k == nil and elems == self._elements then&lt;br /&gt;
				elems = self._elements_obj&lt;br /&gt;
				k, v = next(elems, k)&lt;br /&gt;
			end&lt;br /&gt;
			return v -- nil at the very end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		return iterator&lt;br /&gt;
	end,&lt;br /&gt;
&lt;br /&gt;
	__ipairs = function (self)&lt;br /&gt;
		error(&amp;quot;IterationError: a set is unordered, use &amp;#039;pairs&amp;#039; instead&amp;quot;, 2)&lt;br /&gt;
	end,&lt;br /&gt;
&lt;br /&gt;
	_keySort = function (item1, item2)&lt;br /&gt;
		-- &amp;quot;number&amp;quot; &amp;lt; &amp;quot;string&amp;quot;, so numbers will be sorted before strings.&lt;br /&gt;
		local type1, type2 = type(item1), type(item2)&lt;br /&gt;
		if type1 ~= type2 then&lt;br /&gt;
			return type1 &amp;lt; type2&lt;br /&gt;
		elseif type1 == &amp;#039;number&amp;#039; or type1 == &amp;#039;string&amp;#039; then&lt;br /&gt;
			return item1 &amp;lt; item2&lt;br /&gt;
		elseif type1 == &amp;#039;boolean&amp;#039; then&lt;br /&gt;
			return tostring(item1) &amp;lt; tostring(item2)&lt;br /&gt;
		else&lt;br /&gt;
			local hash1, hash2&lt;br /&gt;
			if type1 == &amp;#039;function&amp;#039; then&lt;br /&gt;
				hash1, hash2 = f_hashes[item1], f_hashes[item2]&lt;br /&gt;
				if hash1 == hash2 then&lt;br /&gt;
					warn((&amp;quot;HashWarning: function hash collision at %d&amp;quot;):format(hash1), 2)--what should be the level?&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				hash1, hash2 = item1.hash(), item2.hash()&lt;br /&gt;
				if hash1 == hash2 then&lt;br /&gt;
					warn((&amp;quot;HashWarning: object hash collision at %d&amp;quot;):format(hash1), 2)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			return hash1 &amp;lt; hash2&lt;br /&gt;
		end&lt;br /&gt;
	end,&lt;br /&gt;
&lt;br /&gt;
	_hash = function (self)&lt;br /&gt;
		if self.__hash ~= nil then&lt;br /&gt;
			return self.__hash&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- frozensets with the same elements (meaning equal) may have a different order, so &amp;#039;order&amp;#039; them before hashing&lt;br /&gt;
		local ordered_elems = TableTools.keysToList(self, self._keySort, true)&lt;br /&gt;
&lt;br /&gt;
		-- convert elements to strings for table.concat&lt;br /&gt;
		local elemType&lt;br /&gt;
		for i, elem in ipairs(ordered_elems) do&lt;br /&gt;
			elemType = type(elem)&lt;br /&gt;
			if elemType == &amp;#039;number&amp;#039; or elemType == &amp;#039;boolean&amp;#039; then&lt;br /&gt;
				ordered_elems[i] = tostring(elem)&lt;br /&gt;
			elseif elemType == &amp;#039;string&amp;#039; then&lt;br /&gt;
				ordered_elems[i] = &amp;quot;&amp;#039;&amp;quot; .. elem .. &amp;quot;&amp;#039;&amp;quot;&lt;br /&gt;
			elseif elemType == &amp;#039;function&amp;#039; then&lt;br /&gt;
				ordered_elems[i] = &amp;#039;f&amp;#039; .. f_hashes[elem]&lt;br /&gt;
			else&lt;br /&gt;
				ordered_elems[i] = &amp;#039;o&amp;#039; .. elem.hash()&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local str = &amp;#039;{&amp;#039; .. table.concat(ordered_elems, &amp;#039;,&amp;#039;) .. &amp;#039;}&amp;#039; -- wrap in {} to differentiate from tuple&lt;br /&gt;
		self.__hash = tonumber(&amp;#039;0x&amp;#039; .. mw.hash.hashValue(&amp;#039;fnv1a32&amp;#039;, str))&lt;br /&gt;
		return self.__hash&lt;br /&gt;
	end,&lt;br /&gt;
&lt;br /&gt;
	__tostring = function (self)&lt;br /&gt;
		local string_elems = {}&lt;br /&gt;
		local elemType&lt;br /&gt;
&lt;br /&gt;
		for elem in pairs(self) do&lt;br /&gt;
			elemType = type(elem)&lt;br /&gt;
			if elemType == &amp;#039;string&amp;#039; then&lt;br /&gt;
				string_elems[#string_elems+1] = &amp;quot;&amp;#039;&amp;quot; .. elem .. &amp;quot;&amp;#039;&amp;quot;&lt;br /&gt;
			elseif elemType == &amp;#039;function&amp;#039; then&lt;br /&gt;
				string_elems[#string_elems+1] = &amp;#039;f&amp;#039; .. f_hashes[elem]&lt;br /&gt;
			else&lt;br /&gt;
				string_elems[#string_elems+1] = tostring(elem)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local str = &amp;#039;{&amp;#039; .. table.concat(string_elems, &amp;#039;, &amp;#039;) .. &amp;#039;}&amp;#039;&lt;br /&gt;
		return str&lt;br /&gt;
	end,&lt;br /&gt;
&lt;br /&gt;
	len = function (self)&lt;br /&gt;
		return TableTools.size(self._elements) + TableTools.size(self._elements_obj)&lt;br /&gt;
	end,&lt;br /&gt;
&lt;br /&gt;
	has = function (self, elem)&lt;br /&gt;
		if isinstance(elem, &amp;#039;set&amp;#039;) then&lt;br /&gt;
			elem = frozenset{elem}&lt;br /&gt;
		elseif type(elem) == &amp;#039;table&amp;#039; or isinstance(elem) and elem.hash == nil then&lt;br /&gt;
			error((&amp;quot;TypeError: invalid element type (got %s, which is not hashable)&amp;quot;):format(type(elem)), 2)&lt;br /&gt;
		end&lt;br /&gt;
		return self._get(elem) ~= nil and true or false&lt;br /&gt;
	end,&lt;br /&gt;
&lt;br /&gt;
	isdisjoint = function (self, other)&lt;br /&gt;
		libraryUtil.checkTypeMulti(&amp;#039;isdisjoint&amp;#039;, 1, other, {&amp;#039;set&amp;#039;, &amp;#039;frozenset&amp;#039;})&lt;br /&gt;
		for elem in pairs(other) do&lt;br /&gt;
			if self._get(elem) ~= nil then&lt;br /&gt;
				return false&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return true&lt;br /&gt;
	end,&lt;br /&gt;
&lt;br /&gt;
	issubset = function (self, other)&lt;br /&gt;
		return self &amp;lt;= frozenset{other}&lt;br /&gt;
	end,&lt;br /&gt;
&lt;br /&gt;
	__le = function (a, b)&lt;br /&gt;
		for elem in pairs(a) do&lt;br /&gt;
			if b._get(elem) == nil then&lt;br /&gt;
				return false&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return true&lt;br /&gt;
	end,&lt;br /&gt;
&lt;br /&gt;
	__lt = function (a, b)&lt;br /&gt;
		return a &amp;lt;= b and a.len() &amp;lt; b.len() -- is calculating a&amp;#039;s length during its traversal in __le faster?&lt;br /&gt;
	end,&lt;br /&gt;
&lt;br /&gt;
	issuperset = function (self, other)&lt;br /&gt;
		return self &amp;gt;= frozenset{other}&lt;br /&gt;
	end,&lt;br /&gt;
&lt;br /&gt;
	union = function (self, ...)&lt;br /&gt;
		local sum = set{self}&lt;br /&gt;
		sum.update(...)&lt;br /&gt;
		return sum&lt;br /&gt;
	end,&lt;br /&gt;
&lt;br /&gt;
	__add = function (a, b)&lt;br /&gt;
		local sum, _sum = a.__class{}&lt;br /&gt;
		for elem in pairs(a) do&lt;br /&gt;
			_sum._set(elem)&lt;br /&gt;
		end&lt;br /&gt;
		for elem in pairs(b) do&lt;br /&gt;
			_sum._set(elem)&lt;br /&gt;
		end&lt;br /&gt;
		return sum&lt;br /&gt;
	end,&lt;br /&gt;
&lt;br /&gt;
	intersection = function (self, ...)&lt;br /&gt;
		local product = set{self}&lt;br /&gt;
		product.intersection_update(...)&lt;br /&gt;
		return product&lt;br /&gt;
	end,&lt;br /&gt;
&lt;br /&gt;
	__mul = function (a, b)&lt;br /&gt;
		local product, _product = a.__class{}&lt;br /&gt;
		for elem in pairs(a) do&lt;br /&gt;
			if b._get(elem) ~= nil then&lt;br /&gt;
				_product._set(elem)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return product&lt;br /&gt;
	end,&lt;br /&gt;
&lt;br /&gt;
	difference = function (self, ...)&lt;br /&gt;
		local difference = set{self}&lt;br /&gt;
		difference.difference_update(...)&lt;br /&gt;
		return difference&lt;br /&gt;
	end,&lt;br /&gt;
&lt;br /&gt;
	__sub = function (a, b)&lt;br /&gt;
		local difference, _difference = a.__class{}&lt;br /&gt;
		for elem in pairs(a) do&lt;br /&gt;
			if b._get(elem) == nil then&lt;br /&gt;
				_difference._set(elem)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return difference&lt;br /&gt;
	end,&lt;br /&gt;
&lt;br /&gt;
	symmetric_difference = function (self, other)&lt;br /&gt;
		return self ^ frozenset{other}&lt;br /&gt;
	end,&lt;br /&gt;
&lt;br /&gt;
	__pow = function (a, b)&lt;br /&gt;
		local symm_diff, _symm_diff = a.__class{}&lt;br /&gt;
		for elem in pairs(a) do&lt;br /&gt;
			if b._get(elem) == nil then&lt;br /&gt;
				_symm_diff._set(elem)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		for elem in pairs(b) do&lt;br /&gt;
			if a._get(elem) == nil then&lt;br /&gt;
				_symm_diff._set(elem)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return symm_diff&lt;br /&gt;
	end,&lt;br /&gt;
&lt;br /&gt;
	copy = function (self)&lt;br /&gt;
		return (self.__class{self}) -- to not leak the private instance&lt;br /&gt;
	end,&lt;br /&gt;
&lt;br /&gt;
	__eq = function (a, b)&lt;br /&gt;
		return a &amp;lt;= b and a &amp;gt;= b&lt;br /&gt;
	end,&lt;br /&gt;
&lt;br /&gt;
	__staticmethods = {&amp;#039;_keySort&amp;#039;},&lt;br /&gt;
	__protected = {&amp;#039;_get&amp;#039;, &amp;#039;_set&amp;#039;}&lt;br /&gt;
})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local set = class(&amp;#039;set&amp;#039;, frozenset, {&lt;br /&gt;
	_del = function (self, elem)&lt;br /&gt;
		if basic_types[type(elem)] then&lt;br /&gt;
			self._elements[elem] = nil&lt;br /&gt;
		else&lt;br /&gt;
			local elements_obj = self._elements_obj&lt;br /&gt;
			local h = elem.hash()&lt;br /&gt;
&lt;br /&gt;
			while elements_obj[h] ~= nil do&lt;br /&gt;
				if elements_obj[h] == elem then&lt;br /&gt;
					elements_obj[h] = nil&lt;br /&gt;
					return&lt;br /&gt;
				end&lt;br /&gt;
				h = h + 1&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end,&lt;br /&gt;
&lt;br /&gt;
	update = function (self, ...)&lt;br /&gt;
		local others, other = {...}&lt;br /&gt;
		for i = 1, select(&amp;#039;#&amp;#039;, ...) do&lt;br /&gt;
			other = frozenset{others[i]}&lt;br /&gt;
			for elem in pairs(other) do&lt;br /&gt;
				self._set(elem)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end,&lt;br /&gt;
&lt;br /&gt;
	intersection_update = function (self, ...)&lt;br /&gt;
		local others, _, _other = {...}&lt;br /&gt;
		for i = 1, select(&amp;#039;#&amp;#039;, ...) do&lt;br /&gt;
			_, _other = _frozenset{others[i]}&lt;br /&gt;
			for elem in pairs(self) do -- probably faster than iterating through (likely longer) &amp;quot;other&amp;quot;&lt;br /&gt;
				if _other._get(elem) == nil then&lt;br /&gt;
					self._del(elem)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end,&lt;br /&gt;
&lt;br /&gt;
	difference_update = function (self, ...)&lt;br /&gt;
		local others, _, _other = {...}&lt;br /&gt;
		for i = 1, select(&amp;#039;#&amp;#039;, ...) do&lt;br /&gt;
			_, _other = _frozenset{others[i]}&lt;br /&gt;
			for elem in pairs(self) do&lt;br /&gt;
				if _other._get(elem) ~= nil then&lt;br /&gt;
					self._del(elem)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end,&lt;br /&gt;
&lt;br /&gt;
	symmetric_difference_update = function (self, other)&lt;br /&gt;
		local _, _other = _frozenset{other}&lt;br /&gt;
		for elem in pairs(self) do&lt;br /&gt;
			if _other._get(elem) ~= nil then&lt;br /&gt;
				self._del(elem)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		for elem in pairs(_other) do&lt;br /&gt;
			if self._get(elem) == nil then&lt;br /&gt;
				self._set(elem)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end,&lt;br /&gt;
&lt;br /&gt;
	add = function (self, elem)&lt;br /&gt;
		if type(elem) == &amp;#039;table&amp;#039; or isinstance(elem) and elem.hash == nil then&lt;br /&gt;
			error((&amp;quot;TypeError: invalid element type (got %s, which is not hashable)&amp;quot;):format(type(elem)), 2)&lt;br /&gt;
		end&lt;br /&gt;
		self._set(elem)&lt;br /&gt;
	end,&lt;br /&gt;
&lt;br /&gt;
	remove = function (self, elem)&lt;br /&gt;
		if isinstance(elem, &amp;#039;set&amp;#039;) then&lt;br /&gt;
			elem = frozenset{elem}&lt;br /&gt;
		elseif type(elem) == &amp;#039;table&amp;#039; or isinstance(elem) and elem.hash == nil then&lt;br /&gt;
			error((&amp;quot;TypeError: invalid element type (got %s, which is not hashable)&amp;quot;):format(type(elem)), 2)&lt;br /&gt;
		end&lt;br /&gt;
		if self._get(elem) == nil then&lt;br /&gt;
			error((&amp;quot;KeyError: %s&amp;quot;):format(tostring(elem)), 2)&lt;br /&gt;
		end&lt;br /&gt;
		self._del(elem)&lt;br /&gt;
	end,&lt;br /&gt;
&lt;br /&gt;
	discard = function (self, elem)&lt;br /&gt;
		if isinstance(elem, &amp;#039;set&amp;#039;) then&lt;br /&gt;
			elem = frozenset{elem}&lt;br /&gt;
		elseif type(elem) == &amp;#039;table&amp;#039; or isinstance(elem) and elem.hash == nil then&lt;br /&gt;
			error((&amp;quot;TypeError: invalid element type (got %s, which is not hashable)&amp;quot;):format(type(elem)), 2)&lt;br /&gt;
		end&lt;br /&gt;
		self._del(elem)&lt;br /&gt;
	end,&lt;br /&gt;
&lt;br /&gt;
	pop = function (self)&lt;br /&gt;
		local k, v = next(self._elements)&lt;br /&gt;
		if k == nil then&lt;br /&gt;
			k, v = next(self._elements_obj)&lt;br /&gt;
			if k == nil then&lt;br /&gt;
				error(&amp;quot;KeyError: pop from an empty set&amp;quot;, 2)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		self._del(v)&lt;br /&gt;
		return v&lt;br /&gt;
	end,&lt;br /&gt;
&lt;br /&gt;
	clear = function (self)&lt;br /&gt;
		self._elements = {}&lt;br /&gt;
		self._elements_obj = {}&lt;br /&gt;
	end,&lt;br /&gt;
&lt;br /&gt;
	__protected = {&amp;#039;_del&amp;#039;}&lt;br /&gt;
})&lt;br /&gt;
&lt;br /&gt;
return {frozenset, set}&lt;/div&gt;</summary>
		<author><name>imported&gt;Alexiscoutinho</name></author>
	</entry>
</feed>