Clingo
Loading...
Searching...
No Matches
CppClingo::Ground::AtomBdAggr Class Reference

Extensible ground representation of body aggregates. More...

#include <body_aggregate.hh>

Public Types

using Bound = std::variant< std::pair< Number, Number >, std::pair< Symbol, Symbol > >
 The lower and upper bound for the value an aggregate can take.
 

Public Member Functions

 AtomBdAggr (AggregateFunction fun)
 Initialize for the given aggregate function.
 
void accumulate (AggregateFunction fun, SymbolSpan tup, bool fact)
 Accumulate a tuple.
 
auto propagate (GuardVec const &guards, Symbol const *vals) -> std::pair< bool, bool >
 Check if the aggregate matches the guards (first) and is a fact (second).
 
auto derived_idx () const -> size_t
 Get the index of the aggregate.
 
void derived_idx (size_t idx)
 Set the derived index of the aggregate.
 
auto state () const -> AtomBdAggrState
 Get the derived state of the aggregate atom.
 
void state (AtomBdAggrState state)
 Set the derived state of the aggregate atom.
 
auto enqueue () -> bool
 Enqueue the atom for propagation.
 
void dequeue ()
 Dequeue the atom after propagation.
 
void add_elem (size_t idx)
 Add a new element.
 
auto elems () const -> std::span< size_t const >
 Get the aggregate elements.
 
auto todo () -> std::span< size_t const >
 Get the aggregate elements to propagate.
 
auto uid () const -> std::optional< size_t >
 Get the unique id of the aggregate.
 
void uid (size_t uid)
 Set the unique id of the aggregate.
 

Detailed Description

Extensible ground representation of body aggregates.

Member Typedef Documentation

◆ Bound

using CppClingo::Ground::AtomBdAggr::Bound = std::variant<std::pair<Number, Number>, std::pair<Symbol, Symbol> >

The lower and upper bound for the value an aggregate can take.

Aggregates operating on numbers do not use symbols to avoid storing unnecessary intermediate symbols.

Member Function Documentation

◆ dequeue()

void CppClingo::Ground::AtomBdAggr::dequeue ( )

Dequeue the atom after propagation.

Also marks elements as propagated.

◆ derived_idx() [1/2]

auto CppClingo::Ground::AtomBdAggr::derived_idx ( ) const -> size_t

Get the index of the aggregate.

It must be derived first.

◆ derived_idx() [2/2]

void CppClingo::Ground::AtomBdAggr::derived_idx ( size_t  idx)

Set the derived index of the aggregate.

It must be derived first.

◆ propagate()

auto CppClingo::Ground::AtomBdAggr::propagate ( GuardVec const &  guards,
Symbol const *  vals 
) -> std::pair< bool, bool >

Check if the aggregate matches the guards (first) and is a fact (second).

Only the relation of the given non-ground guards is accessed; the values for the terms are stored in the aggregate atom.

◆ state()

void CppClingo::Ground::AtomBdAggr::state ( AtomBdAggrState  state)

Set the derived state of the aggregate atom.

It must only be derived once.


The documentation for this class was generated from the following file: