package midend.llvm.use; import java.util.ArrayList; import midend.llvm.value.IrValue; import midend.llvm.type.IrType; public class IrUser extends IrValue { private ArrayList uses; public IrUser(IrType type, String name) { super(type, name); this.uses = new ArrayList<>(); } public ArrayList getUses() { return uses; } public void addUse(IrValue value) { uses.add(value); if (value != null) { value.addUser(this); } } public IrValue getUse(int index) { if (index >= uses.size()) { return null; } return uses.get(index); } public void setUse(int index, IrValue value) { if (index >= uses.size() || index < 0) { return; } IrValue oldValue = uses.get(index); if (oldValue != null) { oldValue.deleteUser(this); } uses.set(index, value); if (value != null) { value.addUser(this); } } public void deleteUse(IrValue value) { uses.remove(value); if (value != null) { value.deleteUser(this); } } public void clearUses() { for (IrValue value : uses) { if (value != null) { value.deleteUser(this); } } uses.clear(); } public void deleteUse(int index) { if (index >= uses.size() || index < 0) { return; } IrValue value = uses.get(index); deleteUse(value); } public int getNumUses() { return uses.size(); } }