com.carrotsearch.hppc.generator.intrinsics.Equals Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of hppc-template-processor Show documentation
Show all versions of hppc-template-processor Show documentation
Template Processor and Code Generation for HPPC.
The newest version!
package com.carrotsearch.hppc.generator.intrinsics;
import java.util.ArrayList;
import java.util.regex.Matcher;
import com.carrotsearch.hppc.generator.TemplateOptions;
import com.carrotsearch.hppc.generator.Type;
public class Equals extends AbstractIntrinsicMethod {
@Override
public void invoke(Matcher m, StringBuilder sb, TemplateOptions templateOptions, String genericCast, ArrayList arguments) {
if (arguments.size() != 2 &&
arguments.size() != 3) {
throw new RuntimeException(format("Expected exactly 2 or 3 arguments but was %d: %s(%s)",
arguments.size(),
m.group(),
arguments));
}
String v1 = arguments.remove(arguments.size() - 1);
String v2 = arguments.remove(arguments.size() - 1);
Type type = super.inferTemplateType(m, templateOptions, genericCast);
switch (type) {
case GENERIC:
String comparer = arguments.isEmpty() ? "java.util.Objects" : arguments.get(0);
sb.append(format("%s.equals(%s, %s)", comparer, v1, v2));
break;
case FLOAT:
sb.append(format("(Float.floatToIntBits(%s) == Float.floatToIntBits(%s))", v1, v2));
break;
case DOUBLE:
sb.append(format("(Double.doubleToLongBits(%s) == Double.doubleToLongBits(%s))", v1, v2));
break;
case BYTE:
case SHORT:
case CHAR:
case INT:
case LONG:
sb.append(format("((%s) == (%s))", v1, v2));
break;
default:
throw unreachable();
}
}
}