3#include <clingo/backend.hh>
4#include <clingo/base.hh>
5#include <clingo/config.hh>
6#include <clingo/core.hh>
7#include <clingo/observe.hh>
8#include <clingo/propagate.hh>
9#include <clingo/solve.hh>
10#include <clingo/stats.hh>
11#include <clingo/symbol.hh>
13#include <clingo/control.h>
46 assert(!this->name.empty());
79 using pointer = Detail::ArrowProxy<value_type>;
81 using iterator = Detail::RandomAccessIterator<ConstMap>;
93 return Detail::call<clingo_const_map_find>(map_, name.data(), name.size(),
nullptr);
104 return found ?
Symbol{sym,
true} :
throw std::out_of_range{
"key not found"};
115 return {{name.data, name.size},
Symbol{sym,
true}};
170 minimize = clingo_discard_type_e::minimize,
171 project = clingo_discard_type_e::project,
197 ctl_.reset(Detail::call<clingo_control_new>(
c_cast(
lib),
cstrs.data(), arguments.size()),
false);
206 explicit Control(clingo_control_t *
rep,
bool acquire) : ctl_{
rep, acquire} {}
218 return static_cast<ControlMode>(Detail::call<clingo_control_mode>(ctl_.get()));
273 std::optional<PartVector> default_parts;
274 std::vector<clingo_part_t>
c_parts;
275 if (default_parts = !
parts ? this->
parts() : std::nullopt; default_parts) {
276 parts = default_parts;
280 for (
auto const &part : *
parts) {
281 c_parts.emplace_back(part.name.data(), part.name.size(),
c_cast(part.params.data()),
286 c_parts.emplace_back(
"base", 4,
nullptr, 0);
288 Detail::handle_error(
312 auto const *
stats = Detail::call<clingo_control_stats>(ctl_.get());
313 auto key = Detail::call<clingo_stats_root>(
stats);
366 auto [data, size] = Detail::call<clingo_control_buffer>(ctl_.get());
379 bool has_value =
false;
382 return Detail::transform(std::span{
parts, size}, [](
auto const &part) {
383 auto params = std::span{
cpp_cast(part.params), part.params_size};
384 return Part{{part.
name, part.name_size}, {params.begin(), params.end()}};
402 auto cparts = Detail::transform(*
parts, [](
auto const &part) {
416 auto *
config = Detail::call<clingo_control_config>(ctl_.get());
417 auto key = Detail::call<clingo_config_root>(
config);
425 return ConstMap{Detail::call<clingo_control_const_map>(ctl_.get())};
438 return ProgramBackend{Detail::call<clingo_control_backend>(ctl_.get())};
451 ctl_.get(), std::is_base_of_v<Heuristic, T> ? &Detail::c_heuristic : &Detail::c_propagator,
462 friend class Detail::intrusive_handle<
Control, clingo_control_t>;
487 return SolveHandle{
res};
490 Detail::intrusive_handle<Control, clingo_control_t> ctl_;
A program to add statements to.
Definition ast.hh:809
A base that maps signatures to atom bases, and captures term and theory bases.
Definition base.hh:608
Class modeling a mutable configuration entry.
Definition config.hh:138
Class to providing a view on the const directives in a logic program.
Definition control.hh:64
auto operator[](key_type name) const -> mapped_type
Get the value of for the given key.
Definition control.hh:100
std::ptrdiff_t difference_type
The difference type.
Definition control.hh:75
std::size_t size_type
The size type.
Definition control.hh:73
Detail::RandomAccessIterator< ConstMap > iterator
The iterator type.
Definition control.hh:81
value_type reference
The reference type.
Definition control.hh:77
auto contains(key_type name) const -> bool
Check if the map contains the given key.
Definition control.hh:92
std::string_view key_type
The key type.
Definition control.hh:67
auto at(size_t index) const -> value_type
Get the key value pair at the given index.
Definition control.hh:111
std::pair< key_type, mapped_type > value_type
The value type.
Definition control.hh:71
Detail::ArrowProxy< value_type > pointer
The pointer type.
Definition control.hh:79
auto begin() const -> iterator
Get an iterator to the beginning of the map.
Definition control.hh:126
ConstMap(clingo_const_map_t const *map)
Construct from the underlying C representation.
Definition control.hh:86
auto end() const -> iterator
Get an iterator to the end of the map.
Definition control.hh:131
auto size() const -> size_type
Get the size of the map.
Definition control.hh:121
Class modeling an immutable view on a statistics entry.
Definition stats.hh:29
The main control class for grounding and solving logic programs.
Definition control.hh:179
auto config() const -> Config
Get the configuration of the control object.
Definition control.hh:415
void discard(DiscardType type) const
Discard the statements of the given types.
Definition control.hh:355
void parts(std::optional< PartSpan > parts) const
Set the parts to ground.
Definition control.hh:400
void observe(Observer &obs, bool preprocess=true) const
Inspect the current ground program held by the control object.
Definition control.hh:432
auto base() const -> Base
Get the base of the program.
Definition control.hh:306
void write_aspif(std::string_view path, WriteAspifFlags flags=WriteAspifFlags::none) const
Write the current program to an ASPIF file.
Definition control.hh:229
Control(Library const &lib, StringSpan arguments={})
Constructs a control object with the given library and arguments.
Definition control.hh:195
auto stats() const -> ConstStats
Get the statistics of the control object.
Definition control.hh:311
void ground(std::initializer_list< Part > parts, Context ctx=nullptr) const
Ground the control object with the given parts.
Definition control.hh:299
auto parts() const -> std::optional< PartVector >
Get the parts to ground.
Definition control.hh:376
auto const_map() const -> ConstMap
Get the constant map of the control object.
Definition control.hh:424
auto solve(ProgramLiteralSpan const &assumptions={}, SolveFlags flags=SolveFlags::yield) const -> SolveHandle
Solve the grounded program with the given assumptions and flags.
Definition control.hh:336
auto register_propagator(std::unique_ptr< T > propagator) const -> T &
Register a propagator with the control object.
Definition control.hh:447
Control(clingo_control_t *rep, bool acquire)
Constructs a control object from an existing C representation.
Definition control.hh:206
void parts(PartList parts) const
Set the parts to ground.
Definition control.hh:393
void interrupt() const
Interrupt the current solve operation.
Definition control.hh:350
void parse_files(StringSpan files) const
Parse files with the given paths.
Definition control.hh:242
friend auto c_cast(Control const &ctl) -> clingo_control_t *
Cast to the C representation of the control object.
Definition control.hh:212
auto backend() const -> ProgramBackend
Get the backend of the control object.
Definition control.hh:437
auto buffer() const -> std::string_view
Get the text buffer of the control object.
Definition control.hh:365
void main() const
Run the default ground and solve flow.
Definition control.hh:345
Control(Library const &lib, StringList arguments)
Constructs a control object with the given library and arguments.
Definition control.hh:192
void parse_files(StringList files) const
Parse files with the given paths.
Definition control.hh:255
auto solve(SolveEventHandler &handler, ProgramLiteralSpan const &assumptions={}, SolveFlags flags=SolveFlags::empty) const -> SolveHandle
Solve the grounded program with the given assumptions and flags.
Definition control.hh:323
void join(AST::Program const &prg) const
Join the given non-ground program to the current control object.
Definition control.hh:459
void ground(std::optional< PartSpan > parts=std::nullopt, Context ctx=nullptr) const
Ground the control object with the given parts.
Definition control.hh:272
auto mode() const -> ControlMode
Get the control mode.
Definition control.hh:217
std::function< SymbolVector(std::string_view, SymbolSpan)> Context
Callbock for injecting symbols into the grounding process.
Definition control.hh:186
void parse_string(std::string_view program) const
Parse a logic program from a string.
Definition control.hh:260
The main library class for managing global information and logging.
Definition core.hh:471
Observer interface to inspect the current ground program.
Definition observe.hh:15
Program backend to add atoms and statements.
Definition backend.hh:132
Interface to handle events during solving.
Definition solve.hh:291
Class to control a running search.
Definition solve.hh:335
Class modeling a symbol in Clingo.
Definition symbol.hh:68
struct clingo_program clingo_program_t
Object to store.
Definition ast.h:499
unsigned clingo_discard_type_t
Corresponding type to clingo_discard_type_e.
Definition control.h:260
CLINGO_VISIBILITY_DEFAULT bool clingo_const_map_find(clingo_const_map_t const *map, char const *name, size_t name_size, clingo_symbol_t *symbol, bool *found)
Get the constant with the given name.
int clingo_mode_t
The corresponding type to clingo_mode_e.
Definition control.h:44
CLINGO_VISIBILITY_DEFAULT bool clingo_control_parse_string(clingo_control_t *control, char const *program, size_t size)
Extend the logic program with the given non-ground logic program in string form.
CLINGO_VISIBILITY_DEFAULT bool clingo_control_get_parts(clingo_control_t *control, clingo_part_t const **parts, size_t *size, bool *has_value)
Get the program parts to ground.
CLINGO_VISIBILITY_DEFAULT bool clingo_control_discard(clingo_control_t *control, clingo_discard_type_t type)
Discard the statements of the given types.
CLINGO_VISIBILITY_DEFAULT bool clingo_const_map_at(clingo_const_map_t const *map, size_t index, clingo_string_t *name, clingo_symbol_t *symbol)
Get the name and value of the contstant at the given index.
struct clingo_const_map clingo_const_map_t
A map from constantns to their values.
Definition control.h:111
CLINGO_VISIBILITY_DEFAULT void clingo_control_acquire(clingo_control_t *control)
Increment the reference count of the given control object.
CLINGO_VISIBILITY_DEFAULT bool clingo_control_parse_files(clingo_control_t *control, clingo_string_t const *files, size_t size)
Extend the logic program with a program in a file.
CLINGO_VISIBILITY_DEFAULT void clingo_control_interrupt(clingo_control_t *control)
Interrupt the running search.
CLINGO_VISIBILITY_DEFAULT bool clingo_control_ground(clingo_control_t *control, clingo_part_t const *parts, size_t size, clingo_ground_callback_t ground_callback, void *data)
Ground the selected parts of the current (non-ground) logic program.
CLINGO_VISIBILITY_DEFAULT bool clingo_control_main(clingo_control_t *control)
Execute the default ground and solve flow after parsing.
CLINGO_VISIBILITY_DEFAULT bool clingo_control_set_parts(clingo_control_t *control, clingo_part_t const *parts, size_t size, bool has_value)
Set the program parts to ground.
CLINGO_VISIBILITY_DEFAULT void clingo_control_release(clingo_control_t *control)
Decrement the reference count of the given control object and destroy if zero.
@ clingo_mode_ground
parse, rewrite, ground
Definition control.h:40
@ clingo_mode_parse
parse only
Definition control.h:38
@ clingo_mode_rewrite
parse and rewrite
Definition control.h:39
@ clingo_mode_solve
parse, rewrite, ground, and solve
Definition control.h:41
struct clingo_lib clingo_lib_t
A library object storing global information.
Definition core.h:176
struct clingo_location clingo_location_t
Represents a source code location marking its beginning and end.
Definition core.h:359
unsigned clingo_write_aspif_mode_t
Corresponding type to clingo_write_aspif_mode_e.
Definition observe.h:30
CLINGO_VISIBILITY_DEFAULT bool clingo_control_write_aspif(clingo_control_t *control, char const *path, size_t size, clingo_write_aspif_mode_t mode)
Write the current logic program in aspif format to a file.
@ clingo_write_aspif_mode_preamble_auto
Write preamble for newly created files.
Definition observe.h:24
@ clingo_write_aspif_mode_symbols
Whether to write symbols in a structured format.
Definition observe.h:27
@ clingo_write_aspif_mode_preamble
Write preamble.
Definition observe.h:23
@ clingo_write_aspif_mode_preprocess
Whether to preprocess the program before writing.
Definition observe.h:26
@ clingo_write_aspif_mode_append
Append to an existing file (or create it).
Definition observe.h:25
CLINGO_VISIBILITY_DEFAULT bool clingo_control_register_propagator(clingo_control_t *control, clingo_propagator_t const *propagator, void *data)
Register a custom propagator with the control object.
struct clingo_solve_handle clingo_solve_handle_t
Search handle to a solve call.
Definition solve.h:110
CLINGO_VISIBILITY_DEFAULT bool clingo_control_solve(clingo_control_t *control, clingo_solve_mode_bitset_t mode, clingo_literal_t const *assumptions, size_t assumptions_size, clingo_solve_event_handler_t const *handler, void *data, clingo_solve_handle_t **handle)
Solve the currently grounded logic program enumerating its models.
unsigned clingo_solve_mode_bitset_t
Corresponding type to clingo_solve_mode_e.
Definition solve.h:69
@ clingo_solve_mode_yield
Yield models in calls to clingo_solve_handle_model.
Definition solve.h:65
@ clingo_solve_mode_async
Enable non-blocking search.
Definition solve.h:64
bool(* clingo_symbol_callback_t)(clingo_symbol_t const *symbols, size_t symbols_size, void *data)
Callback function to inject symbols.
Definition symbol.h:60
uint64_t clingo_symbol_t
Type to represent a symbol.
Definition symbol.h:51
@ tuple
Theory tuples "(t1,...,tn)".
@ map
The configuration entry is a map of configurations.
SolveFlags
Enumeration of the flags for solving a logic program.
Definition control.hh:160
DiscardType
Enumeration of the types of statements that can be discarded.
Definition control.hh:169
WriteAspifFlags
Enumeration of the flags for writing ASPIF files.
Definition control.hh:148
std::vector< Part > PartVector
A vector of program parts.
Definition control.hh:59
ControlMode
Enumeration of the control modes.
Definition control.hh:140
std::span< Part const > PartSpan
A span of program parts.
Definition control.hh:55
std::initializer_list< Part > PartList
An initializer list of program parts.
Definition control.hh:57
@ async
Asynchronously solve in the background.
@ yield
Yield models as they are found.
@ empty
Standard event-based solving.
@ project
Discard project statements.
@ minimize
Discard minimize statements.
@ preamble_auto
Write preamble for newly created files.
@ preamble
Write preamble.
@ symbols
Whether to write symbols in a structured format.
@ append
Append to an existing file (or create it).
@ preprocess
Whether to preprocess the program before writing.
@ ground
Parse, rewrite, ground.
@ rewrite
Parse and rewrite.
@ solve
Parse, rewrite, ground, and solve.
std::span< std::string_view const > StringSpan
A span of string views.
Definition core.hh:423
std::initializer_list< std::string_view const > StringList
A list of string views.
Definition core.hh:425
std::span< ProgramLiteral const > ProgramLiteralSpan
A span of program literals.
Definition core.hh:394
@ release
No longer treat an atom as external.
@ none
The empty set of flags.
Definition propagate.hh:38
std::vector< Symbol > SymbolVector
A vector of symbols.
Definition symbol.hh:42
std::span< Symbol const > SymbolSpan
A span of symbols, which is a view on a contiguous sequence of symbols.
Definition symbol.hh:38
auto cpp_cast(clingo_symbol_t const *sym) -> Symbol const *
Cast a C symbol to its C++ representation.
Definition symbol.hh:52
#define CLINGO_ENABLE_BITSET_ENUM(E,...)
Opt-in macro for enabling bit operations for a given enum type.
Definition enum.hh:18
A program part to provide inputs to program directives.
Definition control.hh:40
std::string name
The name of the part.
Definition control.hh:50
SymbolVector params
The parameters of the part.
Definition control.hh:52
Part(std::string name, SymbolVector params={})
Constructs a program part with the given name and parameters.
Definition control.hh:45
Struct used to specify the program parts that have to be grounded.
Definition control.h:57
char const * name
name of the program part
Definition control.h:58
Struct to capture strings that are not null-terminated.
Definition core.h:91
char const * data
pointer to the beginning of the string
Definition core.h:92