|
Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
-- This file:
-- http://angg.twu.net/youtube-db/ydb2.lua
-- http://angg.twu.net/youtube-db/ydb2.lua.html
-- (find-angg "youtube-db/ydb2.lua")
-- Author: Eduardo Ochs <eduardoochs@gmail.com>
-- Version: 2015may27
-- License: GPL3
--
-- This is an attempt to rewrite ydb using classes like "Set", "SetL",
-- and "YThing". It is currently VERY incomplete.
--
-- «.SetL» (to "SetL")
-- «.SetL-tests» (to "SetL-tests")
-- «.YThing» (to "YThing")
-- «SetL» (to ".SetL")
SetL = Class {
new = function () return SetL {set={}} end,
type = "SetL",
__index = {
has = function (s, k) return s.set[k] end,
n = function (s) return #s end,
key = function (s, n) return s[n] end,
val = function (s, k) return s.set[k] end,
add = function (s, k, v)
if not s:has(k) then s.set[k] = v or k; table.insert(s, k) end
return s
end,
where = function (s, k) do
for i=1,s:n() do if s:key(i) == k then return i end end
end
end,
del = function (s, k)
if s:has(k) then
local i = s:where(k)
local v = s:val(k)
s.set[k] = nil
table.remove(s, i)
return s, v
end
end,
pairs = function (s)
local i=1
return function ()
local k = s:key(i)
if k then
local v = s:val(k)
i = i + 1
return k,v
end
end
end,
--
PP = function (s) PP(s); return s end,
},
}
--[[
-- «SetL-tests» (to ".SetL-tests")
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "ydb2.lua"
SetL.new():add(2, 20):add(3, 30):PP()
SetL.new():add(2, 20):add(3, 30):del(2):PP()
SetL.new():add(2, 20):add(3, 30):del(3):PP()
s = SetL.new():add(2, 20):add(3, 30)
s = SetL.new():add(2, 20):add(3, 30):add(4, 40)
for k,v in s:pairs() do PP(k, v) end
PP(s)
s:del(2)
PP(s)
--]]
-- «YThing» (to ".YThing")
-- (yo)
YThing = Class {
type = "YThing",
new = function (id)
return YThing {id=id,
titles=SetL.new(),
fnames=SetL.new(),
tags=Set.new()}
end,
new_from_url = function (url) end,
new_from_fname = function (fname) end,
__index = {
title = function (yt, n) return yt.titles:key(n or 1) end,
fname = function (yt, n) return yt.fnames:key(n or 1) end,
addtitle = function (yt, ti) yt.titles:add(ti); return yt end,
addfname = function (yt, fn) yt.fnames:add(fn); return yt end,
addtag = function (yt, ta) yt.tags:add(ta); return yt end,
},
}
--[[
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "ydb2.lua"
--]]
-- Local Variables:
-- coding: raw-text-unix
-- End: