Ultra 0.9.4
Loading...
Searching...
No Matches
problem.h
Go to the documentation of this file.
1
12
13#if !defined(ULTRA_PROBLEM_H)
14#define ULTRA_PROBLEM_H
15
16#include "kernel/parameters.h"
17#include "kernel/symbol_set.h"
18
19namespace ultra
20{
21
25struct problem
26{
27 template<Symbol S, symbol_set::weight_t = symbol_set::default_weight,
28 class ...Args>
29 requires std::constructible_from<S, Args...>
30 std::add_pointer_t<S> insert(Args &&...);
31
32 template<std::derived_from<function> F,
33 symbol_set::weight_t W = symbol_set::default_weight,
34 std::convertible_to<symbol::category_t> C = symbol::category_t>
35 std::add_pointer_t<F> insert(symbol::category_t, std::initializer_list<C>);
36
37 template<std::derived_from<function> F,
38 symbol_set::weight_t W = symbol_set::default_weight,
39 std::convertible_to<symbol::category_t> C = symbol::category_t>
40 std::add_pointer_t<F> insert(std::initializer_list<C>);
41
42 [[nodiscard]] virtual bool is_valid() const;
43
44 parameters params {};
45 symbol_set sset {};
46};
47
56template<Symbol S, symbol_set::weight_t W, class ...Args>
57requires std::constructible_from<S, Args...>
58std::add_pointer_t<S> problem::insert(Args &&... args)
59{
60 return sset.insert<S, W>(std::forward<Args>(args)...);
61}
62
63template<std::derived_from<function> F, symbol_set::weight_t W,
64 std::convertible_to<symbol::category_t> C>
65std::add_pointer_t<F> problem::insert(symbol::category_t ret,
66 std::initializer_list<C> pt)
67{
68 return sset.insert<F, W>(ret, pt);
69}
70
71template<std::derived_from<function> F, symbol_set::weight_t W,
72 std::convertible_to<symbol::category_t> C>
73std::add_pointer_t<F> problem::insert(std::initializer_list<C> pt)
74{
75 return sset.insert<F, W>(pt);
76}
77
78} // namespace ultra
79
80#endif // include guard
Definition symbol_set.h:115
symbol * insert(std::unique_ptr< symbol >, weight_t=default_weight)
Definition symbol_set.cc:232
unsigned category_t
Definition symbol.h:55
Definition symbol.h:99
Definition parameters.h:26
Definition problem.h:26
virtual bool is_valid() const
Definition problem.cc:21