Извините, Smasher. Указатели на открытие универсальных типов не поддерживаются, потому что универсальные типы указателей не поддерживаются, хотя возможно (ошибка компилятора) создавать их при определенных обстоятельствах (особенно указатели на вложенные типы внутри универсального типа); эта «особенность» не может быть удалена в обновлении, если мы нарушаем чей-то код. Ограничение на общие типы указателей должно быть снято в будущем, но я не могу давать обещания, когда.
Если рассматриваемый тип - тот, который я написал в JclStrHashMap
(или в древнем HashList
блоке), то проще всего воспроизвести его, изменив тип узла на класс и передавая любой двойные указатели как Pointer
с соответствующим приведением. Однако, если бы я снова писал этот блок сегодня, я бы не реализовал сегменты как двоичные деревья. У меня появилась возможность написать словарь в модуле Generics.Collections, хотя со всеми остальными время работы компилятора Delphi было слишком коротким, прежде чем отправлять его для надежного контроля качества, а сама поддержка универсальных функций была в движении до довольно позднего времени.
Я бы предпочел реализовать сегменты карты хеш-функции в виде одного из динамических массивов с двойным хешированием, для каждого сегмента или связанных списков ячеек из непрерывного массива, в зависимости от того, что получилось лучше всего при тестировании с использованием представительных данных. Логика заключается в том, что стоимость пропуска кэша для следующих ссылок в дереве / списке должна доминировать над любой разницей в поиске сегментов между деревом и списком с хорошей хэш-функцией. Текущий словарь реализован как прямолинейное зондирование в первую очередь потому, что его было относительно легко реализовать и работать с доступным набором примитивных универсальных операций.
Тем не менее, сегменты двоичного дерева должны были быть эффективным хеджированием против плохих хеш-функций; если бы они были сбалансированными двоичными деревьями (=>
даже больше стоимости модификации), они были бы в среднем O (1) и O (log n) в худшем случае.