Форум программистов, компьютерный форум, киберфорум
ООП и паттерны
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
 Аватар для snake32
3511 / 1694 / 236
Регистрация: 26.02.2009
Сообщений: 8,471
Записей в блоге: 6

Менеджер ресурсов

28.07.2014, 14:52. Показов 1167. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени!

Ломаю голову над манагером который должен обладать следующими св-вами:
1) Манагер выдаёт ресурс по имени исключая дубликаты. Если такого ресурса не существует, то создаёт его. Иначе увеличивает счётчик ссылок у ресурса
Delphi
1
Res := Manager.Get( 'Heights' );
2) При уничтожении/очистки манагера все выделенные ресурсы уничтожаются и ВСЕ ОБЪЕКТЫ которые пользуются ресурсами этого манагера должны как-то узнать об этом. Иначе те ссылки которые он выделил ранее будут не валидными.(вот здесь у меня проблемы)
3) При уничтожении объекта содержащий ссылку на ресурс должен "возвратить его" - уменьшить счётчик ссылок и если кол-во их = 0 то уничтожить сам ресурс
Delphi
1
2
3
4
5
destructor TObj.Destroy;
begin
  Res.Release;
  inherited;
end;
4) Манагер может содержать группы, для более быстрого поиска. Группировка ресурсов.
Delphi
1
2
man := Manager.GetGroup('Group1');
Res := man.Get('Value1');
5) Сложность поиска не более Q(n). Сложность Создание/Удаление ссылки ресурса должно быть минимальным Q(1). Для этих целей думаю использовать двунаправленный список где удаление/вставка Q(1)

Подскажите код взаимодействия(общую архитектуру) манагера, его ресурсов, ссылок на них.
У меня какая-то ахинея получается
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.07.2014, 14:52
Ответы с готовыми решениями:

Какой оконный менеджер меньше всего жрет ресурсов компьютера, FluxBox, OpenBox, BlackBox или IceWM?
Привет всем. Собственно вопрос в заголовке. Есть слабое железо Пентиум 2 , ОЗУ 64 Мб. Надо чтоб не тормозило. Дистрибутив будет SlackWare....

IT-менеджер
Крупному банку требуется IT-менеджер; в/о; англ. яз. (рабочий); опыт управления проектами в банковской сфере; знание банковских технологий...

Менеджер Wi-fi
Ребята, помогите! Замучился с подключением к сети в Федоре - даже к близким сетям не хочет подключаться - посоветуйте прогу для...

5
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,779
29.07.2014, 06:51
Цитата Сообщение от snake32 Посмотреть сообщение
При уничтожении объекта содержащий ссылку на ресурс должен "возвратить его" - уменьшить счётчик ссылок и если кол-во их = 0 то уничтожить сам ресурс
Для подсчета ссылок в Делфи уже есть интерфейсы.

Цитата Сообщение от snake32 Посмотреть сообщение
Сложность поиска не более Q(n). Сложность Создание/Удаление ссылки ресурса должно быть минимальным Q(1). Для этих целей думаю использовать двунаправленный список где удаление/вставка Q(1)
Почему бы не словарь (TDictionary)?
1
 Аватар для snake32
3511 / 1694 / 236
Регистрация: 26.02.2009
Сообщений: 8,471
Записей в блоге: 6
29.07.2014, 11:20  [ТС]
Цитата Сообщение от korvin_ Посмотреть сообщение
Для подсчета ссылок в Делфи уже есть интерфейсы.
Это я уже и без них сделал.
Цитата Сообщение от korvin_ Посмотреть сообщение
Почему бы не словарь (TDictionary)?
Не нашёл сложность вставки, хотя для удаления явно написано O(1). У меня ещё будут случаи когда ключ = пустой строке. При этом поиск проводиться не должен. Сразу создаётся ресурс. Думаю это можно обойти инкриментируя переменную и на базе её создавать уникальный ключ.
Честно говоря не до конца догнал как ключ преобразуется в индекс массива и какого размера получается этот массив?
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
function TDictionary<TKey,TValue>.GetBucketIndex(const Key: TKey; HashCode: Integer): Integer;
var
  start, hc: Integer;
begin
  if Length(FItems) = 0 then
    Exit(not High(Integer));
  
  start := HashCode and (Length(FItems) - 1);
  Result := start;
  while True do
  begin
    hc := FItems[Result].HashCode;
    
    // Not found: return complement of insertion point.
    if hc = EMPTY_HASH then
      Exit(not Result);
    
    // Found: return location.
    if (hc = HashCode) and FComparer.Equals(FItems[Result].Key, Key) then
      Exit(Result);
    
    Inc(Result);
    if Result >= Length(FItems) then
      Result := 0;
  end;
end;
В моём случае TKey = string
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,779
29.07.2014, 11:39
Цитата Сообщение от snake32 Посмотреть сообщение
Честно говоря не до конца догнал как ключ преобразуется в индекс массива и какого размера получается этот массив?
http://en.wikipedia.org/wiki/Hash_function
http://en.wikipedia.org/wiki/Hash_table
0
 Аватар для snake32
3511 / 1694 / 236
Регистрация: 26.02.2009
Сообщений: 8,471
Записей в блоге: 6
29.07.2014, 11:55  [ТС]
Цитата Сообщение от korvin_ Посмотреть сообщение
есть интерфейсы
Блин я отстал от жизни.
Интерфейсы крутая штука http://habrahabr.ru/post/219685/
Подскажите инфу хорошую по ним в Delphi, нужно плотничком изучать их. Слышал что отладка интерфейсов УГ.

Добавлено через 8 минут
Цитата Сообщение от korvin_ Посмотреть сообщение
http://en.wikipedia.org/wiki/Hash_function
http://en.wikipedia.org/wiki/Hash_table
Ок. Как отработает конкретно Делфовый TDictionary если два разных TKey вернут одни Hash?
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,779
29.07.2014, 12:06
Цитата Сообщение от snake32 Посмотреть сообщение
Подскажите инфу хорошую по ним в Delphi
Не знаю такой, т.к. не особо интересуюсь Делфи.

Цитата Сообщение от snake32 Посмотреть сообщение
Ок. Как отработает конкретно Делфовый TDictionary если два разных TKey вернут одни Hash?
ХЗ, у тебя ж есть исходники, глянь. =) Но, думаю, как и везде, использует списки для разруливания коллизий. Т.е. в случае возникновении коллизии вместо одного объекта создается ассоциативный список или массив, куда кладется существующая пара ключ-значение и новая, а при попытке достать значение процедура проверяет, один там объект или список.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.07.2014, 12:06
Помогаю со студенческими работами здесь

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

Менеджер Раскладок
Ещё раз приветствую всех! На этот раз у меня есть вопрос по раскладкам (LayoutManagers). У меня есть панель, на ней метка (JLabel),...

файловый менеджер
Прошу дать информацию на работу с файлами (статьи, книги) в срр, точнее необходимо сделать что-то вроде файлового менеджера с функциями...

Файловый менеджер
Здравствуйте, как написать файловый менеджер с такими командами: 1) Список файлов в каталоге (с возможностью сортировки) 2) Переход в...

Менеджер окон на Qt
Здравствуйте! Ребят подскажите пожалуйста, можно ли создать wm на qt. Некоторые статьи на &quot;буржуйском&quot; уверяют что не нужно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru