FileDocCategorySizeDatePackage
symbol_set.javaAPI DocJava SE 5 API6373Fri Aug 26 14:54:54 BST 2005com.sun.java_cup.internal

symbol_set

public class symbol_set extends Object
This class represents a set of symbols and provides a series of set operations to manipulate them.
see
com.sun.java_cup.internal.symbol
version
last updated: 11/25/95
author
Scott Hudson

Fields Summary
protected Hashtable
_all
A hash table to hold the set. Symbols are keyed using their name string.
Constructors Summary
public symbol_set()
Constructor for an empty set.

 
public symbol_set(symbol_set other)
Constructor for cloning from another set.

param
other the set we are cloning from.

      not_null(other);
      _all = (Hashtable)other._all.clone();
    
Methods Summary
public booleanadd(com.sun.java_cup.internal.symbol_set other)
Add (union) in a complete set.

param
other the set we are adding in.
return
true if this changes the set.

      boolean result = false;

      not_null(other);

      /* walk down the other set and do the adds individually */
      for (Enumeration e = other.all(); e.hasMoreElements(); )
	result = add((symbol)e.nextElement()) || result;

      return result;
    
public booleanadd(symbol sym)
Add a single symbol to the set.

param
sym the symbol we are adding.
return
true if this changes the set.

      Object previous;

      not_null(sym); 

      /* put the object in */
      previous = _all.put(sym.name(),sym);

      /* if we had a previous, this is no change */
      return previous == null;
    
public java.util.Enumerationall()
Access to all elements of the set.


          
     return _all.elements();
public booleancontains(symbol sym)
Determine if the set contains a particular symbol.

param
sym the symbol we are looking for.

return _all.containsKey(sym.name());
public booleanequals(com.sun.java_cup.internal.symbol_set other)
Equality comparison.

      if (other == null || other.size() != size()) return false;

      /* once we know they are the same size, then improper subset does test */
      try {
        return is_subset_of(other);
      } catch (internal_error e) {
	/* can't throw the error (because super class doesn't), so we crash */
	e.crash();
	return false;
      }
    
public booleanequals(java.lang.Object other)
Generic equality comparison.

      if (!(other instanceof symbol_set))
	return false;
      else
	return equals((symbol_set)other);
    
public inthashCode()
Compute a hash code.

      int result = 0;
      int cnt;
      Enumeration e;

      /* hash together codes from at most first 5 elements */
      for (e = all(), cnt=0 ; e.hasMoreElements() && cnt<5; cnt++)
	result ^= ((symbol)e.nextElement()).hashCode();

      return result;
    
public booleanis_subset_of(com.sun.java_cup.internal.symbol_set other)
Determine if this set is an (improper) subset of another.

param
other the set we are testing against.

      not_null(other);

      /* walk down our set and make sure every element is in the other */
      for (Enumeration e = all(); e.hasMoreElements(); )
	if (!other.contains((symbol)e.nextElement()))
	  return false;

      /* they were all there */
      return true;
    
public booleanis_superset_of(com.sun.java_cup.internal.symbol_set other)
Determine if this set is an (improper) superset of another.

param
other the set we are are testing against.

      not_null(other);
      return other.is_subset_of(this);
    
protected voidnot_null(java.lang.Object obj)
Helper function to test for a null object and throw an exception if one is found.

param
obj the object we are testing.

      if (obj == null) 
	throw new internal_error("Null object used in set operation");
    
public voidremove(symbol sym)
Remove a single symbol if it is in the set.

param
sym the symbol we are removing.

      not_null(sym); 
      _all.remove(sym.name());
    
public voidremove(com.sun.java_cup.internal.symbol_set other)
Remove (set subtract) a complete set.

param
other the set we are removing.

      not_null(other);

      /* walk down the other set and do the removes individually */
      for (Enumeration e = other.all(); e.hasMoreElements(); )
	remove((symbol)e.nextElement());
    
public intsize()
size of the set

return _all.size();
public java.lang.StringtoString()
Convert to a string.

      String result;
      boolean comma_flag;

      result = "{";
      comma_flag = false;
      for (Enumeration e = all(); e.hasMoreElements(); )
	{
	  if (comma_flag)
	    result += ", ";
	  else
	    comma_flag = true;

	  result += ((symbol)e.nextElement()).name();
	}
      result += "}";

      return result;