Changeset: 04c535b05c52 for monetdb-java
URL: http://dev.monetdb.org/hg/monetdb-java?cmd=changeset;node=04c535b05c52
Modified Files:
        src/main/java/nl/cwi/monetdb/mcl/parser/HeaderLineParser.java
        src/main/java/nl/cwi/monetdb/mcl/parser/StartOfHeaderParser.java
Branch: default
Log Message:

Fixed negative number parsing on the StartOfHeaderParser


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
@@ -157,6 +157,10 @@ public class HeaderLineParser extends MC
         * Returns an array of ints containing the values between
         * ',\t' separators.
         *
+        * Feb2017 note - This integer parser doesn't have to parse negative
+        * numbers, because it is only used to parse column lengths
+        * which is always greater than 0.
+        *
         * @param chrLine a character array holding the input data
         * @param start where the relevant data starts
         * @param stop where the relevant data stops
@@ -171,7 +175,6 @@ public class HeaderLineParser extends MC
                        if (chrLine[i] == ',' && chrLine[i + 1] == '\t') {
                                intValues[elem++] = tmp;
                                tmp = 0;
-                               start = i++;
                        } else {
                                tmp *= 10;
                                // note: don't use Character.isDigit() here, 
because
diff --git a/src/main/java/nl/cwi/monetdb/mcl/parser/StartOfHeaderParser.java 
b/src/main/java/nl/cwi/monetdb/mcl/parser/StartOfHeaderParser.java
--- a/src/main/java/nl/cwi/monetdb/mcl/parser/StartOfHeaderParser.java
+++ b/src/main/java/nl/cwi/monetdb/mcl/parser/StartOfHeaderParser.java
@@ -96,15 +96,18 @@ public class StartOfHeaderParser {
         * @throws MCLParseException if no numeric value could be read
         */
        public final int getNextAsInt() throws MCLParseException {
+               boolean positive = true;
                pos++;
                if (!soh.hasRemaining()) throw
                        new MCLParseException("unexpected end of string", 
soh.position() - 1);
-               int tmp;
+               int tmp = 0;
                char chr = soh.get();
                // note: don't use Character.isDigit() here, because
                // we only want ISO-LATIN-1 digits
                if (chr >= '0' && chr <= '9') {
                        tmp = (int)chr - (int)'0';
+               } else if(chr == '-') {
+                       positive = false;
                } else {
                        throw new MCLParseException("expected a digit", 
soh.position() - 1);
                }
@@ -118,7 +121,7 @@ public class StartOfHeaderParser {
                        }
                }
 
-               return tmp;
+               return positive ? tmp : -tmp;
        }
 
        public final String getNextAsString() throws MCLParseException {
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to