Оптимизация поиска ENDMENU
This commit is contained in:
parent
d96956d1aa
commit
c42332f4a2
@ -35,13 +35,17 @@ public final class Parser {
|
||||
private int position;
|
||||
|
||||
private final Map<String, Integer> labels;
|
||||
/** Оптимизация, чтобы каждый раз не искать endmenu,
|
||||
* если их попросту нет в необработанном сценарии */
|
||||
private boolean hasEndMenu;
|
||||
|
||||
public Parser(List<Token> tokens) {
|
||||
this.tokens = tokens;
|
||||
tokensCount = tokens.size();
|
||||
position = 0;
|
||||
labels = new HashMap<String, Integer>();
|
||||
scanLabels();
|
||||
hasEndMenu = false;
|
||||
preScan();
|
||||
}
|
||||
|
||||
public List<Token> getTokens() {
|
||||
@ -308,6 +312,7 @@ public final class Parser {
|
||||
title = consume(TokenType.TEXT).getText();
|
||||
}
|
||||
|
||||
if (!hasEndMenu) return false;
|
||||
// Ищем элементы выбора
|
||||
final Menu menu = new Menu(title);
|
||||
int pos = 0;
|
||||
@ -348,10 +353,14 @@ public final class Parser {
|
||||
return false;
|
||||
}
|
||||
|
||||
private void scanLabels() {
|
||||
private void preScan() {
|
||||
// Сканируем все метки, для быстрого перехода командой jump.
|
||||
// А также определяем параметры для оптимизации.
|
||||
for (int i = 0; i < tokensCount - 2; i++) {
|
||||
if ( (tokens.get(i).getType() == TokenType.LABEL) &&
|
||||
final TokenType current = tokens.get(i).getType();
|
||||
if (current == TokenType.ENDMENU) {
|
||||
hasEndMenu = true;
|
||||
} else if ( (current == TokenType.LABEL) &&
|
||||
(tokens.get(i + 2).getType() == TokenType.COLON) ) {
|
||||
// label word :
|
||||
final Token token = tokens.get(i + 1);
|
||||
|
Loading…
Reference in New Issue
Block a user