4#include <unordered_set>
42 const std::string&
name()
const {
54 virtual std::string_view
name()
const = 0;
71 std::unordered_map<std::string, CodeSnippet>
snippets_;
80 std::unordered_map<const LibDependency*, DependencyState>
dependencies_;
83 CodeSnippetFactory(
const std::pair<std::filesystem::path, std::filesystem::path>* config =
nullptr);
87 virtual CodeSnippet&
require(
const std::string& name,
const std::string& extension,
bool as_file);
89 return require(name, extension,
true);
92 std::unordered_map<std::string, CodeSnippet>::iterator
find(
const std::string& name);
94 const std::unordered_map<std::string, CodeSnippet>&
snippets()
const;
130 std::optional<std::pair<const std::string&, const LibDependency*>>
155 throw std::runtime_error(
"NestedCodeSnippetFactory does not support nested snippets");
159 throw std::runtime_error(
"Unsupported on NestedCodeSnippetFactory");
162 throw std::runtime_error(
"Unsupported on NestedCodeSnippetFactory");
165 throw std::runtime_error(
"Unsupported on NestedCodeSnippetFactory");
168 throw std::runtime_error(
"Unsupported on NestedCodeSnippetFactory");
171 throw std::runtime_error(
"Unsupported on NestedCodeSnippetFactory");
void require_no_conflicts(const LibDependency *dependency)
Adds conflicts of this dependency to the list, throws if conflicts exist Warning: not transactional f...
void add_available_dependency(const LibDependency *dependency)
For the generation process to declare discovered runtime dependencies before the codegen starts.
std::unordered_set< std::string > setup_snippets_
Definition code_snippet_factory.h:75
const std::unordered_set< std::string > & globals_snippets() const
std::unordered_set< std::string > globals_snippets_
Definition code_snippet_factory.h:77
virtual ~CodeSnippetFactory()=default
std::optional< std::pair< const std::string &, const LibDependency * > > check_for_conflicts(const LibDependency *dependency) const
Checks if this dependency would conflict with existing ones.
CodeSnippetFactory(const std::pair< std::filesystem::path, std::filesystem::path > *config=nullptr)
std::vector< const LibDependency * > get_used_lib_dependencies() const
virtual const std::unordered_set< std::string > & teardown_snippets() const
virtual void add_teardown(const std::string &snippet)
const std::filesystem::path header_path_
Definition code_snippet_factory.h:73
std::unordered_map< const LibDependency *, DependencyState > dependencies_
Definition code_snippet_factory.h:80
const std::filesystem::path output_path_
Definition code_snippet_factory.h:72
const std::filesystem::path & header_path() const
Definition code_snippet_factory.h:99
const std::unordered_map< std::string, CodeSnippet > & snippets() const
std::unordered_map< std::string, CodeSnippet > snippets_
Definition code_snippet_factory.h:71
bool require_dependency(const LibDependency *dependency)
Ensure that the given dependency is available or throw.
std::unordered_set< std::string > teardown_snippets_
Definition code_snippet_factory.h:76
virtual const std::unordered_set< std::string > & setup_snippets() const
const std::filesystem::path & output_path() const
Definition code_snippet_factory.h:96
virtual void add_setup(const std::string &snippet)
std::unordered_map< std::string, CodeSnippet >::iterator find(const std::string &name)
std::unordered_map< std::string, const LibDependency * > conflicting_ids_
Definition code_snippet_factory.h:79
CodeSnippet & require(const std::string &name, const std::string &extension)
Definition code_snippet_factory.h:88
virtual CodeSnippet & require(const std::string &name, const std::string &extension, bool as_file)
bool is_available(const LibDependency *dependency) const
The dependency is either already required or the system knows it is available.
virtual void add_global(const std::string &snippet)
Definition code_snippet_factory.h:15
const std::string & name() const
Definition code_snippet_factory.h:42
bool as_file_
Definition code_snippet_factory.h:19
std::string extension_
Definition code_snippet_factory.h:18
PrettyPrinter & stream()
Definition code_snippet_factory.h:26
std::filesystem::path filename() const
Definition code_snippet_factory.h:46
const PrettyPrinter & stream() const
Definition code_snippet_factory.h:30
PrettyPrinter stream_
Definition code_snippet_factory.h:17
const std::string & extension() const
Definition code_snippet_factory.h:34
CodeSnippet(const std::string &name, const std::string &extension, bool as_file)
Definition code_snippet_factory.h:23
bool is_as_file() const
Definition code_snippet_factory.h:38
std::string name_
Definition code_snippet_factory.h:20
Definition code_snippet_factory.h:51
virtual void enumerate_includes(std::vector< std::string > &out_list) const =0
virtual std::string_view name() const =0
virtual std::vector< std::string_view > & globally_unique_ids() const =0
virtual ~LibDependency()=default
const std::unordered_set< std::string > & teardown_snippets() const override
Definition code_snippet_factory.h:170
void add_teardown(const std::string &snippet) override
Definition code_snippet_factory.h:161
void add_setup(const std::string &snippet) override
Definition code_snippet_factory.h:158
NestedCodeSnippetFactory(const std::pair< std::filesystem::path, std::filesystem::path > *config=nullptr)
CodeSnippet & require(const std::string &name, const std::string &extension, bool as_file) override
Definition code_snippet_factory.h:154
void add_global(const std::string &snippet) override
Definition code_snippet_factory.h:164
const std::unordered_set< std::string > & setup_snippets() const override
Definition code_snippet_factory.h:167
Definition argument_registry.h:10
std::string CODE_SNIPPET_DEINIT_ONCE
Definition code_snippet_factory.h:13
std::string CODE_SNIPPET_INIT_ONCE
Definition code_snippet_factory.h:12
Definition code_snippet_factory.h:59
bool used
Definition code_snippet_factory.h:60
bool runtime_available
Definition code_snippet_factory.h:61