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); } }