-
Notifications
You must be signed in to change notification settings - Fork 2
Интеграция алгоритмов
При инциализации модуля регистрируются команды (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()
- чтобы все регистрации алгоритмов были рядом.
В данном случае API значит 2-4 функции :D