/* * Copyright 2016 higherfrequencytrading.com * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.openhft.lang.io; import net.openhft.lang.model.constraints.NotNull; import net.openhft.lang.model.constraints.Nullable; import java.nio.BufferUnderflowException; /** * @author peter.lawrey */ public interface ByteStringParser extends BytesCommon { /** * If set to true, the end of the Bytes will be the end of any consuming String, double or long. * If false, incomplete reads will throw a BufferUnderflowException * @param selfTerminate if true, the end of the Buffer is silent. */ void selfTerminating(boolean selfTerminate); /** * @return if this Bytes self terminates. */ boolean selfTerminating(); /** * @return the next unsigned byte or -1 if selfTerminating and the end is reached. * @throws BufferUnderflowException if the end is reached and selfTerminating is false. */ int readUnsignedByteOrThrow() throws BufferUnderflowException; /** * Return true or false, or null if it could not be detected * as true or false. Case is not important * * <p>false: f, false, n, no, 0 * * <p>true: t, true, y, yes, 1 * * @param tester to detect the end of the text. * @return true, false, or null if neither. */ Boolean parseBoolean(@NotNull StopCharTester tester) throws BufferUnderflowException; /** * Populate a StringBuilder with the UTF encoded text until the end. * * @param builder to zeroOut and append to. * @param tester to detect when to stop. */ void parseUtf8(@NotNull StringBuilder builder, @NotNull StopCharTester tester) throws BufferUnderflowException; @NotNull String parseUtf8(@NotNull StopCharTester tester) throws BufferUnderflowException; @Nullable <E extends Enum<E>> E parseEnum(@NotNull Class<E> eClass, @NotNull StopCharTester tester) throws BufferUnderflowException; @NotNull MutableDecimal parseDecimal(@NotNull MutableDecimal decimal) throws BufferUnderflowException; /** * @return the next long, stopping at the first invalid character */ long parseLong() throws BufferUnderflowException; /** * @param base to use. * @return the next long, stopping at the first invalid character */ long parseLong(int base) throws BufferUnderflowException; double parseDouble() throws BufferUnderflowException; /** * Make sure we just read a stop character * * @param tester to stop at * @return true if we stopped at a stop character, false if we ran out of data. */ boolean stepBackAndSkipTo(@NotNull StopCharTester tester); /** * Wind from this positionAddr to the end of the field * * @param tester to stop at * @return true if we stopped at a stop character, false if we ran out of data. */ boolean skipTo(@NotNull StopCharTester tester); /** * Dump the contents of this Bytes as text in the Appendable. * * @param appendable to append to */ void asString(Appendable appendable); /** * Dump the contents of Bytes as a CharSequence * * @return the CharSequence for these Bytes. */ CharSequence asString(); }