/**
         * {@inheritDoc}
         */
        public override HashSet <E> getAllEdges(V sourceVertex, V targetVertex)
        {
            List <E> edges = null;

            if (abstractBaseGraph.containsVertex(sourceVertex) &&
                abstractBaseGraph.containsVertex(targetVertex))
            {
                edges = new ArrayUnenforcedSet <E>();

                DirectedEdgeContainer <V, E> ec = getEdgeContainer(sourceVertex);

                foreach (E e in ec.outgoing)
                {
                    if (abstractBaseGraph.getEdgeTarget(e).Equals(targetVertex))
                    {
                        edges.Add(e);
                    }
                }
            }

            return(new HashSet <E>(edges));
        }
        public override void addEdgeToTouchingVertices(E e)
        {
            V source = abstractBaseGraph.getEdgeSource(e);
            V target = abstractBaseGraph.getEdgeTarget(e);

            getEdgeContainer(source).addOutgoingEdge(e);
            getEdgeContainer(target).addIncomingEdge(e);

            KeyValuePair <V, V>    vertexPair = new KeyValuePair <V, V>(source, target);
            ArrayUnenforcedSet <E> edgeSet    = null;

            touchingVerticesToEdgeMap.TryGetValue(vertexPair, out edgeSet);
            if (edgeSet != null)
            {
                edgeSet.Add(e);
            }
            else
            {
                edgeSet = new ArrayUnenforcedSet <E>();
                edgeSet.Add(e);
                touchingVerticesToEdgeMap[vertexPair] = edgeSet;
            }
        }