Clingo
Loading...
Searching...
No Matches
body_literal.hh
1#pragma once
2
3#include <clingo/input/aggregate.hh>
4#include <clingo/input/literal.hh>
5#include <clingo/input/theory.hh>
6
7#include <utility>
8
9namespace CppClingo::Input {
10
13
15class BdLitSimple : public Expression<BdLitSimple> {
16 public:
18 static constexpr auto attributes() { return std::tuple{a_lit = &BdLitSimple::lit_}; }
19
21 BdLitSimple(Lit lit) : lit_{std::move(lit)} {}
23 [[nodiscard]] auto loc() const -> Location const & { return location(lit_); }
25 [[nodiscard]] auto lit() const -> Lit const & { return lit_; }
26
27 private:
28 Lit lit_;
29};
30
32class BdLitConjunction : public Expression<BdLitConjunction> {
33 public:
35 static constexpr auto attributes() { return std::tuple{a_lit = &BdLitConjunction::lit_}; }
36
38 BdLitConjunction(CondLit lit) : lit_{std::move(lit)} {}
40 [[nodiscard]] auto loc() const -> Location const & { return lit_.loc(); }
42 [[nodiscard]] auto lit() const -> CondLit const & { return lit_; }
43
44 private:
45 CondLit lit_;
46};
47
49class BdLitAggregateElement : public Expression<BdLitAggregateElement> {
50 public:
52 static constexpr auto attributes() {
53 return std::tuple{a_loc = &BdLitAggregateElement::loc_, a_tuple = &BdLitAggregateElement::tuple_,
54 a_cond = &BdLitAggregateElement::cond_};
55 }
56
59 : loc_{std::move(loc)}, tuple_{std::move(tuple)}, cond_{std::move(cond)} {}
61 [[nodiscard]] auto loc() const -> Location const & { return loc_; }
63 [[nodiscard]] auto tuple() const -> TermArray const & { return tuple_; }
65 [[nodiscard]] auto cond() const -> LitArray const & { return cond_; }
66
67 private:
68 Location loc_;
69 TermArray tuple_;
70 LitArray cond_;
71};
74
78class BdLitAggregate : public Expression<BdLitAggregate> {
79 public:
81 static constexpr auto attributes() {
82 return std::tuple{a_loc = &BdLitAggregate::loc_, a_sign = &BdLitAggregate::sign_,
83 a_lhs = &BdLitAggregate::lhs_, a_fun = &BdLitAggregate::fun_,
84 a_elems = &BdLitAggregate::elems_, a_rhs = &BdLitAggregate::rhs_};
85 }
86
90 : loc_{std::move(loc)}, sign_{sign}, fun_(fun), elems_(std::move(elems)), lhs_{std::move(lhs)},
91 rhs_{std::move(rhs)} {}
92
94 [[nodiscard]] auto loc() const -> Location const & { return loc_; }
96 [[nodiscard]] auto sign() const -> Sign { return sign_; }
98 [[nodiscard]] auto fun() const -> AggregateFunction { return fun_; }
100 [[nodiscard]] auto elems() const -> BdLitAggregateElementArray const & { return elems_; }
102 [[nodiscard]] auto lhs() const -> LGuard const & { return lhs_; }
104 [[nodiscard]] auto rhs() const -> RGuard const & { return rhs_; }
105
106 private:
107 Location loc_;
108 Sign sign_;
111 LGuard lhs_;
112 RGuard rhs_;
113};
114
116using BdLit = std::variant<BdLitSimple, BdLitConjunction, BdLitAggregate, BdLitSetAggregate, BdLitTheoryAtom>;
119
121
122} // namespace CppClingo::Input
A body aggregate element.
Definition body_literal.hh:49
auto loc() const -> Location const &
The location of the element.
Definition body_literal.hh:61
auto tuple() const -> TermArray const &
The tuple of the element.
Definition body_literal.hh:63
static constexpr auto attributes()
The record attributes.
Definition body_literal.hh:52
auto cond() const -> LitArray const &
The condition of the element.
Definition body_literal.hh:65
BdLitAggregateElement(Location loc, TermArray tuple, LitArray cond)
Construct a body aggregate element.
Definition body_literal.hh:58
A body aggregate.
Definition body_literal.hh:78
auto rhs() const -> RGuard const &
An optional right guard.
Definition body_literal.hh:104
auto lhs() const -> LGuard const &
An optional left guard.
Definition body_literal.hh:102
static constexpr auto attributes()
The record attributes.
Definition body_literal.hh:81
BdLitAggregate(Location loc, Sign sign, LGuard lhs, AggregateFunction fun, BdLitAggregateElementArray elems, RGuard rhs)
Construct a body aggregate.
Definition body_literal.hh:88
auto fun() const -> AggregateFunction
The aggregate function.
Definition body_literal.hh:98
auto sign() const -> Sign
The sign of the literal.
Definition body_literal.hh:96
auto elems() const -> BdLitAggregateElementArray const &
The vector of elements.
Definition body_literal.hh:100
auto loc() const -> Location const &
The location of the literal.
Definition body_literal.hh:94
A conditional literal in a rule body.
Definition body_literal.hh:32
BdLitConjunction(CondLit lit)
Construct a conjunction.
Definition body_literal.hh:38
auto lit() const -> CondLit const &
The conditional literal representing the elements of the conjunction.
Definition body_literal.hh:42
static constexpr auto attributes()
The record attributes.
Definition body_literal.hh:35
auto loc() const -> Location const &
Get the location of the literal.
Definition body_literal.hh:40
A single literal in a rule body.
Definition body_literal.hh:15
auto lit() const -> Lit const &
The literal.
Definition body_literal.hh:25
auto loc() const -> Location const &
The location of the literal.
Definition body_literal.hh:23
static constexpr auto attributes()
The record attributes.
Definition body_literal.hh:18
BdLitSimple(Lit lit)
Wrap a literal in a body literal.
Definition body_literal.hh:21
A conditional literal.
Definition literal.hh:135
auto loc() const -> Location const &
The location of the literal.
Definition literal.hh:146
A record that friend declares and defines comparison operators.
Definition attributes.hh:60
The Location of an expression in an input source.
Definition location.hh:44
auto location(T const &x) -> Location const &
Get the location of an expression.
Definition location.hh:123
Sign
Enumeration of signs (default negation).
Definition core.hh:16
AggregateFunction
Enumeration of aggregate functions.
Definition core.hh:87
std::optional< std::pair< Term, Relation > > LGuard
Definition aggregate.hh:14
std::optional< std::pair< Relation, Term > > RGuard
An optional right guard of an aggregate.
Definition aggregate.hh:16
std::variant< BdLitSimple, BdLitConjunction, BdLitAggregate, BdLitSetAggregate, BdLitTheoryAtom > BdLit
A body literal.
Definition body_literal.hh:116
constexpr auto a_sign
Definition attributes.hh:37
constexpr auto a_elems
Definition attributes.hh:23
constexpr auto a_cond
Definition attributes.hh:20
constexpr auto a_lhs
Definition attributes.hh:27
constexpr auto a_lit
Definition attributes.hh:28
constexpr auto a_rhs
Definition attributes.hh:36
constexpr auto a_tuple
Definition attributes.hh:42
constexpr auto a_loc
Definition attributes.hh:29
constexpr auto a_fun
Definition attributes.hh:25
std::variant< LitBool, LitComparison, LitSymbolic > Lit
Variant holding the different literal types.
Definition literal.hh:129