_L_>>Хэш-таблице нужен ключ. У меня в одном файле может быть много вызовов функций и вызов в одной и той же строке может происходить в разных файлах. Т.о. уникальность региона дает пара (файл, строка в файле). Т.к. стандартные функции вычисления хэша работают с простыми типами, то мне придется писать свою хэш-функцию?
К>Хэш от строки — зачастую тупо сумма символов. Если коллизий слишком много, то можно взять CRC. Можно и MD5, но это уже паранойя.
К>Чтобы не мучаться с рукодельным управлением строками — используй GString. Для него, кстати, и хэш-функция есть: g_string_hash
_L_>>Я не очень силен в этом. Объясните на пальцах, какие должны быть хэш-таблицы и что у них будет ключ, а что значение. По идее по кортежу (файл, строка, имя_фунции, и т.п....), должен возвращаться id региона. Как это провернуть? Через две хэш-таблицы?
К>Как я уже сказал, имён файлов немного, и для каждой записи повторять имя файла — это трата и памяти, и времени.
К>Поэтому отдельно заводишь таблицу (имя файла) -> (регистрационный номер файла).
Классная идея. Мне бы в голову, за неимением большого опыта программировния, такое не пришло. Кодт, ты молодец, что находишь время помогать людям.
Я хоть и computer science окончил, тем не менее мне вот что интересно стало. Имя файла свернули в хэш. Функцию сравнения для дерева сделали сами с сортировкой сначала по имени файла, а потом строке. (Дерево кстати сбалансированное, оно это потом балансировать будет). С точки зрения работы алгоритмов совершенно пофигу какое у нас условие сортировки и какие данные мы сортируем и с каким условием? Пусть даже у нас там будет десять условий в функции сортировки? Все равно ведь искать мы будем потом согласно тому же алгоритму?