/* * Copyright (c) 2014 tabletoptool.com team. * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html * * Contributors: * rptools.com team - initial implementation * tabletoptool.com team - further development */ package com.t3.dice.expression; import java.util.ArrayList; import java.util.BitSet; import java.util.Random; import com.t3.xstreamversioned.version.SerializationVersion; @SerializationVersion(0) public class MultiplicationNode extends Expression { private ArrayList<Expression> nodes; private BitSet operations; public MultiplicationNode(Expression first) { nodes=new ArrayList<Expression>(10); nodes.add(first); operations=new BitSet(); operations.set(nodes.size()-1, true); } @Override public float getResult(Random random) { int product=1; for(int i=0;i<nodes.size();i++) { if(operations.get(i)) product*=nodes.get(i).getResult(random); else product/=nodes.get(i).getResult(random); } return product; } public void multiplyBy(Expression term) { nodes.add(term); operations.set(nodes.size()-1, true); } public void divideBy(Expression term) { nodes.add(term); operations.set(nodes.size()-1, false); } @Override public String toString() { StringBuilder sb=new StringBuilder(); for(int i=0;i<nodes.size();i++) { if(i>0) { if(operations.get(i)) sb.append('\u00D7'); else sb.append('\u00F7'); } if(operations.get(i)) sb.append(nodes.get(i).toString()); else sb.append(nodes.get(i).toString()); } return sb.toString(); } @Override public String toEvaluatedString() { StringBuilder sb=new StringBuilder(); for(int i=0;i<nodes.size();i++) { if(i>0) { if(operations.get(i)) sb.append('\u00D7'); else sb.append('\u00F7'); } if(operations.get(i)) sb.append(nodes.get(i).toEvaluatedString()); else sb.append(nodes.get(i).toEvaluatedString()); } return sb.toString(); } }