Mercurial > hg > monetdb-java
view src/main/java/nl/cwi/monetdb/mcl/protocol/oldmapi/OldMapiStartOfHeaderParser.java @ 74:17365ed26611 embedded
In Java, you cannot get a pointer to a String, in order to make a faster memory copy. So I had to change a StringBuilder to a CharBuffer which allows to retrieve the pointer and make a faster processing.
author | Pedro Ferreira <pedro.ferreira@monetdbsolutions.com> |
---|---|
date | Thu, 15 Dec 2016 11:25:04 +0100 (2016-12-15) |
parents | 4e2a2a81cc6a |
children | 2b5e32efb1a4 |
line wrap: on
line source
package nl.cwi.monetdb.mcl.protocol.oldmapi; import nl.cwi.monetdb.mcl.protocol.ProtocolException; import nl.cwi.monetdb.mcl.protocol.StarterHeaders; /** * Created by ferreira on 12/6/16. */ final class OldMapiStartOfHeaderParser { static StarterHeaders GetNextStartHeaderOnOldMapi(OldMapiProtocol protocol) { StarterHeaders res; switch (protocol.lineBuffer.get()) { case '0': res = StarterHeaders.Q_PARSE; break; case '1': res = StarterHeaders.Q_TABLE; break; case '2': res = StarterHeaders.Q_UPDATE; break; case '3': res = StarterHeaders.Q_SCHEMA; break; case '4': res = StarterHeaders.Q_TRANS; break; case '5': res = StarterHeaders.Q_PREPARE; break; case '6': res = StarterHeaders.Q_BLOCK; break; default: res = StarterHeaders.Q_UNKNOWN; } return res; } static int GetNextResponseDataAsInt(OldMapiProtocol protocol) throws ProtocolException { int currentPointer = protocol.lineBuffer.position(); int limit = protocol.lineBuffer.limit(); char[] array = protocol.lineBuffer.array(); if (currentPointer >= limit) { throw new ProtocolException("unexpected end of string", currentPointer - 1); } int tmp; char chr = array[currentPointer++]; // 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 { throw new ProtocolException("expected a digit", currentPointer - 1); } while (currentPointer < limit) { chr = array[currentPointer++]; if(chr == ' ') { break; } tmp *= 10; if (chr >= '0' && chr <= '9') { tmp += (int)chr - (int)'0'; } else { throw new ProtocolException("expected a digit", currentPointer - 1); } } protocol.lineBuffer.position(currentPointer); return tmp; } static String GetNextResponseDataAsString(OldMapiProtocol protocol) throws ProtocolException { int currentPointer = protocol.lineBuffer.position(); int limit = protocol.lineBuffer.limit(); char[] array = protocol.lineBuffer.array(); if (currentPointer >= limit) { throw new ProtocolException("unexpected end of string", currentPointer - 1); } int cnt = 0, mark = currentPointer; char chr; while (currentPointer < limit) { chr = array[currentPointer++]; if(chr == ' ') { break; } cnt++; } protocol.lineBuffer.position(mark); return new String(array, 0, cnt); } }