microsoft / microsoft/terminal
Use a binary tree/heap to represent panes
- Dominant language
- C++
- Stars
- 105k
- Forks
- 9.6k
- Avg merge
- 3d 17h
- Merged PRs (30d)
- 29
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` 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.
Contributor guide
Research direction
Start by locating the Pane class and tracing the recursive traversal and split state it currently owns. Define the independent binary heap around internal split nodes and leaf Pane references, with traversal and cloning behavior supporting the proposed UI state persistence work.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp
- Domain
- cli
- Issue type
- Refactor
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100