Skip to content

Интеграция алгоритмов

simpletonDL edited this page Oct 12, 2019 · 2 revisions

Конва

При инциализации модуля регистрируются команды (GRAPH.QUERY и прочие), в том числе и наша новая команда GRAPH.CFG, которую реализует функция MGraph_CFPQ. В неё перадётся название алгоритма, имя графа и путь к файлу с грамматикой. После этого она загружает граф из хранилища и грамматику из файла и запускает алгоритм. По завершению работы алгоритма выводит контрольную сумму и время работы.

Как зарегистрировать новый алгоритм

Функция, реализуюшая очередной алгоритм cfpq, должна иметь следующую сигнатуру:

int(RedisModuleCtx* ctx, GraphContext* graph, Grammar* grammar, CfpqResponse* response)

При этом, как уже упоминалось, грамматика и граф передаются в функцию алгоритма уже загруженными. Подразумевается, что ответ алгоритма (котнртольная сумма) будет записана в response - таким образом MGraph_CFPQ сможет после работы алгоритма выдасть ответ.

За регистрацию алгоритмов отвечает глобальная переменная CfpqAlgoStorage, которая хранит указатели на функции алгоримтов и их названия. Чтобы зарегистрировать алгоритм, можно либо воспользоваться функцией AlgoStorage_Add(name, pointer) при инициализации модуля (в RedisModule_OnLoad()), либо, что предпочтительнее, зарегистрировать в AlgoStorage_RegisterAlgorithms() - чтобы все регистрации алгоритмов были рядом.

Map reference

В данном случае API значит 2-4 функции :D