Commit bca373cc authored by Javier Costa's avatar Javier Costa
Browse files

JGraphT without visitors

parent 1a40875c
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -2,3 +2,4 @@
.idea/
target/
out/
.settings
 No newline at end of file
+26 −39
Original line number Diff line number Diff line
package tfm.arcs;

import tfm.arcs.data.ArcData;
import org.jgrapht.graph.DefaultEdge;;
import tfm.nodes.GraphNode;

import java.util.Objects;
import java.util.Optional;

public abstract class Arc<D extends ArcData> extends edg.graphlib.Arrow<String, D> {
public abstract class Arc extends DefaultEdge {

    @SuppressWarnings("unchecked")
    public Arc(GraphNode<?> from, GraphNode<?> to) {
        super((edg.graphlib.Vertex<String, D>) from, (edg.graphlib.Vertex<String, D>) to);
    private String variable;

    public Arc() {

    }

    public Arc(String variable) {
        this.variable = variable;
    }

    public abstract boolean isControlFlowArrow();
@@ -18,18 +24,14 @@ public abstract class Arc<D extends ArcData> extends edg.graphlib.Arrow<String,

    public abstract boolean isDataDependencyArrow();

    @Override
    public String toString() {
        return String.format("Arc{data: %s, %s -> %s}",
                getData(),
                getFrom(),
                getTo()
        );
    public Optional<String> getVariable() {
        return Optional.ofNullable(this.variable);
    }

    public String toGraphvizRepresentation() {
        GraphNode from = (GraphNode) getFrom();
        GraphNode to = (GraphNode) getTo();
    @Override
    public String toString() {
        GraphNode<?> from = (GraphNode<?>) getSource();
        GraphNode<?> to = (GraphNode<?>) getTarget();

        return String.format("%s -> %s",
                from.getId(),
@@ -37,36 +39,21 @@ public abstract class Arc<D extends ArcData> extends edg.graphlib.Arrow<String,
        );
    }

    public GraphNode<?> getFromNode() {
        return (GraphNode<?>) super.getFrom();
    }

    public GraphNode<?> getToNode() {
        return (GraphNode<?>) super.getTo();
    }

    @Override
    public int hashCode() {
        return Objects.hashCode(getData()) + getFrom().hashCode() + getTo().hashCode();
    public String toGraphvizRepresentation() {
        return toString();
    }

    @Override
    public boolean equals(Object o) {
        if (this == o)
            return true;

        if (!(o instanceof Arc))
        if (this != o) {
            return false;
        }

        Arc arc = (Arc) o;

        GraphNode from = (GraphNode) arc.getFrom();
        GraphNode from2 = (GraphNode) getFrom();
        GraphNode to = (GraphNode) getTo();
        GraphNode to2 = (GraphNode) arc.getTo();
        return Objects.equals(variable, ((Arc) o).variable);
    }

        return Objects.equals(arc.getData(), getData()) &&
                Objects.equals(from.getId(), from2.getId()) &&
                Objects.equals(to.getId(), to2.getId());
    @Override
    public int hashCode() {
        return Objects.hash(variable, getSource(), getTarget());
    }
}
+3 −7
Original line number Diff line number Diff line
@@ -4,10 +4,9 @@ import tfm.arcs.Arc;
import tfm.arcs.data.VoidArcData;
import tfm.nodes.GraphNode;

public class ControlFlowArc extends Arc<VoidArcData> {
public class ControlFlowArc extends Arc {

    public ControlFlowArc(GraphNode from, GraphNode to) {
        super(from, to);
    public ControlFlowArc() {
    }

    @Override
@@ -27,10 +26,7 @@ public class ControlFlowArc extends Arc<VoidArcData> {

    @Override
    public String toString() {
        return String.format("ControlFlowArc{%s -> %s}",
                getFromNode().getId(),
                getToNode().getId()
        );
        return String.format("ControlFlowArc{%s}", super.toString());
    }

}
+0 −8
Original line number Diff line number Diff line
package tfm.arcs.data;

public abstract class ArcData {

    public abstract boolean isVoid();

    public abstract boolean isVariable();
}
+0 −37
Original line number Diff line number Diff line
package tfm.arcs.data;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;

public class VariableArcData extends ArcData {
    private List<String> variables;

    public VariableArcData(String... variables) {
        this(Arrays.asList(variables));
    }

    public VariableArcData(Collection<? extends String> variables) {
        this.variables = new ArrayList<>(variables);
    }

    public List<String> getVariables() {
        return variables;
    }

    @Override
    public boolean isVoid() {
        return false;
    }

    @Override
    public boolean isVariable() {
        return true;
    }

    @Override
    public String toString() {
        return variables.toString();
    }
}
Loading