package freeboogie.ast.gen;
import java.util.ArrayList;
import java.util.List;
/**
* Represents a class from the abstract grammar.
*
* @author rgrig
* @author reviewed by TODO
*/
public class AgClass implements Comparable<AgClass> {
/** The name of the class. */
public String name = null;
/** The base class of this class. Should be nonnull for a consistent grammar. */
public String base = null;
/** The class members. */
public List<AgMember> members = new ArrayList<AgMember>(10);
/** The enums defined in this class. */
public List<AgEnum> enums = new ArrayList<AgEnum>();
/** The (textual) invariants that this class must obey. */
public List<String> invariants = new ArrayList<String>();
private AgEnum getExistentEnum(String enumName) {
for (AgEnum e : enums) if (e.name.equals(enumName)) return e;
return null;
}
/**
* Returns whether an enum with the given name exists already.
* @param enumName The enum neme to test.
* @return Whether an enum with that name exists.
*/
public boolean hasEnum(String enumName) {
return getExistentEnum(enumName) != null;
}
/**
* Returns the enum with a certain name or creates one if none
* exists. This function does a linear search so it is a good
* candidate for performance improvement if needed. I don't expect
* that to be the case because typically a class has at most one enum.
*
* @param enumName the name of the enum
* @return an {@code AgEnum} object representing the requested enum
*/
public AgEnum getEnum(String enumName) {
AgEnum r = getExistentEnum(enumName);
if (r == null) {
r = new AgEnum();
r.name = enumName;
enums.add(r);
}
return r;
}
/* @see java.lang.Comparable#compareTo(java.lang.Object) */
public int compareTo(AgClass o) {
return name.compareTo(o.name);
}
}