code: public void addEdge(Edge e) {
  
  		if (!containsNode(e.getFromNodeId())) {
  			throw new NodeNotFoundException(e.getFromNodeId());
  		}
  		
  		if (!containsNode(e.getToNodeId())) {
  			throw new NodeNotFoundException(e.getToNodeId());
  		}
  
  		if (this.containsEdge(e.getId()))
  			throw new DuplicatedEdgeException(e.getId());
  
  		int eIndex = nextEdgeId++;
  
  		edgeIdMapping.put(e.getId(), eIndex);
  
  		int aliveIndex = eIndex >> 5;
  		int aliveSubIndex = eIndex & 31;
  
  		if (aliveIndex >= aliveEdges.size())
  			aliveEdges.add(0);
  
  		aliveEdges.set(aliveIndex, aliveEdges.get(aliveIndex) | (1 << aliveSubIndex));
  
  		updateAdjacency(e, eIndex);
  		
  		edges.add(e);
  		numberOfEdges++;
  	}
docs: Add a new edge into the graph.
  @param e the edge that will be added into the graph.