public Edge getEdge(int i)
   {
      Edge retval;
      if (i < 0 || i > 5)
         throw new IllegalArgumentException( 
            "Requested hex edge must be in range [0,5], was " + i);
      else if (myEdge[i] != null)
      {
         retval = myEdge[i];
      }
      else
      {
         Edge cur;
         boolean enteredViaE0minus; // True iff we entered cur from prev via cur's e0minus edge.
         cur = getEdge( i - 1);  // Crazy recursion to handle caching.
         enteredViaE0minus = enteredViaVertex0( i-1); // enteredViaEdge0Minus( i-1);
         retval = (enteredViaE0minus ? cur.getEdge1Plus() : cur.getEdge0Plus());
         myEdge[i] = retval;
         if (i > myHighestCachedEdge)
            myHighestCachedEdge = i;
      }
      return retval;
   }