mirror of
https://github.com/msva/lua-htmlparser.git
synced 2024-11-04 23:34:20 +00:00
Refactor Set._tostring. Fixes #61
__tostring convertation metatable function from the code imported from lua-set library has been reworked by the code, based on the idea, of the one, that was sugested by @GitSparTV in #61. The purpose of that refactoring is to reduce memory usage, caused by strings reallocation by string concatenation. (Table concatenation cheaper) Despite code should be pretty valid, and passes all tests, I think it needs to survive a bunch of real-life tests, but, unlikely, I have not enough spare time ATM. Please, test it and report, if any. Signed-off-by: Vadim A. Misbakh-Soloviov <git@mva.name>
This commit is contained in:
parent
2ce09f82a4
commit
5ce9a775a3
@ -64,16 +64,27 @@ end
|
|||||||
|
|
||||||
-- String representation
|
-- String representation
|
||||||
Set.mt.__tostring = function (set)
|
Set.mt.__tostring = function (set)
|
||||||
local s = "{"
|
local list = {"{"}
|
||||||
local sep = ""
|
|
||||||
for k in pairs(set) do
|
for k in pairs(set) do
|
||||||
s = s .. sep .. tostring(k)
|
list[#list + 1] = tostring(k)
|
||||||
sep = ", "
|
list[#list + 1] = ", " -- <= Theoretically, it should't be a problem because of string buffering.
|
||||||
|
-- Especially, as it allows to avoid string concatenation at all, and also allows to
|
||||||
|
-- avoid things like [1]
|
||||||
|
-- it looks like good idea to add separators this way.
|
||||||
|
-- But it needs to be tested on real-world examples with giant inputs.
|
||||||
|
-- If any (if it'd show that string buffering fails, and it is still leads huge RAM usage),
|
||||||
|
-- it can be downgraded to [1] or even string.format
|
||||||
|
--
|
||||||
|
-- [1] = something like table.concat{"{",table.concat(list,","),"}"},
|
||||||
|
--
|
||||||
end
|
end
|
||||||
return s .. "}"
|
list[#list] = "}"
|
||||||
|
|
||||||
|
return table.concat(list)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
local ElementNode = {}
|
local ElementNode = {}
|
||||||
ElementNode.mt = {__index = ElementNode}
|
ElementNode.mt = {__index = ElementNode}
|
||||||
function ElementNode:new(index, nameortext, node, descend, openstart, openend)
|
function ElementNode:new(index, nameortext, node, descend, openstart, openend)
|
||||||
|
Loading…
Reference in New Issue
Block a user