/* * JLibs: Common Utilities for Java * Copyright (C) 2009 Santhosh Kumar T <santhosh.tekuri@gmail.com> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. */ package jlibs.nio.util; /** * @author Santhosh Kumar Tekuri */ public class BytePattern{ public byte[] pattern; private int[] failure; public BytePattern(byte... pattern){ this.pattern = pattern; // Computes the failure function using a boot-strapping process, // where the pattern is matched against itself. failure = new int[pattern.length]; int j = 0; for(int i=1; i<pattern.length; i++){ j = match(j, pattern[i]); failure[i] = j; } } public int length(){ return pattern.length; } public int match(int j, byte nextByte){ while(j>0 && pattern[j]!=nextByte) j = failure[j-1]; if(pattern[j]==nextByte) ++j; return j; } }