package slangc.model; import slang.data.List; public abstract class AbstractMemberSet { TypeModel owner; MemberCategory category; private List array = new List(); 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"); } }