/* GeoGebra - Dynamic Mathematics for Everyone http://www.geogebra.org This file is part of GeoGebra. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation. */ package org.geogebra.common.kernel.arithmetic; import java.util.HashSet; import org.geogebra.common.kernel.Construction; import org.geogebra.common.kernel.Kernel; import org.geogebra.common.kernel.StringTemplate; import org.geogebra.common.kernel.commands.EvalInfo; import org.geogebra.common.kernel.geos.GeoBoolean; import org.geogebra.common.kernel.geos.GeoElement; /** * Helper class to evaluate expressions with GeoBoolean objects in it. * * @see ExpressionNode#evaluate(StringTemplate) * @author Markus Hohenwarter */ public class MyBoolean extends ValidExpression implements BooleanValue, NumberValue { private boolean value; private Kernel kernel; // #5223 private boolean isDefined = true; /** * Creates new boolean * * @param kernel * kernel * @param value * boolean value */ public MyBoolean(Kernel kernel, boolean value) { this.value = value; this.kernel = kernel; } /** * @param kernel * kernel * @param value * true or false * @param defined * whether it's defined */ public MyBoolean(Kernel kernel, boolean value, boolean defined) { this(kernel, value); this.isDefined = defined; } /** * Sets value of this boolean * * @param value * new value */ final public void setValue(boolean value) { this.value = value; } @Override public String toString(StringTemplate tpl) { return value ? "true" : "false"; } @Override public boolean isConstant() { return true; } @Override final public boolean isLeaf() { return true; } @Override public void resolveVariables(EvalInfo info) { // do nothing } @Override final public boolean isNumberValue() { return true; } @Override public MyBoolean deepCopy(Kernel kernel1) { return new MyBoolean(kernel1, value); } @Override public HashSet<GeoElement> getVariables() { return null; } @Override final public String toValueString(StringTemplate tpl) { return toString(tpl); } @Override final public String toLaTeXString(boolean symbolic, StringTemplate tpl) { return toString(tpl); } @Override final public boolean contains(ExpressionValue ev) { return ev == this; } @Override final public MyBoolean getMyBoolean() { return new MyBoolean(kernel, value); } @Override final public boolean getBoolean() { return value; } /** * Returns 1 for true and 0 for false. */ @Override public double getDouble() { return value ? 1 : 0; } @Override public String toOutputValueString(StringTemplate tpl) { return toValueString(tpl); } /** * @return kernel */ public Kernel getKernel() { return kernel; } @Override public GeoElement toGeoElement(Construction cons) { return new GeoBoolean(cons, value); } @Override public MyDouble getNumber() { return new MyDouble(kernel, getDouble()); } @Override public int getAngleDim() { return 0; } @Override public boolean isDefined() { return isDefined; } @Override public ExpressionNode wrap() { return new ExpressionNode(kernel, this); } /** * @param defined * whether it's defined or not */ public void setDefined(boolean defined) { this.isDefined = defined; } @Override public String getLabel(StringTemplate tpl) { return toValueString(tpl); } @Override public ValueType getValueType() { return ValueType.BOOLEAN; } }