microsoft/Terminal

Use a binary tree/heap to represent panes

Open

#13,762 opened on 2022年8月16日

GitHub で見る
 (0 comments) (1 reaction) (0 assignees)C++ (3,212 forks)batch import
Area-CodeHealthArea-TerminalControlHelp WantedIssue-TaskProduct-Terminal

Repository metrics

Stars
 (35,764 stars)
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.

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