Changeset: f15d2ac35932 for monetdb-java URL: https://dev.monetdb.org/hg/monetdb-java?cmd=changeset;node=f15d2ac35932 Modified Files: src/main/java/nl/cwi/monetdb/mcl/parser/HeaderLineParser.java Branch: default Log Message:
Optimize HeaderLineParser.parse() method by replacing regionMatches() calls by direct character array comparisons. Also found (and now corrected) that old regionMatches() calls did not match the first character (offset was 1 and should have been 0). diffs (54 lines): diff --git a/src/main/java/nl/cwi/monetdb/mcl/parser/HeaderLineParser.java b/src/main/java/nl/cwi/monetdb/mcl/parser/HeaderLineParser.java --- a/src/main/java/nl/cwi/monetdb/mcl/parser/HeaderLineParser.java +++ b/src/main/java/nl/cwi/monetdb/mcl/parser/HeaderLineParser.java @@ -52,9 +52,10 @@ public final class HeaderLineParser exte int pos = 0; boolean foundChar = false; boolean nameFound = false; + int i; // find header name searching from the end of the line - for (int i = len - 1; i >= 0; i--) { + for (i = len - 1; i >= 0; i--) { switch (chrLine[i]) { case ' ': case '\n': @@ -84,27 +85,32 @@ public final class HeaderLineParser exte // depending on the name of the header, we continue int type = 0; + i = pos; switch (len - pos) { case 4: - // source.regionMatches(pos + 1, "name", 1, 3) - if (chrLine[pos] == 'n' && chrLine[pos+1] == 'a' && chrLine[pos+2] == 'm' && chrLine[pos+3] == 'e') { + // source.regionMatches(pos + 1, "name", 0, 4) + if (chrLine[i] == 'n' && chrLine[++i] == 'a' && chrLine[++i] == 'm' && chrLine[++i] == 'e') { getValues(chrLine, 2, pos - 3); type = NAME; } else - // source.regionMatches(pos + 1, "type", 1, 3) - if (chrLine[pos] == 't' && chrLine[pos+1] == 'y' && chrLine[pos+2] == 'p' && chrLine[pos+3] == 'e') { + // source.regionMatches(pos + 1, "type", 0, 4) + if (chrLine[i] == 't' && chrLine[++i] == 'y' && chrLine[++i] == 'p' && chrLine[++i] == 'e') { getValues(chrLine, 2, pos - 3); type = TYPE; } break; case 6: - if (source.regionMatches(pos + 1, "length", 1, 5)) { + // source.regionMatches(pos + 1, "length", 0, 6) + if (chrLine[ i ] == 'l' && chrLine[++i] == 'e' && chrLine[++i] == 'n' && chrLine[++i] == 'g' + && chrLine[++i] == 't' && chrLine[++i] == 'h') { getIntValues(chrLine, 2, pos - 3); type = LENGTH; } break; case 10: - if (source.regionMatches(pos + 1, "table_name", 1, 9)) { + // source.regionMatches(pos + 1, "table_name", 0, 10) + if (chrLine[ i ] == 't' && chrLine[++i] == 'a' && chrLine[++i] == 'b' && chrLine[++i] == 'l' && chrLine[++i] == 'e' + && chrLine[++i] == '_' && chrLine[++i] == 'n' && chrLine[++i] == 'a' && chrLine[++i] == 'm' && chrLine[++i] == 'e') { getValues(chrLine, 2, pos - 3); type = TABLE; } _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list