microsoft/Terminal

Use a binary tree/heap to represent panes

Open

#13.762 aperta il 16 ago 2022

Vedi su GitHub
 (0 commenti) (1 reazione) (0 assegnatari)C++ (3212 fork)batch import
Area-CodeHealthArea-TerminalControlHelp WantedIssue-TaskProduct-Terminal

Metriche repository

Star
 (35.764 star)
Metriche merge PR
 (Merge medio 27g 19h) (24 PR mergiate in 30 g)

Descrizione

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.

Guida contributor