Skip to content
Graph.java 1.25 KiB
Newer Older
Javier Costa's avatar
Javier Costa committed
package tfm.graphs;
Javier Costa's avatar
Javier Costa committed

Javier Costa's avatar
Javier Costa committed
import tfm.arcs.Arc;
import tfm.arcs.data.ArcData;
Javier Costa's avatar
Javier Costa committed
import tfm.nodes.Node;
Javier Costa's avatar
Javier Costa committed

import java.util.Comparator;
import java.util.stream.Collectors;

/**
 * A graphlibGraph without cost and data in arcs
 * */
Javier Costa's avatar
Javier Costa committed
public abstract class Graph<NodeType extends Node> extends edg.graphlib.Graph<String, ArcData> {
Javier Costa's avatar
Javier Costa committed

Javier Costa's avatar
Javier Costa committed
    public final static class NodeId {
Javier Costa's avatar
Javier Costa committed
        private static int nextVertexId = 0;

        private int id;

Javier Costa's avatar
Javier Costa committed
        private NodeId(int id) {
Javier Costa's avatar
Javier Costa committed
            this.id = id;
        }

Javier Costa's avatar
Javier Costa committed
        static synchronized NodeId getVertexId() {
            return new NodeId(nextVertexId++);
Javier Costa's avatar
Javier Costa committed
        }

        public int getId() {
            return id;
        }

        @Override
        public String toString() {
            return String.valueOf(id);
        }
    }

    public Graph() {
        super();
    }

    @SuppressWarnings("unchecked")
Javier Costa's avatar
Javier Costa committed
    public NodeType getRootNode() {
Javier Costa's avatar
Javier Costa committed
        return (NodeType) super.getRootVertex();
    }

Javier Costa's avatar
Javier Costa committed
    public abstract NodeType addNode(String instruction, int fileNumber);
Javier Costa's avatar
Javier Costa committed

    public String toString() {
        return getVerticies().stream()
                .map(edg.graphlib.Vertex::toString)
                .collect(Collectors.joining(System.lineSeparator()));
    }

Javier Costa's avatar
Javier Costa committed
    public abstract String toGraphvizRepresentation();
Javier Costa's avatar
Javier Costa committed

}