1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
|
namespace antlr.debug
{
using System;
using ArrayList = System.Collections.ArrayList;
public class InputBufferEventSupport
{
public virtual ArrayList InputBufferListeners
{
get
{
return inputBufferListeners;
}
}
private object source;
private ArrayList inputBufferListeners;
private InputBufferEventArgs inputBufferEvent;
protected internal const int CONSUME = 0;
protected internal const int LA = 1;
protected internal const int MARK = 2;
protected internal const int REWIND = 3;
public InputBufferEventSupport(object source)
{
inputBufferEvent = new InputBufferEventArgs();
this.source = source;
}
public virtual void addInputBufferListener(InputBufferListener l)
{
if (inputBufferListeners == null)
inputBufferListeners = new ArrayList();
inputBufferListeners.Add(l);
}
public virtual void fireConsume(char c)
{
inputBufferEvent.setValues(InputBufferEventArgs.CONSUME, c, 0);
fireEvents(CONSUME, inputBufferListeners);
}
public virtual void fireEvent(int type, Listener l)
{
switch (type)
{
case CONSUME:
((InputBufferListener) l).inputBufferConsume(source, inputBufferEvent); break;
case LA:
((InputBufferListener) l).inputBufferLA(source, inputBufferEvent); break;
case MARK:
((InputBufferListener) l).inputBufferMark(source, inputBufferEvent); break;
case REWIND:
((InputBufferListener) l).inputBufferRewind(source, inputBufferEvent); break;
default:
throw new System.ArgumentException("bad type " + type + " for fireEvent()");
}
}
public virtual void fireEvents(int type, ArrayList listeners)
{
ArrayList targets = null;
Listener l = null;
lock(this)
{
if (listeners == null)
return ;
targets = (ArrayList) listeners.Clone();
}
if (targets != null)
for (int i = 0; i < targets.Count; i++)
{
l = (Listener) targets[i];
fireEvent(type, l);
}
}
public virtual void fireLA(char c, int la)
{
inputBufferEvent.setValues(InputBufferEventArgs.LA, c, la);
fireEvents(LA, inputBufferListeners);
}
public virtual void fireMark(int pos)
{
inputBufferEvent.setValues(InputBufferEventArgs.MARK, ' ', pos);
fireEvents(MARK, inputBufferListeners);
}
public virtual void fireRewind(int pos)
{
inputBufferEvent.setValues(InputBufferEventArgs.REWIND, ' ', pos);
fireEvents(REWIND, inputBufferListeners);
}
protected internal virtual void refresh(ArrayList listeners)
{
ArrayList v;
lock(listeners)
{
v = (ArrayList) listeners.Clone();
}
if (v != null)
for (int i = 0; i < v.Count; i++)
((Listener) v[i]).refresh();
}
public virtual void refreshListeners()
{
refresh(inputBufferListeners);
}
public virtual void removeInputBufferListener(InputBufferListener l)
{
if (inputBufferListeners != null)
{
ArrayList temp_arraylist;
object temp_object;
temp_arraylist = inputBufferListeners;
temp_object = l;
temp_arraylist.Contains(temp_object);
temp_arraylist.Remove(temp_object);
}
}
}
}
|