2 * Copyright (C) 2014, United States Government, as represented by the
3 * Administrator of the National Aeronautics and Space Administration.
6 * The Java Pathfinder core (jpf-core) platform is licensed under the
7 * Apache License, Version 2.0 (the "License"); you may not use this file except
8 * in compliance with the License. You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0.
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
18 package gov.nasa.jpf.util;
20 import gov.nasa.jpf.ListenerAdapter;
21 import gov.nasa.jpf.search.Search;
22 import gov.nasa.jpf.vm.ChoiceGenerator;
23 import gov.nasa.jpf.vm.SystemState;
26 * generic listener that keeps track of state extensions, using
27 * state ids as index values into a dynamic array of T objects
29 * the purpose of this utility class is to make state extensions
30 * backtrackable, so that clients don't have to care about this
32 public class StateExtensionListener <T> extends ListenerAdapter {
33 StateExtensionClient<T> client;
34 DynamicObjectArray<T> states;
36 public StateExtensionListener (StateExtensionClient<T> cli) {
38 states = new DynamicObjectArray<T>();
41 T se = client.getStateExtension();
46 public void stateAdvanced (Search search) {
47 int idx = search.getStateId()+1;
49 T se = client.getStateExtension();
54 public void stateBacktracked (Search search) {
55 int idx = search.getStateId()+1;
57 T se = states.get(idx);
62 public void stateRestored (Search search) {
63 int idx = search.getStateId()+1;
65 T se = states.get(idx);
68 SystemState ss = search.getVM().getSystemState();
69 ChoiceGenerator<?> cgNext = ss.getNextChoiceGenerator();