docc 0.8.3 (0d44999b)
C++ API Reference
Loading...
Searching...
No Matches
argument_registry.h
Go to the documentation of this file.
1#pragma once
2
3#include <mutex>
4#include <stdexcept>
5#include <string>
6#include <unordered_map>
7#include <vector>
8
9namespace sdfg {
10namespace codegen {
11
13private:
14 mutable std::mutex compile_mutex_;
15 mutable std::mutex linker_mutex_;
16 std::unordered_map<std::string, std::vector<std::string>> compile_args_map_;
17 std::unordered_map<std::string, std::vector<std::string>> linker_args_map_;
18
19public:
21 static ArgumentRegistry registry;
22 return registry;
23 }
24
25 void register_compile_args(std::string target, std::vector<std::string> args) {
26 std::lock_guard<std::mutex> lock(compile_mutex_);
27 if (compile_args_map_.find(target) != compile_args_map_.end()) {
28 throw std::runtime_error(
29 "Library node dispatcher already registered for library node code: " + std::string(target)
30 );
31 }
32 compile_args_map_[target] = std::move(args);
33 }
34
35 std::vector<std::string> get_compile_args(std::string target) const {
36 auto it = compile_args_map_.find(target);
37 if (it != compile_args_map_.end()) {
38 return it->second;
39 }
40 return {};
41 }
42
43 size_t size_compile_args() const {
44 return compile_args_map_.size();
45 }
46
47 void register_linker_args(std::string target, std::vector<std::string> args) {
48 std::lock_guard<std::mutex> lock(linker_mutex_);
49 if (linker_args_map_.find(target) != linker_args_map_.end()) {
50 throw std::runtime_error(
51 "Library node dispatcher already registered for library node code: " + std::string(target)
52 );
53 }
54 linker_args_map_[target] = std::move(args);
55 }
56
57 std::vector<std::string> get_linker_args(std::string target) const {
58 auto it = linker_args_map_.find(target);
59 if (it != linker_args_map_.end()) {
60 return it->second;
61 }
62 return {};
63 }
64
65 size_t size_linker_args() const {
66 return linker_args_map_.size();
67 }
68};
69
70} // namespace codegen
71} // namespace sdfg
Definition argument_registry.h:12
static ArgumentRegistry & instance()
Definition argument_registry.h:20
std::vector< std::string > get_compile_args(std::string target) const
Definition argument_registry.h:35
void register_linker_args(std::string target, std::vector< std::string > args)
Definition argument_registry.h:47
std::vector< std::string > get_linker_args(std::string target) const
Definition argument_registry.h:57
void register_compile_args(std::string target, std::vector< std::string > args)
Definition argument_registry.h:25
size_t size_compile_args() const
Definition argument_registry.h:43
size_t size_linker_args() const
Definition argument_registry.h:65
Definition argument_registry.h:10
Definition analysis.h:7