public void indexSubtypeIndication(IndexSubtypeIndication indication) { if (indication.BaseType != null) { output.writeSubtypeIndication(indication.BaseType); } else { writer.Append("null"); } writer.Append('('); bool first = true; foreach (DiscreteRange range in indication.Ranges) { if (first) { first = false; } else { writer.Append(", "); } output.writeDiscreteRange(range); } writer.Append(')'); }
public void visit(IndexSubtypeIndication item) { if (item == null) { return; } baseType = item.BaseType; }
private static Signal CreateUnconstrainedArraySignal(string name, IndexSubtypeIndication si) { if (si.BaseType is UnconstrainedArray) { UnconstrainedArray arrayType = si.BaseType as UnconstrainedArray; List <ResolvedDiscreteRange> resolvedRanges = new List <ResolvedDiscreteRange>(); foreach (DiscreteRange r in si.Ranges) { if (r is Range) { int from = (ExpressionEvaluator.DefaultEvaluator.Evaluate((r as Range).From) as IntegerValue).Value; int to = (ExpressionEvaluator.DefaultEvaluator.Evaluate((r as Range).To) as IntegerValue).Value; ResolvedDiscreteRange newRange = ResolvedDiscreteRange.FormIntegerIndexes(from, to); resolvedRanges.Add(newRange); } } ModellingType resType = ModellingType.CreateModellingType(arrayType, resolvedRanges.ToArray()); resType.Constraints.Add(new IndexTypeConstraint(si)); List <AbstractSignalDump> dumps = new List <AbstractSignalDump>(); List <Signal> childrens = new List <Signal>(); int[,] resIndexes = ResolvedDiscreteRange.CombineRanges(resolvedRanges.ToArray()); for (int i = 0; i < resIndexes.GetLength(0); i++) { for (int j = 0; j < resIndexes.GetLength(1); j++) { Signal newSignal = CreateSignal(resolvedRanges[j][resIndexes[i, j]].ToString(), arrayType.IndexSubtypes[j]); childrens.Add(newSignal); dumps.Add(newSignal.Dump); } } SignalScopeDump resDump = new SignalScopeDump(name, resType, dumps); Signal resSignal = new Signal(resDump); return(resSignal); } return(null); }
public IndexTypeConstraint(IndexSubtypeIndication type) { }