/* * 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; /** * @author peter.lawrey */ public enum StopCharTesters implements StopCharTester { COMMA_STOP { @Override public boolean isStopChar(int ch) { return ch < ' ' || ch == ','; } }, CONTROL_STOP { @Override public boolean isStopChar(int ch) { return ch < ' '; } }, SPACE_STOP { @Override public boolean isStopChar(int ch) { return Character.isWhitespace(ch) || ch == 0; } }, XML_TEXT { @Override public boolean isStopChar(int ch) { return ch == '"' || ch == '<' || ch == '>' || ch == 0; } }, FIX_TEXT { @Override public boolean isStopChar(int ch) { return ch <= 1; } }, ALL { @Override public boolean isStopChar(int ch) { return ch < 0; } }; @NotNull public static StopCharTester forChars(@NotNull CharSequence sequence) { if (sequence.length() == 1) return forChar(sequence.charAt(0)); return new CSCSTester(sequence); } @NotNull private static StopCharTester forChar(char ch) { return new CharCSTester(ch); } static class CSCSTester implements StopCharTester { @NotNull private final String seperators; public CSCSTester(@NotNull CharSequence cs) { seperators = cs.toString(); } @Override public boolean isStopChar(int ch) { return seperators.indexOf(ch) >= 0; } } static class CharCSTester implements StopCharTester { private final char ch; public CharCSTester(char ch) { this.ch = ch; } @Override public boolean isStopChar(int ch) { return this.ch == ch; } } }