67 lines
1.5 KiB
Plaintext
67 lines
1.5 KiB
Plaintext
package slangc.model;
|
|
|
|
import slang.data.List;
|
|
|
|
public abstract class AbstractMemberSet {
|
|
TypeModel owner;
|
|
MemberCategory category;
|
|
private List<MemberModel> array = new List<MemberModel>();
|
|
|
|
public AbstractMemberSet(TypeModel owner, MemberCategory category) {
|
|
this.owner = owner;
|
|
this.category = category;
|
|
}
|
|
|
|
|
|
public TypeModel getOwner() {
|
|
return owner;
|
|
}
|
|
|
|
public MemberCategory getCategory() {
|
|
return category;
|
|
}
|
|
|
|
public void addMember(MemberModel field) {
|
|
if (field.getCategory() != getCategory()) {
|
|
throw new Error("Tried to add member in category " + field.getCategory() + " in set of different category " + getCategory());
|
|
}
|
|
array.append(field);
|
|
}
|
|
|
|
public int countMembers() {
|
|
return array.count();
|
|
}
|
|
|
|
public int countMembersNamed(String name) {
|
|
int count = 0;
|
|
for (int i = 0; i < array.count(); i++) {
|
|
if (array.get(i).matchesName(null, name)) {
|
|
count++;
|
|
}
|
|
}
|
|
return count;
|
|
}
|
|
|
|
public boolean hasMemberNamed(String name) {
|
|
return countMembersNamed(name) > 0;
|
|
}
|
|
|
|
public MemberModel getMember(int i) {
|
|
return array.get(i);
|
|
}
|
|
|
|
public MemberModel getMemberNamed(String name, int i) {
|
|
int count = 0;
|
|
for (int x = 0; x < array.count(); x++) {
|
|
if (array.get(x).matchesName(null, name)) {
|
|
if (count == i) {
|
|
return array.get(x);
|
|
} else {
|
|
count++;
|
|
}
|
|
}
|
|
}
|
|
throw new Error("Tried to get definition #" + i + " of members named '" + name + "' but only " + countMembersNamed(name) + " such definitions exist");
|
|
}
|
|
}
|