summaryrefslogtreecommitdiff
path: root/script/files/file.lua
diff options
context:
space:
mode:
Diffstat (limited to 'script/files/file.lua')
-rw-r--r--script/files/file.lua158
1 files changed, 158 insertions, 0 deletions
diff --git a/script/files/file.lua b/script/files/file.lua
new file mode 100644
index 00000000..81aabba5
--- /dev/null
+++ b/script/files/file.lua
@@ -0,0 +1,158 @@
+---@class file
+local mt = {}
+mt.__index = mt
+mt.type = 'file'
+mt._uri = ''
+mt._oldText = ''
+mt._text = ''
+mt._version = -1
+mt._vmCost = 0.0
+mt._lineCost = 0.0
+
+---@param buf string
+function mt:setText(buf)
+ self._oldText = self._text
+ self._text = buf
+end
+
+---@return string
+function mt:getText()
+ return self._text
+end
+
+---@return string
+function mt:getOldText()
+ return self._oldText
+end
+
+function mt:clearOldText()
+ self._oldText = nil
+end
+
+---@param version integer
+function mt:setVersion(version)
+ self._version = version
+end
+
+---@return integer
+function mt:getVersion()
+ return self._version
+end
+
+function mt:remove()
+ if self._removed then
+ return
+ end
+ self._removed = true
+ self._text = nil
+ self._version = nil
+ if self._vm then
+ self._vm:remove()
+ end
+end
+
+---@return boolean
+function mt:isRemoved()
+ return self._removed == true
+end
+
+---@param vm VM
+---@param version integer
+---@param cost number
+function mt:saveVM(vm, version, cost)
+ if self._vm then
+ self._vm:remove()
+ end
+ self._vm = vm
+ if vm then
+ vm:setVersion(version)
+ end
+ self._vmCost = cost
+end
+
+---@return VM
+function mt:getVM()
+ return self._vm
+end
+
+---@return number
+function mt:getVMCost()
+ return self._vmCost
+end
+
+function mt:removeVM()
+ if not self._vm then
+ return
+ end
+ self._vm:remove()
+ self._vm = nil
+end
+
+---@param lines table
+---@param cost number
+function mt:saveLines(lines, cost)
+ self._lines = lines
+ self._lineCost = cost
+end
+
+---@return table
+function mt:getLines()
+ return self._lines
+end
+
+function mt:getComments()
+ return self.comments
+end
+
+---@return file
+function mt:getParent()
+ return self._parent
+end
+
+---@param uri uri
+function mt:addChild(uri)
+ self._child[uri] = true
+end
+
+---@param uri uri
+function mt:removeChild(uri)
+ self._child[uri] = nil
+end
+
+---@param uri uri
+function mt:addParent(uri)
+ self._parent[uri] = true
+end
+
+---@param uri uri
+function mt:removeParent(uri)
+ self._parent[uri] = nil
+end
+
+function mt:eachChild()
+ return pairs(self._child)
+end
+
+function mt:eachParent()
+ return pairs(self._parent)
+end
+
+---@param err table
+function mt:setAstErr(err)
+ self._astErr = err
+end
+
+---@return table
+function mt:getAstErr()
+ return self._astErr
+end
+
+---@param uri string
+return function (uri)
+ local self = setmetatable({
+ _uri = uri,
+ _parent = {},
+ _child = {},
+ }, mt)
+ return self
+end