FreeTensor
Loading...
Searching...
No Matches
min_max.h
Go to the documentation of this file.
1#ifndef FREE_TENSOR_MIN_MAX_H
2#define FREE_TENSOR_MIN_MAX_H
3
4#include <functional>
5
6#include <expr.h>
7
8namespace freetensor {
9
10Expr makeMinMaxImpl(const std::vector<std::vector<Expr>> &exprs,
11 const std::function<Expr()> &inf,
12 const std::function<Expr()> &negInf);
13Expr makeMaxMinImpl(const std::vector<std::vector<Expr>> &exprs,
14 const std::function<Expr()> &inf,
15 const std::function<Expr()> &negInf);
16
17inline std::function<Expr()> asExprGenerator(std::nullptr_t) {
18 return []() { return nullptr; };
19}
20inline std::function<Expr()> asExprGenerator(const std::function<Expr()> &e) {
21 return e;
22}
23inline std::function<Expr()> asExprGenerator(const Expr &e) {
24 return [&e]() { return e; };
25}
26
38template <typename T, typename U>
39Expr makeMinMax(const std::vector<std::vector<Expr>> &exprs, const T &inf,
40 const U &negInf) {
41 return makeMinMaxImpl(exprs, asExprGenerator(inf), asExprGenerator(negInf));
42}
43
55template <typename T, typename U>
56Expr makeMaxMin(const std::vector<std::vector<Expr>> &exprs, const T &negInf,
57 const U &inf) {
58 return makeMaxMinImpl(exprs, asExprGenerator(negInf), asExprGenerator(inf));
59}
60
68Expr makeLOrLAnd(const std::vector<std::vector<Expr>> &exprs);
69
70} // namespace freetensor
71
72#endif // FREE_TENSOR_MIN_MAX_H
Definition: allocator.h:9
Expr makeMinMax(const std::vector< std::vector< Expr > > &exprs, const T &inf, const U &negInf)
Definition: min_max.h:39
Expr makeLOrLAnd(const std::vector< std::vector< Expr > > &exprs)
Definition: min_max.cc:135
Expr makeMaxMin(const std::vector< std::vector< Expr > > &exprs, const T &negInf, const U &inf)
Definition: min_max.h:56
std::function< Expr()> asExprGenerator(std::nullptr_t)
Definition: min_max.h:17
Expr makeMaxMinImpl(const std::vector< std::vector< Expr > > &exprs, const std::function< Expr()> &inf, const std::function< Expr()> &negInf)
Definition: min_max.cc:129
Ref< ExprNode > Expr
Definition: ast.h:184
Expr makeMinMaxImpl(const std::vector< std::vector< Expr > > &exprs, const std::function< Expr()> &inf, const std::function< Expr()> &negInf)
Definition: min_max.cc:123