示例#1
0
        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);
        }
示例#2
0
 private S GetFactor(UnitNamePower <S, T> unitNamePower)
 {
     return(ApplyScalarPower
            (
                unitNamePower.UnitName.Prefix.Factor,
                unitNamePower.UnitName.Prefix.Invert,
                unitNamePower.UnitName.BaseName.Factor,
                unitNamePower.Power
            ));
 }
示例#3
0
 protected void AddReference(UnitNamePower <S, T> reference)
 {
     AddReference(new UnitElement <S, T>(reference));
 }