X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.databoard%2Fsrc%2Forg%2Fsimantics%2Fdataboard%2Funits%2FConverterCreator.java;h=931d943ca350b28025a73cefb02b050047763a7b;hb=ec2bfe436698e74bdcb0b7708b246fe1971d557b;hp=12748f9e2e6c641903b0eb334aebf3ae319772d9;hpb=969bd23cab98a79ca9101af33334000879fb60c5;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.databoard/src/org/simantics/databoard/units/ConverterCreator.java b/bundles/org.simantics.databoard/src/org/simantics/databoard/units/ConverterCreator.java index 12748f9e2..931d943ca 100644 --- a/bundles/org.simantics.databoard/src/org/simantics/databoard/units/ConverterCreator.java +++ b/bundles/org.simantics.databoard/src/org/simantics/databoard/units/ConverterCreator.java @@ -1,78 +1,78 @@ -/******************************************************************************* - * Copyright (c) 2010 Association for Decentralized Information Management in - * Industry THTH ry. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * VTT Technical Research Centre of Finland - initial API and implementation - *******************************************************************************/ -package org.simantics.databoard.units; - -import gnu.trove.map.hash.TObjectIntHashMap; -import gnu.trove.procedure.TObjectIntProcedure; - -import org.simantics.databoard.units.internal.library.UnitConversion; -import org.simantics.databoard.units.internal.library.UnitLibrary; -import org.simantics.databoard.units.internal.parser.UnitParser; - -public class ConverterCreator extends UnitParser implements TObjectIntProcedure { - - UnitLibrary library; - TObjectIntHashMap exponents = new TObjectIntHashMap(); - double scale = 1.0; - int magnitude = 0; - - public ConverterCreator(UnitLibrary library) { - this.library = library; - } - - @Override - public void visit(String baseUnit, int exponent) { - if(exponents.adjustOrPutValue(baseUnit, exponent, exponent)==0) - exponents.remove(baseUnit); - } - - public IUnitConverter createConverter() { - if(exponents.isEmpty()) - return IdentityConverter.INSTANCE; - TObjectIntHashMap oldExponents = exponents; - exponents = new TObjectIntHashMap(); - oldExponents.forEachEntry(this); - if(exponents.isEmpty()) { - if(magnitude == 0 && scale == 1.0) - return IdentityConverter.INSTANCE; - else - return new LinearConverter(scale * Math.pow(10.0, magnitude)); - } - else { -// for(String u : exponents.keys(new String[exponents.size()])) -// System.out.println(u + exponents.get(u)); - return null; - } - } - - @Override - public boolean execute(String unit, int exponent) { - UnitConversion conversion = library.getConversion(unit); - if(conversion == null) { - if(exponents.adjustOrPutValue(unit, exponent, exponent)==0) - exponents.remove(unit); - } - else { - if(conversion.scale != 1.0) - scale *= Math.pow(conversion.scale, exponent); - magnitude += conversion.magnitude * exponent; - for(int i=0;i { + + UnitLibrary library; + TObjectIntHashMap exponents = new TObjectIntHashMap(); + double scale = 1.0; + int magnitude = 0; + + public ConverterCreator(UnitLibrary library) { + this.library = library; + } + + @Override + public void visit(String baseUnit, int exponent) { + if(exponents.adjustOrPutValue(baseUnit, exponent, exponent)==0) + exponents.remove(baseUnit); + } + + public IUnitConverter createConverter() { + if(exponents.isEmpty()) + return IdentityConverter.INSTANCE; + TObjectIntHashMap oldExponents = exponents; + exponents = new TObjectIntHashMap(); + oldExponents.forEachEntry(this); + if(exponents.isEmpty()) { + if(magnitude == 0 && scale == 1.0) + return IdentityConverter.INSTANCE; + else + return new LinearConverter(scale * Math.pow(10.0, magnitude)); + } + else { +// for(String u : exponents.keys(new String[exponents.size()])) +// System.out.println(u + exponents.get(u)); + return null; + } + } + + @Override + public boolean execute(String unit, int exponent) { + UnitConversion conversion = library.getConversion(unit); + if(conversion == null) { + if(exponents.adjustOrPutValue(unit, exponent, exponent)==0) + exponents.remove(unit); + } + else { + if(conversion.scale != 1.0) + scale *= Math.pow(conversion.scale, exponent); + magnitude += conversion.magnitude * exponent; + for(int i=0;i