LINUX.ORG.RU

челендж - спаси дерево!

 


0

2

допустим у вас есть визуальное дерево(типа контрол из ближайшего оконного фреймворка), как приемник иерархических данных, и поставщик таких данных, что выдает данные в виде некоего абстрактного иерархического формата, хоть текстового, хоть бинарного.

источник данных не умеет генерить ивенты - типа «удалить узел», «переставить узел из одного парента в другой» и тепе. он умеет только выдавать все дерево.

но такой криндж для приемника не подходит - чисто в лоб придется удалять все визуальное дерево и рисовать новое, на основе новых данных.

ищется способ быстро найти дифф в данных между приемником и источником, и аккуратно подправлять дерево-приемник, не удаляя его, с минимальным количеством изменений.

я такой алгоритм нарисовал, оно работает. но возможно есть и получше.

в качестве модельного примера можно рассмотреть струкутру файловой системы и виз. дерево ее отражающее, но с условием, что никаких ивентов от фс быть не может.

★★★

Ответ на: комментарий от AKonia

согласованности визуального контрола с источником данных, в том случае если источник не умеет сигналить об атомарных изменениях, а выдает только данные целиком, по запросу.

alysnix ★★★
() автор топика

Если дочки каждого узла отсортированы (например, по именам в случае файлов) – то решение не только тупо, но и вполне себе эффективно. Типа как map-reduce на вход отсортированные данные требует.

dimgel ★★★★★
()
Ответ на: комментарий от alysnix

Так сельское хозяйство всю жизнь было дотационным! Начнешь в плюс выходить - начнут раскулачивать, не, в Питере очень рискованное земледелие ))

anonymous
()
Ответ на: комментарий от alysnix

Ну тогда кэшируй. Т.е. пусть визуальный отрисовщик всегда получает полный набор команд отрисовки, ты пересчитываешь хеши и отрисовываешь только то, вернее только те клетки(«тайлы»), которые изменились. Посмотри как например сделан редактор lite и собственно статья автора по кэширующей отрисовке

AKonia ★★
()
Ответ на: комментарий от AKonia

TreeView - это чужой контрол, из наворочанного фреймворка. вы предлагаете переписать его отрисовки???

опять же - перерисовка всего дерева снесет инфу - какие ветки раскрыты и выбраны(selected).

тут алгоритм тривиальный, на страничку-две.

alysnix ★★★
() автор топика