001    package edu.rice.cs.cunit.record.syncPoints;
002    
003    import edu.rice.cs.cunit.record.syncPoints.object.ObjectEnterWaitSyncPoint;
004    import edu.rice.cs.cunit.record.syncPoints.object.ObjectLeaveWaitSyncPoint;
005    import edu.rice.cs.cunit.record.syncPoints.object.ObjectNotifyAllSyncPoint;
006    import edu.rice.cs.cunit.record.syncPoints.object.ObjectNotifySyncPoint;
007    import edu.rice.cs.cunit.record.syncPoints.sync.*;
008    import edu.rice.cs.cunit.record.syncPoints.thread.*;
009    import edu.rice.cs.cunit.instrumentors.DoNotInstrument;
010    
011    /**
012     * Interface for a synchronization point visitor.
013     *
014     * @author Mathias Ricken
015     */
016    @DoNotInstrument
017    public interface ISyncPointVisitor<R,P> {
018        /**
019         * Executed if the host is a ThreadStartSyncPoint.
020         * @param host ThreadStartSyncPoint
021         * @param param visitor-specific parameter
022         * @return visitor-specific return value
023         */
024        public R threadStartCase(ThreadStartSyncPoint.Translated host, P param);
025    
026        /**
027         * Executed if the host is a ThreadExitSyncPoint.
028         * @param host ThreadExitSyncPoint
029         * @param param visitor-specific parameter
030         * @return visitor-specific return value
031         */
032        public R threadExitCase(ThreadExitSyncPoint.Translated host, P param);
033    
034        /**
035         * Executed if the host is a ThreadDestroySyncPoint.
036         * @param host ThreadDestroySyncPoint
037         * @param param visitor-specific parameter
038         * @return visitor-specific return value
039         */
040        public R threadDestroyCase(ThreadDestroySyncPoint.Translated host, P param);
041    
042        /**
043         * Executed if the host is a ThreadInterruptSyncPoint.
044         * @param host ThreadInterruptSyncPoint
045         * @param param visitor-specific parameter
046         * @return visitor-specific return value
047         */
048        public R threadInterruptCase(ThreadInterruptSyncPoint.Translated host, P param);
049    
050        /**
051         * Executed if the host is a ThreadEnterJoinSyncPoint.
052         * @param host ThreadEnterJoinSyncPoint
053         * @param param visitor-specific parameter
054         * @return visitor-specific return value
055         */
056        public R threadJoinCase(ThreadEnterJoinSyncPoint.Translated host, P param);
057    
058        /**
059         * Executed if the host is a ThreadLeaveJoinSyncPoint.
060         * @param host ThreadLeaveJoinSyncPoint
061         * @param param visitor-specific parameter
062         * @return visitor-specific return value
063         */
064        public R threadJoinEndCase(ThreadLeaveJoinSyncPoint.Translated host, P param);
065    
066        /**
067         * Executed if the host is a ThreadResumeSyncPoint.
068         * @param host ThreadResumeSyncPoint
069         * @param param visitor-specific parameter
070         * @return visitor-specific return value
071         */
072        public R threadResumeCase(ThreadResumeSyncPoint.Translated host, P param);
073    
074        /**
075         * Executed if the host is a ThreadStopSyncPoint.
076         * @param host ThreadStopSyncPoint
077         * @param param visitor-specific parameter
078         * @return visitor-specific return value
079         */
080        public R threadStopCase(ThreadStopSyncPoint.Translated host, P param);
081    
082        /**
083         * Executed if the host is a ThreadSuspendSyncPoint.
084         * @param host ThreadSuspendSyncPoint
085         * @param param visitor-specific parameter
086         * @return visitor-specific return value
087         */
088        public R threadSuspendCase(ThreadSuspendSyncPoint.Translated host, P param);
089    
090        /**
091         * Executed if the host is a ThreadSetPrioritySyncPoint.
092         * @param host ThreadSetPrioritySyncPoint
093         * @param param visitor-specific parameter
094         * @return visitor-specific return value
095         */
096        public R threadSetPriorityCase(ThreadSetPrioritySyncPoint.Translated host, P param);
097    
098        /**
099         * Executed if the host is a ThreadEnterSleepSyncPoint.
100         * @param host ThreadEnterSleepSyncPoint
101         * @param param visitor-specific parameter
102         * @return visitor-specific return value
103         */
104        public R threadSleepCase(ThreadEnterSleepSyncPoint.Translated host, P param);
105    
106        /**
107         * Executed if the host is a ThreadLeaveSleepSyncPoint.
108         * @param host ThreadLeaveSleepSyncPoint
109         * @param param visitor-specific parameter
110         * @return visitor-specific return value
111         */
112        public R threadSleepEndCase(ThreadLeaveSleepSyncPoint.Translated host, P param);
113    
114        /**
115         * Executed if the host is a ThreadEnterYieldSyncPoint.
116         * @param host ThreadEnterYieldSyncPoint
117         * @param param visitor-specific parameter
118         * @return visitor-specific return value
119         */
120        public R threadYieldCase(ThreadEnterYieldSyncPoint.Translated host, P param);
121    
122        /**
123         * Executed if the host is a ThreadLeaveYieldSyncPoint.
124         * @param host ThreadLeaveYieldSyncPoint
125         * @param param visitor-specific parameter
126         * @return visitor-specific return value
127         */
128        public R threadYieldEndCase(ThreadLeaveYieldSyncPoint.Translated host, P param);
129    
130        /**
131         * Executed if the host is an ObjectNotifySyncPoint.
132         * @param host ObjectNotifySyncPoint
133         * @param param visitor-specific parameter
134         * @return visitor-specific return value
135         */
136        public R objectNotifyCase(ObjectNotifySyncPoint.Translated host, P param);
137    
138        /**
139         * Executed if the host is an ObjectNotifyAllSyncPoint.
140         * @param host ObjectNotifyAllSyncPoint
141         * @param param visitor-specific parameter
142         * @return visitor-specific return value
143         */
144        public R objectNotifyAllCase(ObjectNotifyAllSyncPoint.Translated host, P param);
145    
146        /**
147         * Executed if the host is an ObjectEnterWaitSyncPoint.
148         * @param host ObjectEnterWaitSyncPoint
149         * @param param visitor-specific parameter
150         * @return visitor-specific return value
151         */
152        public R objectWaitCase(ObjectEnterWaitSyncPoint.Translated host, P param);
153    
154        /**
155         * Executed if the host is an ObjectLeaveWaitSyncPoint.
156         * @param host ObjectLeaveWaitSyncPoint
157         * @param param visitor-specific parameter
158         * @return visitor-specific return value
159         */
160        public R objectWaitEndCase(ObjectLeaveWaitSyncPoint.Translated host, P param);
161    
162        /**
163         * Executed if the host is an SynchronizedTryEnterBlockSyncPoint.
164         * @param host SynchronizedTryEnterBlockSyncPoint
165         * @param param visitor-specific parameter
166         * @return visitor-specific return value
167         */
168        public R synchronizedBlockTryCase(SynchronizedTryEnterBlockSyncPoint.Translated host, P param);
169    
170        /**
171         * Executed if the host is an SynchronizedEnterBlockSyncPoint.
172         * @param host SynchronizedEnterBlockSyncPoint
173         * @param param visitor-specific parameter
174         * @return visitor-specific return value
175         */
176        public R synchronizedBlockBeginCase(SynchronizedEnterBlockSyncPoint.Translated host, P param);
177    
178        /**
179         * Executed if the host is an SynchronizedLeaveBlockSyncPoint.
180         * @param host SynchronizedLeaveBlockSyncPoint
181         * @param param visitor-specific parameter
182         * @return visitor-specific return value
183         */
184        public R synchronizedBlockEndCase(SynchronizedLeaveBlockSyncPoint.Translated host, P param);
185    }