LINUX.ORG.RU

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

 


0

2

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

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

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

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

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

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

★★★

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

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

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

посмотрел я ваш виртуальный дом. алгоритм еще проще чем мой. может даже оно и к лучшему.

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

хочу вырастить помидоры на северном окне в первопристольной… но это будет уже другой челлендж.

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

Создай тред страниц на десять: какое выбрать освещение для рассады😀️ Ну, а так вроде рановато ещё.

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

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

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

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

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

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

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

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

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

Может?..

в наше сложное время ничто невозможно утверждать определенно.

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

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

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

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

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

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

alysnix ★★★
() автор топика
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.