Megrez // Memory sanitization.

This commit is contained in:
ShikiSuen 2023-03-02 17:21:19 +08:00
parent 2dc69bc41d
commit b5de4dd57d
2 changed files with 22 additions and 4 deletions

View File

@ -32,6 +32,7 @@ public extension Megrez.Compositor {
}
let terminal = Vertex(node: .init(keyArray: ["_TERMINAL_"]))
var root = Vertex(node: .init(keyArray: ["_ROOT_"]))
for (i, vertexSpan) in vertexSpans.enumerated() {
for vertex in vertexSpan {
@ -46,11 +47,10 @@ public extension Megrez.Compositor {
}
}
let root = Vertex(node: .init(keyArray: ["_ROOT_"]))
root.distance = 0
root.edges.append(contentsOf: vertexSpans[0])
var ordered: [Vertex] = topologicalSort(root: root)
var ordered = topologicalSort(root: &root)
for (j, neta) in ordered.reversed().enumerated() {
for (k, _) in neta.edges.enumerated() {
relax(u: neta, v: &neta.edges[k])
@ -58,15 +58,23 @@ public extension Megrez.Compositor {
ordered[j] = neta
}
var iterated = terminal
var walked = [Node]()
var totalLengthOfKeys = 0
var iterated = terminal
while let itPrev = iterated.prev {
walked.append(itPrev.node)
iterated = itPrev
totalLengthOfKeys += iterated.node.spanLength
}
//
ordered.removeAll()
vertexSpans.removeAll()
iterated.destroy()
root.destroy()
terminal.destroy()
guard totalLengthOfKeys == keys.count else {
print("!!! ERROR A")
return (result, false)

View File

@ -29,6 +29,16 @@ extension Megrez.Compositor {
public init(node: Node) {
self.node = node
}
/// Vertex Vertex
/// Vertex 使
public func destroy() {
while prev?.prev != nil { prev?.destroy() }
prev = nil
edges.forEach { $0.destroy() }
edges.removeAll()
node = .init()
}
}
///
@ -67,7 +77,7 @@ extension Megrez.Compositor {
/// Cormen 2001 Introduction to Algorithms
/// - Parameter root:
/// - Returns:
func topologicalSort(root: Vertex) -> [Vertex] {
func topologicalSort(root: inout Vertex) -> [Vertex] {
class State {
var iterIndex: Int
let vertex: Vertex