Skip to content

Commit

Permalink
Merge branch 'main' into clang-tidy-checks
Browse files Browse the repository at this point in the history
  • Loading branch information
jendrikseipp committed Jan 9, 2024
2 parents 6ec76de + bd4deab commit 44d59eb
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 2 deletions.
7 changes: 7 additions & 0 deletions .github/workflows/style.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,13 @@ jobs:
pip3 install tox
sudo apt-get -y install clang-tidy-12
# TODO: Remove once issue with Ubuntu 22.04 and clang++-14 is resolved.
- name: Work around https://github.com/actions/runner-images/issues/8659
run: |
sudo rm -f /etc/apt/sources.list.d/ubuntu-toolchain-r-ubuntu-test-jammy.list
sudo apt-get update
sudo apt-get install -y --allow-downgrades libc6=2.35-* libc6-dev=2.35-* libstdc++6=12.3.0-* libgcc-s1=12.3.0-*
- name: Install uncrustify
run: |
# Set up uncrustify.
Expand Down
8 changes: 8 additions & 0 deletions .github/workflows/ubuntu.yml
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,14 @@ jobs:
run: |
sudo apt-get -y install ${{ matrix.version.cxx }}
# TODO: Remove once issue with Ubuntu 22.04 and clang++-14 is resolved.
- name: Work around https://github.com/actions/runner-images/issues/8659
if: matrix.version.cxx == 'clang++-14'
run: |
sudo rm -f /etc/apt/sources.list.d/ubuntu-toolchain-r-ubuntu-test-jammy.list
sudo apt-get update
sudo apt-get install -y --allow-downgrades libc6=2.35-* libc6-dev=2.35-* libstdc++6=12.3.0-* libgcc-s1=12.3.0-*
# Only install CPLEX if its URL/secret is set.
- name: Install CPLEX
if: ${{ env.CPLEX_URL != 0 }}
Expand Down
24 changes: 22 additions & 2 deletions src/search/state_registry.cc
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,12 @@ State StateRegistry::lookup_state(StateID id) const {
return task_proxy.create_state(*this, id, buffer);
}

State StateRegistry::lookup_state(
StateID id, vector<int> &&state_values) const {
const PackedStateBin *buffer = state_data_pool[id.value];
return task_proxy.create_state(*this, id, buffer, move(state_values));
}

const State &StateRegistry::get_initial_state() {
if (!cached_initial_state) {
int num_bins = get_bins_per_state();
Expand All @@ -64,6 +70,12 @@ const State &StateRegistry::get_initial_state() {
// operating on state buffers (PackedStateBin *).
State StateRegistry::get_successor_state(const State &predecessor, const OperatorProxy &op) {
assert(!op.is_axiom());
/*
TODO: ideally, we would not modify state_data_pool here and in
insert_id_or_pop_state, but only at one place, to avoid errors like
buffer becoming a dangling pointer. This used to be a bug before being
fixed in https://issues.fast-downward.org/issue1115.
*/
state_data_pool.push_back(predecessor.get_buffer());
PackedStateBin *buffer = state_data_pool[state_data_pool.size() - 1];
/* Experiments for issue348 showed that for tasks with axioms it's faster
Expand All @@ -81,17 +93,25 @@ State StateRegistry::get_successor_state(const State &predecessor, const Operato
for (size_t i = 0; i < new_values.size(); ++i) {
state_packer.set(buffer, i, new_values[i]);
}
/*
NOTE: insert_id_or_pop_state possibly invalidates buffer, hence
we use lookup_state to retrieve the state using the correct buffer.
*/
StateID id = insert_id_or_pop_state();
return task_proxy.create_state(*this, id, buffer, move(new_values));
return lookup_state(id, move(new_values));
} else {
for (EffectProxy effect : op.get_effects()) {
if (does_fire(effect, predecessor)) {
FactPair effect_pair = effect.get_fact().get_pair();
state_packer.set(buffer, effect_pair.var, effect_pair.value);
}
}
/*
NOTE: insert_id_or_pop_state possibly invalidates buffer, hence
we use lookup_state to retrieve the state using the correct buffer.
*/
StateID id = insert_id_or_pop_state();
return task_proxy.create_state(*this, id, buffer);
return lookup_state(id);
}
}

Expand Down
7 changes: 7 additions & 0 deletions src/search/state_registry.h
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,13 @@ class StateRegistry : public subscriber::SubscriberService<StateRegistry> {
*/
State lookup_state(StateID id) const;

/*
Like lookup_state above, but creates a state with unpacked data,
moved in via state_values. It is the caller's responsibility that
the unpacked data matches the state's data.
*/
State lookup_state(StateID id, std::vector<int> &&state_values) const;

/*
Returns a reference to the initial state and registers it if this was not
done before. The result is cached internally so subsequent calls are cheap.
Expand Down

0 comments on commit 44d59eb

Please sign in to comment.