Mercurial > hg > monetdb-java
changeset 203:c6abd650aeb4
Reduce memory consumption in TupleLineParser which is a subclass of MCLParser.
The intValues[] is only used and needed in the HeaderLineParser, hence moved it from superclass MCLParser to subclass HeaderLineParser.
author | Martin van Dinther <martin.van.dinther@monetdbsolutions.com> |
---|---|
date | Thu, 15 Feb 2018 15:06:50 +0100 (2018-02-15) |
parents | 43aca1563460 |
children | ae1d0d1c2f0f |
files | src/main/java/nl/cwi/monetdb/mcl/parser/HeaderLineParser.java src/main/java/nl/cwi/monetdb/mcl/parser/MCLParser.java |
diffstat | 2 files changed, 11 insertions(+), 25 deletions(-) [+] |
line wrap: on
line diff
--- a/src/main/java/nl/cwi/monetdb/mcl/parser/HeaderLineParser.java +++ b/src/main/java/nl/cwi/monetdb/mcl/parser/HeaderLineParser.java @@ -17,12 +17,14 @@ package nl.cwi.monetdb.mcl.parser; * @author Fabian Groffen */ public class HeaderLineParser extends MCLParser { - private int type; + /* types of meta data supported by MCL protocol */ + public final static int NAME = 1; // name of column + public final static int LENGTH = 2; + public final static int TABLE = 3; // may include the schema name + public final static int TYPE = 4; - public final static int NAME = 1; - public final static int LENGTH = 2; - public final static int TABLE = 3; - public final static int TYPE = 4; + /** The int values found while parsing. Public, you may touch it. */ + public final int intValues[]; /** * Constructs a HeaderLineParser which expects columncount columns. @@ -31,6 +33,7 @@ public class HeaderLineParser extends MC */ public HeaderLineParser(int columncount) { super(columncount); + intValues = new int[columncount]; } /** @@ -53,6 +56,7 @@ public class HeaderLineParser extends MC int pos = 0; boolean foundChar = false; boolean nameFound = false; + // find header name searching from the end of the line for (int i = len - 1; i >= 0; i--) { switch (chrLine[i]) { @@ -83,6 +87,7 @@ public class HeaderLineParser extends MC throw new MCLParseException("invalid header, no header name found", pos); // depending on the name of the header, we continue + int type = 0; switch (chrLine[pos]) { case 'n': if (len - pos == 4 && source.regionMatches(pos + 1, "name", 1, 3)) {
--- a/src/main/java/nl/cwi/monetdb/mcl/parser/MCLParser.java +++ b/src/main/java/nl/cwi/monetdb/mcl/parser/MCLParser.java @@ -26,9 +26,7 @@ package nl.cwi.monetdb.mcl.parser; public abstract class MCLParser { /** The String values found while parsing. Public, you may touch it. */ public final String values[]; - /** The int values found while parsing. Public, you may touch it. */ - public final int intValues[]; - private int colnr; + protected int colnr; /** * Creates an MCLParser targetted at a given number of field values. @@ -39,7 +37,6 @@ public abstract class MCLParser { */ protected MCLParser(int capacity) { values = new String[capacity]; - intValues = new int[capacity]; } /** @@ -51,7 +48,6 @@ public abstract class MCLParser { * @throws MCLParseException if source cannot be (fully) parsed by * this parser * @see #next() - * @see #nextInt() * @see #hasNext() */ abstract public int parse(String source) throws MCLParseException; @@ -70,7 +66,6 @@ public abstract class MCLParser { * @return true if the next call to next() or nextInt() is bound to * succeed * @see #next() - * @see #nextInt() */ final public boolean hasNext() { return colnr < values.length; @@ -83,23 +78,9 @@ public abstract class MCLParser { * determine if the call to next() will succeed. * * @return the current field value - * @see #nextInt() * @see #hasNext() */ final public String next() { return values[colnr++]; } - - /** - * Returns the current field value as integer, and advances the - * field counter to the next value. This method has the same - * characteristics as the next() method, apart from returning the - * field value as an integer. - * - * @return the current field value as integer - * @see #next() - */ - final public int nextInt() { - return intValues[colnr++]; - } }