001/** 002 * The MIT License (MIT) 003 * 004 * Copyright (c) 2015-2016 decimal4j (tools4j), Marco Terzer 005 * 006 * Permission is hereby granted, free of charge, to any person obtaining a copy 007 * of this software and associated documentation files (the "Software"), to deal 008 * in the Software without restriction, including without limitation the rights 009 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 010 * copies of the Software, and to permit persons to whom the Software is 011 * furnished to do so, subject to the following conditions: 012 * 013 * The above copyright notice and this permission notice shall be included in all 014 * copies or substantial portions of the Software. 015 * 016 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 017 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 018 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 019 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 020 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 021 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 022 * SOFTWARE. 023 */ 024package org.decimal4j.arithmetic; 025 026import java.io.IOException; 027 028import org.decimal4j.scale.ScaleMetrics; 029 030/** 031 * Base class for arithmetic implementations with overflow check for scales 032 * other than zero. 033 */ 034abstract public class AbstractCheckedScaleNfArithmetic extends AbstractCheckedArithmetic { 035 036 private final ScaleMetrics scaleMetrics; 037 038 /** 039 * Constructor with scale metrics for this arithmetic. 040 * 041 * @param scaleMetrics 042 * the scale metrics 043 */ 044 public AbstractCheckedScaleNfArithmetic(ScaleMetrics scaleMetrics) { 045 this.scaleMetrics = scaleMetrics; 046 } 047 048 @Override 049 public final ScaleMetrics getScaleMetrics() { 050 return scaleMetrics; 051 } 052 053 @Override 054 public final int getScale() { 055 return scaleMetrics.getScale(); 056 } 057 058 @Override 059 public final long one() { 060 return scaleMetrics.getScaleFactor(); 061 } 062 063 @Override 064 public final long addLong(long uDecimal, long lValue) { 065 return Add.addUnscaledLongChecked(this, uDecimal, lValue); 066 } 067 068 @Override 069 public final long subtractLong(long uDecimal, long lValue) { 070 return Sub.subtractUnscaledLongChecked(this, uDecimal, lValue); 071 } 072 073 @Override 074 public final String toString(long uDecimal) { 075 return StringConversion.unscaledToString(this, uDecimal); 076 } 077 078 @Override 079 public final void toString(long uDecimal, Appendable appendable) throws IOException { 080 StringConversion.unscaledToString(this, uDecimal, appendable); 081 } 082}