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["."] = d
parent = {}
parent["."] = parent
child = {}
child["."] = child
parent["CHILD"]
child[".."]=parent
d = {}
d.tree = {}
d.tree["."] = d
before : 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
end
function node:getnode(t)
return cur.tree[name]
end
function node:__div(t) [...] end
child = 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
end
function 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