package org.nutz.dao.impl.sql;
import java.util.ArrayList;
import java.util.List;
import org.nutz.lang.Strings;
import org.nutz.lang.util.LinkedIntArray;
/**
* It will record the date like
*
* <pre>
* chain: [str1][...][str2][...][...][str3]
* indexes [1,3,4] // 0 base indexes
* </pre>
*/
class WorkingStack {
WorkingStack() {
sb = new StringBuilder();
chain = new ArrayList<String>();
indexes = new LinkedIntArray(20);
}
private String first;
private StringBuilder sb;
private List<String> chain;
private LinkedIntArray indexes;
void push(char c) {
sb.append(c);
}
void finish() {
if (sb.length() > 0)
chain.add(sb.toString());
if (chain.size() > 0) {
first = chain.get(0);
char[] cs = Strings.trim(first).toCharArray();
int i = 0;
for (; i < cs.length; i++) {
char c = cs[i];
if (c > 0 && c <= 32)
break;
}
first = String.valueOf(cs, 0, i).toUpperCase();
}
}
int markToken() {
// int re = indexes.size();
if (sb.length() > 0) {
chain.add(sb.toString());
sb = new StringBuilder();
}
indexes.push(chain.size());
chain.add("");
return chain.size() - 1;
}
String[] cloneChain() {
return chain.toArray(new String[chain.size()]);
}
int size() {
return chain.size();
}
boolean firstEquals(String str) {
if (null == first)
return false;
return first.equals(str);
}
}