Esempio n. 1
0
        private static AArray flatten(AArray what, FlattenSharedState fss)
        {
            var processedFields   = new List <AValue>();
            var atLeastOneChanged = false;

            foreach (var origElement in what.elements)
            {
                if (origElement.Type == ValueTypes.STRUCT)
                {
                    var flattened = flatten(origElement.castTo <AStruct>(), fss);
                    processedFields.Add(flattened);
                    if (!object.ReferenceEquals(flattened, origElement))
                    {
                        atLeastOneChanged = true;
                    }
                }
            }

            if (atLeastOneChanged)
            {
                return(new AArray(processedFields, what.correspondingDaiFields));
            }
            else
            {
                return(what);
            }
        }
Esempio n. 2
0
 private static AStruct flatten(AStruct what, FlattenSharedState fss)
 {
     if (what.fields.ContainsKey("$"))
     {
         var flattened = new AStruct();
         flattened.name = what.name;
         flattened.correspondingDaiFields = what.correspondingDaiFields;
         doFlatten(what, flattened, fss);
         return(flattened);
     }
     else
     {
         return(what);
     }
 }
Esempio n. 3
0
        private static void doFlatten(AStruct toProcess, AStruct toAdd, FlattenSharedState fss)
        {
            foreach (var field in toProcess.fields)
            {
                if (field.Key.Equals("$"))
                {
                    doFlatten(field.Value.castTo <AStruct>(), toAdd, fss);
                }
                else
                {
                    AValue val;
                    var    ftype = field.Value.Type;
                    if (ftype == ValueTypes.STRUCT)
                    {
                        val = flatten(field.Value.castTo <AStruct>(), fss);
                    }
                    else if (ftype == ValueTypes.ARRAY)
                    {
                        val = flatten(field.Value.castTo <AArray>(), fss);
                    }
                    else
                    {
                        val = field.Value;
                    }

                    string key;
                    if (toAdd.fields.ContainsKey(field.Key))
                    {
                        key = $"{field.Key}_{fss.nonUniquesCounter++}";
                    }
                    else
                    {
                        key = field.Key;
                    }

                    toAdd.fields.Add(key, val);
                }
            }
        }