Насколько я могу судить, ваше решение хорошо, и его будет сложно улучшить.
Единственное, что я хотел бы сделать, это использовать хеширование для словаря, а не отсортированный список ключей и двоичный поиск. Вы можете использовать Delphi TDictionary<TKey,TValue>
, предполагая, что его производительность была разумной. Для TKey
вы должны использовать пользовательскую запись, реализующую вашу карту (положение и длина). Аналогично для TValue
. Вам нужно было бы реализовать свой собственный компаратор, который мог бы быть выполнен достаточно легко, без выделения кучи.
Сказав все это, вы на 100% уверены, что выделение кучи столь же зло, как вы думаете, для этого приложения? Вам следует попробовать простую реализацию, используя TDictionary<string,string>
, и профилировать приложение, чтобы доказать, что оно проводит значительное время в коде словаря. Еще одним преимуществом такого подхода будет то, что, если действительно проблема с выделением кучи является проблемой, вы можете использовать версию на основе string
в качестве эталонной реализации для целей тестирования. Ваша версия, основанная на смещении указателя и длине, обязательно будет фабрикой ошибок.