public void Generate_ValueAccessStep(ValueAccessStep parentStep, ValueAccessStep accessStep) { if (!accessStep.IsFirstComponent) { Log.Append("."); } Log.Append(accessStep.GetName(parentStep)); }
public override void Visit(LanguageValueAccess valAccess) { ValueAccessStep parentStep = null; foreach (var compAccess in valAccess.AccessSteps) { Generate_ValueAccessStep(parentStep, compAccess); parentStep = compAccess; } }
public static string GetName(this ValueAccessStep accessStep, ValueAccessStep parentStep) { var stepAsRoot = accessStep as ValueAccessStepAsRootSymbol; if (stepAsRoot != null) { return(stepAsRoot.AccessSymbol.SymbolAccessName); } //if (access_step is ValueAccessStepBySymbol) //{ // return ((ValueAccessStepBySymbol)access_step).ComponentSymbol.SymbolAccessName; //} var stepByKey = accessStep as ValueAccessStepByKey <int>; if (stepByKey != null) { var c = stepByKey; var frame = ((GMacFrameMultivector)parentStep.AccessStepType).ParentFrame; return("#" + frame.BasisBladeName(c.AccessKey) + "#"); } var stepByKeyList = accessStep as ValueAccessStepByKeyList <int>; if (stepByKeyList != null) { var c = stepByKeyList; var frame = ((GMacFrameMultivector)parentStep.AccessStepType).ParentFrame; var s = new StringBuilder(); foreach (var id in c.AccessKeyList) { s.Append(frame.BasisBladeName(id)).Append(", "); } s.Length = s.Length - 2; return("@" + s + "@"); } var accessStepByKey = accessStep as ValueAccessStepByKey <string>; return (accessStepByKey != null ? accessStepByKey.AccessKey : "<unknown component>"); }
public static string GetName(this LanguageValueAccess valueAccess) { var s = new StringBuilder(); ValueAccessStep parentStep = null; foreach (var accessStep in valueAccess.AccessSteps) { if (!accessStep.IsFirstComponent) { s.Append("."); } s.Append(GetName(accessStep, parentStep)); parentStep = accessStep; } return(s.ToString()); }
/// <summary> /// Change a partial value inside the source value using the given value access step /// </summary> /// <param name="sourceValue"></param> /// <param name="valueAccessStep"></param> /// <param name="value"></param> /// <returns></returns> protected abstract ILanguageValue WritePartialValue(ILanguageValue sourceValue, ValueAccessStep valueAccessStep, ILanguageValue value);
/// <summary> /// Read a partial value from the source value using the given value access step /// </summary> /// <param name="sourceValue"></param> /// <param name="valueAccessStep"></param> /// <returns></returns> protected abstract ILanguageValue ReadPartialValue(ILanguageValue sourceValue, ValueAccessStep valueAccessStep);
protected override ILanguageValue WritePartialValue(ILanguageValue sourceValue, ValueAccessStep valueAccessStep, ILanguageValue value) { if (sourceValue.ExpressionType is GMacStructure) { var structureValue = (ValueStructureSparse)sourceValue; structureValue[((ValueAccessStepByKey <string>)valueAccessStep).AccessKey] = value; return(value); } if (!(sourceValue.ExpressionType is GMacFrameMultivector)) { throw new InvalidOperationException("Invalid source value type"); } var mvValue = (GMacValueMultivector)sourceValue; var stepByKey = valueAccessStep as ValueAccessStepByKey <int>; if (stepByKey != null) { mvValue[stepByKey.AccessKey] = (ValuePrimitive <MathematicaScalar>)value; } else { var stepByKeyList = valueAccessStep as ValueAccessStepByKeyList <int>; if (stepByKeyList == null) { throw new InvalidOperationException("Invalid access step for a multivector"); } mvValue[stepByKeyList.AccessKeyList] = (GMacValueMultivector)value; } return(value); }
protected override ILanguageValue ReadPartialValue(ILanguageValue sourceValue, ValueAccessStep valueAccessStep) { if (sourceValue.ExpressionType is GMacStructure) { var structureValue = (ValueStructureSparse)sourceValue; return(structureValue[((ValueAccessStepByKey <string>)valueAccessStep).AccessKey]); } if (!(sourceValue.ExpressionType is GMacFrameMultivector)) { throw new InvalidOperationException("Invalid source value type"); } var mvValue = (GMacValueMultivector)sourceValue; var stepByKey = valueAccessStep as ValueAccessStepByKey <int>; if (stepByKey != null) { return(mvValue[stepByKey.AccessKey]); } var stepByKeyList = valueAccessStep as ValueAccessStepByKeyList <int>; if (stepByKeyList != null) { return(mvValue[stepByKeyList.AccessKeyList]); } throw new InvalidOperationException("Invalid access step for a multivector"); }
public void SetComponentValue(ValueAccessStep accessStep, ILanguageValue value) { throw new NotImplementedException(); }
public ILanguageValue GetComponentValue(ValueAccessStep accessStep) { throw new NotImplementedException(); }