ch1. minimal directory structure
ch2. think about file, hardlink and node
ch3. dir and getnode
ch4. mkdir : add a directory into another
ch5. special rootdir
ch6. paths
ch7. chroot and mount point
d = {}
d["."] = dparent = {}
parent["."] = parentchild = {}
child["."] = childparent["CHILD"]
child[".."]=parentd = {}
d.tree = {}
d.tree["."] = dbefore : d["CHILD"]
after : d.tree["CHILD"]before : d1["foo"]["bar"]["baz"]
after : d1.tree["foo"].tree["bar"].tree["baz"]local node = class("node")
function node:init()
self.hardcount = 1
end
-- create a hardlink of (dir|file)<what> named <name> into (dir)<self>
function node:hardlink(name, what) [...] end
function node:unhardlink(name) [...] end
local dir = class("dir", nil, node_class)
function dir:init(parentdir)
self.tree = {}
self:hardlink(".", self)
if parentdir then
self:hardlink("..", parentdir)
end
endfunction node:getnode(t)
return cur.tree[name]
end
function node:__div(t) [...] endchild = parent.tree["CHILD"]child = parent:getnode("CHILD")child = parent / "CHILD"baz = foo.tree["bar"].tree["baz"]baz = foo:getnode("bar"):getnode("baz")baz = foo / "bar" / "baz"local dir = require "memfs.dir"
local d = dir(nil)
local dd = dir(d)
d.tree["CHILD"]=dd
dd.tree[".."] == d
d.tree["CHILD"] == dd
function dir:mkdir(name)
if self.tree[name] then
error("already exists", 2)
end
local d = instance(dir,self) -- new directory d
self.tree[name] = d -- add d
return d
endfunction dir:rmdir(name)
if not self.tree[name] then
error("not exists", 2)
end
self.tree[name]:unhardlink("..")
-- self.tree[name]:unhardlink(".") -- hmm no
self.tree[name] = nil
return nil
end