3#include <clingo/backend.hh>
4#include <clingo/base.hh>
5#include <clingo/config.hh>
6#include <clingo/core.hh>
7#include <clingo/ground.hh>
8#include <clingo/observe.hh>
9#include <clingo/profile.hh>
10#include <clingo/propagate.hh>
11#include <clingo/solve.hh>
12#include <clingo/stats.hh>
13#include <clingo/symbol.hh>
15#include <clingo/control.h>
59 using pointer = Detail::ArrowProxy<value_type>;
61 using iterator = Detail::RandomAccessIterator<ConstMap>;
73 return Detail::call<clingo_const_map_find>(map_, name.data(), name.size(),
nullptr);
84 return found ?
Symbol{sym,
true} :
throw std::out_of_range{
"key not found"};
95 return {{name.data, name.size},
Symbol{sym,
true}};
101 [[nodiscard]]
auto size() const ->
size_type {
return Detail::call<clingo_const_map_size>(map_); }
150 minimize = clingo_discard_type_e::minimize,
151 project = clingo_discard_type_e::project,
176 auto cstrs = Detail::transform(arguments, [](
auto const &x) {
return clingo_string_t{x.
data(), x.size()}; });
177 ctl_.reset(Detail::call<clingo_control_new>(
c_cast(lib), cstrs.data(), arguments.size()),
false);
186 explicit Control(clingo_control_t *rep,
bool acquire) : ctl_{rep, acquire} {}
192 [[nodiscard]]
friend auto c_cast(
Control const &ctl) -> clingo_control_t * {
return ctl.ctl_.get(); }
198 return static_cast<ControlMode>(Detail::call<clingo_control_mode>(ctl_.get()));
218 if (path && path->empty()) {
219 throw std::invalid_argument{
"path cannot be empty"};
221 auto path_view = path.value_or(std::string_view{});
235 auto cfiles = Detail::transform(files, [](
auto const &x) {
return clingo_string_t{x.
data(), x.size()}; });
265 auto [default_parts, c_parts] = c_parts_(
parts);
267 []([[maybe_unused]]
char const *name, [[maybe_unused]]
size_t name_size,
268 [[maybe_unused]]
size_t arguments_size, [[maybe_unused]]
void *data,
bool *result) ->
bool {
275 size_t name_size,
clingo_symbol_t const *arguments,
size_t arguments_size,
void *data,
279 auto syms = cb({name, name_size}, {
cpp_cast(arguments), arguments_size});
280 auto const *c_syms =
c_cast(syms.data());
281 return symbol_callback(c_syms, syms.size(), symbol_callback_data);
289 Detail::handle_error(
318 template <Detail::UserData<GroundEventHandler> Handler = std::
nullptr_t>
319 [[nodiscard]]
auto start_ground(std::optional<PartSpan>
parts = std::nullopt, Handler &&handler =
nullptr) const
321 auto [default_parts, c_parts] = c_parts_(
parts);
322 using UserData = Detail::UserDataTraits<Handler>;
323 auto user_data = UserData::create(std::forward<Handler>(handler));
325 if constexpr (UserData::has_data) {
326 if (UserData::has_value(user_data)) {
328 [](
char const *name,
size_t name_size,
size_t arguments_size,
void *data,
bool *result) ->
bool {
330 *result = UserData::cast(data)->callable(std::string_view{name, name_size}, arguments_size);
335 size_t name_size,
clingo_symbol_t const *arguments,
size_t arguments_size,
void *data,
339 auto syms = UserData::cast(data)->call(loc, {name, name_size},
340 {
cpp_cast(arguments), arguments_size});
341 auto const *c_syms =
c_cast(syms.data());
342 return symbol_callback(c_syms, syms.size(), symbol_callback_data);
347 UserData::cast(data)->finish(
static_cast<GroundResult>(result));
349 [](
void *data) { UserData::free(data); },
351 c_handler_ptr = &c_handler;
356 UserData::release(user_data), &handle));
361 template <Detail::UserData<GroundEventHandler> Handler = std::
nullptr_t>
362 [[nodiscard]]
auto start_ground(std::initializer_list<Part>
parts, Handler &&handler =
nullptr) const
370 [[nodiscard]]
auto base() const ->
Base {
return Base{Detail::call<clingo_control_base>(ctl_.get())}; }
376 auto const *
stats = Detail::call<clingo_control_stats>(ctl_.get());
377 auto key = Detail::call<clingo_stats_root>(
stats);
389 static auto internal(
size_t depth,
char const *key,
size_t key_size,
bool nested,
void *data) ->
bool {
391 auto *self =
static_cast<Builder *
>(data);
392 assert(depth <= self->stack.size());
393 self->stack.resize(depth);
395 if (self->stack.empty()) {
396 self->roots.emplace_back(std::move(node));
397 self->stack.emplace_back(&self->roots.back());
399 auto &children = std::get<ProfileNodeInternal>(*self->stack.back()).
children;
400 children.emplace_back(std::move(node));
401 self->stack.emplace_back(&children.back());
409 auto *self =
static_cast<Builder *
>(data);
410 assert(depth <= self->stack.size());
411 self->stack.resize(depth);
414 if (self->stack.empty()) {
415 self->roots.emplace_back(node);
417 std::get<ProfileNodeInternal>(*self->stack.back()).children.emplace_back(node);
423 std::vector<ProfileNode *> stack;
424 std::vector<ProfileNode> roots;
429 return std::move(builder.roots);
437 template <Detail::UserData<SolveEventHandler> Handler = std::
nullptr_t>
439 return solve_(std::forward<Handler>(handler), assumptions,
SolveFlags::empty).get();
443 template <Detail::UserData<SolveEventHandler> Handler = std::
nullptr_t>
444 [[nodiscard]]
auto solve(std::initializer_list<ProgramLiteral> assumptions, Handler &&handler =
nullptr) const
459 template <Detail::UserData<SolveEventHandler> Handler = std::
nullptr_t>
461 Handler &&handler =
nullptr)
const ->
SolveHandle {
462 return solve_(std::forward<Handler>(handler), assumptions, flags);
466 template <Detail::UserData<SolveEventHandler> Handler = std::
nullptr_t>
467 [[nodiscard]]
auto start_solve(std::initializer_list<ProgramLiteral> assumptions,
470 return solve_(std::forward<Handler>(handler),
ProgramLiteralSpan{assumptions}, flags);
497 [[nodiscard]]
auto buffer() const -> std::string_view {
498 auto [data, size] = Detail::call<clingo_control_buffer>(ctl_.get());
511 bool has_value =
false;
514 return Detail::transform(std::span{
parts, size}, [](
auto const &part) {
515 auto params = std::span{
cpp_cast(part.params), part.params_size};
516 return Part{{part.
name, part.name_size}, {params.begin(), params.end()}};
534 auto cparts = Detail::transform(*
parts, [](
auto const &part) {
548 auto *
config = Detail::call<clingo_control_config>(ctl_.get());
549 auto key = Detail::call<clingo_config_root>(
config);
557 return ConstMap{Detail::call<clingo_control_const_map>(ctl_.get())};
570 return ProgramBackend{Detail::call<clingo_control_backend>(ctl_.get())};
580 template <Detail::UserData<Propagator, false> P>
auto register_propagator(P &&propagator)
const ->
decltype(
auto) {
581 using UserData = Detail::UserDataTraits<P>;
582 auto user_data = UserData::create(std::forward<P>(propagator));
583 if (!UserData::has_value(user_data)) {
584 throw std::invalid_argument{
"propagator cannot be null"};
586 auto &res = *UserData::get(user_data);
588 static constexpr auto decide = []() {
589 if constexpr (std::is_base_of_v<Heuristic, typename UserData::ValueType>) {
593 *decision = UserData::cast(data)->decide(
Assignment{assignment}, fallback);
626 }
catch (std::exception
const &e) {
627 fprintf(stderr,
"panic: %s\n", e.what());
638 [](
void *data) { UserData::free(data); },
641 Detail::handle_error(
652 friend class Detail::intrusive_handle<
Control, clingo_control_t>;
658 template <Detail::UserData<SolveEventHandler> Handler = std::
nullptr_t>
661 using UserData = Detail::UserDataTraits<Handler>;
662 auto user_data = UserData::create(std::forward<Handler>(handler));
664 if constexpr (UserData::has_data) {
665 if (UserData::has_value(user_data)) {
669 auto *hnd = UserData::cast(data);
670 assert(hnd !=
nullptr);
671 auto mdl = Model{
model};
672 *goon = hnd->model(mdl);
677 [](int64_t
const *values,
size_t size,
void *data) ->
bool {
679 auto *hnd = UserData::cast(data);
680 assert(hnd !=
nullptr);
681 hnd->unsat({values, size});
687 auto *hnd = UserData::cast(data);
688 assert(hnd !=
nullptr);
689 uint64_t root = Detail::call<clingo_stats_root>(
stats);
690 uint64_t
step = Detail::call<clingo_stats_map_add_subkey>(
693 uint64_t
accu = Detail::call<clingo_stats_map_add_subkey>(
701 auto *hnd = UserData::cast(data);
702 assert(hnd !=
nullptr);
705 [](
void *data) { UserData::free(data); },
707 c_handler_ptr = &c_solve_event_handler;
713 assumptions.data(), assumptions.size(), c_handler_ptr,
714 UserData::release(user_data), &res));
715 return SolveHandle{res};
725 [[nodiscard]]
auto c_parts_(std::optional<PartSpan>
parts = std::nullopt)
const
726 -> std::pair<std::optional<PartVector>, std::vector<clingo_part_t>> {
727 auto res = std::pair<std::optional<PartVector>, std::vector<clingo_part_t>>{};
728 auto &[default_parts, c_parts] = res;
733 static auto default_part = Part{
"base", {}};
737 c_parts.reserve(
parts->size());
738 for (
auto const &part : *
parts) {
739 c_parts.emplace_back(part.name.data(), part.name.size(),
c_cast(part.params.data()), part.params.size());
744 Detail::intrusive_handle<Control, clingo_control_t> ctl_;
A program to add statements to.
Definition ast.hh:812
Represents a (partial) assignment of a particular solver.
Definition propagate.hh:140
A base that maps signatures to atom bases, and captures term and theory bases.
Definition base.hh:607
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:44
auto operator[](key_type name) const -> mapped_type
Get the value of for the given key.
Definition control.hh:80
std::ptrdiff_t difference_type
The difference type.
Definition control.hh:55
std::size_t size_type
The size type.
Definition control.hh:53
Detail::RandomAccessIterator< ConstMap > iterator
The iterator type.
Definition control.hh:61
value_type reference
The reference type.
Definition control.hh:57
auto contains(key_type name) const -> bool
Check if the map contains the given key.
Definition control.hh:72
std::string_view key_type
The key type.
Definition control.hh:47
auto at(size_t index) const -> value_type
Get the key value pair at the given index.
Definition control.hh:91
std::pair< key_type, mapped_type > value_type
The value type.
Definition control.hh:51
Detail::ArrowProxy< value_type > pointer
The pointer type.
Definition control.hh:59
auto begin() const -> iterator
Get an iterator to the beginning of the map.
Definition control.hh:106
ConstMap(clingo_const_map_t const *map)
Construct from the underlying C representation.
Definition control.hh:66
auto end() const -> iterator
Get an iterator to the end of the map.
Definition control.hh:111
auto size() const -> size_type
Get the size of the map.
Definition control.hh:101
The main control class for grounding and solving logic programs.
Definition control.hh:159
auto start_ground(std::optional< PartSpan > parts=std::nullopt, Handler &&handler=nullptr) const -> GroundHandle
Ground the logic program with the given parameters.
Definition control.hh:319
auto config() const -> Config
Get the configuration of the control object.
Definition control.hh:547
void discard(DiscardType type) const
Discard the statements of the given types.
Definition control.hh:487
void parts(std::optional< PartSpan > parts) const
Set the parts to ground.
Definition control.hh:532
void observe(Observer &obs, bool preprocess=true) const
Inspect the current ground program held by the control object.
Definition control.hh:564
auto base() const -> Base
Get the base of the program.
Definition control.hh:370
Control(Library const &lib, StringSpan arguments={})
Constructs a control object with the given library and arguments.
Definition control.hh:175
void ground(std::initializer_list< Part > parts, Context ctx=nullptr) const
Ground the control object with the given parts.
Definition control.hh:301
auto start_ground(std::initializer_list< Part > parts, Handler &&handler=nullptr) const -> GroundHandle
Ground the logic program with the given parameters.
Definition control.hh:362
auto stats() const -> StatsView
Get the statistics of the control object.
Definition control.hh:375
auto parts() const -> std::optional< PartVector >
Get the parts to ground.
Definition control.hh:508
auto const_map() const -> ConstMap
Get the constant map of the control object.
Definition control.hh:556
auto start_solve(std::initializer_list< ProgramLiteral > assumptions, SolveFlags flags=SolveFlags::yield, Handler &&handler=nullptr) const -> SolveHandle
Start solving the grounded program with the given assumptions and flags.
Definition control.hh:467
Control(clingo_control_t *rep, bool acquire)
Constructs a control object from an existing C representation.
Definition control.hh:186
void parts(PartList parts) const
Set the parts to ground.
Definition control.hh:525
auto start_solve(ProgramLiteralSpan assumptions={}, SolveFlags flags=SolveFlags::yield, Handler &&handler=nullptr) const -> SolveHandle
Start solving the grounded program with the given assumptions and flags.
Definition control.hh:460
void interrupt() const
Interrupt the current solve operation.
Definition control.hh:482
void parse_files(StringSpan files) const
Parse files with the given paths.
Definition control.hh:234
auto solve(std::initializer_list< ProgramLiteral > assumptions, Handler &&handler=nullptr) const -> SolveResult
Solve the grounded program with the given assumptions.
Definition control.hh:444
friend auto c_cast(Control const &ctl) -> clingo_control_t *
Cast to the C representation of the control object.
Definition control.hh:192
auto solve(ProgramLiteralSpan assumptions={}, Handler &&handler=nullptr) const -> SolveResult
Solve the grounded program with the given assumptions.
Definition control.hh:438
auto backend() const -> ProgramBackend
Get the backend of the control object.
Definition control.hh:569
auto buffer() const -> std::string_view
Get the text buffer of the control object.
Definition control.hh:497
void main() const
Run the default ground and solve flow.
Definition control.hh:477
Control(Library const &lib, StringList arguments)
Constructs a control object with the given library and arguments.
Definition control.hh:172
void parse_files(StringList files) const
Parse files with the given paths.
Definition control.hh:247
auto register_propagator(P &&propagator) const -> decltype(auto)
Register a propagator with the control object.
Definition control.hh:580
void join(AST::Program const &prg) const
Join the given non-ground program to the current control object.
Definition control.hh:649
void ground(std::optional< PartSpan > parts=std::nullopt, Context ctx=nullptr) const
Ground the logic program with the given parameters.
Definition control.hh:264
void write_aspif(std::optional< std::string_view > path, WriteAspifFlags flags=WriteAspifFlags::none) const
Write the current program to an ASPIF file.
Definition control.hh:217
auto mode() const -> ControlMode
Get the control mode.
Definition control.hh:197
std::function< SymbolVector(std::string_view, SymbolSpan)> Context
Callbock for injecting symbols into the grounding process.
Definition control.hh:166
auto profile() -> std::vector< ProfileNode >
Obtain the profiling data of the control object.
Definition control.hh:387
void parse_string(std::string_view program) const
Parse a logic program from a string.
Definition control.hh:252
Class to control a running ground call.
Definition ground.hh:83
The main library class for managing global information and logging.
Definition core.hh:564
Class representing a range in a file.
Definition core.hh:749
Observer interface to inspect the current ground program.
Definition observe.hh:15
Program backend to add atoms and statements.
Definition backend.hh:146
Class to control a user-defined propagator.
Definition propagate.hh:311
Object to initialize a user-defined propagator before each solving step.
Definition propagate.hh:434
Class to control a running search.
Definition solve.hh:329
Class to capture the result of solve calls.
Definition solve.hh:16
Class modeling an immutable view on a statistics entry.
Definition stats.hh:29
Class modeling a symbol in Clingo.
Definition symbol.hh:68
struct clingo_program clingo_program_t
Object to store.
Definition ast.h:504
unsigned clingo_discard_type_t
Corresponding type to clingo_discard_type_e.
Definition control.h:224
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:45
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 contestant at the given index.
struct clingo_const_map clingo_const_map_t
A map from constants to their values.
Definition control.h:48
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_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_VISIBILITY_DEFAULT bool clingo_control_ground(clingo_control_t *control, clingo_part_t const *parts, size_t size, clingo_ground_event_handler_t const *handler, void *data)
Ground the selected parts of the current (non-ground) logic program.
CLINGO_VISIBILITY_DEFAULT bool clingo_control_start_ground(clingo_control_t *control, clingo_part_t const *parts, size_t size, clingo_ground_event_handler_t const *handler, void *data, clingo_ground_handle_t **handle)
Start grounding a program asynchronously.
@ clingo_mode_ground
parse, rewrite, ground
Definition control.h:41
@ clingo_mode_parse
parse only
Definition control.h:39
@ clingo_mode_rewrite
parse and rewrite
Definition control.h:40
@ clingo_mode_solve
parse, rewrite, ground, and solve
Definition control.h:42
struct clingo_lib clingo_lib_t
A library object storing global information.
Definition core.h:171
struct clingo_location clingo_location_t
Represents a source code location marking its beginning and end.
Definition core.h:354
int32_t clingo_literal_t
Signed integer type used for aspif and solver literals.
Definition core.h:73
struct clingo_ground_handle clingo_ground_handle_t
Handle to an asynchronous ground call.
Definition ground.h:136
unsigned clingo_ground_result_t
Corresponding type to clingo_ground_result_e.
Definition ground.h:59
struct clingo_model clingo_model_t
Object representing a model.
Definition model.h:43
unsigned clingo_write_aspif_mode_t
Corresponding type to clingo_write_aspif_mode_e.
Definition observe.h:29
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:23
@ clingo_write_aspif_mode_symbols
Whether to write symbols in a structured format.
Definition observe.h:26
@ clingo_write_aspif_mode_preamble
Write preamble.
Definition observe.h:22
@ clingo_write_aspif_mode_preprocess
Whether to preprocess the program before writing.
Definition observe.h:25
@ clingo_write_aspif_mode_append
Append to an existing file (or create it).
Definition observe.h:24
CLINGO_VISIBILITY_DEFAULT bool clingo_control_profile(clingo_control_t const *control, clingo_profile_visitor_t const *visit, void *data)
Visit the profiling data of a control object.
int clingo_profile_type_t
Corresponding type to clingo_profile_type_e.
Definition profile.h:36
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_propagate_control clingo_propagate_control_t
This object can be used to add clauses and propagate literals while solving.
Definition propagate.h:242
struct clingo_assignment clingo_assignment_t
Represents a (partial) assignment of a particular solver.
Definition propagate.h:46
struct clingo_propagate_init clingo_propagate_init_t
Object to initialize a user-defined propagator before each solving step.
Definition propagate.h:255
struct clingo_solve_handle clingo_solve_handle_t
Search handle to a solve call.
Definition solve.h:112
unsigned clingo_solve_result_bitset_t
Corresponding type to clingo_solve_result_e.
Definition solve.h:61
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:71
@ clingo_solve_mode_yield
Yield models in calls to clingo_solve_handle_model.
Definition solve.h:67
@ clingo_solve_mode_async
Enable non-blocking search.
Definition solve.h:66
CLINGO_VISIBILITY_DEFAULT clingo_string_t const clingo_user_stats_accu
Well-known key name intended to be used for user-specific accu statistics.
CLINGO_VISIBILITY_DEFAULT clingo_string_t const clingo_user_stats_step
Well-known key name intended to be used for user-specific step statistics.
struct clingo_statistic clingo_stats_t
Handle for the solver stats.
Definition stats.h:59
@ clingo_stats_type_map
the entry is a map
Definition stats.h:53
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
SolveResult
The solve result.
Definition solver.hh:328
@ model
The model represents a stable model.
@ map
The configuration entry is a map of configurations.
SolveFlags
Enumeration of the flags for solving a logic program.
Definition control.hh:140
DiscardType
Enumeration of the types of statements that can be discarded.
Definition control.hh:149
WriteAspifFlags
Enumeration of the flags for writing ASPIF files.
Definition control.hh:128
ControlMode
Enumeration of the control modes.
Definition control.hh:120
@ 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:516
std::initializer_list< std::string_view const > StringList
A list of string views.
Definition core.hh:518
std::span< SolverLiteral const > SolverLiteralSpan
A span of solver literals.
Definition core.hh:494
std::span< ProgramLiteral const > ProgramLiteralSpan
A span of program literals.
Definition core.hh:487
@ init
Modify the initial VSIDS score of an atom.
@ release
No longer treat an atom as external.
std::vector< Part > PartVector
A vector of program parts.
Definition ground.hh:35
std::span< Part const > PartSpan
A span of program parts.
Definition ground.hh:31
GroundResult
Enumeration of the results of a grounding process.
Definition ground.hh:38
std::initializer_list< Part > PartList
An initializer list of program parts.
Definition ground.hh:33
ProfileType
Enumeration of the types of profiling data.
Definition profile.hh:18
@ accu
Indicate accumulated profiling data.
@ step
Indicate per step profiling data.
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 ground.hh:16
std::string name
The name of the part.
Definition ground.hh:26
Class to hold profiling data for an expression in a logic program.
Definition profile.hh:49
std::vector< ProfileNode > children
The children of the profile node.
Definition profile.hh:61
Class to hold profiling data for an expression in a logic program.
Definition profile.hh:24
The ground event handler interface.
Definition ground.h:62
Struct used to specify the program parts that have to be grounded.
Definition ground.h:44
char const * name
name of the program part
Definition ground.h:45
Per node performance statistics gathered while grounding a logic program.
Definition profile.h:39
uint64_t time_propagate
The time in nanoseconds spent propagating.
Definition profile.h:47
uint64_t time_instantiate
The time in nanoseconds spent instantiating.
Definition profile.h:45
uint64_t matches
The number of matches produced by the instantiator.
Definition profile.h:41
uint64_t instances
The number of instances produced by the instantiator.
Definition profile.h:43
Visitor for profiling data.
Definition profile.h:51
An instance of this struct has to be registered with a solver to implement a custom propagator.
Definition propagate.h:493
The solve event handler interface.
Definition solve.h:74
Struct to capture strings that are not null-terminated.
Definition core.h:86
size_t size
the length of the string
Definition core.h:88
char const * data
pointer to the beginning of the string
Definition core.h:87