package org.apache.commons.lang3.text;
import java.util.Arrays;
import org.apache.commons.lang3.StringUtils;
public abstract class StrMatcher
{
private static final StrMatcher COMMA_MATCHER = new CharMatcher(',');
private static final StrMatcher TAB_MATCHER = new CharMatcher('\t');
private static final StrMatcher SPACE_MATCHER = new CharMatcher(' ');
private static final StrMatcher SPLIT_MATCHER = new CharSetMatcher(" \t\n\r\f".toCharArray());
private static final StrMatcher TRIM_MATCHER = new TrimMatcher();
private static final StrMatcher SINGLE_QUOTE_MATCHER = new CharMatcher('\'');
private static final StrMatcher DOUBLE_QUOTE_MATCHER = new CharMatcher('"');
private static final StrMatcher QUOTE_MATCHER = new CharSetMatcher("'\"".toCharArray());
private static final StrMatcher NONE_MATCHER = new NoMatcher();
public static StrMatcher stringMatcher(String str)
{
if (StringUtils.isEmpty(str)) {
return NONE_MATCHER;
}
return new StringMatcher(str);
}
public abstract int isMatch(char[] paramArrayOfChar, int paramInt1, int paramInt2, int paramInt3);
static final class CharMatcher extends StrMatcher
{
private final char ch;
CharMatcher(char ch)
{
this.ch = ch;
}
public int isMatch(char[] buffer, int pos, int bufferStart, int bufferEnd)
{
return this.ch == buffer[pos] ? 1 : 0;
}
}
static final class CharSetMatcher extends StrMatcher
{
private final char[] chars;
CharSetMatcher(char[] chars)
{
this.chars = ((char[])chars.clone());
Arrays.sort(this.chars);
}
public int isMatch(char[] buffer, int pos, int bufferStart, int bufferEnd)
{
return Arrays.binarySearch(this.chars, buffer[pos]) >= 0 ? 1 : 0;
}
}
static final class NoMatcher extends StrMatcher
{
public int isMatch(char[] buffer, int pos, int bufferStart, int bufferEnd)
{
return 0;
}
}
static final class StringMatcher extends StrMatcher
{
private final char[] chars;
StringMatcher(String str)
{
this.chars = str.toCharArray();
}
public int isMatch(char[] buffer, int pos, int bufferStart, int bufferEnd)
{
int len = this.chars.length;
if (pos + len > bufferEnd) {
return 0;
}
for (int i = 0; i < this.chars.length; pos++) {
if (this.chars[i] != buffer[pos])
return 0;
i++;
}
return len;
}
}
static final class TrimMatcher extends StrMatcher
{
public int isMatch(char[] buffer, int pos, int bufferStart, int bufferEnd)
{
return buffer[pos] <= ' ' ? 1 : 0;
}
}
}