001    /*
002     * Copyright (C) 2008  Trustin Heuiseung Lee
003     *
004     * This library is free software; you can redistribute it and/or
005     * modify it under the terms of the GNU Lesser General Public
006     * License as published by the Free Software Foundation; either
007     * version 2.1 of the License, or (at your option) any later version.
008     *
009     * This library is distributed in the hope that it will be useful,
010     * but WITHOUT ANY WARRANTY; without even the implied warranty of
011     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
012     * Lesser General Public License for more details.
013     *
014     * You should have received a copy of the GNU Lesser General Public
015     * License along with this library; if not, write to the Free Software
016     * Foundation, Inc., 51 Franklin Street, 5th Floor, Boston, MA 02110-1301 USA
017     */
018    package net.gleamynode.netty.buffer;
019    
020    
021    /**
022     * @author The Netty Project (netty@googlegroups.com)
023     * @author Trustin Lee (trustin@gmail.com)
024     *
025     * @version $Rev$, $Date$
026     *
027     * @apiviz.uses net.gleamynode.netty.buffer.ChannelBuffer
028     */
029    public interface ChannelBufferIndexFinder {
030    
031        boolean find(ChannelBuffer buffer, int guessedIndex);
032    
033        static ChannelBufferIndexFinder NUL = new ChannelBufferIndexFinder() {
034            public boolean find(ChannelBuffer buffer, int guessedIndex) {
035                return buffer.getByte(guessedIndex) == 0;
036            }
037        };
038    
039        static ChannelBufferIndexFinder NOT_NUL = new ChannelBufferIndexFinder() {
040            public boolean find(ChannelBuffer buffer, int guessedIndex) {
041                return buffer.getByte(guessedIndex) != 0;
042            }
043        };
044    
045        static ChannelBufferIndexFinder CR = new ChannelBufferIndexFinder() {
046            public boolean find(ChannelBuffer buffer, int guessedIndex) {
047                return buffer.getByte(guessedIndex) == '\r';
048            }
049        };
050    
051        static ChannelBufferIndexFinder NOT_CR = new ChannelBufferIndexFinder() {
052            public boolean find(ChannelBuffer buffer, int guessedIndex) {
053                return buffer.getByte(guessedIndex) != '\r';
054            }
055        };
056    
057        static ChannelBufferIndexFinder LF = new ChannelBufferIndexFinder() {
058            public boolean find(ChannelBuffer buffer, int guessedIndex) {
059                return buffer.getByte(guessedIndex) == '\n';
060            }
061        };
062    
063        static ChannelBufferIndexFinder NOT_LF = new ChannelBufferIndexFinder() {
064            public boolean find(ChannelBuffer buffer, int guessedIndex) {
065                return buffer.getByte(guessedIndex) != '\n';
066            }
067        };
068    
069        static ChannelBufferIndexFinder CRLF = new ChannelBufferIndexFinder() {
070            public boolean find(ChannelBuffer buffer, int guessedIndex) {
071                byte b = buffer.getByte(guessedIndex);
072                return b == '\r' || b == '\n';
073            }
074        };
075    
076        static ChannelBufferIndexFinder NOT_CRLF = new ChannelBufferIndexFinder() {
077            public boolean find(ChannelBuffer buffer, int guessedIndex) {
078                byte b = buffer.getByte(guessedIndex);
079                return b != '\r' && b != '\n';
080            }
081        };
082    
083        static ChannelBufferIndexFinder LINEAR_WHITESPACE = new ChannelBufferIndexFinder() {
084            public boolean find(ChannelBuffer buffer, int guessedIndex) {
085                byte b = buffer.getByte(guessedIndex);
086                return b == ' ' || b == '\t';
087            }
088        };
089    
090        static ChannelBufferIndexFinder NOT_LINEAR_WHITESPACE = new ChannelBufferIndexFinder() {
091            public boolean find(ChannelBuffer buffer, int guessedIndex) {
092                byte b = buffer.getByte(guessedIndex);
093                return b != ' ' && b != '\t';
094            }
095        };
096    }