private UnitElement <S, T> ExtractUnitElement(UnitElement <S, T> unitElement, string data, int noPosition, int unitStartPos, int unitStopPos, int powerStartPos, int powerStopPos, bool divideNextElement) { long power = 1; if (powerStartPos == noPosition && powerStopPos != noPosition) { throw new UnitParserException(string.Format("Incohenrent power state : power stop pos = ({0}) while there is no power start pos", powerStopPos)); } if (powerStartPos != noPosition && powerStopPos == noPosition) { throw new UnitParserException(string.Format("Incohenrent power state : power start pos = ({0}) while there is no power stop pos", powerStartPos)); } if (powerStartPos != noPosition && powerStopPos != noPosition) { power = ParsePower(data.Substring(powerStartPos, powerStopPos - powerStartPos)); } var unitName = GetUnitName(data.Substring(unitStartPos, unitStopPos - unitStartPos)); var unitNamePower = new UnitNamePower <S, T>(unitName, divideNextElement ? -power : power); if (unitElement == null) { unitElement = new UnitElement <S, T>(unitNamePower); } else { unitElement = new UnitElement <S, T>(unitElement.GetUnitNamePowers().Concat(new UnitNamePower <S, T>[] { unitNamePower })); } return(unitElement); }
private S GetFactor(UnitNamePower <S, T> unitNamePower) { return(ApplyScalarPower ( unitNamePower.UnitName.Prefix.Factor, unitNamePower.UnitName.Prefix.Invert, unitNamePower.UnitName.BaseName.Factor, unitNamePower.Power )); }
protected void AddReference(UnitNamePower <S, T> reference) { AddReference(new UnitElement <S, T>(reference)); }