// Decompiled by: Fernflower v0.6 // Date: 16.01.2011 23:15:59 // Copyright: 2008-2009, Stiver // Home page: http://www.reversed-java.com package org.antlr.runtime; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import org.antlr.runtime.BitSet; import org.antlr.runtime.Token; import org.antlr.runtime.TokenSource; import org.antlr.runtime.TokenStream; public class CommonTokenStream implements TokenStream { protected TokenSource tokenSource; protected List tokens; protected Map channelOverrideMap; protected Set discardSet; protected int channel; protected boolean discardOffChannelTokens; protected int lastMarker; protected int p; public CommonTokenStream() { this.channel = 0; this.discardOffChannelTokens = false; this.p = -1; this.tokens = new ArrayList(500); } public CommonTokenStream(TokenSource var1) { this(); this.tokenSource = var1; } public CommonTokenStream(TokenSource var1, int var2) { this(var1); this.channel = var2; } public void setTokenSource(TokenSource var1) { this.tokenSource = var1; this.tokens.clear(); this.p = -1; this.channel = 0; } protected void fillBuffer() { int var1 = 0; for(Token var2 = this.tokenSource.nextToken(); var2 != null && var2.getType() != -1; var2 = this.tokenSource.nextToken()) { boolean var3 = false; if(this.channelOverrideMap != null) { Integer var4 = (Integer)this.channelOverrideMap.get(new Integer(var2.getType())); if(var4 != null) { var2.setChannel(var4.intValue()); } } if(this.discardSet != null && this.discardSet.contains(new Integer(var2.getType()))) { var3 = true; } else if(this.discardOffChannelTokens && var2.getChannel() != this.channel) { var3 = true; } if(!var3) { var2.setTokenIndex(var1); this.tokens.add(var2); ++var1; } } this.p = 0; this.p = this.skipOffTokenChannels(this.p); } public void consume() { if(this.p < this.tokens.size()) { ++this.p; this.p = this.skipOffTokenChannels(this.p); } } protected int skipOffTokenChannels(int var1) { for(int var2 = this.tokens.size(); var1 < var2 && ((Token)this.tokens.get(var1)).getChannel() != this.channel; ++var1) { ; } return var1; } protected int skipOffTokenChannelsReverse(int var1) { while(var1 >= 0 && ((Token)this.tokens.get(var1)).getChannel() != this.channel) { --var1; } return var1; } public void setTokenTypeChannel(int var1, int var2) { if(this.channelOverrideMap == null) { this.channelOverrideMap = new HashMap(); } this.channelOverrideMap.put(new Integer(var1), new Integer(var2)); } public void discardTokenType(int var1) { if(this.discardSet == null) { this.discardSet = new HashSet(); } this.discardSet.add(new Integer(var1)); } public void discardOffChannelTokens(boolean var1) { this.discardOffChannelTokens = var1; } public List getTokens() { if(this.p == -1) { this.fillBuffer(); } return this.tokens; } public List getTokens(int var1, int var2) { return this.getTokens(var1, var2, (BitSet)null); } public List getTokens(int var1, int var2, BitSet var3) { if(this.p == -1) { this.fillBuffer(); } if(var2 >= this.tokens.size()) { var2 = this.tokens.size() - 1; } if(var1 < 0) { var1 = 0; } if(var1 > var2) { return null; } else { ArrayList var4 = new ArrayList(); for(int var5 = var1; var5 <= var2; ++var5) { Token var6 = (Token)this.tokens.get(var5); if(var3 == null || var3.member(var6.getType())) { var4.add(var6); } } if(var4.size() == 0) { var4 = null; } return var4; } } public List getTokens(int var1, int var2, List var3) { return this.getTokens(var1, var2, new BitSet(var3)); } public List getTokens(int var1, int var2, int var3) { return this.getTokens(var1, var2, BitSet.of(var3)); } public Token LT(int var1) { if(this.p == -1) { this.fillBuffer(); } if(var1 == 0) { return null; } else if(var1 < 0) { return this.LB(-var1); } else if(this.p + var1 - 1 >= this.tokens.size()) { return Token.EOF_TOKEN; } else { int var2 = this.p; for(int var3 = 1; var3 < var1; ++var3) { var2 = this.skipOffTokenChannels(var2 + 1); } return var2 >= this.tokens.size()?Token.EOF_TOKEN:(Token)this.tokens.get(var2); } } protected Token LB(int var1) { if(this.p == -1) { this.fillBuffer(); } if(var1 == 0) { return null; } else if(this.p - var1 < 0) { return null; } else { int var2 = this.p; for(int var3 = 1; var3 <= var1; ++var3) { var2 = this.skipOffTokenChannelsReverse(var2 - 1); } return var2 < 0?null:(Token)this.tokens.get(var2); } } public Token get(int var1) { return (Token)this.tokens.get(var1); } public int LA(int var1) { return this.LT(var1).getType(); } public int mark() { if(this.p == -1) { this.fillBuffer(); } this.lastMarker = this.index(); return this.lastMarker; } public void release(int var1) { } public int size() { return this.tokens.size(); } public int index() { return this.p; } public void rewind(int var1) { this.seek(var1); } public void rewind() { this.seek(this.lastMarker); } public void reset() { this.p = 0; this.lastMarker = 0; } public void seek(int var1) { this.p = var1; } public TokenSource getTokenSource() { return this.tokenSource; } public String getSourceName() { return this.getTokenSource().getSourceName(); } public String toString() { if(this.p == -1) { this.fillBuffer(); } return this.toString(0, this.tokens.size() - 1); } public String toString(int var1, int var2) { if(var1 >= 0 && var2 >= 0) { if(this.p == -1) { this.fillBuffer(); } if(var2 >= this.tokens.size()) { var2 = this.tokens.size() - 1; } StringBuffer var3 = new StringBuffer(); for(int var4 = var1; var4 <= var2; ++var4) { Token var5 = (Token)this.tokens.get(var4); var3.append(var5.getText()); } return var3.toString(); } else { return null; } } public String toString(Token var1, Token var2) { return var1 != null && var2 != null?this.toString(var1.getTokenIndex(), var2.getTokenIndex()):null; } }