InputBufferEventSupport.java
上传用户:afrynkmhm
上传日期:2007-01-06
资源大小:1262k
文件大小:3k
源码类别:
编译器/解释器
开发平台:
Others
- package antlr.debug;
- import java.util.Vector;
- import antlr.collections.impl.BitSet;
- import antlr.RecognitionException;
- public class InputBufferEventSupport {
- private Object source;
- private Vector inputBufferListeners;
- private InputBufferEvent inputBufferEvent;
- protected static final int CONSUME=0;
- protected static final int LA=1;
- protected static final int MARK=2;
- protected static final int REWIND=3;
- public InputBufferEventSupport(Object source) {
- inputBufferEvent = new InputBufferEvent(source);
- this.source = source;
- }
- public void addInputBufferListener(InputBufferListener l) {
- if (inputBufferListeners == null) inputBufferListeners = new Vector();
- inputBufferListeners.addElement(l);
- }
- public void fireConsume(char c) {
- inputBufferEvent.setValues(InputBufferEvent.CONSUME, c, 0);
- fireEvents(CONSUME, inputBufferListeners);
- }
- public void fireEvent(int type, ListenerBase l) {
- switch(type) {
- case CONSUME: ((InputBufferListener)l).inputBufferConsume(inputBufferEvent); break;
- case LA: ((InputBufferListener)l).inputBufferLA(inputBufferEvent); break;
- case MARK: ((InputBufferListener)l).inputBufferMark(inputBufferEvent); break;
- case REWIND: ((InputBufferListener)l).inputBufferRewind(inputBufferEvent); break;
- default:
- throw new IllegalArgumentException("bad type "+type+" for fireEvent()");
- }
- }
- public void fireEvents(int type, Vector listeners) {
- Vector targets=null;
- ListenerBase l=null;
- synchronized (this) {
- if (listeners == null) return;
- targets = (Vector)listeners.clone();
- }
- if (targets != null)
- for (int i = 0; i < targets.size(); i++) {
- l = (ListenerBase)targets.elementAt(i);
- fireEvent(type, l);
- }
- }
- public void fireLA(char c, int la) {
- inputBufferEvent.setValues(InputBufferEvent.LA, c, la);
- fireEvents(LA, inputBufferListeners);
- }
- public void fireMark(int pos) {
- inputBufferEvent.setValues(InputBufferEvent.MARK, ' ', pos);
- fireEvents(MARK, inputBufferListeners);
- }
- public void fireRewind(int pos) {
- inputBufferEvent.setValues(InputBufferEvent.REWIND, ' ', pos);
- fireEvents(REWIND, inputBufferListeners);
- }
- public Vector getInputBufferListeners() {
- return inputBufferListeners;
- }
- protected void refresh(Vector listeners) {
- Vector v;
- synchronized (listeners) {
- v = (Vector)listeners.clone();
- }
- if (v != null)
- for (int i = 0; i < v.size(); i++)
- ((ListenerBase)v.elementAt(i)).refresh();
- }
- public void refreshListeners() {
- refresh(inputBufferListeners);
- }
- public void removeInputBufferListener(InputBufferListener l) {
- if (inputBufferListeners != null)
- inputBufferListeners.removeElement(l);
- }
- }