/* --------------------------------------------------------- * * __________ D E L T A S C R I P T * * (_________() * * / === / - A fast, dynamic scripting language * * | == | - Version 4.13.11.0 * * / === / - Developed by Adam R. Nelson * * | = = | - 2011-2013 * * / === / - Distributed under GNU LGPL v3 * * (________() - http://github.com/ar-nelson/deltascript * * * * --------------------------------------------------------- */ package com.sector91.delta.script.objects; import java.io.ObjectStreamException; import java.math.BigDecimal; import java.math.BigInteger; import com.sector91.delta.script.DScriptContext; import com.sector91.delta.script.DeltaScript; import com.sector91.delta.script.NumberTypes; import com.sector91.delta.script.annotations.DSDynamicField; import com.sector91.delta.script.annotations.DSInaccessible; import com.sector91.delta.script.annotations.DSName; import com.sector91.delta.script.annotations.DSType; import com.sector91.delta.script.objects.reflect.DS_JavaClass; /** * <p>A DeltaScript boolean value, which doubles as a numeric value.</p> * * <p>This class is a singleton (actually, two singletons). New instances cannot * be created; instead, access the existing singletons with * {@link #box(boolean)} or the constants {@link #TRUE} and {@link #FALSE}.</p> * * @author Adam R. Nelson * @version 4.13.11.0 */ @DSType("Boolean") public final class DS_Boolean extends DS_Scalar { private static final long serialVersionUID = DeltaScript.VERSION.majorVersion(); /** The value returned by {@link #getTypeName()}. */ public static final String TYPE_NAME = "Boolean"; /** The singleton DS_Boolean object representing {@code true}. */ @DSInaccessible public static final DS_Boolean TRUE = new DS_Boolean(true); /** The singleton DS_Boolean object representing {@code false}. */ @DSInaccessible public static final DS_Boolean FALSE = new DS_Boolean(false); private static final DS_JavaClass DSCLASS = DS_JavaClass.fromClass( DS_Boolean.class); /** * <p>Boxes a Java {@code boolean} as a DeltaScript boolean value.</p> * * @param value The Java {@code boolean} to box. * @return The DS_Boolean object representing the given boolean value. */ @DSInaccessible public static final DS_Boolean box(boolean value) {return value?TRUE:FALSE;} private final boolean value; private DS_Boolean(boolean value) {this.value = value;} @Override public int compare(DS_Object o) { boolean b1 = booleanValue(); boolean b2 = o.booleanValue(); if (b1 == b2) return 0; else if (b1==true && b2==false) return 1; else return -1; } public Object unbox() {return value;} @Override public boolean booleanValue() {return value;} public String getTypeName() {return TYPE_NAME;} @Override public String toString() {return value?"true":"false";} @DSInaccessible @Override public int getNumberType() {return NumberTypes.BOOL;} @DSInaccessible @Override public DS_Scalar random() { if (value) return box(DScriptContext.getContextRandom().nextBoolean()); else return FALSE; } @DSInaccessible @Override public int intValue() {return value?1:0;} @DSInaccessible @Override public long longValue() {return value?1L:0L;} @DSInaccessible @Override public float floatValue() {return value?1.0f:0.0f;} @DSInaccessible @Override public double doubleValue() {return value?1.0:0.0;} @DSInaccessible @Override public BigInteger bigIntegerValue() {return value?BigInteger.ONE:BigInteger.ZERO;} @DSInaccessible @Override public BigDecimal bigDecimalValue() {return value?BigDecimal.ONE:BigDecimal.ZERO;} @DSInaccessible @Override public final boolean isIntegral() {return true;} @Override public DS_Object clone() throws CloneNotSupportedException {return this;} @Override public int hashCode() {return value?1:0;} @DSName({"sgn", "signum"}) @DSDynamicField @Override public int signum() {return intValue();} @DSInaccessible @Override public DS_Scalar negate() { if (value == false) return this; else return ScalarFactory.fromInt(-1); } @DSInaccessible @Override public DS_Scalar absolute() {return this;} @DSInaccessible @Override public DS_Scalar increment(int amount) { if (value == false) return TRUE; else return ScalarFactory.fromInt(2); } @DSName("floor") @DSDynamicField @Override public DS_Integer floor() {return new DS_ShortIntScalar(intValue());} @DSName("ceil") @DSDynamicField @Override public DS_Integer ceil() {return new DS_ShortIntScalar(intValue());} @DSName("round") @DSDynamicField @Override public DS_Integer round() {return new DS_ShortIntScalar(intValue());} @DSName("sqrt") @DSDynamicField @Override public DS_Scalar sqrt() {return this;} @DSName("infinite") @DSDynamicField @Override public boolean isInfinite() {return false;} @DSName("NaN") @DSDynamicField @Override public boolean isNaN() {return false;} @Override protected DS_JavaClass getDeltaScriptClass() {return DSCLASS;} private Object readResolve() throws ObjectStreamException { if (value == true) { assert(TRUE != null); return TRUE; } else { assert(FALSE != null); return FALSE; } } }