package org.checkerframework.dataflow.cfg.block; import java.util.Collections; import java.util.LinkedList; import java.util.List; import org.checkerframework.dataflow.cfg.node.Node; /** * Implementation of a regular basic block. * * @author Stefan Heule * */ public class RegularBlockImpl extends SingleSuccessorBlockImpl implements RegularBlock { /** Internal representation of the contents. */ protected List<Node> contents; /** * Initialize an empty basic block to be filled with contents and linked to * other basic blocks later. */ public RegularBlockImpl() { contents = new LinkedList<>(); type = BlockType.REGULAR_BLOCK; } /** * Add a node to the contents of this basic block. */ public void addNode(Node t) { contents.add(t); t.setBlock(this); } /** * Add multiple nodes to the contents of this basic block. */ public void addNodes(List<? extends Node> ts) { for (Node t : ts) { addNode(t); } } @Override public List<Node> getContents() { return Collections.unmodifiableList(contents); } @Override public BlockImpl getRegularSuccessor() { return successor; } @Override public String toString() { return "RegularBlock(" + contents + ")"; } @Override public boolean isEmpty() { return contents.isEmpty(); } }