Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
1a724eb
use prototype implementation as a basis
FlorianPommerening Mar 3, 2025
513f233
too complex attempt to solve this with concepts
FlorianPommerening Apr 10, 2025
45177ca
use template specialization
FlorianPommerening Apr 10, 2025
7da6461
fix style
FlorianPommerening Apr 10, 2025
6d3a396
remove item type
FlorianPommerening Apr 10, 2025
b0392a3
change uncrustify config to accept the concept definition
FlorianPommerening Apr 12, 2025
b75d277
fix concept definition
FlorianPommerening Apr 12, 2025
d7975aa
'fix' style
FlorianPommerening Apr 12, 2025
b80dec2
turn iterator classes into true iterators
FlorianPommerening Apr 12, 2025
a6e2a89
C++-20 supports default implementations of == and !=.
FlorianPommerening Apr 12, 2025
53f0dab
use nested iterator in state iterator
FlorianPommerening Apr 12, 2025
6a39406
avoid stale reference
FlorianPommerening Apr 12, 2025
0fb546b
try reintroducing reference and pointer typedefs for MSVC.
FlorianPommerening Apr 14, 2025
56204ef
use windows 2025 instead of 2019
FlorianPommerening Apr 22, 2025
80f892c
turn proxy classes into ranges
FlorianPommerening Apr 25, 2025
ec33f38
code cleanup (remove implicitly defined special constructors, destruc…
FlorianPommerening Apr 25, 2025
4f9a44b
Make ProxyIterator opt-in
FlorianPommerening Jun 18, 2025
69406db
code review
FlorianPommerening Jul 15, 2025
04bd50c
changes after rebase
FlorianPommerening Jul 15, 2025
299ddd4
fix style
FlorianPommerening Jul 15, 2025
4c02518
switch back to legacy iterators
FlorianPommerening Jul 17, 2025
de5d199
move construction of FactPair back to taskproxy header
FlorianPommerening Jul 18, 2025
1a7b484
don't use default implementations of equality operators for proxy ite…
FlorianPommerening Feb 17, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .uncrustify.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ eat_blanks_after_open_brace=true
eat_blanks_before_close_brace=true
mod_pawn_semicolon=false
mod_full_paren_if_bool=false
mod_remove_extra_semicolon=true
mod_remove_extra_semicolon=false
mod_sort_import=false
mod_sort_using=false
mod_sort_include=false
Expand Down
2 changes: 1 addition & 1 deletion src/search/cartesian_abstractions/refinement_hierarchy.cc
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ NodeID RefinementHierarchy::get_node_id(const State &state) const {
NodeID id = 0;
while (nodes[id].is_split()) {
const Node &node = nodes[id];
id = node.get_child(state[node.get_var()].get_value());
id = node.get_child(state[node.get_var()]);
}
return id;
}
Expand Down
2 changes: 1 addition & 1 deletion src/search/cartesian_abstractions/subtask_generators.cc
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ static void remove_initial_state_facts(
const TaskProxy &task_proxy, Facts &facts) {
State initial_state = task_proxy.get_initial_state();
facts.erase(remove_if(facts.begin(), facts.end(), [&](FactPair fact) {
return initial_state[fact.var].get_value() == fact.value;
return initial_state[fact.var] == fact.value;
}), facts.end());
}

Expand Down
6 changes: 3 additions & 3 deletions src/search/heuristics/cea_heuristic.cc
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,7 @@ void ContextEnhancedAdditiveHeuristic::set_up_local_problem(
LocalProblemNode *start = &problem->nodes[start_value];
start->cost = 0;
for (size_t i = 0; i < problem->context_variables->size(); ++i)
start->context[i] = state[(*problem->context_variables)[i]].get_value();
start->context[i] = static_cast<short>(state[(*problem->context_variables)[i]]);

add_to_heap(start);
}
Expand Down Expand Up @@ -379,10 +379,10 @@ void ContextEnhancedAdditiveHeuristic::mark_helpful_transitions(
int precond_value = assignment.value;
int local_var = assignment.local_var;
int precond_var_no = context_vars[local_var];
if (state[precond_var_no].get_value() == precond_value)
if (state[precond_var_no] == precond_value)
continue;
LocalProblem *subproblem = get_local_problem(
precond_var_no, state[precond_var_no].get_value());
precond_var_no, state[precond_var_no]);
LocalProblemNode *subnode = &subproblem->nodes[precond_value];
mark_helpful_transitions(subproblem, subnode, state);
}
Expand Down
2 changes: 1 addition & 1 deletion src/search/heuristics/cg_cache.cc
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ int CGCache::get_index(int var, const State &state,
int index = from_val;
int multiplier = task_proxy.get_variables()[var].get_domain_size();
for (int dep_var : depends_on[var]) {
index += state[dep_var].get_value() * multiplier;
index += state[dep_var] * multiplier;
multiplier *= task_proxy.get_variables()[dep_var].get_domain_size();
}
if (to_val > from_val)
Expand Down
6 changes: 3 additions & 3 deletions src/search/heuristics/cg_heuristic.cc
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ int CGHeuristic::compute_heuristic(const State &ancestor_state) {
for (FactProxy goal : task_proxy.get_goals()) {
const VariableProxy var = goal.get_variable();
int var_no = var.get_id();
int from = state[var_no].get_value(), to = goal.get_value();
int from = state[var_no], to = goal.get_value();
DomainTransitionGraph *dtg = transition_graphs[var_no].get();
int cost_for_goal = get_transition_cost(state, dtg, from, to);
if (cost_for_goal == numeric_limits<int>::max()) {
Expand Down Expand Up @@ -114,7 +114,7 @@ int CGHeuristic::get_transition_cost(const State &state,
start->children_state.resize(dtg->local_to_global_child.size());
for (size_t i = 0; i < dtg->local_to_global_child.size(); ++i) {
start->children_state[i] =
state[dtg->local_to_global_child[i]].get_value();
state[dtg->local_to_global_child[i]];
}

// Initialize Heap for Dijkstra's algorithm.
Expand Down Expand Up @@ -226,7 +226,7 @@ int CGHeuristic::get_transition_cost(const State &state,
void CGHeuristic::mark_helpful_transitions(const State &state,
DomainTransitionGraph *dtg, int to) {
int var_no = dtg->var;
int from = state[var_no].get_value();
int from = state[var_no];
if (from == to)
return;

Expand Down
2 changes: 1 addition & 1 deletion src/search/landmarks/landmark.cc
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ using namespace std;
namespace landmarks {
bool Landmark::is_true_in_state(const State &state) const {
auto is_atom_true_in_state = [&](const FactPair &atom) {
return state[atom.var].get_value() == atom.value;
return state[atom.var] == atom.value;
};
if (type == DISJUNCTIVE) {
return ranges::any_of(atoms, is_atom_true_in_state);
Expand Down
8 changes: 4 additions & 4 deletions src/search/landmarks/landmark_factory_rpg_sasp.cc
Original file line number Diff line number Diff line change
Expand Up @@ -120,12 +120,12 @@ static void add_binary_variable_conditions(
effect_atom.get_variable().get_domain_size() == 2) {
for (const FactPair &atom : landmark.atoms) {
if (atom.var == var_id &&
initial_state[var_id].get_value() != atom.value) {
initial_state[var_id] != atom.value) {
assert(ranges::none_of(result,
[&](const FactPair &result_atom) {
return result_atom.var == var_id;
}));
result.insert(initial_state[var_id].get_pair());
result.insert(initial_state.get_fact(var_id).get_pair());
break;
}
}
Expand Down Expand Up @@ -530,7 +530,7 @@ void LandmarkFactoryRpgSasp::generate_disjunctive_precondition_landmarks(
they should not hold in the initial state. */
if (preconditions.size() < 5 && ranges::none_of(
preconditions, [&](const FactPair &atom) {
return initial_state[atom.var].get_value() == atom.value;
return initial_state[atom.var] == atom.value;
})) {
add_disjunctive_landmark_and_ordering(
preconditions, *node, OrderingType::GREEDY_NECESSARY);
Expand Down Expand Up @@ -654,7 +654,7 @@ void LandmarkFactoryRpgSasp::approximate_lookahead_orderings(

const FactPair landmark_atom = landmark.atoms[0];
const FactPair init_atom =
task_proxy.get_initial_state()[landmark_atom.var].get_pair();
task_proxy.get_initial_state().get_fact(landmark_atom.var).get_pair();
vector<int> critical_predecessors = get_critical_dtg_predecessors(
init_atom.value, landmark_atom.value,
reached[landmark_atom.var], dtg_successors[landmark_atom.var]);
Expand Down
2 changes: 1 addition & 1 deletion src/search/merge_and_shrink/fts_factory.cc
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ unique_ptr<Labels> FTSFactory::create_labels() {
void FTSFactory::build_state_data(VariableProxy var) {
int var_id = var.get_id();
TransitionSystemData &ts_data = transition_system_data_by_var[var_id];
ts_data.init_state = task_proxy.get_initial_state()[var_id].get_value();
ts_data.init_state = task_proxy.get_initial_state()[var_id];

int range = task_proxy.get_variables()[var_id].get_domain_size();
ts_data.num_states = range;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ void MergeAndShrinkRepresentationLeaf::apply_abstraction_to_lookup_table(
}

int MergeAndShrinkRepresentationLeaf::get_value(const State &state) const {
int value = state[var_id].get_value();
int value = state[var_id];
return lookup_table[value];
}

Expand Down
2 changes: 1 addition & 1 deletion src/search/operator_counting/state_equation_constraints.cc
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ bool StateEquationConstraints::update_constraints(const State &state,
double lower_bound = 0;
/* If we consider the current value of var, there must be an
additional consumer. */
if (state[var].get_value() == value) {
if (state[var] == value) {
--lower_bound;
}
/* If we consider the goal value of var, there must be an
Expand Down
2 changes: 1 addition & 1 deletion src/search/pdbs/cegar.cc
Original file line number Diff line number Diff line change
Expand Up @@ -387,7 +387,7 @@ bool CEGAR::get_flaws_for_pattern(
bool raise_goal_flaw = false;
for (const FactPair &goal : goals) {
int goal_var_id = goal.var;
if (final_state[goal_var_id].get_value() != goal.value &&
if (final_state[goal_var_id] != goal.value &&
!blacklisted_variables.count(goal_var_id)) {
flaws.emplace_back(collection_index, goal_var_id);
raise_goal_flaw = true;
Expand Down
2 changes: 1 addition & 1 deletion src/search/pruning/stubborn_sets.h
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ class StubbornSets : public PruningMethod {
inline FactPair find_unsatisfied_condition(
const std::vector<FactPair> &conditions, const State &state) {
for (const FactPair &condition : conditions) {
if (state[condition.var].get_value() != condition.value)
if (state[condition.var] != condition.value)
return condition;
}
return FactPair::no_fact;
Expand Down
6 changes: 3 additions & 3 deletions src/search/pruning/stubborn_sets_atom_centric.cc
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ FactPair StubbornSetsAtomCentric::select_fact(
choose it. Otherwise, choose the first unsatisfied fact.
*/
for (const FactPair &condition : facts) {
if (state[condition.var].get_value() != condition.value) {
if (state[condition.var] != condition.value) {
if (marked_producers[condition.var][condition.value]) {
fact = condition;
break;
Expand All @@ -150,7 +150,7 @@ FactPair StubbornSetsAtomCentric::select_fact(
} else if (atom_selection_strategy == AtomSelectionStrategy::STATIC_SMALL) {
int min_count = numeric_limits<int>::max();
for (const FactPair &condition : facts) {
if (state[condition.var].get_value() != condition.value) {
if (state[condition.var] != condition.value) {
int count = achievers[condition.var][condition.value].size();
if (count < min_count) {
fact = condition;
Expand All @@ -161,7 +161,7 @@ FactPair StubbornSetsAtomCentric::select_fact(
} else if (atom_selection_strategy == AtomSelectionStrategy::DYNAMIC_SMALL) {
int min_count = numeric_limits<int>::max();
for (const FactPair &condition : facts) {
if (state[condition.var].get_value() != condition.value) {
if (state[condition.var] != condition.value) {
const vector<int> &ops = achievers[condition.var][condition.value];
int count = count_if(
ops.begin(), ops.end(), [&](int op) {return !stubborn[op];});
Expand Down
6 changes: 3 additions & 3 deletions src/search/pruning/stubborn_sets_ec.cc
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ static inline bool is_v_applicable(int var,
const State &state,
vector<vector<int>> &preconditions) {
int precondition_on_var = preconditions[op_no][var];
return precondition_on_var == -1 || precondition_on_var == state[var].get_value();
return precondition_on_var == -1 || precondition_on_var == state[var];
}

static vector<StubbornDTG> build_dtgs(TaskProxy task_proxy) {
Expand Down Expand Up @@ -164,7 +164,7 @@ void StubbornSetsEC::compute_active_operators(const State &state) {

for (const FactPair &precondition : sorted_op_preconditions[op_no]) {
int var_id = precondition.var;
int current_value = state[var_id].get_value();
int current_value = state[var_id];
const vector<bool> &reachable_values =
reachability_map[var_id][current_value];
if (!reachable_values[precondition.value]) {
Expand Down Expand Up @@ -258,7 +258,7 @@ void StubbornSetsEC::get_disabled_vars(
void StubbornSetsEC::apply_s5(int op_no, const State &state) {
// Find a violated state variable and check if stubborn contains a writer for this variable.
for (const FactPair &pre : sorted_op_preconditions[op_no]) {
if (state[pre.var].get_value() != pre.value && written_vars[pre.var]) {
if (state[pre.var] != pre.value && written_vars[pre.var]) {
if (!nes_computed[pre.var][pre.value]) {
add_nes_for_fact(pre, state);
}
Expand Down
2 changes: 1 addition & 1 deletion src/search/state_registry.cc
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ const State &StateRegistry::get_initial_state() {

State initial_state = task_proxy.get_initial_state();
for (size_t i = 0; i < initial_state.size(); ++i) {
state_packer.set(buffer.get(), i, initial_state[i].get_value());
state_packer.set(buffer.get(), i, initial_state[i]);
}
state_data_pool.push_back(buffer.get());
StateID id = insert_id_or_pop_state();
Expand Down
Loading