#pragma once #include #include #include "target.h" #include "argument_set.h" #include "katom.h" class Target_registry { public: static std::string declare_name; static std::string general_name; Target_registry(); void add(Target target); void add(std::vector::iterator begin, std::vector::iterator end, std::vector& katoms); void check_for_previous_definition(const std::string& name, const Locator& loc) const; /* void add_transforms(std::string target_name, std::string transforms); void add_transforms( std::string target_name, std::vector> transforms); */ bool has(const std::string& target_name) const; Target get(const std::string& target_name, const Locator& loc) const; void transform(const std::string& target_name, std::vector& katoms) const; std::vector user_defined() const; std::vector applicable() const; std::string describe(int margin=2, bool long_format=false) const; //Argtype_registry m_argtypes {}; std::map m_targets {}; std::vector m_names {}; Parameter_set m_parameters {}; /* std::string m_parameters_spec {"name | desc :after_apply :after_write :includes | transforms.rest"}; Parameter_set m_parameters = katomize(line_split(m_parameters_spec), Locator().str()); */ //Parameter_set m_parameters = // Parameter_set(katomize({"name :desc | transforms.rest"}, "target_registry")); /* // Targets(Statevar_set& statevars); target_ptr check_target_existence( std::string name, Locator loc, bool should_exist); void add(std::string name, std::string desc, std::string include, // Statevar_set& statevars, std::string transform, std::string before_apply, std::string after_apply, std::string after_write, Locator loc); target_ptr check_target_name( std::string target, bool allow_all, Locator loc); std::map targets {}; std::vector names {}; void describe_suffixes(); void describe(); */ };