OnionGrief / Chipollino

преобразования регулярных выражений и конечных автоматов
Other
20 stars 4 forks source link

Метаданные автомата #268

Open TonitaN opened 1 year ago

TonitaN commented 1 year ago

@xendalm , @mathhyyn - делаю запрос на визирование и/или корректировку архитектуры.

  1. Метаданные - это отдельная "локальная" информация об автомате, которая не кэшируется
  2. LogParameter передаёт метаданные в качестве второго опционального аргумента (например, о цвете переходов или узлов). Некрасиво, что они пока есть только у автоматов, а присоединяются ко всем вариантам объектов логирования. Но, кажется, у нас кешируется пока только минимальный автомат, так что может и имеет смысл оставить, на случай метаданных для таблиц. В итоге получается так:
                    if (cache_automatons.count(hash) != 0) {
                        c_graph = cache_automatons[hash];
                    } else {
                        c_graph = AutomatonToImage::to_image(automaton);
                        cache_automatons[hash] = c_graph;
                    }
                    c_graph = AutomatonToImage::colorize(c_graph,p.second.meta);
                    s.insert(insert_place, c_graph);

    Плюсы - экономия в вызовах дорогого to_image, корректное кэширование (без локальной информации). Минус - некрасивый (пока) "двойник" метода to_image, который отличается от него практически только вызовами внешних рефал-модулей. Отсюда возникает желание как-то это отрефакторить, чтобы не делать под каждую внешнюю фичу пасту старых методов.

Есть идеи или предложения, как "завернуть в шаблон" обращения к рефал-модулям? В нынешнем виде эти два метода-двойника пойдут только как промежуточное решение.

mathhyyn commented 1 year ago

Чтобы не засорять код одинаковыми блоками в to_image и colorize, можно сделать функции удаления файлов, получения содержимого файла и записи в файл. Тогда и смотреться более читаемо будет, мне кажется.

А про метаданные, из того что заметила: 1) to_image наверно не должен принимать метаданные (по крайней мере я не нашла где они передаются), или это добавлено "на будущее"? 2) наплодилось много set_parameter и можно сократить хотя бы так:

parameters[key] = {value, meta};

P.S. Можно использовать шаблоны, но это не совсем правильно.. Надо исправить в аргументах на variant<>. (В интерпретаторе применяется using GeneralObject = variant<...>, чтобы каждый раз не расписывать)