package com.example.portfolio3;

// origin: <https://moodle.ruc.dk/course/section.php?id=211877>

import java.util.*;

/// foo
abstract class AbstractGraph implements Graph{

  /// foo
  AbstractGraph() {}

  /// foo
  private HashMap<String,Vertex> vertexMap=new HashMap<>();

  /// foo
  private HashSet<Vertex> vertexSet=new HashSet<>();

  /// foo
  /// @param s  foo
  /// @return Vertex
  public Vertex vertex(String s){
    if(vertexMap.containsKey(s))return vertexMap.get(s);
    Vertex v=new Vertex(s);
    vertexMap.put(s,v);
    vertexSet.add(v);
    return v;
  }

  /// foo
  public void insertEdge(String v, String u, int w){
    insertEdge(vertex(v),vertex(u),w);
  }

  /// foo
  public Collection<Vertex> vertices() { return vertexSet;  }

  /// foo
  /// @param v1  foo
  /// @param v2  foo
  /// @param w   foo
  abstract public void insertEdge(Vertex v1, Vertex v2, int w);

  /// foo
  abstract public Collection<Edge> edges();

  /// foo
  abstract public Collection<Edge> outEdge(Vertex v);

  /// foo
  abstract public Integer getWeight(Vertex v1, Vertex v2);
}