home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1995 November / PCWK1195.iso / inne / win95 / sieciowe / hotja32.lzh / hotjava / classsrc / browser / tools / javasearch / word.java < prev   
Text File  |  1995-08-11  |  3KB  |  124 lines

  1. /*
  2.  * @(#)Word.java    1.9 95/03/14 David A. Brown
  3.  *
  4.  * Copyright (c) 1994 Sun Microsystems, Inc. All Rights Reserved.
  5.  *
  6.  * Permission to use, copy, modify, and distribute this software
  7.  * and its documentation for NON-COMMERCIAL purposes and without
  8.  * fee is hereby granted provided that this copyright notice
  9.  * appears in all copies. Please refer to the file "copyright.html"
  10.  * for further important copyright and licensing information.
  11.  *
  12.  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
  13.  * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
  14.  * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
  15.  * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
  16.  * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
  17.  * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
  18.  */
  19.  
  20. package browser.tools.JavaSearch;
  21.  
  22. import java.util.Vector;
  23. import java.io.*;
  24. import javaindex;
  25.  
  26. /** One entry in an Index */
  27. class Word {
  28.     
  29.     /** The word this index entry is for */
  30.     String word;
  31.  
  32.     /** Doc IDs containing this word */
  33.     IDVector idvector;
  34.  
  35.     /** Basic Word constructor */
  36.     Word() {
  37.     idvector = new IDVector();
  38.     }
  39.  
  40.     /** Create a new Word for the specified word */
  41.     Word(String aWord) {
  42.     this();
  43.     word = aWord;
  44.     }
  45.  
  46.     /**
  47.      * Create a Word object for the specified (String) word,
  48.      * reading doc entries out of indexFile.  NOTE that
  49.      * indexFile must point to the word's doc entries!
  50.      */
  51.     public Word(String wordStr, RandomAccessFile indexFile) {
  52.     this(wordStr);
  53.     readDocEntries(indexFile);
  54.     }
  55.  
  56.     /** Generate a simple printed representation of this Word */
  57.     public String toString() {
  58.     String s = "Word '" + word + "'\tdocs";
  59.     for (int i=0; i<idvector.count; i++) {
  60.         s += " " + (int)idvector.ids[i];
  61.     }
  62.     return s;
  63.     }
  64.  
  65.     /** Write this Word to the specified Output stream */
  66.     void writeToStream(DataOutputStream out) {
  67.     // Our word, followed by newline
  68.     out.writeBytes(word);
  69.     out.writeByte('\n');
  70.  
  71.     // All our doc refs.  These are chars, terminated by a 0.
  72.     for (int i=0; i<idvector.count; i++) {
  73.         out.writeChar(idvector.ids[i]);
  74.         }
  75.     out.writeChar((char)0);
  76.     }
  77.  
  78.     /**
  79.      *  Read a single index entry from the specified stream.
  80.      *  Returns a Word object, or null if stream hits EOF.
  81.      *  The stream must be pointing at the start of a
  82.      *  valid index entry!!
  83.      */
  84.     static Word readFromStream(DataInputStream in) {
  85.     String word = in.readLine();
  86.     //System.out.println("  readFromStream:  got a word: "+word);
  87.     if (word == null) {
  88.         return null;
  89.     }
  90.     Word w = new Word(word);
  91.  
  92.     // Read doc ids, appending them to w, until we get a 0.
  93.     char c;
  94.     while ((c = in.readChar()) != 0) {
  95.         //System.out.println("    got a docID: "+c);
  96.         w.idvector.appendID(c);
  97.     }
  98.     return w;
  99.     }
  100.  
  101.     /**
  102.      * Read a Word's doc entries out of indexFile.  NOTE that
  103.      * indexFile must point to the word's doc entries!!
  104.      *
  105.      * This reads chars from indexFile, till we get a 0.
  106.      * This duplicates a bit of the functionality
  107.      * in readFromStream(), but unfortunately
  108.      * RandomAccessFiles are not InputStreams...
  109.      */
  110.     public void readDocEntries(RandomAccessFile indexFile) {
  111.  
  112.     // Read doc ids, appending them to ie, until we get a 0.
  113.         char c;
  114.         while ((c = indexFile.readChar()) != 0) {
  115.             idvector.appendID(c);
  116.         }
  117.     //System.out.println("  Read doc entries for "+this);
  118.     }
  119.  
  120.  
  121.  
  122.  
  123. }
  124.