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(')');
        }
Example #2
0
 public void visit(IndexSubtypeIndication item)
 {
     if (item == null)
     {
         return;
     }
     baseType = item.BaseType;
 }
Example #3
0
        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)
 {
 }