/// <summary> /// Returns AInteger or AFloat based on the input number. /// If the number can be represented as an integer return AInteger /// otherwise return AFloat. /// </summary> /// <param name="number"></param> /// <returns></returns> public static AType CreateATypeResult(double number) { int result; if (ConvertDoubleToInteger(number, out result)) { return(AInteger.Create(result)); } return(AFloat.Create(number)); }
private static void PerformIndexAssign(AType target, AType value) { if (target.Rank > 0) { for (int i = 0; i < target.Length; i++) { PerformIndexAssign(target[i], value.IsArray ? value[i] : value); } } else { AValue result; if (target.Type == value.Type) { result = value.Clone().Data; } else if (target.Type == ATypes.AInteger && value.Type == ATypes.AFloat) { int number; if (!value.ConvertToRestrictedWholeNumber(out number)) { throw new Error.Type("assign"); } result = AInteger.Create(number).Data; } else if (target.Type == ATypes.AFloat && value.Type == ATypes.AInteger) { result = AFloat.Create(value.asInteger).Data; } else { throw new Error.Type("Assign"); } if (target.IsMemoryMappedFile) { ((IMapped)target.Data).Update(result); } else { target.Data = result; } } }
/// <summary> /// AArray generated by type and shape with Reshape dyadic nonscalar function. /// If shape list is null, we give back the filler elemenet. /// </summary> /// <param name="type"></param> /// <param name="shape"></param> internal static AType FillElement(ATypes type, AType shape = null) { AType filler = null; switch (type) { case ATypes.ABox: case ATypes.AFunc: filler = ABox.Create(ANull()); break; case ATypes.AChar: filler = AChar.Create(' '); break; case ATypes.AFloat: filler = AFloat.Create(0); break; case ATypes.AInteger: filler = AInteger.Create(0); break; case ATypes.ASymbol: filler = ASymbol.Create(""); break; default: throw new NotImplementedException("Invalid use-case"); } if (shape != null) { return(AplusCore.Runtime.Function.Dyadic.DyadicFunctionInstance.Reshape.Execute(filler, shape)); } else { return(filler); } }
/// <summary> /// Converts AType elements to float /// </summary> public static AType ConvertToFloat(this AType input) { if (input.Type != ATypes.AFloat && input.Type != ATypes.AInteger && input.Type != ATypes.AArray) { throw new Error.Type("Conversion"); } if (input.IsArray) { for (int i = 0; i < input.Length; i++) { input[i] = Utils.ConvertToFloat(input[i]); } input.Type = ATypes.AFloat; return(input); } else { return(AFloat.Create(input.asFloat)); } }