From: <ma...@us...> - 2004-02-02 19:32:11
|
Update of /cvsroot/jrman/drafts/src/org/jrman/parser/keywords In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25763/src/org/jrman/parser/keywords Modified Files: KeywordPointsPolygons.java AbstractKeywordParser.java Log Message: Many optimizations. Rewrote oclusion culling. Implemented smaller footprint PointsPolygons. Index: KeywordPointsPolygons.java =================================================================== RCS file: /cvsroot/jrman/drafts/src/org/jrman/parser/keywords/KeywordPointsPolygons.java,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** KeywordPointsPolygons.java 10 Dec 2003 09:05:07 -0000 1.5 --- KeywordPointsPolygons.java 2 Feb 2004 19:30:06 -0000 1.6 *************** *** 28,31 **** --- 28,49 ---- // Expect array nVertices + parseIntegerArray(st); + int[] nVertices = new int[arraySize]; + System.arraycopy(integers, 0, nVertices, 0, arraySize); + + // Expect array vertices + parseIntegerArray(st); + int[] vertices = new int[arraySize]; + System.arraycopy(integers, 0, vertices, 0, arraySize); + + // Expect parameter list + ParameterList parameterList = parseParameterList(st); + parser.addPointsPolygons(nVertices, vertices, parameterList); + } + + /* + public void parse(Tokenizer st) throws Exception { + + // Expect array nVertices float[] nVertices = readFloatArray(st); *************** *** 34,40 **** // Expect parameter list ! ParameterList parameterList = parseParameterList(st); parser.addPointsPolygon(nVertices, vertices, parameterList); } } --- 52,59 ---- // Expect parameter list ! ParameterList parameterList = parseParameterList(st); parser.addPointsPolygon(nVertices, vertices, parameterList); } + */ } Index: AbstractKeywordParser.java =================================================================== RCS file: /cvsroot/jrman/drafts/src/org/jrman/parser/keywords/AbstractKeywordParser.java,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** AbstractKeywordParser.java 28 Jan 2004 07:27:43 -0000 1.8 --- AbstractKeywordParser.java 2 Feb 2004 19:30:06 -0000 1.9 *************** *** 52,68 **** final static int TK_RBRACE = ']'; ! private static float[] numbers = new float[5000]; ! private static String[] strings = new String[10]; ! ! private static int arraySize; protected Parser parser; protected Set validStates = new HashSet(); ! public static void reset() { numbers = new float[5000]; strings = new String[10]; } --- 52,71 ---- final static int TK_RBRACE = ']'; ! private static float[] numbers = new float[5000]; ! ! protected static int[] integers = new int[5000]; ! private static String[] strings = new String[10]; ! ! protected static int arraySize; protected Parser parser; protected Set validStates = new HashSet(); ! public static void reset() { numbers = new float[5000]; + integers = new int[5000]; strings = new String[10]; } *************** *** 287,291 **** String[] tmp = new String[strings.length * 2]; System.arraycopy(strings, 0, tmp, 0, strings.length); ! strings = tmp; } strings[arraySize++] = st.sval; --- 290,294 ---- String[] tmp = new String[strings.length * 2]; System.arraycopy(strings, 0, tmp, 0, strings.length); ! strings = tmp; } strings[arraySize++] = st.sval; *************** *** 297,300 **** --- 300,321 ---- } + protected void parseIntegerArray(Tokenizer st) throws Exception { + arraySize = 0; + // Expect array start + match(st, TK_LBRACE); + // Expect a variable length sequence of integers + while (st.nextToken() == TK_NUMBER) { + if (arraySize == integers.length) { + int[] tmp = new int[integers.length * 2]; + System.arraycopy(integers, 0, tmp, 0, integers.length); + integers = tmp; + } + integers[arraySize++] = (int) st.nval; + } + st.pushBack(); + // Expect array end + match(st, TK_RBRACE); + } + private Declaration getDeclaration(String name) { Declaration declaration = Global.getDeclaration(name); |