// A class that represents a CarPark
// Barry Cornelius, 29th February 2000
import java.util. HashSet;
import java.util. Iterator;
import java.util. Observable;
import java.util. Observer;
import java.util. Set;
public class CarPark extends Observable
{
   private Set iSet;
   public CarPark()
   {
      iSet = new HashSet();
   }
   public synchronized void add(final Object pObject) 
   {
      iSet.add(pObject);
      setChanged();
      notifyObservers("add");
   }
   public synchronized void remove(final Object pObject) 
   {
      iSet.remove(pObject);
      setChanged();
      notifyObservers("remove");
   }
   public synchronized int size()
   {
      return iSet.size();
   }
   public synchronized boolean equals(final Object pObject)
   {
      if ( ! (pObject instanceof CarPark) )
      {
         return false;
      }
      return iSet.equals(((CarPark)pObject).iSet);
   }
   public synchronized int hashCode()
   {
      return iSet.hashCode();
   }
   public synchronized String toString()
   {
      if (iSet.isEmpty())
      {
         return new String("");
      }
      else
      {
         final StringBuffer tStringBuffer = new StringBuffer();
         final Iterator tIterator = iSet.iterator();
         while (tIterator.hasNext())
         {
            final Object tObject = tIterator.next();
            tStringBuffer.append("@" + tObject);
         }
         return tStringBuffer.toString().substring(1);
      }
   }
}
