[devel] Утилиты для работы с setversions?

Alexey Tourbin alexey.tourbin на gmail.com
Ср Окт 30 05:04:27 MSK 2019


On Tue, Oct 29, 2019 at 9:23 PM Andrey Savchenko <bircoph на altlinux.org> wrote:
> К сожалению, для решения реальной проблемы этого недостаточно:

Давайте решим реальную проблему. Что вы хотите сделать? Left outer join?

> $ /usr/lib/rpm/provided_symbols /usr/lib64/libharfbuzz-subset.so.0 | ./get_hash set:nkVnoZa9uXJTAxpulY0e0jZy0
> warning: hash collision: _ZN10__cxxabiv115__forced_unwindD1Ev _ZNK2OT8OffsetToINS_12ConditionSetENS_7IntTypeIjLj4EEELb1EE8sanitizeEP21hb_sanitize_context_tPKv
> get_hash: get_hash.c:45: main: Assertion `set->sv[i].v == v[i]' failed.
> Aborted (core dumped)
>
> Понятно, что нужно обрабатывать коллизии хешей, но код set.c слишком
> велик, чтоб в нём разобраться за разумное время без детальной документации.

В примере в TODO сказано, что это не настоящий join, и что нужно для
настоящего join'а продвигать списки по-отдельности. Вы зря валите на
код set.c. У вас есть два примитива: 1) распаковать set-строку в
массив хешей v[]; 2) прохешировать заданный набор строк и
отсортировать их по хешу, будет массив пар <str,v>[].  Этим задача
set.c исчерпывается, и дальше разбираться в его коде не нужно.


Подробная информация о списке рассылки Devel