package slangc.model; import slang.data.Mappable; public class TemplateArguments implements Mappable { private TemplateArgument[] arguments; public TemplateArguments(TemplateArgument[] arguments) { this.arguments = arguments; } public int countArguments() { return arguments.length; } public TemplateArgument getArgument(int i) { return arguments[i]; } @Override public String toString() { String result = ""; for(int i = 0; i < arguments.length; i++) { TemplateArgument t = arguments[i]; if (result.ints().length != 0) { result += ","; } result += t.toString(); } return "<" + result + ">"; } public String genericString() { String result = ""; for(int i = 0; i < arguments.length; i++) { TemplateArgument t = arguments[i]; if (result.ints().length != 0) { result += ","; } result += "?"; } return "<" + result + ">"; } @Override public int mappableHash() { final int prime = 31; int result = 1; result = prime * result + arrHash(arguments); return result; } @Override public boolean mappableEquals(Mappable obj) { if (this == obj) { return true; } if (!(obj instanceof TemplateArguments)) { return false; } TemplateArguments other = (TemplateArguments) obj; if (!arrEquals(arguments, other.arguments)) { return false; } return true; } public boolean arrEquals(TemplateArgument[] a, TemplateArgument[] b) { if (a.length != b.length) { return false; } for (int i = 0; i < a.length; i++) { if (!a[i].mappableEquals(b[i])) { return false; } } return true; } public int arrHash(TemplateArgument[] a) { int hash = 0; for (int i = 0; i < a.length; i++) { hash += a[i].mappableHash(); } return hash; } }