Skip to content

Commit

Permalink
Add number math functions
Browse files Browse the repository at this point in the history
  • Loading branch information
ngallagher committed Jan 29, 2019
1 parent 108aa2f commit 72bb24f
Show file tree
Hide file tree
Showing 12 changed files with 262 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ public Score toType(Type actual, Type constraint) throws Exception {
if(list.isEmpty()) {
return INVALID;
}
if(list.contains(constraint)) {
if(list.contains(constraint)) { // this is slow
return SIMILAR;
}
int modifiers = actual.getModifiers();
Expand All @@ -55,7 +55,7 @@ public Score toType(Type actual, Type constraint, Object value) throws Exception
if(list.isEmpty()) {
return INVALID;
}
if(list.contains(constraint)) {
if(list.contains(constraint)) { // this is slow
return SIMILAR;
}
int modifiers = actual.getModifiers();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,7 @@ public Promise join(long wait, TimeUnit unit) {
public Promise failure(Task task) {
if(task != null) {
future.failure(task);
future.error();
}
return this;
}
Expand All @@ -114,6 +115,7 @@ public Promise failure(Runnable task) {

if(task != null) {
future.failure(adapter);
future.error();
}
return this;
}
Expand All @@ -122,6 +124,7 @@ public Promise failure(Runnable task) {
public Promise success(Task task) {
if(task != null) {
future.success(task);
future.complete();
}
return this;
}
Expand All @@ -132,6 +135,7 @@ public Promise success(Runnable task) {

if(task != null) {
future.success(adapter);
future.complete();
}
return this;
}
Expand Down Expand Up @@ -239,27 +243,21 @@ public void error() {
}

public void success(Task task) {
if(listeners.add(task)) {
complete();
}
listeners.add(task);
}

public void failure(Task task) {
if(failures.add(task)) {
error();
}
failures.add(task);
}

public void success(Value value) {
if(success.compareAndSet(null, value)) {
task.run();
}
success.compareAndSet(null, value);
task.run();
}

public void failure(Object cause) {
if(error.compareAndSet(null, cause)) {
task.run();
}
error.compareAndSet(null, cause);
task.run();
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package org.snapscript.core.type.extend;

import static java.math.RoundingMode.CEILING;
import static java.math.RoundingMode.FLOOR;

import java.math.BigDecimal;
import java.math.BigInteger;

public class BigDecimalExtension implements NumberExtension<BigDecimal> {

public BigDecimalExtension() {
super();
}

@Override
public BigDecimal abs(BigDecimal number) {
return number.abs();
}

@Override
public BigDecimal ceil(BigDecimal number) {
return number.setScale(0, CEILING);
}

@Override
public BigDecimal floor(BigDecimal number) {
return number.setScale(0, FLOOR);
}

@Override
public BigInteger round(BigDecimal number) {
return number.toBigInteger();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package org.snapscript.core.type.extend;

import java.math.BigInteger;

public class BigIntegerExtension implements NumberExtension<BigInteger> {

public BigIntegerExtension() {
super();
}

@Override
public BigInteger abs(BigInteger number) {
return number.abs();
}

@Override
public BigInteger ceil(BigInteger number) {
return number;
}

@Override
public BigInteger floor(BigInteger number) {
return number;
}

@Override
public BigInteger round(BigInteger number) {
return number;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package org.snapscript.core.type.extend;

public class ByteExtension implements NumberExtension<Byte> {

public ByteExtension() {
super();
}

@Override
public Integer abs(Byte number) {
return Math.abs(number);
}

@Override
public Byte ceil(Byte number) {
return number;
}

@Override
public Byte floor(Byte number) {
return number;
}

@Override
public Byte round(Byte number) {
return number;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
import java.io.OutputStream;
import java.io.Reader;
import java.io.Writer;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.net.URL;
import java.net.URLConnection;
import java.util.Date;
Expand Down Expand Up @@ -37,6 +39,14 @@ public List<Function> extend(Class type){
registry.register(URLConnection.class, URLConnectionExtension.class);
registry.register(URL.class, URLExtension.class);
registry.register(Iterator.class, IteratorExtension.class);
registry.register(BigDecimal.class, BigDecimalExtension.class);
registry.register(BigInteger.class, BigIntegerExtension.class);
registry.register(Integer.class, IntegerExtension.class);
registry.register(Long.class, LongExtension.class);
registry.register(Double.class, DoubleExtension.class);
registry.register(Float.class, FloatExtension.class);
registry.register(Byte.class, ByteExtension.class);
registry.register(Short.class, ShortExtension.class);
registry.register(Scope.class, ScopeExtension.class);
done.set(true);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package org.snapscript.core.type.extend;

public class DoubleExtension implements NumberExtension<Double> {

public DoubleExtension() {
super();
}

@Override
public Double abs(Double number) {
return Math.abs(number);
}

@Override
public Double ceil(Double number) {
return Math.ceil(number);
}

@Override
public Double floor(Double number) {
return Math.floor(number);
}

@Override
public Long round(Double number) {
return Math.round(number);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package org.snapscript.core.type.extend;

public class FloatExtension implements NumberExtension<Float> {

public FloatExtension() {
super();
}

@Override
public Float abs(Float number) {
return Math.abs(number);
}

@Override
public Double ceil(Float number) {
return Math.ceil(number);
}

@Override
public Double floor(Float number) {
return Math.floor(number);
}

@Override
public Integer round(Float number) {
return Math.round(number);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package org.snapscript.core.type.extend;

public class IntegerExtension implements NumberExtension<Integer> {

public IntegerExtension() {
super();
}

@Override
public Integer abs(Integer number) {
return Math.abs(number);
}

@Override
public Integer ceil(Integer number) {
return number;
}

@Override
public Integer floor(Integer number) {
return number;
}

@Override
public Integer round(Integer number) {
return number;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package org.snapscript.core.type.extend;

public class LongExtension implements NumberExtension<Long> {

public LongExtension() {
super();
}

@Override
public Long abs(Long number) {
return Math.abs(number);
}

@Override
public Long ceil(Long number) {
return number;
}

@Override
public Long floor(Long number) {
return number;
}

@Override
public Long round(Long number) {
return number;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package org.snapscript.core.type.extend;

public interface NumberExtension<T extends Number> {
Number abs(T number);
Number ceil(T number);
Number floor(T number);
Number round(T number);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package org.snapscript.core.type.extend;

public class ShortExtension implements NumberExtension<Short> {

public ShortExtension() {
super();
}

@Override
public Integer abs(Short number) {
return Math.abs(number);
}

@Override
public Short ceil(Short number) {
return number;
}

@Override
public Short floor(Short number) {
return number;
}

@Override
public Short round(Short number) {
return number;
}
}

0 comments on commit 72bb24f

Please sign in to comment.