slcom/slangc/model/TemplateArguments.sauce

92 lines
1.8 KiB
Plaintext

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;
}
}