// A class that represents a topping.
// Barry Cornelius, 19 June 2000
public class Topping
{
   private String iString;
   private int iPosition;
   private Topping(final String pString)
   {
      iString = pString;
      iPosition = iNumberOfToppings;
   }
   public boolean equals(final Object pObject)
   {
      if ( pObject==null || getClass()!=pObject.getClass() )
      {
         return false;
      }
      return iPosition==((Topping)pObject).iPosition;
   } //BJCHEREFIRST
   public int hashCode()
   {
      return iPosition;
   }
   public String toString()
   {
      return iString;
   }

   private static Topping iCreateTopping(final String pString)
   {
      final Topping tTopping = new Topping(pString);
      iToppings[iNumberOfToppings] = tTopping;
      iNumberOfToppings++;
      return tTopping;
   }
   private static int iNumberOfToppings = 0;
   private static final Topping[] iToppings = new Topping[9];
   public static final Topping anchovies = iCreateTopping("anchovies");
   public static final Topping cheese    = iCreateTopping("cheese");
   public static final Topping egg       = iCreateTopping("egg");
   public static final Topping ham       = iCreateTopping("ham");
   public static final Topping mushrooms = iCreateTopping("mushrooms");
   public static final Topping onions    = iCreateTopping("onions");
   public static final Topping peppers   = iCreateTopping("peppers");
   public static final Topping salami    = iCreateTopping("salami");
   public static final Topping tomatoes  = iCreateTopping("tomatoes");
   public static Topping getInstance(final String pString)
   {
      for (int tToppingNumber = 0; tToppingNumber<iNumberOfToppings;
                                   tToppingNumber++)
      {
         final Topping tArrayTopping = iToppings[tToppingNumber];
         final String tArrayToppingString = tArrayTopping.iString;
         if (tArrayToppingString.equalsIgnoreCase(pString))
         {
            return tArrayTopping;
         }
      }
      return null;
   }
}
