LINUX.ORG.RU

Нужен ли parent'у список child'ов?

 


0

1

Есть форма, на которой валяются контролы. Нужен ли форме список «указателей» (на самом деле индексов из пула объектов) своих детей? Мне сейчас нужно реализовать переключение фокуса по TAB.

Плюсы отдельного списка:

  • Для того, чтобы получить следующий элемент мне нужно только сделать ->next.
  • Легко можно будет уничтожить всех детей при смерти родител - просто пройтись по списку.
  • Быстрее.

Плюсы отсутствия списка:

  • Можно просто идти по пулу объектов, смотр какого типа следующий элемент и если у него родителем явлетс выбранна форма - т.е. список не нужен, KISS во все пол.
  • Пройдсь по пулу можно и уничтожить всех детей как и со списком только без списка. Вместо ->next будет if (parent == form)
  • Меньше занимает памти. Да, I'm байтолюб, проект на си с асмом.

У кого какие мнени? Спор скорость ?[><==] занимаема памть

P.S. Клавиша [йа] умерла. P.P.S. В пуле на старте программы около 300 объектов, будет больше при работе. Каждый объект около 30 байт, точно не измерл.

★★

Посмотри, как это сделано в разных фреймворках, Qt, GTK, wxWidgets.

Знаю, что в Qt родитель может получить список потомков, но как это реализовано, я не смотрел.

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

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

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

Ты пишешь под embedded? Зачем тебе байтолюбство?

Вопрос по теме: а чем по памяти отличается первый вариант от второго? В первом варианте ты кроме списков детей у родителя хранишь еще и глобальный список «виджетов»?

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

Ты пишешь под embedded? Зачем тебе байтолюбство?

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

В первом варианте ты кроме списков детей у родителя хранишь еще и глобальный список «виджетов»?

Да, глобальный список хранит не только виджеты но и объекты шаред мемори, таймеры, темы, текстуры, окна и т.п.

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

А зачем виджеты в глобальном списке?

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

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

В общем, мое мнение: нафиг глобальные списки, пусть детьми рулит родитель.

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

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

мое мнение: нафиг глобальные списки

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

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

Что tabindex? Его и пытаюсь реализовать.

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

заводить доп.поля prev,next в указанных контролах заслужено считается тупиковым путём. Породи некую сущность TabIndex которая в курсе порядка передачи фокуса и держи в ней «ordered set» в удобном на сей момент виде.

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

Чем это отличаетс от варианта 1?

мне показалось, что вы хотели воткнуть поле «next» непосредственно в виджет контрола. Это не комильфо :-)

MKuznetsov ★★★★★
()

Имхо, экономия на спичках, всегда порождает боль.

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

А затем напиши нагрузочный тест, для 1кк обьектов, с различными лэйаутами вложенности. Самыми показательными будут вырожденные случаи. И подсчитай сколько скорости ты потеряешь.

Не забывай про многопоточную среду (если таковая потенциально имеет место быть). И включи в рассчёт локи в глобальном списке.

Если полученные показатели, тебя устроят - то к чему вопросы?

pon4ik ★★★★★
()

Клавиша [йа] умерла

Приходи, я тебе новую клаву отдам, бесплатно. Мне тебя аж жалко. Как ты букву «z» пишешь в сорцах?

deep-purple ★★★★★
()
Ответ на: комментарий от pon4ik

Спасибо. Померял. При 1кк объектов в пуле скорость цикла по пулу в поисках следующего виджета (особенно в вырожденном случае) намного медленнее чем медленное «скакание» по страницам в списке.

к чему вопросы?

Ожидал криков «[йа] так уже делал, списки сосут, etc».

sambist ★★
() автор топика
Ответ на: комментарий от deep-purple

Да у мен есть, но неудобно набирать на ноутбуке без стола с подключенной клавиатурой. Может стол подарите? :D

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

Не, угловой стол-шкаф у меня, к сожалению, один: http://s10.postimg.org/53axex70p/deskwork.png

А системник я взял недавно за 7.5к нульцевый. И там в комплекте были клаво и мыш, потому и предлагаю, ибо мне клаво не нужно — я к своей привык.

deep-purple ★★★★★
()
Ответ на: комментарий от sambist

Я вот так же во время ремонта (который сам же и делал) 8 месяцев работал — на лежанке с лаптопом. Это адъ.

Стол пойдет и самый простой — в четыре ноги, типа обеденный. Не порти себе глаза, суставы на руках и посадку.

deep-purple ★★★★★
()
Последнее исправление: deep-purple (всего исправлений: 1)
Ответ на: комментарий от sambist

так и быть, для особо одарённых, разжую: Нужен ли parent'у список child'ов? (комментарий) вот чтобы такого не было, надо писать на плюсах, используя шаблоны, и, если хочется, ассемблерные вставки

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

надо писать на плюсах, используя шаблоны

Сам пиши на плюсах. Шаблоны разворачиваются в несколько десятков одинаковых функций.

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

Шаблоны разворачиваются в несколько десятков одинаковых функций.

и что? это даже для микроконтроллеров безразлично.

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

Экономия памяти ради экономии памяти - идиотизм.

Если вам хватает ресурсов (да еще и с запасом) то заниматься оптимизацией просто не рационально.

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

Да, глобальный список хранит не только виджеты но и объекты шаред мемори, таймеры, темы, текстуры, окна и т.п.

Если виджеты уже хранятся в каком-то глобальном списке, по нему и освобождаются, то класть их одновременно в какие-то другие списки — потенциально опасная затея.
Грубо говоря: если ссылка на объект есть у двух сущностей одновременно, то нужно прикручивать счетчик ссылок к объекту. Так вижу.

Tayler ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.