Initial import
[jpf-core.git] / src / main / gov / nasa / jpf / vm / DelegatingScheduler.java
1 /*
2  * Copyright (C) 2014, United States Government, as represented by the
3  * Administrator of the National Aeronautics and Space Administration.
4  * All rights reserved.
5  *
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
9  * 
10  *        http://www.apache.org/licenses/LICENSE-2.0. 
11  *
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.
17  */
18
19 package gov.nasa.jpf.vm;
20
21 import gov.nasa.jpf.Config;
22
23 /**
24  * a generic scheduler with configured SyncPolicy and SharednesPolicy objects it delegates to
25  */
26 public class DelegatingScheduler implements Scheduler {
27   
28   protected SyncPolicy syncPolicy;
29   protected SharednessPolicy sharednessPolicy;
30   
31   
32   public DelegatingScheduler (Config config){
33     syncPolicy = config.getEssentialInstance("vm.scheduler.sync.class", SyncPolicy.class);
34     sharednessPolicy = config.getEssentialInstance("vm.scheduler.sharedness.class", SharednessPolicy.class);
35   }
36   
37   //--- Scheduler interface
38
39   @Override
40   public void initialize (VM vm, ApplicationContext appCtx) {
41     syncPolicy.initializeSyncPolicy(vm, appCtx);
42     sharednessPolicy.initializeSharednessPolicy(vm, appCtx);
43   }
44
45   
46   //--- SyncPolicy interface
47   
48   @Override
49   public void initializeSyncPolicy (VM vm, ApplicationContext appCtx) {
50     syncPolicy.initializeSyncPolicy(vm, appCtx);
51   }
52
53   @Override
54   public void initializeThreadSync (ThreadInfo tiCurrent, ThreadInfo tiNew) {
55     syncPolicy.initializeThreadSync(tiCurrent, tiNew);
56   }
57
58   @Override
59   public void setRootCG (){
60     syncPolicy.setRootCG();
61   }
62   
63   @Override
64   public boolean setsBlockedThreadCG (ThreadInfo ti, ElementInfo ei) {
65     return syncPolicy.setsBlockedThreadCG(ti, ei);
66   }
67
68   @Override
69   public boolean setsLockAcquisitionCG (ThreadInfo ti, ElementInfo ei) {
70     return syncPolicy.setsLockAcquisitionCG(ti, ei);
71   }
72
73   @Override
74   public boolean setsLockReleaseCG (ThreadInfo ti, ElementInfo ei, boolean didUnblock) {
75     return syncPolicy.setsLockReleaseCG(ti, ei, didUnblock);
76   }
77
78   @Override
79   public boolean setsTerminationCG (ThreadInfo ti) {
80     return syncPolicy.setsTerminationCG(ti);
81   }
82
83   @Override
84   public boolean setsWaitCG (ThreadInfo ti, long timeout) {
85     return syncPolicy.setsWaitCG(ti, timeout);
86   }
87
88   @Override
89   public boolean setsNotifyCG (ThreadInfo ti, boolean didNotify) {
90     return syncPolicy.setsNotifyCG(ti, didNotify);
91   }
92
93   @Override
94   public boolean setsNotifyAllCG (ThreadInfo ti, boolean didNotify) {
95     return syncPolicy.setsNotifyAllCG(ti, didNotify);
96   }
97
98   @Override
99   public boolean setsStartCG (ThreadInfo tiCurrent, ThreadInfo tiStarted) {
100     return syncPolicy.setsStartCG(tiCurrent, tiStarted);
101   }
102
103   @Override
104   public boolean setsYieldCG (ThreadInfo ti) {
105     return syncPolicy.setsYieldCG(ti);
106   }
107
108   @Override
109   public boolean setsPriorityCG (ThreadInfo ti) {
110     return syncPolicy.setsPriorityCG(ti);
111   }
112
113   
114   @Override
115   public boolean setsSleepCG (ThreadInfo ti, long millis, int nanos) {
116     return syncPolicy.setsSleepCG(ti, millis, nanos);
117   }
118
119   @Override
120   public boolean setsSuspendCG (ThreadInfo tiCurrent, ThreadInfo tiSuspended) {
121     return syncPolicy.setsSuspendCG(tiCurrent, tiSuspended);
122   }
123
124   @Override
125   public boolean setsResumeCG (ThreadInfo tiCurrent, ThreadInfo tiResumed) {
126     return syncPolicy.setsResumeCG(tiCurrent, tiResumed);
127   }
128
129   @Override
130   public boolean setsJoinCG (ThreadInfo tiCurrent, ThreadInfo tiJoin, long timeout) {
131     return syncPolicy.setsJoinCG(tiCurrent, tiJoin, timeout);
132   }
133
134   @Override
135   public boolean setsStopCG (ThreadInfo tiCurrent, ThreadInfo tiStopped) {
136     return syncPolicy.setsStopCG(tiCurrent, tiStopped);
137   }
138
139   @Override
140   public boolean setsInterruptCG (ThreadInfo tiCurrent, ThreadInfo tiInterrupted) {
141     return syncPolicy.setsInterruptCG(tiCurrent, tiInterrupted);
142   }
143
144   @Override
145   public boolean setsParkCG (ThreadInfo ti, boolean isAbsTime, long timeout) {
146     return syncPolicy.setsParkCG(ti, isAbsTime, timeout);
147   }
148
149   @Override
150   public boolean setsUnparkCG (ThreadInfo tiCurrent, ThreadInfo tiUnparked) {
151     return syncPolicy.setsUnparkCG(tiCurrent, tiUnparked);
152   }
153
154   @Override
155   public boolean setsBeginAtomicCG (ThreadInfo ti) {
156     return syncPolicy.setsBeginAtomicCG(ti);
157   }
158
159   @Override
160   public boolean setsEndAtomicCG (ThreadInfo ti) {
161     return syncPolicy.setsEndAtomicCG(ti);
162   }
163
164   @Override
165   public boolean setsRescheduleCG (ThreadInfo ti, String reason) {
166     return syncPolicy.setsRescheduleCG(ti, reason);
167   }
168
169   @Override
170   public boolean setsPostFinalizeCG (ThreadInfo tiFinalizer) {
171     return syncPolicy.setsPostFinalizeCG(tiFinalizer);
172   }
173
174   
175   //--- SharednessPolicy interface
176   
177   @Override
178   public void initializeSharednessPolicy (VM vm, ApplicationContext appCtx) {
179     sharednessPolicy.initializeSharednessPolicy( vm, appCtx);
180   }
181
182   @Override
183   public void initializeObjectSharedness (ThreadInfo allocThread, DynamicElementInfo ei) {
184     sharednessPolicy.initializeObjectSharedness(allocThread, ei);
185   }
186
187   @Override
188   public void initializeClassSharedness (ThreadInfo allocThread, StaticElementInfo ei) {
189     sharednessPolicy.initializeClassSharedness(allocThread, ei);
190   }
191
192   @Override
193   public boolean canHaveSharedObjectCG (ThreadInfo ti, Instruction insn, ElementInfo eiFieldOwner, FieldInfo fi) {
194     return sharednessPolicy.canHaveSharedObjectCG(ti, insn, eiFieldOwner, fi);
195   }
196
197   @Override
198   public ElementInfo updateObjectSharedness (ThreadInfo ti, ElementInfo ei, FieldInfo fi) {
199     return sharednessPolicy.updateObjectSharedness(ti, ei, fi);
200   }
201
202   @Override
203   public boolean setsSharedObjectCG (ThreadInfo ti, Instruction insn, ElementInfo eiFieldOwner, FieldInfo fi) {
204     return sharednessPolicy.setsSharedObjectCG(ti, insn, eiFieldOwner, fi);
205   }
206
207   @Override
208   public boolean canHaveSharedClassCG (ThreadInfo ti, Instruction insn, ElementInfo eiFieldOwner, FieldInfo fi) {
209     return sharednessPolicy.canHaveSharedClassCG(ti,insn,eiFieldOwner, fi);
210   }
211
212   @Override
213   public ElementInfo updateClassSharedness (ThreadInfo ti, ElementInfo ei, FieldInfo fi) {
214     return sharednessPolicy.updateClassSharedness(ti, ei, fi);
215   }
216
217   @Override
218   public boolean setsSharedClassCG (ThreadInfo ti, Instruction insn, ElementInfo eiFieldOwner, FieldInfo fi) {
219     return sharednessPolicy.setsSharedClassCG(ti, insn, eiFieldOwner, fi);
220   }
221
222   @Override
223   public boolean canHaveSharedArrayCG (ThreadInfo ti, Instruction insn, ElementInfo eiArray, int idx) {
224     return sharednessPolicy.canHaveSharedArrayCG(ti, insn, eiArray, idx);
225   }
226
227   @Override
228   public ElementInfo updateArraySharedness (ThreadInfo ti, ElementInfo eiArray, int idx) {
229     return sharednessPolicy.updateArraySharedness(ti,eiArray,idx);
230   }
231
232   @Override
233   public boolean setsSharedArrayCG (ThreadInfo ti, Instruction insn, ElementInfo eiArray, int idx) {
234     return sharednessPolicy.setsSharedArrayCG(ti, insn, eiArray, idx);
235   }
236
237   @Override
238   public boolean setsSharedObjectExposureCG (ThreadInfo ti, Instruction insn, ElementInfo eiFieldOwner, FieldInfo fi, ElementInfo eiExposed) {
239     return sharednessPolicy.setsSharedObjectExposureCG(ti,insn,eiFieldOwner,fi,eiExposed);
240   }
241
242   @Override
243   public boolean setsSharedClassExposureCG (ThreadInfo ti, Instruction insn, ElementInfo eiFieldOwner, FieldInfo fi, ElementInfo eiExposed) {
244     return sharednessPolicy.setsSharedClassExposureCG(ti, insn, eiFieldOwner, fi, eiExposed);
245   }
246
247   @Override
248   public void cleanupThreadTermination (ThreadInfo ti) {
249     sharednessPolicy.cleanupThreadTermination(ti);
250   }
251 }