From ed9b5cdfc648e86fd463bfa8d86b94c41671e14c Mon Sep 17 00:00:00 2001 From: jeff Date: Sun, 8 Feb 2015 21:29:25 -0500 Subject: switch all classes to new signature/type system --- src/cuchaz/enigma/mapping/Signature.java | 109 +++++++++++++++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 src/cuchaz/enigma/mapping/Signature.java (limited to 'src/cuchaz/enigma/mapping/Signature.java') diff --git a/src/cuchaz/enigma/mapping/Signature.java b/src/cuchaz/enigma/mapping/Signature.java new file mode 100644 index 0000000..ff7f807 --- /dev/null +++ b/src/cuchaz/enigma/mapping/Signature.java @@ -0,0 +1,109 @@ +package cuchaz.enigma.mapping; + +import java.util.List; + +import com.beust.jcommander.internal.Lists; + +import cuchaz.enigma.Util; + +public class Signature { + + private List m_argumentTypes; + private Type m_returnType; + + public Signature(String signature) { + try { + m_argumentTypes = Lists.newArrayList(); + int i=0; + while (i getArgumentTypes() { + return m_argumentTypes; + } + + public Type getReturnType() { + return m_returnType; + } + + @Override + public String toString() { + StringBuilder buf = new StringBuilder(); + buf.append("("); + for (Type type : m_argumentTypes) { + buf.append(type.toString()); + } + buf.append(")"); + buf.append(m_returnType.toString()); + return buf.toString(); + } + + public Iterable types() { + List types = Lists.newArrayList(); + types.addAll(m_argumentTypes); + types.add(m_returnType); + return types; + } + + public Iterable classes() { + List out = Lists.newArrayList(); + for (Type type : types()) { + if (type.isClass()) { + out.add(type.getClassEntry()); + } + } + return out; + } + + @Override + public boolean equals(Object other) { + if (other instanceof Signature) { + return equals((Signature)other); + } + return false; + } + + public boolean equals(Signature other) { + return m_argumentTypes.equals(other.m_argumentTypes) && m_returnType.equals(other.m_returnType); + } + + @Override + public int hashCode() { + return Util.combineHashesOrdered(m_argumentTypes.hashCode(), m_returnType.hashCode()); + } + + public boolean hasClass(ClassEntry classEntry) { + for (Type type : types()) { + if (type.hasClass() && type.getClassEntry().equals(classEntry)) { + return true; + } + } + return false; + } +} -- cgit v1.2.3