Exemplo n.º 1
0
        public static void Add_FromMethods(Type t, XValueTypeName valueTypeName,
                                           TypesGroup types, CsClass target, IRelatedUnitDefinition u)
        {
#if DEBUG
            if (target.Name == "Power")
            {
                System.Diagnostics.Debug.Write("");
            }
#endif
            foreach (var inputType in "decimal,double,int,long".Split(','))
            {
                var arg = "value";
                if (inputType == OtherValuePropertyType)
                {
                    arg = $"({ValuePropertyType}){arg}";
                }

                var args = new CsArguments(arg, types.Container + "." + u.FieldName)
                           .Create(target.Name);
                var valueIn           = $" value in {u.UnitShortCode.EffectiveValue}";
                var methodName        = "From" + u.FromMethodNameSufix.CoalesceNullOrWhiteSpace(u.FieldName);
                var methodDescription = $"creates {types.Value.FirstLower()} from{valueIn}";

                var cw = Ext.Create(t);
                cw.WriteReturn(args);
                var m = target.AddMethod(methodName, target.Name, methodDescription)
                        .WithStatic()
                        .WithBody(cw);
                m.AddParam("value", inputType).Description = string.Format("{0}{1}", valueTypeName, valueIn);
            }
        }
Exemplo n.º 2
0
        /// <summary>
        ///     Creates instance
        /// </summary>
        /// <param name="value">Name of type that contains value and unit i.e. Length</param>
        /// <param name="unit">Name of type that represents unit i.e. LengthUnit</param>
        /// <param name="container">Name of static type that contains fields with known unit names i.e. LengthUnits</param>
        public TypesGroup(XValueTypeName value, XUnitTypeName unit = null, XUnitContainerTypeName container = null)
        {
            Value = value ?? throw new ArgumentException(nameof(value));

            ValueKind = Value.Kind;
            Unit      = unit ?? value.ToUnitTypeName();
            Container = container ?? Unit.ToUnitContainerTypeName();
        }
Exemplo n.º 3
0
 public RelatedUnit ByName(XValueTypeName name)
 {
     if (_dictionary.TryGetValue(name, out var x))
     {
         return(x);
     }
     return(null);
 }
        private static CommonFractionalUnit Make <T>(string counterUnit, string denominatorUnit,
                                                     string targetPropertyName = null)
        {
            if (targetPropertyName is null)
            {
                targetPropertyName = $"{counterUnit}sPer{denominatorUnit}s";
            }
            var typeName = new XValueTypeName(typeof(T).Name);

            return(new CommonFractionalUnit(new TypesGroup(typeName), counterUnit, denominatorUnit,
                                            targetPropertyName));
        }
Exemplo n.º 5
0
        public RelatedUnit WithTime(int power)
        {
            var g = new[]
            {
                new PrefixedUnitInfo("MiliSecond", "ms", 0.001m),
                new PrefixedUnitInfo("Second", "s", 1m),
                new PrefixedUnitInfo("Minute", "min", 60, "Minutes"),
                new PrefixedUnitInfo("Hour", "h", 3600, "Hours"),
                new PrefixedUnitInfo("Year", "y", Time.SecondsPerYear, "Years")
            };

            var values = XValueTypeName.FromSplit(',', "Time,SquareTime");

            return(WithPowerDerivedUnits(power, g, values));
        }
Exemplo n.º 6
0
        public RelatedUnit WithLengths(int power)
        {
            var g = new[]
            {
                new PrefixedUnitInfo("Meter", "m", 1m),
                new PrefixedUnitInfo("Km", "km", 1000m, "Kilometers"),
                new PrefixedUnitInfo("Dm", "dm", 0.1m, "Decimeters"),
                new PrefixedUnitInfo("Cm", "cm", 0.01m, "Centimeters"),
                new PrefixedUnitInfo("Mm", "mm", 0.001m, "Milimeters"),
                new PrefixedUnitInfo("Inch", "inch", 0.0254m, "Inches"),
                new PrefixedUnitInfo("Feet", "ft", 0.3048m, "Foot"),
                new PrefixedUnitInfo("Yard", "yd", 0.9144m, "Yards"),
                new PrefixedUnitInfo("Furlong", "fg", 201.1680m, "Furlongs"),
                new PrefixedUnitInfo("Fathom", "fh", 1.8288m),
                new PrefixedUnitInfo("Mile", "mil", 1609.344m, "Miles"),
                new PrefixedUnitInfo("NauticalMile", "nm", 1852m, "NauticalMiles")
            };

            return(WithPowerDerivedUnits(power, g, XValueTypeName.FromSplit(',', "Length,Area,Volume")));
        }
