如果 simbafs/tree 要支援動畫,樹應該要改成 immutable,然後 Tree.Op() 會回傳一個有 UpdateTreeCmd 的陣列,依序執行
每個 UpdateTreeCmd 代表一刻的狀態
但這樣就會大幅介入演算法的執行。例如 search 這個動作,就要每移動一次 current 就回傳一個 tree,那麼現在在執行什麼動作、各個指標指在哪裡都要存在 Tree 裡
Tree 新增欄位 jobs 和 map[string]pointers
jobs[0] 表示目前在幹嘛,例如 search node 10, 然後 pointers 包含一個指向 Node 的指標,還有顏色、標籤等等演算法無關的東西。收到 UpdateTreeCmd 之後會根據這兩個欄位和實際的 Tree 決定要幹嘛,例如把 curr 移到 curr.Left,然後把整棵樹回傳,進入下一個 UpdateTreeCmd
那麼剛剛 Op 回傳一個陣列的 UpdateTreeCmd 就要改成回傳第一步,後續步驟根據第一步執行結果而定
這樣好像比較符合 bubbletea 的設計
那麼 Tree 的設計就改成一個大大的 state machine,他的狀態分別是 tree, jobs, pointers
 
 
Back to Top