[plug] [PATCH] interface for pass

Vladislav Ivanishin vlad at ispras.ru
Fri Apr 6 13:40:38 MSK 2018


Добрый день, Иван,

Комментарий к Вашему патчу ниже.

> ---
>  pass.h | 34 ++++++++++++++++++++++++++++++++++
>  1 file changed, 34 insertions(+)
>  create mode 100644 pass.h
> 
> diff --git a/pass.h b/pass.h
> new file mode 100644
> index 0000000..69a03fd
> --- /dev/null
> +++ b/pass.h
> @@ -0,0 +1,34 @@
> +#ifndef PASS_H
> +#define PASS_H
> +#include <string>
> +#include <vector>
> +#include <map>
> +
> +struct PassData {
> +    PassData(string& n): passName(n) {}
> +    void* data; //actual data
> +    string passName; //name of pass which gathered data 
> +};
> +
> +class Pass {
> +private:
> +    const std::string name; //name of pass
> +    const std::vector<std::string> dependsOn;//names of necessary passes
> +    std::map<std::string, void*> inputData; // passName <-> his data

Как я понимаю, в inputData хрянятся данные, сгенерированные проходами,
от которых зависит данный проход. Мне кажется, более логично не хранить
эту информацию в поле класса Pass, поскольку информация о зависимостях
уже содержится в поле dependsOn, а информация о связи имён проходов с их
данными по сути не принадлежит никакому конкретному экземпляру класса
Pass. В частности, её можно получить, используя уже имеющееся
отображение Plug в классе PassKeeper и далее поле returnData.

> +    PassData returnData;
> +public:
> +    Pass(const std::string& n, const std::vector<std::string>& d):
> +        name(n), dependsOn(d), returnData(PassData(n)) {}
> +
> +    std::string* getName() { return &name; }
> +    std::vector<std::string>* getDependencies( return &dependsOn; )
> +
> +    void addInput(PassData* data)
> +    { return inputData.insert(std::make_pair(data->passName, data->data)->second); }
> +    PassData* getResult() { return &returnData; }
> +
> +    virtual int launch() = 0;
> +    virtual ~Pass() {}
> +};
> +
> +#endif // PASS_H

-- 
Влад


More information about the plug mailing list