001    /*
002    NGramJ - n-gram based text classification
003    Copyright (C) 2001 Frank S. Nestel (frank at spieleck.de)
004    
005    This program is free software; you can redistribute it and/or modify
006    it under the terms of the GNU Lesser General Public License as published 
007    by the Free Software Foundation; either version 2.1 of the License, or
008    (at your option) any later version.
009    
010    This program is distributed in the hope that it will be useful,
011    but WITHOUT ANY WARRANTY; without even the implied warranty of
012    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
013    GNU General Public License for more details.
014    
015    You should have received a copy of the GNU Lesser General Public License
016    along with this program (lesser.txt); if not, write to the Free Software
017    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
018    */
019    
020    package de.spieleck.app.ngramj;
021    
022    import java.lang.Comparable;
023    
024    /**
025     * An n-gram attached with a counter.
026     *
027     * @author Frank S. Nestel
028     * @author $Author: nestefan $
029     * @version $Revision: 2 $ $Date: 2006-03-27 23:00:21 +0200 (Mo, 27 Mrz 2006) $ $Author: nestefan $
030     */
031    public class CountedNGram
032        // extends NGramImpl
033        implements Comparable, NGram
034    {
035        protected int count = 1;
036        protected NGram gram;
037    
038        public CountedNGram(NGram ng)
039        {
040            gram = ng;
041        }
042    
043        public CountedNGram(byte[] ba, int start, int len)
044        {
045            gram = NGramImpl.newNGram(ba, start, len);
046        }
047    
048        public int hashCode()
049        {
050            return gram.hashCode();
051        }
052    
053        public int getCount() { return count; }
054        public void inc() { count++; }
055    
056        public NGram getNGram()
057        {
058            return gram;
059        }
060    
061        public int compareTo(Object e1)
062        {
063            return ((CountedNGram)e1).getCount() - getCount();
064        }
065    
066        public boolean equals(Object e1)
067        {
068            if ( e1 instanceof CountedNGram ) 
069                return getNGram().equals(((CountedNGram)e1).getNGram());
070            else if ( e1 instanceof NGram )
071                return e1.equals(getNGram());
072            return false;
073        }
074    
075        public String toString()
076        {
077            return getNGram().toString()+"["+getCount()+"]";
078        }
079    
080        public int getSize()
081        {
082            return getNGram().getSize();
083        }
084    
085        /** 
086         * Return a single byte of the NGram.
087         * @throws ArrayIndexOutOfBoundException (implicitly)
088         */
089        public int getByte(int pos)
090        {
091            return getNGram().getByte(pos);
092        }
093    
094        /**
095         * Compare a ngram to a bunch of bytes
096         */
097        public boolean equals(byte[] bytes, int start, int length)
098        {
099            return getNGram().equals(bytes, start, length);
100        }
101    
102        /**
103         * Hand out a special representation of yourself
104         */
105        public NGramImpl getNGramImpl()
106        {
107            return getNGram().getNGramImpl();
108        }
109    }