public Hex addEdge( Edge anEdge)
   {
//      System.out.printf( "\tAdding edge %s\tto hex %s%s", 
//         anEdge.toString(), 
//         this.getClass().getName() + "@" + String.format("%x", this.hashCode()), 
//         Const.CRLF);
      Edge prev = myEdge[myHighestCachedEdge];
      Edge cur;
      boolean enteredViaV0;
      boolean newEdgeIsBackwards = false;
      if (myHighestCachedEdge < 1)
         enteredViaV0 = true;
      else
         enteredViaV0 = enteredViaVertex0( myHighestCachedEdge); // enteredViaEdge0Minus( myHighestCachedEdge);
      do
      {
         if (enteredViaV0)
            cur = prev.getEdge1Plus();
         else
            cur = prev.getEdge0Plus();
         if (cur == null)
         {
            // Found end of list.  Need to know how new edge relates.
            newEdgeIsBackwards = (anEdge.getVertex1().equals( enteredViaV0 ? prev.getVertex1() : prev.getVertex0()));
         }
         else
         {
            myEdge[++myHighestCachedEdge] = cur;   // Found a hex edge that wasn't in the cached array, so add it.
            enteredViaV0 = (prev == cur.getEdge0Minus());
            prev = cur;
         }
      } while (cur != null);
      // At this point, prev is last reachable edge in circuit and cur is null. enteredViaE0minus is a statement about
      // how we got into prev.
      if (enteredViaV0)
      {
         prev.setEdge1Plus( anEdge);
         // anEdge.setEdge0Minus( prev); // This is wrong:  we don't know if this edge runs backwards or not.  We only know the prev edge does NOT run backwards.
      }
      else
      {
         prev.setEdge0Plus( anEdge);
         // anEdge.setEdge1Minus( prev);
      }
      if (newEdgeIsBackwards)
         anEdge.setEdge1Minus( prev);
      else
         anEdge.setEdge0Minus( prev);
      myEdge[++myHighestCachedEdge] = anEdge;
      
      // TODO: consider moving hex-closing code from HexGrid.makeHex() to here.
      if (myHighestCachedEdge == 5)
      {
         // Last edge, close hex edge cycle.
         myEdge[5].setEdge0Plus( myEdge[0]);   // Edge runs backwards.
         myEdge[0].setEdge0Minus( myEdge[5]);
      }
      
      return this;
   }