com.speedment.runtime.field.internal.comparator.DoubleFieldComparatorImpl Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of runtime-deploy Show documentation
Show all versions of runtime-deploy Show documentation
A Speedment bundle that shades all dependencies into one jar. This is
useful when deploying an application on a server.
/**
*
* Copyright (c) 2006-2019, Speedment, Inc. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License"); You may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.speedment.runtime.field.internal.comparator;
import com.speedment.common.annotation.GeneratedCode;
import com.speedment.runtime.field.comparator.DoubleFieldComparator;
import com.speedment.runtime.field.comparator.FieldComparator;
import com.speedment.runtime.field.comparator.NullOrder;
import com.speedment.runtime.field.trait.HasDoubleValue;
import java.util.Objects;
import static com.speedment.common.invariant.NullUtil.requireNonNulls;
import static java.util.Objects.requireNonNull;
/**
* @param entity type
* @param database type
*
* @author Emil Forslund
* @since 3.0.0
*/
@GeneratedCode(value = "Speedment")
public final class DoubleFieldComparatorImpl
extends AbstractFieldComparator
implements DoubleFieldComparator {
private final HasDoubleValue field;
private final boolean reversed;
public DoubleFieldComparatorImpl(HasDoubleValue field) {
this(field, false);
}
DoubleFieldComparatorImpl(HasDoubleValue field, boolean reversed) {
this.field = requireNonNull(field);
this.reversed = reversed;
}
@Override
public HasDoubleValue getField() {
return field;
}
@Override
public NullOrder getNullOrder() {
return NullOrder.NONE;
}
@Override
public boolean isReversed() {
return reversed;
}
@Override
public DoubleFieldComparatorImpl reversed() {
return new DoubleFieldComparatorImpl<>(field, !reversed);
}
@Override
public int compare(ENTITY first, ENTITY second) {
requireNonNulls(first, second);
final double a = field.getAsDouble(first);
final double b = field.getAsDouble(second);
return applyReversed(Double.compare(a, b));
}
@Override
public int hashCode() {
return (4049 + Objects.hashCode(this.field.identifier())) * 3109
+ Boolean.hashCode(reversed);
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (!(obj instanceof FieldComparator)) return false;
@SuppressWarnings("unchecked")
final FieldComparator casted =
(FieldComparator) obj;
return reversed == casted.isReversed()
&& Objects.equals(
field.identifier(),
casted.getField().identifier()
);
}
@Override
public String toString() {
return "(order by " + field.identifier() + " " +
(reversed ? "descending" : "ascending") + ")";
}
private int applyReversed(double compare) {
if (compare == 0) {
return 0;
} else {
if (reversed) {
if (compare > 0) {
return -1;
} else {
return 1;
}
} else {
if (compare > 0) {
return 1;
} else {
return -1;
}
}
}
}
}