Package tools

Source Code of tools.SymbolTool

package tools;

import java.util.Enumeration;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.util.TreeSet;
import java.util.Iterator;
import anvil.java.util.Hashlist;
import anvil.java.util.BindingEnumeration;

public class SymbolTool
{
  private String _dir;
  private Hashlist _symbols = new Hashlist();
  private TreeSet _set = new TreeSet();
  private int _count = 0;
  private boolean _changed = false;

  public SymbolTool(String dir) throws IOException
  {
    _dir = dir;
    File file = new File(dir + "/symbols.index");
    System.out.println("Index: "+file.getPath());
    FileInputStream in = new FileInputStream(file);
    LineNumberReader reader = new LineNumberReader(new InputStreamReader(in));
    String line;
    for(;;) {
      line = reader.readLine();
      if (line == null) {
        break;
      }
      _symbols.put(line, new Integer(_count++));
      _set.add(line);
    }
    in.close();
    System.out.println("Read "+_count+" symbols");
  }


  public int getIndex(String symbol)
  {
    Integer index = (Integer)_symbols.get(symbol);
    if (index != null) {
      return index.intValue();
    }
    return -1;
  }
 

  public int update(String symbol)
  {
    Integer index = (Integer)_symbols.get(symbol);
    if (index == null) {
      System.out.println("Added '"+symbol+"' at #"+_count);
      _changed = true;
      _symbols.put(symbol, new Integer(_count++));
      _set.add(symbol);
      return _count-1;
    }
    return index.intValue();
  }


  public void save() throws IOException
  {
    if (!_changed) {
      System.out.println("No changes.");
      return;
    }

    File file = new File(_dir + "/symbols.index");
    System.out.println("Writing "+file.getPath());
    PrintStream out = new PrintStream(new FileOutputStream(file));
    Enumeration keys = _symbols.keys();
    int i= 0;
    while(keys.hasMoreElements()) {
      String name = keys.nextElement().toString();
      out.write(name.getBytes());
      out.write('\n');
      i++;
    }
    out.close();

    file = new File(_dir + "/Symbols.java");
    System.out.println("Writing "+file.getPath());
    out = new PrintStream(new FileOutputStream(file));
    out.println("/*");
    out.println("* $Id: SymbolTool.java,v 1.2 2001/10/26 12:14:47 jkl Exp $");
    out.println("*");
    out.println("* Copyright 2000 Njet Communications Ltd. All Rights Reserved.");
    out.println("*");
    out.println("* This software is the proprietary information of Njet Communications Ltd.");
    out.println("* Use is subject to license terms.");
    out.println("*");
    out.println("* THIS FILE IS AUTOMATICALLY GENERATED. DO NOT CHANGE.");
    out.println("*/");

    out.println("package anvil.core;");
    out.println();
    out.println("public interface Symbols");
    out.println("{");
    out.println();

    out.println("  public static final Object[][] SYMBOLS =");
    out.println("  {");
    Iterator iter = _set.iterator();
    while(iter.hasNext()) {
      String name = iter.next().toString();
      out.print("    { \"");
      out.print(name);
      out.print("\", new Integer(");
      out.print(getIndex(name));
      out.println(") },");
    }
    out.println();
    out.println("  };");
    out.println();

    BindingEnumeration enum = _symbols.keysAndElements();
    while(enum.hasMoreElements()) {
      String name = enum.nextKey().toString();
      int index = ((Integer)enum.nextElement()).intValue();
      out.print("  public static final int _");
      out.print(name);
      out.print(' ');
      out.print('=');
      out.print(' ');
      out.print(index);
      out.println(';');
    }
    out.print("  public static final int LAST_INDEX = ");
    out.print(_count);
    out.println(';');

    out.println();
    out.println("}");
    out.close();
  }


  public static final void main(String[] args)
  {
    try {
      String dir = args.length>0 ? args[0] : "./";
      SymbolTool n = new SymbolTool(dir);
      LineNumberReader reader =
        new LineNumberReader(new InputStreamReader(System.in));
      int count = 0;
      for(;;) {
        String line = reader.readLine();
        if (line == null) {
          break;
        }
        n.update(line.trim());
        count++;
      }
      System.out.println("Processed "+count+" methods");
      n.save();
      System.out.println();
      System.exit(0);
     
    } catch (Throwable t) {
      t.printStackTrace();
      System.exit(1);
    }
  }
 
}
TOP

Related Classes of tools.SymbolTool

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.