1#ifndef ISL_INTERFACE_TEMPLATE_CPP_H
2#define ISL_INTERFACE_TEMPLATE_CPP_H
4#include <initializer_list>
10#include <unordered_map>
21 using Base = std::shared_ptr<const TupleKind>;
44 virtual std::vector<std::string>
params()
const;
55struct Kind :
public std::vector<TupleKindPtr> {
57 Kind(std::initializer_list<TupleKindPtr> list) : vector(list) {}
62 std::vector<std::string>
params()
const;
102 const std::vector<Kind> &class_tuples);
105 std::set<clang::RecordDecl *> &exported_types,
106 std::set<clang::FunctionDecl *> exported_functions,
107 std::set<clang::FunctionDecl *> functions);
std::map< std::string, template_class > template_classes
virtual void generate() override
void foreach_template_class(const std::function< void(const template_class &)> &fn) const
void add_template_class(const isl_class &clazz, const std::string &name, const std::vector< Kind > &class_tuples)
void print_friends(std::ostream &os)
void print_forward_declarations(std::ostream &os)
isl_stat isl_stat(* fn)(__isl_take ISL_KEY *key, __isl_take ISL_VAL *val, void *user)
std::vector< std::string > params() const
Kind(std::initializer_list< TupleKindPtr > list)
Kind apply(const Substitution &subs) const
std::shared_ptr< const TupleKind > Base
virtual std::vector< std::string > params() const
virtual std::string to_string() const
virtual TupleKindPtr right() const
virtual TupleKindPtr apply(const Substitution &subs, const TupleKindPtr &self) const
TupleKind(const std::string &name)
virtual TupleKindPtr left() const
void add_specialization(const Kind &kind)
std::vector< Kind > class_tuples
const std::string class_name
const std::string super_name
std::unordered_map< std::string, TupleKindPtr > Substitution