microsoft/Terminal

Use a binary tree/heap to represent panes

オープン

#13,762 opened on 2022/08/16

 (0 件のコメント) (1 件のリアクション) (0 人の担当者)C++ (9,275 件のフォーク)batch import
Area-CodeHealthArea-TerminalControlHelp WantedIssue-TaskProduct-Terminal

Repository metrics

Stars
 (103,173 個のスター)
PR merge metrics
 (平均マージ 27d 19h) (30d で 24 merged PRs)

説明

Problem

The Pane class acts simultaneously as the data model to represent actual panes and as splits which contain nothing but exactly 2 child panes and a split ratio / direction. In a sense Pane represents both a leaf and internal nodes in a binary tree simultaneously. Member functions of Pane iterating through that tree are complex and make changes difficult (#13306), as iteration happens almost exclusively via recursion, making retaining state cumbersome.

Proposal

Let's implement a binary heap class that works independently of Pane. This would allow us to use regular text-book algorithms for its implementation. Internal nodes of the heap would retain split ratios and directions and leaf nodes of the heap contain shared_ptr<Pane> references. Traversal/iteration would also be simplified. This separate heap would be cheap to clone, allowing us to implement things like UI state persistence (#13306) more easily.

コントリビューターガイド