Newer
Older
AlgebraicDataflowArchitectureModel / AlgebraicDataflowArchitectureModel / src / models / controlFlowModel / ObjectNode.java
Shohei Yamagiwa 17 days ago 1 KB Format files
package models.controlFlowModel;

import models.Edge;
import models.Node;

import java.util.ArrayList;
import java.util.List;

public class ObjectNode extends Node {
	protected String name = "";
	
	public ObjectNode(String name) {
		inEdges = new ArrayList<>();
		outEdges = new ArrayList<>();
		
		this.name = name;
	}
	
	public String getName() {
		return name;
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
	public CallEdge getInEdge(int i) {
		return (CallEdge) ((List<Edge>) inEdges).get(i);
	}
	
	public CallEdge getOutEdge(int i) {
		return (CallEdge) ((List<Edge>) outEdges).get(i);
	}
	
	public CallEdge findEdgeInInEdges(final CallEdge edge) {
		for (Edge e : inEdges) {
			if (e instanceof CallEdge) return (CallEdge) e;
		}
		return null;
	}
	
	public void insertOutEdge(CallEdge edge, int n) {
		((List<Edge>) outEdges).add(n, edge);
	}
	
	public int getChildrenNum() {
		return outEdges.size();
	}
	
	public int getOutEdgeCallOrder(final CallEdge callEdge) {
		for (int i = 0; i < outEdges.size(); i++) {
			if (callEdge.equals(getOutEdge(i))) return i;
		}
		return -1;
	}
	
	public ObjectNode getChildren(int i) {
		return (ObjectNode) ((List<Edge>) outEdges).get(i).getDestination();
	}
	
	/*************************************************************
	 * 指定したエッジ(出力側)の呼び出し順を変更する. 
	 * @param curOrder 現在の呼び出し順
	 * @param newCallOrder 新しい呼び出し順
	 */
	public void sortOutEdgesByCallOrder(final int curOrder, final int newCallOrder) {
		ArrayList<Edge> edges = ((ArrayList<Edge>) outEdges);
		Edge selectedEdge = ((List<Edge>) outEdges).get(curOrder);
		
		Edge tempEdge = ((List<Edge>) outEdges).get(newCallOrder - 1);
		
		edges.set(newCallOrder - 1, selectedEdge);
		edges.set(curOrder, tempEdge);
	}
}