3#include <clingo/input/attributes.hh>
5#include <clingo/core/location.hh>
6#include <clingo/core/symbol.hh>
8#include <clingo/util/hash.hh>
9#include <clingo/util/immutable_array.hh>
10#include <clingo/util/immutable_value.hh>
11#include <clingo/util/optional.hh>
12#include <clingo/util/ordered_set.hh>
17namespace CppClingo::Input {
38using Sig = std::tuple<String, size_t, bool>;
40using SharedSig = std::tuple<SharedString, size_t, bool>;
45using Term = std::variant<TermVariable, TermSymbol, TermTuple, TermFunction, TermAbs, TermUnary, TermBinary>;
54 static constexpr auto attributes() {
return std::tuple{
a_loc = &Projection::loc_}; }
59 [[nodiscard]]
auto loc() const ->
Location const & {
return loc_; }
66using Argument = std::variant<Projection, Term>;
102 : loc_{std::move(
loc)}, name_{
name}, anonymous_{is_anonymous} {}
105 [[nodiscard]]
auto loc() const ->
Location const & {
return loc_; }
107 [[nodiscard]]
auto name() const ->
String const & {
return *name_; }
109 [[nodiscard]]
auto anonymous() const ->
bool {
return anonymous_; }
129 [[nodiscard]]
auto loc() const ->
Location const & {
return loc_; }
131 [[nodiscard]]
auto value() const ->
Symbol const & {
return *value_; }
155 [[nodiscard]]
auto loc() const ->
Location const & {
return loc_; }
182 [[nodiscard]]
auto loc() const ->
Location const & {
return loc_; }
184 [[nodiscard]]
auto name() const ->
String const & {
return *name_; }
188 [[nodiscard]]
auto external() const ->
bool {
return external_; }
211 [[nodiscard]]
auto loc() const ->
Location const & {
return loc_; }
238 return std::tuple{
a_loc = &TermUnary::loc_,
a_op = &TermUnary::op_,
a_rhs = &TermUnary::rhs_};
245 [[nodiscard]]
auto loc() const ->
Location const & {
return loc_; }
249 [[nodiscard]]
auto rhs() const -> Util::immutable_value<
Term> const & {
return rhs_; }
278 return std::tuple{
a_loc = &TermBinary::loc_,
a_lhs = &TermBinary::lhs_,
a_op = &TermBinary::op_,
279 a_rhs = &TermBinary::rhs_};
287 [[nodiscard]]
auto loc() const ->
Location const & {
return loc_; }
289 [[nodiscard]]
auto lhs() const -> Util::immutable_value<
Term> const & {
return lhs_; }
291 [[nodiscard]]
auto rhs() const -> Util::immutable_value<
Term> const & {
return rhs_; }
313inline auto operator<=>(ArgumentTuple
const &a, ArgumentTuple
const &b) -> std::strong_ordering {
326inline auto operator<=>(TermTuple
const &a, TermTuple
const &b) -> std::strong_ordering {
333 : loc_{std::move(loc)}, name_(name), pool_{std::move(pool)}, external_{external} {
340inline auto operator<=>(TermFunction
const &a, TermFunction
const &b) -> std::strong_ordering {
353inline auto operator<=>(
TermAbs const &a,
TermAbs const &b) -> std::strong_ordering {
360 : loc_{std::move(loc)}, op_{op}, rhs_{std::move(rhs)} {
367inline auto operator<=>(TermUnary
const &a, TermUnary
const &b) -> std::strong_ordering {
375 : loc_{std::move(loc)}, lhs_{std::move(lhs)}, rhs_{std::move(rhs)}, op_{op} {
382inline auto operator<=>(TermBinary
const &a, TermBinary
const &b) -> std::strong_ordering {
The Location of an expression in an input source.
Definition location.hh:44
Class managing the lifetime of a String.
Definition symbol.hh:93
Class managing the lifetime of a Symbol.
Definition symbol.hh:306
Reference to a string stored in a symbol store.
Definition symbol.hh:18
Variant-like class to store symbols stored in a symbol store.
Definition symbol.hh:225
An immutable value imlementation.
Definition immutable_value.hh:19
auto location(T const &x) -> Location const &
Get the location of an expression.
Definition location.hh:123
Util::unordered_set< String > StringSet
A set of strings.
Definition symbol.hh:83
std::vector< String > StringVec
A vector of strings.
Definition symbol.hh:85
tsl::ordered_set< Key, Hash, KeyEqual, Allocator, ValueTypeContainer, IndexType > ordered_set
Alias for ordered sets.
Definition ordered_set.hh:15