Exemplo n.º 7
0
        private static void Scenario_Mul_Basic_Fract <THigh, TResult>(
            OperatorCodeBuilderInput input,
            string rightDenominator,
            [CanBeNull] XValueTypeName resultDenominator)
        {
            var v1 = resultDenominator?.FirstLower() + "Unit";
            var v2 = rightDenominator.FirstLower() + "Unit";

            input.AddVariable("rightArgumentUnit", "$(right).Unit");
            if (resultDenominator == input.OperatorParameters.Left.Value)
            {
                v1 = input.Replace("$(left).Unit");
            }
            else
            {
                input.AddVariable(v1, "$(left).Unit.Get" + resultDenominator + "Unit()");
            }

            input.AddVariable(v2, "$(left).Unit.Get" + rightDenominator + "Unit()");
            input.AddVariable <THigh>("x3", "rightArgumentUnit.CounterUnit", v2);
            input.ConvertRight("x3");
            input.WithResultUnit <TResult>("rightArgumentUnit.CounterUnit", v1);
        }
Exemplo n.º 8
0
        private void Add_Algebra_PlusMinus()
        {
            const string right = "right";
            const string left  = "left";

            var delta = BasicUnitDefs.All.GetDeltaByUnit(Cfg.UnitTypes.Unit);

            if (delta != null)
            {
                if (delta.UnitTypes.Value == Cfg.UnitTypes.Value)
                {
                    delta = null;
                }
            }

            void AddPlusOrMinus(string op, XValueTypeName lt, XValueTypeName rt)
            {
                var resultType = Cfg.UnitTypes.Value;

                if (delta != null && op == "-")
                {
                    resultType = delta.UnitTypes.Value;
                }

                string CreateResultFromVariable(string varName, XValueTypeName srcType, bool addMinus = false)
                {
                    var result = addMinus ? "-" + varName : varName;

                    if (delta is null || srcType == resultType)
                    {
                        return(result);
                    }

                    var unitSource = varName;

                    if (lt != rt)
                    {
                        if (lt == resultType)
                        {
                            unitSource = left;
                        }
                        else if (rt == resultType)
                        {
                            unitSource = right;
                        }
                        else
                        {
                            throw new NotSupportedException();
                        }
                    }

                    result = new CsArguments(result + ".Value", unitSource + ".Unit").Create(resultType.ValueTypeName);
                    return(result);
                }

                var cw = Ext.Create <BasicUnitValuesGenerator>();

                var result1   = CreateResultFromVariable(right, rt, op == "-");
                var condition =
                    $"{left}.Value.Equals({ValuePropertyType}.Zero) && string.IsNullOrEmpty({left}.Unit?.UnitName)";

                cw.SingleLineIf(condition, ReturnValue(result1));

                result1   = CreateResultFromVariable(left, lt);
                condition =
                    $"{right}.Value.Equals({ValuePropertyType}.Zero) && string.IsNullOrEmpty({right}.Unit?.UnitName)";
                cw.SingleLineIf(condition, ReturnValue(result1));

                cw.WriteLine($"{right} = {right}.ConvertTo({left}.Unit);");
                var returnExpression = new CsArguments($"{left}.Value {op} {right}.Value", $"{left}.Unit")
                                       .Create(resultType.ValueTypeName);

                cw.WriteLine(ReturnValue(returnExpression));
                Target.AddMethod(op, resultType.ValueTypeName)
                .WithLeftRightArguments(lt.ValueTypeName, rt.ValueTypeName)
                .WithBody(cw);
            }

            var targetName = new XValueTypeName(Target.Name);

            AddPlusOrMinus("-", targetName, targetName);
            if (delta != null)
            {
                AddPlusOrMinus("+", targetName, delta.UnitTypes.Value);
                AddPlusOrMinus("+", delta.UnitTypes.Value, targetName);
            }
            else
            {
                AddPlusOrMinus("+", targetName, targetName);
            }
        }
Exemplo n.º 9
0
 public ProductUnit ByValueTypeName(XValueTypeName valueTypeName)
 {
     _d.TryGetValue(valueTypeName, out var tmp);
     return(tmp);
 }
Exemplo n.º 10
0
 public bool Equals(XValueTypeName other)
 {
     return(ValueTypeName.Equals(other.ValueTypeName));
 }
Exemplo n.º 11
0
 public RelatedUnit(string name)
 {
     Name = new XValueTypeName(name);
 }
Exemplo n.º 12
0
 public RelatedUnit(XValueTypeName name)
 {
     Name = name;
 }
 public FractionUnit ByValueTypeName(XValueTypeName valueTypeName)
 {
     _d.TryGetValue(valueTypeName, out var tmp);
     return(tmp);
 }