KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > gov > nasa > jpf > search > PathSearch


1 //
2
// Copyright (C) 2005 United States Government as represented by the
3
// Administrator of the National Aeronautics and Space Administration
4
// (NASA). All Rights Reserved.
5
//
6
// This software is distributed under the NASA Open Source Agreement
7
// (NOSA), version 1.3. The NOSA has been approved by the Open Source
8
// Initiative. See the file NOSA-1.3-JPF at the top of the distribution
9
// directory tree for the complete NOSA document.
10
//
11
// THE SUBJECT SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY OF ANY
12
// KIND, EITHER EXPRESSED, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT
13
// LIMITED TO, ANY WARRANTY THAT THE SUBJECT SOFTWARE WILL CONFORM TO
14
// SPECIFICATIONS, ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR
15
// A PARTICULAR PURPOSE, OR FREEDOM FROM INFRINGEMENT, ANY WARRANTY THAT
16
// THE SUBJECT SOFTWARE WILL BE ERROR FREE, OR ANY WARRANTY THAT
17
// DOCUMENTATION, IF PROVIDED, WILL CONFORM TO THE SUBJECT SOFTWARE.
18
//
19
package gov.nasa.jpf.search;
20
21 import gov.nasa.jpf.Config;
22 import gov.nasa.jpf.VM;
23
24
25 /**
26  * PathSearch is not really a Search object, just a simple 'forward'
27  * driver for the VM that loops until there is no next instruction or
28  * a property doesn't hold
29  *
30  */

31 public class PathSearch extends AbstractSearch {
32     
33   public PathSearch (Config config, VM vm) {
34     super(config,vm);
35   }
36   
37   public boolean requestBacktrack () {
38     doBacktrack = true;
39
40     return true;
41   }
42
43   public void search () {
44     depth++;
45
46     if (hasPropertyTermination()) {
47       return;
48     }
49
50     notifySearchStarted();
51
52     while (true) {
53       while (doBacktrack) { // might be set by StateListeners
54

55         if (depth > 0) {
56           vm.backtrack();
57           depth--;
58
59           notifyStateBacktracked();
60         }
61
62         doBacktrack = false;
63       }
64
65       forward();
66       // isVisitedState is never true, because we don't really search, just replay
67
notifyStateAdvanced();
68
69       if (hasPropertyTermination()) {
70         break;
71       }
72
73       if (isEndState) {
74         break;
75       }
76
77       depth++;
78     }
79
80     notifySearchFinished();
81   }
82
83   public boolean supportsBacktrack () {
84     return true;
85   }
86 }
87
Popular Tags