microsoft/Terminal

Use a binary tree/heap to represent panes

Open

#13.762 aberto em 16 de ago. de 2022

Ver no GitHub
 (0 comments) (1 reaction) (0 assignees)C++ (3.212 forks)batch import
Area-CodeHealthArea-TerminalControlHelp WantedIssue-TaskProduct-Terminal

Métricas do repositório

Stars
 (35.764 stars)
Métricas de merge de PR
 (Mesclagem média 27d 19h) (24 fundiu PRs em 30d)

Description

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.

Guia do colaborador